4. IEC 61131-3编程基础在PLCnext中的实现
PLCnext Control 的运行时完整支持 IEC 61131-3 标准,但它的实现方式与传统的“单一控制器 + 单一工程”有明显差异:变量、程序组织单元(POU)、任务配置、库函数和在线调试分别落在不同的工程对象中,并通过 ACF(Axioline 组件框架)与 Linux 侧的组件协同。理解这些对象之间的对应关系,是后续做 HMI 集成与数据交换的前提。
变量与数据类型:从标准类型到 PLCnext 扩展
IEC 61131-3 定义了 BOOL、BYTE、WORD、DWORD、SINT/INT/DINT、USINT/UINT/UDINT、REAL/LREAL、TIME、STRING 等基本类型。在 PLCnext Engineer 中,这些类型可直接用于变量声明,但需要注意两点:一是 STRING 默认长度为 80 字符,若用于 HMI 显示需显式声明 STRING[255];二是 PLCnext 扩展了 LTIME、LWORD 以及 ARRAY、STRUCT 等复合类型,其中结构体在跨 HMI 通信时建议使用扁平化成员,避免嵌套过深导致符号映射困难。
变量按作用域分为三类:局部变量(VAR,仅在 POU 内可见)、输入/输出变量(VAR_INPUT/VAR_OUTPUT,用于 POU 间调用)、全局变量(VAR_GLOBAL,位于 GVL 中,可被 HMI 直接访问)。工程实践中,HMI 需要读写的变量应统一放入 GVL,并加前缀区分,例如 gHmi_StartCmd、gHmi_SpeedSet,便于在 OPC UA 或 Proficloud 中做符号过滤。
iCounter : INT := 0;。PLCnext 在冷启动时按初值初始化,热复位时保留保持型变量(RETAIN/PERSISTENT),这一差异会直接影响 HMI 上电后的显示状态。程序组织单元:FC、FB 与 PRG 的分工
IEC 61131-3 的 POU 分为函数(FUNCTION)、功能块(FUNCTION_BLOCK)和程序(PROGRAM)。在 PLCnext 中,三者的使用边界比较清晰:
- FC:无内部状态,适合做数学运算、单位换算、位操作。例如把
REAL转速换算为INT显示值。 - FB:带内部状态,适合做电机控制、PID、报警管理等需要记忆上次状态的逻辑。FB 必须实例化后调用,实例名建议与设备名一致,如
fbPump1。 - PRG:程序入口,通常一个任务对应一个 PRG,内部按顺序调用各 FB 和 FC。
一个常见的组织方式是:PRG_Main 作为主程序,内部依次调用 fbConveyor、fbValve、fcScale,而 HMI 只与 GVL 中的变量交互,不直接调用 FB。这样做的目的是让 HMI 与逻辑解耦,后续修改控制逻辑时不必重新映射 HMI 变量。
任务与周期配置:把逻辑放到正确的时间片
PLCnext 的任务配置决定了 POU 的执行时机。在 PLCnext Engineer 的“任务与事件”视图中,可以创建周期性任务并绑定 PRG。典型配置如下:
| 任务名 | 周期 | 绑定程序 | 典型用途 |
|---|---|---|---|
| Task_Fast | 10 ms | PRG_Fast | 高速计数、急停逻辑 |
| Task_Main | 50 ms | PRG_Main | 常规控制、联锁 |
| Task_Slow | 500 ms | PRG_Slow | HMI 数据刷新、统计 |
任务优先级由周期决定:周期越短优先级越高。若把 HMI 刷新放在 10 ms 任务中,会挤占控制逻辑的 CPU 时间,因此 HMI 相关变量建议放在 100 ms 以上的任务中更新。此外,PLCnext 支持事件触发任务,例如由 EVE_Input 触发,适合处理外部中断信号。
PLCnext 特有库函数
除标准库(如 TON、CTU、R_TRIG)外,PLCnext 提供了若干专用库,工程中常用的有:
PLCnextBase:提供系统信息、时间同步、诊断读取,例如GetSystemTime()。Arp库:用于 Axioline 模块的参数读写,如读取模块温度、通道状态。Profinet库:用于 PROFINET 设备的诊断与参数访问。OPC UA相关函数:用于在控制器内部构建 OPC UA 变量节点,供 HMI 或 SCADA 订阅。
使用这些库时,需要在“库”视图中添加对应库引用,并在 POU 中声明实例。例如调用 Arp_ReadModuleTemperature 时,需传入模块槽号与通道号,返回值为 REAL 温度值,可直接写入 GVL 供 HMI 显示。
在线调试与变量监视
PLCnext Engineer 的在线调试支持变量监视表、强制、写入和断点。实际操作中,先建立“监视表”,把需要观察的变量拖入,例如 gHmi_SpeedSet、fbPump1.Status、iCounter,然后点击“在线”进入监视模式。此时变量值以绿色显示实时值,若为 FALSE 则显示为灰色。
强制(Force)用于临时覆盖输入值,适合排查传感器故障;写入(Write)用于修改输出或内部变量,适合测试 HMI 命令。需要注意:强制值在退出在线模式后失效,而写入值会保留到下一次逻辑刷新。调试完成后应清除所有强制,避免遗留状态影响正式运行。
把上述对象串起来看:GVL 是 HMI 与逻辑之间的数据接口,PRG 是任务绑定的执行入口,FB 承载设备状态,库函数提供系统级能力,而在线调试则是验证这条链路是否按预期工作的手段。实际工程中,建议先定义 GVL 变量表,再编写 FB,最后配置任务并绑定 PRG,这样能减少后期因变量作用域或任务周期不匹配导致的返工。