我正在使用根据以下格式将数据发送到 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
期待您的提示/技巧!