Modbus协议是Modicon公司于1979发布的一种广泛应用的工业现场总线协议,主要包括ModbusRTU、Modbus ASCII和Modbus TCP这三种。Modbus采用主从通信模式,免费且易于使用。三种通信协议在数据模型和功能调用上是相同的,只有封装方式是不同的。
Modbus功能码是Modbus消息帧(报文)的重要组成部分,是Modbus协议中通信事务处理的基础。
MODBUS功能代码分为三类:
被明确定义的功能代码;
保证是唯一的;
经MODBUS.org社区验证;
公开记录;
具有可用的一致性测试;
包括已定义的公共分配功能代码,也包括未分配的功能为将来使用而保留的代码。
用户定义的函数代码有两个范围,即65到72和100到110十进制。
用户可以选择并实现不受支持的功能代码规范
无法保证所选功能代码的使用是唯一的
如果用户想将功能重新定位为公共功能代码,他必须发起一个RFC(变更请求),将更改引入公共类别,并创建一个新的分配了公共功能代码。
MODBUS组织公司明确保留开发提议的RFC的权利。
一些公司目前用于传统产品的功能代码不可供公众使用。
(MODBUS功能代码类别)
Modbus公共功能代码定义
(Modbus完整功能码)
01 (0x01): 读线圈状态(Read Coils)- 用于读取一组逻辑线圈的当前状(ON/OFF)。
02 (0x02): 读离散输入状态(Read Discrete Inputs)- 用于读取一组离散输入的状态(ON/OFF)。
03 (0x03): 读保持寄存器(Read Holding Registers)- 用于读取一组保持寄存器中的二进制内容。
04 (0x04): 读输入寄存器(Read Input Registers)- 用于读取一组输入寄存器中的二进制内容。
05 (0x05): 写单个线圈(Write Single Coil)- 用于写入单个逻辑线圈的状态(ON/OFF)。
06 (0x06): 写单个寄存器(Write Single Register)- 用于写入单个保持寄存器的数据。
15 (0x0F): 写多个线圈(Write Multiple Coils)- 用于写入一组逻辑线圈的状态。
16 (0x10): 写多个寄存器(Write Multiple Registers)- 用于写入一组保持寄存器的数据。
08 (0x08): 诊断(Diagnostic)- 这组功能码用于诊断通信链路的状态,以及测试和诊断Modbus设备。
17 (0x11): 报告从机ID(Report Slave ID)- 返回关于设备的信息,如运行状态和识别信息。
22 (0x16): 屏蔽写寄存器(Mask Write Register)- 允许用户修改保持寄存器的内容,而不改变未指定位的内容。
23 (0x17): 读/写多个寄存器(Read/Write Multiple Registers)- 同时进行读取/写入操作。
异常功能码:异常功能码为正常功能码 + 0x80,如写入单个寄存器错误返回异常码为0x86。
今天的分享就到这里啦,EBYTE每一天都致力于更好的助力物联化、智能化、自动化的发展,提升资源利用率,更多串口服务器、数传电台、lora模块等无线数传模块产品更多资料,感兴趣的小伙伴可以登录我们的亿佰特官网和企业公众号(微信号:cdebyte)进行了解,也可以直接拨打400电话咨询技术专员!
相关阅读:
1、ModBus通信中RTU、ASCII、TCP协议有什么区别?
2、ModBus通信中RTU/ASCII/TCP协议选哪种模式更好
7 X 24 销售服务热线
4000-330-990深圳办事处柯经理:18218726658 南京办事处葛经理:17626012283
成都总部销售经理:
秦 科(无线模块):18884314654 冯子恒(无线模块):18884314734
蔡友银(无线模块):13882211021 葛宇龙(通信设备):19138800613
胡兵(外贸销售经理):18584911141、 sales06@ebyte.com
业务邮箱:support@cdebyte.com 全国销售投诉电话:19934352316
地址:四川省成都市高新西区西区大道199号B5栋(前台座机:028-61543675)
©© 成都亿佰特电子科技有限公司【版权所有】 蜀ICP备13019384号