江西联创通信有限公司 贺晔晔
引 言
在现代通信中,通信的可靠性往往是一个非常重要的课题。因为在现实世界中各种干扰无所不在,单纯依靠硬件电路
及物理线路上采取的各种屏蔽措施往往还不能解决全部问题。这就需要在软件及通信协议上采取措施,并与硬件及各
种物理设备结合起来,共同解决通信的不稳定性问题,从而提高系统性能及可靠性。
笔者通过对各种通信协议的比较、分析,总结出它们各自的优缺点,并通过多次实践,提出了一种相对比较简单的点
对点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 结 论
各种实验证明,使用了该出错重发协议的系统比起那些没有采用任何纠错的系统,在性能上有了很大的改进,大大增
强了系统的抗干扰能力,提高了通信的可靠性,而且在实现上也比较容易,具有一定的应用推广价值。
因篇幅问题不能全部显示,请点此查看更多更全内容