|
摘 要: 在VC++6.0中利用MSComm控件实现串口通信时实时性较差,系统资源利用不足,无法满足高速串口数据采集软件的编程要求.针对高速串口数据采集软件的设计要求,提出了基于多线程技术和自定义消息机制的异步串口通信的设计思想.结合串口通信的机理和多线程同步方式,分析了Win32系统下多线程异步串口通信程序的开发方法.
1 引 言
串行通讯是计算机与其他设备进行数据交换时经常使用的方法之一,他具有实现简单,使用灵活方便,数据传输可靠等优点,因而在工业监控、数据采集和实时监控系统中得到广泛应用.
高速串口数据采集软件的设计不同于普通串口通信,其要求在接收数据采集设备发送大量数据的同时完成对已接受到数据的实时存储,如果处理不好二者之间的关系,会造成数据的缺失甚至程序的崩溃.这就要求应用程序能够同时处理两件以上不同的任务.Win32是基于线程的抢先式多任务操作系统,使得应用程序能够同时执行多个任务,即在一个进程中可以同时运行多个线程.一个线程是指程序的一条执行路径,系统不停的在多个线程之间切换.由于时间很短,看上去多个线程在同时运行.对于通讯这种需要花费大量时间来测试I/O操作,同时又要保持响应用户其它操作的应用程序来说,创建多线程是最佳选择.
2 系统结构
系统的组成结构如图1所示.中央控制PC机是系统的核心,要求数据采集软件具有良好的稳定性和兼容性.所以独立设计了一套基于Visual C++ 6.0的多线程通讯软件,它与前端的扫描仪串口通信是典型的主从式,在硬件上通过MOXA公司的串口卡实现500K波特的采集速率.
![]()
图2 数据采集程序框图
②后台辅助线程分析 后台辅助线程是数据采集软件的核心,包括串口监视线程,读线程。串口监视线程在后台对串口进行实时监视,当监视到预定义的事件时,立即调用相应的线程进行处理并向主线程发相应的消息,如接收到数据就调用读线程自动接收数据并进行处理,同时向主线程发送接收到数据的消息,串口监视线程发送完此消息后就执行后面的程序代码,继续对串口进行监视,做到了处理消息与监视串口两不误,即保证了数据采集的实时性,又避免了资源的浪费,其处理过程如图3所示。
![]()
图3 串口监视线程的实现
5 结束语
多线程技术能很好地解决各种逻辑并发和物理并发问题,使软件的各项性能指标均有所改善,如吞吐量、计算速度、响应时间等,提高了软件的执行效率和系统资源的利用率,同时也大大提高了程序的可读性和稳定性。
利用多线程技术,解决了高速串口数据采集软件编程中遇到的问题,运行结果良好,可供广大同行参考。
|
|