Чтение данных по Modbus TCP из Эликонт-КС¶
Введение¶
В этом примере рассматривается простой способ интеграции Engee и Эликонт-КС. Эликонт-КС формирует, а Engee считывает сигналы в реальном времени по протоколу Modbus TCP.
Эликонт-КС¶
Краткий обзор¶
"Эликонт-КС" – программное обеспечение от АО "Элара", применяемое для сбора, обработки и передачи данных в системах промышленной автоматизации и интернета вещей (IIoT), выступающее в роли преобразователя промышленных протоколов, концентратора данных, коммуникационного шлюза и мультисервера.
Используемая в этом примере версия коммуникационного сервера - 2.6.2. Операционная система - Windows 10 Pro.
Конфигурация сервера Modbus TCP¶
Файл конфигурации для развёртывания коммуникационного сервера Эликонт из примера - Engee_read_1.elconf
. Его достаточно открыть в Эликонт-КС и запустить обмен данными.
При создании cервера Modbus TCP обязательно нужно сконфигурировать его подключение. В этом примере:
IP сервера Modbus TCP:
127.0.0.4
Порт:
502
Адрес устройства:
1
На сконфигурированный сервер Modbus TCP будут передаваться генерируемые сигналы - аналоговый и дискретный.
Генерация сигналов для чтения из Engee¶
Для генерации сигналов используется модуль генератора в Эликонт КС. В примере он генерирует два сигнала:
"Знаковая_синусоида" :
тип данных :
INT16
тип генерации :
Синус
период :
4
диапазон значений:
-30 000 ÷ 30 000
"Периодический_бит" :
тип данных :
BOOLEAN
тип генерации :
Треугольник
Эти же сигналы передаются в сервер Modbus TCP:
В блоке сигналов сервера добавлены два источника сигналов. Им присвоены имена и адреса регистров Modbus:
"Периодический_бит":
имя Modbus:
Modbus_periodic_bit
адрес регистра:
0
"Знаковая_синусоида":
имя Modbus:
Modbus_sinus
адрес регистра:
5
После конфигурирования серверов, генератора и генерируемых сигналов необходимо загрузить сервер и установить подключение. На скриншоте ниже показан коммуникационный сервер в процессе генерации сигналов.
Более подробно с процессом настройки Эликонт-КС можно ознакомиться в руководстве.
Модель примера¶
Модель этого примера - elicont_cs_read.engee
.
Для подключения к Эликонт-КС требуется блок Modbus TCP Setup
из раздела Оборудование библиотеки блоков Engee. В нём необходимо указать адреса сервера - 127.0.0.4
и порта - 502
.
Чтение дискретных данных будем осуществлять блоком функции 1 - Modbus Read Coil Status
. В нём необходимо указать идентификатор сервера - 1
, начальный адрес чтений (номер регистра) - 0
и количество считываемых бит - 1
.
Чтение аналоговых данных будем осуществлять блоком функции 3 - Modbus Read Holding Register
. В нём необходимо указать идентификатор сервера - 1
, начальный адрес чтений (номер регистра) - 5
и количество считываемых регистров - 1
.
В итоге, модель примера выглядит следующим образом:
В дополнение следует настроить запись считываемых данных, управление временем симуляции в Engee, периоды дискретизации блоков.
Подключение к внешнему оборудованию: Modbus TCP¶
Для подключения к внешнему оборудованию нужно установить модуль работы с внешним оборудованием. Подробно, по шагам процесс подключения Engee к низкоуровневым интерфейсам компьютера представлен в примере.
# Установить модуль можно непосредственно в скрипте, следующей командой:
# engee.package.install("Engee-Device-Manager")
Моделирование¶
После запуска сервера Modbus TCP в Эликонт-КС и установки подключения Engee к низкоуровневым интерфейсам перейдём к запуску модели примера:
name = "elicont_cs_read" # Имя модели
include(joinpath(@__DIR__, "start_model_engee.jl")) # Определяем функцию запуска модели
start_model_engee(name) # Запускаем модель
После выполнения моделирования обработаем полученные результаты считывания данных по Modbus TCP.
Результаты моделирования¶
Соберём данные из переменной simout
в две переменных с именами сигналов в Modbus-сервере.
data = collect(simout);
t = collect(data[1].time)[:,1];
Modbus_sinus = reduce(vcat, collect(data[1].value)[:,1])
Modbus_periodic_bit = reduce(vcat, collect(data[2].value)[:,1]);
Построим графики считанных сигналов:
gr(size = (1000, 400))
AO = plot(t, Modbus_sinus;
seriestype = :step, title = "Эликонт-КС: аналоговый сигнал",
label = "Modbus TCP \n127.0.0.4:502 \nУстройство 1 \nРегистр 5")
DO = plot(t, Modbus_periodic_bit;
seriestype = :step, title = "Эликонт-КС: дискретный сигнал",
label = "Modbus TCP \n127.0.0.4:502 \nУстройство 1 \nРегистр 0")
plot(DO, AO, layout = (1, 2), legend = :bottomright, xlabel = "Время, с", ylabel = "Величина сигнала")
Как можно видеть на графиках, частоты, амплитуды и формы полученных данных соответствуют генерируемым из Эликонт-КС сигналам.
Заключение¶
В этом примере была рассмотрена простая конфигурация коммуникационного сервера Эликонт-КС для генерации дискретного и аналогового сигналов по Modbus TCP. По этому же протоколу установлено подключение из Engee для считывания в модели и дальнейшей обработки генерируемых сигналов.