我正在做一个项目,我通过串口发送命令并等待响应处理。它遵循某种协议。
我面临的问题是我收到的回复不完整,所以我无法处理它。一些响应在一个事件早期就出现了,而另一些则在之后响应。
我期待的回应是这样的:
05-00-0F-01-02-00-08-E2-00-60-03-11-73-D2-C1-86-5C
但我只会收到05-00
,其余的会在之后发生,它会不时变化,所以我无法预测。
我需要将响应存储到缓冲区,直到它完成然后处理它。我怎样才能做到这一点?
我从串口接收的方式是这样的:
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
try
{
int ByteToRead = serialPort1.BytesToRead;
//create array to store buffer data
byte[] inputData = new byte[ByteToRead];
//read the data and store
serialPort1.Read(inputData, 0, ByteToRead);
//invoke the display in another thread
this.BeginInvoke(new DelegateDisplay(Display), new object[] { inputData });
}
catch (SystemException ex)
{
MessageBox.Show(ex.Message, "Serial Port Error ");
}
}
然后在这里处理和显示:
public void Display(byte[] inputData)
{
try
{
TboxOutput.AppendText(BitConverter.ToString(inputData, 0) + "\n");
//Add recieved data to List
List<byte> Data = new List<byte>();
try
{
for (int i = 0; i < inputData.Length; i++)
{
Data.Add(inputData[i]);
}
}
catch (SystemException ex)
{
MessageBox.Show(ex.Message + "Data Process");
}
}
catch (SystemException ex)
{
MessageBox.Show(ex.Message, "Display Error");
}
}