资讯详情

光照度传感器之RS485 通信与 Modbus 协议

早学51时,宋老师的书就有了Modbus这方面的知识,但当时实验环境不足,没有深入研究,现在用于项目RS485等传感器Modbus特别记录协议。


一、传感器介绍

使用的传感器是光照度传感器,如下图所示。

Alt

该传感器有五条线,颜色与下表所示的功能相对应。

颜色 功能
棕色线 电源正(12-24V)
黑色线 电源负(12-24V)
黄色线 485-A
蓝色线 485-B

注意,485A和B千万不要!

默认设备地址为0x01

传感器只能通过0x03指令读取光照度信息,光照度数据共32位,地址高16位0x07在寄存器中,地址低16位0x08寄存器。

二、RS485介绍

1、RS485特点
2、RS典型的硬件电路485

其中,485-RX和485-TX可直接与单片机的串口相连。485-DIR接收普通输出IO可用于控制通信方向:默认情况下,低电平(处于接收状态),发送时拉高,发送后拉低!

三、Modbus介绍通信协议

1、Modbus介绍

UART、 I2C、 SPI 这些通信协议是底层协议和位级协议。Modbus这种通信协议是字节级的,称为应用层通信协议。该协议描述了控制器访问其他设备的过程,如何响应其他设备的要求,以及如何检测错误记录,并制定了通信数据的模式和内容的公共格式。

多机通信时, Modbus 协议规定,每个控制器必须知道其设备地址,识别根据地址发送的数据,并决定是否有动作和什么动作。如果需要回应,控制器将使用生成的反馈信息 Modbus 协议发出。

2、RTU 协议帧数据

Modbus 通信传输方式有两种,一种是 ASCII 一种是模式 RTU 模式。实际场合使用较多的当数RTU协议帧模式RTU格式如下图所示:

Modbus 的 RTU模式规定不同数据帧之间的间隔 3.超过5个字节通信时间(通常设置为5个ms)。

:每个设备都有自己的地址。当设备收到一帧数据时,程序首先判断和比较设备地址字节。如果它不同于自己的地址,则直接忽略这帧数据。如果它与自己的地址相同,则需要分析这帧数据。

如果地址是 0x00,被认为是命令,是所有从机设备都要执行的指令。

:在第二个字节功能代码字节中, Modbus 规定了一些功能代码。我们经常使用它0x03:读取一个或连续的寄存器以及0x06:写入单个寄存器。本文重点介绍了本项目中使用的光照度传感器,我们主要在程序中阅读传感器的数据0x03功能码。

:跟在功能代码后面的是 n 个 8bit 数据 n 值是由功能代码确定的。不同功能代码背后的数据数量不同。当主机向从机器(传感器)发送读取数据的请求命令时,主机发送数据 n 组成部分为: 2 个字节的寄存器起始地址,加 2 寄存器数量的字节 N。如下图所示: 当从机接收到主机的请求命令并响应主机发送的命令时,从机数据 n 组成部分为: 1 因为我们回复的寄存器值是个字节的字节数 2 所以这个字节是字节数 2N 个,再加上 2N 寄存器值。如下图所示:

这里可能有点绕,但没关系。结合我们的实际传感器数据,这些规定可能很清楚。顺便说一句,我们需要提到的一件事是:

:CRC 除了最后两个字节外,校验函数还计算了前面所有字节的特定算法,计算后生成了一帧数据 16bit作为数据 CRC 在一帧数据的最后添加校准码。接收人收到数据后,前面的字节也会进行 CRC 计算,计算和发送 16bit 的 CRC 对数据进行比较,如果相同,则认为数据正常,无错误。如果比较不同,则表明数据在传输过程中出现错误。这一帧的数据将被丢弃,就像没收一样,发送方将在没有响应后进行相应的错误处理。

关于具体的CRC验证算法,如果真的看不懂,也不用深究,先用!

四、传感器通信实例

两个将用在下面Modbus调试上位机,演示实际情况Modbs通信过程。两款上位机均可从<这里>获取。提取码:fkc9

1、通用的Modbus调试精灵

界面如下图所示:

通过RS485转串设备将传感器连接到计算机选择相应的COM口,其他设置如上图所示,然后单击打开串口。将寄存器地址写入读取寄存器区域:7,数量为2。(即读取0x07和0x08两个寄存器的内容)写入发送窗口01 03 00 07 00 02 75 CA,点击读出,就会收到01 03 04 00 00 00 00 5F BA 0B

下面将详细解释发送和接收的每个字节的含义。

01
内容 含义
设备地址
03 功能码
00 要读取的起始地址高位
07 要读取的起始地址低位
00 寄存器数量高位
02 寄存器数量低位
75 CRC校验高位
CA CRC校验低位

内容 含义
01 设备地址
03 功能码
04 读取的字节数
00 0x07地址的高8位
00 0x07地址的低8位
00 0x08地址的高8位
5F 0x08地址的低8位
BA CRC校验高位
0B CRC校验低位

所以我们读取到的光照强度位:0x42,即95Lux

这里再次体会前面的协议规定中的主机发送请求,从机发送回应。还有前面提到的在 Modbus 协议里寄存器的地址和数值都是 16 位的(两个字节)。

2、专用的光照强度Modbus调试上位机

这个当然就是和这个传感器配套的上位机咯~

但是协议和上面介绍的通用一毛一样,可以比对学习。


emmmm,整个协议的分析和数据的读取到这里基本告一段落。

标签: led光幕传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台