浅谈RS-485通讯协议

通信网络

624人已加入

描述

浅谈RS-485通讯协议

RS-485标准只对接口的电气特性做出规定,而不涉及接插件、电缆或协议;因此,用户需要在RS-485应用网络的基础上建立自己的应用层通信协议。

由于RS-485 标准是基于PC 的UART 芯片上的处理方式,因此,其通讯协议也规定了串行数据单元的格式(8-N-1 格式):1 位逻辑0 的起始位,6/7/8 位数据位,1 位可选择的奇(ODD)/偶(EVEN)校验位,1/2 位逻辑1 的停止位。

目前,RS-485在国内有着非常广泛的应用,许多领域,比如工业控制、电力通讯、智能楼宇等都经常可以见到具有RS-485 接口电路的设备。但是,这些设备采用的用户层协议(术语参考自OSI 的7 层结构)都不相同;这些设备之间并不可以直接连接通讯。比如,很多具有RS-485 接口电路的用户设备采用自己制定的简单通讯协议,或是直接取自ModBus 协议(AscII/RTU 模式)中的一部分功能;在电力通讯领域,当前国家现在执行的行业标准中,颁布有按设备分类的各种通讯规约,如CDT、SC-1801、u4F、DNP3.0 规约和1995 年的IEC60870-5-101 传输规约、1997 年的国际101 规约的国内版本DL/T634-1997规约;在电表应用中,国内大多数地区的厂商采用多功能电能表通讯规约(DL/T645-1997)。

下面将分别对ModBus 协议(RTU 模式)、多功能电能表通讯规约(DL/T645-1997)进行简单介绍,便于大家对应用层通信协议有一个基本的概念与理解。

一、ModBus 协议(RTU 模式)

以下介绍了Modbus RTU 协议的基本构成、主要特点、参数规定;便于我们理解一个通讯协议的基本模式与要求。关于详细的ModBus 协议,用户可以从ModBus-IDA 协会 (www.modbus.org) 网站下载具体的内容。

1.查询—响应周期

ModBus 协议遵循“查询—响应”模式,如图 1-23 所示。

(1)查询:

查询消息中的功能代码告之被选中的从设备要执行何种功能。数据段包含了从设备要执行功能的任何附加信息。例如功能代码03 是要求从设备读保持寄存器并返回它们的内容。数据段必须包含要告之从设备的信息:从何寄存器开始读及要读的寄存器数量。错误检测域为从设备提供了一种验证消息内容是否正确的方法。

(2)响应

如果从设备产生一正常的响应,在响应消息中的功能代码是在查询消息中的功能代码的响应。数据段包括了从设备收集的资料:象寄存器值或状态。如果有错误发生,功能代码将被修改以用于指出响应消息是错误的,同时数据段包含了描述此错误信息的代码。错误检测域允许主设备确认消息内容是否可用。

uart

图1:ModBus 协议的“查询—响应”模式

2.RTU 模式

RTU模式的格式:

地址 功能代码 数据数量 数据1 ... 数据n CRC高字节 CRC低字节

当控制器设为在Modbus网络上以RTU(远程终端单元)模式通信,在消息中的每个8Bit字节包含两个4Bit的十六进制字符。这种方式的主要优点是:在同样的波特率下,可比ASCII 方式传送更多的数据。

代码系统:

(1)8 位二进制,十六进制数0...9,A...F

(2)消息中的每个8 位域都是一个两个十六进制字符组成每个字节的位:

a. 1 个起始位;

b. 8 个数据位,最小的有效位先发送;

c. 1 个奇偶校验位,无校验则无;

d. 1 个停止位(有校验时),2 个Bit(无校验时);

(3)错误检测域:CRC(循环冗长检测)。

3. RTU 帧

使用RTU 模式,消息发送至少要以3.5 个字符时间的停顿间隔开始。在网络波特率下多样的字符时间,这是最容易实现的(如图 1-24 的T1-T2-T3-T4 所示)。传输的第一个域是设备地址。可以使用的传输字符是十六进制的0...9,A...F。网络设备不断侦测网络总线,包括停顿间隔时间。当第一个域(地址域)接收到,每个设备都进行译码以判断是否发往自己的。

在最后一个传输字符之后,一个至少3.5 个字符时间的停顿标定了消息的结束。一个新的消息可在此停顿后开始。

整个消息帧必须作为一连续的流转输。如果在帧完成之前有超过1.5 个字符时间的停顿,接收设备将刷新不完整的消息并假定下一字节是一个新消息的地址域。同样地,如果一个新消息在小于3.5 个字符时间内开始,接收的设备将认为它是前一消息的延续。这将导致一个错误,因为在最后的CRC 域的值不可能是正确的。一典型的RTU消息帧如下所示:

起始位 设备地址 功能代码 数据 CRC校验 结束符
T1-T2-T3-T4 8Bit 8Bit n个8Bit 16Bit T1-T2-T3-T4

4. 地址

地址0是用作广播地址,以使所有的从设备都能认识。当Modbus协议用于更高水平的网络,广播可能不允许或以其它方式代替。

5. 响应

当从设备响应时,它使用功能代码域来指示是正常响应(无误)还是有某种错误发生(称作异议响应)。对正常响应,从设备仅响应相应的功能代码。对异议响应,从设备返回一等同于正常代码的代码,但最重要的位置为逻辑1。例如:从一个主设备发往从设备的消息要求读一组保持寄存器,将产生如下功能代码:

0 0 0 0 0 0 1 1 (十六进制03H)

对正常响应,从设备仅响应同样的功能代码。对异议响应,它返回:

1 0 0 0 0 0 1 1 (十六进制83H)

除功能代码因异议错误作了修改外,从设备将一独特的代码放到响应消息的数据域中,这能告诉主设备发生了什么错误。

主设备应用程序得到异议响应后,典型的处理过程是重发消息,或者诊断发自从设备的消息并报告给操作员。

从主设备发给从设备消息的数据域包含附加的信息:从设备必须用于进行执行由功能代码所定义的行为。这包括了象不连续的寄存器地址,要处理项的数目,域中实际数据字节数。例如,如果主设备需要从设备读取一组保持寄存器(功能代码03),数据域指定了起始寄存器以及要读的寄存器数量。如果主设备写一组从设备的寄存器(功能代码10十六进制),数据域则指明了要写的起始寄存器以及要写的寄存器数量,数据域的数据字节数,要写入寄存器的数据。

关于详细的ModBus 协议,用户可以从ModBus-IDA 协会网站下载具体的协议内容。

二、多功能电能表通讯规约(DL/T645-1997)

国内江苏、浙江、上海地区的电表厂商采用多功能电能表通讯规约(DL/T645-1997)作为电表的远程控制通讯协议;这是一个在RS-485 网络中实现应用的行业标准。

1.通讯字节格式

0 D0 D1 D2 D3 D4 D5 D6 D7 P‍ 1‍
起始位
0
8位数据D0~D7 偶校验位 停止位1

传送方向从低到高位,一个起始位、一个停止位、一个偶校验位、8 位数据位,总共11位。
2.通讯帧格式

帧起
始符
地址域 帧起
始符
命令码 数据
长度
数据域 校验码 结束符
68H A0~A5 68H C L DATA CS 16H

地址域A0~A5:当地址位999999999999H 时,为广播地址,同时当从控制器接收到一帧数据时,地址域相同时应响应命令,取得总线控制权,当响应命令之后,应把总线控制权归还给主控器。

命令码:执行操作的依据。

校验码:帧开始各个字节二进制算术和,不计溢出值。

前导字节:在发送信息之前,发送1 个或多个字节FEH,以唤醒接收方。

数据域:发送时数据加33H,接收时数据减33H。

用户可以在国家标准计量局,或技术监督部门查询关于多功能电能表通讯规约(DL/T645-1997)获取更多在RS-485 网络中实现的通讯规约的具体内容。

来源:雨飞工作室

审核编辑:汤梓红

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分