基于CSerialPort类的多线程串口通信的实现

图1CSerialPort类多线程串口通信的模型框图李一雷,张赟(浙江交通职业技术学院,浙江杭州311112)摘要:比较了Windows下的三种串口通信编程方法,画出了CSerialPort类多线程串口通信的模型框图,给出了VC++下多线程串口通信的编程实现方法。关键词:多线程;串口通信;CSerialPort类中图分类号:TP391文献标识码:A文章编号:1009-3044(2007)20-40535-01TheImplementationofMultithreadingonSerialCommunicationBasedonClassCSerialPortLIYi-lei,ZHANGYun(ZhejiangInstituteofCommunications,Hangzhou311112,China)Abstract:Threemethodsofserialcommunicationinwindowsarecompared.AmodelmapofmultithreadingonserialcommunicationbasedonclassCSerialPortisillustratored.TheprogramsformultithreadingonserialcommunicationwithVC++aregiven.1引言串行通信是计算机与数字化设备之间的一种重要通信手段。在利用计算机进行工业监控时,常常需要在线监测电、水、气等多种数据,因而要使用多个串口实时采集数据[1]。这就需要使用多线程串口通信编程技术实现。本文将比较Windows环境下的三种常用串口通信编程方式,重点论述利用CSerialPort类进行多线程串口通信的方案,给出在VC++6.0的环境下,基于SDI的实现方法和步骤。2常用串口通信目前,在Windows下,编程时,常用的串口通信主要有三种方法:一是用WindowsAPI进行编程[2],二是用MSComm通信控件[3],三是用第三方提供的一些串口通讯类进行编写。2.1WindowsAPI利用WindowsAPI编写串口程序,特别是复杂的多线程串口程序时,对于程序员的能力要求较高。除了需要程序员熟练掌握和使用众多的API函数,能编写很多底层代码之外,还必须熟悉线程的编程方法,因此,不建议普通程序员使用这种方式。2.2MSComm控件在只需对单个串口操作的情况下,利用MSComm控件会使编程快捷简单。然而,由于做了大量的封装,降低了编程的可控性和灵活性,因此在多线程多串口编程时,需要做许多复杂处理的情况下,最好不使用MSComm控件[4]。2.3CSerialPort类利用第三方的串口通信类进行串口编程时,既可以使编程效率高,程序可控性强,扩展性好,又比WindowAPI编程简单。其中的CSerialPort是基于多线程的,容易实现多线程的串口通信。比较三种串口通信方式,可以发现使用第三方的CSerial-Port类,是实现Windows下的多线程串口编程的较好的选择。3CSerialPort多线程串口通信编程3.1模型框图通常,对于单个串口的操作主要包括:打开串口、设置串口参数、使用串口(串口写、串口读)、关闭串口等[3],不再赘述。当使用CSerialPort类,启动多线程,多串口操作时,模型框图如图1所示:3.2编程实例3.2.2添加类文件和类对象将SerialPort.hSerialPort.cpp两个类文件复制到工程文件夹中,用Project-AddtoProject-Files命令将上述两个文件加入工程。并在MySerialPortView.h中加入头文件说明:#include"Serial-Port.h"。并在MySerialPortView.h中添加5个CSerialPort类对象classCMySerialPortView:publicCView{public:CSerailPortm_MyPort[5];//定义5个CSerialPort类对象CStringm_strRevData[5];//接收串口数据}3.2.3初始化串口及启动监听线程voidMySerialPortView::OnInitialUpdate(){CView::OnInitialUpdate();for(inti=0;i<5;i++){if(m_MyPort[i].InitPort(this,i+1,9600,'N',8,1,EV_RXFLAGEV_RXCHAR,512)){//串口初始化:配置串口号,波特率9600bps,检验方式,数据位8,停止位1,设置串口事件,发送缓冲大小512字节m_SerialPort[i].StartMonitoring();//启动串口监听线程}else//如果初始化不成功,则显示提示信息{CStringstrError;strError.Format("串口%d未发现,或被占用",i+1);AfxMessageBox(strError);}}}注意,其中的串口初始化函数InitPort需要修改。下面所示的建立一个基于单文档的MFC应用程序MySerialPort,骤保持缺省状态。所有步收稿日期:2007-09-03作者简介:李一雷(1976-),男,浙江杭州人,讲师,硕士,研究方向为多媒体通信、工业监控;张赟(1979-),女,浙江慈溪人,讲师,硕士。535图5相电流波形图6相电压波形图4换相逻辑模块仿真多媒体技术及其应用本栏目责任编辑:李桂瑾压、相电流、反电动势波形比较规则,减小了对系统的冲击,...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供参考,付费前请自行鉴别。
3、如文档内容存在侵犯商业秘密、侵犯著作权等,请点击“举报”。

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

客服邮箱:

biganzikefu@outlook.com

所有的文档都被视为“模板”,用于写作参考,下载前须认真查看,确认无误后再购买;

文档大部份都是可以预览的,笔杆子文库无法对文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;

文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为依据;

如果您还有什么不清楚的或需要我们协助,可以联系客服邮箱:

biganzikefu@outlook.com

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

笔杆子文秘
机构认证
内容提供者

为您提供优质文档,供您参考!

确认删除?