嗨,我一直在研究串口数据接收事件处理程序,我有一个 Windows 窗体,通过它我每 1ms 连续接收数据,数据格式为 $,0,0,0,0,0,1,0,0,0 ,0,................0. 这里 $- 表示帧的开始 & 后面是包含 0 的 72 位数据,并且 72 位中的特定位是 1 表示错误。在消息格式中,1 表示错误,0 表示执行某些操作时没有错误。所以我必须从串口读取数据并将其保存在一个数组中。保存数据后,我必须寻找美元来指示帧的开始和 1 的计数,通过它我可以相应地添加事件。$,0,1,0,0,0....0,0,0,- 72 位宽的消息,消息帧中的 1 表示设备中的错误,因此相应的事件。
我的代码:
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
List<byte> dataBuffer = new List<byte>();
var sp = (SerialPort)sender;
var indata = sp.ReadChar();
if (indata == 0x24 && dataBuffer.Count == 0)
{
while (serialPort1.BytesToRead > 0)
dataBuffer.Add((byte)serialPort1.ReadByte());
ProcessBuffer(dataBuffer);
dataBuffer.Clear();
}
}
int g=0;
private void ProcessBuffer(List<byte> comBuffer)
{
byte[] dataSend = new byte[serialPort1.BytesToRead];
for (int c = 0; c <= 72; c++)
{
if (comBuffer[c] == 0x01)
{
g = c;
}
}
}