Modbus被称之为事实上的工业标准

描述

从Modbus开始说现场总线(一)

PLC应用,在了解了硬件配置和逻辑编程之后,很大一部分工作就是处理现场通讯了。各式各样的现场总线,其实还是有一定的规律的。我们在现场最常见到的现场总线协议,恐怕就是的Modbus了。

我在刚接触Modbus的时候,还顺便学会了一个单词De facto ,查了很多词典才知道是“事实上的”,Modbus也确实可以称之为事实上的工业标准。Modbus是Modicon公司(该公司几经收购,最后并入现在的施耐德电气 Schneider Electric,目前Modicon还作为施耐德某些PLC的系列名称)于1979年为使用可编程逻辑控制器(PLC)通信而开发。为了显示楼主学识渊博(爱好八卦),这里猜测一下这个词的由来,方便大家记忆。Modicon大概是Modular Control的缩写,Modbus作为Modicon的第一代通讯总线,理解成Modular bus:“模块化的总线”好像有些牵强,理解为Modicon的通讯总线Modicon Bus大概比较像吧。Modbus能够成为工业领域通信协议的事实标准(De facto standard),楼主擅自猜测,主要的原因大概有两个:一是Modicon做PLC比较(最)早,另外一个,估计是“简单”。

Modbus协议后来还出了升级版本Modbus Plus(MB+)但因为Modicon公司没有公开协议,所以没有流行开来,但仍然在工业现场大量使用。

最早的Modbus是基于串行通讯的(EIA/TIA)RS232/485/422技术,协议简单易用,硬件消耗很少,所有逐步超出PLC通讯的范围,广泛用于各种工业通讯,很多仪器仪表、控制器都支持该协议,配电领域的断流器也加入其中。后来随着工业以太网的普及,Modbus协议也作为应用层的协议搭上了以太网的快车,仍然出现在各种工业和民用现场。对网络通讯协议模型有了解的同行,通过下图可以清楚的了解Modbus协议的位置和作用。

电气

下面详细介绍Modbus协议的内容,希望以这个“事实上的工业标准”为例,带您认识五花八门的通讯标准。

我们每天都离不开的通讯网络,或许您并不陌生,但对于其工作原理,大概就只有少数人了解了。我在网上看到一个用订外卖过程来说明国际标准化组织定义的标准化网络模型(OSI)的结构,很贴切,您有空可以看看。

一文简单理解OSI网络模型:

https://www.versatek.com/blog/you-wont-believe-what-the-osi-model-and-pizza-have-in-common/

楼主把几种常见的网络(模型)做了一个比对,方便大家理解。当然其中电话网的内容,并不严谨,仅供参考。

电气

从Modbus开始说现场总线(二)

Modbus作为一个应用层的协议,最初是为了实现PLC间通讯的,所以基础的协议内容相对简单,传输的数据主要分为四类:离散量(开关量)输入,离散量(开关量,线圈)输出,输入寄存器,保持寄存器。对应电力系统中的术语,分别是:遥信,遥控,遥测,遥调。实际使用中因为一个保持寄存器可以作为十六个开关量使用,而且读和写都支持,大家都习惯通过读/写保持寄存器来搞定一切。

最初的Modbus协议基于RS-232/485链路,有两种编码方式,RTU和ASCII。这也是为什么有时候看到“Modbus RTU”说法的由来,后面我们介绍的帧格式就是RTU格式,ASCII格式已经很少用了。

其实Modbus的通讯格式非常容易理解,主站给从站发送一条报文,大概相当于网友问支付宝:

支付宝(从站地址),内定的锦鲤(数据类型,保持寄存器)第二名(寄存器地址)是多少(读数据,暗号03)啊(校验码)?报文格式如下(16进制):

电气

支付宝回复网友:

支付宝(从站地址),这个嘛(重复读数据功能码),没有(返回数据长度,二),是0017这厮(返回数据),真没有(校验码):

电气

这样,Modbus主机就完成了一次对从机数据的读操作,是不是很简单?最常用的两个功能码就是上面介绍的0x03(读连续多个保持寄存器)和0x10(十进制16,写多个保持寄存器),其他的功能码,基本类似,无非是类型(离散量,寄存器,…)数量(单个,连续多个)的不同组合。当然还少不了错误处理等细节,详细内容见参考文献。

寄存器地址是从0000开始的,对应于Modicon(施耐德)PLC中的40001,如果是寄存器地址从0001开始,并直接对应寄存器地址40001,Modbus RTU协议就有了一个别名JBUS,可以理解为JBUS是Modbus的一个常用功能子集。另外,有的厂商在返回数据时,数据长度不是按字节计算,而是按字计算,也无法和标准Modbus协议兼容。

把Modbus报文去掉地址和CRC校验码嵌入到以太网的数据帧中,就成了TCP-Modbus,如下图。这样串行设备(我们前面讲的断路器,多数都是通过附件成为一个串行设备)就可以很方便的接入以太网了,当然这个“嵌入”的过程,是由网关完成的。

电气

Modbus协议的主要内容就介绍完了,我们会发现,作为一个应用层协议,Modbus并没有定义数据的格式和含义。例如,读一个保持寄存器的值,我们得到一个16位的数,至于这个数是每一位代表一个开关量的状态,还是一个无符号整数,或者是32位浮点数的高字节或者低字节,就要靠通讯双方自行定义了。所以实现Modbus通讯的很大一部分工作就是按照双方的通讯数据表逐个处理。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分