我正在開發一個小程序,它從串口接收模擬數據並將其顯示到多個文本框中。 數據是來自微型的10位A2D,以兩個十六進制字節的形式和一個字母來標識它來自哪個A2D端口。處理和顯示來自串口的數據 - C#
例如:0x1A的,0×02,A
我的程序接收到的數據確定,並且如果我只顯示在正常工作時間接收模擬值。 我遇到的問題是,當我嘗試接收多個A2D值時,我不確定如何處理傳入數據。
下面的代碼假設在單獨的文本框中顯示3個模擬值,但只有第一個文本框顯示任何數據。什麼是最好的方法去做到這一點?
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
//Initialize a buffer to hold the received data
byte[] buffer = new byte[serialPort1.ReadBufferSize];
int bytes = serialPort1.BytesToRead;
//There is no accurate method for checking how many bytes are read
//unless you check the return from the Read method
bytesRead = serialPort1.Read(buffer, 0, bytes);
nValue = buffer[0] + (buffer[1] << 8);
switch1 = Convert.ToChar(buffer[2]);
switch (switch1)
{
case 'A':
DispString1 = nValue.ToString();
this.Invoke(new EventHandler(textBox0_TextChanged));
break;
case 'B':
DispString2 = nValue.ToString();
this.Invoke(new EventHandler(textBox1_TextChanged));
break;
case 'C':
DispString3 = nValue.ToString();
this.Invoke(new EventHandler(textBox2_TextChanged));
break;
}
}
private void textBox0_TextChanged(object sender, EventArgs e)
{
textBox0.Text = DispString1;
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
textBox1.Text = DispString2;
}
private void textBox2_TextChanged(object sender, EventArgs e)
{
textBox2.Text = DispString3;
}
接收數據的格式是什麼? ''serialPort1.Read'方法之上的註釋非常重要,但是代碼並沒有實現任何處理這個事實,即在收到完整的數據包之前幾乎肯定會調用你的方法。 – 2014-11-25 09:57:47
隨着調試器運行,我可以看到所有已收到。格式爲低字節,高字節,ASCII字符,0x1A0x0200x42。 – Chris 2014-11-25 10:34:48
Hans Passant下面的答案是正確的 - 嘗試讓通訊工作起來,你會有很多樂趣。一旦你有一個完整的數據包,你應該考慮把'Invoke'調用改成'this.Invoke(new Action(()=> {textBox1.Text = nValue.ToString();}));'或類似的東西。 – 2014-11-25 12:03:59