这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 高校专区 » 坤创E-Geek/天科大新电社 » 4队 学习进程 —modbus协议

共7条 1/1 1 跳转至

4队 学习进程 —modbus协议

菜鸟
2019-07-04 19:17:17     打赏

Modbus协议属于软件层协议,等于数据传输的规则。而现在STM32霸道板子上的RS485接口则相应是属于硬件层协议,等于如何传输数据的方式。

 

Modbus是一种单主站的主/从通信模式,作为主机发送读写等请求,从机在协议中则负责响应主机。在一个系统中只能有一个主机,但可以有多个从机,每个从机都有其唯一的地址。

 

在老师说完学习modbus协议以后,我们花费了好多时间,来理解modbus协议的游戏规则,Modbus具有两种串行传输模式,ASCII 和 RTU,主要学习了RTU传输模式。我们在经过汇总讨论以后对于其流程有了如下总结:

1.接收状态:从机初始化后进入接收状态,从机以接受数据停止时间到达 3.5 字符以上,认为主机的寻址帧完成,进入下一步CRC校验。

2.CRC校验:计算crc,计算过程如下:

(1).预置16位寄存器为FFFFH。称此寄存器为CRC寄存器;

(2).把第一个8位数据与CRC寄存器的低位相异或,把结果放于CRC寄存器;

(3).把寄存器的内容右移一位(朝低位),用0填补最高位,检查最低位;

(4).如果最低位为0:重复第3(再次移位)如果最低位为1CRC寄存器与多项式A0011010 0000 0000 0001)进行异或;

(5).重复步骤34,直到右移8次,这样整个8位数据全部进行了处理;

(6).重复步骤2到步骤5,进行下一个8位数据的处理;

(7).最后得到的CRC寄存器即为CRC码。(CRC= CRC_L +CRC_H)

  在计算出crc后与主机发送的crc对比是否一致。一致则进入下一步地址检测。

3.地址检测:主机发送的地址是本机地址还是广播地址,若为广播地址则不处理,若为本机地址则进入下一步检测功能码,否则不做反应。

4.功能码:不同功能码有不同功能可参见:


 

功能码

名称

作用

1

读取线圈状态

取得一组逻辑线圈的当前状态(ON/OFF)

2

读取输入状态

取得一组开关输入的当前状态(ON/OFF)

3

读取保持寄存器

在一个或多个保持寄存器中取得当前的二进                   制值

4

读取输入寄存器

在一个或多个输入寄存器中取得当前的二进制值

5

强置单线圈

强置一个逻辑线圈的通断状态

6

预置单寄存器

把具体二进值装入一个保持寄存器

7

读取异常状态

取得8个内部线圈的通断状态,这8个线圈的地址由控制器决定

 

一典型的消息帧如图所示

起始位

设备地址

功能代码

数据

CRC效验

结束符

3.5T

8bit

8bit

n8bit

16bit

3.5T

 

 

在以上流程中可总结出,应用部分包括:

1. 串口功能

2. rs485接口

3. 定时器

4. 中断功能

5. ......

需要额外指出,在作为从机的霸道开发板上有485硬件接口但作为主机发送仅有USB口 所以还需要一个USB485的转换器。

 

 实验现象:

首先使用USB转串口将两块32单片机按照图所示的方式连接起来(A对A,B对B),将程序下载到两块单片机中,在通过“modbus调试精灵”向两块32单片机中写入数据,之后观察实验现象

Inked650FEA243BC3BC6D4ABF0D1B6DE37C10_LI.jpg image.pngIMG_20190704_181617.jpg

首先使用上位机向1号机写入数据“a”,将1号机LGB灯点亮,现象如图所示:

再使用上位机向8号机写入数据“a”,同时将8号机LGB等点亮,现象如图所示:

  image.png

最后再向8号机写入数据“b”,将8号机点亮的LGB熄灭,现象如图所示:

 




工程师
2019-07-04 22:43:36     打赏
2楼

感谢分享


工程师
2019-07-04 22:47:06     打赏
3楼

学习


工程师
2019-07-04 22:50:08     打赏
4楼

不错


院士
2019-07-05 09:17:27     打赏
5楼

这是一个啥情况啊!



菜鸟
2019-07-05 21:12:27     打赏
6楼

厉害啊,见过最聪明的同学


工程师
2019-07-06 19:08:29     打赏
7楼

哎呦!不错呦!


共7条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]