VC串口通讯DLL.docVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
VC串口通讯DLL

VC串口通讯DLL 串口在工业应用是极为普遍的,我用API封装了同步和异步的串口类,以及一个具有监视线程的异步串口类;使用简单高效,具有工业强度,我在BC, BCB, VC, BCBX, GCC下编译通过,相信足够应付大多数情况,而且还可以继承扩展,下面简单介绍使用方法 库的层次结构: _base_com:虚基类,基本接口,可自行扩展自己的串口类 _sync_com:_base_com 的子类, 同步应用,适合简单应用 _asyn_com:_base_com 的子类, 异步应用(重叠I/O),适合较高效应用,NT平台 _thread_com:_asyn_com 的子类, 异步应用,监视线程,适合较复杂应用,窗口通知消息和继承扩展的使用方式;几个问题: 结束线程 如何从WaitCommEvent(pcom-_com_handle, mask, pcom-_wait_o)这个API退出以便顺利结束线程: 方案1: SetCommMask(_com_handle, 0); 这个方法在MSDN有载,当在一些情况下并不完全有效,原因未知; 方案2: SetEvent(_wait_o.hEvent); 直接激活重叠IO结构中的事件句柄,绝对有效; 这份代码我两种都用; 打开10以上的COM端口 在NT/2000下打开编号10以上端口用 _com_handle = CreateFile( “COM10“, GENERIC_READ GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL FILE_FLAG_OVERLAPPED, //重叠I/O NULL ); 将提示错误, 这样就OK: _com_handle = CreateFile( “\\\\.\\COM10“,//对应的就是\\.\COM10 GENERIC_READ GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL FILE_FLAG_OVERLAPPED, //重叠I/O NULL ); 线程中循环的低效率问题 使用SetCommMask(pcom-_com_handle, EV_RXCHAR EV_ERR)监视接受字符和错误消息;一旦有个字符来就会激活WaitCommEvent 通常作以下接受操作: if(!WaitCommEvent(pcom-_com_handle, mask, pcom-_wait_o)) { if(GetLastError() == ERROR_IO_PENDING) { GetOverlappedResult(pcom-_com_handle, pcom-_wait_o, length, true); } } if(mask EV_ERR) // == EV_ERR ClearCommError(pcom-_com_handle, error, stat); if(mask EV_RXCHAR) // == EV_RXCHAR { pcom-on_receive();//接收到字符 //或发送到窗口消息 } 这样频繁的函数调用或接受发送消息,效率低下,我添加扫描缓冲区的代码,当字符数超过设定的字符数才作接受字符的操作; if(mask EV_RXCHAR) // == EV_RXCHAR { ClearCommError(pcom-_com_handle, error, stat); if(stat.cbInQue pcom-_notify_num) //_notify_num 是设定得字符数 pcom-on_receive(); } 类似于流的输出方式 我编了一个简单的写串口的方式,可以类似于流将简单的数据类型输出 templatetypename T _asyn_com operator (T x) { strstream s; s x ; write(s.str(), s.pcount()); return *this; } 就可以这样使用 _sync_com com1; com1.open(1, 9600); com1 “ then random() s retur

文档评论(0)

wumanduo11 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档