こんにちは、私はシリアル ポート データ受信イベント ハンドラーに取り組んでいます。1 ミリ秒ごとに継続的にデータを受信している Windows フォームがあり、データ形式は $,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;
}
}
}