下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、VB串行通信目前,Visual Basic (VB)已成为WINDOWS系统开发的主要语言,越来越多的程序员和用户使用效率、易于学习和功能强大的功能。VB支持面向对象的编程,具有结构化的基于事件的编程模式,并且可以使用无限放大的控件。在VB应用程序中可以轻松调用WINDOWS API函数以提高编程效率并提高功能。使用VB提供的这些功能完成串行通信的方法有三种:一种是使用VB提供强大的通信控制。另一种方法是调用WINDOWS API函数,使用WINDOWS提供的通信函数构建高度可移植的应用程序。第三是利用文件的输入/输出完成,这种方法简单,而且有局限性。首先,使用通信控制(MSCOMM)完成串行
2、通信VB提供通信控制MSCOMM,文件名为MSCOMM .VBX。此控件设置串行通信的发送和接收数据,并设置串行端口状态和串行通信的信息格式和协议。触发执行数据检查处理和错误检查的OnComm事件,并以编程方式访问CommEvent属性以了解通信情况和发送和接收数据。每个通信控件对应于一个串行端口,如果访问多个通信端口,则设计多个通信控件。1、通信控制事件和基本属性(1)事件OnComm:通信控制仅提供处理串行端口上的通信事件和错误的单个事件。编程每个CommEvent值以确定当前通信错误和事件,从而处理单个错误和事件。例如:comm event=ms comm-EV-SEND-SEND表示事
3、件传输。此信息是VB提供的常量文件CONSTANT .可以在TXT中确认。(2)属性CommPort:设置通信控件要连接的串行端口,设置并返回通信标语。Setting:设定文字格式中通讯的资讯格式。顺序包括波特率、验证、数据位和停止位。PortOpen:布尔值,交换机通信端口。InputLen:从接收缓冲区读取字符数。Input,Output:读取接收缓冲区或写入发送缓冲区字符。上述五个属性完成串行端口的默认设置和操作,以下三个属性说明如何使用VB提供的事件驱动机制实现通信。CommEvent:返回通信期间发生的错误消息和事件,以确定通信状态。SThreshold:设置并返回未触发OnComm
4、事件时发送缓冲区允许的最小字符数。如果缓冲区中的字符小于设置的值,则触发OnComm事件,并将CommEvent设置为mscommm-ev-send。SThreshold=0表示不发送OnComm事件,SThreshold=1表示传输缓冲区为空将触发OnComm事件。此属性使您可以在发送数据后完成一系列任务。例如:您可以处理刚发送的数据,并在串行端口与调制解调器通信时发送数据,然后删除线路连接、断开等。RThreshold:设置并返回未触发OnComm事件时接收缓冲区允许的最大字符数。如果缓冲区中的字符数大于设置的值,则触发OnComm事件;如果CommEvent设置为MSComm-ev-re
5、ceive,RThreshold=0,则不接收触发器OnComm事件;如果RThreshold=1,则接收缓冲区中至少有一个字符,则触发on comm事件。使用此属性可以完成串行端口侦听数据的处理。2、使用通信控制示例Subform1-load()Form1 .showCOM1设定Comm1 .commport=1Comm1 .Setting= 9600,o,8,1 波特率3360000奇偶校验,8位数据,1位停止位Comm1 .Inputlen=0 读取接收缓冲区中的所有字符Comm1 .OutBufferSize=512 将发送缓冲区设置为512字节Comm1 .InBufferSize=
6、512 将接收缓冲区设置为512字节Comm1 .SThreshold=0 禁止发送事件Comm1 .直到RThreshold=1 侦听缓冲区,每个字符都会触发侦听事件COM2设定Cmport=2Comm2。Setting=2400,e,8,1 波特率3360124偶,8位数据,1位停止位Comm2。Inputlen=0 读取接收缓冲区中的所有字符Comm2。OutBufferSize=512 将发送缓冲区设置为512字节Comm2。InBufferSize=512 将接收缓冲区设置为512字节Comm2。SThreshold=1 发送缓冲区null触发发送事件Comm2。RT
7、hreshold=0 禁止接收事件打开COM1,COM2Comm1 .Portopen=TrueComm2。Portopen=TrueTimer1 .interval=5000End Subsub com m1-on comm()Dim Inbuff as stringDim I as integer,n as integer,t as integer选择事例Comm1。CommEvenCase MSComm-ev-receiveInbuff=Comm1。InputN=len (Inbuff)For I=1 to nT=Asc (Mid (Inbuff,I,1) or HFF打印f下一步IEn
8、d SelectEnd Subsub comm 2-on comm()选择事例Comm2。CommEventCase MSComm-ev-send打印时间End SelectEnd SubSubtimer1-timer()Comm2。output=Second (Now)End sub第二,调用API函数以实现通信如上所述,了解VB控件的机制后,可以轻松地对串行端口执行操作,但可以进行移植性不好。但是,VB可以轻松调用API函数进行通信。1、调用VB APIVB使用动态链接库DLL(动态链接库)的功能大大扩展了其功能。WINDOWS本身提供了API函数,包括三个动态链接库(KERNEL库、GD
9、I库和USER库),VB用户可以直接调用它们。调用之前,必须在VB中声明。此声明可以是模块级或表单级,声明为模块级时,其范围为所有FORM和MODULE声明为表单级时,其声明所在的FORM。VB调用DLL格式:Declare Sub过程名Lib库名“aliAs”别名“byval参数As类型”Declare Function函数名Lib库名别名byval参数As类型) As类型在声明中,DECLARE表示声明的DLL中的函数,并且如果声明是没有返回值的过程,则使用SUB关键字并调用该函数如果有返回值,则必须使用FUNCTION关键字将其声明为函数,并在声明语句后使用AS指示函数返回值的类型。LI
10、B关键字表示当前声明的过程或函数是由库名称指定的库函数,而不是VB本身。库名称是通信函数在USER库中的相应动态链接库的名称。ByVal关键字将原始参数数据类型映射到VB类型。适用于WINDOWS的HELP文件WINSDK。HLP包含联机函数,完整的WINDOWS API函数信息,可用于查看数据结结构和错误消息。2、API提供的通信函数为了方便说明,请将与通信相关的函数和相关数据结构作为COMM.BAS放在全局模块中(请参阅API编程函数)是)。以下是这些函数的基本介绍。(1) opencomm (ipom name as string,wInQueue As Inte-ger,wOutQue
11、ue As Integer)以IP comname:“COMn”格式描述的设备名称,n是设备编号;WInQueue,wOutQueue:描述发送和接收缓冲区的大小(以字节为单位)。此函数调用成功返回打开的设备编号。否则,返回表示错误消息代码的负数。(2) setcommstate (dcb到dcb IP)IpDCB: DCB结构是DCB结构容纳设备所需的通信设置,如COMM.BAS中所示。其中dcb的ID成员必须标识相应的DCB设备。函数调用成功返回0;否则,返回值小于零。(3)ReadComm(nCid As Integer、IpBuf As String、nSize As Integer)
12、WriteComm(nCid As Integer,IpBuf As String,nSize As In-teger)用于读取和写入通信设备的函数。nCid:要读取和写入的通信设备编号说明IpBuf:读写缓冲区nSize:要读取和写入的字节数。如果读取和写入成功,则返回读取和写入的字节数,否则为小于0的值,绝对值为读取和写入的字节数。(4)Closecomm(nCid As Integer)此函数关闭nCid指定的通信设备,关闭分配给设备的传输以接收缓冲内存,并且调用成功返回0。否则,返回值小于零。(5) buildcb (IP def as string,IpDCB As DCB)LpDe
13、f:指定MS-DOS中具有MODE命令使用的参数格式的字符串的设备控制信息。IpDCB: DCB数据结构。此函数将IpDef字符串转换为串行设备控制块(DCB)代码。(6) getcarmerror (ncid as integer,IpStat As COMSTAT)此函数确定nCid指定的设备的最新错误值和当前状态。IpStat: COMM.BAS中定义的COMSTAT结构。返回值是COMM.BAS中具有CE-的常量的组合。使用API函数编程示例本示例是将从键盘输入的字符发送到COM端口的模拟发射器。向表单中添加COMMAND1按钮以关闭通信端口。Type DCBId As String
14、3 1BaudRate As IntegerByteSize As String 3 1Parity As String 3 1StopBits As String 3 1RlsTimeout As IntegerCtsTimeout As IntegerDsrTimeout As IntegerBits1 As String 3 1Bits2 As String 3 1XonChar As String 3 1XoffChar As String 3 1XonLim As IntegerXoffLim As IntegerPeChar As String 3 1EofChar As Stri
15、ng 3 1EvtChar As String 3 1TxDelay As IntegerEnd TypeType COMSTATBits As String 3 1CbInQue As IntegerCbOutQue As IntegerEnd Type请参见Declare function open commlib“用户”String,ByVal wInQueue As Integer,ByVal woutqueue As Integer)As IntegerDeclare function setcommstate lib“用户”(dcb IP到dcb)As IntegerDeclare
16、 function readcomm lib和user-(ByVal ncid As Integer,ByVal IpBuf As String,ByVal nSize As Integer) As IntegerDeclare function writeomm lib和user-(ByVal ncid As Integer,ByVal IpBuf As String,ByVal nSize As Integer) As IntegerDeclare function closecommlib“用户”as integer (byval ncid as integer)Declare function buildcb lib和用户String,IpDCB As DCB) As IntegerDeclare function getcolummerlib和用户Integer,I
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年甘肃林业职业技术学院单招职业适应性测试模拟试题及答案解析
- 2026年江西青年职业学院单招职业适应性测试备考题库及答案解析
- 2026年广东水利电力职业技术学院单招职业适应性考试备考题库及答案解析
- 2026年宜宾职业技术学院单招职业适应性考试备考题库及答案解析
- 2026年漳州城市职业学院单招职业适应性测试参考题库及答案解析
- 2026年四川应用技术职业学院单招职业适应性考试备考题库及答案解析
- 2026年福建船政交通职业学院单招职业适应性测试备考试题及答案解析
- 2026年河北旅游职业学院单招职业适应性考试备考题库及答案解析
- 期末职教工作总结
- 2026年浙江经济职业技术学院单招职业适应性考试模拟试题及答案解析
- 医疗器械经营管理制度目录
- 新疆大学答辩模板课件模板
- 个体工商户雇佣合同(2024版)
- 四川省遂宁市2024届高三上学期零诊考试高三理综(生物)
- 腹腔镜下胰十二指肠切除术的手术配合
- 最美的事800字作文
- 医院教学工作记录本
- 销售宝典输赢之摧龙六式课件
- 新时代创业思维知到章节答案智慧树2023年东北大学秦皇岛分校
- 重钢环保搬迁1780热轧宽带建设项目工程初步设计
- GB/T 19025-2023质量管理能力管理和人员发展指南
评论
0/150
提交评论