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(" (サイズ ".strlen($read). " ) ");" 常にゼロを返します。シリアルポートからデータを読み取れない理由は何ですか?

4

3 に答える 3

3

これで解決したと思いますが、ここに私の 2c の価値があります。

シリアル ポートを 2 回読み取ります。一度データがあるかどうかを確認し、データがあるときにもう一度確認します。私の経験では、一度読み取るとバッファがクリアされるため、再度読み取ると空の結果が得られます。

二度目は読まないでください

于 2012-10-04T08:46:44.220 に答える
0

こんにちは、これは本当に古いですが、私は現在(まだ)これに取り組んでいます。バイトを正しく戻しました(ord()を削除して、文字列として読み取ります)。

ゼロとして通過する理由は、何かを送信しても何も返されないため、無限ループが原因です(そう思われます)コードを使用しても、文字列として返されたものを取得できました。

私は実際にデバイス側からコンソールにデータを入力しました...これにより、デバイスに入力したものが返されました.100%自分のやり方で行うには、プロセスをフォークする必要があるようです. 時々動作する理由は、数行を返すコマンドを入力すると、それらのいくつかを取得する可能性が高いためです。

screen を使用してデバイスに接続し、ランダムなものを入力して Enter キーを押します。php 出力に表示されます。

于 2016-01-05T15:44:03.137 に答える