C#中的串口

时间:2011-03-21 00:59:41

标签: c#

我正在使用一个程序从文件中读取数据并将其实时绘制到图形中。我的流来自微控制器输出,我正在构建一个界面来显示数据。我在日常工作中使用流阅读器,但我遇到了问题。

我决定直接使用串口数据。当我尝试使用刚刚从端口读取的变量行时出现错误。我不知道我做错了什么。

感谢。

        int tickStart = 0;
        System.IO.Ports.SerialPort port;
        public string portname;
        public Parity parity;
        public int BaudRate;
        public StopBits stopbits;
        public int databits;
        int count;

        String line;

        public string PortName
        {
            get { return portname; }
            set { portname = value; }
        }

        private void Form1_Load( object sender, EventArgs e )
        {
        //graphing stuff    
            count = 0;
            portname = "COM1";
            parity = Parity.None;
            BaudRate = 9600;
            stopbits = StopBits.Two;
            databits = 8;
            port = new System.IO.Ports.SerialPort(portname);
            port.Parity = parity;
            port.BaudRate = BaudRate;
            port.StopBits = stopbits;
            port.DataBits = databits;
            port.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
            port.Open();
            count = 0;
            }


        void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
          try
            {
             line = port.ReadLine(); 
              count++;
              }
          catch (Exception ex)
             {
              MessageBox.Show(ex.Message);
          }
         }



        private void timer1_Tick( object sender, EventArgs e )
        {
            //graphing stuff
            if (list == null)
                return;

            // Time is measured in seconds
            double time = (Environment.TickCount - tickStart) / 1000.0;

            double value = double.Parse(line);
            list.Add(time, value);
           //graphing stuff

          }

2 个答案:

答案 0 :(得分:2)

在timer1_Tick中,除了'list == null'之外,还要为'line == null'添加额外的检查。

假设您的数据不会超过计时器的点火率,并且收到的数据一次性到达。

答案 1 :(得分:1)

如果我理解正确,会发生的事情是计时器在第一次从端口读取值之前计时。这意味着line == null仍然存在,因此您会收到错误。

最好的解决方案是在读取至少一行之前不启动计时器,但检查null也可以解决问题。