データを受信してリッチテキストボックスに表示できるフォームがありますが、必要なのは、シリアルポートから継続的に送信されるデータを読み取り、それに応じてデコードすることです。
例: フレーム n の開始を示すために使用される形式でデータをバイト単位で受信しています36 0 0 0 1 0 0...., 36
。残りは、イベントが発生するデータです。
私のコード:
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
// get number off bytes in buffer
Bytenumber = serialPort1.BytesToRead;
// read one byte from buffer
ByteToRead = serialPort1.ReadByte();
this.Invoke(new EventHandler(DoUpdate));
}
上記のコードは、データを受信してイベントを発生させるために使用されます。イベントのコードは次のとおりです。
int w=0;
public void DoUpdate(object sender, System.EventArgs e)
{
byte[] t = new byte[Bytenumber];
for(int g=0; g<Bytenumber;g++)
{
t[g] = Convert.ToByte(ByteToRead);
}
w++;
// richTextBox1.Text += ByteToRead;
if (ByteToRead == 36)
{
for (int r = 0; r <= 73; r++)
{
if (ByteToRead == 0x01)
{
timer1.Start();
w++;
}
}
}
}
36
バッファから 1 を探していることがわかったら、データ受信イベント ハンドラ(つまり、フレームの開始) を探します。問題は、取得時36
(つまり、フレームの開始時) に同じデータが if ループに保持され、1 と比較しようとすることです。必要なのは、36 を取得したら、バッファから来るデータの次のバイトを読み取ることだけです。