积木式上位机怎么设计?
【导读】博途提供了内置的ModbusRtu和ModbusTcp库,但是没有提供ModbusRtuOverTcp库,为了能够深入理解Modbus通信协议并熟悉博途的一些高级指令用法及SCL编程方法,本文编写了一个自定义ModbusRtuOverTCP功能块,可实现轮询、并发读取等功能,其主要实现过程包括IP地址字符串解析函数封装、ModbusCRC校验算法函数封装、Socket发送、接收、报文拼接、报文解析等,具体步骤如下。
ConnectID:网络连接资源ID(背景数据块不同时,需要保证唯一性)
S7-PLCSIM AdvanceV3.0 可以支持通信模拟,Modbus 从站或服务器可以用modbus slave软件模拟。在虚拟机和客户机中分别利用Modbus slave 模拟两个支持ModbusRTU 串口服务器IP地址分别为192.168.0.241 和192.168.0.242 , 每个服务器创建10 个设备, 协议选择ModbusRtu over TCP,并取消勾选忽略设备ID 选项。如下图所示:
串口服务器1:IP 地址为192.168.0.241
串口服务器2 :IP 地址为192.168.0.242
通常,接收到的数据保存在字节数组中,具体的数据类型取决于协议对寄存器的约定,如果需要批量解析为整形或浮点型,可以新建一个大小一致的存储区,数组中元素数据类型为协议约定的数据类型,然后可以用POKE_BLK 指令完成,这里浮点数并没有考虑大小端的问题。
Modbus RTU OverTCP 协议就是通过TCP 传输ModbusRTU 报文,关于Modbus 的详细报文说明可以查询相关文档,CRC 校验码生成算法说明也可以百度查询。在程序块编写过程中,对于重复逻辑应采用循环结构如WHILE、FOR 等;对于输入参数为不定长数组的,形参需要设置为Variant 指针,对于内存区的批量读写操作,可以使用PEEK 和POKE 指令、Move_BLK、Move_BLK_Variant、Fill_BLK、VariantPut、VariantGet等指令。以上功能块部分程序仅为了强化博途间接寻址、程序结构、SCL、以及程序封装应用,实际工程应用时,可以适当修改。