1 DATA_ADDR通讯起始地址设置
因为西门子PLC保持型寄存器的是40001~49999和400001~465536,
那么什么时候用40001什么时候用400001呢?
当需要的地址超过49999的话就用400001。
比如从站的某个地址是#16 48D5=18645
40001+18645超过了49999
这边因为前面说了西门子的保持型寄存器是从40001和400001开始的所以这边从400001开始算,
那么就地址就是400001+18645=418646了。
Modbus通讯的地址是从1开始的,如果遇到从机设备的寄存器编号是从0开始,那么就需要考虑给通讯地址加1。
2 建立RUT连接
这边讲一下西门子RTU指令其中一种思路打法,和RTU指令用法。
这边有两种RTU指令:
一种是新RTU
一种是旧RTU
我这边使用新RTU指令。
指令用法是一样的,
就是老RTU指令使用轮询方式可能会出现轮询卡死。
接下来我会对指令的每一个信号做出解释(具体可以F1看手册)
REQ:出现上升沿启动指令,所以我这边是给了一个PLC上电得电的一个信号。
PORT:是硬件标识符就是485模块的硬件标识符。
直接选择对应数据就行
BUAD:波特率直接填写默认的9600就行了。
PARUTY:奇偶校验位 0是无校验,1是奇校验,2是偶校验。我选奇校验。
FLOW_CTRL、RTS_ON_DLY和RTS_OFF_DLY:是用于硬流控和软流控的一般用不到就不管他
RESP_TO:这个是主站等待从站的相应时间。
这是主站发送请求帧如果超过这个时间没有收到从站发送的答应帧,那么就会认为该从站连接已丢失。
每个物理通信端口(如多个CM 1241模块)需要独立的Modbus_Comm_Load背景DB。
这边还有一个重试次数 在指令的背景数据块中RETRIES。
MB_DB:是填写的"Modbus_Master_DB"数据块中的MB_DB数据。
这样建立连接数据块就建好了,
这边为什么会有两个背景数据块相同的Modbus_Comm_Load指令后面会讲到。
3 RTU轮询
前面那个是建立Modbus连接后面这个是作为Modbus主站收发数据
REQ:直接给建立连接好的初始化完成
MB_ADDR:是从站的站号
MODE:0是接收数据,1是发送数据
DATA_ADDR:这边就根据前面讲的起始地址为40001,2号地址就是40001+2=40003
DATA_LEN:数据长度这边就是1个整形。
DATA_PTR:要写入的数据
这样就完成了将"轮询"."1数据"的值发送到1号从机的地址2中。
然后再用上个指令的结束位来让下个指令触发
这边MODE:1是发送数据。
注意!!!相同从站点指令的背景数据块是否一致
前面讲到每个物理通信端口(如多个CM 1241模块)需要独立的Modbus_Comm_Load背景DB。
而Modbus_Comm_Load指令只有一个MB_DB引用端口。
而不同地址从站的Modbus_Master 指令是不同的背景数据块,
所以要多次引用Modbus_Comm_Load指令而Comm_Load指令的数据背景块不变。
最后!!!
再将最后一个收发指令的结束信号,
返回到开头的第一步。
到这里RTU指令的轮询就结束了。
4 结语
本篇文章为个人学习总结,如有不足请及时支持,多多包涵QwQ.
觉得有用的话就点个赞吧ღ( ´・ᴗ・` )。