如何使用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:}
界面截图。代码就不贴了。
【如何使用C#读取串口信息】转载于:https://www.cnblogs.com/izualx/archive/2010/12/24/1915767.html
推荐阅读
- 考研英语阅读终极解决方案——阅读理解如何巧拿高分
- 由浅入深理解AOP
- 如何寻找情感问答App的分析切入点
- 【译】20个更有效地使用谷歌搜索的技巧
- mybatisplus如何在xml的连表查询中使用queryWrapper
- MybatisPlus|MybatisPlus LambdaQueryWrapper使用int默认值的坑及解决
- MybatisPlus使用queryWrapper如何实现复杂查询
- 如何在Mac中的文件选择框中打开系统隐藏文件夹
- 漫画初学者如何学习漫画背景的透视画法(这篇教程请收藏好了!)
- java中如何实现重建二叉树