使用MSComm控件来串口通讯,关于接收多字节时候会截断的问题
我使用MSComm控件来串口通讯,有两个问题。
1。
设置属性
InBufferSize:512
OutBufferSize:512
InputMode:1
InputLen:0
RThreshold:6,因为串口接收的数据最少为6个字节
SThreshold:0
其余的都是缺省的设置。
我要从串口里面接收6~128个字节不等的数据。
发现的问题是,当接收多字节数据的时候,会截断。比如说吧,要接收128个字节,那么控件的GetCommEvent()==2事件会连续来两次,第一次收到8个字节,紧接着第二次收到120个。
请问这个有解决的办法么?
2。我想达到这个功能,程序向串口发送一个数据,那么它应该很快收到回复,如果长时间比如5秒没有收到回复就说明发送的数据丢失或者通道本身有问题,需要退出程序。
请问,如何设置MSComm控件,来达到这个定时的目的?
谢谢!
问题点数:60、回复次数:4Top
1 楼rushinger(阮祥哥)回复于 2005-04-18 21:10:13 得分 0
gzTop
2 楼oyljerry(【勇敢的心】→ ㊣提拉米苏√㊣)回复于 2005-04-18 21:30:23 得分 60
2,自己设置一个定时器来判断Top
3 楼broown(程序员吃鱼香肉丝是很合理的)回复于 2005-04-18 21:58:26 得分 0
if(m_MSComm.GetCommEvent()==2)
{
variant_inp=m_MSComm.GetInput(); //读缓冲区
safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量
len=safearray_inp.GetOneDimSize(); //得到有效数据长度
for(k=0;k<len;k++)
safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组
for(k=0;k<len;k++) //将数组转换为Cstring型变量
{
BYTE bt=*(char*)(rxdata+k); //字符型
strtemp.Format("%c",bt); //将字符送入临时变量strtemp存放
strDisp+=strtemp; //加入接收编辑框对应字符串
}
CDC* pDC=GetDC(); //准备数据显示
pDC->TextOut(200,100,"COM2接收到:"+strDisp);//显示接收到的数据
ReleaseDC(pDC);Top
4 楼south2000(south2000)回复于 2005-04-18 22:34:19 得分 0
broown(程序员吃鱼香肉丝是很合理的)
你老大写的这些文不对题啊,没有任何用处。Top




