- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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
您可能关注的文档
- 2013年注册核安全工程师专业实务第三章核设施选址与评价含第六章案例分析.ppt
- 2013年注册核安全工程师案例分析质量保证案例.ppt
- 2013年湖北省咸宁市中考化学试题Word版及答案.doc
- 2013年海南高考地理政治历史真题及答案解析汇总word版.doc
- 2013年浙江高考语文数学文史类文综英语真题及答案解析汇总word版.docx
- 2013年海南高考化学物理生物试题及答案汇总word版.doc
- 2013年注册核安全工程师综合知识第九章核安全文化.pptx
- 2013年湖北高考数学试题及答案解析图片版.doc
- 2013年湖北高考文科数学试题及答案解析word版.doc
- 2013年注册核安全工程师核安全综合知识第七章辐射防护基础.ppt
- 浙江省温州市浙南名校联盟2025-2026学年高一上学期期中联考数学试题含解析.docx
- 26高考数学提分秘诀重难点34圆锥曲线中的定点、定值、定直线问题(举一反三专项训练)(全国通用)(含解析).docx
- 26高考数学提分秘诀重难点35概率与统计的综合问题(举一反三专项训练)(全国通用)(含解析).docx
- 26高考数学提分秘诀重难点31圆锥曲线中的切线与切点弦问题(举一反三专项训练)(全国通用)(含解析).docx
- 26高考数学提分秘诀重难点30圆锥曲线中的弦长问题与长度和、差、商、积问题(举一反三专项训练)(全国通用)(含解析).docx
- 26高考数学提分秘诀重难点29巧解圆锥曲线的离心率问题(举一反三专项训练)(全国通用)(含解析).docx
- 26高考数学提分秘诀重难点28直线与圆的综合(举一反三专项训练)(全国通用)(含解析).docx
- 寡核苷酸药物重复给药毒性研究技术指南.docx
- 重组溶瘤腺病毒生产质量管理标准.docx
- 26高考数学提分秘诀重难点27直线与圆中常考的最值与范围问题(举一反三专项训练)(全国通用)(含解析).docx
原创力文档


文档评论(0)