AEHA UART - подключение Arduino Uno к Скада SIMPLIGHT по протоколу ModBusRTU
Максимально просто, без лишних движений, соединение ардуины в режиме slave по протоколу ModBusRTU
Через COM порт, RS232, UART
со скадой SIMPLIGHT
1 лирика
2 код ардуины
3 настройка скады SIMPLIGHT - Редактор каналов
4 настройка скады SIMPLIGHT - Редактор мнемосхем
5 скачать
Если открыть документацию на протокол ModBus-RTU / ASCII
неискушенному читателю может стать дурно от изобилия слов
Что нам необходимо знать об этом стандарте?
Протокол Modbus использует последовательные линии связи (например, RS232, RS485),
а протокол Modbus TCP рассчитан на передачу данных по сетям TCP/IP.
Протокол Modbus имеет два режима передачи RTU и ASCII,
в режиме ASCII каждый байт передается как два ASCII символа его шестнадцатеричного представления.
В сети Modbus есть только один ведущий, который с заданным
интервалом опрашивает несколько ведомых устройств, каждое из которых имеет свой уникальный адрес от
1 до 254, адрес 0 широковещательный и на него отвечают все устройства, так как ведущий в сети один
у него нет своего адреса.
В спецификации Modbus определено два типа данных, один бит и 16 битное слово. Данные организованны
в четыре таблицы с 16 битной адресацией ячеек, адресация в таблицах начинается с 0.
Для доступа к данным из разных таблиц предназначены отдельные команды.
Discrete Inputs 1 бит только чтение
Coils 1 бит чтение и запись
Input Registers 16 бит только чтение
Holding Registers 16 бит чтение и запись
Object type Access Size Address Space
Coil Read-write 1 bit 00001 - 09999
Discrete input Read-only 1 bit 10001 - 19999
Input register Read-only 16 bits 30001 - 39999
Holding register Read-write 16 bits 40001 - 49999
Таблицы регистры? вы это серьезно?
После прочтения доков прозрение ко мне не пришлоно методом проб, удалось добиться стабильно работающей комбинации
- прошивка ардуино + мнемосхема скада
И картина мира сложилась такая:
имеется заданный массив переменных
типа как тут
uint16_t pint[12];
и эти 12 переменных живут как бы своей жизнью
контролер ардуино может считывать и записывать в них, а так же производить
математические вычисления , как с обычными переменными
например
uint16_t bc;
bc=100;
pint[5] = --bc;
pint[3] = random(5, 95);
pint[1]= analogRead(A0);
только pint[0] не использовать
А программа скада, также работает с этими переменными
считывает и записывает данные, периодичность опроса настраивается
то есть если компонент из редактора мнемосхем работает на отображение информации
и подключен к данному тегу (переменной) он выведет ее значение на экран
если компонент заточен под запись значений и подключен к каналу (тегу , переменной)
то он изменит ее значение и оба этих действия возможно сочетать
2 код ардуины
устройство slave представляет собой ардуино унос установленным сверху шильдом LCD дисплея с кнопками
прошивка заливается через программатор
USBASP через программу AVRDUDEPROG.exe версии 3,3
ибо заливка из среды Arduino IDE 1.8.13, через последовательный порт
кажется мне фантастическим вымыслом, и в реальном мире не существует
Вот все что нам потребуется для быстрого подключения ардуино к скада
простой Код для Arduino IDE 1.8.13
здесь используется 12 переменных но может быть больше
скада симп, бесплатно разрешает работу с 32 тегами, тобишь 32 переменными
каждый тег имеет адрес и тип переменной
Адрес тега в данном примере
такой же как и индекс переменой в массиве
то есть тег с адресом 12 запараллелен с переменной pint[12]
Что и прописано В данной программе для arduino ide 1.8.13
#include <ModbusRtu.h>
#include <LiquidCrystal.h> // либа для шильда дисплея
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
int8_t state = 0;
Modbus slave(1, 0, 0); // Адрес slave девайса
3 настройка скады SIMPLIGHT - Редактор каналов
Скада SIMPLIGHT имеет бесплатную версию на 32 канала
что, для некоторых задач вполне хватает
В ней сначала нужно настроить каналы, В данном случае используется Сом порт
Запускаете редактор каналов,
нажимаете внизу значок "Настройка ModBus драйвера"
В окне "настроить"
выбираете Узел
тип Узла СОМ
Указываете номер Сом порта (у меня 21)
Можете дать свое название
Нажимаете добавить устройство
Также Можете дать свое название
и указать адрес
Добавляете ТЕГИ, тегов накидываете сколько у вас объявлено в ардуино
типа как тут
uint16_t pint[12];
меняете названия и адреса
У тега есть адрес и тип данных
Регион
Тип данных
Тип доступа
Порядок байт
это описано в документации или выше на этой странице
для данного проекта оставляем как есть
По концовке нажимаете "сохранить"
Перетаскиваете свое устройство в область "Список активныз каналов"
Нажимаете пуск "Запустить тест каналов"
Если прошитая ардуина подключена к правильному СОМ порту
наблюдаете движение данных по каналу ModBus
Двойным кликом на параметре можно изменить значение
Если накидаете тегов больше чем определено в ардуине
Или адрес тега укажете больше
увидите такую картину
Каналы настроили теперь самое вкусное - Редактор схемы
4 настройка скады SIMPLIGHT - Редактор мнемосхем
Запускаете Редактор мнемосхем нажимаете "Новая мнемосхема",задаете размеры экрана - ширину и высоту
а так же желательно изменить цвет фона для наглядности
пусть будет 800 х 500 цвет серый
Перетаскиваете из набора компонентов стрелочный индикатор
Перетаскиваете из набора компонентов цифровой индикатор
При желании меняете размеры и положения приборов
Для подключения к нужному каналу (тегу, переменной) выбираете прибор, ставите галку в поле привязка к каналу
Както не продумано, но название канала получилось длинновато растягиваем окно, нажимаем кнопку с тремя точками. Открывается окно с перечнем наших каналов двойным щелчком выбираете нужный При необходимости повторить для всех приборов на панели Нажимаете "Сохранить"
запускаете монитор
или открываете скачанную тут
5 скачать исходник проекта "подключение Arduino Uno к Скада SIMPLIGHT "
В архиве исходник и прошивка для Ардуино унои Мнемосхема для скада SIMPLIGHT
Проект мнемосхемы хранится на ПК в папке C:\slProject\Forms\
туда нужно скопировать скачаную arduino.msl
затем открыть в Редакторе мнемосхем