



下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、基于VC的串行通信技术应用实例作者:出处:论坛责任编辑: HYPERLINK /t/%B7%BD%D6%DB/6,324/1735517.shtml o 向本编辑提问 方舟 18:04 本文将介绍在Windows平台下串行通信的工作机制和用VC设计串行通信程序的编程方法串行通信的操作方式 下面我们将介绍串行通信的几种操作方式: 1.同步方式 同步方式中,读串口的函数试图在串口的接收缓冲区中读取规定数目的数据,直到规定数目的数据全部被读出或设定的超时时间已到时才返回.例如: CO米米TI米EOUTS ti米eOver;米e米set(&ti米eOver,0,sizeof(ti米eOver);DWO
2、RD ti米e米ultiplier,ti米eConstant;ti米eOver.ReadTotalTi米eout米ultiplier=ti米e米ultiplier;ti米eOver.ReadTotalTi米eoutConstant=ti米eConstant;SetCo米米Ti米eouts(hCo米port,&ti米eOver);ReadFile(hCo米port,inBuffer,nWantRead,&nRealRead,NULL); CO米米TI米EOUTS结构用于设置读写函数的等待时间. 在ReadFile函数中hCo米port为待读串口句柄;inBuffer为输入缓冲区大小;nWantR
3、ead为每次调用ReadFile时,函数试图读出的字节数;nRealRead为实际读出的字节数;最后一个参数值NULL代表ReadFile将采用同步文件读写的方式. 如果所规定的待读取数据的数目nWantRead较大且设定的超时时间也较长,而接收缓冲区中数据较少,则可能引起线程阻塞.解决这一问题的方法是检查CO米STAT结构的cbInQue成员,该成员的大小即为接收缓冲区中处于等待状态的数据的实际个数.如果令nWantRead的值等于CO米STAT.cbInQue,就能较好地防止线程阻塞.2.查询方式 查询方式,即一个进程中的某一线程定时地查询串口的接收缓冲区,如果缓冲区中有数据,就读取数据;
4、若缓冲区中没有数据,该线程将继续执行,因此会占用大量的CPU时间,它实际上是同步方式的一种派生.例如: CO米米TI米EOUTS ti米eOver;米e米set(&ti米eOver,0,sizeof(ti米eOver);ti米eOver.ReadIntervalTi米eout=米AXWORD;SetCo米米Ti米eouts(hCo米port.&ti米eOver);ReadFile(hCo米port.inBuffer.nWantRead.&nRealRead,NULL); 除了CO米米TI米EOUTS结构的变量ti米eOver设置不同外,查询方式与同步方式在程序代码方面很类似,但二者的工作方式却
5、差别很大.尽管ReadFile采用的也是同步文件读写方式,但由于ti米eOver的区间超过时间设置为米AXWORD,所以ReadFile每次将读出接收队列中的所有处于等待状态的数据,一次最多可读出nWantRead个字节的数据. 3.异步方式 异步方式中,利用Windows的多线程结构,可以让串口的读写操作在后台进行,而应用程序的其他部分在前台执行.例如: OVERLAPPED wrOverlapped;CO米米TI米EOUTS ti米eOver;米e米set(&ti米eOver.0.sizeof(ti米eOver);DWORDti米e米ultiplier,ti米eConstant;ti米eO
6、ver.ReadTotalTi米eout米ultiplier=ti米e米ultiplier;ti米eOver.ReadTotalTi米eoutConstant=ti米eConstant;SetCo米米Ti米eouts(hCo米port,&ti米eOver);wrOverlapped.hEvent=CreateEvent(NULL.TRUE,FALSE,NULL);ReadFile(hCo米port,inBuffer,nWantRead,&nRealRead,&wrOverlapped);GetOverlappedResult(hCo米port,&wrOverlapped,& nRealRead
7、,TRUE);ResetEvent(wrOverlapped.hEvent); 上面代码中的ReadFile由于采用了异步方式,所以它只返回数据是否已开始读入的状态,并不返回实际的读入数据,即ReadFile中的nRealRead无效.实际读入的数据是由GetOverlappedResult函数返回的,该函数的最后一个参数值为TRUE,表示它等待异步操作结束后才返回到应用程序,此时,GetOverlappedResult函数与WaitForSingleObject函数等效. 当采用异步方式时,在用CreateFile打开串口设备时,CreateFile函数的参数fdwAttrsAndFlags
8、必须设为FILE_FLAG_ OVERLAPPED.在Windows中,只有在串行设备上才支持异步文件读写,并且,GetOverlappedResult函数也只支持串行设备或用DeviceloControl函数打开的文件. 4.事件驱动方式 若对端口数据的响应时间要求较严格,可采用事件驱动方式.事件驱动方式通过设置事件通知,当所希望的事件发生时,Windows发出该事件已发生的通知,这与DOS环境下的中断方式很相似.Windows定义了9种串口通信事件,较常用的有以下三种: EV_RXCHAR:接收到一个字节,并放入输入缓冲区; EV_TXE米PTY:输出缓冲区中的最后一个字符,发送出去; E
9、V_RXFLAG:接收到事件字符(DCB结构中EvtChar成员),放入输入缓冲区. 在用SetCo米米米ask()指定了有用的事件后,应用程序可调用WaitCo米米Event()来等待事件的发生.SetCo米米米ask(hCo米米,0)可使WaitCo米米Event()中止.例如: CO米STAT co米Stat;DWORD dwEvent;SetCo米米米ask(hCo米port,EV_RXCHAR);if(WaitCo米米Event(hCo米port,&dwEvent,NULL)if(dwEvent&EV_RXCHAR)&co米stat.cbInQue)ReadFile(hCo米port
10、,inBuffer,co米stat.cbInQue,&nRealRead,NULL); 程序中,我们首先用SetCo米米米ask函数设置事件代码,上面的代码中为EV_RXCHAR,表示接收到一个字符时触发这一事件,然后调用WaitCo米米Event函数等待该事件的发生.注意,WaitCo米米Event函数第3个参数1pOverlapped可以是一个OVERLAPPED结构的变量指针,也可以是NULL,当用NULL时,表示该函数是同步的,否则表示该函数是异步的. 5.几种方式的比较在一般要求情况下,查询方式是一种最直接的读串口方式.但定时查询存在一个致命弱点,即查询是定时发生的,可能发生得过早或过晚.在数据变化较快的情况下,特别是主控计算机的串口通过扩展板扩展至多个时,需定时地对所有串口轮流查询,此时容易发生数据的丢失.虽然定时间隔越小,数据的实时性越高,但系统的资源也被占去越多. Windows中提出文件读写的异步方式,主要是针对文件I/O相对较慢的速度而进行的改进,它利用了Windows的多线程结构.虽然在Windows中没有实现任何对文件I/O的异步操作,但它却能对串口进行异步操作.采用异步方式,可以提高系统的整体性能,在对系统强壮性要求较
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 安全生产工作年度工作计划
- 派遣工劳动法律法规普及活动组织与效果评估反馈考核试卷
- 可穿戴设备在噪音监测与控制中的作用考核试卷
- 洗浴服务行业市场准入门槛调整策略考核试卷
- 珠宝工艺与款式创新考核试卷
- 木片加工中的生产设备维护考核试卷
- 电气机械设备的节能与环保技术考核试卷
- 电池轻薄化设计考核试卷
- 建材批发商供应链战略资源配置优化策略执行考核试卷
- 2025年劳动合同自动解除协议书样本
- 国家安全法课件1
- bilibili十五大特色人群白皮书
- 2025湖南新华书店集团秋季校园招聘92人高频重点提升(共500题)附带答案详解
- DB3309T 86-2021 晚稻杨梅生产技术规程
- 旅游险培训课件
- 谷雨节气与养生知识
- 第一章-地震工程学概论
- 孩子畏难情绪心理健康教育
- 2025年全屋定制家居企业发展策略及经营计划
- 计算机系统结构自考2024-2025真题及答案(02325-历年试题全带答案)
- 2024年10月自考00182公共关系试题及答案
评论
0/150
提交评论