如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
.NET下的SerialPort(串口)应用背景随着USB的流行,串口通讯已经应用到日常生活的很多方面了,USB是一种高速的串口通讯协议,USB接口非常复杂,通常被用在需要传输大量数据的地方,如U盘、相机、打印机等。除了USB这种较为奢侈的串口外,在工控和嵌入式行业,大量被使用的是另一种古老的串口协议,RS-232串口。RS-232是一种非常简洁的低速串口通讯接口,它可以同时进行数据接收和发送的工作。现在大多数硬件设备均采用串口技术与计算机相连,因此串口的应用程序开发越来越普遍。例如,在计算机没有安装网卡的情况下,将本机上的一些信息数据传输到另一台计算机上,那么利用串口通信就可以实现。.NET下的串口简介.NETFramework提供了对串口通信功能的支持,有关类可以在命名空间System.IO.Ports下找到,程序集是System.dll。这其中最为重要的是SerialPort类。通过创建一个新的SerialPort对象,我们就可以在.NET程序中控制串口通讯的全过程。应用使用SerialPort设置串口属性进行串口通讯时,需要设置一些相关参数,可以通过设置SerialPort类的属性来进行。串口属性主要包括PortName串口名称,COM1,COM2等。BaudRate波特率,也就是串口通讯的速度,进行串口通讯的双方其波特率需要相同,如果用PC连接其他非PC系统,一般地,波特率由非PC系统决定。Parity奇偶校验。可以选取枚举Parity中的值。DataBits数据位,一般为8。StopBits停止位,可以选取枚举StopBits中的值。Handshake握手方式,也就是数据流控制方式,可以选取枚举Handshake中的值。注意:C#中SerialPort类对串口供电需要设置DtrEnable和RtsEnable两个属性在开发中有些串口设备需要串口供电,使用C#中的SerialPort类默认情况下不会出发DataReceived函数,但使用超级终端却可以接收到数据,这是因为SerialPort类的DtrEnable和RtsEnable两个属性默认是false,设为true即可接收数据了。打开与关闭串口在创建一个SerialPort对象,设置串口属性后,可以通过Open()方法打开串口。数据读写完成后,可以通过Close()方法关闭串口。根据经验,对于有些系统,在打开串口后,还需要将RtsEnable设置为True,这样才能读写数据,否则不能正常读写数据。获取本机提供的串口这个功能主要是由SerialPort类中静态函数GetPortNames完成的。该函数返回一个包含所有串口名的数组,通过对数组操作即可实现相应的功能。如下代码:上述代码实现一个简单的功能,就是在控制台中输出所有串口名。检测设备对串口进行操作,必须要有操作的设备,因此检测设备在某些情况是必不可少的。这个功能主要是由属性DsrHolding决定的。当有设备时,属性值是true;否则是false。在固定间隔时间内对该属性进行访问,即可实现实时检测设备的功能。读写行数据双方通讯时,一般都需要定义通讯协议,即使最简单的通过串口发送文本聊天的程序。通常是在当一方按下回车时,将其所输入的文本连同换行符发给另一方。在这个通讯事例中,协议帧是通过换行符界定的,每一帧数据都被换行符隔开,这样就很容易识别出通讯双发发送的信息。可以用WriteLine()来发送数据,用ReadLine()来读取数据。WriteLine发送完数据后,会将换行符作为数据也发送给对方。ReadLine()读取数据时,直至遇到一个换行符,然后返回一个字符串代表一行信息。换行符可以通过SerialPort的属性NewLine来设置。一般地,Windows将CrLn作为换行符,而在Linux下,换行符则只用一个Ln表示。ReadLine()方法是阻塞的,直至遇到一个换行符后返回。在读取数据时,如果一直没有遇到换行符,那么在等待ReadTimeout时间后,抛出一个TimeoutException。默认情况下,ReadTimeout为InfiniteTimeout。这样,ReadLine一直处于阻塞状态,直至有新一行数据到达。WriteLine()方法也是阻塞的,如果另一方不能及时接收数据,就会引起TimeoutException异常。由于ReadLine()和WriteLine()方法都是阻塞式的,在程序使用SerialPort进行串口通讯时,一般应该把读写操作交由其他线程处理,避免因为阻塞而导致程序不响应。读写字节或字符数据对于字节或字符数据,用Read()方法来读数据,该方法需要一个字节或字符数组作为参数来保存读取的数据,结