0

重複の可能性:
PHP preg_match は、スペースの後に単語を取得します。これは単語 KG です。

私は PHP で Web アプリケーションを開発しています。私のアプリはスケール デジタルと通信しています。phpserial クラスのヘルプを使用しています。私の問題は、データがブラウザで出力され、スケール デジタルでの出力と一致しないことです。スケールのデジタルが16KGの場合、ブラウザーの出力はNT,ST+16KGであり、ブラウザーを再度更新すると、~!NT,ST+16KG, 16KGのように他のものを取得します。私の質問は、ブラウザでわずか16KGのデータを取得する方法です。

これは、データを読み取るスクリプトです。

<?php
$serial = new phpSerial();
$serial->deviceSet("/dev/ttyUSB1");
$serial->confBaudRate(9600); //Baud rate: 9600 
$serial->confParity("none"); //Parity (this is the "N" in "8-N-1") 
$serial->confCharacterLength(8); //Character length (this is the "8" in "8-N-1") 
$serial->confStopBits(1); //Stop bits (this is the "1" in "8-N-1") 
$serial->confFlowControl("none"); 

$serial->deviceOpen();

$serial->sendMessage(chr(1));
$tes = $serial->readPort();
print_r($tes);
// get result ~!NT,ST+16KG, 16KG or NT,ST+16KG
$serial->deviceClose();
?>

これはクラス phpSerial のコード関数 readPort です。

function readPort ($count = 0)  {
        if ($this->_dState !== SERIAL_DEVICE_OPENED)
        {
            trigger_error("Device must be opened to read it", E_USER_WARNING);
            return false;
        }

            $content = ""; $i = 0;

            if ($count !== 0)
            {
                do {
                    if ($i > $count) $content .= fread($this->_dHandle, ($count - $i));
                    else $content .= fread($this->_dHandle, 128);
                } while (($i += 128) === strlen($content));
            }
            else
            {
                do {
                    $content .= fread($this->_dHandle, 128);
                } while (($i += 128) === strlen($content));
            }

            return $content;
    }

私は、/dev/ttyUSB1 で Linux のポート スケール デジタル検出を使用して開発しています。つまり、この問題は ASCII であるため、問題を解決するのに役立ちます。ありがとう。

4

0 に答える 0