---
# 指令`CPU`指示属于哪个PLC/PCS系统
# 可以指定多个，单个时可以不用数组写法
#CPU: AS1

# 指示这是一个 CPU 功能，使用该CPU的其它配置文档都共享的资源、信息和指令
# 比如输出文件夹，共用的符号和包含等
# 所有`CPU`指令相同的配置文件，会在生成代码时：
# 统一检查资源冲突情况、统一资源分配、自动合并符号表，避免占用同一DB块、同一连接等
#feature: CPU

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

# 运行平台
# 可取值: step7 portal pcs
# step7 平台时可省略该指令
# 目前暂时只有 step7 支持所有功能，portal 和 pcs 平台仅支持部分功能
platform: step7

# CPU型号，可省略。
# 如果有对应的 modbusTCP 配置文档，该指令必须填写(因为采用OUC通信)。
# 目前已定义可以OUC通信的型号有：  
#   IM151-8_PN/DP
#   CPU31x-2_PN/DP
#   CPU314C-2_PN/DP
#   CPU317-2_PN/DP
#   IM154-8_PN/DP
#   CPU319-3_PN/DP
#   CPU315T-3_PN/DP
#   CPU317T-3_PN/DP
#   CPU317TF-3_PN/DP
#   CPU412-2_PN
#   CPU414-3_PN/DP
#   CPU416-3_PN/DP
#   CPU412-5H_PN/DP
#   CPU414-5H_PN/DP
#   CPU416-5H_PN/DP
#   CPU417-5H_PN/DP
#   CPU410-5H
# 类型: 字符串
device: CPU410-5H

# host IP 目前用暂不上，保留
# 类型: 字符串
host: sample.my.host
# 类型: 字符串
IP: 192.168.10.10

attributes: # 用于包含文件PE.scl的转换
  tag_postfix_number: '0101'

# includes, files 的文件为用户自行指定，生成程序不会检查其中的错误。
includes:       # includes 用来包含到该类型转换后的输出文件中，会解析文件中的符号定义
                # 可参照本示例写出其它自定义接收块函数。
- JSFLow.scl    # 指示将配置目录下的 JSFlow.scl 文件包含进来
                # (该文件包含 JS_flow 的定义和接收DB块的数据结构，用于一诺的智能流量表)
- PE.scl        # 另一个要包含的文件

files:          # files 仅仅是复制该文件到输出文件夹中
- ..//README.md # 复制说明文件，也可以复件其它的手工代码的SCL、AWL文件

# reference_symbols部分是CPU中比较特殊的符号
# 主要用于已在step7项目中已经存在的符号，比如涉及 step7 库中的符号
# 建议把实际CPU中使用的符号也集中列在这里，以便转换器检查符号与地址冲突。
# 由于这些符号已经在CPU中实际存在，所以转换器不会将它们输出到用于导入的符号定义文件中
# 系统已经内置了如下的reference_symbols：
#     TP TON TOF
#     GET PUT
#     P_RCV P_SEND P_RCV_RK P_SND_RK
#     TSEND TRCV TCON TDISCON
#     CNT2_CTR CNT2_WR CNT2_RD DIAG_RD
reference_symbols:
- [ATH, FC94, FC94, Ascii To HEX]

# CPU文档下 symbols 定义其它文档需要共享的自定义符号
# 类型: 数组
symbols:
# Clock_Byte 是一个特定的符号，仅在CPU配置下有效。
# 只有显式配置了该符号(本例为MB10)，转换程序才会自动生成以下符号：
# - [Clock_Byte, MB10, ~, clock memory]
# - [Clock_10Hz,    M10.0]
# - [Clock_5Hz,     M10.1]
# - [Clock_2.5Hz,   M10.2]
# - [Clock_2Hz,     M10.3]
# - [Clock_1.25Hz,  M10.4]
# - [Clock_1Hz,     M10.5]
# - [Clock_0.625Hz, M10.6]
# - [Clock_0.5Hz,   M10.7]
# 没有配置 Clock_Byte 时，则不产生任何时钟存储器符号
- [Clock_Byte, MB10]                   # 设置时钟存储器为MB10，请务必保证该值与在step7项目中的设定一致
- [JS_flow, FB100, ~, 智能表头接收处理]  # 提供 JSFLow.scl 文件中对应的符号

# 自定义符号
- [vw1, MW1000] # 测试MW
- [vd1, Md1000, Real] # 测试同地址 MD
- [auto_data1, mw+] # 测试自动地址
- [auto_data2, M+]
- [auto_data3, M+]
- [auto_data4, M+]
- [auto_data5, MD+, DInt]
- [PE0101, DB961]

list:
# CPU配置的列表为一般性 FC OB 代码(自定义SCL)
# 本配置列表的目的是为了列明CPU的调用关系
# 所有 OB 或 FC 块不能有参数，块内部建议仅使用简单的调用代码
# 更复杂的代码更适合放在 includes 或 files 中
- comment: 初始化
  block: [init, FC10]
  code: |- # 该FC的代码
    M100.0 := TRUE;
    M100.1 := TRUE;
    M100.2 := TRUE;
    M100.3 := TRUE;
    M100.4 := TRUE;
- comment: 重启
  block: [COMPLETE RESTART, OB100]
  code: '"init"();'
- comment: 0.1S 循环
  block: [Cyclic interrupt, OB30]
  code: '"AI_loop"();'
- comment: 主循环
  block: [main, OB1]
  title: Main Program Sweep (Cycle)
  code: |- # OB1的代码
    "Interlock_Loop"(); // 报警
    "PI_Loop"();
    "PV_Loop"();
    "SC_Loop"();
    "Timer_Loop"();
    "Valve_Loop"();

options: # 选项，非必需，无需要时可以全部删除或注释掉。
  # output_dir 指令指示所有属于该 CPU 的S7代码输出文件夹
  # 该指令仅用在 CPU 文档中，可省略，默认为 {{cpu_name}}
  # 类型: 字符串
  # 可以在字符串中使用以下替换:
  # - {{cpu_name}} 会自动替换为当前配置的 CPU 名称
  # - {{platform}} 会自动替换为当前配置的 platform
  # - {{device}}   会自动替换为当前配置的 device
  output_dir: SCL_{{cpu_name}}_{{platform}}_{{device}}

  # 输出CPU配置文件名，可省略，默认值是 `CPU.scl`
  # 类型: 字符串
  output_file: 'main.scl'

---

name: AS2-CPU
platform: portal

files:
- filename: ..//example/*.scl # 复制指定文件夹下的所有SCL文件，并指定文本格式
  IE: utf8
  OE: utf8
  line_ending: LF

attributes: # 用于包含文件PE.scl的转换
    tag_postfix_number: '0201'

includes: 
- PE.scl

symbols:
- [PE0201, DB961]

... # YAML语法，指示一个文档结束
