以下の形式に従って PC のシリアル ポートにデータを送信するマイクロコントローラーを使用しています。
Start Byte = 0x7E
Data Bytes ...........
StopByte = 0x7E
したがって、基本的には、このパケットをバイト配列で読み取りたいと考えています。DataReceived
クラスのイベントを使用してこれを実行しようとしていSerialPort
ますが、失敗するだけで、適切なデータパケットを完全に受信することはありません:
private List<int> _readBuffer = new List<int>();
private void Connection_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
var sp = (SerialPort)sender;
var indata = sp.ReadChar();
if (indata == 0x7E && _readBuffer.Count == 0)
_readBuffer.Add(indata);
if(_readBuffer.Count > 0 && indata != 0x7E)
_readBuffer.Add(indata);
if(_readBuffer.Count > 0 && indata == 0x7E)
{
_readBuffer.Add(indata);
//Dump packet to textbox
Invoke(new EventHandler((o, args) =>
{
foreach(var i in _readBuffer)
{
tbIn.Text += string.Format("{0:X} ", i);
}
_readBuffer = new List<int>(); //Renew the reading buffer array!
}));
}
}
何が問題なのかわかりません。次のように、テキストボックスへの開始バイトと終了バイトのみを取得します。
7E 7E
正しいパケットは次のとおりです。
7E 0 43 00 FF FF 0 0 7E
あなたのヒント/トリックを楽しみにしています!