关于串口通讯中的ComStat.cbInQue是否能正确反映的串口接收到的字节个数
我想请教一个问题,相关程序可到http://www.csdn.net/expert/topic/962/962446.xml?temp=.3235285
上看一下。
问题是:从dos下的串口程序发来的数据,在我的接收程序中用
ClearCommError(pdlg->m_hCom,&dwErrorFlags,&ComStat);
if(ComStat.cbInQue>1)
{
.......发送消息读串口;
}
可ComStat.cbInQue却不能正确反映串口中的数据字节数。比如dos发来数据
"V0600212C请回电话2120391"按我的理解ComStat.cbInQue应等于24,我读ComStat.cbInQue个字符即可,可实际上并不是这样ComStat.cbInQue值不定,
因为我用如下语句读串口
length=min(dwLength,ComStat.cbInQue);
fState=ReadFile(m_hCom,buf,length,&length,&m_osRead);
因而使接收的信息被分解显示为
V0
600212C请回电话21
2
03
9
1
请问这是为什么?
还有只要我改变这条语句
if(ComStat.cbInQue)
如ComStat.cbInQue>19
那程序就读19个字节即
V0600212C请回电话21
20391
改为多少程序就读多少,为什么?,但同样的程序,我自已在程序中向串口写,再从串口读就没有这个问题,为什么?
问题点数:100、回复次数:5Top
1 楼wuxuan(真心英雄)回复于 2002-08-25 16:57:40 得分 10
http://www.codeproject.com/system/#Hardware%20programmingTop
2 楼qsfsea(忍)回复于 2002-08-25 16:59:43 得分 80
1.在你调用ClearCommError()时,可能只有那几个字节数据到达,
2.一直这样接收,然后连接起来分析不行吗?
Top
3 楼sxslyy(孤松傲雪)回复于 2002-08-25 17:12:02 得分 0
qsfsea(每天上网100分钟) ( ) :
1.在调用ClearCommError()时,为什么只有那几个字节数据到达,因为在
window下我的程序自发自收,却没问题,window下比dos发的快吗?
2.一直这样接收,可我不知道它什么条件下会结束。而且我每读一次,就要向短信网关发一次数据,所以要一次读完送到串口。
有别的好方法吗?
Top
4 楼qsfsea(忍)回复于 2002-08-25 19:23:42 得分 0
按理说通讯参数相同dos,windows应该没问题,不敢保证
其实你可以在发送端加一个侦的标志,表示侦开始或侦结束Top
5 楼FG_Hope()回复于 2002-08-26 11:36:41 得分 10
你可以循环接收直到满足条件才退出。
也可以增加在接收到某个指定的字符作为结束。在串口初始化的地方设置。Top




