一个多串口多线程数据采集系统软件的设计与实现DesignandImplementationofaMultithreadingDataCollectionSoftwarebasedonMulti-serialport(襄樊学院电气信息工程系李勇Li,Yong摘要:本文着重探讨用多线程并行的方式通过多个串口进行并行通信。使用多线程进行串行通信的文献已有一些,但都没涉及到多个串口并行的情况。本文介绍的多串口多线程通信方法,使多个串口并行通信,从而实现大规模的数据采集与高速数据传输操作。关键词:多线程;串行通信;同步:TP311文献标识码:AAbstract:Themethodofmultiserialportparallelcommunicationusingmultithreadingisintroducedinthispaper.Someliteratureshaveshowsthemethodofserialcommunicationwithmulti-threadtechnology,butmultiserialportparallelcommunicationislittlereferredto.Withthemethodintroducedinthispaper,parallelcommunicationwithinmultiserialportcanbeimplemented.Keywords:Multithreading;SerialCommunication;Synchronization1引言在一些典型的实时系统和规模较大的数据采集系统中多任务的要求比较普遍。这时系统中需要有线程专门负责数据采集,以实现实时多任务并行的需要。线程是Windows9X/2000的基本执行单位,是Window为程序分配CPU时间的基本实体。每个进程由一个或多个线程组成,同一进程中的多个线程,可以共享地址空间和所有的处理器资源,避免了用多进程实现并行性的缺陷。在已有的文献中介绍多线程和串口操作的很多,但针对多串口操作的很少。本文针对一个采用多串口的大型自动抄表系统,讨论如何在VC++6.0开发环境下,用多个线程并行地通过多个串口进行高速数据抄录和测控的方法。2系统总体结构系统由上位机(即中心计算机和下位机构成,如图1所示。上位机为PC机,内部加一个MOXA的多串口卡,可扩展出32个串口。下位机为单片机构成的监测和数据采集系统。二者通过调制解调器和电话网进行通信连接。下位机的主要功能是定时采集传感器上的信息并临时保存,以及根据上位机发出的控制命令执行控制操作和上报数据。一个下位机可以对多个数据点进行监测和控制。上位机的主要功能包括(1利用多串口多线程的通信软件,收集各个下位机的数据。(2根据收集到的数据和工作人员的判断,通过通信软件向下位机发出各种控制命令。(3根据系统的不同要求,通过通信软件调整下位机的各种参数。上位机和下位机这样配合,一起构成一个能实现遥控、遥测、遥调功能的远程控制测量系统。该系统硬件连接简单,稳定可靠。通信软件采用VC++实现,将收集到的各种数据信息保存到数据库中,为后续的数据处理提供了极大的方便。数据库系统采用MSSQLServer,VC++通过ODBC接口对其进行访问。3通信程序设计WIN32应用程序中的线程有两种类型。一种是工作线程,它不处理窗口消息,常用于后台执行任务。另一种是用户接口线程,主要用来处理用户输入和响应由用户产生的消息与事件。本系统编写的工作线程用于后台的数据采集和通信。微软基本类库(MicrosoftFoundationClass-MFC为多线程提供了三个全局函数AfxBeginThread(,AfxEndThread(和AfxGetThread(对线程进行操作,分别用来创建工作线程,结束工作线程,获得当前线程的指针。3.1上位机通信软件的实现上位机的串口通信过程采用PJNaughter提供的串口通信类实现,并在其基础上针对modem通信扩展了拨号、挂断等功能。通信协议参照标准远动规约,报文内容以字节为单位,结构如图2所示。其中报文类型用来说明报文的类型和功能,数据长度用来说明数据区的字节数,8位校验码为累加和校验。图1系统总体结构图(1用户界面对话框与命令响应:进行通信和数据抄录的用户界面如图3所示。界面左边显示的是下位机的树状列表。右边的列表框显示的是所以可用的串口,在通信过程中,该列表框用来显“”示当前的通信状态。点击界面中的开始读取按钮后,首先处理界面上用户选择的需要通信和控制的下位机,并用如下指令启动通信主线程:AfxBeginThread(ThreadMainCommunication,GetSafeHwnd(;(2通信主线程(ThreadMainCommunication:通信主线程的主要功能是对各个通信子线程进行调度和管理。在通信主线程中首先根据可用的串口数定义一个信号量变量。如下所示,其中变...