工程师第一次打开一个 PLC 编程环境时,最常问的问题不是「怎么写代码」,而是「我该用哪一种语言写」。
IEC 61131-3 给出了五种标准编程语言,它们不是五个互相竞争的选项,而是为不同类型的问题准备的不同表达方式。
说明:kVPAC 对外语言口径为 IEC 61131-3 的五种语言 —— FBD/LD/ST/SFC/IL。各语言在平台上的当前实现状态与支持范围,以知识中心的支持的编程语言页面为准。
一、为什么需要五种语言
控制程序要回答的问题差异很大:
- 一个急停联锁,本质是逻辑条件,画出来比写出来更直观;
- 一个温度闭环,本质是信号流与运算块,连线比文本更清楚;
- 一段配方换算,本质是算法与数据结构,高级语言更合适;
- 一条清洗流程,本质是按步骤推进的时序,状态机表达最自然;
- 一段沿用了多年的既有逻辑,可能是逐条指令的形式。
用同一种语言硬写全部场景,结果通常是:图形逻辑里塞满算术、文本代码里手写状态机、联锁条件散落在各处。
二、五种语言速览
| 语言 | 全称 | 表达方式 | 典型场景 |
|---|---|---|---|
| LD | 梯形图(Ladder Diagram) | 触点、线圈、支路,继电器逻辑的等效画法 | 离散量联锁、启停回路、电气背景团队维护的逻辑 |
| FBD | 功能块图(Function Block Diagram) | 功能块与连线,信号自左向右流动 | 模拟量处理、控制回路组合、库功能块复用 |
| ST | 结构化文本(Structured Text) | 类 Pascal 的高级语言,含循环与结构化语句 | 算法计算、配方与数据表处理、批量逻辑 |
| SFC | 顺序功能图(Sequential Function Chart) | 步(Step)与转换条件(Transition) | 按步骤推进的工艺流程、设备状态机、启停序列 |
| IL | 指令表(Instruction List) | 逐条指令的低层表达 | 与既有代码对齐、需要贴近指令级行为的场合 |
三、怎么选:三条判据
- 问题的结构:是逻辑条件、信号流、算法、时序,还是指令序列?语言跟着结构走,不要反过来。
- 谁来维护:电气出身的团队读梯形图更快,软件出身的团队读结构化文本更快。可维护性优先于个人偏好。
- 与既有工程的一致性:改造项目里,与周围代码保持同一风格,比引入「更先进」的写法更有价值。
三条冲突时,优先级建议是:可维护性 > 结构匹配 > 风格统一。
四、混用时的组织原则
同一个工程里混用多种语言是常态,但需要约定:
- 按功能分区:一个功能块(FB)内部尽量只用一种语言,边界清晰。
- 用接口隔离:跨语言协作通过功能块的输入/输出引脚完成,而不是共享内部变量。
- 命名与注释统一:变量命名规则、注释语言、单位标注在同一工程内保持一致。
- 禁止重复实现:同一段逻辑不要用两种语言各写一遍,否则修改时必漏一处。
- 转换条件显式化:用 SFC 时,转换条件应写成可独立阅读的表达式或功能块调用,不要埋在图形连线里。
五、三个常见误区
- 把 ST 当万能语言:ST 能写一切,但把联锁条件写成大段
IF嵌套后,现场排查成本会显著上升。 - 用 SFC 表达连续控制:SFC 擅长「步进」,不适合表达连续调节;连续控制交给 FBD 或 ST 更合适。
- 图形逻辑不留注释:图形化不等于自解释。触点为什么这样串联,往往只有原作者知道。
六、延伸阅读
本文为技术解读,不替代产品文档;涉及具体操作与版本行为的细节,以知识中心为准。