文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>SOS!从串口输入数据在网页中无法显示

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

时间:2010-06-13  来源:jjwillian

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

现状:所使用的硬件为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

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载