Документация Engee
Notebook

Чтение данных по 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

image.png

На сконфигурированный сервер Modbus TCP будут передаваться генерируемые сигналы - аналоговый и дискретный.

Генерация сигналов для чтения из Engee

Для генерации сигналов используется модуль генератора в Эликонт КС. В примере он генерирует два сигнала:

  1. "Знаковая_синусоида" :

    • тип данных : INT16

    • тип генерации : Синус

    • период : 4

    • диапазон значений: -30 000 ÷ 30 000

  2. "Периодический_бит" :

    • тип данных : BOOLEAN

    • тип генерации : Треугольник

image.png

Эти же сигналы передаются в сервер Modbus TCP:

В блоке сигналов сервера добавлены два источника сигналов. Им присвоены имена и адреса регистров Modbus:

"Периодический_бит":

  • имя Modbus:Modbus_periodic_bit

  • адрес регистра: 0

"Знаковая_синусоида":

  • имя Modbus: Modbus_sinus

  • адрес регистра: 5

image.png

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

image.png

Более подробно с процессом настройки Эликонт-КС можно ознакомиться в руководстве.

Модель примера

Модель этого примера - 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.

В итоге, модель примера выглядит следующим образом:

image.png

В дополнение следует настроить запись считываемых данных, управление временем симуляции в Engee, периоды дискретизации блоков.

Подключение к внешнему оборудованию: Modbus TCP

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

In [ ]:
# Установить модуль можно непосредственно в скрипте, следующей командой:
# engee.package.install("Engee-Device-Manager")

Моделирование

После запуска сервера Modbus TCP в Эликонт-КС и установки подключения Engee к низкоуровневым интерфейсам перейдём к запуску модели примера:

In [ ]:
name = "elicont_cs_read" # Имя модели
include(joinpath(@__DIR__, "start_model_engee.jl")) # Определяем функцию запуска модели
start_model_engee(name)  # Запускаем модель

После выполнения моделирования обработаем полученные результаты считывания данных по Modbus TCP.

Результаты моделирования

Соберём данные из переменной simout в две переменных с именами сигналов в Modbus-сервере.

In [ ]:
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]);

Построим графики считанных сигналов:

In [ ]:
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 = "Величина сигнала")
Out[0]:

Как можно видеть на графиках, частоты, амплитуды и формы полученных данных соответствуют генерируемым из Эликонт-КС сигналам.

Заключение

В этом примере была рассмотрена простая конфигурация коммуникационного сервера Эликонт-КС для генерации дискретного и аналогового сигналов по Modbus TCP. По этому же протоколу установлено подключение из Engee для считывания в модели и дальнейшей обработки генерируемых сигналов.

Блоки, использованные в примере