一种RS-485总线自定义通信协议及其应用

2006-05-07 15:50:08来源: 互联网

485总线是集散控制系统常用的组网方法,但具体的通信协议并没有一个统一的标准。本文详细讨论一种基于RS-485总线通信协议的设计,具有可靠、编程实现简单、易扩展等特点,能够很容易地移植到其它系统中;结合一个电力参数实时监测系统实例,介绍本协议的具体应用。

1 概述

工业控制系统中,集散控制是目前最常用的测量控制方式。通常,一个集散控制系统由一个主控计算机(上位机)和一系列基于MCU的前端智能仪器(下位机)构成,它们之间再通过一定的物理媒介连接在一起,以完成必要的通信功能。对于一个特定的测控系统而言,所要测控的对象和所采取的测控算法是个有个性的东西;而上位机和下位机之间的通信可以看作是一系列命令流和数据流的流动,所采用的通信协议是用来保证传输过程的可靠和高效,是具有共性的,能够也应该有一个统一的设计标准。

在集散控制系统中,普遍采用RS-485总线作为底层通信接口。它具有稳定可靠、编程简单、组网快速、价格低廉的优点,但在协议设计实现方面并没有一个统一的规范,导致不同的控制系统常常采用不同的通信协议。因此,有必要结合我们的工作实践,设计一种有通用性的高效可靠的协议,从而简化基于RS-485的分布式测试系统通信部分的设计,既能够保证通信的稳定可靠,又能够把精力集中到测控系统算法的设计上。

    通信协议的设计通常采用分层的机构,如ISO的OSI参考模型。这里也采用分层的结构来描述我们自定义的基于RS-485总线的通信协议,如图1所示。

图1中,物理层是利用物理媒介实现物理连接的功能描述和执行连接的规程,提供用于建立、保持和断开物理连接的机械的、电气的、功能的和过程的条件;数据链路层用于建立、维持和拆除链路连接,实现无差错传输的功能;应用层针对不同的应用,利用链路层提供的服务,完成不同通信节点之间的通信。

下面结合每一层讨论这种自定义协议的具体设计,重点介绍如何实现可靠高效的通信,如何处理通信中错误,如何编程实现。

2 协议的设计

2.1 物理层协议设计

RS-485通信网络是一种总线式的结构,如图2所示。上位机(以PC为例)和下位机(以基于MCS-51的智能仪器为例)都挂在通信总线上,物理层的通信协议由RS-485标准和MCS-51的多机通信方式共同方式。

2.1.1 EIA RS-485标准

RS-485是工业界使用最为广泛的双向、平衡传输标准接口,支持多点连接,允许创建多达32个节点的网络;具有传输距离远(最大传输距离1200m),传输速率快(1200 m时为100kb/s),抗干扰能力强,布线简单等优点。

2.1.2 MCS-51串口的多机通信方式

MCS-51具有多机通信功能。当串口以方式2(或方式3)接收时,若SM2(多机控制位)为1,这时只接收第9位为1的串行数据(把第9位为1的串行字节称为地址,把第9位为9的串行字节称为数据);当SM2=0时,不论第9位为何值都接收。

这种功能使得基于MCS-51的智能仪器能够方便地通过RS-485接口芯片组成网络。

2.1.3 物理层的功能

物理层要完成发送及接收字节流的任务,但对传输过程的可靠性不做出保证,而由高层协议来保证。物理层为链路层提供接口(以子程序的形式来描述),包括Send子程序(功能为发送一个字节)及Receive子程序(功能为接收一个字节)。

发送程序比较简单,接收程序的流程如图3所示(以MCS-51为例)。采用循环查询RI标志位的方式,可以在规定的时间内(即在规定的循环次数内)实现一个字节的接收。规定时间的长短由循环次数决定。如果在规定的时间内未收到,则视为通信失败。

2.2 数据链路层协议设计

数据链路层的基本通信单位是帖,帧结构如图4所示。

    *帧长度域为每一帧的第一个字节,用来说明帧体的长度。

*冗余帧长度域是可选的,它是帧长度域的重复,可以用来检查在传输过程中帧长度域是否存在传输错误。

*帧体域用来封装来自上层(应用层)的数据报,长度是1~255B,链路层对这一部分不做处理,由应用层处理。

链路层可以采用如下方法进行差错处理。首先,帧长度域的引入可以方便程序的设计,同时也能够起到一定的检查错误的功能,可以发现传输过程中丢失字节的错误,并且丢弃缓冲区接收错误的字节。首次,可以采用冗余字节的方法,对关键字节(帧长度)发送两次,只有接收到的两个帧长度字节一致时才认为接收到的是正确的。此外,对发送的每个字节可以采用CRC校验等方法进行校验。

链路层向上层(应用层)提供的接口(以子程序的形式来描述)为SendFrame(功能是发送一帧)和ReceiveFrame(功能是接收一帧),程序流程如图5所示,其中利用了下层(物理层)提供的接口。

2.3 应用层协议设计

应用层是协议的最高层,它的设计对于不同的应用可以有所不同,但是也存在很多通用性的原则。应用层数据报的格式如图6所示。

*类型域用来指定数据报的类型,一共可以表示256种类型,其中,0用来表示数据;其它256种用来表示命令。

*冗余类型域是可选的,它的作用是检查类型域在传输过程中是否存在错误。

*数据域是通信中传输的采集数据、系统参数等。

数据报可以分成两类:命令型数据报(类型域不为0)和数据型数据报(类型域为0)。具体的命令可以根据具体的应用来设计,由具体程序负责解释。

应用层也个有一定的差错检查能力:首先,它引入了冗余类型字节;其次,数据域字节也可以采用CRC校验等方法进行校验。

3 协议的具体实现及应用

在设计基于RS-485的分布式测控系统时,在上位机呼叫下位机地址之后就可利用本协议的规范来设计具体的通信流程。

基于本协议的通信可以有两种机制。一种是面向握手的,即每发出一帧,总是要等待确认帧,否则将认为是通信出错。这是一种可靠的通信方式,适合传输系统命令和一些非常重要的系统参数。另一种是无握手的,即发送方假设接收方总是接收正确,从而无须等待确认帧就不停地发送,适合大量前端采集数据的发送。这种机制的优点是发送过程简单、快速,缺点是不能保证传输过程的可靠性。

另外,接收方倘若在规定的时间内不能接收到数据,则可以发送复位帧,同时接收方的程序回到通信程序的开始,并清空缓冲区的数据;而发送方的收到复位帧后也回到通信程序的开始,并清空缓冲区中的数据。然后,双方重新同步。

    本协议已经成功地运用到一个分布式电力参数监测系统中,不仅简化通信程序的设计,而且保证了通信的高效和可靠。该系统基于RS-485总线的网络拓扑结构与图2类似。下位机负责现场的电力量的采样和存储,上位机负责循环呼叫下位机,以了解现场情况是否正常,并且每帧一定时间收集下位机存储的数据,并对数据进行分析管理。上位机收集下位机数据的程序流程如图7所示。

因为传输数据数量比较大,所以通信过程采用了无握手方式,以简化程序设计,提高通信速度。通信双方在接收时使用了复位帧,以保证在失去同步后及时恢复。帧格式如图8所示(没使用冗余字节)。

实验证明,本协议具有编程简单、通信可靠、易于扩展的优点,能够有效地推广到基于RS-485的分布式测控系统中。

关键字:总线  自定义  通信  通信协议

编辑: 引用地址:http://www.eeworld.com.cn/wltx/qtjs/200605/2529.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
论坛活动 E手掌握
微信扫一扫加关注
论坛活动 E手掌握
芯片资讯 锐利解读
微信扫一扫加关注
芯片资讯 锐利解读
推荐阅读
全部
总线
自定义
通信
通信协议

小广播

独家专题更多

TTI携TE传感器样片与你相见,一起传感未来
TTI携TE传感器样片与你相见,一起传感未来
TTI携TE传感器样片与你相见,一起传感未来
富士通铁电随机存储器FRAM主题展馆
富士通铁电随机存储器FRAM主题展馆
馆内包含了 纵览FRAM、独立FRAM存储器专区、FRAM内置LSI专区三大部分内容。 
走,跟Molex一起去看《中国电子消费品趋势》!
走,跟Molex一起去看《中国电子消费品趋势》!
 
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2016 EEWORLD.com.cn, Inc. All rights reserved