如何使用C#读取串口信息
最近受朋友委托,帮他写一个读取串口的程序。以前只知道需要调用Windows API来实现,查询了MSDN之后发现,从.Net framework 2.0开始,.Net内部已经封装了SerialPort类,使得读取串口内容变得非常容易。
SerialPort位于System.IO.Ports namspace下面。常用的构造函数为
1: public SerialPort(
2: string portName,
3: int baudRate,
   4:      Parity parity,5: int dataBits,
   6:      StopBits stopBits   7:  )- portName:端口号,如COM1,COM2,COM3……
 - baudRate:每秒数据位,如9600
 - parity:是否有奇偶校验
 - dataBits:数据位
 - stopBits:停止位
 
这些可以更据具体的硬件指标设定。
此外SerialPort类,还提供了以下属性。
Handshake:设置握手协议,(None,XOnXOff,RequestToSend 和 RequestToSendXOnXOff
WriteTimeout:写入数据时,多久超时
ReadTimeout:读取数据时,多久超时
我主要是通过窜口读取数据,所以使用了SerialPort类的DataReceived事件,这个事件调用的时候要注意一点。我们不可以再这个事件内直接更新UI内容,如给textbox赋值。微软的官方解释是,这个事件其实是在另外一个线程(非GUI线程)内触发的。
以下是我的一个简单范例程序:
1: using System;
2: using System.ComponentModel;
3: using System.Drawing;
4: using System.IO.Ports;
5: using System.Windows.Forms;
   6:   7: namespace Reader
   8:  {9: public partial class MainForm : Form
  10:      {11: private static SerialPort _serialPort = null;
  12:   13: public MainForm()
  14:          {  15:              InitializeComponent();  16:          }  17:   18: void _serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
  19:          {20: this.Invoke(new EventHandler(DoUpdate));
  21:          }  22:   23: private void DoUpdate(object s, EventArgs e)
  24:          {25: this.lbText.Text = _serialPort.ReadExisting();
  26:          }  27:   28: private void btnStart_Click(object sender, EventArgs e)
  29:          {30: _serialPort = new SerialPort("COM3", 9600, Parity.None, 8, StopBits.One);
  31:              _serialPort.Handshake = Handshake.RequestToSendXOnXOff;32: _serialPort.DataReceived += new SerialDataReceivedEventHandler(_serialPort_DataReceived);
  33:              _serialPort.Open();  34:   35: this.btnStart.Enabled = false;
  36:          }  37:      }  38:  }界面截图。代码就不贴了。
                    
                
                
            
        
浙公网安备 33010602011771号