您的位置 首页 嵌入式

Modbus TCP/RTU/ASCII 泛论

【Modbus协议】Modbus协议是OSI模型的第七层的应用层通讯协议,定义了不同类型设备间交换信息方式,以及信息的格式。【Modbus工作方式】Mod

Modbus协议】
Modbus协议是OSI模型的第七层的应用层通讯协议,界说了不同类型设备间交流信息办法,以及信息的格局。

【Modbus工作办法】
Modbus的工作办法是恳求/应对,每次通讯都是主站先发送指令,可所以播送,或是向特定从站的单播,从站呼应指令,并按要求应对,或许陈述反常。当主站不发送恳求时,从站不会自己宣布数据,从站和从站之间不能直接通讯。

【Modbus报文格局】
Modbus协议的报文(或帧)的根本格局是:表头 + 功用码 + 数据区 + 校验码
功用码和数据区在不同类型的网络都是固定不变的,表头和校验码则因网络底层的完成办法不同而有所差异。表头包含了从站的地址,功用码告知从站要履行何种功用,数据区是详细的信息。图1是一次恳求和应对的进程。

【Modbus数据交流示例】

先以串行通讯的Modbus为例(留意Modbus TCP的报文表头和校验码是不相同的),主站发送了:09 03 00 04 00 03 XX。主站告知从站09,我要读取的地址偏移为4、5、6的Holding Register的数值。其间”03″是读Holding Register的功用码,”00 04 00 01″是数据区,”00 04″是寄存器的地址,”00 03″阐明要连续读三个寄存器的值。”XX”代表最终的校验位,校验办法是LRC或CRC。从站收到信息后,就从对应的寄存器找到数值,回复:09 03 06 02 2B 00 01 00 64 XX。从站答复,该地址偏移为4的寄存器值为02 2B,地址偏移为5的寄存器值为00 01,地址偏移为6的寄存器值为00 64。其间”09 03″是仿制了主站发来的地址和功用码,”06″代表接下来的数据共有6个字节。假如从站收到了一个过错的恳求,例如发现要读的寄存器地址是过错的,则回复:09 83 02 XX。其间”83″是把功用码”03″的最高方位1,告知主站产生了反常,”02″是反常码,阐明产生了无效地址的反常。

【Modbus的四种数据类型】
Coil:巨细只要1位,ON或OFF,可读可写,既可所以一个输出量输出点,也可所以数字量输入点,有用的地址规模是1-9999。Input Status:巨细只要1位,ON或OFF,只读,即数字量输出点,有用地址规模是10001-19999。Input Register:16位的寄存器,只读,能够用作模拟量或16位打包输入点,有用地址规模是30001-39999。Holding Register:16位的寄存器,可读可写,既可所以一个模拟量或16位打包输入点,也可所以模拟量或16位打包输出点,有用地址规模是40001-49999。在 PLC或DCS上用点名符号不同的变量,在Modbus则以数据地址来符号每个点。以上所说的地址都是参阅地址,而不是实践的物理地址。上述的地址是在设备中的地址,依照PLC的习气从1开端递加,而Modbus报文中是从0开端递加。例如地址偏移为4、5、6的Holding Register,其实是指参阅地址是40005、40006、40007的寄存器。

【Modbus TCP、Modbus RTU和Modbus ASCII的差异】
关于不同类型的网络,Modbus的第7层完成是相同的,差异在于基层的完成办法,常见的有TCP/IP和串行通讯两种。Modbus TCP根据以太网和TCP/IP协议,Modbus RTU和Modbus ASCII则是运用异步串行传输(一般是RS-232/422/485)。


关于Modbus TCP而言,主站一般称为Client,从站称为Server;而关于Modbus RTU和Modbus ASCII来说,主站是Master,从站是Slave。如图2所示,串行传输的物理层是RS-485或RS-232,数据链路层是Modbus的串行传输协议;Modbus TCP的1、2、3、4层完成和日常所见的以太网、因特网相同。Modbus默许选用的TCP端口号是502。图3阐明晰Modbus TCP的改动:

  1. 取消了校验位。数据链路层上就进行了CRC-32的校验,TCP/IP是面向衔接的可靠性的协议,因而没必要再加上校验位。
  2. Slave 地址换成了Unit Identifier。当网络里的设备满是运用TCP/IP,这个地址是没有意义的,由于IP就能进行路由寻址。假如网络里还有串行通讯的设备,则需求网关来完成Modbus TCP到Modbus RTU或ASCII之间的协议转化,这时用Unit Identifier来标识网关后边的每个串行通讯设备。
  3. Length是指后边的字节总数。实践上数据区的长度是能确认的,有的功用码就能够确认数据区的长度,有的功用码虽不能确认数据区长度,可是数据区有字节计数,拜见上文举的从站应对的比如。表头添加的Length是为了应对有些情况下TCP/IP协议会将应用层的数据拆包传输。
  4. Transaction Identifier和Protocol Identifier由Client生成,Server的呼应将仿制这些参数。

【RTU和ASCII的差异】

RTU形式下,一个字节的数据,传输的便是一个字节。ASCII形式下,相同一个字节数据用了两个字节来传输。例如,要传输数字0x5B,RTU传输的是0101 1011(二进制),而ASCII传输的是00110101和01000010。可见,ASCII传输的速率是RTU的一半。ASCII形式选用LRC校验,RTU形式选用16位CRC校验。

【Modbus材料】

MODBUS Protocol Specification——Modbus整体功用介绍

Modbus Serial Line Protocol and Implementation Guide V1.02——串行通讯的完成MODBUS TCP/IP——Modbus TCP的完成

Modicon Modbus Protocol Reference Guide——Modbus最早起源于Modicon

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/235155.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部