计算机的数据传输包括并行传输和串行传输两种, 数据的传送和转化是串行数据通讯的两个主要技术问题。现阶段, 很多的计算机监A控系统中都广发采用串行通讯的方式, 而串行通讯中数据的可靠性对策是计算机控制任务中的核心内容。但是在实际的应用中, 存在很多的干扰源, 容易造成数据的丢失, 或者数据不能及时接收造成很多潜在的问题, 因此, 提高串行通讯的可靠性变得至关重要。
1 常用串行通讯设计及存在的问题
串行通讯设计的方法多种多样, 灵活性比较强, 而且能适应于不同的应用环境中。多线程通讯技术的采用, 可以实现多任务的性能, 能够分别执行被分解的用户, 互不影响。在初始化时对主线程的各个串口进行相关的设置, 并根据相关要求, 建立相应的监控和读写子线程。多个串口工作时可以有效的实现数据的预处理, 将串口事件传递给父窗口, 并进行数据的进一步处理。多线程设计的实现能够有效的解决很多串口通讯问题, 但是也存在一些问题, 数据的接收存在不稳定的设计缺陷。只有不断进行优化改进, 才能适应通讯技术的不断发展。
2 新的串行通讯数据包的可靠性策略分析
2.1 串行通讯数据包格式的设计
随着通讯对象的不断增多, 为了提高数据传输的可靠性和真实性, 通常以数据包的形式进行传送。在常规的串行通讯中通过数据包的形式传送使程序代码的编写更标准, 也更容易进行维护。数据包越合理, 不仅能更有效的验证数据传输的准确性, 而且能够使数据接收方直接从缓冲区中有效的提取数据包。
在设计数据包格式时, 应遵循数据包头标志与数据包尾标志的原则, 选择不可能出现在真实数据中的字节, 以防丢包的现象发生。校验码算法的设计主要是验证接收到的数据与发送的数据是否相同。校验码的算法应在本着简单的前提下达到最优的效果, 进而保证指令执行的有效性。
数据包大小并不是固定的, 而是灵活多变的。数据包的长度域, 主要表示数据的真是字节数, 数据包较短时应采用固定的长度数据包, 此时, 可以省略长度域, 进而提高串行通讯的可靠性。
2.2 数据包的判别
第一, 假设数据包的标尾由四个连续的字节构成, 那么每一次串行接收一个字节后, 就将前三个字节作为数据包尾标志进行判别。
第二, 符合格式要求的数据包尾标志依照数据包的长度域进而决定数据包头的位置, 也可以反过来进行判别。
第三, 对于符合格式要求的数据包头标志, 可以对真实数据区的数据进行求和运算, 累加后所的和的最后两个字节应与校验码域的内容进行比较。
第四, 经过比较以后, 如果结果符合要求, 就表示已经接收到1个既完整又准确的数据包。此时, 接收方应发送已收到数据包的信息, 发送方收到信息后, 应停止对于数据包的发送。
第五, 无论是哪一步与格式的要求不符, 都要返回第一步重新进行。
3 PC与PLC串行通讯经Visual C++实现的可靠性策略
3.1 上位机串行通讯设计
MScomm控件初始化设置完成后, 进行PC与PLC间的串行通讯。RS232C协议是常用的计算机串行口协议, 主要与硬件打交道, 但是而Vc++与其相比拥有明显的优势。它是单线程实现自定义的串行传讯, 增加了设备的灵活性, 查询更加便捷;可以在多线程下实现串行通讯, 对实时性的要求更高, 能实现分时多任务;采用API方式也可以实现串行通讯, 继承性较差, 维护也较困难;使用VC++提供的MSComm串行通讯, 方式简便、快捷, 编程的工作量小, 一般的小型控制系统都能够达到要求。
3.2 下位机串行通讯设计
在程序发送时, SMB30自由口控制字节的送数为9被设为第一个扫描周期, 选择自由口模式, 波特率为9600B/s, 此时可以选择无校验方式, 每个字符为8个字节。当其控制定时被中断时, 设定为250ms, 定时时间到时, 发生中断事件, 然后再转入中断程序中。在进行程序接收时, SMB30自由口控制字节的送数为9也被设为第一个扫描周期, 选择自由口模式, 波特率为9600B/s, 此时可以选择无校验方式, 每个字符为8个字节, 并建立接收数据指针。
4 无人机串行通讯可靠性设计实现对策
4.1 无人机的串行通讯
无人机的飞行控制器主要依靠串行通讯口实现与外界信息的交换, 此串行通讯不仅应用于遥控遥测, 而且还用于对飞机的状态检测以及控制器参数的调整中。串行通讯口作为飞机控制器中的一个多功能口, 当飞机在飞行时, 控制器通过某一串行接口与机载的通讯设备相连接, 接受遥控的指令和GPS信息, 回收遥测信息;当飞机处于检修状态时, 控制器与机载的通讯设备断开, 与维护计算机相连, 此时, 接收测试与调参信息, 发送测试和调参回报信息。
4.2 提高无人机串行通讯的设计策略
第一, 帧识别技术的实施。串行数据的接收、帧识别以及校验、信息的提取已成为串行接收程序的主要任务。缓冲区的设置是比较常规的设计方法。这种方法在中断程序较短的时候比较实用, 但是从一帧的数据完毕到较长的解码时间内实时性却较差。现行的无人机串行通讯的设计省掉缓冲区的存在, 主要依靠中断服务程序完成对数据的接收以及帧的识别, 校验和信息的提取则通过专门的校验解码子程序来完成, 进而完成对于数据的接收和解码工作。中断服务程序就地帧识别的应用, 不仅节省了大量的时间, 而且使程序的接收得到进一步的提高;既将缓冲区的管理工作省掉, 减少了存取的次数, 又直接丢弃了错帧和断帧;精简了主循环中对于串行数据的子程序处理。
第二, 有限状态技术的帧识别、缓存共用技术以及代码优化的可靠性设计实施。在帧识别程序中, 还采用了有限状态机技术的帧识别。进一步提高了程序的可靠性和实时性。缓存共用技术的运用, 有效的简化了数据存储的判断工作, 减少了一次整帧数据的搬移操作, 将串行数据的处理时间缩短了。还采用逻辑较简单、变量最少且最易处理数据类型的CPU, 运行最快的语句设计相关程序等代码的优化。
摘要:随着计算机技术的广泛应用, 串行通讯也逐渐应用与计算机监控系统之中。提高串行通讯的可靠性和真实性变得至关重要。本文主要针对如何提高串行通讯的可靠性策略这一方面展开论述。
关键词:串行通讯,数据包,可靠性设计
参考文献
[1] 高潮, 罗强, 郭永彩, 等.用Visual C++实现PC与PLC之间的串行通讯[J].重庆大学学报 (自然科学版) , 2006 (6) .
[2] 卞鸿巍, 金志华, 田蔚风.基于Pcomm组合导航系统高效串行通讯技术实现[J].系统工程与电子技术, 2005 (1) .
[3] 杨利宣, 刘大全.用VB实现上位机与OMRON PLC串行通讯[J].中国集成电路, 2009 (1) .
[4] 刘斌, 蒋峥, 傅自茂, 等.一种新的串行通讯数据包格式设计及实现[J].电工技术, 2008 (7) .
[5] 刘歌群, 刘卫国, 卢京潮.无人机强实时性串行通讯程序设计[J].计算机应用, 2005 (1) .