- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于多线程技术实现多串口的实时通信
基于多线程技术实现多串口的实时通信
邓林涛
(江西赣粤高速公路股份有限公司 江西 南昌 330000)
摘 要: 介绍了采用一种通过基于多线程的多串口实时通信方式实现在现代加工制造业中对多
台数控设备进行集中控制的方法。具体介绍了Visual C+中基于多线程的多串口实时通信的实
现技术,并给出了核心代码。基于该方法的解决方案实际应用效果良好。
关键词:信息工程;多线程;多串口;实时通信;通信协议;数控设备
0 前 言
随着电子仪器、测绘技术、计算机技术的快速发展, 计算机与电子、测绘仪器的通信问题是经常遇到的问题, 在现代制造工业控制中,现有电子、测绘仪器大多都采用串行通信口与计算机进行通信,串口通信是常用的计算机与外部串行设备之间的数据传输通道,串口通信以其灵活、实现方便易行、系统费用低、传输可靠、信号线数量少的优点已经在许多领域得到了广泛应用。而一台PC机本身自带的一两个串口根本无法满足现代工业控制的需要,因此多串口卡就应运而生,使一台PC机有甚至多达10多个串口与电子仪器进行通信控制,如何使这些各种仪器通过多串口跟PC机进行实时准确无误的通信,我们在此选择使用多线程技术,多线程技术可以使得各端口独立,准确地实现串行通信,使串行通信具有更广泛的灵活性与严格性,且充分利用CPU时间。在具体的实时监控系统中如何协调多个线程、线程之间以何种方式实现同步,这是多线程串行通信程序实现的关键点。本文探讨的就是在Windows 9X/NT下利用VC++的API函数采用多线程技术对RS-232串口编程实行精准实时控制。
1 Visual C++中基于多线程的多串口实时通信技术
在现代的各种实时监控系统和通信系统中,在Windows 9X/NT下利用VC++对RS-232串口编程是常用的手段。Windows 9X/NT是抢先式的多任务操作系统,程序对CPU的占用时间由系统决定。多任务指的是系统可以同时运行多个进程,每个进程又可以同时执行多个线程。进程是应用程序的运行实例,拥有自己的地址空间。每个进程拥有一个主线程,同时还可以建立其他的线程。线程是操作系统分配CPU时间的基本实体,每个线程占用的CPU时间由系统分配,系统不停的在线程之间切换。进程中的线程共享进程的虚拟地址空间,可以访问进程的资源,处于并行执行状态,这就是多线程的基本概念。
使用MFC开发是较普遍的VC++编程方法。在VC++6.0下,MFC应用程序的线程由CWinThread对象表示。VC++把线程分为两种:用户界面线程(User Interface Thread)和工作者线程(Work Thread)。用户界面线程能够提供界面和用户交互,通常用于处理用户输入并相应各种事件和消息;而工作者线程主要用来处理程序的后台任务。本文监视串口事件的线程即为工作线程。
1.1 多线程下的串行通信的操作方式
(1)同步方式
同步方式中,读串口的函数试图在串口的接收缓冲区中读取规定数目的数据,直到规定数目的数据全部被读出或设定的超时时间已到时才返回。使用同步通信要较好地防止线程阻塞
(2)异步方式
异步方式中,利用Windows的多线程结构,可以让串口的读写操作在后台进行,而应用程序的其他部分在前台执行。采用异步通信,可以提高系统的整体性能。
多线程程序的编写在端口的配置,连接部分与单线程的相同,在端口配置完毕后,最重要的是根据实际情况,建立多线程之间的同步对象,如信号灯、临界区和事件等,防止多线程同时访问同一块内存数据。
CSemaphore:信号灯对象,允许一定数目的线程访问某个共享资源,常用来控制访问共享资源的线程数量。 Cmutex:互斥量对象,一个时刻至多只允许一个线程访问某资源,未被占用时处于有信号状态,可以实现对共享资源的互斥访问。 CEvent:事件对象,用于使一个线程通知其他线程某一事件的发生,所以也可以用来封锁对某一资源的访问,直到线程释放资源使其成为有信号状态。适用于某一线程等待某事件发生才能执行的场合。 CCriticalSection:临界区对象,将一段代码置入临界区,只允许最多一个线程进入执行这段代码。一个临界区仅在创建它的进程中有效。
1.2 程序中所使用的主要WIN32 API函数
BOOL SetCommState(HANDLE hFile,LPDCB lpDCB); //串口配置函数
BOOL SetupComm(HANDLE hFile,DWORD dwInQueue,DWORD dwOutQueue); //设置缓冲区
HANDLE CreateFile(LPCTSTR lpFileName,DWORD dwDesiredAccess,DWORD dwShareMode,LPSECURITY_AT
您可能关注的文档
最近下载
- 做香囊(课件)-三年级上册劳动.pptx VIP
- 新思路大学英语基础教程第一册.docx VIP
- 2025年新疆阿勒泰地区布尔津县高校毕业生“三支一扶”计划招募11人笔试模拟试题及答案解析.docx VIP
- 2025年【合成氨工艺】考题(含答案) .docx VIP
- 重庆市人民小学四年级数学竞赛试卷及答案_学科竞赛.pdf VIP
- PC(装配式)结构施工监理实施细则.doc VIP
- 民警心理健康辅导课件.pptx VIP
- 考古与文物 讲座7-2元、明、清时期的瓷器.ppt VIP
- 考古与文物 讲座6-3中国古代青铜器的作伪与辨伪.ppt VIP
- 期末综合题训练-统编版七年级下册历史(含答案).docx VIP
文档评论(0)