s7-scl-gen
Version:
S7 PLC SCL 代码自动生成
310 lines (262 loc) • 10.7 kB
YAML
#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的内容合并在这里
<<:
- 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的内容合并在这里
<<:
- 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'
...