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

Открытая АСУ ТП: обмен данными с открытым программным ПЛК «Северстали» по 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, представлена ниже.

image.png

Основные элементы управляюще диаграммы:

  • 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 - вход данных.

После сборки и запуска диаграммы на выполнение можно увидеть и отладить работу её элементов:

image.png

Проверка подключения

Перед интеграцией с Engee убедимся в том, что определённый в диаграмме адрес и порт ОП ПЛК доступны для чтения. Сделать это можно при помощи утилиты mbpoll, следующей командой:

mbpoll -t 4 -a 1 -r 13 -c 3 158.160.19.43 -p 1502

При выполнении команды мы должны увидеть текущее значение счётчика, записываемое в Holding Register Modbus TCP Slave:

image.png

Связь по заданному адресу с 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.

image.png

Сигнал сброса счётчика - периодический, от блока генератора прямоугольных импульсов с периодом 5 секунд и коэффициентом заполнения - 1%.

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

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

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

После установки модуля и запуска клиентской программы перейдём к моделированию.

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

Выполним модель при помощи программного управления:

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

В процессе моделирования в информационном окне клиентской программы Engee должны выводиться сообщения о состоянии связи, получаемых и отправляемых данных:

image.png

Как видно, соединение установлено, обмен данными с ОП ПЛК происходит успешно.

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

Собранные в моделировании данные (сигнал сброса и текущее значение счётчика) сохранены в переменной simout. Получим эти данные для дальнейшего построения на графиках.

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

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

In [ ]:
gr(size = (1000, 400))
plot(t[505:end], [counter[505:end], 50*reset[505:end]];
          seriestype = :step, title = "Счётчик FB_CTU",
          xlabel = "Время, с",
          label = ["Значение счётчика (CV)" "Сигнал сброса (R)"])
Out[0]:

Получаемые моделью Engee от ОП ПЛК данные соответствуют действительности, Engee успешно осуществляет сброс счётика, работающего в диаграмме 4diac FORTE.

Заключение

Рассмотрен пример успешной интеграции Engee с открытой АСУ ТП: происходит обмен данными по Modbus TCP Engee с открытым программным ПЛК «Северстали». Такая синергия передовых парадигм проектирования АСУТП и элементов управления позволяет ускорить переход к индустрии 4.0.