1

我尝试使用 PHP 在 Linux 平台上读取串口。
但我无法读取任何数据。当我尝试使用 .net 阅读时,这次我可以阅读。

我使用“php_serial.class.php”类进行串口操作。你可以从这个链接阅读这个课程:
这里

我的代码是这样的:

<?php  
 include "php_serial.class.php";  

// Let's start the class
$serial = new phpSerial;

// First we must specify the device. This works on both linux and windows (if
// your linux serial device is /dev/ttyS0 for COM1, etc)
$serial->deviceSet("/dev/ttyS1");

// We can change the baud rate, parity, length, stop bits, flow control
$serial->confBaudRate(19200);
$serial->confParity("none");
$serial->confCharacterLength(8);
$serial->confStopBits(1);
$serial->confFlowControl("none");

// Then we need to open it
$serial->deviceOpen();  

// read from serial port
$read = $serial->readPort();

//Determine if a variable is set and is not NULL
if(isset($read)){
   while(1){
       $read = $serial->readPort();
       print_r(" (size ".strlen($read). " ) ");
       for($i = 0; $i < strlen($read); $i++)
       {
          echo ord($read[$i])." ";
       }
       print_r("\n");
       sleep(1);
  }// end while
}// end if  


// If you want to change the configuration, the device must be closed
$serial->deviceClose();

// We can change the baud rate
$serial->confBaudRate(19200);  
?>  

行 "print_r(" (size ".strlen($read). " ) ");" 总是返回零。我无法从串口读取数据的原因是什么?

4

3 回答 3

3

我相信你现在已经解决了这个问题,但这是我的 2c 价值。

你读了两次串口。一次检查是否有数据,然后在有数据时再次检查。根据我的经验,读取一次会清除缓冲区,因此再次读取会产生空结果。

只是不要读第二遍

于 2012-10-04T08:46:44.220 回答
0

有同样的问题。-isig -icanon一旦设置脚本读取没有问题,我需要使用 stty 设置两个选项。

于 2013-04-14T21:43:54.777 回答
0

您好,这真的很旧,但我目前(仍在)正在处理这个问题,我正确地恢复了字节(删除 ord() 以读取为字符串 btw)。

它通过为零的原因是由于无限循环,即使您发送任何内容也不会返回任何内容(看起来如此)尽管使用您的代码我设法将内容作为字符串返回。

实际上,我将设备端的数据输入到控制台中……然后将我输入到设备中的内容返回给我,看来您需要分叉该过程才能以 100% 的方式完成。它有时起作用的原因是,如果你输入一个返回几行的命令,它很可能会得到其中的一些。

使用屏幕连接到设备,然后只需键入随机内容并按回车...您将看到它出现在您的 php 输出中。

于 2016-01-05T15:44:03.137 回答