社区
硬件/系统
帖子详情
当捕捉到EV_RXCHAR时,cbInQue是零,请经验人士指点
iamwjp
2005-11-22 02:32:35
如题,重叠操作,另外baud应根据什么进行设置?如果设置不当可能丢数据吗?
...全文
244
5
打赏
收藏
当捕捉到EV_RXCHAR时,cbInQue是零,请经验人士指点
如题,重叠操作,另外baud应根据什么进行设置?如果设置不当可能丢数据吗?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
seaquester
2005-11-25
打赏
举报
回复
应该是 continue WaitCommEvent
iamwjp
2005-11-25
打赏
举报
回复
楼上的是continue ClearCommError()吗?还是continue WaitCommEvent
at_yuan2
2005-11-25
打赏
举报
回复
bResult = ::ClearCommError(pSerialPort->m_hComm, &dwError, &ComStat);
if (ComStat.cbInQue == 0)
{
continue;
}
iamwjp
2005-11-23
打赏
举报
回复
不知这种情况应该怎样处理,我试过循环ReadFile可以,大家有没有更好的方案?
seaquester
2005-11-23
打赏
举报
回复
遇到过这种情况,一般是前面有一此将buffer里面的数据读走之后,紧接着可能再收到一次EV_RXCHAR,此时cbInQue是零。
具体原因不明,不过没有什么影响。
vc很通用的串口通讯类
vc很通用的串口通讯类,包含SerialPort.h和SerialPort.cpp
铜矿收购串口通信
实现磅秤与计算机的串口通信。 while(Receive) do begin dw
Ev
tMask:=0; // 等待通讯事件发生 if not WaitComm
Ev
ent(hNewCommFile,dw
Ev
tMask,@Os) then begin if ERROR_IO_PENDING=GetLastError then GetOverLappedResult(hNewCommFile,Os,dwTranser,True); end; if ((dw
Ev
tMask and
EV
_
RX
CHAR
)=
EV
_
RX
CHAR
) then begin // 等待允许传递WM_COMMNOTIFY通讯消息 WaitForSingleObject(Post_
ev
ent,INFINITE); // 处理WM_COMMNOTIFY消息
时
不再发送WM_COMMNOTIFY消息 Reset
Ev
ent(Post_
Ev
ent); // 传递WM_COMMNOTIFY通讯消息 Ok:=PostMessage(Comm.Handle,WM_COMMNOTIFY,hNewCommFile,0); if (not Ok) then begin MessageBox(0,'PostMessage Error !','Notice',MB_OK); Exit; end; end; end; CloseHandle(Os.h
Ev
ent); // 关闭重叠读事件对象
设置串口监视事件的一点参考资料
这是我自己找的串口监视的一些资料,整理了下,希望会帮到大家,
基于VC++2008用CSerialPort类编写的串口程序
基于VC++2008界面编写,支持UNICODE字符集,串口数量不受限制(需要到SerialPort.CPP把assert(portnr > 0 && portnr < 60);设置好);只要在RC资源下双击“打开串口”按钮就可以去设置默认打开串口号(m_SerialPort.InitPort(this,20, 9600,'N',8,1,
EV
_
RX
FLAG |
EV
_
RX
CHAR
,512)其中20就是串口号了);在ONCOMM函数除了界面EDIT接收框外我还加了点自己测试把收到16进制接收数据转化为BYTE程序,发送数据默认是16进制的,如果要ACSII就要自己修改发送数据部分不调用转换格式就行了。STR2HEX编译
时
会提示警示会丢失数据,不用理会主要是W
CHAR
_T转
CHAR
造成的不影响程序运行,以后有
时
间再研究修改。
CSerialCom对话框代码
http://blog.csdn.net/cy757/article/details/4399541 我安这个方法实现的,基于对话框的 编译环境vc6.0 在VC中实现串口通信有3中方法,mscomm 、api 和串口类。 但在实际的编程中MSComm控件不好用,api则比较麻烦。建议使用串口类SerialPort(
请
到网络中搜索下载) 串口类SerialPort的用法如下: 在主对话框的'.h'文件添加以下内容: #include "SerialPort.h" CSerialPort m_ComPort; //串口类对象 afx_msg void OnCommunication(WPARAM ch, LPARAM port); 在主对话框的''.cpp'文件添加以下内容: ON_MESSAGE(WM_COMM_
RX
CHAR
, OnCommunication) //打开串口 if (m_ComPort.InitPort(this,1,9600,'N',8,1,
EV
_
RX
FLAG |
EV
_
RX
CHAR
,512)) m_ComPort.StartMonitoring(); //启动串口监视线程 else AfxMessageBox("没有发现,或被其它设备占用"); return TRUE; // return TRUE unless you set the focus to a control //数据发送 void C XX Dlg::OnBuSend() {
char
str[128]="4646xfgsdgsgs"; str[2]='/xaf'; //16进制数据的发送。 m_ComPort.WriteToPort(str); } //数据接收 void C XX Dlg::OnCommunication(WPARAM ch, LPARAM port) { m_rece+=ch; UpdateData(false); //更新数据 }
硬件/系统
2,643
社区成员
17,229
社区内容
发帖
与我相关
我的任务
硬件/系统
VC/MFC 硬件/系统
复制链接
扫一扫
分享
社区描述
VC/MFC 硬件/系统
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章