您好,欢迎来到爱站旅游。
搜索
您的当前位置:首页一个简单实用的HDLC出错重发协议

一个简单实用的HDLC出错重发协议

来源:爱站旅游
一个简单实用的HDLC出错重发协议

江西联创通信有限公司 贺晔晔

引 言

在现代通信中,通信的可靠性往往是一个非常重要的课题。因为在现实世界中各种干扰无所不在,单纯依靠硬件电路

及物理线路上采取的各种屏蔽措施往往还不能解决全部问题。这就需要在软件及通信协议上采取措施,并与硬件及各

种物理设备结合起来,共同解决通信的不稳定性问题,从而提高系统性能及可靠性。

笔者通过对各种通信协议的比较、分析,总结出它们各自的优缺点,并通过多次实践,提出了一种相对比较简单的点

对点HDLC协议。

1 协议内容

发送方与接收方事先约定好数据通信格式、数据发送速率,并为每个要发送的数据包添加一个包序号字节(放在每个

数据包的最后字节)。具体内容如下:

①发送方每隔50 ms(该时间可根据具体情况进行调整)检查自己的发送缓冲区,看是否有数据需要发送。若无数据发

送,则返回;若有数据要发送,则连续发送10个数据包。其中,每个数据包之间的时间间隔为50 ms,若要发送的

数据包不够10个,则不够的数据包用空闲包代替。每个数据包与空闲包的最后一个字节用作数据包包序号,分别标

记为0~9。

②接收方设有一个接收包序号字节变量(初始值为0),用于表示下一个要接收到的包的包序号。接收方每收到一个数

据包,就将该接收包序号字节变量的值与接收到的数据包的序号值相比较。若相等,则表示数据包接收正确,并将接

收包序号字节变量加1,准备接收下一个数据包。若不相等,则表示出现了漏数据包现象,接收方往发送方回送一个

NAK包,告诉对方出现了漏数据包现象;当发送方收到了该NAK包时,重发上次所发的10个数据包,接收方继续

重复上述接收过程。但每次发送最多只重发3次,若已重发3次,接收方还未正确接收,则发送方和接收方都跳过当

前数据包的发送,准备下一次数据包的发送。若已成功地接收到发送方所发的10个数据包,则接收方向发送方回送

一个ACK包,告诉发送方已成功接收到发送方所发的10个数据包。

③若发送方连续发送10个数据包,接收方在规定的时间内没有回送消息,则发送方重发这10个数据包。若重发3

次,接收方仍未回送消息,则退出当前数据包的发送,准备下一次数据包的发送。

2 收发流程

发送方发送流程如图1所示。发送方发送过程可在定时器或主程序中被定时调用。

接收方接收流程如图2所示。

3 应用实例

在一台工业控制计算机上的一个ISA插槽内插入一个通信卡(ISA接口卡),通过双绞线与另一个系统(由8051CPU和

一块通信卡组成)相连。其中,通信卡主要由Mitel公司的MT8952及MT8980组成。MT8952为一通信控制芯片,

支持HDLC协议;MT8980为一2B+D芯片,支持281Q码。由MT8952完成对MT8980的操作与控制。

MT8952受工业控制计算机(或8051)的操作与控制。通信双方通过中断方式完成对数据的接收,通过定时方式完成对

数据的发送。系统组成关系如图3所示。

这里以工业控制计算机方的协议实现为例,采用C语言编写该协议的实现例程,供大家参考(阅读该程序代码时,须

将发送程序代码与接收程序代码相结合,来了解其具体实现过程)。

编者注:发送和接收程序代码略。

发送方与接收方都采用如下的数据包格式:

其中,地址字节用于MT8952通信芯片内部自己的校验,高层应用程序不涉及该字节;校验字节等于0,表示为自己

所要的数据。

4 结 论

各种实验证明,使用了该出错重发协议的系统比起那些没有采用任何纠错的系统,在性能上有了很大的改进,大大增

强了系统的抗干扰能力,提高了通信的可靠性,而且在实现上也比较容易,具有一定的应用推广价值。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- azee.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务