Полунатурное моделирование на КПМ РИТМ (Управление задвижкой по Modbus)¶
Введение¶
В этом примере рассматривается моделирование трубопроводной задвижки с электроприводом на комплексе полунатурного моделирования РИТМ (КПМ РИТМ), при этом приём-передача данных между оператором и моделью Engee осуществляется по протоколу Modbus TCP.
Описание модели¶
Модель этого примера - test_SUI.engee
. Объект управления - трубопроводная задвижка с электроприводным управлением, которая заключена в активируемой подсистеме Valve
. Сигнал активации enable
равен единице при наличии напряжения в цепи питания задвижки (сигнал VoltageOK
), корректной фазировке питающего напряжения (сигнал PhaseOK
) и отсутствии управляющего сигнала на останов задвижки. Входные сигналы для подсистемы - сигналы на открытие open
и закрытие close
задвижки. Одновременная подача этих сигналов блокирует изменение положения задвижки. Для подачи сигналов на открытие/закрытие также необходимо наличие питания в цепях управления. Сигнал проверки наличия питания имитируется блоками CO_OK
и CC_OK
соответственно.
В модели примера реализуется два режима работы - тестирование задвижки моделированием в Engee и работа на КПМ РИТМ в режиме жесткого реального времени. За переключение между режимами отвечает переменная mode
. В случае mode = 1
сигналы на открытие/закрытие задвижки поступают от блоков Test_open
и Test_close
, сигнал на останов - от переменной stop
, а при mode = 0
управляющие сигналы поступают от периферийных блоков Modbus TCP. Переменная stop
по умолчанию равна "0". Переменные режима и останова заданы в обратных вызовах, функция PreLoadFunc
.
На выходе подсистемы задвижки снимаются и выводятся по Modbus TCP сигналы:
- состояния задвижки:
opened
(открыто) иclosed
(закрыто), - включения магнитных пускателей открытия/закрытия:
MPO
(МПО включен) иМПЗ
(МПЗ включен), - срабатывания моментных выключателей открытия/закрытия:
MVO
(МВО сработал) иMVZ
(МВЗ сработал).
Сигнал Valve_position
(положение задвижки) также снимается на выходе подсистемы, но не выводится по Modbus TCP.
Помимо упомянутых сигналов, по Modbus TCP также выводятся сигналы VoltageOK
, PhaseOK
, CO_OK
и CC_OK
.
Блоки периферии Modbus¶
Для передачи данных по Modbus TCP в примере используются следующие периферийные блоки КПМ РИТМ:
- Modbus TCP Setup - для настройки соединения с сервером,
- Modbus Read Coil Status - для чтения регистров флагов,
- Modbus Write Coils - для записи битов.
В блоке настройки соединения установлены IP-адрес и номер порта, время ожидания ответа и количество попыток переподключения. Параметр "Идентификатор сервера" устанавливается одинаковым для всех периферийных блоков и может быть использован для реализации работы с несколькими серверами Modbus.
В блоках чтения регистров флагов устанавливается начальный регистр чтения и количество регистров для чтения. В примере эти блоки передают в модель команды на открытие/закрытие и останов задвижки, записанные в регистрах по адресам 863, 864 и 862 соответственно.
В блоках записи битов устанавливаются начальный адрес и количество битов для записи из модели. В примере модель формирует биты для записи в регистры по адресам 1681 - 1688, 1572 - 1573.
Подсистема объекта управления¶
Активируемая подсистема задвижки Valve
представлена на рисунке ниже.
Работа задвижки имитируется линейным инерционным элементом с ограничением valve_state
. Так, при подаче сигнала на открытие/закрытие задвижки она открывается/закрывается за 1 секунду. Состояние "0" соответствует положению "открыто", а "1" - "закрыто". Начальное состояние - "закрыто". В подсистеме также производится имитация работы моментных выключателей (Блоки MVO
и MVZ
). Состояние "1" соответствует нормальной работе задвижки, а "0" - перегрузки по моменту и неисправности. Кроме этого, в подсистеме проверяются конечные состояния задвижки.
Моделирование в Engee¶
Загрузим и выполним модель примера.
Путь_примера = "$(@__DIR__)";
Имя_модели = "test_SUI";
Путь_модели = joinpath(Путь_примера, Имя_модели*".engee")
if Имя_модели ∉ getfield.(engee.get_all_models(), :name)
engee.load(Путь_модели);
end
модель = engee.run(Имя_модели);
Получим переменные модели для построения.
время = модель["valve_position"].time;
открытие = модель["test_open"].value;
закрытие = модель["test_close"].value;
положение_0 = модель["valve_position"].value;
открыто_0 = модель["opened"].value;
закрыто_0 = модель["closed"].value;
длина = length(положение_0)
положение = Vector{Float64}(undef, длина)
открыто = Vector{Float64}(undef, длина)
закрыто = Vector{Float64}(undef, длина)
for i in 1:длина
положение[i] = положение_0[i][1]
открыто[i] = открыто_0[i][1]
закрыто[i] = закрыто_0[i][1]
end
Построим графики открытия и закрытия задвижки - выведем сигналы тестирования открытия и закрытия, положения задвижки и конечных состояний.
using Plots
gr(size=(1000,300), xlims = (0,10))
график_1 = plot(время, [открытие, положение, открыто]; title = "Открытие задвижки")
график_2 = plot(время, [закрытие, положение, закрыто]; title = "Закрытие задвижки")
plot(график_1, график_2; layout = (1,2), label = ["Сигнал" "Положение" "Состояние"])
Как видно из графиков, модель задвижки отрабатывает открытие и закрытие с заданной инерционностью.
Работа модели на КПМ РИТМ¶
Перед началом выполнения модели на КПМ РИТМ нужно убедиться в корректности подключения, после чего перейдём в режим интерактивного выполнения модели.
Рассмотренная модель выполняется на КПМ РИТМ в режиме реального времени в течение 100 секунд. В процессе работы модели происходит обмен данным по Modbus TCP с симулятором ModbusPal.
Запись работы модели задвижки на РИТМ приведена в анимации ritm_valve_record.gif
.
При подаче сигнала открытия по тегу 863 устанавливается бит по тегу 1683, что свидетельствует о включении магнитного пускателя открытия задвижки. При этом положение задвижки изменяется. Через 1 секунду устанавливается бит по тегу 1681, что говорит о полном открытии задвижки. При подаче сигнала на закрытие задвижки по тегу 864 сначала устанавливается бит по тегу 1684 магнитного пускателя, а через 1 секунду срабатывает концевой выключатель закрытия, устанавливая бит по тегу 1682. При подаче сигнала на останов задвижки (тег 862) работа задвижки блокируется, и подача сигналов на открытие/закрытие не приводит к каким-либо эффектам.
Вывод¶
В примере была рассмотрена модель Engee для трубопроводной задвижки с электроприводом, выполняемая на КПМ РИТМ в режиме реального времени. Управление задвижкой и считывание её состояний осуществляется по протоколу Modbus TCP.