一、什么是modbus rtu 和modbus ascii
百度百科:
1 Modbus是一种串行通信协议,是Modicon公司(现在的施耐德电气Schneider Electric)于1979年为使用可编程逻辑控制器(PLC)通信而发表。Modbus已经成为工业领域通信协议的业界标准(De facto),并且现在是工业电子设备之间常用的连接方式。
2 大多数Modbus设备通信通过串口EIA-485物理层进行。
3 对于串行连接,存在两个变种,它们在数值数据表示不同和协议细节上略有不同。Modbus RTU是一种紧凑的,采用二进制表示数据的方式,Modbus ASCII是一种人类可读的,冗长的表示方式。
我的理解:modbus就是一种通信协议,它规定了协议的格式,即生成的命令格式,读取的格式。在使用485串口进行通信的设备中,只要读取,写入(一发,一收)都遵循协议的格式就可以正常通信。
如图:
二、区别与联系
用一张表格来展示主要的异同(我以我接触到的modbus 通信格式为例)。
| 开始符 | 地址位 | 功能码 | 数据区 | 校验码 | 结束符 |
modbus rtu | 无 | 相同 | 相同 | 相同 | CRC | 无 |
modbus ascii | :(英文冒号) | 相同 | 相同 | 相同 | LRC | CR,LF(回车加换行) |
以一条命令示例:
rtu 010300010002CRC
ascii :010300010002LRCCR/LF
相同点:
01设备地址位
03 功能码
0001数据区
0002 数据区
不同点
ascii有开始符合结束符,rtu的校验方式的crc,ascii的校验方式是lrc。
三、crc和lrc
他们是modbus对一条消息的校验。以上面的命令为例'010300010002CRC'比如rtu模式, 设备A在生成一条命令时会使用'010300010002'生成crc校验码,然后将'010300010002'和'CRC'拼成一条完整的命令。发送给设备B,设备B也会用'010300010002'生成crc校验码,当生成的校验码和消息中的校验码相同,则接受这条消息,否则不接受。类似jwt中的token,都是对一段信息进行处理然后拼起来组成一条完整的消息,接收方会使用相同的方式,检验消息的内容是否正确。