Modbus名词解释
本文整理自:http://www.485-can-tcp.com/technology/232485/TheModbus.htm。如果想去原文请跳转。
后面会不定期的更新。
1.功能码:功能码在modbus协议用于表示信息帧的功能,常用的功能码有03,04,06,16等,其中03功能码的作用是读保持寄存器内容,04功能码的作用是读输入寄存器内容(输入寄存器和保持寄存器的区别看下文),06功能码的内容是预置单个保持寄存器,16功能码的内容则是预置多个保持寄存器。
modbus 常用功能代码
十进制功能
01 读取多个线圈
02 读取多个离散量输入
03 读取多个保持寄存器
04 读取多个输入寄存器
05 写入单个线圈
06 写入单个寄存器
15 强制多个线圈
16 写入多个寄存器
2.输入寄存器和保持寄存器:04功能码的作用就是读输入寄存器,而03功能码的作用则是读保持寄存器,很多人在看到这两个功能码的时候总是希望找到这两个功能码的区别,保持寄存器和输入寄存器到底是什么区别,modbus协议最开始是用来解决PLC的通信协议问题的,主要用于输入输出数字量信号以及模拟量信号,所谓的输入寄存器就是从模拟量信号输入引申出来的,即输入寄存器只能从模拟量信号输入端改变寄存器,而主机则不能通过下发指令改变输入寄存器的数据,而保持寄存器则是用于输出模拟量信号的,主机是可以改变寄存器数据,也就是说对于主机而言,输入寄存器是只读的,而保持寄存器是可以读写的,当主机用06,16功能码的指令去预置输入寄存器的时候,设备会返回一个代码为0x81的错误代码,即企图写只读寄存器。
3.Modbus中的数据地址格式:在Modbus协议中,经常会出现类似于3xxxx,4xxxx寄存器,这个表示的是寄存器支持的数据类型。我们用列表来说明,还有Modbus数据地址格式是从0开始,比如以下一个寄存器40009,即表示保持寄存器,寄存器地址为00 08,类似的数据地址格式经常在组态软件以及PLC系统中用到。
映射地址 | 使用的功能码 | 地址类型 | 存取方式 | 描述 |
0XXXX | 01,05,15 | 离散输出 | 读写 | 每个卷表示单个开关位 |
1XXXX | 02 | 离散输入 | 只读 | 每个卷表示单个开关位 |
2XXXX | 03,04,06,16 | 浮点寄存器 | 只读/读写 | 两个连续16位寄存器表示一个浮点数 |
3XXXX | 04 | 输入寄存器 | 只读 | 每个寄存器表示一个16位无符号整数 |
4XXXX | 03,06,16 | 保持寄存器 | 读写 | 每个寄存器表示一个16位无符号整数 |
5XXXX | 03,04,06,16 | ASCII字符 | 读写 | 每个寄存器表示两个ASCII码 |
【Modbus名词解释】5.Modbus错误代码表,modbus有功能码,校验码,异常功能码和错误代码,其中异常功能码和错误代码非常容易混淆,一般来说异常功能码指的是某个功能码执行的时候出现的相应异常功能码,一般都是在功能码的基础上加上0x80,比如03功能码出现的异常码是0x83异常功能码,16功能码对应出现的异常功能码则是0x90,而错误代码则是表示出现错误的具体情况,比如寄存器地址不存在,不管是读还是写,如果该寄存器地址不存在的话,错误代码为02。
推荐阅读
- Android中的AES加密-下
- Spark|Spark 数据倾斜及其解决方案
- 心系苍生直言进|心系苍生直言进 桃李不言自成蹊 ——读《杜立本文集》有感
- 陷入父母的心理战,孩子被彻底打败
- Python专栏|数据分析的常规流程
- 第六章|第六章 Sleuth--链路追踪
- Python3|Python3 MySQL 数据库连接
- 谈《战争》
- 股票最大利润|股票最大利润 II
- Git学习-笔记摘要