关于 iec61131
面向 IEC 61131-3 PLC 编程人员的参考资料,介绍相关语言、程序组织单元、数据类型和交换格式,并概述 PLCopen 标准及不同厂商对格式的支持情况。
主要功能
- 01五种 IEC 61131-3 语言概览
- 02程序组织单元与变量范围
- 03数据类型参考
- 04PLCopen 标准与交换格式
- 05语言结构示例
适用场景
- 01选择适合 PLC 任务的编程语言
- 02查阅功能块与变量定义
- 03了解 PLC 程序交换格式支持
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ claude-dev-suite/ claude-dev-suite --skill iec61131安装后在 Claude Code 中输入/iec61131确认已加载。
详细介绍
IEC 61131-3 编程语言参考
概述
IEC 61131-3 为 PLC 定义了 5 种可互换的编程语言:
| 语言 | 类型 | 最适用于 | 状态 |
|---|---|---|---|
| LD(梯形图) | 图形化 | 离散逻辑、电机联锁 | 活跃 |
| FBD(功能块图) | 图形化 | 连续控制、PID、模拟量 | 活跃(DCS 主用) |
| ST(结构化文本) | 文本化 | 复杂计算、算法 | 活跃(表达能力最强) |
| IL(指令表) | 文本化 | 底层、类似汇编 | 已弃用(2013 年第 3 版) |
| SFC(顺序功能图) | 图形化 | 顺序控制、批处理、状态机 | 活跃 |
程序组织单元(POU)
PROGRAM
顶层可执行程序,与一个任务(扫描周期)关联。
FUNCTION_BLOCK(FB)
可复用的块,具有持久的内部状态(调用之间保留内存)。用于电机、PID、定时器、计数器。
FUNCTION_BLOCK MotorControl
VAR_INPUT
StartCmd : BOOL;
StopCmd : BOOL;
FbkRun : BOOL;
Interlock: BOOL;
END_VAR
VAR_OUTPUT
StartOut : BOOL;
Running : BOOL;
Fault : BOOL;
END_VAR
VAR
MonTimer : TON;
State : INT;
END_VAR
FUNCTION(FC)
无状态,不占用内存。相同输入始终返回相同输出。
数据类型
基本类型
BOOL、BYTE、WORD、DWORD、LWORD、SINT、INT、DINT、LINT、USINT、UINT、UDINT、ULINT、REAL、LREAL、TIME、DATE、TIME_OF_DAY、DATE_AND_TIME、STRING、WSTRING
派生类型(用户定义)
TYPE MotorData :
STRUCT
Running : BOOL;
Fault : BOOL;
Speed : REAL;
Runtime : TIME;
END_STRUCT
END_TYPE
变量作用域
| 作用域 | 关键字 | 描述 |
|---|---|---|
| 局部 | VAR | POU 内部使用 |
| 输入 | VAR_INPUT | 只读输入参数 |
| 输出 | VAR_OUTPUT | 输出参数 |
| 输入/输出 | VAR_IN_OUT | 双向参数 |
| 全局 | VAR_GLOBAL | 所有 POU 均可访问 |
| 外部 | VAR_EXTERNAL | 对全局变量的引用 |
| 临时 | VAR_TEMP | 不持久保存 |
| 配置 | VAR_CONFIG | 下载时设置 |
| 常量 | CONSTANT | 命名常量 |
语言详情
ST(结构化文本)- 与代码生成最相关
IF Motor.FbkRunning AND NOT Motor.Fault THEN
Motor.Status := RUNNING;
Motor.Runtime := Motor.Runtime + T#1s;
ELSIF Motor.Fault THEN
Motor.Status := FAULTED;
Motor.AlarmActive := TRUE;
END_IF;
CASE State OF
0: (* IDLE *)
IF StartCmd AND NOT Interlock THEN State := 1; END_IF;
1: (* STARTING *)
StartOut := TRUE;
MonTimer(IN:=TRUE, PT:=T#10s);
IF FbkRun THEN State := 2; END_IF;
IF MonTimer.Q THEN State := 99; END_IF;
2: (* RUNNING *)
IF StopCmd THEN State := 3; END_IF;
3: (* STOPPING *)
StartOut := FALSE;
99: (* FAULT *)
StartOut := FALSE;
Fault := TRUE;
END_CASE;
SFC(顺序功能图)
元素:步、转换、动作
- 步包含动作(可用任何语言编写)
- 转换是布尔条件
- 动作限定符:N(不存储)、S(置位)、R(复位)、L(限时)、D(延迟)、P(脉冲)
- 并行分支(同时执行)、选择分支(择一执行)
FBD(功能块图)
信号从左向右流动。块表示函数。连线将输出连接到输入。DCS 中的主要语言(PCS 7 CFC、DeltaV Control Studio、ABB Freelance)。
LD(梯形图)
基于继电器逻辑。触点(常开/常闭)、线圈、定时器、计数器。左右两侧为电源母线。梯级从上到下排列。
PLCopen 标准
| TC | 主题 | 描述 |
|---|---|---|
| TC1 | 标准 | IEC 61131-3 合规性测试 |
| TC2 | 运动控制 | MC_MoveAbsolute、MC_Stop、MC_Home 等 |
| TC3 | 软件工程 | 编码指南 |
| TC4 | 通信 | OPC UA 映射 |
| TC5 | 安全 | IEC 61508 扩展 |
| TC6 | XML 交换 | 厂商中立的程序交换格式 |
PLCopen XML 格式(TC6)
<project xmlns="http://www.plcopen.org/xml/tc6_0201">
<types>
<pous>
<pou name="MotorControl" pouType="functionBlock">
<interface>
<inputVars>
<variable name="Start"><type><BOOL/></type></variable>
</inputVars>
<outputVars>
<variable name="Running"><type><BOOL/></type></variable>
</outputVars>
</interface>
<body>
<ST><xhtml></xhtml></ST>
</body>
</pou>
</pous>
</types>
</project>
支持的平台:CODESYS、ABB AC500、Schneider、Beckhoff、B&R。 不支持的平台:ABB Freelance(使用 PRT)、Emerson DeltaV(使用 FHX)、Siemens(使用 SimaticML)。
其他交换格式
| 格式 | 标准 | 使用方 |
|---|---|---|
| PLCopen XML | IEC 61131-10 | CODESYS、Schneider、Beckhoff |
| SimaticML | Siemens 专有 | TIA Portal |
| AutomationML | IEC 62714 | Siemens PCS 7 V9+、多厂商 |
| FHX | Emerson 专有 | DeltaV |
| PRT/CSV | ABB 专有 | Freelance |
| DEXPI | ISO 15926 | P&ID 交换 |
评论
支持 Markdown