+ -
当前位置:首页 → 问答吧 → SOS!从串口输入数据在网页中无法显示

SOS!从串口输入数据在网页中无法显示

时间:2010-06-12

来源:互联网

我想通过将串口输入的数据在网页中实时显示出来,但没能顺利实现,请教各位老师。

现状:所使用的硬件为m3C2410,希望通过向串口调试助手写入数据传给m3c2410并显示与对应的网页界面。

调试中现象:从网页向串口发送数据正常,从串口向网页发送命令异常,页面打印信息显示为读取串口失败,即“Read_Port(fd,rbuf,size)=-1”,百思不得其解,望各位老师指点迷津:

有关串口的设置如下:

int Open_Port(int i) //打开串口
{
struct termios options;
if(i==1)
fd1 = open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NONBLOCK);  
else if(i==2)
fd1 = open("/dev/ttyS1", O_RDWR | O_NOCTTY | O_NDELAY);
else if(i==3)
fd1 = open("/dev/ttyS2", O_RDWR | O_NOCTTY | O_NDELAY);
if (fd1==-1) 
{
  return -1;
}
fcntl(fd1, F_SETFL, 0); //fd1是文件句柄,F_SETFL设置文件状态标志和访问模式
bzero(&options,sizeof(options));
tcgetattr(fd1, &options);  

cfsetispeed(&options, BAUDRATE); 

cfsetospeed(&options, BAUDRATE); 
options.c_cflag |= (CLOCAL | CREAD); 
options.c_cflag &= ~PARENB; 
options.c_cflag &= ~CSTOPB; 
options.c_cflag &= ~CSIZE; 
options.c_cflag |= CS8;  
options.c_lflag &= ~(ICANON | ECHO | ECHOE |ISIG);  
options.c_cflag &= ~CRTSCTS;  

options.c_iflag &= ~(IXON | IXOFF | IXANY); // disable SW Flow Control
options.c_oflag &= ~OPOST; 
tcsetattr(fd1, TCSANOW, &options);  

return fd1;
}

main() 后面读串口,并在网页中给出提示信息:

  Open_Port(1); //打开串口1,好像会影响CGI重定向,所以要多加权限
// Write_Port(Send,2); //发送数据
// Read_Port(rport,25);
// for(j=0; j<3; j++) //等待返回接收
// {
  hh = read(fd1, rport,512);

  if( hh > 0)
  {
  printf("Content-type: text/html\n\n");
  printf("<html>\n");
  printf("<head><title>DateBack</title>\n");
  printf("<meta http-equiv=\"refresh\" content=\"5;URL=%s\">",Referer); 
  printf("</head>\n");
   
  printf("<body>\n");
  printf("<br><br><br>");
  printf("<hr>");
  printf("<div align=\"center\">");
  printf("<h1> The lights states </h1>\n");
  printf("\nReadWordLenth= %d\n",hh);
  printf( "\n Input Words are :%s\n",rport); //字符串输出
  printf("<hr>"); 
  printf("<br><br>"); 
  for(i=0;i<hh;i++)
  printf( "\n%x\n",rport[i]); //字符串输出
  rport[hh+1]= '\0';
  printf("<br><br><br>");
  printf("</div>");
  printf("</body>\n");
  printf("</html>\n");
  fflush(stdout); //刷新标准输出缓冲区,把输出缓冲区里的东西打印到标准输出设备上。
  }
  else
  {
// Write_Port(Send,2); //发送数据
  kk = write(fd1, Send, 2);
   
  printf("Content-type: text/html\n\n");
  printf("<html>\n");
  printf("<head><title>DateError!</title>\n");
  printf("<meta http-equiv=\"refresh\" content=\"5;URL=%s\">",Referer);
  printf("</head>\n");
  
  printf("<body>\n");
  printf("<br><br><br>");
  printf("<div align=\"center\">");
  printf("<h2>Read Serial port Failure数据读取失败!</h2>\n");
  printf("\nRead Serial Data State = %d\n\r",hh);
  printf("<br>"); 
  printf("\nWrite Serial Data State = %d\n",kk);
  printf("<hr>"); 
  printf("</div>");
  printf("</body>\n");
  printf("</html>\n");  
}  
  fcntl(fd1, F_SETFL, FNDELAY);//FNDELAY选项将导致当端口上没有字符可读时,read函数返回0,  
Close_Port();

调试结果:

Read Serial port Failure数据读取失败!
nRead Serial Data State = -1

作者: yxg2007   发布时间: 2010-06-12

好ddddddddd

作者: kko8888   发布时间: 2010-06-12