我编写了一个程序利用readcond函数接收串口发送过来的82个数据,但是返回值大部分是82个,大部分时候是收到82个数,但是偶尔收到81、78甚至是77个数.也不知道是什么原因,哪位知道解释一下,谢谢了!
代码如下:
void *RecvFromSerialPort(void *arg)
{
int RecvID=1;
int i,n1,n2,nt,n;
int nbRecv=0;
int ModelState;
double mdldata[MAXRE];//MAX=128;
int mdldata_size;
struct data_in comdata;// struct data_in{unsigned char data[MAXRE]};
int comdata_size;
unsigned char tmp;
OpalGetNbAsyncRecvIcon(&nbRecv);
if(nbRecv >= 1)
{
do
{
RecvID = 1;
n=0;
nt=0;
memset(&comdata,0,sizeof(comdata));
comdata_size=sizeof(unsigned char)*82;
////////////////////////
n=readcond
(fd_ser,&comdata.data,comdata_size,comdata_size,0,50);
nt=n;
OpalPrint(“The receive data length is :%d\n”,(int)n);
for(i=0;i<nt;i++)
OpalPrint(“The data[%d] is %d\n”,i,comdata.data_);
…
}
}
}
一个比较奇怪的现象就是我利用计算机本身的串口来发送数据,这是我接收到的数据就是完全正确的,但是利用凌华的3544卡来发送数据,多部分时候接收到的数据数量是对的,偶尔只能接收到78、77或者81个数,也就是丢掉了一些数。我所用的是422协议。用计算机自带的串口发送是通过232转422来完成的。计算机自带的串口使用232协议也是没有问题的。
凌华的3544卡的运行结果是这样:
The receive data length is :82
The receive data length is :82
The receive data length is :82
The receive data length is :82
The receive data length is :78
The receive data length is :82
The receive data length is :87
…
不太有什么规律。
另外,使用MOXA CP-114的串口卡来发送数据,这是根本就不能正确接收数据,例如我发送的是78,则接收到的数要么是128要么是0.采用232协议。
使用MOXA的结果如下:
The data[0] is 0
…
The data[0] is 128
…
The data[0] is 0
…
总之使用计算机自带的串口就是对的,使用第三方的卡就不对。不知道是什么原因啊?是不是驱动的问题?我的QNX是6.2.1的。6.3.2也试过了,一样的现象。_