4. CODESYS开发环境与WAGO边缘控制编程

WAGO边缘控制器(如PFC200、Edge Controller系列)在出厂时已经预装了CODESYS运行时(Runtime),但真正用于编写、编译、下载和调试程序的,是安装在工程师PC上的CODESYS Development System。理解“PC端开发环境”与“控制器端运行时”的分工,是后续所有编程工作的前提:PC负责工程创建、代码编写、编译与在线调试;控制器负责执行已下载的应用、访问本地I/O与现场总线、并通过以太网与PC通信。

一、CODESYS安装与设备描述

CODESYS Development System可从CODESYS官网下载,安装时建议选择完整安装,确保包含标准库、可视化组件以及常用现场总线支持。安装完成后,第一次连接WAGO控制器前,通常还需要安装WAGO提供的设备描述文件(Device Description),常见形式为.devdesc.xml或打包的库文件。设备描述文件的作用,是让CODESYS在“添加设备”时能够识别WAGO控制器的具体型号、固件版本、可用插槽、I/O模块以及支持的现场总线,从而在设备树中正确生成硬件结构。

安装设备描述的一般做法是:打开CODESYS,进入Tools → Device Repository,点击Install…,选择WAGO提供的设备描述文件并确认安装。安装成功后,在Device对话框的厂商列表中应能看到WAGO,并可在其下找到对应控制器型号。若未安装设备描述,添加设备时可能只能看到通用CODESYS Control Win,无法匹配真实硬件,后续I/O映射和总线配置都会受限。

设备描述文件应与控制器实际固件版本匹配。若控制器固件较新而设备描述较旧,可能出现设备可添加但部分功能不可用的情况,此时应优先更新设备描述或确认固件兼容性。

二、工程创建与设备树结构

在CODESYS中新建工程时,选择Standard Project,并在设备选择界面中指定WAGO控制器型号与编程语言。CODESYS支持IEC 61131-3定义的五种主要语言:梯形图(LD)、功能块图(FBD)、顺序功能图(SFC)、结构化文本(ST)和指令表(IL)。对于边缘控制中的数据处理、协议转换和逻辑判断,结构化文本(ST)通常更高效;对于电气逻辑清晰的联锁控制,梯形图(LD)更直观。

工程创建后,设备树(Device Tree)是组织整个项目的核心。典型结构如下:最上层是Device(WAGO控制器),其下包含PLC_PRG等程序组织单元(POU)、Task Configuration(任务配置)、EtherCAT Master或Modbus TCP Master等现场总线主站,以及I/O Mapping(I/O映射)。每个POU可以包含变量声明区和代码区,变量分为局部变量(VAR)、输入输出变量(VAR_INPUT/VAR_OUTPUT)、全局变量(VAR_GLOBAL)等。

CODESYS工程结构与WAGO控制器连接关系 工程师PC · CODESYS Development System Device Repository WAGO设备描述文件 (.devdesc.xml) Standard Project 选择控制器型号 + IEC 61131-3语言 Device Tree Device / PLC_PRG / Task / I/O Mapping 编译与下载 Build → Login → Download 在线调试 Watch / Breakpoint / Trace Ethernet TCP/IP WAGO边缘控制器 · CODESYS Runtime 应用执行 PLC_PRG 周期运行 任务调度 MainTask / 周期任务 / 优先级 I/O与现场总线 本地I/O / Modbus TCP / EtherCAT 变量与数据 全局变量 / 保留变量 / 掉电保持 通信服务 OPC UA / MQTT / Web可视化

三、IEC 61131-3编程语言与程序组织

IEC 61131-3不仅规定了语言,还规定了程序组织单元(POU)的类型:程序(PROGRAM)、功能块(FUNCTION_BLOCK)和函数(FUNCTION)。程序是周期执行的顶层单元;功能块带有内部状态,适合封装电机控制、PID调节、协议解析等可复用逻辑;函数无内部状态,适合数学计算和类型转换。在边缘控制中,常把Modbus读写封装为功能块,把数据缩放封装为函数,把主逻辑放在PLC_PRG中调用。

以结构化文本为例,一个简单的模拟量缩放功能块可以这样定义:输入RawValue(INT,0~27648)、RawMin、RawMax、EngMin、EngMax,输出EngValue(REAL)。计算式为EngValue := (RawValue - RawMin) * (EngMax - EngMin) / (RawMax - RawMin) + EngMin;。若RawValue=13824,RawMin=0,RawMax=27648,EngMin=0.0,EngMax=100.0,则EngValue=50.0。这类计算在边缘侧常用于把PLC原始值转换为温度、压力或流量工程值。

四、任务配置与在线调试

任务配置决定程序的执行时机和优先级。在Task Configuration下可添加MainTask,设置周期类型(Cyclic)和间隔(如T#20ms),再把PLC_PRG分配给该任务。对于需要快速响应的逻辑,可设置更短周期(如T#5ms)并提高优先级;对于数据上传、日志记录等非实时任务,可设置较长周期(如T#1s)并降低优先级。需要注意,任务周期过短会增加CPU负载,应结合实际控制要求与控制器性能设定。

在线调试是验证程序是否按预期运行的关键。常用手段包括:Login后进入在线模式,使用Watch窗口监视变量实时值;在代码行设置断点,观察程序暂停时的变量状态;使用Trace记录变量随时间的变化曲线,适合分析周期任务中的波动和时序问题。若下载后控制器报错,应检查设备描述是否匹配、任务周期是否合理、I/O映射地址是否与实际模块一致。

在线修改并下载程序时,控制器可能短暂停止运行。对于正在执行控制任务的设备,应确认现场处于安全状态,或先切换到调试模式再下载。

五、一个可复现的工程创建检查清单

检查项操作要点判断依据
设备描述Tools → Device Repository → Install,选择WAGO设备描述文件厂商列表出现WAGO,型号可选中
工程创建Standard Project,选择对应控制器和ST语言设备树生成Device与PLC_PRG
任务配置MainTask周期T#20ms,PLC_PRG分配至该任务任务树中可见MainTask及调用关系
I/O映射在I/O Mapping中为变量绑定通道地址变量与%I/%Q地址对应正确
编译下载Build → Login → Download无编译错误,控制器进入RUN
在线验证Watch窗口监视关键变量,必要时设断点变量值随输入变化,逻辑符合预期

完成上述步骤后,工程师就具备了一个可运行、可观察、可修改的最小工程框架。后续的Modbus TCP通信、OPC UA服务、MQTT上传和边缘数据处理,都是在这个框架上逐步扩展POU、任务和通信配置来实现的。