シリアルポートからのデータ受信に問題があります。毎回12バイトが送信され、各バイトを読み込んで配列に入れ、リッチテキストボックスに表示したい(すべてのバイトが別々の行に表示されます)。しかし、問題があります。データが連続して送信されるとき、私は端末プログラムで受け取っていない、まったく関係のないいくつかの余分な0を取得します。 ここに私のコードがあります。あなたが私を助けることができたらうれしいです。Cで余分なシリアル受信データ#
private void data_received(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
richTextBox1.Invoke(new EventHandler(ReadFromPort));
}
private void ReadFromPort(object sender, EventArgs e)
{
int bytes = 0;
label2.Text = "";
bytes = serialPort1.BytesToRead;
label2.Text = bytes.ToString();
byte[] buffer = new byte[12];
for (int k = 0; k < bytes; k++)
{
buffer[k] = 0;
}
serialPort1.Read(buffer, 0, bytes);
for (int i = 0; i < buffer.Length ; i++)
{
richTextBox1.AppendText(buffer[i].ToString() + Environment.NewLine);
}
}
'new byte [bytes]'の代わりに 'buffer.Length'が' 12'に設定されています。また、 'new byte []'はゼロの配列を返します。値をゼロに設定する必要はありません。また、値を0に設定することは、次の行に上書きするため意味がありません。 – Groo
serialPort1.Readは実際に読み取られたバイト数を返します。これは12未満である可能性があります。コードは常に12バイトを返すと仮定しています。 – Joe
常に12バイトが送信されると確信しています。そして、ターミナルプログラムもそれを確認します。ここで問題となるのは、そこにいるはずのゼロが時々得られるからです。 – srt