基于多线程技术实现多串口的实时通信

基于多线程技术实现多串口的实时通信

ID:8324533

大小:183.50 KB

页数:6页

时间:2018-03-19

基于多线程技术实现多串口的实时通信_第1页
基于多线程技术实现多串口的实时通信_第2页
基于多线程技术实现多串口的实时通信_第3页
基于多线程技术实现多串口的实时通信_第4页
基于多线程技术实现多串口的实时通信_第5页
资源描述:

《基于多线程技术实现多串口的实时通信》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、基于多线程技术实现多串口的实时通信邓林涛(江西赣粤高速公路股份有限公司江西南昌330000)摘要:介绍了采用一种通过基于多线程的多串口实时通信方式实现在现代加工制造业中对多台数控设备进行集中控制的方法。具体介绍了VisualC+中基于多线程的多串口实时通信的实现技术,并给出了核心代码。基于该方法的解决方案实际应用效果良好。关键词:信息工程;多线程;多串口;实时通信;通信协议;数控设备0前言随着电子仪器、测绘技术、计算机技术的快速发展,计算机与电子、测绘仪器的通信问题是经常遇到的问题,在现代制造工业控制中,现有电子、测绘仪器大多都采用串行通信口与计算机进行通信,串口

2、通信是常用的计算机与外部串行设备之间的数据传输通道,串口通信以其灵活、实现方便易行、系统费用低、传输可靠、信号线数量少的优点已经在许多领域得到了广泛应用。而一台PC机本身自带的一两个串口根本无法满足现代工业控制的需要,因此多串口卡就应运而生,使一台PC机有甚至多达10多个串口与电子仪器进行通信控制,如何使这些各种仪器通过多串口跟PC机进行实时准确无误的通信,我们在此选择使用多线程技术,多线程技术可以使得各端口独立,准确地实现串行通信,使串行通信具有更广泛的灵活性与严格性,且充分利用CPU时间。在具体的实时监控系统中如何协调多个线程、线程之间以何种方式实现同步,这是

3、多线程串行通信程序实现的关键点。本文探讨的就是在Windows9X/NT下利用VC++的API函数采用多线程技术对RS-232串口编程实行精准实时控制。1VisualC++中基于多线程的多串口实时通信技术在现代的各种实时监控系统和通信系统中,在Windows9X/NT下利用VC++对RS-232串口编程是常用的手段。Windows9X/NT是抢先式的多任务操作系统,程序对CPU的占用时间由系统决定。多任务指的是系统可以同时运行多个进程,每个进程又可以同时执行多个线程。进程是应用程序的运行实例,拥有自己的地址空间。每个进程拥有一个主线程,同时还可以建立其他的线程。线

4、程是操作系统分配CPU时间的基本实体,每个线程占用的CPU时间由系统分配,系统不停的在线程之间切换。进程中的线程共享进程的虚拟地址空间,可以访问进程的资源,处于并行执行状态,这就是多线程的基本概念。使用MFC开发是较普遍的VC++编程方法。在VC++6.0下,MFC应用程序的线程由CWinThread对象表示。VC++把线程分为两种:用户界面线程(UserInterfaceThread)和工作者线程(WorkThread)。用户界面线程能够提供界面和用户交互,通常用于处理用户输入并相应各种事件和消息;而工作者线程主要用来处理程序的后台任务。本文监视串口事件的线程即

5、为工作线程。1.1多线程下的串行通信的操作方式(1)同步方式同步方式中,读串口的函数试图在串口的接收缓冲区中读取规定数目的数据,直到规定数目的数据全部被读出或设定的超时时间已到时才返回。使用同步通信要较好地防止线程阻塞(2)异步方式异步方式中,利用Windows的多线程结构,可以让串口的读写操作在后台进行,而应用程序的其他部分在前台执行。采用异步通信,可以提高系统的整体性能。多线程程序的编写在端口的配置,连接部分与单线程的相同,在端口配置完毕后,最重要的是根据实际情况,建立多线程之间的同步对象,如信号灯、临界区和事件等,防止多线程同时访问同一块内存数据。CSema

6、phore:信号灯对象,允许一定数目的线程访问某个共享资源,常用来控制访问共享资源的线程数量。 Cmutex:互斥量对象,一个时刻至多只允许一个线程访问某资源,未被占用时处于有信号状态,可以实现对共享资源的互斥访问。 CEvent:事件对象,用于使一个线程通知其他线程某一事件的发生,所以也可以用来封锁对某一资源的访问,直到线程释放资源使其成为有信号状态。适用于某一线程等待某事件发生才能执行的场合。 CCriticalSection:临界区对象,将一段代码置入临界区,只允许最多一个线程进入执行这段代码。一个临界区仅在创建它的进程中有效。1.2程序中所使用的主要WIN

7、32API函数BOOLSetCommState(HANDLEhFile,LPDCBlpDCB);//串口配置函数BOOLSetupComm(HANDLEhFile,DWORDdwInQueue,DWORDdwOutQueue);//设置缓冲区HANDLECreateFile(LPCTSTRlpFileName,DWORDdwDesiredAccess,DWORDdwShareMode,LPSECURITY_ATTRIBUTES,DWORDdwCreationDisposition,DWORDdwFlagsAndAttributes,HANDLEhTemplateF

8、ile);

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。