标签:modbus 00 01 0000 读取 0x01 ModbusRTU 地址 Slave
MODBUS 的基本分类:
通过串口传输:Modbus RTU / Modbus ASCII
通过网口传输:Modbus TCP / Modbus UDP
Modbus RTU:
功能码:
- 0x01 读线圈状态
- 0x02 读输入线圈(只读)
- 0x03 读保持型寄存器
- 0x04 读输入寄存器
存储区分成四个寄存器:
- 线圈状态(可读可写)
- 输入线圈(只读)
- 保持型寄存器(可读可写)
- 输入寄存器(只读)
读线圈消息帧格式 功能码: 0x01
请求格式:
从站地址 | 功能码 | 起始地址 | 读取长度 | CRC校验 |
---|---|---|---|---|
1byte | 1byte | 2byte | 2byte | 2byte |
请求的从站地址若为0,则为广播模式,从站不做响应;240以后的保留。
响应格式:
从站地址 | 功能码 | 字节数 | 输出状态7-0 | 输出状态15-8 | CRC校验 |
---|---|---|---|---|---|
1byte | 1byte | 1byte | 1byte | 1byte | 2byte |
1byte = 8bit :0000 0000
虚拟端口:
从站(Slave)配置:菜单栏Setup进入Slave Definition:
从站号(Slave ID )、功能码(Function)、起始地址(Address)、读取数量(Quantity)
从站(Slave)连接到端口2(COM2):
主站(Poll)配置菜单栏的Setup进入Read/Write Definition
读写的从站ID(Slave ID)、功能码(Function)、起始地址(Address)、数量(Quantity)、读取/扫描速率(Scan Rate,1000ms即为每秒读取一次)
主站Poll连接到串口1(COM1):
配置好以后:主站Poll读取了从站Slave的数据:
主站取出报文分析:
请求:
01 01 00 00 00 0A BC 0D
从站地址 | 功能码 | 起始地址 | 读取长度 | CRC校验 |
---|---|---|---|---|
1byte | 1byte | 2byte | 2byte | 2byte |
01 从站地址SlaveID
01 功能码 Function:读取线圈状态
00 00 起始地址
00 0A 读取长度 即为十进制的10
BC 0D CRC校验
响应:
01 01 02 0E 00 BD 9C
从站地址 | 功能码 | 字节数 | 输出状态7-0 | 输出状态15-8 | CRC校验 |
---|---|---|---|---|---|
1byte | 1byte | 1byte | 1byte | 1byte | 2byte |
01 从站地址SlaveID
01 功能码 Function:读取线圈状态
02 字节数
0E 输出状态7-0,即为 二进制的 0000 1110
00 输出状态15-8,即为二进制的 0000 0000
BD 9C CRC校验
0000 1110 与 0000 0000 互换位置:
0000 0000 0000 1110 ,从后往前读:
0111 0000 0000 0000 ,即为Slave的数据(10bit以后自动补0)
代码实现:
代码中配置了主站连接的串口为COM1,对串口的Write方法断电进行调试
从站配置串口COM2
最后:从站成功取到数据报文。
标签:modbus,00,01,0000,读取,0x01,ModbusRTU,地址,Slave 来源: https://blog.csdn.net/qq_41550190/article/details/121424538
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。