Разрешите представиться – проект FLProg

e5b43a5a40fc4a76a7d237ad0304d937.jpg

Добрый день.

Меня зовут Сергей Глушенко, и я являюсь автором проекта FLProg. Данный блог посвящён этому проекту, и здесь я буду рассказывать о новостях проекта, и достижениях участников сообщества пользователей программы. Проект посвящён созданию визуальной среды программирования плат Arduino, и поэтому прежде чем рассказывать о программе FLProg, я хочу сделать небольшой обзор существующих программ предназначенных для программирования этих плат.

Среды программирования плат ардуино можно разделить на следующие типы:

  1. Прокачанные «Блокноты»
  2. Текстовые среды разработки
  3. Графические среды, визуализирующие структуру кода.
  4. Графические среды, отображающие код в виде графики.
  5. Визуальные среды программирования, не использующие кода.


Рассмотрим каждый тип.

Прокачанные «Блокноты»

К этому типу относятся оригинальная среда программирования Arduino-IDE, а так же множество её клонов.

f2b23aeb31024cc2b90355861641b809.PNG

Проектирование программы для контроллера в ней происходит на языке Processing/Wiring, который является диалектом языка Си (скорее Си++). Эта среда представляет собой, по сути, обычный текстовый редактор с возможностью загрузки написанного кода в контроллер

Текстовые среды разработки

Альтернативой Arduino IDE является среда разработки от производителя микроконтроллеров Atmel — AVRStudio.

1bec7a6ff3b64c49a28516c1b6ba9099.png

Программирование в ней ведётся на чистом C, и она уже имеет намного больше возможностей и более похожа на серьёзные IDE для «настоящих» языков программирования.

Эти два типа программ рассчитаны на опытных программистов, которые хорошо знают язык и могут с помощью них создавать серьёзные проекты.

Графические среды, визуализирующие структуру кода.

Это программы, которые, по сути, являются расширением форматирования для обычного текстового редактора кода. В нем программа так же пишется на языке С, но в более удобном варианте. Сейчас таких сред очень много, самые яркие примеры: Scratch, S4A, Ardublock. Они очень хорошо подходят для начального обучения программированию на языке С, поскольку отлично показывают структуру и синтаксис языка. Но для больших серьёзных проектов программа получается громоздкой.

db88e9a366c8431ea59d8ad35f6f9d03.jpg

Графические среды, отображающие код в виде графики

Это программы, скрывающие код и заменяющие его графическими аналогами. В них так же повторяется структура языка, формируются циклы, переходы, условия. Так же очень хорошо подходят для обучения построению алгоритмов, с последующим переходом на программирование на классических языках. И так же не подходят для построения больших проектов ввиду громоздкости получаемого отображения. Пример такой программы: MiniBlog, Algorithm Builder, Flowcode

4eb81ee2a90b451887aa7a618f5e6c2f.png

Описанные выше типы программ рассчитаны на программистов или на тех, кто решил изучать классическое программирование. Но для изготовления конечного устройства кроме непосредственно программирования контроллера обычно требуется разработка внешней обвязки платы, разработка и расчет силовой части, входных развязок и многого другого. С этим у программистов часто возникают проблемы. Зато с этим прекрасно справляются электрики и электронщики. Но среди них мало программистов, которые смогли бы составить программу для контроллера. Сочетание программиста и электронщика — достаточно редкий случай. В результате такой ситуации реальных, законченных проектов на основе плат Arduino (да и других контроллеров) единицы. Для решения этой проблемы и служат программы последнего типа.

Визуальные среды программирования, не использующие кода.

Данные программы реализуют принцип, который уже много лет применяется практически всеми производителями контроллеров промышленного применения. Он заключается в создании программ для контроллера на языках FBD или LAD. Собственно говоря, как таковыми языками они не являются. Это, скорее, графические среды для рисования принципиальных или логических схем. Вспомним, что процессоры далеко не всегда были микропроцессорами, а создавались на базе цифровых микросхем. Поэтому тем, кто привык работать с цифровой техникой, больше понравится работа на них, чем написание кода на классических языках программирования. Примером таких программ являются проекты Horizont и FLProg. Программы этого типа хорошо подходят как для изучения построения импульсной и релейной техники, так и для создания серьезных проектов.

c706671bae264eaabaa627a4f4eb86c9.png
Ну и наконец, герой этого блога, проект FLProg.

Поскольку я много лет работаю разработчиком систем АСУТП, я постарался собрать в программе FLProg все, что мне наиболее понравилось в средах от ведущих производителей промышленного оборудования (Tia-Portal, Zelio Soft, Logo Soft Comfort).
Программа позволяет составлять схемы в двух видах: функциональные схемы (FBD) и релейные схемы (LAD).

eec1b0d3add242ecbe41905508e557d3.PNG

FBD (Function Block Diagram) — графический язык программирования стандарта МЭК 61131–3. Программа образуется из списка цепей, выполняемых последовательно сверху вниз. При программировании используются наборы библиотечных блоков. Блок (элемент) — это подпрограмма, функция или функциональный блок (И, ИЛИ, НЕ, триггеры, таймеры, счётчики, блоки обработки аналогового сигнала, математические операции и др.). Каждая отдельная цепь представляет собой выражение, составленное графически из отдельных элементов. К выходу блока подключается следующий блок, образуя цепь. Внутри цепи блоки выполняются строго в порядке их соединения. Результат вычисления цепи записывается во внутреннюю переменную либо подается на выход контроллера.


ad4dcf4b8801473ab15b18728a008df2.PNG

Ladder Diagram (LD, LAD, РКС) — язык релейной (лестничной) логики. Синтаксис языка удобен для замены логических схем, выполненных на релейной технике. Язык ориентирован на специалистов по автоматизации, работающих на промышленных предприятиях. Обеспечивает наглядный интерфейс логики работы контроллера, облегчающий не только задачи собственно программирования и ввода в эксплуатацию, но и быстрый поиск неполадок в подключаемом к контроллеру оборудовании. Программа на языке релейной логики имеет наглядный и интуитивно понятный инженерам-электрикам графический интерфейс, представляющий логические операции, как электрическую цепь с замкнутыми и разомкнутыми контактами. Протекание или отсутствие тока в этой цепи соответствует результату логической операции (истина — если ток течет; ложь — если ток не течет). Основными элементами языка являются контакты, которые можно образно уподобить паре контактов реле или кнопки. Пара контактов отождествляется с логической переменной, а состояние этой пары — со значением переменной. Различаются нормально замкнутые и нормально разомкнутые контактные элементы, которые можно сопоставить с нормально замкнутыми и нормально разомкнутыми кнопками в электрических цепях.


Такой способ программирования оказался очень удобным для легкого вхождения в разработку систем АСУ инженеров-электриков и электронщиков. Разрабатывая проекты устройств, они могут легко привязать работу этих установок к алгоритмам работы контроллера.

Построенная на этих представлениях программа FLProg работает с Arduino. Почему?
Плата очень удобна для быстрой разработки и отладки своих устройств, что важно не только радиолюбителям, но весьма полезно, например, и в школьных кружках, и в учебных лабораториях колледжей. Одно из преимуществ — вам не нужен программатор. Вы подключаете плату Arduino к компьютеру и готовую программу загружаете из среды разработки. В настоящее время существует богатый выбор модулей Arduino, дополнительных модулей, работающих с Arduino, датчиков и исполняющих устройств.

В настоящее время программой поддерживаются следующие версии Arduino: Arduino Diecimila, Arduino Duemilanove, Arduino Leonardo, Arduino Lilypad, Arduino Mega 2560, Arduino Micro, Arduino Mini, Arduino Nano (ATmega168), Arduino Nano (ATmega328), Arduino Pro Mini, Arduino Pro (ATmega168), Arduino Pro (ATmega328), Arduino UNO. Кроме того недавно в списке поддерживаемых контроллеров появилась плата Intel Galileo gen2. В дальнейшем предполагается пополнение и этого списка, и, возможно, добавление плат, основанных на контроллерах STM.

b55ac36399e845368377eed944605612.PNG

Проект в программе FLProg представляет собой набор своеобразных плат, на каждой из которых собран законченный модуль общей схемы. Для удобства работы каждая плата имеет наименование и комментарии. Также каждую плату можно свернуть (для экономии места в рабочей зоне, когда работа над ней закончена) и развернуть.

Состав библиотеки элементов для языка FBD на текущий момент.
Оформление
  • Надпись
  • Изображение

Базовые элементы
  • [OR]
  • [AND]
  • [Bounce]
  • [XOR]
  • Таблица состояний

Специальные блоки
Тригеры
  • [SR]
  • [TT]
  • [Rtrig]
  • [RS]

Таймеры
  • [Timer]
  • [Generator]

Счетчики
  • [SpeedCounter]
  • [Counter]

Математика
  • [SUM (+)]
  • [MUL (*)]
  • [SUB (-)]
  • [DIV (/)]

Алгебра
  • [COS]
  • [ABS]
  • [MAX]
  • [POW]
  • [SQRT]
  • [TAN]
  • [MIN]
  • [SQ]
  • [RANDOM]
  • [SIN]

Сравнение
  • [Comparator]

UART
  • Отправка в UART
  • Приём из UART
  • Отправка переменной в UART
  • Прием переменной из UART

Переключатель
  • [SWITCH]
  • [MUX]
  • [DMS]

Моторы
  • ServoMotor
  • StepMotor

Часы реального времени
  • [Alarm]
  • [GetTime]
  • [SetTime]

Дисплеи
  • Дисплей на чипе НD44780
  • Подсветка дисплея на чипе НD44780 I2C
  • Блок декодирования семисегментного индикатора

Строки
  • Сложение строк
  • Сравнение строк
  • Длинна строки
  • Поиск подстроки
  • Получение подстроки
  • Получить символ из строки
  • Добавить Char к строке

Массивы
  • Запись элемента в массив
  • Получение элемента массива
  • Сумма элементов массива
  • Стек
  • Поиск элемента в массиве

Датчики
  • [DS18×2x]
  • [IR Ressive]
  • [Ultrasonic HC-SR04]
  • [DHT11, DHT21, DHT22]
  • [BMP-085]
  • [BH1750LightMeter]

SD карта
  • Выгрузка файла с SD карты
  • Запись переменной на SD карту

Конвертация типов
  • Преобразование Float в Integer
  • Преобразование строк
  • → Byte
  • → Char

Микросхемы расширений
  • Расширитель выводов 74HC595
  • Драйвер светодиодов MAX7219

Операции с битами
  • Дешифратор
  • Шифратор
  • Чтение бита
  • Запись бита

Разное
  • Матричная клавиатура
  • Пьезо динамик
  • Сканирование шины OneWare

EEPROM
  • Запись в EEPROM
  • Чтение из EEPROM

Коммуникации
  • RessiveVariableFromCommunication
  • WebServerPage
  • SendVariableFromCommunication
  • WebClient

Готовые сервисы
  • narodmon.ru
  • goplusplatform.com
  • Удалённое управление через RemoteXY


Состав библиотеки элементов для языка LAD на текущий момент.
Оформление
  • Надпись
  • Изображение

Базовые блоки
  • Контакт
  • Катушка
  • Защита от дребезга
  • Выделение переднего фронта
  • Таблица состояний

Специальные реле
  • Двустабильное реле
  • Реле времени
  • Генератор
  • Реле сравнения

Алгебра
  • SIN
  • COS
  • TAN
  • ABS
  • MAX
  • MIN
  • SQ
  • SQRT
  • POW
  • RANDOM

Аналоговые блоки
  • Масштабирование
  • Математика
  • Счетчик
  • Аналоговый переключатель
  • Переключатель много к одному
  • Переключатель один ко многим
  • Аналоговый вход контроллера
  • Аналоговый выход контроллера
  • Вход аналогового соеденителя
  • Выход аналогового соеденителя
  • Скоростной счетчик

UART
  • Отправка в UART
  • Приём из UART
  • Отправка переменной в UART
  • Прием переменной из UART

Моторы
  • Сервомотор
  • Шаговый двигатель

Часы реального времени
  • Получить данные
  • Будильник
  • Установка времени

Дисплеи
  • Дисплей на чипе HD44780
  • Блок управления подсветкой дисплея на чипе HD4480 I2C
  • Блок декодирования семисегментного индикатора

Строки
  • Сложение строк
  • Сравнение строк
  • Длинна строки
  • Поиск подстроки
  • Получение подстроки
  • Получить символ из строки
  • Добавить Char к строке

Массивы
  • Запись элемента в массив
  • Получение элемента массива
  • Сумма элементов массива
  • Стек
  • Поиск элемента в массиве

Датчики
  • Ульразвуковой дальномер HC-SR04
  • Датчик температуры и влажности DHT11 (DHT21, DHT22)
  • Датчик температуры DS18×2x
  • IR Ressive
  • BMP-085
  • BH1750 Light Meter

SD карта
  • Запись переменной на SD карту
  • Выгрузка файла с SD карты

Конвертирование типов
  • Конвертация строк
  • Преобразование Float в Integer
  • → Byte
  • → Char

Микросхемы расширений
  • Расширитель выводов 74HC595
  • Драйвер светодиодов MAX7219

Операции с битами
  • Шифратор
  • Дешифратор
  • Чтение бита
  • Запись бита

Разное
  • Матричная клавиатура
  • Пьезо динамик
  • Сканирование шины OneWare

EEPROM
  • Запись в EEPROM
  • Чтение из EEPROM

Коммуникации
  • Блок отправки переменной через коммуникации
  • Прием переменной через коммуникации
  • Страница Web сервера
  • Web клиент

Готовые сервисы
  • Передача данных на narodmon.ru
  • Удалённое управление через RemoteXY

Более подробно о проекте я расскажу в последующих постах, а напоследок небольшое видео показывающее принципы работы в программе и возможность управления платой из приложения на смартфоне.

© Geektimes