2016-11-02 66 views
-1

私は現在、シリアルポート経由でMBEDと通信する必要があるプロジェクトに取り組んでいます。C# - SerialPortクラスとのハンドシェイクの例

私はmsdnサイトを読んだが、分かりません。

誰でも私に教えたり、使用方法の例を示すことができますSerialPort.HandshakeXonXoffまたはRequestToSend)?

私の主なリクエスト設定方法:C#が特定の文字列を読み込んだ場合、データを送信します。

+0

msdnはお友達です。 https://msdn.microsoft.com/en-us/library/system.io.ports.serialport(v=vs.110).aspx – Oswald

+0

「使用」しないでください。一致する値を与える必要がありますデバイスが必要とするハンドシェイク。それが間違っていると問題が起きると、デバイスからデータが取得されないか、デバイスが送信したデータを無視するか、ランダムなデータ損失が発生します。インターネット上で見知らぬ人に質問したり、デバイスに精通している人と話をしたり、何が必要なのかを常に知ったりすることはありません。 –

+0

@HansPassantの洞察力のおかげで、C#でハンドシェークがどのように動作するか分からなかった –

答えて

0

まず第一に、ハンドシェイクはあなたが必要としているものではないと思います。ハンドシェイクは、データを送信するかどうかを制御する低レベルの通信です。 more about handshaking

設定するには、どのように私の主な要求:C#は、特定の文字列を読み込む場合は、 データを送信します。

あなたが必要とするのは、連続したデータの読み取りまたはイベント、および特定の文字列の読み取り後に、データを送信することです。

いくつかの例を見てみましょう。

void connect(){ 
    _port = new SerialPort(); 
    // set port parameters 
    _port.DataReceived += portDataReceived; //set the data received event 
    _port.Open(); 
} 
void portDataReceived(object sender, SerialDataReceivedEventArgs e) 
{ 
    string data = _port.ReadExisting(); 
    if(data.Contains("data-start")) //check for the start data 
    { 
     CreateReply(); // your reply 
    } 
} 

あなたは、whileループ内のデータを読みますが、メインスレッドで実行無限ループが応答してからプログラムをブロックすることのメモを取ることができます。

void connectAndRead(){ 
    _port = new SerialPort(); 
    // set port parameters 
    _port.Open(); 
    _stopReading = false; 

    var dataBuffer = ""; 
    while(!_stopReading) 
    { 
     dataBuffer += _serialPort.ReadLine(); 
     if(!dataBuffer.Contains("data-start")) //check for the start data 
      continue; 

     CreateReply(); // your reply 
     _stopReading = true; // exit loop 
    } 
} 
関連する問題