ЖУРНАЛ СТА №3/2023
ПЛК кратко описана в секции объявле- ния переменных программы DIO_AIO рис. 1 и проиллюстрирована на рис. 2. Программа DIO_AIO Программа DIO_AIO в контексте про- екта Modbus_TCP_server носит вспомо- гательный характер. Она иллюстриру- ет возможность контроллера GCAN- PLC-510, в отличие от повторителей уз- ла сети GCAN-IO-8100, автономно вы- полнять алгоритмы, а не только транс- лировать команды клиента Modbus TCP. Программа вызывается как перио- дическая задача с интервалом 1 с и на- ращивает примерно на 0,1 В напряже- ние на выходе 1 модуля аналогового вывода (ЦАП) GC4662. Напряжение пе- ремычками подаётся на первый вход модуля аналогового ввода (АЦП) GC3624 (рис. 2). Когда регистр ЦАП перепол- няется, напряжение на выходе ЦАП сбрасывается, и процесс повторяется с периодом около одной минуты. Для контроля работы считывается код АЦП модуля GC3624 и пересчитывается по формуле в величину напряжения в вольтах (см. окно просмотра перемен- ных на рис. 7). Функциональные блоки Modbus_TCP_Slave (_INIT, CTRL) Сервис Modbus TCP Server для конт- роллеров GCAN поддержан произво- дителем на уровне функциональных блоков Firmware. В комплект поставки входят два функциональных блока: MODBUS_TCP_SLAVE_INIT (рис. 3) и MODBUS_TCP_SLAVE_CTRL (рис. 4). Оба функциональных блока описаны в документе «Начало работы с GCANPLC. Руководство по применению» [6]. Дета- ли протокола, формат и структуру со- общений, таблицу регистров и коды функций можно найти в статьях, по- свящённых протоколу Modbus, в жур- нале «Современные технологии авто- матизации» [8], [9], [10]. Программа Modbus_TCP_Server Программа (задача) Modbus_TCP_Ser- ver выполняется циклически с приори- тетом, равным 1. При первом вызове за- дачи вызывается ФБ MODBUS_TCP_SLA- VE_INIT и однократно происходит ини- циализация сервиса. В дальнейшем циклически вызывается только ФБ MODBUS_TCP_SLAVE_CTRL, который реализует функциональность сервиса. Назначение входов и выходов функ- циональных блоков прокомментиро- ваны ниже в тексте программы (рис. 5, рис. 6). Входы и выходы модулей DO, DI, AI, AO через массивы modbusDOBuf, mod- busDIBuf, modbusAIBuf, modbusRegBuf и входы DO_PTR, DI_PTR, AI_PTR, REG_PTR экземпляра ФБ inst0_MOD- BUS_TCP_SLAVE_CTRL связаны с реги- страми Modbus: COIL STATUS DO 00001... 00008; INPUT STATUS DI 10001...10008; INPUT REGISTER AI 30001; HOLDIN REGI- STER 40001. СТА 3/2023 12 www.cta.ru ОБ ЗОРЫ VAR (*----- MODBUS_TCP_SLAVE_INIT ------*) mConfirm:bool; (*false: сбой выполнения функционального блока, true: выполнение функционального блока выполнено успешно*) mError:usint; (*Код ошибки описывает информацию о результате выполнения функционального блока*) mErrorinfo:usint; (*Вторичные сообщения об ошибках*) mModbusInitOK:bool:=false; (*инициализация да/нет*) (*экземпляр ФБ инициализации сервиса MODBUS_TCP_SLAVE*) inst0_MODBUS_TCP_SLAVE_INIT:MODBUS_TCP_SLAVE_INIT; (*-----------------------------------------------*) (*----- MODBUS_TCP_SLAVE_CTRL -----*) modbusDOBuf : ARRAY[0..0] OF byte; (* COIL STATUS DO 00001...00008 *) DO_Ptr : POINTER; (* указатель на массив COIL STATUS *) modbusDIBuf : ARRAY[0..0] OF byte; (* INPUT STATUS DI 10001...10008*) DI_Ptr : POINTER; (* указатель на массив INPUT STATUS *) modbusAIBuf : ARRAY[0..0] OF int; (* INPUT REGISTER AI 30001 *) AI_Ptr : POINTER; (* указатель на массив INPUT REGISTER *) modbusRegBuf : ARRAY[0..0] OF uint; (* HOLDIN REGISTER 40001 *) mPtr : POINTER; (* указатель на массив HOLDIN REGISTER *) xDONE:BOOL; (* флаг завершения *) xError:usint; (* код ошибки *) (*экземпляр ФБ сервиса MODBUS_TCP_SLAVE*) inst0_MODBUS_TCP_SLAVE_CTRL:MODBUS_TCP_SLAVE_CTRL; (*-----------------------------------------*) mDI AT %I0.0:byte; (* входы модуля GC1018*) mAI AT %I1.0:int; (* вход1 модуля GC3624*) mDO AT %Q0.0:byte; (* выходы модуля GC2018*) AO1 AT %Q3.0:uint; (* выход 2 GC4662 *) END_VAR Рис. 5. Объявление переменных программы MODBUS_TCP_SERVER DC 24 В DC 24 В Рис. 2. Аппаратная конфигурация ПЛК Рис. 4. Функциональный блок MODBUS_TCP_SLAVE_CTRL Рис. 3. Функциональный блок MODBUS_TCP_SLAVE_INIT
Made with FlippingBook
RkJQdWJsaXNoZXIy MTQ4NjUy