当前位置:首页 > 系统集成 > modbus tcp 协议详解

modbus tcp 协议详解

net3c1年前 (2023-08-07)系统集成940

Modbus由MODICON公司于1979年开发,是一种工业现场总线协议标准。1996年施耐德公司推出基于以太网TCP/IP的Modbus协议,ModbusTCP。

Modbus通信的设备分为主站(mater)和从站(slave),主站为主动方,从站为被动方(网关)。


通信过程

通信的过程为:


1、主站设备主动向从站设备发送请求

2、从站设备处理主站的请求后,向主站返回结果。

3、如果从站设备处理请求出现异常,则向主站设备返回异常功能码。


数据传输方式

modbus的数据传输被定义为对以下4个存储块的读写:


1、线圈(coils) 操作单位为1位字的开关量,PLC的输出位,在Modbus中可读可写

2、离散量(discreteinputs) 操作单位为1位字的开关量,PLC的输入位,在Modbus中只读

3、输入寄存器(inputregisters) 操作单位为16位字(两个字节)数据,PLC中只能从模拟量输入端改变的寄存器,在Modbus中只读

4、保持寄存器(holdingregisters) 操作单位为16位字(两个字节)数据,PLC中用于输出模拟量信号的寄存器,在Modbus中可读可写


Modbus协议的数据模型

数据模型是对从站设备可访问的数据进行抽象,Modbus协议的数据模型定义了四种可访问的数据:

数据区块数据类型访问类型
线圈(Coils)布尔读/写
离散量输入(Discrete Input)布尔只读
输入寄存器(Input registers)无符号2字节整型只读
保持寄存器(Holding registers)无符号2字节整型读/写

其中,离散量输入和线圈数据类型是布尔量,因此只支持以位(bit)的方式进行访问,输入寄存器和保持寄存器数据类型是无符号2字节整型,因此支持以字的方式进行访问。当主设备访问从设备的这些数据模型时,离散量输入和输入寄存器只支持以只读的方式进行访问,而线圈和保持寄存器既可以读也可以写。

地址前缀编号编号范围
(1~65536)
编号范围
(1~9999)
数据区块数据类型访问类型
0000001~06553600001~09999线圈(Coils)布尔读/写
1100001~16553610001~19999离散量输入
(Discrete Input)
布尔只读
3300001~36553630001~39999输入寄存器(Input registers)无符号2字节整型只读
4400001~46553640001~49999保持寄存器(Holding registers)无符号2字节整型读/写

数据模型中的每一种数据区块都最多允许有65536(2^16)个元素,Modbus定义了每个数据元素的地址,范围从0到65,535。但是每个数据元素的编号从1开始,范围从1到65,536。

需要说明的是:65536只是协议允许的最大元素范围,并不要求全部实现。Modbus协议允许设备根据自己的实际情况实现部分元素,甚至不要求实现模型中全部四种数据模型。譬如设备可能会选择不执行线圈、离散输入或输入寄存器,而只使用保持寄存器150至175和200至225。这是完全可以接受的,并且通过异常来处理无效的访问。


Modbus协议的地址模型

虽然规范将不同的数据类型定义为存在不同的区块中,并为每种类型分配一个本地地址范围,但这并不一定会转化为用于记录或理解给定设备的Modbus可访问内存的直观编址方案。

为了简化数据模型与设备存储区的对应关系,又引入了地址模型的概念,通过编号的方式对不同类型数据进行区分,也就是通过特定的编号作为前缀加到所讨论的数据地址中。如表中所示,通过0,1,3,4分别表示线圈,离散量输入,输入寄存器,和保持寄存器。

因此理论上,

线圈地址范围:000001~065536
离散量输入地址范围:100001~165536
输入寄存器地址范围:300001~365536
保持寄存器地址范围:400001~465536

由于65536是比较大的数值,实际应用一般不需要这么大的存储区,因此设备厂家普遍采用的是10000以内的地址范围,即:
线圈地址范围:00001~09999
离散量输入地址范围:10001~19999
输入寄存器地址范围:30001~39999
保持寄存器地址范围:40001~49999

有了该地址模型,我们就可以从Modbus寄存器的地址判断要访问的区块的类型。譬如常见到的寄存器地址40001/400001,最前面的4表明它是一个保持寄存器,后面的0001或者00001都是指第一个保持存储器,并且它的地址是0。寄存器30004表明它是输入寄存器,地址是3。寄存器10008表明它是离散量输入,地址是7。

要注意的是,保持寄存器和输入寄存器中的数值是2个字节,而线圈和离散量输入中数值大小仅为1bit (位)。



扫描二维码推送至手机访问。

文章内容摘自网络,如有侵权请联系本站删除。

本文链接:http://i.net3c.com/post/206.html

相关文章

PLC计算机控制俗语

PLC计算机控制俗语

1、什么是I/O单元I 即input , O 即output I/O单元顾名思义是输入输出单元,常出现在计算机术语中!2、DI数字量输入...

交流接触器(km1)的作用和工作原理

交流接触器(km1)的作用和工作原理

交流接触器的作用:交流接触器是一种中间控制元件,其优点是可频繁的通、断线路,以小电流控制大电流。配合热继电器工作还能对负载设备起到一定的过载保护作用。因为它是靠电磁场吸力通、断工作的,相对于人手动分、...

list index out of bounds列表索引超出范围

list index out of bounds列表索引超出范围

list index out of bounds列表索引超出范围处理方式,很简单把软件兼容性与管理员运行打开便可。...

内存地址中最后一位注释

内存地址中最后一位注释

1.内存地址是一个编号,代表一个内存空间2.存储器的容量是以字节为单位,一个内存地址代表一个存储空间3.内存地址单元在计算机内部是以二进制表示的,但二进制过长不便于计算,一般会以16进制表示,编译时,...

电能表的功率单位及计算公式

电能表的功率单位及计算公式

有关电能表的知识,介绍了电能表的功率单位,以及功率的计算公式,电表的计量单位为“度”,民用电表红格内小数忽略不计,属逢十进一,所以应是万位数。1、电能表的功率单位电能表功率单位是w或kw,电度单位是k...

常用字体与行高

常用字体与行高

<span style="font-size:18px;line-height:38px;">...