mcpField
I
iec61131

iec61131

github.com/claude-dev-suite开发46148 次安装2 天前更新
代码仓库

关于 iec61131

面向 IEC 61131-3 PLC 编程人员的参考资料,介绍相关语言、程序组织单元、数据类型和交换格式,并概述 PLCopen 标准及不同厂商对格式的支持情况。

主要功能

  1. 01五种 IEC 61131-3 语言概览
  2. 02程序组织单元与变量范围
  3. 03数据类型参考
  4. 04PLCopen 标准与交换格式
  5. 05语言结构示例

适用场景

  1. 01选择适合 PLC 任务的编程语言
  2. 02查阅功能块与变量定义
  3. 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

变量作用域

作用域关键字描述
局部VARPOU 内部使用
输入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 扩展
TC6XML 交换厂商中立的程序交换格式

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 XMLIEC 61131-10CODESYS、Schneider、Beckhoff
SimaticMLSiemens 专有TIA Portal
AutomationMLIEC 62714Siemens PCS 7 V9+、多厂商
FHXEmerson 专有DeltaV
PRT/CSVABB 专有Freelance
DEXPIISO 15926P&ID 交换

评论

支持 Markdown