读书人

c#串口接收数据有关问题

发布时间: 2012-06-13 12:30:18 作者: rapoo

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);        } 

读书人网 >C#

热点推荐