在使用Modbus协议的时候,经常会遇到诸如40001、30001,10001之类的地址,这些数字代表什么含义呢?这其实是Modbus协议的数据模型和地址模型。
Modbus协议的数据模型
数据模型是对从站设备可访问的数据进行抽象,Modbus协议的数据模型定义了四种可访问的数据:
数据区块 |
数据类型 |
访问类型 |
线圈(Coils) |
布尔 |
读/写 |
离散量输入 |
布尔 |
只读 |
输入寄存器 (Input registers) |
无符号2字节整型 |
只读 |
保持寄存器 (Holding registers) |
无符号2字节整型 |
读/写 |
其中,离散量输入和线圈数据类型是布尔量,因此只支持以位(bit)的方式进行访问,输入寄存器和保持寄存器数据类型是无符号2字节整型,因此支持以字的方式进行访问。当主设备访问从设备的这些数据模型时,离散量输入和输入寄存器只支持以只读的方式进行访问,而线圈和保持寄存器既可以读也可以写。
地址前缀编号 |
编号范围 (1~65536) |
编号范围 (1~9999) |
数据 区块 |
数据 类型 |
访问 类型 |
0 |
000001~ 065536 |
00001~ 09999 |
线圈 (Coils) |
布尔 |
读/写 |
1 |
100001~ 165536 |
10001~ 19999 |
离散量输入 (Discrete Input) |
布尔 |
只读 |
3 |
300001~ 365536 |
30001~ 39999 |
输入寄存器(Input registers) |
无符号2字节整型 |
只读 |
4 |
400001~ 465536 |
40001~ 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 (位)。
我们是专注于工业通信技术的HMS,更多工业物联网洞察和技术知识可关注公众号:
HMS工业网络,我们会深入浅出为您讲解Modbus,PROFIBUS,OPC UA, CANopen等网络协议,业内专家都在看!文章来源:https://www.toymoban.com/news/detail-449762.html
【未经许可,禁止转载】文章来源地址https://www.toymoban.com/news/detail-449762.html
到了这里,关于Modbus协议的数据模型和地址模型,Modbus寄存器40001,30001是什么意思?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!