如何使用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:)

  1. portName:端口号,如COM1,COM2,COM3……
  2. baudRate:每秒数据位,如9600
  3. parity:是否有奇偶校验
  4. dataBits:数据位
  5. 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:}


界面截图。代码就不贴了。



【如何使用C#读取串口信息】转载于:https://www.cnblogs.com/izualx/archive/2010/12/24/1915767.html

    推荐阅读