RSLogix 5000 梯形图转结构化文本
RSLogix 5000(及其后续版本 Studio 5000 Logix Designer)没有内置的梯形图到结构化文本的转换器。需要梯形图程序等效结构化文本的工程师必须使用 IEC 61131-3 元素映射手动进行转换。
本文档记录了映射模式、定时器/计数器转换、作用域规则、扫描顺序陷阱以及现场工程师在将工作的梯形图程序重写为 CompactLogix 或 ControlLogix 程序的结构化文本时应遵循的验证程序。
如果你需要在西门子TIA Portal中将梯形图转成结构化文本(SCL),可以使用LAD2SCL插件。
1、Logix Designer 中的 IEC 61131-3 语言支持
Logix Designer 环境支持同一项目中的四种 IEC 61131-3 语言:梯形图(LD)、功能块图(FBD)、顺序功能图(SFC)和结构化文本(ST)。程序中的每个例程都绑定到一种语言;跨语言转换不是编辑器的一部分。用梯形图编写的例程无法"查看为结构化文本"或自动重写,因此唯一的方法是添加新的结构化文本例程,复制标签数据库,并根据 Logix 5000 控制器结构化文本编程手册(1756-RM003)中定义的结构化文本语法重新编写逻辑。
前提条件
- 已安装 Studio 5000 Logix Designer v21 或更高版本(建议使用 v32+ 以支持当前 CompactLogix 5380 / ControlLogix 5580 固件)。
- 打开源
.ACD项目文件且控制器处于离线状态。 - 有文档记录的 I/O 点列表,包含梯形图程序引用的精确标签名称、数据类型和槽/通道地址。
- 可访问 Logix 5000 控制器设计注意事项(1756-PM001)以了解标签作用域规则,以及 1756-RM003 以了解结构化文本语法。
- 修改前备份
.ACD文件。
2、添加结构化文本例程
对于一对一替换,在与梯形图例程相同的程序中添加新的结构化文本类型例程。将梯形图例程映射到更高级别的决策块,或使用 JSR(跳转到子程序)指令调用新的结构化文本例程以替代原始梯形图逻辑。这保留了扫描顺序,并允许在结构化文本重写行为异常时通过单次编辑将项目切换回梯形图版本。
3、元素映射表
| 梯形图元素 | 结构化文本等效项 | 说明 |
|---|---|---|
| XIC (-- | --) | |
| XIO (-- | / | --) |
| OTE (--( )--) | bool_var := expr; | 通电输出 |
| OTL / OTU | bool_var := 1; / bool_var := 0; | 结构化文本中的锁存/解锁;结构化文本没有保持锁存指令 |
| ONS(单脉冲) | osr_bit := input AND NOT osr_bit; | 手动边沿检测 |
| TON 定时器 | TON_instance(IN, PT); | 使用 TON 功能块实例 |
| TOF 定时器 | TOF_instance(IN, PT); | 断开延时 |
| RTO 定时器 | RTO_instance(IN, PT); | 保持定时器;梯形图中的 RES 变为 RTO_instance.RES := 1; |
| CTU 计数器 | CTU_instance(CU, R, PV); | 加计数器 |
| CTD 计数器 | CTD_instance(CD, LD, PV); | 减计数器 |
| EQU / NEQ / GRT / LES / GEQ / LEQ | = / <> / > / < / >= / <= | 标准 IEC 61131-3 比较运算符 |
| ADD / SUB / MUL / DIV | + / - / * / | 运算符,不是指令 |
| JSR / SBR / RET | 用户定义功能块调用 | 通过 IN/OUT 传递参数 |
4、示例:电机自保持电路
最常见的梯形图模式是电机自保持(带保持触点的启停电路)。在梯形图中如下所示:
--| |--------------( )--
Start Motor
--| |--
Stop
--| |--
Motor
等效的结构化文本代码为:
IF (Start AND NOT Stop) OR Motor THEN
Motor := 1;
ELSE
Motor := 0;
END_IF;
Motor 标签在 OR 表达式中被读取,因此其先前值闭合自保持分支;在扫描结束时赋值回 Motor 会将新值写入标签。这与梯形图产生的执行顺序相同。
5、定时器和计数器转换
Logix Designer 将定时器和计数器指令公开为在程序作用域中声明的功能块实例,然后可从任何语言调用。从结构化文本调用与功能块调用相同:
// 定时器示例
TON_01(IN := Start_PB, PT := T#5s);
// 计数器示例
CTU_1(CU := Sensor, RES := Reset_PB, PV := 100);
扫描顺序陷阱:CTU_1.RES := 1; 赋值必须在同一扫描中发生在 CTU_1(...) 功能块调用之前。否则计数器将在清除前多计一个脉冲。这与梯形图版本中 RES 分支位于计数输入之前的约束相同,但在结构化文本中更容易违反,因为编辑器不强制行顺序。
6、顺序梯级转换
具有顺序梯级的梯形图例程通过将梯级写为相同顺序的 IF ... END_IF; 块序列进行转换。以下示例展示了从工作机器中提取的简单取放循环:
// 梯级 0:启动循环
IF Start_PB AND NOT Cycle_Active THEN
Cycle_Active := 1;
END_IF;
// 梯级 1:伸出气缸
IF Cycle_Active AND NOT Cylinder_Extended THEN
Cylinder_Extend := 1;
END_IF;
// 梯级 2:缩回气缸
IF Cylinder_Extended AND Sensor_Detect THEN
Cylinder_Retract := 1;
END_IF;
7、结构化文本中的单脉冲上升沿(OSR)
Logix Designer 在梯形图中提供 OSR(单脉冲上升沿)指令。在结构化文本中,使用存储位手动创建相同的边沿:
// 单脉冲上升沿
OSR_Bit := Start_PB AND NOT OSR_Stored;
OSR_Stored := Start_PB;
第一行在 Start_PB 上升时计算单扫描 TRUE 脉冲;第二行更新存储值以供下一次扫描使用。将这两行配对在例程开头,以便所有下游梯级都可以使用该脉冲。
8、标签作用域规则
在控制器作用域声明的标签从每个程序和例程中可见。在程序作用域声明的标签仅在该程序内可见;从不同程序引用程序作用域标签需要路径限定符,如 MyProgram.MyTag。结构化文本没有单独的作用域关键字,但相同的规则在运行时适用。DINT(32 位有符号)、REAL(IEEE 754 单精度)和 BOOL 是主要数据类型;混合 SINT 和 INT 需要显式类型转换以避免截断警告。
9、验证程序
- 编译干净。在 Logix Designer 中选择逻辑 > 验证 > 项目并解决每个错误。结构化文本被严格解析; stray 分号或不匹配的
END_IF会阻止下载。 - 交叉引用检查。对原始梯形图例程中的每个标签使用搜索 > 交叉引用。任何仅在新结构化文本例程中显示引用而在旧梯形图中为零的标签都表示重写遗漏了输出。
- 计数器交叉检查。向每个计数器(CTU/CTD)发送已知数量的脉冲,并确认
.ACC和.DN位与梯形图版本匹配。差一是最常见的结构化文本转换错误。
10、常见陷阱和修复方法
| 症状 | 原因 | 修复方法 |
|---|---|---|
| 输出永不关闭 | 自保持分支在保持位上额外使用了 OR | 仅使用 (Start AND NOT Stop) OR Motor |
| 计数器多计一个 | RES 在同一扫描中在 CTU 调用之后赋值 | 将 CTU_1.RES := 1; 移到功能块调用之前 |
| 定时器不启动 | PT 每次扫描赋值,紧接着 TON 调用 | 在周期块外赋值 PT 一次,或接受每次扫描覆盖 PT |
| 浮点数学运算返回零 | 结构化文本中的整数除法像 C 一样截断 | 将分子或分母转换为 REAL,例如 REAL(a)/REAL(b) |
| 单脉冲每次扫描都触发 | 存储边沿位未正确更新 | 确保 OSR_Stored := Start_PB; 在脉冲计算之后执行 |
原文链接:Converting Ladder Logic to Structured Text in Studio 5000
汇智网翻译整理,转载请标明出处