Modbus 与 RS485 的区别与联系

2023-11-01

目前道长入坑了一家智能家居公司,以后会分享记录一些智能家居相关的知识,如果有问题,希望小伙伴交流指正。

一、RS-485

1.1 RS-485 来源

RS485是美国电子工业协会(EIA)在1983年批准了一个新的平衡传输标准(balanced transmission standard),EIA一开始将RS(Recommended Standard)做为标准的前缀,不过后来为了便于识别标准的来源,已将RS改为EIA/TIA。目前标准名称为TIA-485,但工程师及应用指南仍继续使用RS-485来称呼此标准。
   RS-485仅是一个电气标准,描述了接口的物理层,像协议、时序、串行或并行数据以及链路全部由设计者或更高层协议定义。 RS485定义的是使用平衡(也称作差分)多点传输线的驱动器(driver)和接收器(receiver)的电气特性。

1.2 RS-485 通信原理

    把MCU出来的一条的TTL信号经过芯片转换为两根线(线A、线B)上的信号。当MCU给转换器输入低TTL电平时,转换器会使得B的电压比A的电压高,反之,A的电压比B的电压高。
    RS485协议规约两条电平线上差值为多少表示0或者1,电压是通过仪表可以测量得到的,所以说RS485是硬件层协议。RS485协议的接收端可能是另一个MCU,MCU管脚也只接受TTL电平,转换芯片过来的是两条线的电压,所以需要对此两条线差分电压转换为TTL电平。
    在这里插入图片描述
                                                        图一 RS485通讯原理

    RS485能够进行远距离传输主要得益于使用差分信号进行传输,当有噪声干扰时仍可以使用线路上两者差值进行判断,使传输数据不受噪声干扰。
           在这里插入图片描述
                                                        图二 差分信号传输

1.3 RS-485 总线

    RS485采用半双工工作方式,支持多点数据通信。RS485总线网络拓扑一般采用终端匹配的总线型结构。即采用一条总线将各个节点串接起来,不支持环形或星型网络。
在这里插入图片描述
                                                        图三 RS485总线

    RS485总线只是一种电气标准,并不是什么新的协议,与232差不多,当然这么说不是很恰当,但是有助于大家理解。现在的总线格式很多,RS485相对于其他的总线有什么特点?首先,就比较一下大家耳熟能详的CAN总线。

1.4 CAN 总线

    CAN是控制器局域网络(Controller Area Network, CAN)的简称,是由研发和生产汽车电子产品著称的德国BOSCH公司开发了的,并最终成为国际标准(ISO11898)。
    相比于CAN总线,RS232、RS485只能代表通讯的物理介质层和链路层,如果要实现数据的双向访问,就必须自己编写通讯应用程序,但这种程序多数都不能符合ISO/OSI的规范,只能实现较单一的功能,适用于单一设备类型,程序不具备通用性。
    CAN(Controller Area Network)属于现场总线的范畴,它是一种以ISO/OSI模型为基础的,具有完整的软件支持系统,能够解决总线控制、冲突检测、链路维护等问题。现场总线设备自动成网,无主/从设备之分或允许多主存在。在同一个层次上不同厂家的产品可以互换,设备之间具有互操作性。

  • CAN总线 VS RS485总线
    在这里插入图片描述
                                                            图四 CAN总线与RS485总线对比

1.5 RS-485 协议

    RS485协议一般含有指令头、功能码、设备地址、数据、校验码等部分组成,如朗园灯控485协议所示: 在这里插入图片描述
                                                        图五 RS485 协议指令格式举例

二、Modbus-RTU

2.1 Modbus来源

    Modbus是一种串行通信协议,施耐德电气(Schneider Electric)于1979年为使用可编程逻辑控制器(PLC)通信而发表。Modbus已经成为工业领域通信协议的业界标准(De facto),并且现在是工业电子设备之间常用的连接方式。
    对于串行连接,存在两个变种,它们在数值数据表示不同和协议细节上略有不同。Modbus RTU(远程终端模式)是一种紧凑的,采用二进制表示数据的方式,Modbus ASCII是一种人类可读的,冗长的表示方式。这两个变种都使用串行通信(serial communication)方式。RTU格式后续的命令/数据带有循环冗余校验的校验和,而ASCII格式采用纵向冗余校验的校验和。被配置为RTU变种的节点不会和设置为ASCII变种的节点通信,反之亦然。
    对于通过TCP/IP(例如以太网)的连接,存在多个Modbus/TCP变种,这种方式不需要校验和计算。

2.2 原理

    Modbus协议是一个master/slave架构的协议。有一个节点是master节点,其他使用Modbus协议参与通信的节点是slave节点。每一个slave设备都有一个唯一的地址。在串行和MB+网络中,只有被指定为主节点的节点可以启动一个命令(在以太网上,任何一个设备都能发送一个Modbus命令,但是通常也只有一个主节点设备启动指令)。
    一个ModBus命令包含了打算执行的设备的Modbus地址。所有设备都会收到命令,但只有指定位置的设备会执行及回应指令(地址0例外,指定地址0的指令是广播指令,所有收到指令的设备都会运行,不过不回应指令)。所有的Modbus命令包含了检查码,以确定到达的命令没有被破坏。基本的ModBus命令能指令一个RTU改变它的寄存器的某个值,控制或者读取一个I/O端口,以及指挥设备回送一个或者多个其寄存器中的数据。

2.3 Modbus 协议

2.3.1 Modbus TCP 数据帧

    Modbus TCP 的数据帧可分为:MBAP(报文头) + PDU(帧结构),PDU由功能码和数据组成。
    报文头长度为7字节,由事务处理标识、协议标识符、长度、单元标识符组成,协议标识符一般指协议的类型,比如00 00标识Modbus TCP,消息头结构如下:
在这里插入图片描述
                                                        图六 Modbus 报文头

2.3.2 Modbus操作对象

     有四种:线圈、离散输入、保持寄存器、输入寄存器

  • 线圈 :PLC(可编程逻辑控制器)的输出位,开关量,在Modbus中可读可写
  • 离散量 :PLC的输入位,开关量,在Modbus中只读
  • 输入寄存器 :PLC中只能从模拟量输入端改变的寄存器,在Modbus中只读
  • 保持寄存器 :PLC中用于输出模拟量信号的寄存器,在Modbus中可读可写

根据操作对象不同,Modbus功能码有不同的区分,例如如下常用功能码:

01 (0x01) 读线圈
02 (0x02) 读离散量输入
03 (0x03) 读保持寄存器
04 (0x04) 读输入寄存器
05 (0x05) 写单个线圈
06 (0x06) 写单个寄存器
15 (0x0F) 写多个线圈
16 (0x10) 写多个寄存器

2.3.3 帧结构

在这里插入图片描述
                                                        图七 Modbus 帧结构

从远程设备中读保持寄存器连续块的内容的Modbus 指令实例如下:
    0x03:读保持寄存器
    请求:MBAP 功能码 起始地址H 起始地址L 寄存器数量H 寄存器数量L(共12字节)
    响应:MBAP 功能码 数据长度 寄存器数据(长度:9+寄存器数量×2)
    如:起始地址是0x0000,寄存器数量是 0x0003
        00 01 00 00 00 06 01 03 00 00 00 03
    回:数据长度为0x06,第一个寄存器的数据为0x21,其余为0x00
        00 01 00 00 00 09 01 03 06 00 21 00 00 00 00

2.4 与RS485的关系

    MODBUS只是通信协议的一种,就像汉语和英语一样的一种用来交流的语言,一种机器之间交流的语言。在交流之前肯定要有沟通的桥梁,那就是传输媒介485或232或其他电气规则。同一种协议可以用不同的传输媒介方式如485或232,但是同一传输线路上不能同时存在两种协议。其中Modbus的协议栈如下图所示:
在这里插入图片描述
                                                        图八 Modbus 协议栈

    Modbus协议主要描述的是应用层的信息封装格式,处于OSI模式的第七层(应用层)。Modbus的物理层可以是RS-485、Ethernet II /802.3。使用EIA/TIA-485这种串行通讯方式的Modbus协议框图如下所示:
            在这里插入图片描述
                                                        图九 基于RS485的Modbus-RTU协议栈

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Modbus 与 RS485 的区别与联系 的相关文章

  • 不同 Android 设备上 box2D 中出现奇怪的“口吃”

    我正在用 C 同时开发引擎和游戏 并使用 box2D 作为物理后端 我正在不同的 Android 设备上进行测试 在三分之二的设备上 游戏运行良好 物理效果也很好 然而 在我的 Galaxy Tab 10 1 上 我偶尔会遇到某种 口吃 的
  • Android自定义控件命名空间问题

    我一直在为 Android 开发自定义控件 尽管我尝试按照建议进行操作here https stackoverflow com questions 4495511 how to pass custom component parameter
  • 如何使用retrofit2进行GET请求?

    我有一个在本地主机上运行的安静的 Web 服务 我想在该剩余 URL 上发出 Retrofit2 GET 请求 MainActivity java private void requestData public static final S
  • 有没有办法将搜索栏添加到我的实际首选项屏幕?

    我一直看到有关添加您自己的搜索栏首选项的教程 但它不在我实际的 prefs xml 中 有什么方法可以在我的主偏好设置屏幕中添加一个 或者我必须将其分开 Google 似乎有 2 个滑块首选项 搜索栏首选项 https github com
  • 编译后从字节代码中删除注释

    我们正在使用一个包含使用 JAXB 注释进行注释的 bean 的库 我们使用这些类的方式完全不依赖于 JAXB 换句话说 我们不需要 JAXB 也不依赖注释 但是 由于注释存在 它们最终会被处理注释的其他类引用 这要求我将 JAXB 捆绑到
  • 游标索引越界异常

    打开后出现光标索引越界错误 数据库 请任何人告诉我如何打开现有数据库 sqllite Android 我想在数据库上触发一个选择查询 检索一些信息 public void getPatient SQLiteDatabase db Strin
  • 我的 Android 设备需要安装哪个驱动程序才能运行我的应用程序?

    我购买了 intex mobile 来在真实设备中测试我的 Android 应用程序 然而 该设备不存在于 OEM USB 驱动程序列表中 android 提供的设备列表中 我检查了 intex 官方网站 但不确定到底需要安装哪个驱动程序
  • Android 8.1 中 Activity 自行旋转并恢复正常

    我的应用程序在所有 Android 版本上运行良好 但我注意到在 Android 8 1 0 Oreo 中 当我将屏幕从纵向活动转到横向活动时 以及当我按后退按钮时 它会显示异常行为 屏幕自动从横向旋转并恢复正常 看起来 Activity
  • 需要在 Android 中伪造正在扫描的 NFC 标签

    好的 我有一个应用程序 此应用程序仅在扫描 NFC 标签 任何标签 时才会完成任务 唯一的问题是 我没有任何 nfc 标签 无论如何 我正试图消除对卡的需要 所以我需要的是一种 伪造 使其看起来 就像已扫描 nfc 标签的方法 我可以编写应
  • 在 Android 中始终以横向模式打开相机

    在我的 Android 应用程序中 单击按钮后我希望相机以横向模式打开 即使我将手机旋转为纵向模式 相机也应始终处于横向模式或纵向模式 使用此代码在横向模式下打开相机 Intent cameraIntent new Intent Media
  • 使用 mupdf android 库导航到特定页面

    我如何使用 muPDF 库导航到特定页面 或者有没有办法让图书馆不记得我最后在那个pdf文件中浏览的是哪一页 Uri uri Uri parse path Intent intent new Intent MainActivity getC
  • 如何更改对话框片段内的片段

    我想做一个空的DialogFragment with a LinearLayout然后更改里面的片段LinearLayout 例如 第一个片段是 3 个按钮 facebook google 电子邮件登录 的登录 当有人按下电子邮件时 第 2
  • 如何在android中画一条曲线?

    我是 Android 新手 正在开发一个关于绘制线条的示例项目 我想画一条连接两点的曲线或高架线 x1 y1 and x2 y2 我试过canvas drawArc 方法 但是RectF内的值drawArc方法只是圆的 x y 中心点 它在
  • Android httpclient文件上传数据损坏和超时问题

    我在 Android 中上传图像时遇到问题 我正在使用 apache httpmime 4 1 lib 代码是这样的 MultipartEntity reqEntity new MultipartEntity HttpMultipartMo
  • 使用 UPI url 调用 PSP 应用程序

    我正在尝试创建一个商家应用程序 它将根据 NPCI 的指南生成一个 url 此 url 将作为意图共享 并且 PSP 应用程序 任何注册的银行应用程序 应该能够侦听该 url 并被调用 我已经形成了这样的网址 upi pay pa icic
  • Android 4.2 - Environment.getExternalStorageDirectory().getPath() 行为

    我一直在开发一个android应用程序 在上次更新到4 2之前 我使用 Environment getExternalStorageDirectory getPath 它返回了我 storage sdcard0 但自从更新后我现在得到了 s
  • 将 Crashlytics 集成到图书馆项目

    我有一个图书馆项目 自定义视图库项目 它没有任何活动 服务 我想将 Crashlytics SDK 集成到我的库中 当我尝试通过 Android Studio 的 Crashlytics 插件 工具栏中的图标 添加它时 它只是停留在 Che
  • 应用程序中空指针异常[重复]

    这个问题在这里已经有答案了 我正在尝试在我的应用程序中实施应用程序内计费 我写了这段代码 public class Settings extends PreferenceFragment ServiceConnection mService
  • 制作弹跳动画

    我想做图层的弹跳动画 我已经完成了该图层从右到中心的操作 现在我想将其向后移动一点 然后回到中心 这会产生反弹效果 我想我可以用这样的翻译来做到这一点
  • Application.onLowMemory() 未调用

    我创建了自己的应用程序类 我尝试调试它 代码在 Application onCreate 处停止 但不会在 onLowMemory 处停止 为了测试该场景 我打开了许多其他高内存应用程序 我看到的是调试会话终止 在 Eclipse 中 并且

随机推荐

  • vue+elementUI table表格嵌套表单,功能包含联动下拉框、动态增加行

    一 需求说明 vue elementUI table表格里嵌套表单 支持动态增加一行和删除一行 含checkbox复选框 联动下拉框 不同的活动名称 所对应的活动选项下拉框的值不同 针对不同的选项 值的表现形式也要发生对应的变化 如 日期形
  • An attempt was made to call a method that does not exist. The attempt was made from the following lo

    APPLICATION FAILED TO START Description An attempt was made to call a method that does not exist The attempt was made fr
  • springboot学习(三)——使用HttpMessageConverter进行http序列化和反序列化

    以下内容 如有问题 烦请指出 谢谢 对象的序列化 反序列化大家应该都比较熟悉 序列化就是将object转化为可以传输的二进制 反序列化就是将二进制转化为程序内部的对象 序列化 反序列化主要体现在程序I O这个过程中 包括网络I O和磁盘I
  • 链塔智库

    链塔智库整理最近一周内区块链相关政策 业内动态 人物观点 为大家梳理呈现各个领域的最新发展 目录 一 各地政策要闻 四川 探索建立基于区块链技术的数字资产交易平台 首个区块链领域国家标准在成都举行首场征求意见会 重庆出台优化工业园区规划建设
  • 云计算概念详解

    1 云计算的定义 1 云计算是一种能够通过网络以便利的按需的方式获取云计算资源 网络 服务器 存储 应用和服务 的模式 2 这些资源来自一个共享的 可配置的资源池 并能够快速获取和释放 提供资源的网络称为云 3 云模式能够提高可用性 4 云
  • IDEA下载与安装,保姆级教程

    这里写自定义目录标题 1 搜索idea 2 选择官方网站 3 官网进入下载页面 4 版本选择问题 5 Ultimate和Community对比 6 下载 7 安装 1 搜索idea 2 选择官方网站 以前idea的官网后面有官网俩字 现在没
  • Open NMT-py 玩具模型使用说明

    前排提示 本文仅适合纯萌新玩家 算是官方指南的补档 大佬请直接关闭网页 避免浪费时间 截至到2023 3 15 最新的OpenNMT py环境要求 Python gt 3 7 PyTorch gt 1 9 0 如果是老版本的OpenNMT
  • https网络编程——使用openssl库自建根证书

    参考 如何自建根证书 使用openssl库自建根证书带图详解 地址 https qingmu blog csdn net article details 108217572 spm 1001 2014 3001 5502 目录 根证书的普通
  • spring boot最新教程(三):Spring Boot整合JdbcTemplate以及事务管理

    一 JdbcTemplate的使用 Spring对数据库的操作在jdbc上面做了深层次的封装 使用spring的注入功能 可以把DataSource注册到JdbcTemplate之中 JdbcTemplate 是在JDBC API基础上提供
  • python:日期时间处理

    目录 一 time模块 二 秒转换为时分秒 三 计算前后几天的日期 一 time模块 1 time strftime format t 格式 说明 a 本地 locale 简化星期名称 A 本地完整星期名称 b 本地简化月份名称 B 本地完
  • 【STM32Cube】学习笔记(六):DHT11温湿度传感器

    文章目录 摘要 一 简介 1 DHT11数字温湿度传感器 2 DHT11性能参数 2 DHT11数据结构 2 DHT11传输时序 二 硬件电路设计 1 模块内部电路 2 与单片机相连接电路 三 软件设计 1 CubeMX配置 2 CubeI
  • Spark Streaming(组件、updateStateByKey、Windows)总结

    Spark Streaming 1 SparkStreaming 是什么 2 实时计算框架对比 3 Spark Streaming组件 4 Spark Streaming 编码实战 无状态 4 1 Spark Streaming编码步骤 4
  • MiniMeters for Mac - 独立音频计量软件,创意音乐的最佳伙伴

    MiniMeters for Mac是一款专为Mac用户设计的音频计量软件 它提供了一套功能强大 直观易用的工具 帮助你更好地理解和处理音频 这款软件不仅具备高度的专业性 同时也极具创新性 它的出现将彻底改变你对音频处理的认知 安装 Min
  • 神经网络的几点思考

    2022 04 09 1 小卷积核和大卷积核有没有可能组合使用效果更好 比如在目标检测网络 人脸识别网络 2 人脸识别中共享卷积有效吗 共享卷积和局部卷积有没有可能组合使用效果会更好 人脸识别 人脸属性 人脸关键点 活体检测应该都可以用局部
  • PGCM-PostgreSQL备份工具 pgBackRest使用

    更多精彩内容 请登录 ke sandata com cn 前言 PGCM pgBackRest是一款开源的备份还原工具 目标旨在为备份和还原提供可靠易用的备份 特性 并行备份和还原 备份操作期间压缩通常是其瓶颈所在 pgBackRest通过
  • Zotero如何在word中引用跳转到参考文献/建立超链接

    省流目录 文章目录 问题 如标题 解决方案 1 打开word gt 视图 gt 宏 gt 点击 选查看宏 2 创建宏 3 将代码全部替换为下面这个 4 Ctrl s保存 左下角重命名为ZoteroLinkCitation 关闭页面 5 查看
  • clickhouse-server.service: main process exited, code=exited, status=232/ADDRESS_FA

    使用 systemctl start clickhouse server 启动失败 报错信息如下 root hantest mysql systemctl status clickhouse server clickhouse server
  • 密码学-传统加密技术

    传统加密技术 对称密码模型 明文 plaintext 加密算法 encryption 密钥 key 密文 cipher 解密算法 decryption 传统密码的要求 加密算法足够强 密钥安全 采用对称密码 首要的安全问题是密钥的保密性 密
  • web前端 --- 常见页面标签和语义化标签

    1 HTML5 1 含义 HTML Hypertext Markup Language 超文本标记语言 是一种用于创建网页的标准标记语言 您可以使用 HTML 来建立自己的 WEB 站点 HTML 运行在浏览器上 由浏览器来解析 声明为 H
  • Modbus 与 RS485 的区别与联系

    目前道长入坑了一家智能家居公司 以后会分享记录一些智能家居相关的知识 如果有问题 希望小伙伴交流指正 一 RS 485 1 1 RS 485 来源 RS485是美国电子工业协会 EIA 在1983年批准了一个新的平衡传输标准 balance