版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、文档从互联网中收集,已重新修正排版, 式支持编辑,如有帮助欢迎下载支持。VB 现串口通讯目前,Visual Basic (简称 VB) 已成 WINDOWS 系统开发的主要语言,以其高 效简易学及功能强大的特点越来越为广大程序设计人员及用户所青睐VB 支面向对 象的程序设计,具有结构化的事件驱动编程模式并可以使用无限扩增的控件。在 VB 应用 程序中可以方便地调用 WINDOWS API 函,使得程效率提高,应用功能增强。利用 VB 提供的这些功能,我们可以有三种方法完成串口通信。一种是用 V 提的 具有强大功能的通信控件另一种方法是调用 WINDOWS API 函使 WINDOWS 提 的通
2、信函数编写移植性强的应用程;第三是利用文件的输/ 输完成,该方法简便易行, 但有一定的局限性。一、利用通信控件() 完串口通信VB 提供了通信控件 ,件名为 MSCOMM. VBX该控件可设置串行通信 的数据发送和接收串口状态及串行通信的信息格式和协议进行设置通过程中可以 触发 OnComm 事,在该件过程进行数据检验处理及检错,还可以通过编程访问 CommEvent 属性来了解通信的情况,进行收发数据的理。每个通信控件对应一个串口, 如果要访问多个通信口,则要设计多个通信控件。1、信控件事件及基本属性()件OnComm:通信控件只提供了一事件,该事件的触发可以对串口的通信事件及错误 进行处理
3、。通过对 CommEvent 属性的判断可知当前通信错误和事件,分别对每个 CommEvent 值进行编程就完成了对各个错误和事件的理。如CommEvent = SEND 表示发送事件。这些信息可从 VB 提供的常量文件 TXT 查出。()性CommPort :置通信控件与哪个串口相接,设置并返回通信口号。Setting 设通的信息格式为字符型顺序为波率校数位停位。 PortOpen :尔型、开关通信口。InputLen :从接收缓冲区读取字符个数。Input ,Output :读取接收缓冲区或写入发送缓冲区字符。以上五种属性对串口完成基本的设置和操作,下面的三种属性是描述如何利用 VB 提
4、供的事件驱动机制来实现通信。CommEvent :回通信过程中产生的错误信息及事件,了解通信状况。 式支持编辑,如有帮助欢迎下载支持。文档从互联网中收集,已重新修正排版, 式支持编辑,如有帮助欢迎下载支持。SThreshold :置并返回不触发 OnComm 事件时发送缓冲区被允许的最少字符。 当缓冲区的字符少于设置的值时,则触发 OnComm 事件,并把 CommEvent 设 EVSEND当 SThreshold = 0 则止发送触发 OnComm 事,当 SThreshold = 1 则发送缓冲区为空时就触发 OnComm 事件。利用这一属性,就可完成发 送数据后的一系列操作。如:对刚发
5、送的数据进行处理,当串口是和 MODEM 通时,发 送完数据后可进行拆除线路联接、挂机等操作。RThreshold :置并返回不触发 OnComm 事件时接收缓冲区被允许的最多字符数。 当缓冲区的字符多于设置的值时,则触发 OnComm 事,并把 CommEvent 设 RECEIVE,当 RThreshold = 0 则禁止接收触发 事,当 RThreshold = 1 则收缓冲区有一个或更多字符时就触发 OnComm 事。用这一属性, 就可完成对串口接收数据的处理。2、用通信件的实例Sub Form1 load ()form1. show设置 COM1comm1. commport = 1
6、comm1. Setting = 9600 ,o ,8 ,1 波特率:9600 奇校验,8 位数据1 位停止位comm1. Inputlen = 0 取接收缓冲区的所有字符comm1. OutBufferSize = 512 设置发送缓冲区为 512 字节comm1. InBufferSize = 512 置接收缓冲区为 512 字节comm1. SThreshold = 0 止发送事件comm1. RThreshold = 1 每个字符到接收缓冲区都触发接收事件设置 COM2comm2. commport = 2comm2. Setting = 2400 , ,8 ,1 波特率:2400 偶
7、验, 位数据,1 位停止位comm2. Inputlen = 0 取接收缓冲区的所有字符comm2. OutBufferSize = 512 设置发送缓冲区为 512 字节comm2. InBufferSize = 512 置接收缓冲区为 512 字节comm2. SThreshold = 1 送缓冲区空触发发送事件 式支持编辑,如有帮助欢迎下载支持。文档从互联网中收集,已重新修正排版, 式支持编辑,如有帮助欢迎下载支持。comm2. RThreshold = 0 禁接收事件打开 COM1 ,COM2comm1. Portopen = Truecomm2. Portopen = TrueTim
8、er1. interval = 5000End SubSub Comm1 OnComm)Dim Inbuff as stringDim i as integer n as integer ,t as integerSelect Case Comm1. CommEvencase MSCOMMEVRECEIVEInbuff = Comm1. Inputn = len ( Inbuff)For i = 1 to nt = Asc (Mid ( Inbuff ,i ,1) ) or &HFFprint fNext iEnd SelectEnd SubSub Comm2 OnComm)Select Ca
9、se Comm2. CommEventCase MSCOMMEVSENDPrint timeEnd SelectEnd Sub 式支持编辑,如有帮助欢迎下载支持。文档从互联网中收集,已重新修正排版, 式支持编辑,如有帮助欢迎下载支持。Sub Timer1 Timer ()Comm2. output = Second (Now)End sub二、通过调用 API 函实现通信以上说明了用 VB 提供的控件实现通信的方法,只要理解了 VB 控的机制就很容易 完成对串口的操作,但可移植性差。但 VB 可以很容易调用 API 函数实现通信。1、VB 对 API 的用VB 使用动态链接库 (Dynamic
10、 Link ) 的力,大大扩展了其功能。 WINDOWS 本提供了 API 函数包括三大动态链接库KERNEL 库GDI 库USER 库, 通过 VB 用户可以直接调用这些库中的函数调用之前,必须首先在 VB 中明。该声明 可为模块级或窗体级当作为模级声明时其用域为所有 FORM 和 MODULE而为 窗体级声明时其作用域为该声明所在的 FORM。VB 调用 DLL 的式:Declare Sub 过名 Lib库名Alias别名 ( ByVal 参 As 类型)Declare Function 函名 Lib库名Alias名 ( ByVal 参 As 类型 As 类型在声明中:DECLARE 表声
11、明 DLL 中函数,声明是不具有返回值的过程时用 SUB 关键字,而如果调用的函数具有返回值须用 FUNCTION 关键字将其声明为函数并在声明语句的最后用 A 指 明函数返回值的类型LIB 关字表示当前声明的过程或函数是库名所指定的库中函数而非 VB 本的函数。库名,就是对应动态链接库的名称,其中通信函数USER 库中ByVal 关键字将原参数数据类型一一对应到 VB 类中。WINDOWS 的 HELP 文 WINSDK. HLP 中含了完整的 WINDOWS API 函信 息,可用该文件查看联机函数、数据结构及错误信息。2、API 提供的通信函数为了方便说明,我们将有关通信的函数及相关的数
12、据结构放在全局模块中,文件名为 (见 API 编程函数实例) 。以是这些函数的基介绍: 式支持编辑,如有帮助欢迎下载支持。文档从互联网中收集,已重新修正排版, 式支持编辑,如有帮助欢迎下载支持。()OpenComm( As String ,wInQueue As Inte-ger ,wOutQueue As Integer)IpComName :设备名,以COMn式说明,n 为设备号wInQueue 、 wOutQueue :分别以字节为单位明发送、接收缓冲区的大小。该函数调用成功返回打开 的设备号,否则返回一负数代表错误信息码。()SetCommState ( IpDCB As DCBIpD
13、CB : DCB 结存放设备所希望的通信设置DCB 结构如 COMM.BAS 中所 示) ,其 DCB 的 成员必须标识该设备。如果函数调用成功返回 0 否则,返回值小于 0。()ReadCommnCid As Integer , As String , As ) (nCid As Integer , As String , As )这是用来对通信设备进行读写的函数nCid :说明要读写的通信设备号, IpBuf : 为读写缓冲区nSize :为要读写的字节数。如果读写成,返回读写的字节数,否则是小 于 的值,并且其绝对值为读写的字节数。()( As Integer该函数关闭 nCid 所定的
14、通信设备,并且释放分配给设备的发送,接收缓冲存储器, 调用成功返回 0 否则,返回值小于 0。()BuildCommDCB As String , IpDCB As DCBlpDef : 为字符串定设备控制信息,此字符串具有 MS-DOS 中 MODE 命令所 使用的参数形式IpDCB :一 DCB 数结构。该函数将 IpDef 字串转换成串行设备 控制块) 代。()GetCommError (nCid As Integer , IpStat As )该函数检取 nCid 指的设备最近的错误值和当前状态 是 COMSTAT 结, 具体形式如 COMM.BAS 中所定义的值为 COMM.BAS
15、中带 CE- 的常量的某种组合。3. 用 API 函编程实例这个例子是一仿真发送机,将从键盘输入的字符发送给 COM 端。在 FORM 中加一 按钮 COMMAND1 来闭通信口。Type DCBId As String 3 1BaudRate As Integer 式支持编辑,如有帮助欢迎下载支持。文档从互联网中收集,已重新修正排版, 式支持编辑,如有帮助欢迎下载支持。ByteSize As String 3 1Parity As String 3 1StopBits As String 3 1RlsTimeout As IntegerCtsTimeout As IntegerDsrTime
16、out 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 String 3 1EvtChar As String 3 1TxDelay As IntegerEnd TypeType COMSTATBits As String 3 1cbInQue As IntegercbOutQue As IntegerEnd TypeDeclar
17、Function OpenComm User (ByVal IpComName AsString , ByVal wInQueue As Integer , ByVal wOutQueue As Integer ) As IntegerDeclare Function SetCommState Lib User ( IpDCB DCB) 式支持编辑,如有帮助欢迎下载支持。文档从互联网中收集,已重新修正排版, 式支持编辑,如有帮助欢迎下载支持。As IntegerDeclare Function ReadComm Lib User ( nCid As Integer , ByVal IpBuf
18、As String , ByVal nSize As Integer ) As IntegerDeclare Function WriteComm Lib User (ByVal nCid As Integer , ByVal IpBuf As String , ByVal nSize As Integer ) As IntegerDeclare Function Closecomm Lib User (ByVal nCid As Integer) As IntegerDecla re Function BuildCommDCB User (ByVal IpDef AsString , IpD
19、CB As DCB) As IntegerDeclare Function GetCommError Lib User (ByVal nCid AsInteger , IpStat COMSTAT) As IntegerGlobal IpDCB As DCBGlobal nCid As IntegerSub Form1 load ()Dim comset As Stringcomset =“COM2nCid = OpenComm (comset ,512 , ) 打开 COM2 设置接收,发送缓冲区为 字节If nCid 0 Then 处理错误MsgBox“能打开 COM: + Str (nC
20、id ) +“Error Num2ber : + Str (nCid) 16endend ifCommand1. Caption =“ 关闭通信口 置串口 DCB 设备控制块comset =“COM2 :9600 ,n ,8 ,1If (BuildCommDCBcomset ,LpDCB) ) ThenMsgBox“能建立 COMM DCB ,16 式支持编辑,如有帮助欢迎下载支持。文档从互联网中收集,已重新修正排版, 式支持编辑,如有帮助欢迎下载支持。endend ifLpDCB. Id = Chr (nCid)If (SetCommState (LpDCB) ) Then 设置串口状态Ms
21、gBox不能设置口状态 ,16endendifEnd SubSub Form1-keyPress (keyAscii As Integer )Dim nsend As integer ,x As integerDim Lpstate As COMSTAT 通信状态块Static inbuff as stringinbuff = imbuff + Chr ( KeyAscii)x = GetCommError (ncid ,Lpstate) 读取当前串口错误或状态if lpstate. 512 Then 送缓冲区有空间否?Nsend = WriteComm (nCid ,inbuff ,Len
22、(inbuff) ) 发送 inbuffif Nsend = 0 then Nsend = - Nsend 忽略错误inbuff = Mid (inbuff ,Nsend + 1) 清除已发送的字符end ifend ifEnd SubSub Command1-Click ()Dim Nclose As integerNclose = CloseComm (nCid)If Nclose 0 Then 式支持编辑,如有帮助欢迎下载支持。文档从互联网中收集,已重新修正排版, 式支持编辑,如有帮助欢迎下载支持。MsgBox“能关闭 COMM 口: + Str (nCid) ,endelsencid = 0end ifCmmand1. Caption =“ 通信已关闭”End Sub三、用文件输入/ 输出技术完成通信用 VB 提的以上两种方法已足以应付各种串行通信的问题。另外还可以用文件输 输出的方法完成简单的通信应用程序,如拨号。它用我们非常熟悉的 BASIC 输入/ 输指 令,如:OPEN、GETPUTPRINTWRITE 、ERR 来成打开、关闭
温馨提示
- 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云南玉溪元江县消防救援大队招聘政府专职消防队员10人备考考试试题及答案解析
- 2026年赤峰工业职业技术学院单招综合素质考试备考题库含详细答案解析
- DB21-T 4279-2025 黑果腺肋花楸农业气象服务技术规程
- 2026广东广州市海珠区住房和建设局招聘雇员7人考试参考试题及答案解析
- 2026新疆伊犁州新源县总工会面向社会招聘工会社会工作者3人考试备考题库及答案解析
- 广东省汕头市2025-2026学年高三上学期期末语文试题(含答案)(含解析)
- 110接处警课件培训
- DB15∕T 385-2025 行业用水定额
- 火箭军教学课件
- 新媒体运营专员笔试考试题集含答案
- 护理不良事件之血标本采集错误分析与防控
- 数字孪生技术服务协议2025
- 心脏电生理检查操作标准流程
评论
0/150
提交评论