求助!帮忙看看一个串口通信的问题
我使用MSComm控件想发一个9个字节的数组,但却只接收到8个字节,请各位大侠帮看看:
串口属性设置:RThreshold = 1
InputMode = 1
InputLen =0
InputBuffSize = 1024
OutputBuffSize = 1024
//发送
OleVariant send_data;
int i;
Byte data1[9];
data1[0]=15;
data1[1]=1;
data1[2]=0;
data1[3]=0;
data1[4]=0;
data1[5]=0;
data1[6]=16;
data1[7]=16;
data1[8]=16;
send_data=VarArrayCreate(OPENARRAY(int,(0,8)), varByte);
for(i=0;i<9;i++)
{
send_data.PutElement(data1[i],i);
}
MSComm1->Output=send_data;
//接收
Byte buf[9];
int bytenum,i;
OleVariant receive_data;
if(MSComm1->CommEvent==comEvReceive)
{
while(MSComm1->InBufferCount>0)
{
receive_data=MSComm1->Input;
bytenum=receive_data.ArrayHighBound(1);
for(i=0;i<=bytenum;i++)
{
buf[i]=receive_data.GetElement(i);
}
}
}
运行看到发\x0F\x01\0\0\0\0\x10\x10\x10,收到的是\x0F\x01\0\0\0\0\x10\x10\0,为什么会少呢?
当我把RThreshold = 9,收到的是\x0F\x01\0\0\0\0\x10\x10\x10,这样设对不对呢?
[解决办法]
RThreshold = 9这个是对的,这个设置就是说接收到9个字节才触发一次OnComm 事件,如果是设置成1就成了每一个字节都触发一次OnComm 事件了,但并不表示一个 OnComm 事件只能读取到一个字符,所以你中间漏掉了数据是正常的。
[解决办法]
接收收据后,你要自己分析那些是一组数据,
并不是每次收到的都是独立的一组数据
[解决办法]
接收的多增加一个字节来放结束符 \0
你定义接收为10个字节试试看 Byte buf[10];