原链接:添加链接描述
Modbus该协议必须具备以下特点:
免费:这是最大的前提,任何产品都是一样的,只有免费才能获得早期最大的使用。
2、简单:Modbus协议帧格式简单紧凑,用户易于理解,制造商易于集成。
3、接口:Modbus协议只是一种规定,属于应用层的协议,不仅可以应用于串口(485/232/422),还可以在以太网、光纤、蓝牙传输。
存储区分类
我一般介绍Modbus在达成协议时,我喜欢站在协议上Modbus对于很多人来说,规约制定者的角度,结合一些事情来比较解释,可能会更容易理解。
假设没有Modbus协议,我们想要制定一个协议,我们首先要明确,协议的目的是为了数据传输,因此,为了更好地存储不同的数据类型,我们会将布尔和非布尔的数据分开存储,因此,就有了线圈和寄存器的概念。
线圈和寄存器经常受到许多人的批评,认为它们不应该这样翻译,这并不容易理解。从电气的角度来看,在电气控制电路中,接触器或中间继电器通常被接触器或中间继电器控制,接触器或中间继电器最终通过线圈的电源和电源故障来控制接触点的闭合和断开,因此用线圈表示布尔量;在计算机中,寄存器用于存储数据,因此非布尔数据放置在寄存器中。
这个可以跟PLC比较西门子的存储区I/Q/M都是线圈,V/T/C/DB都是寄存器,三菱X/Y都是线圈,D/W/H都是寄存器,欧姆龙CIO是线圈,D/W/H是寄存器。
以西门子为例,虽然I和Q都说线圈,但分工不同,I表示输入,Q表示输出,输入意味着存储区域的值必须由外部设备连接,只读取,输出表示输出结果可读可写。
因此,Modbus线圈和寄存器也应根据只读和读写进一步细分,从而形成Modbus如下表所示:
存储区代号
然而,上表中的存储区域名称是全名,在开发和使用中使用全名会更麻烦,所以你需要给他们取个别名称,就像西门子一样I/Q/M同样,这些都是西门子给存储区取的代号,所以Modbus还要给这些存储区域取代号,简单直接使用数字,因此,有以下规定:
这个其实就跟我们的姓名和小名一样,姓名是正式场合使用,日常场合,我们一般可以使用小名。
存储区范围
无论存储区是什么,都会有一个范围的限制,就像西门子的M区可能最大到8192,三菱的X区最大到2048,Modbus每个存储区也应规定一个范围,不能无限制使用。
Modbus每个存储区的最大范围是65536,这是非常大的。
以三菱X区为例,如果最大范围是2048,那就意味着我们只能访问X0-X这里说的2047这些地址X0、X2047,我们常说PLC地址,那么这个地址是怎么形成的呢?它由存储区编号和地址索引组成。我们把这个PLC地址,理解为绝对地址,以下地址索引,理解为相对地址。
所谓绝对地址,就是我们可以通过一个地址名来知道存储区域的数据是什么,这是我们所说的相对地址,所以绝对地址是唯一的,每个存储区域都有相对地址。
那么对于Modbus我们的绝对地址和相对地址是什么?
我们仍然遵从公式:绝对地址=区号 相对地址。
但是,也会有一些不同的地方。以保持式寄存器为例,第一个绝对地址是4万,不是4万。这是原因Modbus由规定决定的其他存储区也类似。
因此,Modbus如下图所示下图所示:
正如上面所说,65536的范围很大,但在实际使用中,我们通常不能使用这么多地址。一般来说,我们在1万以内使用它就足够了。因此,为了方便起见,我们有一个短地址模型,如下图所示:
功能码
功能代码的概念,我们可以理解,回到我们的初衷,协议的目的是数据传输,即读取数据和写入数据,我们已经确定了四个存储区域,存储不同的数据类型,然后我们将读写这些存储区域,所以可能会产生许多不同的行为,如读取输入线圈存储区域,读取输出线圈存储区域,这是两种不同的行为,同样,如果读取输入线圈存储区和读取输出线圈存储区会更麻烦,那么我们只是为每个形成指定的代码,那么这个代码就是功能代码。
让我们讨论一下有多少不同的行为?
读写是两种行为,存储区有四种,但我们知道输入线圈和输入寄存器只读,所以不能写,除了这两种,应该产生六种不同的行为,如下图所示:
然而,Modbus该规定将写入输出线圈和保持寄存器,并进一步细分,包括单个和多个。因此,原来的六种行为变成了八种行为。同时,为每种行为设置代码,形成下图所示的功能代码列表:
Modbus事实上,规定中的功能代码不止8个,有些功能代码用于诊断或异常代码,但很少使用。这8个功能代码是主要的核心功能代码。
协议分类
Modbus严格地说,这是一个标准化的规定,而不是一个具体的协议。我们常说设备A和设备B之间通过Modbus协议通信,这句话其实并不严谨。
Modbus规定中有三种不同的协议,即ModbusRtu、ModbusAscii、ModbusTcp。
一般来说,ModbusRtu和ModbusAscii是串口上运行的协议,ModbusTcp运营是以太网上的协议,但这不是绝对的,我们也可以ModbusRtu、ModbusAscii同样,我们也可以使用以太网或光纤。ModbusTcp因为协议只是一种规范,不限制通信介质。
报文格式
我们前面说过Modbus有三种不同的协议,即ModbusRtu、ModbusAscii、ModbusTcp,因此,这三种协议的报文格式也有所不同,分别对这三种协议的报文格式进行说明:
ModbusRtu报文格式如下:
第一部分:从站地址,占1个字节
第二部分:功能码,占1个字节
第三部分:数据部分占N字节
第四部分:验证部分,CRC校准,占2个字节
- ModbusAscii报文格式如下:
第一部分:开始字符(:)
第二部分:从站地址,占2个字节
第三部分:功能码,占2个字节
第四部分:数据部分占N字节
第五部分:验证部分,LRC校准,占2个字节
第六部分:结束字符(CR LF)
- ModbusTcp报文格式如下:
第一部分:事务处理标识符,占2个字节
第二部分:协议标识符占2个字节
第三部分:长度,占2个字节
第四部分:单元标识符,占1个字节
第五部分:功能码占1个字节
第六部分:数据部分占N字节
调试软件
Modbus学习成本很低,因为协议是公开和免费的,我们可以直接获得《Modbus中文协议文档。
同时,有很多调试软件可以模拟调试,所以我们可以在不购买任何硬件的情况下进行调试Modbus协议学好。
【协议文件及调试软件】可联系助教获取。
Modbus 学习必须配合相关的调试软件,才能事半功倍,Modbus
学习必备的三大神器是 ModbusPoll、ModbusSlave 及 VSPD,ModbusPoll 该该软件主要用于仿真 Modbus主站或 Modbus 客户端,ModbusSlave 该该软件主要用于仿真 Modbus 从站或 Modbus 服务器,而 VSPD 全称 Configure Virtual Serial Port Driver,用于为计算机创建虚拟串口。
即使我们想结合硬件,支持Modbus协议设备也很多,各种品牌PLC、各种品牌的仪器、各种温湿度传感器、流量计等都能得到很好的支持Modbus协议。