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.

觉得有用的话就点个赞吧ღ( ´・ᴗ・` )。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐