Modbus通讯协议(一)——概述
一、简介
ModBus是Modicon公司为其PLC通讯而开发的一种通讯协议。如今Modicon公司已经被施耐德收购成为了施耐德旗下品牌。从1979年问世至今,已经成为工业通讯领域的业界标准,最初的ModBus仅支持串口,分为RTU和ACSII两种信号传输模式(一般基于RS485串口通信媒介)。而随着时代的变迁,ModBus新增了TCP版本,可以通过以太网进行通讯,此外ModBus还有一个Modicon专用的ModBus Plus版本。
和其他工业通信协议相比,ModBus主要的优点包括内容公开,无版权要求,不用支付额外的费用,硬件简单,容易部署。
ModBus采用半双工的通讯方式,由1个子站和多个从站组成,允许多个设备连接在同一个网络上进行通讯。
上述三类对应的物理层:
ModBus TCP,以太网,RJ45。
ModBus RTU/ASCII,异步串行通讯,RS232/485/422、光纤、无线
ModBus Plus,高速令牌传递网络,同轴电缆或光缆。
二、信号传输模式对比
A、RTU与ASCII
1、ModBus ASCII协议拥有开始和结束标记,ModBus RTU没有。
这就使得ASCII协议中对数据包的处理能够更加的方便。
例如:
ASCII协议中一个数据包之间的传输间隔可以高达1s(一般不超过1s,超过1s接收设备认为出错)。
RTU协议中规定每两个字节中之间发送或接收时间不得超过3.5倍的字符传输时间,否则超过这一规定时间则会认为是新帧的开始。
2、ASCII协议的可读性强、传输效率低。
由于ASCII协议传输的都是可见的ASCII字符,所以调试阶段会显得更加直观。
但是这同时也是它的缺点,可读性的增加带来的就是通讯传输效率低。例如传输1个十六进制数0xF9,ASCII就要传送“F”和“9”两个字符,其对应的ASCII码是0x46和0x39两个字节,而RTU只需要1个字节就可以完成传输。
而ModBus作为应用于工业领域的通信协议,面向的主要是技术工人和工程师,不需要很强的可读性,反而传输的数据量一般会比较大,所以在工业现场很少会采用ASCII协议。
3、校验程序不同
RTU采用CRC校验,而ASCII采用LRC校验。LRC校验程序相对CRC校验程序简单。两种校验方法会在后续文章中详细介绍。
用下表总结一下上述内容:
B、RTU与TCP
1、从机地址变得不在重要,多数情况可以忽略。从某种意义上来说从机地址被IP地址取代。
2、CRC校验不再重要,甚至可以忽略。由于TCP数据包中已经存在校验,是可靠的数据传输网络,故不再有校验数据。
3、TCP与RTU的PDU(协议数据单元)与RTU非常类似,少了地址码与CRC码,TCP多了一个报文头。其中的详细情况后续文章会继续介绍。
C、ModBus Plus
大家想象一下这种情况:
如果从站有紧急事项需要主站来服务,可是MODBUS规定了轮询规则,等到自己的时候,可能会太迟了。于是许多现场总线就发明了一个特殊的东西,叫做令牌。令牌很短,只有一个字节,它可以很快地在总线上传递。令牌在各站点中传递,谁拿到令牌,谁就是主站,就可以发布信息。如果本站没有事情需要发布,就把令牌交给下一个站点,由此解决了总线占用问题。
ModBus Plus正是这样的现场总线,网上的节点均为对等逻辑关系,通过获得令牌来传递网络信息。网络中的每一个节点均分配有一个惟一的地址,一个节点拥有令牌就可以与所选的目标进行信息传递,或与网络上所有节点交换信息。
D、ModBus 功能码表
下表是ModBus所有的功能码,之后的文章会选取常用的功能码,结合实际报文进行讲解。