问题描述
基于MODBUS协议写的串口通信程序,在vc6.0里用API写的,在接收数据时,记录接受的是19字节,但是用TRACE调试时,只显示出3个字节,但是我用串口调试助手却能显示19位。程序主要代码如下:hcom=CreateFile("COM3",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);///打开串口DCBdcb;GetCommState(hcom,&dcb);dcb.BaudRate=9600;dcb.ByteSize=8;dcb.Parity=NOPARITY;dcb.StopBits=ONESTOPBIT;dcb.fBinary=TRUE;dcb.fParity=FALSE;if(SetCommState(hcom,&dcb)==0){MessageBox("串口设置错误!");return;}SetupComm(hcom,1024,1024);///////写串口的代码省略,只列出读串口的代码////BYTEbyte[19];DWORDwCount=0;ReadFile(hcom,byte,19,&wCount,NULL);/////wCount的值显示为19TRACE("byteis%Xn",byte);////显示的情况为byteis12F5A0,byte为什么只是3个字节很着急,请各位大虾出手相助!!!!
解决方案
本帖最后由 zhongjun_12345 于 2011-03-25 22:29:36 编辑
解决方案二:
该回复于2011-03-26 14:43:39被版主删除
解决方案三:
最近我也在搞通信,真的挺难的
解决方案四:
数据发送慢一点,你会发现没丢。由于调试操作比较慢,数据发过来了,你还没有接受,就被系统回收了。应该是这个样子的。
解决方案五:
打印方式错误了for(i=0;i<19;i++){printf("%02x",byte[i]);}
解决方案六:
TRACE%s遇到字符串结束符就不输出了。你的第4个字节是多少呢?
解决方案七:
有可能数据中有00,后面的就没有显示出来!
解决方案八:
在内存里看看byte的值是不是正常的
解决方案九:
6楼说的是对的,串里也许有00值的字符。给截取了。也可象4楼那样,看一看,如果有不能显示的字符,可能也看不到。
解决方案十:
串口是流方式,发送方发送19字节,接收端可能要分几次才能全部读取完毕,我觉得数据应该没有丢。
解决方案十一:
该回复于2011-12-26 09:37:01被版主删除
解决方案十二:
Read回来的每一个有效字节放在一个缓冲区里面,然后再处理。就不会丢失数据的。串口没那么不可靠,很简单。Boy!
解决方案十三:
你读串口应该看看读到多少吧,做其它通讯也一样,不能只管做不负责任哟。