s7-scl-gen
Version:
S7 PLC SCL 代码自动生成
203 lines (170 loc) • 7.1 kB
YAML
#CPU: AS1 # 指示属于哪一个CPU
#feature: valve # 指示本配置为生成 valve 代码
name: AS1-valve # 相当于上面2条被注释的指令
symbols:
# 系统已有2个内置符号,其内容自动生成:
# - [Valve_Proc, FB513] 阀门主处理函数块
# - [Valve_Loop, FC513] 主调用函数
# 可以在对上述内置符号的地址进行更改,只要重新定义就可以了,注意保持名称一致
# 以下为自定义符号
- [AI11-01, PIW672]
- [AI11-02, PIW674]
- [DI01-01, I0.0]
- [DI01-02, I+]
- [DI01-03, I+]
- [DI01-04, I+]
- [DI01-05, I+]
- [DI01-06, I+]
- [DI01-07, I+]
- [DI01-08, I+]
- [DI02-01, I+]
- [DI02-02, I+]
- [DO01-01, Q0.0]
- [DO01-02, Q+]
- [DO01-03, Q+]
- [DO02-01, Q2.0]
- [DO02-02, Q+]
- [DO02-03, Q+]
- [DO02-04, Q+]
list :
# 没有阀位时,AI 可直接设置为断线值S7_AI_MIN_WORD
# 没有远程信号时,remote可不赋值,其值默认为TRUE,如果要避免其它过程改变它,可以显式赋值为 true
# 没有故障信号时,error可不赋值,其值默认为FALSE,如果要避免其它过程改变它,可以显式赋值为 false
# 必须有开到位和关到位信号,否则会导致 close_action open_action 无法撤销信号,转译的SCL可能工作不正常
# 以下常量可以直接使用
# S7_ZERO := 0;
# S7_SPAN := 27648;
# S7_AI_MIN := -32768;
# S7_AI_MIN_WORD := W#16#8000;
# S7_AI_MAX := 32767;
# S7_AI_MAX_WORD := W#16#7FFF;
- comment: A阀门 2DO回路,开与关都是得电动作、失电停止
DB: [MGV-1201A, DB111] # 阀门DB块 类型: S7符号定义 | S7符号引用
# 以下7项类型: S7符号定义 | S7符号引用 | SCL表达式
AI: AI11-01 # 阀位信号输入
# 以下6项类型: S7符号定义 | S7符号引用 | SCL表达式
# 值类型为 boolean,SLC符号与表达式结果必须也是 boolean
CP: DI01-01 # 关到位信号 可省略,将没有关位状态
OP: DI01-02 # 开到位信号 可省略,将没有开位状态
error: DI01-03 # 错误信号 可省略,默认为false
remote: DI01-04 # 远程信号 可省略,默认为true
close_action: DO01-01 # 关阀线圈 可省略
open_action: DO01-02 # 开阀线圈 可省略
# 容错区间初始值,也叫死区,用于报警和定位指定阀位
# 通常省略,默认为0.5
# 类型: null | 浮点数字面量
$FT_zone: 0.8
# 动作时间,可省略,默认100000(100秒),单位毫秒
# 类型: null | 整数字面量 | TIME字面量
# 指示完成某个阀动作的最长时间,比如开阀、关阀等,以实际设备为准
# 该值将用于无阀位时判断是否离线,发出动作信号并经过该时间后是否到达指定阀状态
$action_time: 10000 # 设置最长动作时间为10秒,也可以用 TIME#10S
# 信号时间,可省略,默认500(0.5秒),单位毫秒
# 指示停止等信号要保持持续的最短时间
# 有阀位时在该时间后判断阀是否动作
# 类型: null | 整数字面量 | TIME字面量
$signal_time: TIME#1S # 设置最短信号时间为1秒,也可以用 1000
- comment: B阀门 3DO回路,开与关信号会执行机构自保持,故必须有停止信号
DB: [MGV-1201B, DB+]
AI: ~ # 没有AI过程值时,可省略,省略时禁用行程命令,并将强制赋断线值以保证PLC运行期间不被改变
CP: DI01-05
OP: DI01-06
error: '"DI01-07" and "DI01-08"'
remote: TRUE # 没有remote过程值时,必须赋值TRUE,也可以象下方C阀门一样省略,会默认为TRUE
close_action: DO02-01
open_action: DO02-02
stop_action: DO02-03
- comment: C阀门 1DO回路
DB: [MGV-1201C, DB+]
AI: AI11-02
CP: DI02-01
OP: DI02-02
# 控制信号输出
# 类型: S7符号定义 | S7符号引用 | SCL表达式
# 值类型为 boolean,SLC符号与表达式结果必须也是 boolean
# 得电开阀、失电关阀(通过常闭触点可翻转信号)
control_action: DO02-04
- comment: D阀门 最简用例
DB: [MGV-1201D, DB+]
# 本阀门只能关阀
close_action: DO01-03
# 用户自写SCL代码,放在循环的开始和结束处。
loop_begin: |-
// 这里的代码将在 Valve_Loop 循环开始时执行
loop_end: |-
// 这里的代码将在 Valve_Loop 循环结束时执行
options : # 选项,非必需,无需要时可以全部删除或注释掉。
# output_file : 'example.scl'
# 内容与 AS1-valve 相同,仅仅是CPU中的平台不一样。
name: AS2-valve
symbols:
# 系统已有2个内置符号,其内容自动生成:
# - [Valve_Proc, FB513] 阀门主处理函数块
# - [Valve_Loop, FC513] 主调用函数
# 可以在对上述内置符号的地址进行更改,只要重新定义就可以了,注意保持名称一致
# 以下为自定义符号
- [AI11-01, PIW672]
- [AI11-02, PIW674]
- [DI01-01, I0.0]
- [DI01-02, I+]
- [DI01-03, I+]
- [DI01-04, I+]
- [DI01-05, I+]
- [DI01-06, I+]
- [DI01-07, I+]
- [DI01-08, I+]
- [DI02-01, I+]
- [DI02-02, I+]
- [DO01-01, Q0.0]
- [DO01-02, Q+]
- [DO01-03, Q+]
- [DO02-01, Q2.0]
- [DO02-02, Q+]
- [DO02-03, Q+]
- [DO02-04, Q+]
list:
# 以下常量可以直接使用
# S7_ZERO : Int := 0;
# S7_SPAN : Int := 27648;
# S7_AI_MIN : Int := -32768;
# S7_AI_MIN_WORD : Word := WORD#16#8000;
# S7_AI_MAX : Int := 32767;
# S7_AI_MAX_WORD : Word := WORD#16#7FFF;
- comment: A阀门 2DO回路,开与关都是得电动作、失电停止
DB: [MGV-1201A, DB111] # 阀门DB块 类型: S7符号定义 | S7符号引用
AI: AI11-01 # 阀位信号输入
CP: DI01-01 # 关到位信号 可省略,将没有关位状态
OP: DI01-02 # 开到位信号 可省略,将没有开位状态
error: DI01-03 # 错误信号 可省略,默认为false
remote: DI01-04 # 远程信号 可省略,默认为true
close_action: DO01-01 # 关阀线圈 可省略
open_action: DO01-02 # 开阀线圈 可省略
$FT_zone: 0.8
$action_time: 10000 # 设置最长动作时间为10秒,也可以用 TIME#10S
$signal_time: TIME#1S # 设置最短信号时间为1秒,也可以用 1000
- comment: B阀门 3DO回路,开与关信号会执行机构自保持,故必须有停止信号
DB: [MGV-1201B, DB+]
AI: ~ # 没有AI过程值时,可省略,省略时禁用行程命令,并将强制赋断线值以保证PLC运行期间不被改变
CP: DI01-05
OP: DI01-06
error: '"DI01-07" and "DI01-08"'
remote: TRUE # 没有remote过程值时,必须赋值TRUE,也可以象下方C阀门一样省略,会默认为TRUE
close_action: DO02-01
open_action: DO02-02
stop_action: DO02-03
- comment: C阀门 1DO回路
DB: [MGV-1201C, DB+]
AI: AI11-02
CP: DI02-01
OP: DI02-02
control_action: DO02-04
- comment: D阀门 最简用例
DB: [MGV-1201D, DB+]
close_action: DO01-03
loop_begin: |-
// 这里的代码将在 Valve_Loop 循环开始时执行
loop_end: |-
// 这里的代码将在 Valve_Loop 循环结束时执行
...