---
#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 循环结束时执行

...
