[西门子] 博途SCL实现自定义ModbusRtu Over TCP功能块

[复制链接]
查看38050 | 回复0 | 2024-5-17 08:24:50 | 显示全部楼层 |阅读模式
分享一组污水处理3D画面,谈谈上位机设计原则!

【导读】博途提供了内置的ModbusRtu和ModbusTcp库,但是没有提供ModbusRtuOverTcp库,为了能够深入理解Modbus通信协议并熟悉博途的一些高级指令用法及SCL编程方法,本文编写了一个自定义ModbusRtuOverTCP功能块,可实现轮询、并发读取等功能,其主要实现过程包括IP地址字符串解析函数封装、ModbusCRC校验算法函数封装、Socket发送、接收、报文拼接、报文解析等,具体步骤如下。



一、IP地址解析FC函数







二、CRCMODBUS校验FC函数







三、ModbusRTUOverTCP功能块



输入参数说明:Start:读取保持寄存器的起始地址Length:读取保持寄存器的个数IPAddr:IP 地址字符串Req:请求指令(只接受边沿信号)DeviceID: 设备单元IDConnectID:网络连接资源ID(背景数据块不同时,需要保证唯一性)输入输出参数:Outdata:指向读取的数据保存区域的指针






四、轮询令牌分发函数







五、主程序(部分)







六、轮询、并发模拟

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、以及程序封装应用,实际工程应用时,可以适当修改。【公众号后台回复“MOD”下载功能块】
——魏小星

2021年5月

作者简介

魏小星:

       出生于1987,男,工程师 湖北广水人,硕士学位,电气工程师,研究方向为船舶轮机自动化和工控自动化。目前从事于水利水电闸门启闭机自动化应用研究,参与过多项大型水电站闸门启闭机电控系统的设计、程序编制和现场调试工作。擅长上位机高级语言编程、SCL和ST语言结构化编程,精通博途、Codesys、EPLAN等工控软件,有丰富的海外工作经验。

大家都在看


【视频】德国工程师是如何制作PLC柜的?


【视频】德国威图电气柜是如何生产出的?


【视频】德国工程师的办公环境是怎样的?


【视频】PROFINET为何比PROFIBUS更牛?

设为星标

不见不散

有时我们关注的公众号比较多,可能会错过一些自己喜欢的消息,我们可以给公众号加星标来解决这个问题。那如何星标呢?不会的可以参考下图或联系工作人员。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则