一、什么是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串口进行通信的设备中,只要读取,写入(一发,一收)都遵循协议的格式就可以正常通信。

如图:

go语言实现modbus客户端 modbus tcp golang_go语言实现modbus客户端

二、区别与联系

用一张表格来展示主要的异同(我以我接触到的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,都是对一段信息进行处理然后拼起来组成一条完整的消息,接收方会使用相同的方式,检验消息的内容是否正确。