Modbus协议的数据模型和地址模型,Modbus寄存器40001,30001是什么意思?
在使用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等网络协议,业内专家都在看!
【未经许可,禁止转载】
Modbus协议的数据模型和地址模型,Modbus寄存器40001,30001是什么意思?相关推荐
- modbus协议crc校验c语言代码,MODBUS通信协议中CRC校验码的计算(C/C++)实现
错误检测的方法 错误校验(CRC)域占用两个字节,包含了一个16位的二进制值.CRC值由传输设备计算出来,然后附加到数据帧上,接收设备在接收数据时重新计算CRC值,然后与接收到的CRC域中的值进行比较 ...
- MThings 下载地址 (支持以主机或从机方式进行MODBUS协议簇调试调测运维 工具 助手)
提醒:MThings并非简单的通信调试工具,是一款专业的上位机软件,需具备一定的Modbus基础知识,请慎重上手使用. 官方下载http://www.gulink.cn/download 安裝后,如程 ...
- Modbus 协议详解
Modbus 协议详解 通信协议是指双方实体完成通信或服务所必须遵循的规则和约定,例如我们为实现人与人之间的交流需要约定统一的语言,统一的文字,规定语速等等. 而对于设备之间,协议定义了数据单元使用的 ...
- Modbus协议介绍
Modbus协议介绍 简介 Modbus是一种串行通信协议,是Modicon公司(现在的施耐德电气Schneider Electric)于 1979年为使用可编程逻辑控制器(PLC)通信而发表.Mod ...
- Modbus协议在串行链路上的实现
目录 1.串行链路通信简介 2.串行链路通信协议原理 3.串行链路通信帧描述 4.RTU.ASCII串行传输模式 4.1.RTU传输模式 4.2.ASCII传输模式 1.串行链路通信简介 Modbus ...
- Modbus协议(翻自wiki)
文章目录 原文 译文 Modbus Modbus对象类型 协议版本 通讯和设备 帧格式 支持的功能代码 主要功能代码的请求和响应数据格式 功能代码 1(读取线圈)和功能代码 2(读取离散输入) 功能码 ...
- Modbus协议完整版
第一部分:Modbus协议 1 引言 1.1 范围 MODBUS是OSI模型第7层上的应用层报文传输协议,它在连接至不同类型总线或网络的设备之间提供客户机/服务器通信. 自从1979年出现工业串行链路 ...
- ModBus串口【01】Modbus协议介绍
Modbus协议简介 文章目录 Modbus协议简介 1.啥是Modbus协议? 2.Modbus模型 3.Modbus协议版本 4.Modbus通信 5.Modbus不同存储区介绍: 6.Modbu ...
- MODBUS协议详解
MODBUS协议详解 一.了解MODBUS MODBUS 是 OSI 模型第 7 层上的应用层报文传输协议,它在连接至不同类型总线或网络的设备之间提供客户机/服务器通信. 它主要用于工业自动化设备通信 ...
最新文章
- Go 知识点(08) — 对未初始化的 channel 进行读写操作
- OpenCV camshift目标追踪
- 对象属性操作函数:hasattr(),getattr(),setattr()
- 收集53个程序员段子
- 一次堆外内存泄露的排查过程
- java游戏服务器面试_我做游戏开发这八年
- 类的6个默认成员函数:构造函数、析构函数、拷贝构造函数、重载运算符、三/五法则
- python37.dll可能与您正在运行_模块可能与您正在运行的Windows版本不兼容。检查该模块是否与regsvr32.exe的x86或x64...
- java unsigined short_LDD之数据类型
- Linux init详解 (0,1,2,3,4,5,6)
- MongoDB数据库的优点
- 怎么把word压缩到最小?
- VS+Qt手动生成moc文件
- 星浩资本-以流程为中心
- python 期货现货差价监测_数字货币期货现货差价监控
- ac68u、r8500 梅林固件扩展为一个小型 linux 系统
- js 各省市地名数据(包含各省市区域代码)(未测试)
- 嵌入式应用软件任务划分的原则
- String类中的trim()方法实现
- Visual Studio 2022 vcvarsXXX.bat文件所在的目录
热门文章
- 利用端口,进程,文件,服务和日志信息来排查系统安全
- 周志华-机器学习(线性模型)
- 源代码世界3—海上高墙
- Mysql优化——唯一索引和普通索引的选择
- hexo butterfly主题 添加全局吸底APlayer
- 如何使用 Go 语言重新思考可视化编程?
- inconsistent datatypes: expected DATE got NUMBER
- TF2.0 API学习(Python)六:函数compute_loss、函数bbox_giou、函数bbox_iou
- Oracle分区表概述、分类、使用方法及注意事项
- 《如何五分钟创建自己的新币token 》Dapp开发 Web3+以太坊+智能合约开发 (一)