[西门子] 用SCL语言编写的一种轮询读写多个Modbus服务器的方法

[复制链接]
查看15789 | 回复0 | 2024-3-31 20:17:19 | 显示全部楼层 |阅读模式
概述

本例将在TIA Portal中使用SCL语言编写一个轮询读写多个Modbus TCP设备数据的程序,Modbus Server(Slave)分别选择S7-1200 CPU和S7-200 SMART CPU,配置方法参见前面两个章节的案例,Modbus Client(Master)选择S7-1500 CPU。



第1步:

添加PLC设备,选择西门子S7-1512SP CPU,设置IP地址:192.168.18.2,子网掩码:255.255.255.0。



第2步:

在项目树的程序块文件夹上单击鼠标右键,在快捷菜单中选择新增组,添加一个MbTcpClient的文件夹,用来保存Modbus TCP Client相关的所有功能块和数据块,

添加全局数据块GdbDevice1Data,作为和1# Modbus Server(S7-1200 CPU)交互数据的数据缓冲区,根据需求设置读写数据缓冲区的长度,数据类型建议使用最原始的数据类型Word,根据使用需求进行数据类型转换。本例中设置读缓冲区长度8个字,写缓冲区长度8个字。



第3步:

添加全局数据块GdbDevice2Data,作为和2# Modbus Server(S7-200 SMART CPU)交互数据的数据缓冲区,根据需求设置读写数据缓冲区的长度,数据类型建议使用最原始的数据类型Word,根据使用需求进行数据类型转换。本例中设置读缓冲区长度8个字,写缓冲区长度8个字。



第4步:

添加一个FB块,命名为MbTcpClient,编程语言选择SCL,为该FB块添加接口变量。



注意一定要确保指令MB_CLIENT的每个实例都必须使用唯一的ID。确保每个Modbus Server的IP地址应不相同。以上192.168.18.18对应前面案例中设计的Modbus Server S7-1200 CPU,192.168.18.78对应前面案例中设计的Modbus Server S7-200 SMART CPU。

第5步:

用SCL语言编写Modbus Client轮询读写的程序代码。



以上代码将完成对两个Modbus Server的保持寄存器的读写功能,分别对两个设备读2个字,写1个字。轮询方式采用了定时器计数的方式,本例中的定时器选择了IEC定时器,轮询时间可以更加更灵活,也可以用系统时钟脉冲替代。如果需要对更多个Modbus TCP设备进行读写操作的话,只需要增加相应数量的实例即可。

第6步:

在MbTcpClient文件夹中添加一个程序循环OB,命名为MainMbTcpClient,在其中调用FB MbTcpClient。



第7步:

在线测试和1# Modbus Server(S7-1200 CPU)的数据交互,成功读到数据16#1666,成功写入数据16#1888。



第8步:

在线测试和2# Modbus Server(S7-200 SMART CPU)的数据交互,成功读到数据16#2666,成功写入数据16#2888。

本帖子中包含更多资源

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

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

本版积分规则