---
#CPU: AS1        # 指示 CPU 名称是 AS1
#feature: AI     # 指示本配置为生成 AI 代码

name: AS1-AI     # 相当于上面2条被注释的指令

symbols:
# AI文档已有2个内置符号，其内容由本程序自动生成：
# - [AI_Proc, FB512]  模拟量主处理函数
# - [AI_Loop, FC512]  主循环调用FC，将这个加入OB1中
# 可以在对上述内置符号的地址进行更改，只要重新定义就可以了，注意保持名称一致
- [AI_Proc, FB600] # 可省略，修改内置AI_Proc地址
- [AI_Loop, FC600] # 可省略，当名称为AI_Loop，指示这是AI主调用FC块，这个要加入到OB中
# 可以把任何符号定义提前在这里，然后在list中对应符号引用项引用即可
- [PIT001,  DB100]

# 理论GCL转换可以在任何配置文档的任何地方使用 YAML1.1 的锚点和别名，实现数据的利用。
# 为了清晰可读，不建议用锚点和别名
# 如果必须使用，建议如下方式用template专门定义锚点，方便阅读
template:
- &tubepress       # 设置引用锚点，该锚点表示 & 符号位置所在的值（即右侧或下侧的value）可以在其它地方被引用
  $zero: -0.2
  $span: 2.6
  $AH_limit: 2.5
  $WH_limit: 2.0
  $WL_limit: -0.05
  $AL_limit: -0.1
  $dead_zone: 0.01

list: # 模拟量列表

  # 该模拟量的说明
  # 类型: 字符串字面量
  # 可省略，默认为 location + type
- comment: 来油入口压力

  # 仪表的位置，用于产生报警记录
  # 类型: 字符串字面量
  location: 来油入口

  # 仪表的类型，用于产生报警记录
  # 类型: 字符串字面量
  # 主要值有： 温度 压力 液位 振动 电流 电压 瞬时流量 ……
  type: 压力

  # AI数据块
  # 类型: S7符号定义 | S7符号引用
  # 没有该项则忽略转换，只输出 comment
  DB: PIT001

  # 输入值，可省略
  # 类型: S7符号定义 | S7符号引用 | SCL表达式
  input: [AI01-02, PIW514]
  # 零点初始值，可省略，默认为 0.0
  # 类型: null | 浮点数字面量
  $zero: 0
  # 量程初始值，可省略，默认为 100.0
  # 类型: null | 浮点数字面量
  $span: 2.0

  # 超限值初始值，可省略
  # 类型: null | 浮点数字面量
  # 省略或赋值为fasle时，代表该超限报警不启用。
  # 以下默认了相关超限报警都允许
  $AH_limit: 2.5
  $WH_limit: 2.0
  $WL_limit: -0.05
  $AL_limit: -0.1

  # 死区初始值
  # 类型: null | 浮点数字面量
  $dead_zone: 0.05

  # 容错延时，可省略，默认0，即不延时
  # 类型: null | 整数字面量 | TIME字面量
  # 该设置用于过滤过程值的突变，当为整数值时，代表毫秒数
  $FT_time: 3000  # 也可以设置为 `T#3S`

- location: 泵进口
  type: 压力
  DB: [PIT002, DB101]
  input: [AI01-01, PIW512]

  # 报警便能初始值
  # 类型: null | Bool字面量
  # 通常情况下省略，因为对应 $XX_limit 的值在大部分情况下可指示报警启用状态
  # $enable_AH 高高报警值
  $enable_AH: true   # 代表初始时允许AH报警，这时必须定义 $AH_limit
  # $enable_WH 高警告值
  $enable_WH: true   # 代表初始时允许WH报警，这时必须定义 $WH_limit
  # $enable_WL 低警告值
  $enable_WL: ~      # 相当于省略，这时由 $WL_limit 决定初始时是否允许WL报警
  # $enable_AL 低低报警值
  $enable_AL: false  # 代表初始时不允许AL报警，可以省略定义 $AL_limit

  # 报警初始值
  # 以下相当于把模板tubepress的部分数据进行更改
  $AL_limit: ~       # 引用对象无法删除某个属性，但可以将该属性设置为 null 达到等效作用
  $WH_limit: 2.0     # 修改$WH_limit模板的值

  # yaml语法"<<: *anchor" 表示将锚点anchor的内容合并在这里
  <<: *tubepress

- location: 泵进口
  type: 温度
  DB: [TIT001, DB+]
  input: [AI01-03, PIW516]   # AI通道
  $zero: -40.0
  $span: 80.0
  $AL_limit: 25.0
  # enable_AH,enable_WH,enable_WL,enable_AL 4个参数用于运行期间的赋值
  # 非$符号开头的参数，约定为运行期间的配置
  # 类型:  S7符号定义 | S7符号引用 | S7表达式
  # 以下例子为运行期间(根据泵运行状态)动态设置是否允许低低报警
  enable_AL: 'pump1.run_state'
  $FT_time: TIME#3M         # TIME字面量

- location: 气温
  type: 温度
  DB: [TIT002, DB+]
  input: [M485-1, MW100]    # M区域
  # 这里取消了所有报警

  # 以下几项为整数SCL表达式，只能用于初始值
  $zero_raw: 0
  $span_raw: 27648
  $overflow_SP: 28000
  $underflow_SP: -500

- location: 1#储罐
  type: 液位
  DB: [LIT0101, DB+]
  input: '"RecvDB".Tank1'   # SCL表达式，转换程序不检查正确性
  $span: 10.0

- comment: 占位      
  # 在有DB块的情况下，会生成AI数据块
  # 在有DB参数的情况下，有以下其它参数之一，则产生运行期间的AI调用
  # - input
  # - enable_AH
  # - enable_WH
  # - enable_WL
  # - enable_AL 
  # 没有 DB 则只输出注释，不会生成AI数据块和运行期间的AI调用
  DB: [LIT0102, DB+]

# 用户自写SCL代码，放在循环的开始和结束处。
loop_begin: |-
  // 这里的代码将在 AI_Loop 循环开始时执行
loop_end: |-
  // 这里的代码将在 AI_Loop 循环结束时执行

options : # 选项，非必需，无需要时可以全部删除或注释掉。
  # output_file : 'example.scl'

---
# 内容与 AS1-AI 相同，仅仅是CPU中的平台不一样。
name: AS2-AI

symbols:
# AI文档已有2个内置符号，其内容由本程序自动生成：
# - [AI_Proc, FB512]  模拟量主处理函数
# - [AI_Loop, FC512]  主循环调用FC，将这个加入OB1中
# 可以在对上述内置符号的地址进行更改，只要重新定义就可以了，注意保持名称一致
- [AI_Proc, FB600] # 可省略，修改内置AI_Proc地址
- [AI_Loop, FC600] # 可省略，当名称为AI_Loop，指示这是AI主调用FC块，这个要加入到OB中
# 可以把任何符号定义提前在这里，然后在list中对应符号引用项引用即可
- [PIT001,  DB100]

# 理论GCL转换可以在任何配置文档的任何地方使用 YAML1.1 的锚点和别名，实现数据的利用。
# 为了清晰可读，不建议用锚点和别名
# 如果必须使用，建议如下方式用template专门定义锚点，方便阅读
template:
- &tubepress       # 设置引用锚点，该锚点表示 & 符号位置所在的值（即右侧或下侧的value）可以在其它地方被引用
  $zero: -0.2
  $span: 2.6
  $AH_limit: 2.5
  $WH_limit: 2.0
  $WL_limit: -0.05
  $AL_limit: -0.1
  $dead_zone: 0.01

list: # 模拟量列表

  # 该模拟量的说明
  # 类型: 字符串字面量
  # 可省略，默认为 location + type
- comment: 来油入口压力

  # 仪表的位置，用于产生报警记录
  # 类型: 字符串字面量
  location: 来油入口

  # 仪表的类型，用于产生报警记录
  # 类型: 字符串字面量
  # 主要值有： 温度 压力 液位 振动 电流 电压 瞬时流量 ……
  type: 压力

  # AI数据块
  # 类型: S7符号定义 | S7符号引用
  # 没有该项则忽略转换，只输出 comment
  DB: PIT001

  # 输入值，可省略
  # 类型: S7符号定义 | S7符号引用 | SCL表达式
  input: [AI01-02, PIW514]
  # 零点初始值，可省略，默认为 0.0
  # 类型: null | 浮点数字面量
  $zero: 0
  # 量程初始值，可省略，默认为 100.0
  # 类型: null | 浮点数字面量
  $span: 2.0

  # 超限值初始值，可省略
  # 类型: null | 浮点数字面量
  # 省略或赋值为fasle时，代表该超限报警不启用。
  # 以下默认了相关超限报警都允许
  $AH_limit: 2.5
  $WH_limit: 2.0
  $WL_limit: -0.05
  $AL_limit: -0.1

  # 死区初始值
  # 类型: null | 浮点数字面量
  $dead_zone: 0.05

  # 容错延时，可省略，默认0，即不延时
  # 类型: null | 整数字面量 | TIME字面量
  # 该设置用于过滤过程值的突变，当为整数值时，代表毫秒数
  $FT_time: 3000  # 也可以设置为 `T#3S`

- location: 泵进口
  type: 压力
  DB: [PIT002, DB101]
  input: [AI01-01, PIW512]

  # 报警便能初始值
  # 类型: null | Bool字面量
  # 通常情况下省略，因为对应 $XX_limit 的值在大部分情况下可指示报警启用状态
  # $enable_AH 高高报警值
  $enable_AH: true   # 代表初始时允许AH报警，这时必须定义 $AH_limit
  # $enable_WH 高警告值
  $enable_WH: true   # 代表初始时允许WH报警，这时必须定义 $WH_limit
  # $enable_WL 低警告值
  $enable_WL: ~      # 相当于省略，这时由 $WL_limit 决定初始时是否允许WL报警
  # $enable_AL 低低报警值
  $enable_AL: false  # 代表初始时不允许AL报警，可以省略定义 $AL_limit

  # 报警初始值
  # 以下相当于把模板tubepress的部分数据进行更改
  $AL_limit: ~       # 引用对象无法删除某个属性，但可以将该属性设置为 null 达到等效作用
  $WH_limit: 2.0     # 修改$WH_limit模板的值

  # yaml语法"<<: *anchor" 表示将锚点anchor的内容合并在这里
  <<: *tubepress

- location: 泵进口
  type: 温度
  DB: [TIT001, DB+]
  input: [AI01-03, PIW516]   # AI通道
  $zero: -40.0
  $span: 80.0
  $AL_limit: 25.0
  # enable_AH,enable_WH,enable_WL,enable_AL 4个参数用于运行期间的赋值
  # 非$符号开头的参数，约定为运行期间的配置
  # 类型:  S7符号定义 | S7符号引用 | S7表达式
  # 以下例子为运行期间(根据泵运行状态)动态设置是否允许低低报警
  enable_AL: 'pump1.run_state'
  $FT_time: TIME#3M         # TIME字面量

- location: 气温
  type: 温度
  DB: [TIT002, DB+]
  input: [M485-1, MW100]    # M区域
  # 这里取消了所有报警

  # 以下几项为整数SCL表达式，只能用于初始值
  $zero_raw: 0
  $span_raw: 27648
  $overflow_SP: 28000
  $underflow_SP: -500

- location: 1#储罐
  type: 液位
  DB: [LIT0101, DB+]
  input: '"RecvDB".Tank1'   # SCL表达式，转换程序不检查正确性
  $span: 10.0

- comment: 占位      
  # 在有DB块的情况下，会生成AI数据块
  # 在有DB参数的情况下，有以下其它参数之一，则产生运行期间的AI调用
  # - input
  # - enable_AH
  # - enable_WH
  # - enable_WL
  # - enable_AL 
  # 没有 DB 则只输出注释，不会生成AI数据块和运行期间的AI调用
  DB: [LIT0102, DB+]

# 用户自写SCL代码，放在循环的开始和结束处。
loop_begin: |-
  // 这里的代码将在 AI_Loop 循环开始时执行
loop_end: |-
  // 这里的代码将在 AI_Loop 循环结束时执行

options : # 选项，非必需，无需要时可以全部删除或注释掉。
  # output_file : 'example.scl'

...
