目录
一、协议的基本特点
Modbus是施耐德电气于1979年为使用PLC通信而发表的一种串行通信协议。现在它已经成为工业领域通信协议的业界标准,并且是工业电子设备之间常用的连接方式。Modbus被广泛使用的原因主要有三个:
1、公开发表并且无版权要求。(免费)
2、易于部署和维护。(方便)
3、对供应商来说,修改移动本地的比特或字节没有很多限制。(修改简单)
Modbus通信协议作用在OSI模型的物理层(1层)、数据链路层(2层)及应用层(7层)。这里的OSI被称为开放系统互联参考模型,它定义了网络互连的七层框架,每层框架都有其各自的通信协议。
而通信协议其实就是一种约定,一种编码和解码的方式。例如用莫尔斯电码打出三短三长三短(编码),知道协议的人,就会明白这是在表示求救信号(解码),反之,则很难理解它的含义。Modbus也是如此,在之后的内容中我们将更加清楚的看到这一点。
二、协议的报文说明
Modbus协议有三类,分别是:Modbus-RTU、Modbus-ASCII、Modbus-TCP。一般来说,一个设备只有其中的一种协议,而且Modbus规定,Modbus-RTU是设备必须支持的协议,也是默认选项。所以大多数设备都采用了Modbus-RTU协议通信。
先来看一个简单的Modbus-RTU报文。首先声明一点,我们将电脑上的串口助手当作主站,M2101或M1002模块作为从站。根据命令的不同,使用的从站设备也有所不同。
当主站或者说客户机发送了请求报文:01 02 00 00 00 04 79 C9,从站(M1001)或者说服务器会返回响应报文:01 02 01 0F E1 8C。报文中的每一小段都是由一个字节也就是两个十六进制码构成。例如0F,它的二进制是0000 1111。
那我们要怎样理解报文数据呢?以主站发送的报文为例,它可以分为三部分,分别是:地址域——01;协议数据单元(PDU)——02 00 00 00 04,它包含功能码和数据;差错校验——79 C9。而且响应报文与请求报文比较相似,我们将在之后的内容中一起说明。
首先看地址域部分。它是由一个8位字节构成,那么理论上可以有256个不同的地址。这是否意味我们可以为主站连接256个从站设备呢?答案是否定的。因为在这256个地址空间中又有以下这些区别。Modbus规定地址0保留为广播地址,1~247为子节点单独地址,248~255为保留地址。所以从机的地址范围在1~247之间,而其他地址可以由用户自由扩展。这样就可以在满足用户特定需求的同时尽量保持协议的兼容性。当然,保留区也具有同样的功能,如设置特定地址段的广播指令等等。需要注意的是地址域只和从站有关,主站是没有地址标识的,而且每个从站的地址都是唯一的,以便于与其它从站区别。
根据地址域的不同,Modbus分为广播与单播两种请求模式。
在广播模式下,所有从站必须执行主站命令,而无需应答返回。
在单播模式中,一个Modbus事务处理包含两个报文:一个来自主节点(主站)的请求,一个来自子节点(从站)的应答。