Для електронників та електриків все гірше. До останнього часу для того, щоб створити свій пристрій із застосуванням мікроконтролера, вони мали два шляхи. Або самим вивчати мову програмування “С”, або просити допомоги у програміста. Обидва шляхи не найкращі. Для того щоб стати програмістом, необхідний певний склад розуму, не завжди сумісний з досвідом читання електричних схем. А знайомого програміста може не опинитися під рукою.
В той же час давно існують середовища програмування, адаптовані під звичайного інженера – електронника, ну або просто електрика. Я маю на увазі програмування промислових контролерів. ПЛК. Вони дозволяють створювати програмне забезпечення для контролерів мовами FBD та LAD. Власне, як такими мовами вони не є. Це, швидше, графічні середовища для малювання принципових чи логічних схем.
FBD (Function Block Diagram)
– графічна мова програмування стандарту МЕК 61131-3. Програма утворюється зі списку ланцюгів, що виконуються послідовно зверху вниз. Під час програмування використовуються набори бібліотечних блоків. Блок (елемент) – це підпрограма, функція або функціональний блок (І, АБО, НЕ, тригери, таймери, лічильники, блоки обробки аналогового сигналу, математичні операції та ін.). Кожен окремий ланцюг є виразом, складеним графічно з окремих елементів. До виходу блоку підключається блок, утворюючи ланцюг. Усередині ланцюга блоки виконуються суворо порядку їх з’єднання. Результат обчислення ланцюга записується у внутрішню змінну або подається на вихід контролера.
Ladder Diagram (LD, LAD, РКС)
– мова релейної (сходової) логіки. Синтаксис мови зручний заміни логічних схем, виконаних на релейної техніці. Мова орієнтована інженерів з автоматизації, що працюють на промислових підприємствах. Забезпечує наочний інтерфейс логіки роботи контролера, що полегшує не тільки завдання власне програмування та введення в експлуатацію, але й швидкий пошук неполадок у обладнанні, що підключається до контролера. Програма мовою релейної логіки має наочний та інтуїтивно зрозумілий інженерам-електрикам графічний інтерфейс, що представляє логічні операції, як електричний ланцюг із замкнутими та розімкненими контактами. Протікання або відсутність струму в цьому ланцюзі відповідає результату логічної операції (істина – якщо струм тече; брехня – якщо струм не тече). Основними елементами мови є контакти, які можна образно уподібнити до пари контактів реле або кнопки. Пара контактів ототожнюється з логічною змінною, а стан цієї пари – зі значенням змінної. Розрізняються нормально замкнуті та нормально розімкнені контактні елементи, які можна порівняти з нормально замкнутими та нормально розімкненими кнопками в електричних ланцюгах.
Такий підхід виявився дуже зручним для легкого входження у розробку систем АСУ інженерів-електриків та електронників. Розробляючи проекти установок, могли легко прив’язати роботу цих установок до алгоритмів роботи контролера. В обслуговуванні цих установок на об’єкті також краще, коли існуючий обслуговуючий персонал може легко перевірити роботу системи АСУ, знайти проблему. І при цьому немає необхідності викликати по кожній дрібниці програміста з «Центру». І це підхід себе виправдав. На сьогоднішній день майже всі системи промислової автоматики створено за допомогою таких засобів розробки.
Таке середовище розробки є у Siemens, ABB, Schneider Electric… та й практично у всіх виробників ПЛК. Здавалося б, ідеальне рішення для любителів саморобок. Але, як завжди, є «але». Всі ці середовища програмування прив’язані до промислових контролерів певного виробника. І ціни на ці контролери мало надихають. Дуже рідко який сімейний бюджет дозволить придбати контролер ціною кілька десятків тисяч рублів.
Зате плати Arduino ідеально підходять для саморобів та кулібіних, на яких наша країна завжди була, є і буде багата. Але знову «але». Програмуються ці плати мовою C. Для більшості цих найрозумніших людей, з дуже прямими руками, що ростуть із належного місця, мова С. це китайська абетка. Вони можуть придумати, намалювати, зібрати, налагодити та запустити найскладніші схеми, але If, For, Case, Void тощо. – це не для них. Звичайно, можна почитати інструкції в інтернеті, погратися якийсь час, поблимати світлодіодом за допомогою прикладу. Але для більш серйозного застосування потрібне детальне вивчення мови. А навіщо їм це?
Вони не збираються бути професійними програмістами. Вони мають інший шлях. Вони щось вигадали. Так, це простіше та красивіше зібрати за допомогою мікроконтролера, але стає для цього програмістом, витративши місяці на вивчення мови? Ні звичайно. Збирають по-старому, простіше, звичайно, але у своїй області.
На підставі всіх цих викладок і було створено проект FLProg. Основна ідея проекту – поєднати принципи промислового програмування з дешевизною та зручністю Arduino. Проект пропонує новий рівень абстракції із досить сміливою заявою –
Щоб програмувати мікроконтролери не обов’язково знати мови програмування!
В результаті вийшов інструмент, що дозволяє створювати свої проекти на Arduino будь-якій людині, знайомій з електротехнікою та електронікою, що дозволяє створити свій виріб з використанням даних плат.
Проект складається з двох частин.
Перша частина – це десктоп-додаток FLProg, що є графічним середовищем програмування плат Arduino.
По-друге, це цей сайт, за допомогою якого члени спільноти користувачів програми можуть поспілкуватися між собою, дізнатися про останні новини проекту, завантажити останню версію програми, ну і знайти необхідну інформацію щодо роботи з додатком.
Почнемо по порядку
Програма FLProg дозволяє створювати прошивки для плат Arduino за допомогою графічних мов FBD та LAD, які є стандартом у галузі програмування промислових контролерів. При створенні програми я постарався максимально використовувати напрацювання програмістів Siemens, ABB, Schneider Electric у середовищі програмування.
Я трохи розширив класичний функціонал цих мов, додавши функціональні блоки, які відповідають за роботу із зовнішніми пристроями. Вони є обгортками над бібліотеками, призначеними для роботи з ними. Програма працює на комп’ютері під керуванням OS Windows, Linux-32 і Linux-64
При створенні нового проекту вам запропонують вибрати мову програмування, на якій ви будете створювати проект, і контролер, на якому цей проект буде реалізований.
Ось список плат 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
Проект FLProg являє собою набір плат, на кожній з яких зібраний закінчений модуль загальної схеми. Для зручності роботи кожна плата має найменування та коментарі. Так само кожну плату можна згорнути (для економії місця у робочій зоні, коли робота над нею закінчена) та розгорнути. Червоний індикатор у найменуванні плати вказує на те, що у схемі плати є помилки. З часом, у міру придбання, планується підтримка плат, заснованих на контролерах STM.
Вигляд вікна програми в режимі мови FBD.
Вигляд вікна програми в режимі мови LAD.
У правій частині робочої зони розташована бібліотека елементів. У схему елементи переносяться простим перетягуванням. При подвійному натисканні елемента буде показано інформацію про нього.
Ось список блоків доступних на сьогоднішній день
Мотори
ServoMotor
StepMotor
Годинник реального часу
[Alarm]
[GetTime]
[SetTime]
дисплеї
Дисплей на чіпі НD44780
Підсвічування дисплея на чіпі НD44780 I2C
Блок декодування семисегментного індикатора
Рядки
Складання рядків
Датчики
[Ultrasonic HC-SR04]
[DHT11, DHT21, DHT22]
[DS18x2x]
[IR Ressive] [BMP-085]
SD картка
Запис змінної на карту SD
Вивантаження файлу з картки SD
Конвертація типів
Перетворення рядків
Перетворення Float на Integer
Мікросхеми розширень
Розширювач висновків 74HC595
Операції з бітами
Шифратор
Дешифратор
Читання біта
Запис біта
Різне
Матрична клавіатура
П’єзодинамік
EEPROM
Запис в EEPROM
Читання з EEPROM
Комунікації
SendVariableFromCommunication
ResitiveVariableFromCommunication
WebServerPage
WebClient
Базові елементи
[XOR]
[AND]
[OR]
[Bounce]
Спеціальні блоки
[Scale]
Тригери
[SR]
[TT]
[RS]
[Rtrig]
Таймери
[Generator]
[Timer]
Лічильники
[Counter]
[SpeedCounter]
Математика
[SUM(+)]
[MUL(*)]
[SUB(-)]
[DIV(/)]
Алгебра
[SIN]
[COS]
[TAN]
[ABS]
[SQ]
[SQRT]
[MIN]
[MAX]
[POW]
[RANDOM]
Порівняння
[Comparator]
Com –порт
Send
SendVariable
ReceiveVariable
Перемикач
[SWITCH]
[MUX]
[DMS]
Базові блоки
Контакт
Котушка
Захист від брязкоту
Виділення переднього фронту
Спеціальні реле
Двостабільне реле
Реле часу
Генератор
Реле порівняння
Алгебра
SIN
COS
TAN
ABS
MAX
MIN
SQ
SQRT
POW
RANDOM
Аналогові блоки
Масштабування
Математика
Лічильник
Аналоговий перемикач
Перемикач багато до одного
Перемикач один до багатьох
Аналоговий вхід контролера
Аналоговий вихід контролера
Вхід аналогового з’єднувача
Вихід аналогового з’єднувача
Швидкісний лічильник
CommPort
Передача в ComPort
Передача змінної через Comm port
Прийом змінної через Comm port
Мотори
Сервомотор
Кроковий двигун
Годинник реального часу
Отримати дані
Будильник
Встановлення часу
дисплеї
Дисплей на чіпі HD44780
Блок управління підсвічуванням дисплея на чіпі HD4480 I2C
Блок декодування семисегментного індикатора
Рядки
Складання рядків
Датчики
Ультразвуковий далекомір HC-SR04
Датчик температури та вологості DHT11 (DHT21, DHT22)
Датчик температури DS18x2x
IR Ressive
BMP-085
SD картка
Запис змінної на карту SD
Вивантаження файлу з картки SD
Конвертування типів
Конвертація рядків
Перетворення Float на Integer
Мікросхеми розширень
Розширювач висновків 74HC595
Операції з бітами
Шифратор
Дешифратор
Читання біта
Запис біта
Різне
Матрична клавіатура
П’єзодинамік
EEPROM
Запис в EEPROM
Читання з EEPROM
Комунікації
Блок відправки змінної через комунікації
Прийом змінної через комунікації
Сторінка Web сервера
Web клієнт
В даний час ведеться розробка функціональних блоків для роботи з триосьовим гіроскопом, люксометром та іншими датчиками і сенсорами. Також ведеться робота над організацією обміну даними через , радіоканал, та Wifi. Надалі планах. розробка SCADA-системи для організації інтерфейсу систем, розроблених у програмі FLProg на персональному комп’ютері або на графічних дисплеях.
Список периферійного обладнання, яке підтримується програмою, доступний тут
Для частини обладнання у розділі на сайті присутні оглядові статті, що полегшують розуміння застосування його у програмі.
У верхній частині робочої зони розташований список тегів (змінних та входів виходів) (FBD) або встановленого обладнання (LAD). Теги або обладнання переносяться на схему простим перетягуванням.
Після завершення роботи над проектом проводиться його компіляція. Після компіляції автоматично відкриється програма Arduino 1.5.7 із завантаженим скетчем вашого проекту. У програмі Arduino IDE 1.5.7 вам необхідно буде вказати номер COM порту, до якого підключений ваш контролер, вибрати його тип, і зробити заливку скетча в контролер. Докладніше про програму “Arduino IDE 1.5.7” можна почитати на сайті Arduino.ru.
Де завантажити FLProg?
На сторінці завантажень.
Завантажити програму можна без реєстрації на сайті, але для зареєстрованих користувачів функціонал сайту помітно розширюється. Реєстрація дуже проста і вимагає лише підтвердження електронної пошти. При цьому жодних інших даних не потрібно вводити.
На сторінці завантаження програми завжди доступні дві версії: інсталятор та портативна версія, яка не потребує встановлення. Якщо можливо, я також викладаю файл оновлень значно меншого розміру, що дозволяє оновити попередню версію