c#串口接收数据问题
- C# code
void com_Recived(object sender, SerialDataReceivedEventArgs e) { int n = comm.BytesToRead; byte[] b = new byte[n]; comm.Read(b, 0, n); builder.Append(Encoding.ASCII.GetString(b)); String line = builder.ToString();// str = line.Substring(6, 4); this.Invoke((EventHandler)(delegate { this.richTextBox1.AppendText(str); })); }
上面是串口数据接收代码,连接的是一块称重仪表,其实我想得到的是 str
如果输出line line的数据是随着仪表数据变化而变化的
但是我输出str 只不断输出第一个数据,无论仪表怎么变化只数据第一个数据
高手请不吝赐教
[解决办法]
builder.Append,没有清空builder,一直在增加,ToString()后,取line.Substring(6, 4)永远都是第一条数据的Substring(6, 4);str当然不会变了
你应该取每次 Encoding.ASCII.GetString(b) 的 Substring 而不是整个builder的Substring
[解决办法]
估计richTextBox1没有刷新。AppendText之后加Refresh试试
[解决办法]
是不是得用循环呀。。。
[解决办法]
串口接收数据要用委托.
- C# code
public delegate void _SafeAddtrTextCall(string text);//定义一个委托 private void safeAddtrText(string text) { if (this.InvokeRequired) { _SafeAddtrTextCall call = delegate(string s) { textBox41.Text +=s; }; this.Invoke(call, text); } else { textBox41.Text += text; } }private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e) { string tmpstr = ""; string a = ""; for (int i = 0; i < serialPort1.BytesToRead; i++) { a = Convert.ToString(serialPort1.ReadByte(), 16); tmpstr += a + " "; } tmpstr = tmpstr.ToUpper(); safeAddtrText(tmpstr); }