基于VB.net的串口通信方法设计

2012-04-29 18:06:37刘东
电脑知识与技术 2012年34期
关键词:串口通信

刘东

摘要:串口通信广泛应用于工业控制领域,是一种最常见的通信技术,开发串口通信软件是必不可少的。由于编程语言VisualStudio的不断升级,VisualStudio.Net中采用功能较强的SerialPort类替换低版本中的MSComm控件。该文以开发实例详细介绍VB.net编程环境中采用SerialPort类如何开发串口通信软件。

关键词:串口通信;VB.net;SerialPort;巡检系统

中图分类号:TP273 文献标识码:A 文章编号:1009-3044(2012)34-8304-04

1概述

串口通信(SerialCommunications),是指外设和计算机间,通过数据信号线、地线、控制线等,按位进行传输数据的一种通讯方式。串口通信是计算机上一种常用的设备通信协议,串行接口按电气标准及协议来分包括RS-232C、RS-422、RS485等,串口通信方便易行,广泛应用于工业测控领域。

在.NET平台下使用VB.NET语言实现串口通信主要有三种方法:一是采用VB6.0中的MSComm控件;二是采用微软在.NET2.0及其以后版本提供的内置的串口操作类SerialPort;三是采用第三方API函数。该文主要介绍NETFramework2.0类库包含了SerialPort类。

2串口通信原理

串口通信是按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。它很简单并且能够实现远距离通信。IEEE488定义串口通信长度可达1200米。串口用于ASCII码字符的传输。通信使用3根线完成,分别是地线、发送、接收。由于串口通信是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据。其他线用于握手,但不是必须的。串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。对于两个进行通信的端口,这些参数必须匹配。

3SerialPort类介绍

在VB6.0中编写串口通讯程序,一般都使用MicrosoftCommunicationControl(简称MSComm)的通讯控件实现。随着微软VisualStudio不断升级,VisualStudio.Net没有将MSComm控件加入控件库,而是在NETFramework2.0类库包含了SerialPort类,实现串口通讯的多种功能。该文详细介绍VB.net语言中的SerialPort类,实现上、下位机串口通信软件的设计方法。SerialPort类具体介绍如下:

3.1命名空间

System.IO.Ports命名空间包含了控制串口重要的SerialPort类,该类提供了同步I/O和事件驱动的I/O、对管脚和中断状态的访问以及对串行驱动程序属性的访问,所以在程序代码起始位置需加入UsingSystem.IO.Ports。

3.2串口的通讯参数

串口通讯最常用的参数就是通讯端口号及通讯格式(波特率、数据位、停止位和校验位)

PortName属性:获取或设置通信端口,包括但不限于所有可用的COM端口,该属性返回类型为String,PortName返回的值为COM1、COM2……。

BaudRate属性:获取或设置串行波特率。它表示每秒钟传送的bit的个数,一般为9600、19200等。

Parity属性:获取或设置奇偶校验检错方式。Parity类型中枚举了Odd(奇)、Even(偶)、Mark、None、Space。

DataBits属性:获取或设置每个字节的标准数据位长度。这是衡量通信中实际数据位的属性,取值一般为6、7、8。

StopBits属性:获取或设置每个字节的标准停止位数。取值为None、One、OnePointFive、Two。

Encoding属性:获取或设置传输前后文本转换的字节编码。SerialPort默认的Encoding是ASCII方式,这种方式传输汉字存在乱码问题,所以在实际应用中,采用Unicode编码方式。

3.3串口的打开和关闭方法

Open()方法:打开一个新的串行端口连接。

Close()方法:关闭端口连接,将IsOpen属性设置为false,并释放内部Stream对象。

3.4数据的发送和读取常用方法

Write()方法:将数据写入串行端口输出缓冲区。

WriteLine()方法:将指定的字符串和NewLine值写入输出缓冲区,即为输出并换行。

ReadLine()方法:一直读取到输入缓冲区中的NewLine值,即为读入并换行。

ReadTo()方法:一直读取到输入缓冲区中的指定Value的字符串。

读取串口缓冲区的方法有,其中除了ReadExisting和ReadTo,其余的方法都是同步调用,线程被阻塞直到缓冲区有相应的数据或大于ReadTimeOut属性设定的时间值后,引发ReadExisting异常。

3.5常用事件

DataReceived事件:表示将处理SerialPort对象的数据接收事件的方法。在接收到了[ReceivedBytesThreshold]设置的字符个数或接收到了文件结束字符并将其放入了输入缓冲区时被触发。

ErrorReceived事件:表示处理SerialPort对象的错误事件的方法。

3.6SerialPort的使用

串口通讯的流程:先设置串口号及波特率、数据位、停止位和校验位,再打开端口连接,发送数据,接收数据,最后关闭端口连接这样几个步骤。实时采集或巡检系统只需要配置一次串口通信参数,就循环发送指令和读取串口数据。

数据接收的设计方法比较重要,采用轮询的方法比较高效,但是得精确计算轮询延时时间,在VB中的延时方法中一般调用API中DOEvents方法处理。也可采用DataReceived事件触发的方法,合理的设置ReceivedBytesThreshold的值,若接收的是定长的数据,则将ReceivedBytesThreshold设为接收数据的长度,若接收数据的结尾是固定的字符或字符串则可采用ReadTo的方法或在DataReceived事件中判断接收的字符是否满足条件。

4设计开发实例

4.1串口通信参数设置界面设计

下面以“十六路采集元巡检系统为例”介绍串口通信的开发过程。首先设计串口通信设置界面,如图1所示:

实例中通信延时为对多路信息采集的时间间隔,100即为0.1秒。并设置了巡检的起始通道与终止通道,将通信配置信息写入set.ini文件中,方便后期通信重复调用。

4.2串口通信实现

4.2.1串口配置

利用函数读取set.ini中的配置信息,并初始化SerialPort控件。

4.2.2串口巡检采集

利用串口循环采集16路通道中的数据采集仪表的实时采集数据,并实时显示,程序及界面如图2所示。

函数realtime()函数,完成了对串口十六通道采集仪表数据的循环采集,TimeDelay()函数完成对通道巡检采集的延时程序,具体延时时间可根据具体仪表通信响应时间在通信设置界面可修改。现在的笔记本等电脑都无穿行接口,需要外接usb转串口的转接头或无线通信模块,无线通信因通信距离、环境的影响会出现通信错误,因此在通信程序中加入了数据合法性检验,对通信错误数据实行丢弃处理。

5结束语

从十六路串口巡检系统可以看出,利用VB.net语言中的SerialPort类可开发串口通信程序,比调用外部第三方串口控件或API函数更方便、快捷,而且用较少代码实现相同功能,比VB6.0环境中的MSComm控件功能更强大,且VB.net开发软件界面更美观。

参考文献:

[1]曾立武,黄晓锋,兰紫娟,何凌燕,栾胜基.基于VB6.0串口通信的环境空气质量自动监测系统[J].现代电子技术,2012(20):155-158.

[2]许俊锋,马春草,刘畅.基于VB6.0的串口通信数据采集系统设计[J].仪表技术,2012(4):7-11,15.

[3]陈学军.Windows平台下串口通信数据实时获取与监测[J].自动化仪表,2012(3):66-69.

[4]田添.利用控件MSComm实现计算机的串口通信[J].数字通信,2012(2):95-97.

[5]郑武,肖宝森.串口通信新模型的研究与C#实现[J].电脑编程技巧与维护,2012(11):29-30,35.

[6]潘方.RS232串口通信在PC机与单片机通信中的应用[J].现代电子技术,2012(13):69-71.

[7]王雪,王红印,田正凯,周春枚,曾军.基于CAN总线的实时数据采集串口通信的实现[J].电子质量,2012(6):16-17,25.

[8]王毅,万英,胡福成.基于串口通信的温度测量系统的设计[J].电力与电工,2012(2):33-37.

[9]刘金梅,王东颖,刘立超,严称灵.基于LabVIEW串口通信的多路数据采集系统设计[J].北华航天工业学院学报,2012(4):16-18.

猜你喜欢
串口通信
基于Qt和Flash的嵌入式Linux软件架构设计
串口通信在智能家居监控系统中的应用
基于OpenCV的室内照明智能控制系统设计与实现
科技视界(2016年13期)2016-06-13 22:01:19