ЖУРНАЛ СТА №3/2023
Отладка и тестирование Отладка и тестирование приложения осуществлялись с помощью встроен- ных средств infoteamOpen PCS [7] (рис. 7 и рис. 8) и утилит ModScan32 (рис. 9) и Modbus Poll (рис. 10). Профилирование программы MOD- BUS_TCP_SERVER показало, что среднее время выполнения задачи заметно меньше 1 миллисекунды. Время одно- кратной инициализации сервиса со- ставляет порядка 8 миллисекунд. Тестирование с использованием ути- литы ModScan32 показало, что конт- роллер устойчиво выполнял функции MODBUS TCP SERVER при цикли- ческом опросе с интервалом 20 милли- секунд. При общем количестве за- просов порядка 650 000 было зафикси- ровано только 10 фактов отсутствия или неверных ответов. Тестирование с помощью утилиты Modbus Poll показа- ло, что ПО контроллера поддерживает функции Modbus с кодами: 1, 2, 3, 4, 5, 6, 15, 16. Понимание этого может при- годиться при самостоятельной раз- работке клиентских приложений Modbus TCP. Комплексная отладка приложения осуществлялась в составе демонстра- ционного стенда, который описан в сле- дующей части нашей статьи (см. рис. 17, рис. 21). Повторитель узла ModbusTCP GCAN-IO-8100 В предыдущих главах нашей статьи мы подробно описали работу с ПЛК GCAN, а также связанные с ним вопро- сы разработки прикладной программы, инициализации сетевых сервисов. Од- нако регулярно на практике встре- чаются задачи, когда требуются более простые, непрограммируемые устрой- ства для создания распределённой си- стемы сбора данных с аналоговых/дис- кретных датчиков и управления. В таких случаях удобно будет исполь- зовать повторители узла сети (каплеры), имеющие заказной код GCAN-IO. В част- ности, рассмотрим повторитель узла ModbusTCP/RTU – модель GCAN-IO-8100. Со стороны системной шины к этому устройству можно подключить до 32 различных модулей дискретного и ана- логового ввода-вывода GCAN. Информа- ционные данные с модулей ввода-выво- да автоматически проецируются на кар- ту регистров Modbus и становятся до- ступными для клиентов (мастеров) в сетях ModbusTCP/RTU. В качестве клиен- тов (мастеров) могут выступать различ- СТА 3/2023 13 www.cta.ru ОБ ЗОРЫ Рис. 7. Infoteam Open PCS в режиме отладки программы DIO_AIO PROGRAM Modbus_TCP_Server (*----- инициализация сервиса MODBUS_TCP_SLAVE ------*) if mModbusInitOK=false then inst0_MODBUS_TCP_SLAVE_INIT(ENABLE := true, MODE := 1, ADDRESS :=1 , NETNUMBER :=1 | mConfirm:= CONFIRM, mError:= ERROR, mErrorinfo:= ERRORINFO); mModbusInitOK:=true; (*подготавливаем указатели на буферные регистры для передачи и получения данных*) mPtr:=&modbusRegBuf; DO_Ptr:=&modbusDOBuf; DI_Ptr:=&modbusDIBuf; AI_Ptr:=&modbusAIBuf; end_if; (*---------------- MODBUS_TCP_SLAVE_CTRL -----------------------------*) (* вызываем сервис MODBUS_TCP_SLAVE *) if mModbusInitOK=true then modbusDIBuf[0]:=mDI; (* передаём DI входы модуля GC1018 ---> INPUT STATUS 10001…10008 *) modbusAIBuf[0]:=mAI; (* передаём AI вход №1 модуля GC3624 ---> INPUT REGISTER 30001 *) inst0_MODBUS_TCP_SLAVE_CTRL( EN_IN :=1 , NETNUMBER := 1, DO_ENABLE := 1, DO_PTR :=DO_Ptr , DO_LENGTH :=1 , DI_ENABLE := 1, DI_PTR := DI_Ptr , DI_LENGTH :=1 , AI_ENABLE :=1 , AI_PTR :=AI_Ptr , AI_LENGTH :=1 , REG_ENABLE :=1 , REG_PTR := mPtr, REG_LENGTH := 1 xDONE := DONE, xError:= ERROR); mDO :=modbusDOBuf[0]; (* выделяем COIL STATUS 00001-00008 ---> передаём на выходы GC2018 *) AO1 := modbusRegBuf[0]; (* выделяем HOLDIN REGISTER 40001 ---> передаём на выход 2 GC4662 *) end_if; END_PROGRAM Рис. 6. Текст программы MODBUS_TCP_SERVER
Made with FlippingBook
RkJQdWJsaXNoZXIy MTQ4NjUy