私は現在、シリアルポート経由でMBEDと通信する必要があるプロジェクトに取り組んでいます。C# - SerialPortクラスとのハンドシェイクの例
私はmsdnサイトを読んだが、分かりません。
誰でも私に教えたり、使用方法の例を示すことができますSerialPort.Handshake
(XonXoff
またはRequestToSend
)?
私の主なリクエスト設定方法:C#が特定の文字列を読み込んだ場合、データを送信します。
私は現在、シリアルポート経由でMBEDと通信する必要があるプロジェクトに取り組んでいます。C# - SerialPortクラスとのハンドシェイクの例
私はmsdnサイトを読んだが、分かりません。
誰でも私に教えたり、使用方法の例を示すことができますSerialPort.Handshake
(XonXoff
またはRequestToSend
)?
私の主なリクエスト設定方法:C#が特定の文字列を読み込んだ場合、データを送信します。
まず第一に、ハンドシェイクはあなたが必要としているものではないと思います。ハンドシェイクは、データを送信するかどうかを制御する低レベルの通信です。 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
}
}
msdnはお友達です。 https://msdn.microsoft.com/en-us/library/system.io.ports.serialport(v=vs.110).aspx – Oswald
「使用」しないでください。一致する値を与える必要がありますデバイスが必要とするハンドシェイク。それが間違っていると問題が起きると、デバイスからデータが取得されないか、デバイスが送信したデータを無視するか、ランダムなデータ損失が発生します。インターネット上で見知らぬ人に質問したり、デバイスに精通している人と話をしたり、何が必要なのかを常に知ったりすることはありません。 –
@HansPassantの洞察力のおかげで、C#でハンドシェークがどのように動作するか分からなかった –