标题 | 基于VB的RS-485 串口通信方法 |
范文 | 王香菊 范兴亮 邬聪明 【摘要】 在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 |
随便看 |
|
科学优质学术资源、百科知识分享平台,免费提供知识科普、生活经验分享、中外学术论文、各类范文、学术文献、教学资料、学术期刊、会议、报纸、杂志、工具书等各类资源检索、在线阅读和软件app下载服务。