用VisualC编制串行通信程序

用VisualC编制串行通信程序

ID:41720360

大小:60.16 KB

页数:7页

时间:2019-08-30

用VisualC编制串行通信程序_第1页
用VisualC编制串行通信程序_第2页
用VisualC编制串行通信程序_第3页
用VisualC编制串行通信程序_第4页
用VisualC编制串行通信程序_第5页
资源描述:

《用VisualC编制串行通信程序》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、用VisualC++编制串行通信程序摘要:本文介绍了在Win32环境下用VisualC++的MFC实现串行通信方法,用类实现多线程编程,较好地将32位串口通信的APT函数封装在一个类中实现串行通信,并给出示例程序。关键词:串行通信多线程VisualC++MFC随着计算机应用深入,经常需要通过计算机RS-232串口与外部设备通信,采集如温度、压力、重量等模拟数据,或发出控制信息,用VisualC++编制串行通信程序可有三种方法:1、釆用MicrosoftWin32应用程序编程接口(API)所提供串行通信函数,用SDK思路编写。2、用

2、ActiveX通讯控件开发串行通信程序。3、用C++的MFC思路,将Win32串口通信的API函数封装在一个类屮实现串行通信。前两种方法己有不少刊物已作过介绍,方法各有利弊,而第三种方法较为繁琐,不仅要了解Win32位串行通信的API函数,还要掌握多线程编程,但控制灵活,既涉及到底层编程、纠错能力强,又有C++风格,为专业C++开发人员所采用。本文就在Win32环境下串行通信、多线程编程概念作简单叙述,并给出相应的示例程序,以供参考。一、串口通信1.串口通信步骤:一般编制串行通信程序分四个部分:A打开串行端口:打开通信资源,设置通

3、信参数、设置通信事件、创建读、写事件、进入等待串口消息循环。B读取串行端口信息,当串口发牛EV_RXCHAR(接收到字符并放入了输入缓冲区)消息后读取串口、数据传输错误处理、字符串处理如回车符、空格并相应转化成数据,如果模拟量还要进行数据检验等功能。C写串行端口信息:将要发送的信息写入串口,相应进行错误处理。D断开串行端口连接:关闭事件,清除通信事件,丢弃通信资源并关闭。2.串口通信函数在Win32环境下,由于Windows禁止应用程序直接和硬件打交道,所以程序员只能用Win32APT提供的串行通信函数与串行端口打交道,主要函数有

4、:打开、关闭通信资源CreateFileO;CloseHandle();设置通信资源SetCommState(()等待串口事件WaitCommEvent()创建、关闭事件对象CreateEvent();C1oseHandle()串口读写ReadFileO,WriteFileO以上函数具体如何使用见示例或联机帮助。在Windows3.1-16位通信函数有一个WM_COMMNOTTFY消息,每当发生一个串行端口事件,通信设备驱动器就发送此消息,以便程序读、写串信端口,在Win32中已被取消,而串行端口事件(特别接收串口数据)与外部设备

5、有关,计算机要保证及时接收数据又不使主程序暂停,就要引入多线程编程。3.多线程现实生活中,许多事情都时同吋进行的,在我们设计应用程序吋,也就常常需要采用并行编程机制一多线程,在本示例中,主线程负责创建子线程、向串口发送信息,子线程等待串口EV_RXCHAR(收到字符放入缓冲区)事件,读取缓冲区字符并显示。一般MFC将线程分两类:用户界面线程和工作者线程,工作者线程没有消息循环,只是一般函数,本示例中采用是用户界面线程,其实现方法为:1.从CWinThread派生新的子类。必须用宏DECLARE^DYNCREATE()和1MPLEM

6、ENT_DYNCREATE声明和实现CwinThread2.在CwinThread派生类覆盖以下函数。・Initlnstance:执行线程实例的初始化。・Exitinstance:在线程终止时执行清理工作。・Run:控制线程的函数,包含消息循环。.Onldle:执行线程的空闭处理。a)调用全局函数AfxBeginThread启动用户界面线程。此时,采用以下原型:CWinThread*AfxBeginThread(CRuntimeClass*pThreadClass,intnPriority=THREAD_PRIORITY_NORM

7、AL,UINTnStackSize二0,DWORDdwCreateFlags=0,LPSECURITY_ATTRIBUTESIpSecurityAttrs二NULL);其中,参数pThreadClass为从CWinThread派生类对象的RUNTIME_CLASS宏调用;nPriority用于指定线程优先级(可选)可以调用API函数SetThreadPriority设置优先级;nStackSize用于指定线程的堆栈大小;dwCreateFlags为控制线程创建的附加标记,如果为CREATE_SUSPENDED,则创建线程为挂起状态

8、,必须调用成员函数ResumeThread恢复;IpSecurityAttrs用于指定安全属性。要保证线程之间数据正常传输,还要涉及线程间通信、线程间同步等内容,有兴趣读者可参阅有关资料。3.串行通信程序流程左边是主线程,右边为子线程。实线框为视类

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

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

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