摘要本文介绍了一个面向PLC-IoT技术平台的ST程序模板该模板在标准IEC 61131-3 PLC基础上扩展IoT通信功能实现云端MQTT连接、TCP网络调试/升级、Modbus现场通信三大核心能力。模板包含全局配置设置、基本PLC程序框架、基本IoT程序框架以及PLC-IoT通信全局变量四个部分通过MQTT_R/MQTT_T等全局变量实现PLC控制逻辑与IoT通信程序的协同。文章详细阐述了设备远程维护基于TCP的GETV/SETV指令和应用业务数据传输基于MQTT的主题通信两种典型场景的实现机制并提供了完整的程序代码示例。该模板旨在为AI Agent编程提供结构化框架确保生成的代码符合预期同时通过TCP调试接口支持设计验证闭环。一、概述当前AI 基础设施快速发展现实世界中的诸多系统接入云端 AI 是必然趋势内置连接云端的接口和功能将会是各类控制器的默认选项。PLC-IoT 技术平台通过在标准 IEC 61131-3 的 PLC 基础上扩展常用 IoT 通信组件整合控制和通信功能集方便应用程序满足传统 PLC 项目功能要求的同时具备通过网络达成“远程维护”、“远程调试”的特性。本文提供一个 PLC-IoT 技术平台的 ST 程序模板基于此模板产生的应用程序可以实现1. 通过 MQTT 连接云端2. 通过 TCP 实现网络升级、网络调试3. 通过 Modbus 连接工作现场上位机为了更直观地展示PLC-IoT程序模板的整体数据流下图描述了从云端MQTT/上位机TCP到PLC控制逻辑再返回的完整流程flowchart TD subgraph 云端/上位机 Cloud[云端MQTT服务器] TCP_Server[TCP调试服务器 192.168.31.155:5000] HMI[HMI/上位机 通过Modbus通信] end subgraph IoT程序 MQTT_Client[MQTT客户端 连接云端] TCP_Client[TCP客户端 连接调试服务器] Modbus_Slave[Modbus从站] MQTT_RX[MQTT接收功能块 MQTT_RX] MQTT_TX[MQTT发送功能块 MQTT_TX] TCP_RX0[TCP接收功能块RX0 处理GETV指令] TCP_RX1[TCP接收功能块RX1 处理SETV指令] TCP_TX[TCP发送功能块TX0 发送响应] SETV[设置变量值功能块SV] GETV[获取变量值功能块GV] DEBUG_V[远程控制开关 DEBUG_V] end subgraph PLC程序 PLC_Logic[PLC控制逻辑 数字输入/输出处理] Global_Vars[全局变量 MQTT_R, MQTT_T, PV, SP等] end subgraph 物理设备 IO[数字输入/输出 X[0..15], Y[0..15]] Sensors[传感器/执行器] end %% 数据流向 Cloud -- 下行消息 DEVICE/DOWN/[MAC] -- MQTT_RX MQTT_RX -- 触发 -- MQTT_R MQTT_R -- 通知 -- PLC_Logic PLC_Logic -- 更新 -- Global_Vars Global_Vars -- PV, SP值 -- MQTT_TX MQTT_TX -- 上行消息 DEVICE/UP/[MAC] -- Cloud TCP_Server -- GETV/SETV指令 -- TCP_RX0 TCP_Server -- GETV/SETV指令 -- TCP_RX1 TCP_RX0 -- 变量名VN -- GETV TCP_RX1 -- 变量名VN, 值VV -- SETV GETV -- 获取变量值 -- Global_Vars SETV -- 设置变量值 -- Global_Vars GETV -- 返回值GV.Q -- TCP_TX SETV -- 触发响应 -- TCP_TX TCP_TX -- 响应消息 -- TCP_Server HMI -- Modbus读写 -- Modbus_Slave Modbus_Slave -- 寄存器映射 -- DEBUG_V DEBUG_V -- 控制开关 -- TCP_RX0 DEBUG_V -- 控制开关 -- TCP_RX1 DEBUG_V -- 控制开关 -- TCP_TX IO -- 数字输入X -- PLC_Logic PLC_Logic -- 数字输出Y -- IO Sensors -- 模拟量/状态 -- PLC_Logic PLC_Logic -- 控制信号 -- Sensors %% 升级流程 TCP_RX1 -- 设置URL变量 -- Global_Vars Global_Vars -- OTA/UPG标志 -- OTA_UPG[固件/应用升级] style Cloud fill:#e1f5fe style TCP_Server fill:#e1f5fe style HMI fill:#e1f5fe style MQTT_Client fill:#f3e5f5 style TCP_Client fill:#f3e5f5 style Modbus_Slave fill:#f3e5f5 style PLC_Logic fill:#e8f5e8 style Global_Vars fill:#e8f5e8 style IO fill:#fff3e0 style Sensors fill:#fff3e0流程图说明云端通信MQTT云端通过MQTT下行主题向设备发送控制指令如PV、SP值设备通过MQTT上行主题上报状态数据。远程维护TCP调试服务器通过TCP连接发送GETV/SETV指令设备接收后通过SETV/GETV功能块读写全局变量实现远程调试和升级控制。现场控制ModbusHMI或上位机通过Modbus读写寄存器控制远程调试开关DEBUG_V和IO状态。PLC-IoT协同IoT程序处理网络通信PLC程序执行控制逻辑通过全局变量MQTT_R/MQTT_T等实现数据交换。物理层PLC程序直接控制数字输入/输出和传感器/执行器完成实际控制任务。二、PLC-IoT 程序基本模板基本模板包含四个方面内容1. 全局配置设置2. 基本 PLC 程序框架3. 基本 IoT 程序框架4. PLC 和 IoT 程序通信的全局变量#INCLUDE NOW_TIME.ST PROGRAM PLC VAR (*数字输入[触点]*) X : ARRAY[0..15] OF BOOL AT %IX0; (*数字输出[线圈]*) Y : ARRAY[0..15] OF BOOL AT %QX0; IW : ARRAY[0..31] OF UINT; MW : ARRAY[0..31] OF UINT; END_VAR (*数字输入[触点]防抖定时器*) VAR XI0 : TON; XI1 : TON; XI2 : TON; XI3 : TON; XI4 : TON; XI5 : TON; XI6 : TON; XI7 : TON; XI8 : TON; XI9 : TON; XI10 : TON; XI11 : TON; XI12 : TON; END_VAR (*当前时间*) VAR CT : TIME; END_VAR (*程序间通信*) VAR_EXTERNAL MQTT_R : BOOL; MQTT_T : BOOL; END_VAR (*具体应用使用的变量*) VAR SP : SINT; PV : LREAL; END_VAR (*数字输入防抖*) XI0(IN : X[0], PT : T#10MS); XI1(IN : X[1], PT : T#10MS); XI2(IN : X[2], PT : T#10MS); XI3(IN : X[3], PT : T#10MS); XI4(IN : X[4], PT : T#10MS); XI5(IN : X[5], PT : T#10MS); XI6(IN : X[6], PT : T#10MS); XI7(IN : X[7], PT : T#10MS); XI8(IN : X[8], PT : T#10MS); XI9(IN : X[9], PT : T#10MS); XI10(IN : X[10], PT : T#10MS); XI11(IN : X[11], PT : T#10MS); XI12(IN : X[12], PT : T#10MS); (*更新当前时间CT 可以作为所有自定义定时控制功能和功能块的定时基准*) CT : NOW_TIME(TRUE); (*具体应用程序处理逻辑*) Y[0] : XI0.Q; Y[1] : NOT XI1.Q; Y[2] : XI2.Q AND XI3.Q; Y[3] : XI4.Q OR XI5.Q; END_PROGRAM PROGRAM IOT (*获取系统信息*) VAR MACV : ULINT; ETH : ULINT; VM : UDINT; IP : STRING; RSSI : INT; END_VAR (*固件和应用程序升级*) VAR OTA : BOOL : FALSE; UPG : BOOL : FALSE; URL : STRING : HTTP:; END_VAR (*TCP 客户端通信*) VAR TCP : TCP_CLIENT; RX0 : TCP_RX; RX1 : TCP_RX; TX0 : TCP_TX; VN : STRING; VV : STRING; SV : SETV; GV : GETV; RSP : BOOL : FALSE; END_VAR VAR DEBUG_V : BOOL : FALSE; END_VAR VAR INIT : BOOL : TRUE; END_VAR (*MQTT 通信*) VAR MQTT : WIFI_MQTT; MQTT_RX : MSG_RX; MQTT_TX : MSG_TX; TOPIC_D : V2STR; TOPIC_U : V2STR; END_VAR (*程序间通信*) VAR_EXTERNAL MQTT_R : BOOL; MQTT_T : BOOL; END_VAR (*TCP 客户端*) TCP(SVR : 192.168.31.155, PORT : 5000); (*网络调试指令*) RX0(EN : DEBUG_V AND TCP.S, BS : FALSE, C : TCP.C, MSG : GETV([VN])); RX1(EN : DEBUG_V AND TCP.S, BS : FALSE, C : TCP.C, MSG : SETV([VN]:[VV])); IF RX1.R TRUE THEN SV(V : VN, P : VV); END_IF; IF RX0.R TRUE OR RX1.R TRUE THEN GV(V : VN); RSP : TRUE; END_IF; TX0(EN : DEBUG_V AND TCP.S, BS : FALSE, C : TCP.C, MSG : [MACV]#[VM][IP][VN]:[GV.Q], T : RSP); RSP : FALSE; (*MQTT 通信*) IF INIT THEN TOPIC_D(V:DEVICE/DOWN/[MACV]); TOPIC_U(V:DEVICE/UP/[MACV]); INIT : FALSE; END_IF; MQTT(SSID : xxx, PSW : abc123!, SVR : mqtt.example.com, USR : mqtt_usr, KEY : mqtt_psw); MQTT_RX(EN : MQTT.CONN, TOPIC : TOPIC_D.S, MSG : PV[PV],SP[SP], R MQTT_R); MQTT_TX(EN : MQTT.CONN, TOPIC : TOPIC_U.S, MSG:PV[PV],SP[SP], T : MQTT_T); END_PROGRAM CONFIGURATION PLC_IOT_CFG VAR_GLOBAL (*系统信息接口绑定变量*) SYS_CFG : STRING : SYS_SETTING[MAC:MACV,EMAC:ETH,VER:VM,IP:IP,RSSI:RSSI]; (*系统固件升级*) OTA_CFG : STRING : OTA_CONFIG[OTA,URL]; (*应用程序升级*) UPG_CFG : STRING : UPGRADE_CONFIG[UPG,URL]; END_VAR VAR_GLOBAL (*Modbus 从站设置*) MDB_CFG : STRING : MODBUS_CONFIGcom:[1,115200,2,8,1,1,1500]; (*位寻址读写寄存器*) REG_1 : STRING : MDB_REG{1,1}:[Y,DEBUG_V,RSP]; (*位寻址只读寄存器*) REG_10001 : STRING : MDB_REG{1,10001}:[X]; (*字寻址只读寄存器*) REG_30001 : STRING : MDB_REG{1,30001}:[IW]; (*字寻址读写寄存器*) REG_40001 : STRING : MDB_REG{1,40001}:[MW]; END_VAR RESOURCE PLC_IOT ON PLC VAR_GLOBAL MQTT_R : BOOL : FALSE; MQTT_T : BOOL : FALSE; END_VAR TASK task0(INTERVAL : T#2ms, PRIORITY : 0); PROGRAM INS0 WITH task0 : PLC; PROGRAM INS1 WITH task0 : IOT; END_RESOURCE END_CONFIGURATION三、全局配置设置全局配置设置是应用程序启用 PLC-IoT 底层固件内置功能组件的配置窗口在 CONFIGURATION ... END_CONFIGURATION 中完成。基本模板的全局配置设置包含系统信息接口变量绑定、远程升级固件及应用程序控制变量绑定、Modbus 从站配置及寄存器映射。四、基本 PLC 程序框架PLC 程序本身因项目的具体要求不同其实很难说有什么模板可套用但基本的框架是有的包括数字输入[触点]的定义及硬件端口绑定、数字输出[线圈]的定义及硬件端口绑定、输入的防抖处理、获取程序定时基准、程序间协同动作、应用功能实现逻辑。五、基本 IoT 程序框架与 PLC 程序的多样性相比IoT 程序的功能明确很多。通信功能有云端网络通信、局域网内上位机通信、现场设备互联通信。应用功能需求主要有设备远程维护、应用业务数据传输。基本模板的 IoT 程序框架提供“设备远程维护”的参考模板包含一个连接局域网内 IP 地址为 192.168.31.155、端口为 5000 的服务器的 TCP 客户端两个 TCP 接收处理的功能块RX0、RX1和一个 TCP 发送功能块TX0一个设置变量值功能块和一个获取变量值功能块。实现的功能是 RX0 接收格式为 GETV(...) 的消息将括号内的字符串传递到 VN 变量RX1 接收格式为 SETV(...) 的消息将括号内的内容解析后存储在 VN 和 VV 变量RX1 收到满足条件的消息会让 SV设置变量值功能块以 VN变量名和 VV变量值为输入执行动作RX0 或 RX1 接收到满足条件的消息都会让 GV获取变量值功能块以 VN 为输入执行动作获得的值字符串存储在 GV.Q通过设置 RSP 为 TRUE触发 TX0 执行动作发送消息。通过在服务器上向设备发送 SETV 或者 GETV 消息可以设置或者查看设备程序的变量的值达到调试的目的通过 SETV 消息设置全局变量 URL 的值然后设置 OTA 或者 UPG 的值为 TRUE触发设备执行固件升级或者应用程序升级达成升级维护的目的。实践中这种设置以及获取变量值的功能等同于提供的一个控制台远程操作设置是超级管理员的权限是要默认关掉在真的有必要用到远程维护的时候通过设备的 HMI 开启。所以设计模板中提供一个 DEBUG_V 变量作为远程控制的开关并将此变量分配到一个 Modbus 的位寻址读写寄存器可以通过 HMI 进行设置。如果没有连接 HMI可以通过数字输入端口来实现设置远程操作开关的功能。基本模板的 IoT 程序框架提供“应用业务数据传输”参考模板是基于 MQTT 的消息传输构建通过设置 MAC 地址区分的上行主题和下行主题通过全局变量 MQTT_T 和 MQTT_R 与 PLC 程序协同工作。六、设计模板的作用一般意义上设计模板是给设计师快速套用做出可用的交付结果提升工作效率。在用 AI Agent 进行编程的环境下效率已经不再是瓶颈交付结果是否符合预期更为重要提供设计模板给 AI Agent 在特定框架内写程序生成的代码不容易失控。PLC-IoT ST 程序设计基本模板所提供的 TCP “设备远程维护”提供了网络调试的接口可以指导 AI Agent 生成网络测试脚本形成设计验证的闭环确保交付结果满足项目要求。