当前位置: 技术问答>linux和unix
服务器为SCO UINX5.05,连接了实达终端的串口通讯的问题,急,谢
来源: 互联网 发布时间:2015-08-29
本文导语: 服务器为SCO UINX5.05 ,在com1上连接一实达终端,再在终端上连接读卡器,服务器通过com1给实达终端发送命令,由终端把命令转发给读卡器,读卡器能正确接收命令并返回正确的数据给实达终端,实达终端也能把读卡...
服务器为SCO UINX5.05 ,在com1上连接一实达终端,再在终端上连接读卡器,服务器通过com1给实达终端发送命令,由终端把命令转发给读卡器,读卡器能正确接收命令并返回正确的数据给实达终端,实达终端也能把读卡器返回的数据正常返回给服务器,但是服务器上我的程序只能接收到部分数据,如实达终端发送给服务器的数据为“12345678”,我只能收到“1234”,后面的数据无法接收,请问如何解决?急!!!谢谢!!!
|
代码如下:
1)打开串口
m_hMCom=open(sComid,O_RDWR);// 或m_hMCom=open(sComid,O_RDWR | O_NOCTTY |O_NDELAY);
2)设置串口属性:
struct termios Opt;
int i=tcgetattr(m_hMCom,&Opt);
tcflush(m_hMCom, TCIFLUSH);
Opt.c_cflag |=(CLOCAL|CREAD);
Opt.c_cflag &=~PARENB;
Opt.c_cflag &=~CSTOPB;
Opt.c_cflag &=~CSIZE;
Opt.c_cflag |=CS8 ;
Opt.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG ); //Input
Opt.c_oflag &= ~OPOST; //Output
Opt.c_iflag &= ~(IXON|IXOFF|IXANY);
Opt.c_iflag &= ~(INLCR|IGNCR|ICRNL);
Opt.c_iflag &= ~(INPCK);
switch(baud_rate)
{
case 9600:
cfsetispeed(&Opt,B9600);
cfsetospeed(&Opt,B9600);
break;
case 115200:
cfsetispeed(&Opt,B115200);
cfsetospeed(&Opt,B115200);
break;
case 19200:
cfsetispeed(&Opt,B19200);
cfsetospeed(&Opt,B19200);
break;
case 38400:
cfsetispeed(&Opt,B38400);
cfsetospeed(&Opt,B38400);
break;
default:
break;
}
Opt.c_cc[VTIME] = 10;
Opt.c_cc[VMIN] = 0; // Update the options and do it NOW
tcflush(m_hMCom, TCIFLUSH);
i=tcsetattr(m_hMCom,TCSANOW,&Opt);
3)写数据:正常;
4)读数据:
nread=read(m_hMCom,&chr,1);
问题出在读上,我用监控线在实达终端与服务器之间监控实达终端上传的数据,一切数据都正常,但我服务器的程序就是收不到完整的数据,有时候下一条命令能收到上一条命令的数据
1)打开串口
m_hMCom=open(sComid,O_RDWR);// 或m_hMCom=open(sComid,O_RDWR | O_NOCTTY |O_NDELAY);
2)设置串口属性:
struct termios Opt;
int i=tcgetattr(m_hMCom,&Opt);
tcflush(m_hMCom, TCIFLUSH);
Opt.c_cflag |=(CLOCAL|CREAD);
Opt.c_cflag &=~PARENB;
Opt.c_cflag &=~CSTOPB;
Opt.c_cflag &=~CSIZE;
Opt.c_cflag |=CS8 ;
Opt.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG ); //Input
Opt.c_oflag &= ~OPOST; //Output
Opt.c_iflag &= ~(IXON|IXOFF|IXANY);
Opt.c_iflag &= ~(INLCR|IGNCR|ICRNL);
Opt.c_iflag &= ~(INPCK);
switch(baud_rate)
{
case 9600:
cfsetispeed(&Opt,B9600);
cfsetospeed(&Opt,B9600);
break;
case 115200:
cfsetispeed(&Opt,B115200);
cfsetospeed(&Opt,B115200);
break;
case 19200:
cfsetispeed(&Opt,B19200);
cfsetospeed(&Opt,B19200);
break;
case 38400:
cfsetispeed(&Opt,B38400);
cfsetospeed(&Opt,B38400);
break;
default:
break;
}
Opt.c_cc[VTIME] = 10;
Opt.c_cc[VMIN] = 0; // Update the options and do it NOW
tcflush(m_hMCom, TCIFLUSH);
i=tcsetattr(m_hMCom,TCSANOW,&Opt);
3)写数据:正常;
4)读数据:
nread=read(m_hMCom,&chr,1);
问题出在读上,我用监控线在实达终端与服务器之间监控实达终端上传的数据,一切数据都正常,但我服务器的程序就是收不到完整的数据,有时候下一条命令能收到上一条命令的数据
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。