串口数据接收

Serial-port Datareceive

我遇到串口数据问题。我设计了一个表单,我在其中使用了数据接收处理程序事件,并且需要将整个数据打印在放置在表单中的 RichTextBox 中。问题是我只接收 RichTextBox 上的最后几位数据,而随代码提供的 MessageBox 部分运行全部数据。请提前告诉我要去的地方wrong.Thanks。

public partial class Form1 : Form
    {
        char po='[=10=]';
        string indata,pi;
        string[] buffer;
        public Form1()
        {
            InitializeComponent();
            System.ComponentModel.IContainer components = new System.ComponentModel.Container();
            serialPort1 = new System.IO.Ports.SerialPort(components);
            serialPort1.PortName = "COM1";
            serialPort1.BaudRate = 9600;
            serialPort1.DtrEnable = true;

            serialPort1.DataReceived += new SerialDataReceivedEventHandler(serialPort1_DataReceived);
            serialPort1.Open();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            SerialPort sp = (SerialPort)sender;
            po = Convert.ToChar(serialPort1.BytesToRead);


           indata = sp.ReadExisting();
           //return (indata);
                //for (int p = 0; p <= 256; p++) ;
                //MessageBox.Show(buffer[0]);



            //MessageBox.Show(indata);
            //richTextBox1.Text += indata;
            //richTextBox1.Text = indata;
        }

        private void button1_Click(object sender, EventArgs e)
        {

            richTextBox1.WordWrap = true;
            richTextBox1.Text = indata;
        }


    }

看起来你应该在每次通过串行端口接收数据时附加数据,所以也许你应该更改

indata = sp.ReadExisting();

至:

indata += sp.ReadExisting();

保存串行数据的所有内容,包括之前发送的历史数据。

希望对您有所帮助!

正在尝试此代码....

private string StrValue = "";
private void Port_DataReceived(object sender, 
System.IO.Ports.SerialDataReceivedEventArgs e)
{
    double DouRWeight = 0;    
    try
    {
        DouRWeight = Val.ToDouble(Port.ReadLine());
        if (DouRWeight != 0)
        {
             this.Invoke((System.Windows.Forms.MethodInvoker)delegate()
             {
                 StrValue   = Val.Format(DouRWeight.ToString(), "####0.000");
             }
        }
    }
}
private void button1_Click(object sender, EventArgs e)
{
        richTextBox1.WordWrap = true;
        richTextBox1.Text = StrValue ;
}

完全成功...