UNPKG

s7-scl-gen

Version:

S7 PLC SCL 代码自动生成

169 lines (162 loc) 7.08 kB
--- name: test-CPU symbols: - [Clock_Byte, MB0] --- name: test-SC description: includes: | FUNCTION_BLOCK "write_SC" TITLE='MB写命令' VERSION:'1.0' AUTHOR:Goosy NAME:writeB FAMILY:GooLib VAR_INPUT r_work_F : BOOL ; // 设备正常指示 r_invalid : BOOL ; // 设备无效指示 r_on_receive : BOOL ; // 设备接收指示 r_pause : BOOL ; // 设备暂停指示 r_unit_ID : BYTE ; // 设备号 r_func_code : BYTE ; // modbus功能号 r_length : BYTE ; // 接收长度 r_B0 : BYTE ; // 接收字节 r_B1 : BYTE ; // 接收字节 CRC_H r_B2 : BYTE ; // 接收字节 CRC_L r_B3 : BYTE ; // 保留 w_work_F : BOOL ; // 设备正常指示 w_invalid : BOOL ; // 设备无效指示 w_on_receive : BOOL ; // 设备接收指示 w_pause : BOOL ; // 设备暂停指示 w_unit_ID : BYTE ; // 设备号 w_func_code : BYTE ; // modbus功能号 start_H : BYTE ; // 写起始高字节 start_L : BYTE ; // 写起始低字节 len_H : BYTE ; // 写数量高字节 len_L : BYTE ; // 写数量低字节 w_CRC_H : BYTE ; // CRC16 w_CRC_L : BYTE ; // CRC16 CH : ARRAY[1..8] OF BOOL; // QB0 数据 B0 AT CH : BYTE; // QB0 数据 END_VAR VAR_OUTPUT bytes_count : INT := 10; // 总字节数 unit_ID : BYTE := B#16#4; // 子站地址 func_code : BYTE := B#16#F; // modbus 功能号,15写多个线圈 start : INT := 0; // 起始地址 length : INT := 8; // 数据长度 betys : BYTE := B#16#1; // 字节数 data : BYTE := B#16#0; // 数据 CRC_H : BYTE ; // CRC16 CRC_L : BYTE ; // CRC16 END_VAR VAR_IN_OUT writing : BOOL; //正在写 END_VAR BEGIN IF B0 <> r_B0 THEN data := B0; writing := TRUE; END_IF; END_FUNCTION_BLOCK DATA_BLOCK "EDO02" "write_SC" BEGIN END_DATA_BLOCK // 设备数据接收DB块,可根据设备定义多个接收DB块 // 本例"rdata_SC"的DB号为53,在其中定义了4个设备的数据,依据实际增减 // 建议一个设备只定义在一个DB中,本例一个DB定义多个设备仅为了展示可以这样组织 DATA_BLOCK "rdata_SC" STRUCT device0_workOK : BOOL; // 设备正常指示 0 device0_error : BOOL; // 设备错误指示 device0_on_receive : BOOL; // 设备接收指示 device0_pause : BOOL ; // 设备暂停指示 device0_deviceID : BYTE; // 设备号 device0_funcNo : BYTE; // modbus功能号 device0_len : BYTE; // 长度 device0_data : ARRAY[4..31] OF BYTE; // 数值 device1_workOK : BOOL; // 设备正常指示 1 device1_error : BOOL; // 设备错误指示 device1_on_receive : BOOL; // 设备接收指示 device1_pause : BOOL ; // 设备暂停指示 device1_deviceID : BYTE; // 设备号 device1_funcNo : BYTE; // modbus功能号 device1_len : BYTE; // 长度 device1_data : ARRAY[36..63] OF BYTE; // 数值 device2_workOK : BOOL; // 设备正常指示 device2_error : BOOL; // 设备错误指示 device2_on_receive : BOOL; // 设备接收指示 device2_pause : BOOL ; // 设备暂停指示 device2_deviceID : BYTE; // 设备号 device2_funcNo : BYTE; // modbus功能号 device2_len : BYTE; // 长度 device2_data : ARRAY[68..95] OF BYTE; // 数值 device3_workOK : BOOL; // 设备正常指示 device3_error : BOOL; // 设备错误指示 device3_on_receive : BOOL; // 设备接收指示 device3_pause : BOOL ; // 设备暂停指示 device3_data0 : BYTE; device3_data : ARRAY[98..127] OF BYTE; // 数值 device4_workOK : BOOL; // 设备正常指示 30 device4_error : BOOL; // 设备错误指示 device4_on_receive : BOOL; // 设备接收指示 device4_pause : BOOL ; // 设备暂停指示 device4_data0 : BYTE; device4_data : ARRAY[130..159] OF BYTE; // 数值 END_STRUCT; BEGIN END_DATA_BLOCK symbols: - [SC_polls_DB, DB880] - [CRC16, FC16, ~, modbus CRC16 校验] - [write_SC, FB813] - [rdata_SC, DB53] - [EDO02, DB32, write_SC] list : # CP 模块列表 - comment: CP01 256 type: CP341 module_addr: 256 DB: [CP01, DB10] polls: - comment: 第1个poll modbus协议 mode: continuous # 连续模式。可省略,默认模式 unit_ID: 1 # 有该参数时,表示该poll为modbus协议 func_code: 3 address: 0 length: 12 # 配置项允许16进制字符串 recv_DB: rdata_SC recv_start: 0 - comment: 第2个poll 周期发送 mode: periodicity # 周期模式 timeout: 1000 # 指定同期,单位ms,默认 2000ms unit_ID: 2 func_code: 4 address: 0 length: 12 recv_DB: rdata_SC recv_start: 32 # 要注意开始地址不一样 - comment: 第3个poll 指定发送数据 mode: custom # 指定为自定义模式,由用户控制发送 is_modbus: true # 指定为modbus协议,有 send_data 参数时默认为非modbus协议 send_data: 03 03 00 00 00 0C 00 00 # send_data 必须是一个由空格分隔的16进制字节的字符串 recv_DB: rdata_SC recv_start: 64 # 要注意开始地址不一样 extra_code: |- # 通过设置 request 来控制发送 "SC_polls_DB".CP01[2].request := "Clock_1Hz"; - comment: 第4个poll 读取线圈 unit_ID: 4 func_code: 1 address: 0 length: 8 recv_DB: EDO02 recv_start: 0 - comment: 第5个poll 指定外部发送块 mode: custom send_DB: EDO02 send_start: 20 recv_DB: EDO02 recv_start: 8 # 要注意开始地址不一样 extra_code: |- # 通过设置 custom_trigger 来控制发送 "write_SC"."EDO02"(writing := "SC_polls_DB".CP01[4].custom_trigger); ...