Windows与UNIX通讯问题(主要是收数据不全问题,1000分!)
Windows与UNIX通讯问题(主要是收数据不全问题,1000分!)
UNIX系统是采用多功能串口卡,其中有一个串口与我的PC电脑通讯。UNXI系统端是25针,我这端是9针,都是公头(也就是带针的)
我这端程序是:
AnsiString SEND_TMEP="$ABCD|E364010010G00G0245|P00L05|";
commData->ClearSendBuf();
//发送数据为:
commData->WriteData((unsigned char*)(SEND_TMEP.c_str()),SEND_TMEP.Length());
UNIX是一个不停的检查函数,如果受到我的AskStr,并且为32为长度,则证明是合法的,返回为0;否则返回为-1,并且继续检查。
代码为一个函数如下:
int Get_Status(int fd,char *Reci_Data)
{
int i,j;
int read_size;
int timeout;
char buffer[512];
char tmpbuf[512];
char TradeCode[5];
memset(TradeCode,0,sizeof(TradeCode));
memset(buffer,0,sizeof(buffer));
memset(tmpbuf,0,sizeof(tmpbuf));
//开始是读一次,但是读一次不行,只能读到前面16个字符,就是$ABCD|E364010010,后面的G0245|P00L05|读不到。
所以我就注销了下行,采用两次读的方法。
//read_size=read(fd,buffer,sizeof(buffer));
//两次读的方法如下:
i=0;
timeout=6;
while(i<2)
{
if(timeout<0)
break;
read(fd,tmpbuf,sizeof(tmpbuf));
//读两次后,相连接
strcat(buffer,tmpbuf);
//StrCount函数是返回 字符串buffer 中的 $ 个数
i=StrCount(buffer,'$');
if(i==1)
{
if(strlen(buffer)>=32)
break;
}
timeout--;
sleep(1);
}
//输入到UNXI屏幕
fprintf(stderr,"StrCount strlen(buffer)=%d,buffer=%s\n",strlen(buffer),buffer);
if(strlen(buffer)<32)
{
if(strlen(buffer)>0)
{
strcpy(buffer,"ER2$");
write(fd,buffer,strlen(buffer));
}
return (-1);
}
memset(tmpbuf,0,sizeof(tmpbuf));
for( j=0;j<strlen(buffer);j++)
{
if(buffer[j]=='$')
{
strncpy(tmpbuf,buffer+j+1,31);
tmpbuf[31]=0;
break;
}
}
if(strlen(tmpbuf)<4)
return(-1);
strncpy(TradeCode,tmpbuf,4);
if ((!strcmp(TradeCode,"ABCD")) || (!strcmp(TradeCode,"abcd")))
{
//正确后的结果
strcpy(Reci_Data,tmpbuf);
return(0);
}
else
{
return(-1);
}
}
现在问题是:
1)每次只能读16个,即使我采用两次相连接方法,UNIX的最后收到错误的是 $ABCD|E364010010$ABCD|E364010010 ;正确的是 $ABCD|E364010010G00G0245|P00L05|
怎么办
2)每次发送完毕后,我的PC要重新启动一下。或者把串口线拔掉重插才好,真不知道怎么回事情?
3)串口线的做法(连接)是怎么最好?
谢谢!