早先学51时,宋老师的书上就有Modbus这方面的知识,可是当时实验环境不足也没去深究,现在做项目用到了RS485这类传感器和Modbus协议,特地来记录下。


一、传感器介绍

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

该传感器一共有五根线,颜色与功能有下表所示对应关系。

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

注意,485的A和B千万不要接反了!

设备默认地址为0x01

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

二、RS485介绍

1、RS485特点
  • 数据信号采用差分传输方式,可以有效的解决共模干扰问题

    • 逻辑“1”以两线之间的电压差为+(0.2~6)V 表示,逻辑“0”以两线间的电压差为-(0.2~6)V 来表示,是一种典型的差分通信
  • 最大距离可达 1200 米
  • 最大传输速度可以达到 10Mb/s 以上
    • 它的传输速率和传输距离是成反比的,只有在 100Kb/s 以下的传输速度,才能达到最大的通信距离,如果需要传输更远距离可以使用中继。
  • 允许多个收发设备接到同一条总线上
    • 可以在总线上进行联网实现多机通信,总线上允许挂多个收发器,从现有的 RS485芯片来看,有可以挂 32、 64、 128、 256 等不同个设备的驱动器
  • RS485 的接口非常简单, 与 RS232 所使用的 MAX232 是类似的,只需要一个 RS485转换器,就可以直接与单片机的 UART 串口连接起来,并且使用完全相同的异步串行通信协议。
    • 但是由于 RS485 是差分通信,因此接收数据和发送数据是不能同时进行的,也就是说它是一种半双工通信。(所以后面有了控制输入和输出方向的dir位!)
2、RS485典型硬件电路

其中,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个字节通信时间以上(通常设置为5ms)。

设备地址:每个设备都有一个自己的地址,当设备接收到一帧数据后,程序首先对设备地址字节进行判断比较,如果与自己的地址不同,则对这帧数据直接不予理会,如果与自己的地址相同,就要对这帧数据进行解析。

如果地址是 0x00,则认为是一个广播命令,就是所有的从机设备都要执行的指令。

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

数据:跟在功能代码后边的是 n 个 8bit 的数据。这个 n 值的到底是多少,是功能代码来确定的,不同的功能代码后边跟的数据数量不同。当主机向从机(传感器)发送读取数据的请求命令时,主机发送的数据 n 的组成部分就是: 2 个字节的寄存器起始地址,加 2 个字节的寄存器数量 N。如下图所示:

当从机接收到主机的请求命令,回应主机发送的命令时,从机数据 n 的组成部分是: 1 个字节的字节数,因为我们回复的寄存器的值是 2 个字节,所以这个字节数也就是 2N 个,再加上 2N 个寄存器的值。如下图所示:

可能这里还会有点绕,不过没关系。到后面结合我们实际的传感器数据,再来看这些规定也许就会一切明朗了。对了,需要提到的一个事情是:在 Modbus 协议里寄存器的地址和数值都是 16 位的(两个字节)。

CRC校验: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,整个协议的分析和数据的读取到这里基本告一段落。

光照度传感器之RS485 通信与 Modbus 协议相关推荐

  1. 【物联网毕设基础】单片机:RS485 通信与 Modbus 协议

    文章目录 RS485 通信与 Modbus 协议 单片机 RS485 通信接口.控制线.原理图及程序实例 RS485 通信与 Modbus 协议 在工业控制.电力通讯.智能仪表等领域,通常情况下是采用 ...

  2. RS485通信和Modbus协议

    在工业控制.电力通讯.智能仪表等领域,通常情况下是采用串口通信的方式进行数据交换.最初采用的方式是 RS232 接口,由于工业现场比较复杂,各种电气设备会在环境中产生比较多的电磁干扰,会导致信号传输错 ...

  3. RS485 通信与 Modbus 协议

    文章目录 RS485 通信与 Modbus 协议 单片机 RS485 通信接口.控制线.原理图及程序实例 RS485 通信与 Modbus 协议 在工业控制.电力通讯.智能仪表等领域,通常情况下是采用 ...

  4. STM32:RS485通信和Modbus通信协议汇总

    RS485通信和Modbus通信协议汇总 1. 主从模式 RS-485上的软件层协议ModBus主要依赖于主从模式.主从模式是指在半双工通讯方式上,2个或者2个以上的设备组成的通讯系统中: (1) 至 ...

  5. 干货分享:RS485通信和Modbus通信协议汇总

    https://zhuanlan.zhihu.com/p/24134130 在工业控制.电力通讯.智能仪表等领域,通常情况下是采用串口通信的方式进行数据交换.最初采用的方式是RS232接口,由于工业现 ...

  6. RS-485通信和ModBus详解

    RS-485通信和ModBus详解   博主在做一些项目的时候,用到一些模块,经常会是485的接口,而且485也是工业上常用的通信方式,在工业应用中建立连向PC机的分布式设备网络.其他数据收集控制器. ...

  7. Modbus协议在串行链路上的实现

    目录 1.串行链路通信简介 2.串行链路通信协议原理 3.串行链路通信帧描述 4.RTU.ASCII串行传输模式 4.1.RTU传输模式 4.2.ASCII传输模式 1.串行链路通信简介 Modbus ...

  8. 【工控协议专题01】Modbus协议原理与安全性分析

    目录 O.术语 一.背景: 二.协议原理 三.传输方式 四.Modbus RTU 和Modbus ASCII有什么区别? 五.MODBUS TCP 注意点 六.功能码作用 七.Modbus 协议安全性 ...

  9. Modbus协议介绍及解析

    Modbus协议介绍及解析 1.Modbus简介 Modbus是一种广泛应用于工业控制领域串行通信协议,以其开放性.高可靠性.高效简单性.免费等优点,成为了工业领域通信协议的业界标准,是工业现场电子设 ...

  10. gprs模块http mqtt_基于GPRS模块的MQTT至MODBUS协议转换器

    [报名阶段需要填写的内容] 1.参赛者姓名(必填项): 方海钰 2.单位或学校名称(选填项): 3.当前职务或职称(选填项): 4.参赛作品的名字(必填项): 基于GPRS模块的MQTT至MODBUS ...

最新文章

  1. 2.6 处理数据不匹配问题-深度学习第三课《结构化机器学习项目》-Stanford吴恩达教授
  2. oracle orion hugepages_settings.sh(支持OEL 7,4.1内核)
  3. mclmcrrt77 matlab,mclmcrrt77.dll下载
  4. java源代码加密+使用proguard混淆java web项目代码+自定义Classloader
  5. 常用Flex IOC框架比较分析【转载】
  6. php 每天早上八点执行操作_php多进程单线程之phpcgi、phpfpm
  7. 大数据分析有哪些分析方式
  8. python framework jdon_python – Django Rest Framework和JSONField
  9. 中国人民大学_《组织行为学》_19.冲突:怎样避免组织内耗?
  10. 软件工程师中的软件维护概述
  11. python 小说下载工具_Python制作全网小说下载器
  12. iexplore.exe
  13. Android 获取手机的IMEI
  14. Apple iBeacons
  15. htmlunit 示例
  16. 使用moment计算两个日期的相差天数
  17. 不重视技术,何谈掌握核心技术?
  18. Android开发5年,面试问到底层实现原理,被怼得,程序员中年危机
  19. 数据结构-算法题分享1
  20. 习题11-8 单链表结点删除(没看懂我撤硕大口吃翔)

热门文章

  1. Android源码解析系列
  2. Paddle飞桨动态图教程——轻量级人像语义分割BiSeNet V2(算法原理、训练、部署,含完整代码和数据)
  3. 利用Mono-cecil实现.NET程序的重新签名,重新链接相关库的引用
  4. 混合引用制作 九九乘法表
  5. 微信发红包测试点整理
  6. 阿泰水晶报表补空行(分组)
  7. 推荐一个免费的论文查重检测软件PaperRight
  8. 利用libpcap捕获DPDK网络包
  9. 计算机屏幕的显示分辨率与什么有关,事实:显示器屏幕尺寸和分辨率之间是什么关系?...
  10. 《Spring Boot极简教程》附录2 编程的本质