Modbus 与 RS485 的区别与联系

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

一、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协议栈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值