用Visual Basic 实现串口通信的三种方法

合集下载

用VisualBasic的Communications控件实现串行通信-2019年精选文档

用VisualBasic的Communications控件实现串行通信-2019年精选文档

ations 控件实现串行通信1.引言Visual Basic (以下简称VB )是一般程序设计人员在Windows 环境下最常用的编程语言。

在 VB 中除了可以调用 API 函数,完成串行通信的任务之外,更常用、更简便的是使用 提供的Communications 控件(以下简称Comn 控件)来完成各种 串行通信任务。

2. VB 的Comr 控件2.1 Com m 控件的添加Comm 控件并不是VB 的基本控件,刚进入 VB 环境中时,在控件工具箱上是找不到 Comn 控件的,要使用它必须另行添加,添加的方法如下:用鼠标右击VB 的控件工具箱,在弹出菜单中选择"部件…"菜单项,会出现一个"部件…"对话框,勾选其中的"MicrosoftComm Control6.0"选项,在VB 的控件工具箱中会出现一个电话2.2 Comm 控件概述 Comm 控件用于进行串行通信,既可以用来提供简单的串行端口通信功能, 也可以用来创建功能完备的、 事件驱动的高级通 信工具。

Comm 空件提供了一系列标准通信命令的使用界面。

使用它用Visua Basic 的CommunicVB 机形状的控件图标,它就是进行串行通信要使用的Comr 控 件。

可以建立与串行端口的连接,通过串行端口连接到其他通信设备(如MODEM,发出命令,交换数据以及监视和响应串行连接中发生的事件和错误。

利用它可以进行诸如拨打电话、监视串行端口的输入数据乃至创建功能完备的终端程序等功能。

2.3 Comm 空件的重要属性1)CommPor:t 设置或返回通信端口号,其取值范围为1〜99,缺省为1。

当把这个属性设置成1,表示利用COM1 端口进行串行通信。

在程序运行时也可以读取该属性, 用来了解串行端口的使用情况。

2)Settings :用字符串的形式设置或返回串行通信的帧格式。

例如将Settings设置为"9600, n, 8, 1",表示采用的串行通信波特率是9600、无奇偶校验、数据位是8 位、 1 位停止位。

用Visual C++实现串口通讯

用Visual C++实现串口通讯

学校logo[请输入论文题目]专业:[请输入专业]班级:[请输入班级]学生姓名:[请输入姓名]指导教师:[请输入指导教师]完成时间:2013年3月29日用VC 6.0实现串行通信的三种方法---- 摘要:本文介绍了在Windows平台下串行通信的实现机制,讨论了根据不同的条件用Visual C++ 设计串行通信程序的三种方法,并结合实际,实现对温度数据的接收监控。

---- 在实验室和工业应用中,串口是常用的计算机与外部串行设备之间的数据传输通道,由于串行通信方便易行,所以应用广泛。

依据不同的条件实现对串口的灵活编程控制是我们所需要的。

---- 在光学镜片镀膜工艺中,用单片机进行多路温度数据采集控制,采集结果以串行方式进入主机,每隔10S向主机发送一次采样数据,主机向单片机发送相关的控制命令,实现串行数据接收,处理,记录,显示,实时绘制曲线。

串行通信程序开发环境为VC++ 6.0。

---- Windows下串行通信---- 与以往DOS下串行通信程序不同的是,Windows不提倡应用程序直接控制硬件,而是通过Windows操作系统提供的设备驱动程序来进行数据传递。

串行口在Win 32中是作为文件来进行处理的,而不是直接对端口进行操作,对于串行通信,Win 32 提供了相应的文件I/O函数与通信函数,通过了解这些函数的使用,可以编制出符合不同需要的通信程序。

与通信设备相关的结构有COMMCONFIG ,COMMPROP,COMMTIMEOUTS,COMSTA T,DCB,MODEMDEVCAPS,MODEMSETTINGS共7个,与通信有关的Windows API函数共有26个,详细说明可参考MSDN帮助文件。

以下将结合实例,给出实现串行通信的三种方法。

---- 实现串行通信的三种方法---- 方法一:使用VC++提供的串行通信控件MSComm 首先,在对话框中创建通信控件,若Control工具栏中缺少该控件,可通过菜单Project --> Add to Project --> Components and Control插入即可,再将该控件从工具箱中拉到对话框中。

Visual Basic 串口通讯编程

Visual Basic 串口通讯编程

Mid:从第m 个数开始,取 n 个数。例如:s=Mid(s,2,3)即为从 s 的 第二个数开始,取三个数放回s。 Asc:返回第一个字符(包括汉字)的Ascii码。 Str:将一个数字变为字符形式 Hex:返回Ascii码的16 进制数 3、错误处理的应用 我们在程序中加入这样一条语句:On Error Resume Next。当程序运 行出现错误,比如当打开串行口1 时,该串口已被其它程序占用,程 序就会出现错误,如果开始时执行过上述语句,程序将跳过错误语句, 接着往下执行。同时,VB 置Err 标志有效。 利用Err 的值,我们可以判断一些与硬件相关的操作是否正确和有 效,以改变程序的进程。 四、界面 画出界面,控件上的字符是它们的名称。需要提请大家注意的是,串 口控件(即那个电话控件)在VB 默认的控件栏中不存在,需要以下 述方式添加,在工程菜单->部件->控件选项卡中选中 Microsoft Comm Control 5.0 复选框,其它备用控件的添加也采用 相同的方式,希望大家记住,以后将不再重复。当不再需要该控件而

Visual Basic 串口通 三、预备知识和技巧 1、串行通讯控件 Mscomm 调入Mscomm 控件:在“项目”菜单中打开“部件”子菜单, 在部件选择对话框中选择 “Microsoft comm Control 5.0”, Mscomm 控件即加入到您的控件箱中. 常用属性:Commport-通讯端口号,如串口1、串口2。Setting-返回或 设置串口参数。InputLen-从接收缓冲区读出的字符数。 InBufferSize、OutBufferSize-输入、输出缓冲区尺寸。 InBufferCount-输入缓冲区内的字符数。 常用方法:Output、Input-将发送数据发送出去和将接收数据读出。 常用事件:OnComm-无论串行口发生什么事,都会触发该事件。 2、字符处理函数 Left:取字符串的左边n 个字符。例如:s=Left(s,2) 即为取s 的左 边两个字符再放回 s。 Right:与Left 类似,取字符右边 n 个字符。

Visual_Basic串口通信实验

Visual_Basic串口通信实验

实验一Visual Basic串口通信实验利用Visual Basic开发串口通信程序既可以使用MSComm控件也可以调用Windows API 函数。

不过,只要MSComm可以被选用,它几乎总是我们推荐的选择,因为MSComm的功能和API调用一样好甚至比它还好且使用起来更加简单。

在本章提供的串口通信程序设计中,除了PC机与PC机串口通信外,PC机与单片机、PC机与智能仪表、PC机与PLC、PC机与GSM短信模块等串口通信任务的实现均采用MSComm控件。

1.1 PC机与PC机串口通信程序设计当两台串口设备通信距离较近时,可以直接连接,最简单的情况,在通信中只需三根线(发送线、接收线、信号地线)便可实现全双工异步串行通信。

本设计通过两台PC机串口三线连接,介绍了利用API函数和MSComm控件设计串口通信程序的方法,包括字符与文件的发送与接收。

1.1.1 设计目的1)掌握PC机与PC机串口通信的线路连接方法。

2)利用MSComm控件实现PC机与PC机串口通信的程序设计方法。

1.1.2 设计用软、硬件本设计用到的硬件和软件清单见表6-1。

1.1.3 硬件线路线路说明:在计算机通电前,按图1-1所示将2台PC机通过串口线连接起来:PC机A 串口COM1端口的TXD与PC机B串口COM1端口的RXD相连;PC机A串口COM1端口的RXD与PC机B串口COM1端口的TXD相连;PC机A串口COM1端口的GND与PC机B串口COM1端口的GND相连。

6.1.4 设计任务利用MSComm控件编写程序实现PC机与PC机串口通信。

216图1-1 PC机与PC机串口通信线路任务要求:两台计算机互发字符并自动接收,如一台计算机输入字符串“Please return abc123”,单击“发送字符”命令,另一台计算机若收到,就输入字符串“abc123”,单击“发送字符”命令,信息返回到第一组的计算机。

实际上就是编写一个简单的双机聊天程序。

RS232串口通信技术在Visual Basic中的应用及注意问题

RS232串口通信技术在Visual Basic中的应用及注意问题

绘制出来。

保存所有数据,将其另存为.DXF格式数据。

3DXF数据到GIS数据的转换3.1CAD与GIS数据结构比较CAD与GIS的图形格式存在较大的差异,对它的标准没有统一的支持,这就造成数据共享具有极大的不便性。

CAD主要由线宽、颜色、线型、符号等静态图形集合了多个图层,它的图层与GIS中严密组织的图层存在较大分别,GIS的单一文件中将各种实体和元素都包含在了里面,利用各种图层和标注来描述属性数据,SuperMap中数据根据类型进行分层存储管理。

3.2转换方法SuperMap中有三种导入CAD数据的方式,也就是将CAD类型数据分别导入成复合数据集、简单数据集以及CAD数据中指定的图层。

在进行转换时,需要将绘制的DWG格式图件转化为DXF。

不管是图形的数据转换或是属性数据的转换,在转换中不管多少都会产生一些问题,如数据冗余、要素丢失、要素变形等,所以需要对SuperMap进行适当的改造。

3.3CAD中数据优化处理在CAD中进行数据的优化处理,主要包括地物编辑,如多边形经过CAD的优化处理后看不出缺口就行了,但在SuperMap中就要求多边形严格闭合。

另外还有转换要素的选择及重新分层,在CAD 中是通过各种符号和颜色来表示地物,形成不同的图层,有些对GIS有用,而有些需要筛选。

3.4GIS中数据优化处理SuperMap图形处理能力相比于CAD较弱,在进行转换时需要在CAD中进行处理后在转入,当转入SuperMap数据时,为了让图形更加美观和完善,可继续进行处理。

如将同类相邻的地物转入到CAD时,可以对其进行并等运算、逻辑运算等,使它形成一个整体。

4总结在地理信息系统中,数据是它的核心,注重对数据的处理才能得到准确完整的地理图。

为了满足用户的需求,要不断对地理信息系统进行深入的研究,为用户提供精确地、实时的地理数据。

参考文献:[1]陈浩.基于GIS的多尺度生态地理物种入侵预测建模[D].武汉大学,2010.[2]王富强.空间知识地图构建理论和方法研究[D].解放军信息工程大学,2013.[3]李三玉.GIS图形数据更新解决方案[J].现代计算机,2005,10: 109-111.摘要:本文介绍了RS232通信的基本概念以及常用通信技术。

使用Visual Basic开发通讯软件(二)

使用Visual Basic开发通讯软件(二)

使用Visual Basic开发通讯软件(二)出处:eNet学院责任编辑:zwg[01-12-11 17:23] 作者:enet1.串口初始化、设置程序在程序初始化时,先对串口初始化。

因为使用rts/cts握手信号的硬件设备只有rts信号置为高才能接收数据,所以需将mscomm通信控件的rtsenable属性设为true。

由于modem在处于命令状态时,通过串口发送的命令以及命令结果均会回显在输入缓冲区中,因此在进入在线状态前,禁止产生ev-receive事件,避免数据误处理。

由于windows是多任务系统,在进行数据收发循环处理时,应调用doevents事件,将控制权交还系统,允许windows执行其他任务。

但应注意,在处理oncomm事件时小心使用doevents,避免系统又产生oncomm事件,造成嵌套,出现堆栈溢出错误。

sub form-load()comm1.commportκ1′com1口通信comm1.settingsκ″9600,n,8,1″′波特率9600,无校验,8位数据位1位停止位comm1.outbuffersizeκoutpack′设置输出缓冲区大小comm1.inbuffersizeκinpack′设置输入缓冲区大小comm1.inputlenκ1′每次从输入缓冲区中取一个字符comm1.rtsenableκ-1′rts信号为高comm1.rthresholdκ0′不产生mscomm-ev-receive事件comm1.portopenκ-1′打开串口cdκcomm1.cdholding′取载波检测信号线原始状态comm1.outputκ″atqov1wosoκ1&c1&d2&yowo″′初始化modemdo doeventsloopuntilcomm1.outbuffercountκ0end sub2.上位机拨号呼叫下位机subcallcom-click()comm1.outputκ″atdt″&phonnum$&chr$(13)′向modem发拨号命令do doeventsloopuntilcomm1.outbuffercountκ0end sub3.下位机modem应答,连通后开始定时传输数据下位机检测cd,判断是否连通:sub comm1-oncomm()select casecomm1.commeventcase5 ′mscomm-ev-cdtimer1.enabledκ-1′启动定时器end selectend subvb传送定长字符串,数据接收处理相对简单。

VisualBasic串口通讯调试方法

VisualBasic串口通讯调试方法

1---真理惟一可靠的标准就是永远自相符合VisualBasic串口通讯调试方法现有电子秤一台,使用串口与计算机进行通讯。

编写VB程序来访问串口,达到读取电子秤上显示的数据。

该电子秤为BE01型仪表,输出为RS-232C标准接口,波特率为300-9600、偶校验、7个数据位、2个停止位。

所有字符均发送11位ASCII码,一个起始位。

在VB中与串口通讯需要引入控件MSComm串口通讯控件(在MicrosoftCommControl6.0中)。

具体程序如下:控件简称:MSCDimOut(12)AsByte'接收var中的值DimvarAsVariant'接收MSC.input中的数值DimnReceAsInteger'计算MSC.inputbuffer的个数DimiAsInteger,jAsInteger'随即变量,计算循环PrivateSubForm_Load()ClearTextWithMSC.CommPort=1'设置Com1为通信端口2---真理惟一可靠的标准就是永远自相符合.Settings=9600,E,7,2'设置通信端口参数9600赫兹、偶校验、7个数据位、1个停止位.(这里需要进一步说明的是:.Setting=”BBBB,P,D,S”。

含义是:B:BaudRate(波特率);P:Parity(奇偶);D:DataBit;S:StopBit).InBufferSize=40'设置缓冲区接收数据为40字节.InputLen=1'设置Input一次从接收缓冲读取字节数为1.RThreshold=1'设置接收一个字节就产生OnComm事件EndWithEndSubPrivateSubClearText()Text3.Text=\Text2.Text=_x0005_Text1.Text=\EndSubPrivateSubCommand1_Click()ClearText'nRece=0'计数器清零3---真理惟一可靠的标准就是永远自相符合WithMSC.InputMode=comInputModeBinary'设置数据接收模式为二进制形式.InBufferCount=0'清除接收缓冲区IfNot.PortOpenThen.PortOpen=True'打开通信端口EndIfEndWithEndSubPrivateSubMSC_OnComm()DelayTime‘用来延续时间ClearTextWithMSCmEvent'判断通信事件CasecomEvReceive:'收到Rthreshold个字节产生的接收事件SwichVar14---真理惟一可靠的标准就是永远自相符合IfOut(1)=2Then'判断是否为数据的开始标志.RThreshold=0'关闭OnComm事件接收EndIfDoDoEventsLoopUntil.InBufferCount>=3'循环等待接收缓冲区>=3个字节'nRece=nRece+1Fori=2To12SwichVariText1.Text=Text1.Text&Chr(Out(i))NextText1.Text=LTrim(Text1.Text)Text2.Text=Text2.Text&CStr(nRece).RThreshold=1'打开MSComm事件接收CaseElse5---真理惟一可靠的标准就是永远自相符合'.PortOpen=FalseEndSelectEndWithEndSubPrivateSubDelayTime() DimbDTAsBooleanDimsPreviousAsSingle,sLastAsSinglebDT=TruesPrevious=Timer(Timer可以计算从子夜到现在所经过的秒数,在MicrosoftWindows中,Timer函数可以返回一秒的小数部分) DoWhilebDTIfTimer-sPrevious>=0.3ThenbDT=FalseLoopbDT=TrueEndSub6---真理惟一可靠的标准就是永远自相符合(通信传输速率为9600bps,则最快速度1.04ms发送一个字节,仪表每秒发送50帧数据,每帧数据有4个字节,即每秒发送200个字节,平均5.0ms发送一个字节,连续读取串口数据时要在程序中添加循环等待程序)PrivateSubSwichVar(ByValnNumAsInteger)DelayTimevar=Nullvar=MSC.InputOut(nNum)=var(0)EndSub(设置接收数据模式采用二进制形式,即InputMode=comInputModeBinary,但用Input属性读取数据时,不能直接赋值给Byte类型变量,只能通过先赋值给一个Variant类型变量,返回一个二进制数据的数组,再转换保存到Byte类型数变量中。

利用Visual Basic实现串行通信技术

利用Visual Basic实现串行通信技术

B 60 中通 信控件在 Wid ws 台下进 行通信软件 的开发,并 给出 了事例 的基本通 信程 序 . ac. no 平 关 键 词 :Vi a a i Mso s lB s c mmlV u c BX通 信控件 I程 序设计
中圈分类号 ;T 330 P 9 .2
文 献 标识 码 :A
统提出资源申请 要求 ( 打开 串口) ,通信完成后必须释放资源 ( 关闭串口) 。
2 RS 3 C串 口通 信接 线 方 法 ( 22 三线制 )

个完 整的 RS 3 C接 口有 2 -2 2 2根线 ,采 用标 准的 2 插头 5芯
P C
PC
座 ( 或者 9芯插头座 ) 5芯和 9芯的主要信号线相同。首先 ,串 。2 口传输 数据 只要 有 接收 数 据 针 脚 和 发 送针 脚就 能 实现 :同一个 串 口 的接收脚和发送脚直接 用线相连 ;两个串口相连或一个串口 多个 和 串口相连 同一对 9 针串 口和 2 针 串口, 5 均是 2 3 与 交叉相连 , 信号
Es le ’
M SCo m . m 1 DTRE b e na l =Fas l e
En I df
3 打开时 向 MO E 发出一些命令来设置有关参数 ,其 中 S = (>= ) ) DM 0 nn 1自动应答 . n为响铃次数 ; E/ 0 El关 闭/ 开 命令 字 符 回应 lO / mo e 返 回/ 打 O Ol dm 不返 回结 果 码 lMO M l关 闭 / 开 MOD M 扬 声 / 打 E 器 ,例 程 如 下 :
伊 崇信 ’ 赵

卉哈尔 1 10 ) 6 0 0 (. 1齐齐哈 尔大学信息学院 计算机系.齐齐哈 尔 1 10 , .齐齐哈尔铁路运输职工大学 计算机 系.齐: 6 06 2
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

网络用V isual Basic实现串口通信的三种方法●赵海燕目前,V isual Basic(简称V B)已成为WINDOWS系统开发的主要语言,以其高效、简单易学及功能强大的特点越来越为广大程序设计人员及用户所青睐。

V B支持面向对象的程序设计,具有结构化的事件驱动编程模式并可以使用无限扩增的控件。

在V B应用程序中可以方便地调用WINDOWS API 函数,使得编程效率提高,应用功能增强。

利用V B提供的这些功能,我们可以有三种方法完成串口通信。

一种是用V B提供的具有强大功能的通信控件;另一种方法是调用WINDOWS API函数,使用WINDOWS提供的通信函数编写移植性强的应用程序;第三是利用文件的输入/输出完成,该方法简便易行,但有一定的局限性。

一、利用通信控件(MSCOMM)完成串口通信V B提供了通信控件M SCOM M,文件名为M SCOM M.V BX。

该控件可设置串行通信的数据发送和接收,对串口状态及串行通信的信息格式和协议进行设置。

在通信过程中可以触发OnC omm事件,在该事件过程进行数据检验处理及检错,还可以通过编程访问C ommE vent属性来了解通信的情况,进行收发数据的处理。

每个通信控件对应一个串口,如果要访问多个通信口,则要设计多个通信控件。

1.通信控件的事件及基本属性(1)事件OnC omm:通信控件只提供了一个事件,该事件的触发可以对串口的通信事件及错误进行处理。

通过对C ommE vent属性的判断可知当前的通信错误和事件,分别对每个C om2 mE vent值进行编程就完成了对各个错误和事件的处理。

如: C ommE vent=M SCOM M—EV—SEND表示发送事件。

这些信息可从V B提供的常量文件CONST ANT.T XT中查出。

(2)属性C ommP ort:设置通信控件与哪个串口相连接,设置并返回通信口号。

S ettin g:设置通信的信息格式,为字符型。

顺序为:波特率、校验、数据位、停止位。

P ortO p en:布尔型、开关通信口。

In p utLen:从接收缓冲区读取字符个数。

In p ut,Out p ut:读取接收缓冲区或写入发送缓冲区字符。

以上五种属性对串口完成基本的设置和操作,下面的三种属性是描述如何利用V B提供的事件驱动机制来实现通信。

C ommE vent:返回通信过程中产生的错误信息及事件,了解通信状况。

ST hresh old:设置并返回不触发OnC omm事件时发送缓冲区被允许的最少字符数。

当缓冲区的字符少于设置的值时,则触发OnC omm事件,并把C ommE vent设为M SCOM M M—EV—SEND。

当ST hresh old=0则禁止发送触发OnC omm事件,当ST hresh old=1则发送缓冲区为空时就触发OnC omm事件。

利用这一属性,就可完成发送数据后的一系列操作。

如:对刚发送的数据进行处理,当串口是和M ODEM通信时,发送完数据后可进行拆除线路联接、挂机等操作。

RT hresh old:设置并返回不触发OnC omm事件时接收缓冲区被允许的最多字符数。

当缓冲区的字符多于设置的值时,则触发OnC omm事件,并把C ommE vent设为M SCOM M—EV—RECEIVE,当RT hresh old=0则禁止接收触发OnC omm事件,当RT hresh old=1则接收缓冲区有一个或更多字符时就触发OnC omm事件。

利用这一属性,就可完成对串口接收数据的处理。

2.利用通信控件的实例Sub F orm1—load()form1.sh ow′设置COM1m p ort=1comm1.S ettin g="9600,o,8,1"′波特率:9600奇校验,8位数据,1位停止位comm1.In p utlen=0′读取接收缓冲区的所有字符comm1.OutBufferS ize=512′设置发送缓冲区为512字节comm1.InBufferS ize=512′设置接收缓冲区为512字节comm1.ST hresh old=0′禁止发送事件comm1.RT hresh old=1′每一个字符到接收缓冲区都触发接收事件′设置COM2m p ort=2comm2.S ettin g="2400,e,8,1"网络′波特率:2400偶验,8位数据,1位停止位comm2.In p utlen=0′读取接收缓冲区的所有字符comm2.OutBufferS ize=512′设置发送缓冲区为512字节comm2.InBufferS ize=512′设置接收缓冲区为512字节comm2.ST hresh old=1′发送缓冲区空触发发送事件comm2.RT hresh old=0′禁止接收事件′打开COM1,COM2comm1.P orto p en=T ruecomm2.P orto p en=T rueT im er1.interval=5000End SubSub C omm1—OnC omm()Dim Inbuff as strin gDim i as inte g er,n as inte g er,t as inte g erS elect C ase C omm1.C ommE vencase M SCOM M—EV—RECEIVEInbuff=C omm1.In p utn=len(Inbuff)F or i=1to nt=Asc(M id(Inbuff,i,1))or&HFFp rint fNext iEnd S electEnd SubSub C omm2—OnC omm()S elect C ase C omm2.C ommE ventC ase M SCOM M—EV—SENDPrint tim eEnd S electEnd SubSub T im er1—T im er()C omm2.out p ut=S econd(N ow)End sub二、通过调用API函数实现通信以上说明了用V B提供的控件实现通信的方法,只要理解了V B控件的机制就很容易完成对串口的操作,但可移植性差。

但V B可以很容易调用API函数实现通信。

1.VB对API的调用V B使用动态链接库DLL(D y nam ic Link Libraries)的能力,大大扩展了其功能。

WINDOWS本身提供了API函数包括三大动态链接库:KERNE L库、G DI库、USER库,通过V B用户可以直接调用这些库中的函数。

调用之前,必须首先在V B中声明。

该声明可为模块级或窗体级,当作为模块级声明时,其作用域为所有FORM和M ODU LE,而作为窗体级声明时其作用域为该声明所在的FORM。

V B调用DLL的格式:Declare Sub过程名Lib″库名″Alias″别名″]([B y Val参数As类型])Declare Function函数名Lib″库名″[Alias″别名″]([B y Val 参数As类型])As类型在声明中:DEC LARE表示声明DLL中的函数,当声明是不具有返回值的过程时用SU B关键字,而如果调用的函数具有返回值,则必须用FUNCTION关键字将其声明为函数并在声明语句的最后用AS指明函数返回值的类型。

LI B关键字表示当前声明的过程或函数是库名所指定的库中函数而非V B 本身的函数。

库名,就是对应动态链接库的名称,其中通信函数在USER库中。

B y Val关键字将原参数数据类型一一对应到V B类型中。

WINDOWS的HE LP文件WINS DK.H LP中包含了完整的WINDOWS API函数信息,可用该文件查看联机函数、数据结构及错误信息。

2.API提供的通信函数为了方便说明,我们将有关通信的函数及相关的数据结构放在全局模块中,文件名为COM M.BAS(见API编程函数实例)。

以下是这些函数的基本介绍:(1)O p enC omm(I p C omNam e As Strin g,wInQueue As Inte2g er,w OutQueue As Inte g er)I p C omNam e:设备名,以“COM n”的形式来说明,n为设备号;wInQueue、w OutQueue:分别以字节为单位说明发送、接收缓冲区的大小。

该函数调用成功返回打开的设备号,否则返回一负数代表错误信息码。

(2)S etC ommState(I p DC B As DC B)I p DC B:是DC B结构存放设备所希望的通信设置(DC B结构如COM M.BAS中所示),其中DC B的I D成员必须标识该设备。

如果函数调用成功返回0;否则,返回值小于0。

(3)ReadC omm(nC id As Inte g er,I p Buf As Strin g,nS ize As Inte g er)W riteC omm(nC id As Inte g er,I p Buf As Strin g,nS ize As In2 te g er)这是用来对通信设备进行读写的函数,nC id:说明要读写的通信设备号,I p Buf:为读写缓冲区,nS ize:为要读写的字节数。

如果读写成功,返回读写的字节数,否则是小于0的值,并且其绝对值为读写的字节数。

(4)C losecomm(nC id As Inte g er)该函数关闭nC id所指定的通信设备,并且释放分配给设备的发送,接收缓冲存储器,调用成功返回0;否则,返回值小于0。

(5)BuildC omm DC B(I p Def As Strin g,I p DC B As DC B)l p Def:为一字符串指定设备控制信息,此字符串具有M S-DOS中M ODE命令所使用的参数形式。

I p DC B:为一DC B 数据结构。

该函数将I p Def字符串转换成串行设备控制块(DC B)代码。

(6)G etC ommError(nC id As Inte g er,I p Stat As COM ST AT)该函数检取nC id指定的设备最近的错误值和当前状态, I p Stat:是COM ST AT结构,具体形式如COM M.BAS中所定义的。

返回值为COM M.BAS中带CE-的常量的某种组合。

3.用API函数编程实例这个例子是一仿真发送机,将从键盘输入的字符发送给COM端口。

在FORM中加一按钮COM M AND1来关闭通信口。

SS网络(下转第20页)S S S S S T y p e DC BId As Strin g 31BaudRate As Inte g er B y teS ize As Strin g 31Parit y As Strin g 31Sto p Bits As Strin g 31R lsT im eout As Inte g er CtsT im eout As Inte g er DsrT im eout As Inte g er Bits1As Strin g 31Bits2As Strin g 31X onChar As Strin g 31X offChar As Strin g 31X onLim As Inte g er X offLim As Inte g er PeChar As Strin g 31E ofChar As Strin g 31E vtChar As Strin g 31T xDela y As Inte g er End T y p e T y p e COM ST ATBits As Strin g 31cbInQue As Inte g er cbOutQue As Inte g erEnd T y p eDeclare Function O p enC omm Lib ″User ″(B y Val I p C omNam e As Strin g ,B y Val wInQueue As Inte g er ,B y Val w OutQueue As In 2te g er )As Inte g erDeclare Function S etC ommState Lib ″User ″(I p DC B As DC B )As Inte g erDeclare Function ReadC omm Lib ″User ″(B y Val nC id As Inte 2g er ,B y Val I p Buf As Strin g ,B y Val nS ize As Inte g er )As Inte 2g erDeclare Function W riteC omm Lib ″User ″(B y Val nC id As Inte 2g er ,B y Val I p Buf As Strin g ,B y Val nS ize As Inte g er )As Inte 2g erDeclare Function C losecomm Lib ″User ″(B y Val nC id As Inte 2g er )As Inte g erDeclare Function BuildC omm DC B Lib ″User ″(B y Val I p Def As Strin g ,I p DC B As DC B )As Inte g erDeclare Function G etC ommError Lib ″User ″(B y Val nC id As Inte g er ,I p Stat As COM ST AT )As Inte g er G lobal I p DC B As DC B G lobal nC id As Inte g er Sub F orm1—load ()Dim comset As Strin g comset =“COM 2"nC id =O p enC omm (comset ,512,512)′打开COM 2设置接收,发送缓冲区为512字节I f nC id <0T hen′处理错误M s g Box “不能打开COM:"+Str (nC id )+“Error Num 2ber :"+Str (nC id ),16end end ifC omm and1.C a p tion =“关闭通信口"′设置串口DC B 设备控制块comset =“COM 2:9600,n ,8,1"I f (BuildC omm DC B (comset ,L p DC B ))T hen M s g Box “不能建立COM M DC B",16end end ifL p DC B.Id =Chr (nC id )I f (S etC ommState (L p DC B ))T hen′设置串口状态M s g Box"不能设置串口状态",16end endif End SubSub F orm1-ke y Press (ke y AsciiAs Inte g er )Dim nsend As inte g er ,x As inte g er Dim L p state As COM ST AT ′通信状态块Static inbuff as strin ginbuff =imbuff +Chr (K e y Ascii )x =G etC ommError (ncid ,L p state )′读取当前串口错误或状态if l p state.cbOutQue <512T hen ′送缓冲区有空间否?Nsend =W riteC omm (nC id ,inbuff ,Len (inbuff ))′发送inbuff if Nsend <=0then Nsend =-Nsend ′忽略错误inbuff =M id (inbuff ,Nsend +1)′清除已发送的字符end if end if End SubSub C omm and1-C lick ()Dim N close As inte g er N close =C loseC omm (nC id )I f N close <0T henM s g Box “不能关闭COM M 口:"+Str (nC id ),16end else ncid =0end ifCmm and1.C a p tion =“通信已关闭”End Sub三、用文件输入/输出技术完成通信用V B 提供的以上两种方法已足以应付各种串行通信的问题。

相关文档
最新文档