.NET 串口通信

  这段时间做了一个和硬件设备通信的小项目,涉及到扫描头、输送线、称重机、贴标机等硬件。和各设备之间通信使用的是串口或网络(Socket)的方式。扫描头和贴标机使用的网络通信,输送线和称重机使用的是串口通信。

  串口通信,以前一直觉得神秘,没想到用起来却这么简单。当然,这样简单要归功于 .NET 对其操作的封装。

  .NET 里提供了专门操作串口的类 System.IO.Ports.SerialPort,可以操作串口收发数据。只需要 new 一个对象,简单配置一下相关属性,就可以使用串口收发数据了。

  SerialPort 类常用的属性有 PortName、BaudRate、DataBits、StopBits、Parity 等。PortName 是端口名称,如COM1、COM2等,默认COM1;BaudRate 是波特率,默认 9600;DataBits 是数据位,默认是 8;StopBits 是停止位,默认是System.IO.Ports.StopBits.One、Parity 设定奇偶校验,默认是System.IO.Ports.Parity.None。

  其中端口名称设置的是你通信使用的本地端口的名称,其它参数,一般默认。具体意思?关我毛事!和设备约定相同就行了。

  所以,一般来说,使用串口的准备操作,就这么简单:

1             System.IO.Ports.SerialPort com1 = new System.IO.Ports.SerialPort();
2             com1.PortName = "COM1";  //端口名称,默认COM1
3             com1.BaudRate = 9600;  //波特率,默认9600
4             com1.DataBits = 8;  //数据位,默认8
5             com1.StopBits = System.IO.Ports.StopBits.One;  //停止位,默认 System.IO.Ports.StopBits.One
6             com1.Parity = System.IO.Ports.Parity.None;  //奇偶校验,默认 System.IO.Ports.Parity.None

  如果都使用的默认参数,还可以精简成这样:

1             System.IO.Ports.SerialPort com1 = new System.IO.Ports.SerialPort("COM1");

  当然,对硬件设备的操作需要在使用前后打开或关闭资源。SerialPort 类提供了 Open 和 Close 方法用来打开或半闭串口。

  打开以后,就可以向端口读写数据了。

  SerialPort 类提供了 Write 和 WriteLine 两个方法向串口发送数据。Write 发送一个 byte 数组,和一般的流操作类似;WriteLine 可以直接发送一个字符串。

  SerialPort 类提供了 Read、ReadByte、ReadChar、ReadExisting、ReadLine 和 ReadTo 等方法可以从串口中读取数据。Read 可以把数据读取到一个 byte 数组;ReadByte 可以读取一个字节;ReadChar 可以读取一个字符;ReadExisting 可以读取当前可读取的所有数据;ReadLine 可以读取一行数据;ReadTo 这个我没用过。

  当然如果没有数据,就读取不到了。我们可以使用 BytesToRead 属性获取可读取的数据长度,如果长度为 0,就说明串口中没有接收到数据。如果需要监听端口数据,就可以单独开一个线程反复读取。

  除了使用反复读取来监听串口数据,还可以使用 SerialPort 类提供的 DataReceived 事件来监听串口中接收到的数据,当串口中有可读取的数据,系统会自动触发 DataReceived 事件处理程序。设置代码如下:

1             System.IO.Ports.SerialPort com1 = new System.IO.Ports.SerialPort("COM1");
2             com1.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(Com1_DataReceived);

  回调方法声明如下:

1         private void Com1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
2         {
3             
4         }

  理论讲完了,下面写一个简单的 Demo 实验一下。

  因为要验证收发数据,需要用到一个串口虚拟化的软件。该软件可以在 PC 上成对的虚拟串口,可以实现对 COM1 发的数据,COM2 中接收到。

  环境搭建好以后,编写代码试着在单击按钮的时候,将文本框的内容写入 COM1,然后从 COM2 中读取,并使用对话框弹出来。

  新建一个窗体,拖入一个文本框 textbox1 和一个按钮 button1,然后添加操作代码,如下:

 1     public partial class Form1 : Form
 2     {
 3         System.IO.Ports.SerialPort COM2 = null;
 4 
 5         public Form1()
 6         {
 7             InitializeComponent();
 8         }
 9 
10         private void Form1_Load(object sender, EventArgs e)
11         {
12             COM2 = new System.IO.Ports.SerialPort("COM2");
13             COM2.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(Com2_DataReceived);
14             COM2.Open();
15         }
16 
17         private void Form1_FormClosing(object sender, FormClosingEventArgs e)
18         {
19             COM2.Close();
20             COM2 = null;
21         }
22 
23         private void button1_Click(object sender, EventArgs e)
24         {
25             System.IO.Ports.SerialPort com1 = new System.IO.Ports.SerialPort("COM1");
26             com1.Open();
27             com1.WriteLine(this.textBox1.Text);
28             com1.Close();
29         }
30 
31         private void Com2_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
32         {
33             System.IO.Ports.SerialPort com = (System.IO.Ports.SerialPort)sender;
34             MessageBox.Show(com.ReadExisting());
35         }
36     }


  运行,测试,如图:


  
  

转载于:https://www.cnblogs.com/zhhh/p/3326083.html

书名:《Visual C#.NET串口通信及测控应用典型实例》(电子工业出版社.李江全.邓红涛.刘巧.李伟) PDF格式扫描版,全书分为8章,共369页。2012年5月出版。 全书压缩打包成3部分,这是第1部分 内容简介 本书从工程应用的角度出发,通过8个典型应用实例,包括PC与PC、PC与单片机、PC与PLC、PC与远程I/O模块、PC与智能仪器、PC与无线数传模块、Pc与USB数据采集模块等组成的测控系统,利用SerialPort控件和MSComm控件编写C#.NET串口通信程序,并对计算机测控系统中的4类典型应用((模拟量输入(AI)、模拟量输出(AO)、数字量输入(DI)和数字量输出(DO)的程序设计方法进行了详细的讲解。 目 录 第1章 PC与PC串口通信 1.1 串口通信概述 1.1.1 串口通信的基本概念 1.1.2 RS-232C接口标准 1.1.3 RS-422/485接口标准 1.1.4 串口通信线路连接 1.1.5 PC中的串行端口 1.1.6 虚拟串口的使用 1.2 VC++.NET串行通信控件与API函数 1.2.1 MSComm控件的使用 1.2.2 SerialPort控件的使用 1.2.3 串行通信API函数 1.3 PC与PC串口通信实例 1.3.1 两台PC串口通信 1.3.2 一台PC双串口互通信 第2章 PC与单片机串口通信 2.1 典型单片机开发板简介 2.1.1 单片机测控系统的组成 2.1.2 单片机开发板B的功能 2.1.3 单片机开发板B的主要电路 2.2 PC与单片机串口通信实例 2.2.1 PC与单个单片机串口通信 2.2.2 PC与多个单片机串口通信 2.3 PC与单片机串口通信测控应用实例 2.3.1 模拟量输入 2.3.2 模拟量输出 2.3.3 开关量输入 2.3.4 开关量输出 第3章 PC与西门子PLC串口通信 3.1 西门子PLC模拟量扩展模块与通信协议 3.1.1 西门子PLC模拟量输入模块 3.1.2 西门子PLC PPI通信协议 3.2 PC与西门子PLC串口通信测控应用实例 3.2.1 模拟量输入 3.2.2 模拟量输出 3.2.3 开关量输入 3.2.4 开关量输出 第4章 PC与三菱PLC串口通信 4.1 三菱PLC特殊功能模块与通信协议 4.1.1 FX2N系列PLC的特殊功能模块 4.1.2 三菱PLC编程口通信协议 4.2 PC与三菱PLC串口通信测控应用实例 4.2.1 模拟量输入 4.2.2 模拟量输出 4.2.3 开关量输入 4.2.4 开关量输出 第5章 PC与分布式I/O模块串口通信 5.1 典型分布式I/O模块简介 5.1.1 集散控制系统的结构与特点 5.1.2 ADAM4000远程数据采集控制系统 5.1.3 ADAM4000系列模块简介 5.1.4 ADAM4000系列模块的软件安装 5.2 PC与分布式I/O模块串口通信测控应用实例 5.2.1 模拟量输入 5.2.2 模拟量输出 5.2.3 数字量输入 5.2.4 数字量输出 第6章 PC与智能仪器串口通信 6.1 典型智能仪器简介 6.1.1 智能仪器的结构与特点 6.1.2 XMT-3000A型智能仪器的通信协议 6.2 PC与智能仪器串口通信测控应用实例 6.2.1 PC与单台智能仪器温度测控 6.2.2 PC与多台智能仪器温度测控 第7章 PC与无线数据传输模块串口通信 7.1 典型无线数传模块简介 7.1.1 无线数传技术概述 7.1.2 DTD46X系列无线数传模块 7.2 PC与无线数传模块串口通信测控应用实例 7.2.1 设计任务 7.2.2 线路连接 7.2.3 利用C51语言实现基于DS18B20的单片机温度测控 7.2.4 利用汇编语言实现基于DS18B20的单片机温度测控 7.2.5 利用VC++.NET实现PC与无线数传模块温度测控 第8章 USB串行总线模块测控应用 8.1 USB总线在数据采集系统中的应用 8.1.1 USB总线及其数据采集系统的特点 8.1.2 采用USB传输的数据采集系统 8.1.3 典型USB数据采集模块及应用 8.1.4 VC++.NET数据采集与控制的方式 8.2 PC与USB数据采集模块测控应用实例 8.2.1 模拟量输入 8.2.2 模拟量输出 8.2.3 数字量输入 8.2.4 数字量输出 参考文献
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值