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
затем открыть в Редакторе мнемосхем