打印
[资源共享]

modbus协议的踩坑笔记

[复制链接]
1355|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cr315|  楼主 | 2022-12-9 10:12 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
最近使用modbus协议与第三方设备进行通信,有几点在这里小结分享一些,也避免大家以后掉坑,本文不做系统的modbus协议解说,仅对使用过程中遇到的问题和注意事项进行描述,以基于RS485的modbus-RTU为例进行讲解:
1、字节序问题   
modbus采用大端字节序进行报文传输,这个非常重要,字节序不正确则对多字节数据无法解析和组拼。
这里所说的大端字节序表示:一个数据的高字节将被优先发送,如一个word大小的数据为0x1234,那么在modbus协议打包成一帧数据进行发送的时候在规定数据域中先发送0x12,然后发送0x34,其他多字节数据类型、CRC16校验也是类似的传输顺序。
总线上的发送与接收方都要遵循大端的字节序发送格式。
2、单播与广播   
在modbus总线上采用单播和广播的方式进行通信,同一总线上一般都只有一个主机、多个从机;在同一时间内一个主机可以通过地址区分与想要的从机通信,这边是单播方式;同时modbus总线也可以一个主机以广播的方式与多个从机进行通信。
平时我们也称这种通信方式为主从通信(Maser/Slave),主机发送请求消息,当从机接收到正确消息后响应请求返回给主机;同时主机也可以直接发消息修改从机的数据,实现主从数据的双向读写。
3、与PLC通信协议   
具体与什么设备通信,只是不同的设备所支持的功能码不同,或相关的叫法和习惯不同,具体需要根据相应的设备来进行区分了,但都符合modbus协议标准。
在跟PLC进行通信的时候其给过来的协议会指明相应的PLC地址而此地址与实际发送modbus报文数据帧中的寄存器等地址并不是一致的。

如上图所示PLC工程师一般都会以PLC地址为基础给出协议,而很多其他软件工程师对接的时候,以为PLC地址(也叫PLC的存储地址)便是modbus报文数据帧中的寄存器地址,其实两者并不相等。
像西门子的PLC地址其每个功能码所对应的modbus报文地址都是从0开始,即从0x0000~0xFFFF;所以你可以把PLC地址看成是一种绝对地址,而modbus报文地址仅仅只是在该功能码下的一个相对地址。
如采用03H功能码读取PLC存储地址是40002的寄存器,而此时modbus报文中的寄存器地址为01。

3、线圈和寄存器的理解   

由于早期PLC对于一些布尔量均是用于控制一些继电器或者接触器等等,这些器件主要是通过线圈来进行吸合与弹开,后面叫法也就沿用下来了,同时线圈分配输入线圈和输出线圈,跟我们平时MCU的IO引脚的电平读写有点类似。
而对于一些非bool类型的数据均采用寄存器的概念来继续传输,相信这样便可以对PLC中的这些名字进一步理解了。
4、RS485终端电阻   
对于较长距离的RS485通信,采用线型连接并增加终端120Ω匹配电阻来降低干扰增加总线通信的稳定性,如下图所示:


   最     后   
好了,这里小哥就简单介绍了最近使用modbus的一些踩坑笔记,记得关注学习哦。



使用特权

评论回复
沙发
tpgf| | 2023-1-4 16:49 | 只看该作者
Modbus是一种串行通信协议,是Modicon公司(现在的施耐德电气 Schneider Electric)于1979年为使用可编程逻辑控制器(PLC)通信而发表

使用特权

评论回复
板凳
paotangsan| | 2023-1-4 16:57 | 只看该作者
Modbus已经成为工业领域通信协议的业界标准(De facto),并且现在是工业电子设备之间常用的连接方式

使用特权

评论回复
地板
renzheshengui| | 2023-1-5 08:25 | 只看该作者
Modbus协议目前存在用于串口、以太网以及其他支持互联网协议的网络的版本。

使用特权

评论回复
5
wakayi| | 2023-1-5 09:08 | 只看该作者
Modbus协议是一个master/slave架构的协议。有一个节点是master节点,其他使用Modbus协议参与通信的节点是slave节点。每一个slave设备都有一个唯一的地址

使用特权

评论回复
6
wowu| | 2023-1-5 09:18 | 只看该作者
一个ModBus命令包含了打算执行的设备的Modbus地址。所有设备都会收到命令,但只有指定位置的设备会执行及回应指令(地址0例外,指定地址0的指令是广播指令,所有收到指令的设备都会运行,不过不回应指令)。

使用特权

评论回复
7
xiaoqizi| | 2023-1-5 10:01 | 只看该作者
由于Modbus是一个主/从协议,没有办法要求设备"报告异常"

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1339

主题

3897

帖子

0

粉丝