Открытая АСУ ТП: обмен данными с открытым программным ПЛК «Северстали» по Modbus TCP¶
В этом проекте рассматривается начало интеграции Открытой АСУ ТП и среды модельно-ориентированной разработки Engee.
Введение¶
Открытая АСУ ТП в этом примере представлена удалённым клиентом - работающим в реальном времени открытым программным программируемым логическим контроллером ОП ПЛК "Северстали" (OpenSoftPLC). На ОП ПЛК запущена программа инкрементного счётчика со сбросом. Обмен данными между ОП ПЛК и Engee происходит по Modbus TCP, при этом Engee выступает как Modbus Master, формируя управляющий сигнал и считывая данные из регистров ОП ПЛК. Доступ Engee к Modbus Slave по Modbus TCP обеспечивается благодаря поддержке внешнего оборудования.
Открытая АСУ ТП¶
Открытая АСУ ТП (Автоматизированная Система Управления Технологическими Процессами) — это национальная российская платформа для промышленной автоматизации, разрабатываемая межотраслевой рабочей группой при поддержке Минпромторга РФ. Её цель — создать вендорно-независимую, модульную и безопасную экосистему для управления производственными процессами, способную заменить иностранные решения (Siemens, GE и др.). Проект инициирован крупнейшими промышленными компаниями России, включая "Северсталь", "ЕвроХим", "Газпром нефть", "ЛУКОЙЛ" и др.
Технологическую базу Открытой АСУ ТП на данный момент составляют ОП ПЛК и интегрированная среда разработки (IDE) на базе 4diac FORTE. Это среда с открытым исходным кодом, поддерживающая разработку в событийно-ориентированной парадигме для распределённых АСУ ТП. Такой подход к проектированию современных АСУ ТП описан в международном стандарте IEC 61499.
Открытый программный ПЛК¶
Открытый программный ПЛК (ОП ПЛК) и IDE разрабатываются ИТ-компанией "Северсталь-инфоком" (входит в ПАО "Северсталь"). . Для интеграции с Engee в данном примере была запущена удалённая виртуальная машина с ОП ПЛК. Обмен данными с ПЛК происходит по протоколу Modbus TCP. ОП ПЛК выступает в качестве Modbus Slave - он принимает из Engee дискретный сигнал сброса счётчика, а инкрементный счётчик в управляющей диаграмме ПЛК передаёт своё текущее значение в открытые для чтения регистры. Engee не только сбрасывает счётчик, но и считывает текущее значение из этих регистров.
Управляющая диаграмма ОП ПЛК¶
Управляющая функционально-блочная диаграмма ОП ПЛК, составленная в 4diac FORTE, представлена ниже.
Основные элементы управляюще диаграммы:
FB_CTU
- блок инкрементного счётчика:R
- вход сброса,CU
- вход прямого счёта,PV = 6500
- установленное значение,CV
- выход текущего значения.
MSLAVE_8_tcp
- блок конфигурации Modbus TCP Slave:QI = true
- вход определения данных,PARAMS = '{"host": "158.160.19.43:1502", "update": "500ms", "id":"1" }'
- параметры блока: адрес и порт Modbus TCP Slave, период обновления, идентификатор.IO0 = '.IX'
- вход источника передаваемых данных,IO1 = '.QW'
- вход источника передаваемых данных.
IX
- блок входа дискретных данных:QI = true
- вход определения данных,PARAMS = 'c10'
- определение адреса хранения ( "coil 10" ) дискретных данных,IN
- выход данных.
F_IN_TO_WORD
- блок преобразования данных из форматаinteger
в форматword
:IN
- вход данных форматаinteger
,OUT
- выход данных форматаword
.
QW
- блок выхода данных форматаword
:QI = true
- вход определения данных,PARAMS = 'h12'
- определение адреса хранения ( "holding register 12" ) данных,OUT
- вход данных.
После сборки и запуска диаграммы на выполнение можно увидеть и отладить работу её элементов:
Проверка подключения¶
Перед интеграцией с Engee убедимся в том, что определённый в диаграмме адрес и порт ОП ПЛК доступны для чтения. Сделать это можно при помощи утилиты mbpoll
, следующей командой:
mbpoll -t 4 -a 1 -r 13 -c 3 158.160.19.43 -p 1502
При выполнении команды мы должны увидеть текущее значение счётчика, записываемое в Holding Register Modbus TCP Slave:
Связь по заданному адресу с Modbus TCP Slave установлена, считывание из заданных регистров (со смещением) осуществляется успешно, значение счётчика инкрементируется. Следовательно, часть подготовки проекта, связанная с работой Открытой АСУ ТП выполнена успешно, можно переходить к части подготовки и работы с Engee.
Модель примера¶
Модель open_soft_plc_counter.engee
содержит в себе следующие интерфейсные блоки:
Modbus TCP Setup - установка подключения по Modbus TCP. В нём необходимо указать адрес Modbus TCP Slave -
158.160.19.43
и порта -502
,Modbus Write Coil - запись дискретных данных. В нём необходимо указать идентификатор сервера -
1
, адрес для записи (номер coil) -10
,Modbus Read Holding Register - чтение данных из Holding-регистр. В нём необходимо указать идентификатор сервера -
1
, начальный адрес чтений (номер регистра) -12
и количество считываемых регистров -1
.
Сигнал сброса счётчика - периодический, от блока генератора прямоугольных импульсов с периодом 5 секунд и коэффициентом заполнения - 1%.
Подключение к внешнему оборудованию: Modbus TCP¶
Для подключения к внешнему оборудованию нужно установить модуль работы с внешним оборудованием. Подробно, по шагам процесс подключения Engee к низкоуровневым интерфейсам компьютера представлен в примере.
# Установить модуль можно непосредственно в скрипте, следующей командой:
# engee.package.install("Engee-Device-Manager")
После установки модуля и запуска клиентской программы перейдём к моделированию.
Моделирование¶
Выполним модель при помощи программного управления:
name = "open_soft_plc_counter" # Имя модели
include(joinpath(@__DIR__, "start_model_engee.jl")) # Определяем функцию запуска модели
start_model_engee(name); # Запускаем модель
В процессе моделирования в информационном окне клиентской программы Engee должны выводиться сообщения о состоянии связи, получаемых и отправляемых данных:
Как видно, соединение установлено, обмен данными с ОП ПЛК происходит успешно.
Результаты моделирования¶
Собранные в моделировании данные (сигнал сброса и текущее значение счётчика) сохранены в переменной simout
. Получим эти данные для дальнейшего построения на графиках.
data = collect(simout);
t = collect(data[1].time)[:,1];
counter = reduce(vcat, collect(data[2].value)[:,1])
reset = reduce(vcat, collect(data[1].value)[:,1]);
Построим графики считанных сигналов:
gr(size = (1000, 400))
plot(t[505:end], [counter[505:end], 50*reset[505:end]];
seriestype = :step, title = "Счётчик FB_CTU",
xlabel = "Время, с",
label = ["Значение счётчика (CV)" "Сигнал сброса (R)"])
Получаемые моделью Engee от ОП ПЛК данные соответствуют действительности, Engee успешно осуществляет сброс счётика, работающего в диаграмме 4diac FORTE.
Заключение¶
Рассмотрен пример успешной интеграции Engee с открытой АСУ ТП: происходит обмен данными по Modbus TCP Engee с открытым программным ПЛК «Северстали». Такая синергия передовых парадигм проектирования АСУТП и элементов управления позволяет ускорить переход к индустрии 4.0.