0

シリアル コンソール セッションがあり、デバイスからの特定の質問に答える必要があります。コマンド「setup」を入力すると、デバイスはセットアップ ウィザードを開始し、いくつか質問されます。関連する質問に対する値/回答を自動入力するために、この設定を可能な限り自動化したいです。

これらの質問は、オペレーティング システムのバージョンに関するもので、質問の順序も常に少し異なります。ここで正規表現が役立つ場合があります。

シリアル接続されたデバイスにデータを送信し、その出力を読み取る最良の方法は何ですか? 次のスクリプトでこれを解決しようとしましたが、コンソール ログを読み取ることができない Windows Web サーバーの下にあります。

    <!DOCTYPE html>
    <html>
        <header>
            <meta charset="utf8">
        </header>
    <body>
    <?php

    //-- settings --//

    //brainboxes serial ports
    //on 'nix start with cu.usbserial-
    //on windows starts with com : must be lower case in windows and end with a colon
    $portName = 'COM35';
    $baudRate = 9600;
    $bits = 8;
    $spotBit = 1;

    ?>
    Serial Port Test<br>
    ================<br>
    <br>
    <?php


    function echoFlush($string)
    {
        echo $string . "\n";
        flush();
        ob_flush();
    }

    if(!extension_loaded('dio'))
    {
        echoFlush( "PHP Direct IO does not appear to be installed for more info see: http://www.php.net/manual/en/book.dio.php" );
        exit;
    }

    try 
    {
        //the serial port resource
        $bbSerialPort;

        echoFlush(  "Connecting to serial port: {$portName}<br><br>" );

        if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') 
        { 
            $bbSerialPort = dio_open('\\\\.\COM35', O_RDWR);
            //we're on windows configure com port from command line
            exec("mode {$portName} baud={$baudRate} data={$bits} stop={$spotBit} parity=n xon=on");
        } 
        else //'nix
        {
            $bbSerialPort = dio_open('\\\\.\COM35', O_RDWR | O_NOCTTY | O_NONBLOCK );
            dio_fcntl($bbSerialPort, F_SETFL, O_SYNC);
            //we're on 'nix configure com from php direct io function
            dio_tcsetattr($bbSerialPort, array(
                'baud' => $baudRate,
                'bits' => $bits,
                'stop'  => $spotBit,
                'parity' => 0
            ));
        }

        if(!$bbSerialPort)
        {
            echoFlush( "Could not open Serial port {$portName}<br><br>");
            exit;
        }

        // send data

        $dataToSend = "version\n";
        echoFlush( "Writing to serial port data: \"{$dataToSend}\"<br>" );
        if($bytesSent = dio_write($bbSerialPort, $dataToSend )) {
            echoFlush( "Sent: {$bytesSent} bytes<br><br>" );

            echoFlush(  "Closing Port" );

            dio_close($bbSerialPort);
        }
    }
    ?>
    </body>
    </html>

誰かが私を助けてくれることを願っています。

注: デバイスは NetApp FAS-Head です。

4

1 に答える 1