Modbus协议主要描述的是应用层的信息封装格式,处于OSI模式的第七层(应用层)。Modbus的物理层可以是RS-485、Ethernet II /802.3。Modbus协议栈的层次图: 本文主要介绍Modbus使用物理层是EIA/TIA-485的情况。Modbus主要内容为应用层协议,所以在现实使用中可以将EIA/TIA-485(485)和Ethernet II /802.3(以太网)不同的物理连接网络通过Modbus协议组成统一的系统。使用EIA/TIA-485这种串行通讯方式的Modbus协议框图:
物理层的EIA/TIA-485大家比较熟悉,现场总线通讯很多设备都使用485通讯。下面重点介绍一下Figure 2 中的 Data Link 层和Application层。Application层主要目的是定义应用层的功能和参数。应用层帧格式见图: Modbus应用层的Function Code 就是我们熟悉的功能码,常见的有04(read input register) 03(Read Holding Registers)等。这些内容大家比较熟悉,就不一一说明了。具体功能码含义可参见文章最后的相关资料及工具。 Data Link 层主要目的是确定总线上的具体从机以及检验数据帧传输是否正确。Data Link层的数据帧格式见图: 其中Address field域是地址域,现场使用485总线,总线上可能存在很多设备,这个地址主要用于从总线上选择一个具体的设备。CRC (or LRC是检验位)用于检验数据,确保传输正确。在485总线上使用Modbus协议,有两种主要方式:RTU ASCII。RTU传输方式传输的数据帧为二进制数据,ASCII传输方式传输的是ASCII码。举例来说要发送 0x31(十进制数)使用RTU直接发送0x31就可以(占用一个byte),而ASCII码传输方式则需要发送0x33和0x31这两个字节(即十六进制数0x31的 高低位分别占用一个byte)。两种传输方式各有利弊,使用RTU传输效率高,使用ACSII可读性好。Modbus协议是一种主从式协议,即主站发起通讯,从站响应这种模式。 最后,给大家一个看一个完整的Modbus协议帧格式: 关于Modbus的具体协议规定和Modbus在串行传输(485)中的使用,请大家查看4:相关资料及工具 里的 Modbus_Application_Protocol_V1_1b3.pdf Modbus_over_serial_line_V1_02.pdf 其他Modbus相关资料请参考网站:http://www.modbus.org/