西门子PLC中Modbus通讯DATA_ADDR通讯起始地址设置以及RTU轮询程序设计。

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.

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值