APP下载

基于VB的RS-485 串口通信方法

2016-08-09王香菊范兴亮邬聪明

中国新通信 2016年11期
关键词:传输速率串口控件

王香菊 范兴亮 邬聪明

【摘要】 在VB(Visual Basic)语言编程中,使用串口通信MSComm控件,可以方便地实现串口通信编程。RS-485总线接口是一种常用的串口总线,具有连接方便、抗干扰性能好、传输距离远等优点。本文介绍了在VB环境下,使用微软公司提供的MSComm控件实现RS-485串口通信的方法。

【关键字】 MSComm控件 VB 串行接口 RS-485

引言

在工业控制领域,工控机经常需要与智能仪器或其它设备通过串口进行通信。串口通信方便易行,应用广泛。Visual Basic(简称VB)是Windows系统开发的主要语言之一,以其高效、简单易学及功能强大的特点被广大程序设计人员所青睐。VB支持面向对象的程序设计,具有结构化的事件驱动编程模式并可以使用功能强大的控件。

一、串口通信标准

串行接口(Serial Interface)是指数据按位顺序传送,其特点是通信线路简单,只要一对传输线就可以实现双向通信,并可以利用电话线,从而降低了成本,适用于远距离通信,但传送速度较慢。串行接口按电气标准及协议来分包括RS-232-C、RS-422、RS485等。

RS-232也称标准串口,最常用的一种串行通讯接口。RS-232是为点对点(即只用一对收、发设备)通讯而设计的,适合本地设备之间的通信。其传送距离最大为约15米,最高速率为20kb/s。RS-422标准是一系列的规定采用4线,全双工,差分传输,多点通信的数据传输协议。RS-422支持点对多的双向通信,其最大传输距离为1219米,最大传输速率为10Mb/s。在100kb/s速率以下,才可能达到最大传输距离。只有在很短的距离下才能获得最高速率传输。一般100米长的双绞线上所能获得的最大传输速率仅为1Mb/s。

RS-485是从RS-422基础上发展而来的,所以RS-485许多电气规定与RS-422相仿。RS-485可以采用二线与四线方式,二线制可实现真正的多点双向通信,而采用四线连接时,能实现点对多的通信,它比RS-422有改进,无论四线还是二线连接方式总线上可多接到32个设备。RS-485与RS-422一样,其最大传输距离约为1219米,最大传输速率为10Mb/s,但只有在很短的距离下才能获得最高速率传输。PC机默认的串口是RS-232标准,但RS-485总线接口具有网络连接方便、抗干扰性能好、传输距离远等优点,它弥补了RS-232 通讯距离短,不能进行多台设备同时互联的缺点。

二、MSComm 控件介绍

MSComm控件通过串行端口发送和接收数据,为应用程序提供串行通讯功能。使用MSComm控件时,程序员不必花时间去了解复杂的API函数,而且多个平台均可使用。Microsoft Communications Control(以下简称MSComm)是Microsoft公司提供的用于实现Windows下串行通信的ActiveX控件。它提供了两种实现串口通信的方法:事件驱动方法和查询法。

VB中的MSComm控件提供了功能完善的串口数据的发送和接收功能。 Mscomm控件通信功能的具体实现,实际上是调用了API函数。对于VB程序开发者只需知道Mscomm控件的属性和用法即可以实现串口的操作。Mscomm控件的主要属性和用法如下表1。

三、VB中使用MSComm控件实现串口通信的过程

在工程应用编程过程中,使用工控机作为上位机,通过串口对自己的下位机进行控制。在控制界面中首先插入Mscomm控件,其名称可以通过它的属性进行设置,如不设置默认为Mscomm1。编程代码如下:

(1)串口初始化

MSComm1.CommPort = COM1 ‘采用COM1端口

MSComm1.Settings = “9600,n,8,1” ‘对串口通信设置

MSComm1.InputMode = 1 ‘采用二进传输

MSComm1.InBufferCount = 0 ‘清空接受缓冲区

MSComm1.OutBufferCount = 0 ‘清空传输缓冲区

MSComm1.RThreshold = 9 ‘接收缓冲区收到9字符都会使控件产生 OnComm 事件

MSComm1.InBufferSize = InBufferSize ‘接收缓冲区默认为1024个字节MSComm1.OutBufferSize = OutBufferSize ‘发送缓冲区默认为512个字节

MSComm1.PortOpen = True ‘打开端口

(2)串口发送数据

Dim send_data(0 to 1) As Byte

MSComm1.RTSEnable = True

MSComm1.DTREnable = True

send_data(0)=&HA1;

send_data(1)=&HB1;

MSComm1.Output=send_data

MSComm1.OutBufferCount = 0

(3)串口接收数据

Dim dd(100) As Byte

Dim buffer As Variant

Private Sub MSComm1_OnComm()

Select Case MSComm1.CommEvent

Case 2

MSComm1.InputLen = 9 ‘一次从接收缓冲区读取的字节数

buffer = MSComm1.Input

for i = 0 To UBound(buffer)

dd(i) = buffer(i)

next i

……对所收到的数据处理成所需的数据类型

End Select

MSComm1.InBufferCount = 0

End Sub

(4)关闭串口

MSComm1.PortOpen=False ‘关闭通信口

在程序设计过程中,将上述程序代码添加到设计好的程序界面中就可以实现串口通信,可以用定时器或线程对串口的收发数据进行灵活控制。在控制系统设计中,一般上位机(工控机)串口默认只有RS-232口,要实现RS-485串口通信,需要在硬件电路的连接中使用”RS-232转RS-485”转换器。

四、结束语

在VB集成开发环境中,利用MSComm控件实现RS-485串口通信,通过软件的实际运行效果证明这种编程方法简单,通信可靠。对于许多编程者来说,MSComm控件使用方便,容易掌握,利用此控件可以轻松地实现串口通信。

参 考 文 献

[1] 钱雪忠. 新编Visual Basic程序设计教程,北京:机械工业出版社, 2007.5

[2]刘长征,张荣华.Visual v++ 串口通信及测控应用实例详解[M].北京:电子工业出版社,2014.1

猜你喜欢

传输速率串口控件
使用“填表单”微信小程序 统计信息很方便
基于.net的用户定义验证控件的应用分析
三星利用5G毫米波 实现创纪录传输速率
MCS—51单片机中的多串口通讯技术的应用
夏季滨海湿地互花米草植物甲烷传输研究
数据传输速率
全国计算机等级考试机房准备工作探讨
微机串口的测试诊断
利用VF6.0的Timer控件实现动画效果
Spreadsheet控件在Delphi数据库系统中的编程与应用