欢迎光临~广州悦欣电子科技有限公司
服务热线全国服务热线:

18925103846

资料知识

关于 Modbus 总结学习

Modbus 总结学习


   Modbus 是一个基于 RS485 的工业标准通讯协议,广泛的应用在工业控制中,最主要的 应用还是在 PLC 等等设备中。详细的概念这里就不做说明,只对使用进行详细说明

1、modbus 的一些特点

(1)、在同一个 modbus 网络中,只能有 1 台主机,多台从机。

(2)、modbus 从机才需要地址,主机没有地址,不需要初始化地址

(3)、modbus 所有的通讯都是由主机发起的,也就是说从机不可能主动发数据给从机。modbus 是主从的,只能主问从答,从机不能主动上送。

2、modbus 有两种通信方式:

(1)、RTU 的方式 --- 这个是我们的使用的方式,下面说有的介绍都是基于 RTU 这种方式 (2)、ASCLL 码的方式 --- 他的数据字节是 7bit 位,我们普通的 mcu 不太好实现。另外市场上 用的比较少。所以这种方式,这里不做研究

 

二、RTU 模式

1、RTU 模式的数据帧格式说明

(1)、起始位和结束符是一样的

(2)、T1-T2-T3-T4 代表的意思?

这个问题是针对于 modbus rtu 协议的,这是 modbus rtu 协议的数据格式。其中 T1-T2-T3-T4 表示 4 个字节的通讯间隔。在 modbus rtu 协议中要求每个数据包的前后有至少传输 3.5 个字 节的时间间隔,用来间隔多条数据

(3)、CRC16 校验参照别人现成的就可以了,不详细深究

(4)、设备地址:这个好理解。Modbus 主机的地址不需要设定,从机的地址可设定为 1~247。

(5)、功能代码:参见下面的详细说明

(6)、数据:参见下面详细说明

2、RTU模式下如何判断数据的开始

三、功能代码说明

1、常用功能代码

(1)、03 功能代码。这个功能代码就是读取指定的寄存器的数据。

==>其实说白了,这里面的寄存器是自己所定义的。

==>应用到我们的产品中,其实就是读取系统的状态、以及文件总数等等数据.

==>也就是我们所说的查询功能。

(2)、06 功能代码。这个功能代码就是写入数据到寄存器中。

==>其实说白了,这个就是主机发送数据,而从机接受到之后,写入到自己设定的寄存器中。

==>应用到我们的产品中,其实就是主机发送一个指令给我们芯片,而我们的芯片将这个指令存储到所建立的寄存器 buffer 中,再对这个指令进行相应的动作

==>也就是我们常说的“控制功能”

四、举例说明

1、06 功能码

如图:我们的 USB 转 485 模块虚拟出的是 COM5,波特率 9600,无校验位,数据位是 8 位,

1 位停止位,设备地址假设为 1。

(1)、写寄存器的时候,如果我们要把 01 写到一个地址是 0000 的寄存器地址里,点一下“写

入”,就会出现发送指令:01 06 00 00 00 01 48 0A。 (2)、我们来分析一下这帧数据,其中 01 是设备地址,06 是功能码,代表写寄存器这个功 能,后边跟 00 00 表示的是要写入的寄存器的地址,00 01 就是要写入的数据,48 0A 就是 CRC 校验码,这是软件自动算出来了。

(3)、而根据 Modbus 协议,当写寄存器的时候,从机成功完成该指令的操作后,会把主机 发送的指令直接返回,我们的调试精灵会接收到这样一帧数据:01 06 00 00 00 01 48 0A。

 

2、03 功能码

假如我们现在要从寄存器地址 0002 开始读取寄存器,并且读取的数量是 2 个。如上图

(1)、点一下“读出”,就会出现发送指令:01 03 00 02 00 02 65 CB。

(2)、其中 01 是设备地址,03 是功能码,代表写寄存器这个功能,00 02 就是读寄存器的起 始地址,后一个 00 02 就是要读取 2 个寄存器的数值,65 CB 就是 CRC 校验。 (3)、而接收到的数据是:01 03 04 00 00 00 00 FA 33。其中 01 是设备地址,03 是功能码,

04 代表的是后边读到的数据字节数是 4 个,00 00 00 00 分别是地址为 00 02 和 00 03 的寄存 器内部的数据,而 FA 33 就是 CRC 校验了。751697315

五、配置文件的说明

1、如上图,我们新建的一个 read.cfg 文件,里面填入的数字是“030010”,代表含义如下

(1)、第一位 0,代表的意思是按键模式配置为 0,详细的功能请查找表格

(2)、第二位 3 和第三位 0,共同组成了音量为 30 级,如果这里为 21 的话,是 21 级音量

(3)、第四位 0 和第五位 1,共同组成了 modbus 的设备地址,这里地址设定为 01 地址 如果要设定为 10 地址的话,这里两位填入 10 即可

(4)、最后一位代表的是 busy 脚输出信号,

01 06 00 01 00 00 D8 0A --- 代表下一曲的命令

01 06 00 03 00 02 F8 0B --- 指定播放第二曲

6、测试说明

 

我们所有的 modbus 的指令测试,都是通过电脑端的工具测试的,使用的是“MODBUS 调试助手.exe”,这个软件可以问我们索取

测试说明如下:

我们只需要用到 03 和 06 这两个功能码

测试我们所设定的地址为 02

完全支持 modbus 的标准协议

1、测试 06 功能码

Modbus 对于 06 功能码要求:从机收到数据之后,将主机发送的数据再次发给主机,作 为从机收到主机的指令的应答

(1)、0x01 指令测试

这里 modbus 主机发送的数据是“02 06 00 01 00 00 D8 39 ” 代表的含义是:指定下一曲播放

(2)、0x03 指令测试

这里 modbus 主机发送的数据是“02 06 00 03 00 02 F8 38 ” 代表的含义是:按照物理顺序指定第二段语音播放

(3)、0x08 指令测试

这里 modbus 主机发送的数据是“02 06 00 08 00 02 89 FA” 代表的含义是:按照物理顺序指定第二段语音循环播放

(4)、0x0F 指令测试

这里 modbus 主机发送的数据是“02 06 00 0F 01 01 79 AA ” 代表的含义是:指定 01 文件夹下面的 001xxx.mp3 文件播放

用手机扫描二维码关闭
二维码