【解決方法】計量機からデータを読み取ることができません。一部のマシンでは問題ありませんが、一部のマシンでは機能していません


I tried to read serial port data(which is connected to weighment machine) using php dio exntension(https://pecl.php.net/package/dio). For some weighment machines it's working fine but on some  machines it's not reading the data. I have shown my function below which reads the data from the serial port. Can somebody give me the solution :

私が試したこと:

//Function which read the data from serial port
    public static function getWeight($portName = '', $baudRate = '', $dataBit = '', $stopBit = '')
    {
        $bbSerialPort;
        $bbSerialPort = dio_open($portName, O_RDWR); //open port with read and write permission
        //we're on windows configure com port from command line
        shell_exec("mode {$portName} baud={$baudRate} data={$dataBit} stop={$stopBit} parity=n xon=on");
        $runForSeconds = new DateInterval("PT1S");
        $endTime = (new DateTime())->add($runForSeconds);
        $abc = '';
        //loop for 1 seconds
        while (new DateTime() < $endTime) {
            $data = dio_read($bbSerialPort, 512); //this is a blocking call
            if ($data) {
                preg_match('/(:\d+)/', $data, $abc);
                if (count($abc)) {
                    $abc = $abc[0];
                    if ($abc) break;
                }
            }
        }
        dio_close($bbSerialPort);
        return $abc;
    }

解決策 1

まず、動作するマシンと動作しないマシンの 2 台のマシンを用意します。
それらをアプリに順番に接続し、それが事実であることを確認します。 どちらも正常に動作する場合は、アプリのどこかに構成の問題がある可能性があります。

次に、適切なものを接続し、RealTerm、Serialwatcher などを使用して、16 進数の特定の重みに対して受信されているものを正確に調べます。 後で参照できるように、これをコピーしてください。

次に、「悪い」ものを接続し、同じ重量で同じことを行います。 データを良いものと比較します。

それらが同一に見える場合: コードが両方のマシンの端末アプリとまったく同じ通信設定を使用していることを確認してください。 あらゆる点で完全に同一であると確信している場合は、受信データを 16 進数でログ ファイルに保存するようにプログラムを変更し、それを端末プログラムの出力と比較します。

問題がどこに現れているか、データ POV から実際にどのように見えるかがわかったら、修正を開始できますが、それまではできません!

コメント

タイトルとURLをコピーしました