0
点赞
收藏
分享

微信扫一扫

23HAL RS485 通信 MODBUS协议

RS485 Modbus协议呢,非常的不出乎意料,还是基于最基本的串口收发写出来的。只是一种串口的应用,在串口的基础上增加了一点发送接收的规则与要求。按照一定的约定进行数据的收发。这一点类似于电力行业所使用的101规约,104规约有异曲同工之妙。

唯一一点要注意的就是,关于485接口,使用的485芯片一般而言都是准双向的。所以要进行发送接收的切换。默认我们认为485要处于接收的状态。

​下面我们来对Modbus协议做一个简单的了解吧!

MODBUS-RTU协议

一、通讯格式

Address

Function

Data

CRC check

8 bits

8 bits

N x 8Bits

16 bits


1、Address

通讯地址: 1 - 247


2、Function

功能码  01/05/15  03/06/16

功能码

功能含义

寄存器地址

01

读单个或多个位状态

00001 - 09999

05

写单个位状态

00001 - 09999

15

写多个位状态

00001 - 09999

03

读单个或多个寄存器

40001 - 49999

06

写单个寄存器

40001 - 49999

16

写多个寄存器

40001 - 49999


3、CRC check

CRC校验:CRC-16,低位在前,高位在后(也有高位在前,低位在后面的)



二、报文格式

1、读单个或多个位状态

发送:Address 01 ADDRH ADDRL NUMH NUML CRC

返回:Address 01 BYTELENGTH DATA1...DATAN CRC


2、读单个或多个寄存器

发送:Address 03 ADDRH ADDRL NUMH NUML CRC

返回:Address 03 BYTELENGTH DATA1...DATAN CRC


3、写单个位状态

发送:Address 05 ADDRH ADDRL DATAH DATAL CRC

返回:Address 05 ADDRH ADDRL DATAH DATAL CRC


4、写单个寄存器

发送:Address 06 ADDRH ADDRL DATAH DATAL CRC

返回:Address 06 ADDRH ADDRL DATAH DATAL CRC


三、实战项目

1、通讯协议 :MODBUS-RTU

2、波特率 :9600(使用Modbus一般都是远距离的工业环境,需要一个不错的抗干扰的能力,所以多选用9600bps。)

3、数据位:8

4、停止位:1

5、校验位:无

6、地址:1

7、寄存器地址定义

序号

寄存器地址

名称

范围

功能号

  描述

1

40001

SHT30环境温度

-45 ~ 125℃

03

解析1

2

40002

SHT30环境湿度

0 - 100%RH

03

解析2

3

40003

继电器

0/1

03/06

0:关,1开

4

40004

蜂鸣器

0/1

03/06

0:关,1开


解析1:

SHT30环境温度 -> -40 ~ 125℃,精度0.1℃    

传输数据 = (SHT30环境温度+40)*10,传输数据范围为 0 - 1650


解析2:

SHT30环境湿度 -> 0 ~ 100%RH,精度1%RH    

传输数据 = SHT30环境湿度,传输数据范围为 0 - 100

上面,我们重点的介绍了协议,简单的了解了一下Modbus协议,下面的重点我们放在如何去实现这样的功能上。来看看我们的关键代码部分是如何编写的。下面有请Auqin为我们来展示那模块化的面向对象的编程思想与逻辑。


举报

相关推荐

0 条评论