1

PC の COM ポートでデバイスの出力を読み取ろうとしています。私はそうするためにC#プログラムを書きました。PuTTY を使用すると、デバイスから期待される出力を確認できます。問題は、関数SerialPort.ReadExisting();内のDataReceived関数が完全に異なる文字列を与えることです。を使用して COM ポートから読み取る適切な方法は何SerialPortですか?

また、取得するSerialPort.ReadExisting();文字列は、デバイスに送信した文字列のフラグメントです。

以下は、を初期化するコードですSerialPort

    SerialPort port;

    void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
        string data = port.ReadExisting();
    }

    void init_serialport(object sender, EventArgs e)
    {
        if (port != null)
        {
            port.Close();
        }

        port = new SerialPort( /* ... */ );
        port.BaudRate = 9600;
        port.Parity = Parity.None;
        port.DataBits = 8;
        port.StopBits = StopBits.One;
        port.Handshake = Handshake.RequestToSend;

        port.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);

        try
        {
            port.Open();
        }
        catch (Exception ex)
        {
             // ...
        }
    }
4

3 に答える 3

1

SerialPort.ReadExisting();から取得した文字列。デバイスに送信した文字列のフラグメントです。

SerialPort.ReceivedBytesThresholdを見てみます。

「DataReceivedイベントが発生する前に、内部入力バッファーのバイト数を取得または設定します。」

于 2013-02-19T09:54:34.970 に答える
0

SerialPort.Existing()の実行と完了が、送信デバイスが文字列全体を送信するのにかかる時間よりも短いため、フラグメントを受信しました。

継続的に、または文字列に文字列の終わり文字がある場合は文字列の終わりを受け取るまで、呼び出しを繰り返す必要があります。

于 2013-02-19T12:49:20.443 に答える
0

最初にポート オブジェクトの Read メソッドを調べ、未加工のバイトを調べて、期待どおりであることを確認します。これにより、問題を文字列への変換時のエンコーディングに絞り込むことができます。

詳細については、こちらを参照してください。

于 2013-02-18T13:54:13.717 に答える