北岛夜话
原创工业智能控制领域(PLC、单片机、嵌入式、机器人、通信)的技术及经验分享。
文章306 浏览2022108

深入理解Modbus协议的数据模型和地址模型

在使用Modbus协议编程的时候,会遇到诸如40001、10001之类的地址,比如前面的文章《实例:S7-200 SMART通过Modbus-RTU读取温湿度传感器数据》,读取温湿度传感器的寄存器地址用的是40001,这究竟是代表什么意思呢?今天这篇文章,我们来谈谈Modbus协议的数据模型和地址模型,这样大家就能理解这个问题。

cover2.png

1、Modbus协议的数据模型

数据模型是对可访问数据的一种抽象,Modbus协议的数据模型定义了四种可访问的数据,分别是:

  • 离散量输入(Discrete Input);

  • 线圈(Coils);

  • 输入寄存器(Input registers);

  • 保持寄存器(Holding registers);

其中,离散量输入和线圈只支持以位(bit)的方式进行访问,输入寄存器和保持寄存器只支持以字(WORD)的方式进行访问;离散量输入和输入寄存器只支持以只读的方式进行访问,而线圈和保持寄存器既可以读也可以写;

数据模型中成员的特点如下面的表格所示:

Modbus协议定义的数据模型
区块
访问长度
访问方式
说明
离散量输入
位(bit)
只读
数据由IO系统提供
线圈
位(bit)
读/写
可通过应用程序改写
输入寄存器
字(word)
只读
数据由IO系统提供
保持寄存器
字(word)
读/写
可通过应用程序改写

既然数据模型是一种抽象,在实际使用时必须将其映射到真实的物理存储区才能被访问。

Modbus协议允许设备将四种数据分别映射到不同的存储区块中,各个区块之间相互独立,使用不同的功能码可读取到不同的数值,如下图所示:

data_model1.png

图1:Modbus数据模型映射到不同的存储区块

Modbus协议也允许设备将四种数据映射到同一存储区块中,这样通过不同的功能码读取数据可能会得到相同的数据(比如:输入寄存器和保持寄存器为同一物理区块),如下图所示:

data_model2.png

图2:Modbus数据模型映射到同一区块

数据模型中的每一种数据都最多允许有65536个元素(编号1~65536),元素的地址编号从0开始,因此地址的范围为:0~65535;

需要说明的是:65536只是协议允许的最大元素范围,但并不要求全部实现。Modbus协议允许设备根据自己的实际情况实现部分元素,甚至不要求实现模型中全部四种数据;

2、Modbus协议的地址模型

为了简化数据模型与设备存储区的对应关系,引入了一种地址模型。该模型通过编号的方式对不同类型数据进行区分,各数据的地址编号请看下面的表格:

Modbus地址模型
Modbus数据模型/数据区
Modbus地址编号
线圈
0
离散量输入
1
输入寄存器
3
保持寄存器
4

Modbus地址模型的编号从1开始。

由于每一种数据都最大支持65536个元素,因此理论上,

对于线圈型数据来说,其地址范围为:000001~065536;

类似的,

离散量输入,其地址范围为:100001~165536;

输入寄存器,其地址范围为:300001~365536;

保持寄存器,其地址范围为:400001~465536;

由于65536是比较大的数值,实际应用一般不需要这么大的存储区,因此PLC厂家普遍采用的是10000以内的地址范围,即:

线圈地址范围:00001~09999;

离散量输入地址范围:10001~19999;

输入寄存器地址范围:30001~39999;

保持寄存器地址范围:40001~49999;

有了该地址模型,我们就可以从Modbus寄存器的地址判断要访问的区块的类型。比如本文开头提到到地址40001就是保持存储器的第一个值的地址,而10001就是离散量输入的第一个值的地址;要注意的是,保持寄存器和输入寄存器的每个值的大小为16bits(字),而线圈和离散量输入每个值的大小为1bit(位);

各PLC厂家根据PLC的实际情况,将Modbus的地址模型映射到实际的存储区。一般来说,线圈对应过程输出映像区(Q);离散量输入对应过程输入映像区(I);输入寄存器对应模拟量输入(AI);保持寄存器对应数据块或V存储区或M存储区。以西门子S7-200 SMART为例,其Modbus地址与存储器地址的对应关系如下表所示:

Modbus地址
S7-200 SMART存储区
00001~00256
Q0.0~Q31.7
10001~10256
I0.0~I31.7
30001~30056
AIW0~AIW110
40001~4xxxx
V~V+2*(xxxx-1)

Modbus地址模型对于Modbus-RTU/ASCII和Modbus-TCP协议都是适用的。

好了,关于Modbus的地址模型与数据模型就先介绍到这里。我开通了微信视频号,分享一些工控小知识,欢迎扫描下方的二维码查看:

founderchip.png

深入理解Modbus协议的数据模型和地址模型

来源:本站|   大小:577KB|   下载次数:24次

取消

感谢您的支持,欢迎常来看看!

扫码支持
一点动力,多少随意

打开支付宝扫一扫,即可进行扫码打赏哦

发表评论