首页 > 数据库技术 > 详细

modbus-poll和modbus-slave工具的学习使用——modbus协议功能码1的解析

时间:2019-11-10 21:46:12      阅读:614      评论:0      收藏:0      [点我收藏+]

一、数据解析

上文使用了modbus工具的基本使用情况,但是还没用说明modbus中的协议的具体意义,

1、左边是slave,id=1,说明地址是1,f=01说明是功能码01,功能码是一个字节,说明理论上最多可以是256个功能码。

2、右边是poll,tx是发送的次数,err是错误数量,id是从机地址,f=01,说明是功能码01,sr=1000ms,说明poll 端是1s发送一次数据。

alias是其实是modbus的协议地址(个人理解的),第二列是数值,即寄存器中的value

技术分享图片

 

这里摘取了slave端部分通信的真实数据:

Rx:000008-01 01 00 00 00 0A BC 0D ,其实是poll-slave系统中的tx
Tx:000009-01 01 02 12 00 B5 5C  ,其实是poll-slave系统中的rx

这里摘取了poll端部分通信的真实数据:

Tx:052-01 01 00 00 00 0A BC 0D
Rx:053-01 01 02 12 00 B5 5C

解析poll端为例:

主要看-后面的hex数据

TX-01(从机地址01) 01(功能码01) 00(起始地址高位) 00(起始地址低位)  00(寄存器数高位)  0A(寄存器数低位,000a,=总共是10个,和上文一致。)  BC(crc16的低位) 0D (crc16的高位)

其中,crc16的两个字节是低位先发送的,组合起来就是0dbc,涉及到大小端的知识,这里不详细展开了。

Rx:01(从机地址01) 01(功能码01) 02 (字节数量为2)12 (数据1)00(数据2) B5(crc16的低位) 5C(crc16的高位)

这里详细说明一下:12 (数据1)00(数据2),同时在poll端读取到的数据一次从上往下是:

0100 1000 00

 技术分享图片

用excel展开为:

技术分享图片

数据1(0x12)先发,紧跟数据2(0x00)

功能码1是位操作指令,最小单位是1bit。功能码01的功能是:读取线圈状态/离散量输出状态,即各DO(discrete output,离散输出)的on/off状态。

二、RTU、 ASCII方式区别

软件中,我使用了rtu模式,效率更加高,ascii模式是使用ascii字符来表示数据,举个例子:

rtu中的0x12,在ascii中,使用0x31,0x32来表示。

下面做个实例:

connect中分别选择ascii模式,

技术分享图片

运行后,得到:

Tx:074-3A 30 31 30 31 30 30 30 30 30 30 30 41 46 34 0D 0A
Rx:075-3A(“;”帧头) 30 31(从机地址0x01) 30 31 (功能码0x01)30 32(字节数量为2) 31 32(数据1) 30 30(数据2)45 41(LRC) 0D 0A(帧尾CR/LF)

LRC的计算方式还不懂,因此从通信效率上来看,rtu的方式是最高效的,在单片机开发过工程中,通常使用rtu方式。

三、修改slave端的数据

在slave端更新某一位,就可以在poll端查看到,引用到实际嵌入式中,可以将某一位映射到mos管的输出到低电平,上位机可以通过功能码1来查看mos的工作状态。

 

 技术分享图片

四、poll端数据的设置

在poll也是可以设置slave的数据的,如下所示,其实这里的设定已经使用了功能码5,好比,上位机将某一个mos管的输出进行更改高低电平。功能码5的功能是:写单个线圈或单个离散输出,具体的功能,将在后续文章中分析。

 技术分享图片

 

 

 

 

modbus-poll和modbus-slave工具的学习使用——modbus协议功能码1的解析

原文:https://www.cnblogs.com/CodeWorkerLiMing/p/11831580.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!