麻烦来个大牛帮小弟我上吧,小弟我都换了几个号提了几次问了 关于ClearCommError的有关问题,先多谢了
麻烦来个大牛帮我下吧,我都换了几个号提了几次问了 关于ClearCommError的问题,先谢谢了!
dlength的长度一直为8 实际的返回数据都是8个字节以上
我用Receivedata(Comhandle,ReceiveBuf,120) 可以一次把数据全部接收。但是这样速度很慢。跪求解决方法!!!!!
------解决方案--------------------
这个缓冲区最大好像也只能是16吧
------解决方案--------------------
COMMTIMEOUTS超时设置大一点,下位机用的是什么写的,arm几还是??sleep2秒可以接到全部,要不是你超时设置小了,要不是你下位机发送数据太慢了,自己多调试下。
------解决方案--------------------
从你上面给的代码看不出什么问题。
你发送命令的代码是什么、超时设置是怎么设置的、还有有没有试过用别的电脑的USB测试,有的时候不同型号电脑USB带宽不同,也会造成数据接收不稳定的,我前段时间就碰到过,还发了帖子问,原先用东芝笔记本的串转USB就很正常,换了个Sony的结果就出问题,后面试过好多笔记本,发现就sony的不行,你多试试
------解决方案--------------------
找对应的COMMTIMEOUTS原始结构
DWORD ReadIntervalTimeout; //-------设为0
DWORD ReadTotalTimeoutMultiplier; //设为0
DWORD ReadTotalTimeoutConstant; //只使用常数设为2000或多一些试试
DWORD WriteTotalTimeoutMultiplier;
DWORD WriteTotalTimeoutConstant;
------解决方案--------------------
你做串口通信自定义协议么?
如果不定协议确实很难控制的。
有了协议,你处理一帧数据,没传完可以等。数据太多可以分帧传数据。
你的问题就解决了
- C/C++ code
int __stdcall InQueCount(HANDLE ComHandle) { if (ComHandle<0){return Bad_CommOpen;} COMSTAT CT; DWORD Error; ClearCommError(ComHandle,&Error, &CT); return (CT.cbInQue); }
- C/C++ code
SETTIMEOUT(TIME_NAK); do { if (InQueCount(ComHandle) > 0) break; }while(!TIMEOUT); if (TIMEOUT) return ERR; dlength=InQueCount(ComHandle); //Sleep(100); ReceiveData(ComHandle,ReceiveBuf,dlength);
- C/C++ code
int __stdcall ReceiveData(HANDLE ComHandle,BYTE *ReceData, DWORD Number) { if (ComHandle<0){return Bad_CommOpen;} DWORD m_Number=0; if(ReadFile(ComHandle,ReceData, Number, &m_Number,NULL)==0){return Bad_ReceiveData_ReadFile;} //if (Number!=m_Number){return Bad_ReceiveData_Len;}//接收数据长度不足(长度判断错误) return OK; }
dlength的长度一直为8 实际的返回数据都是8个字节以上
我用Receivedata(Comhandle,ReceiveBuf,120) 可以一次把数据全部接收。但是这样速度很慢。跪求解决方法!!!!!
------解决方案--------------------
这个缓冲区最大好像也只能是16吧
------解决方案--------------------
COMMTIMEOUTS超时设置大一点,下位机用的是什么写的,arm几还是??sleep2秒可以接到全部,要不是你超时设置小了,要不是你下位机发送数据太慢了,自己多调试下。
------解决方案--------------------
从你上面给的代码看不出什么问题。
你发送命令的代码是什么、超时设置是怎么设置的、还有有没有试过用别的电脑的USB测试,有的时候不同型号电脑USB带宽不同,也会造成数据接收不稳定的,我前段时间就碰到过,还发了帖子问,原先用东芝笔记本的串转USB就很正常,换了个Sony的结果就出问题,后面试过好多笔记本,发现就sony的不行,你多试试
------解决方案--------------------
找对应的COMMTIMEOUTS原始结构
DWORD ReadIntervalTimeout; //-------设为0
DWORD ReadTotalTimeoutMultiplier; //设为0
DWORD ReadTotalTimeoutConstant; //只使用常数设为2000或多一些试试
DWORD WriteTotalTimeoutMultiplier;
DWORD WriteTotalTimeoutConstant;
------解决方案--------------------
你做串口通信自定义协议么?
如果不定协议确实很难控制的。
有了协议,你处理一帧数据,没传完可以等。数据太多可以分帧传数据。
你的问题就解决了