以两个CM1241RS422/485通信模块之间的Modbus RTU通信为例,介绍S7-1200 PLC Modbus RTU主站与从站轮询发送和接收数据。CPU 1217作为ModbusRTU主站,CPU 1215作为Modbus RTU从站,使用PROFIBUS电缆连接两个CM 1241RS422/485的串口,实现的功能为主站读写从站的保持寄存器的数据以及写位寄存器。
1.本例所用的硬件
•CPU 1217CDC/DC/DC(6ES7 217-1AG40-0XB0)V4.2。
•CPU 1215CDC/DC/DC(6ES7 215-1AG40-0XB0)V4.2。
•CM1241RS422/485(6ES7 241-1CH32-0XB0)V2.2。
•PROFIBUS电缆及总线连接器。
2.CPU 1215Modbus RTU从站端编程
(1)ModbusRTU从站端初始化
在OB1中程序段1修改MODE=4,将工作模式设置为半双工RS485两线模式。在OB1中程序段2,调用“Modbus_Comm_Load”指令初始化ModbusRTU从站,如图9-48所示。
(2)ModbusRTU从站端通信编程
创建全局数据块DB3名称为“Slave”,并设置成“非优化访问”,定义保持寄存器变量名称“Hold_REG”,其结构为100个字的数组Array[0..99]ofWord,如图9-49所示。
在OB1中的程序段3,调用ModbusRTU从站通信指令“Modbus_Slave”,将Modbus从站地址设置为2,如图9-50所示。
图9-48 Modbus RTU从站端初始化
图9-49 定义Hold_REG数组
图9-50 Modbus RTU从站端通信编程
3.CPU 1217Modbus RTU主站端编程
(1)Modbus RTU主站端初始化
Modbus RTU主站初始化与Modbus RTU从站初始化编程类似,如图9-51所示。
图9-51 Modbus RTU主站端编程初始化(www.xing528.com)
(2)Modbus TU主站端轮询编程
本例中有多个Modbus地址区读写操作,因此需要在主站端进行轮询编程,保证同一时刻只有一个Modbus读写请求激活。
新建全局数据块DB3名称为“Master”,在该块中定义Modbus读写请求的数据存放区以及轮询的步“Step”,如图9-52所示。
Modbus RTU主站端轮询第一步:读取Modbus RTU从站地址2保持寄存器40001地址开始的两个字长的数据,如图9-53所示。
Modbus RTU主站端轮询第二步:写4个字数据到Modbus RTU从站40003地址开始的保持寄存器,如图9-54所示。
图9-52 定义Modbus读写数据的存放地址和数据类型
图9-53 Modbus主站读取保持寄存器数据
图9-54 Modbus主站写数据到保持寄存器
Modbus RTU主站端轮询第三步:写8位数据到Modbus从站的位寄存器,如图9-55所示。
图9-55 Modbus主站写数据到位寄存器
Modbus RTU主站端轮询返回第一步:第三步完成位或错误位作为条件回到第一步,继续轮询,如图9-56所示。
图9-56 Modbus RTU轮询返回到第一步
4.Modbus RTU通信程序测试
分别打开Modbus RTU主站CPU1217和Modbus RTU从站CPU 1215的监控与强制表进行监视,Modbus RTU主站和从站赋值以及通信测试结果见表9-24。
表9-24 Modbus RTU通信测试结果
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。