sub是子模块,可以调用但是没有返回值,function是有返回值的。

public sub 可以在其它form里调用,而private sub 只能在当前form里调用。

vb里的if else ,switch ,for ,while等语句对应语句:

If <条件表达式> Then <语句组1> [Else <语句组2> ]

If <条件表达式> Then <程序段1> [ElseIf <条件表达式2> Then <语句段2>] [ElseIf <条件表达式3> Then <语句段3>] … … [Else <语句段n> ] End If

Select Case Text1.Text Case 1, 3, 5, 7, 8, 10, 12 Label1.Caption = 31 Case 4, 6, 9, 11 Label1.Caption = 30 Case 2 Label1.Caption = 28 End Select End Sub

For <循环变量> = <初值> To <终值> [Step <步长> ] <循环体> Next [<循环变量>]

Do < While | Until > <循环条件表达式> <循环体> Loop

$是字符串型变量的标志

在字符串连接时
+号只能是两个字符串线连接
&号可以是字符串与另一种类型的数据相连接。例如
"a"+"b"是合法的,而 "a"+2是错误的
"a" & "b"是合法的,而"a" & 2也是合法的

MSComm 
      控件通过串行端口传输和接收数据,为应用程序提供串行通讯功能。MSComm控件在串口编程时非常方便,程序员不必去花时间去了解较为复杂的API函数,而且在VC、VB、Delphi等语言中均可使用。 
      Microsoft Communications 
      Control(以下简称MSComm)是Microsoft公司提供的简化Windows下串行通信编程的ActiveX控件,它为应用程序提供了通过串行接口收发数据的简便方法。具体的来说,它提供了两种处理通信问题的方法:一是事件驱动(Event-driven)方法,一是查询法。

1.MSComm控件两种处理通讯的方式 
          MSComm控件提供下列两种处理通讯的方式:事件驱动方式和查询方式。

1.1 事件驱动方式 
          事件驱动通讯是处理串行端口交互作用的一种非常有效的方法。在许多情况下,在事件发生时需要得到通知,例如,在串口接收缓冲区中有字符,或者 
      Carrier Detect (CD) 或 Request To Send (RTS) 线上一个字符到达或一个变化发生时。在这些情况下,可以利用 
      MSComm 控件的 OnComm 事件捕获并处理这些通讯事件。OnComm 事件还可以检查和处理通讯错误。所有通讯事件和通讯错误的列表,参阅 
      CommEvent 
      属性。在编程过程中,就可以在OnComm事件处理函数中加入自己的处理代码。这种方法的优点是程序响应及时,可靠性高。每个MSComm 
      控件对应着一个串行端口。如果应用程序需要访问多个串行端口,必须使用多个 MSComm 控件。

1.2 查询方式 
          查询方式实质上还是事件驱动,但在有些情况下,这种方式显得更为便捷。在程序的每个关键功能之后,可以通过检查 CommEvent 
      属性的值来查询事件和错误。如果应用程序较小,并且是自保持的,这种方法可能是更可取的。例如,如果写一个简单的电话拨号程序,则没有必要对每接收一个字符都产生事件,因为唯一等待接收的字符是调制解调器的“确定”响应。

2.MSComm 控件的常用属性 
      MSComm控件有很多重要的属性,但首先必须熟悉几个属性。 
      CommPort 设置并返回通讯端口号。 
      Settings 以字符串的形式设置并返回波特率、奇偶校验、数据位、停止位。 
      PortOpen 设置并返回通讯端口的状态。也可以打开和关闭端口。 
      Input     从接收缓冲区返回和删除字符。 
      Output    向传输缓冲区写一个字符串。 
      下面分别描述:

CommPort 属性 
          设置并返回通讯端口号。 
      语法 
      object.CommPort[ = value ] 
      CommPort 属性语法包括下列部分: 
      部分 描述 
      object 对象表达式,其值是“应用于”列表中的对象。 
      value 一整型值,说明端口号。 
      说明 
      在设计时,value 可以设置成从 1 到 16 的任何数(缺省值为 1)。但是如果用 PortOpen 属性打开一个并不存在的端口时,MSComm 
      控件会产生错误 68(设备无效)。 
      警告    必须在打开端口之前设置 CommPort 属性。 
      数据类型 
      Integer

Settings 属性 
          设置并返回波特率、奇偶校验、数据位、停止位参数。 
      语法 
      object.Settings[ = value] 
      Settings 属性语法包括下列部分: 
      部分 描述 
      object 对象表达式,其值是“应用于”列表中的对象。 
      value 字符串表达式,说明通讯端口的设置值,如下所述。 
      说明 
      当端口打开时,如果 value 非法,则 MSComm 控件产生错误 380(非法属性值)。 
      Value 由四个设置值组成,有如下的格式: 
      "BBBB,P,D,S" 
      BBBB 为波特率,P 为奇偶校验,D 为数据位数,S 为停止位数。value 的缺省值是: 
      "9600,N,8,1" 
      下表列出合法的波特率: 
      设置值 
      110 
      300 
      600 
      1200 
      2400 
      9600(缺省) 
      14400 
      19200 
      28800 
      38400 
      56000 
      128000 
      256000

下表说明合法的奇偶校验值。 
      设置值 描述 
      E 偶数 (Even) 
      M 标记 (Mark) 
      N 缺省 (Default) 
      None 
      O 奇数 (Odd) 
      S 空格 (Space)

下表列出合法的数据位值。 
      设置值 
      4 
      5 
      6 
      7 
      8 (缺省)

下表列出合法的停止位值。 
      设置值 
      1 (缺省) 
      1.5 
      2

数据类型 
      String 
      Settings 示例 
      下面的例子设置控件端口通讯,波特率 9600,无奇偶校验检查,8 个数据位,1 个停止位: 
      MSComm1.Settings = "9600,N,8,1"

PortOpen 属性 
      设置并返回通讯端口的状态(开或关)。在设计时无效。 
      语法 
      object.PortOpen[ = value] 
      PortOpen 属性语法包括下列部分:

部分 描述 
      object 对象表达式,其值是“应用于”列表中的对象。 
      value 布尔表达式,说明通讯端口的状态。 
      设置值 
      value 设置值是: 
      设置值 描述 
      True 端口开 
      False 端口关

说明 
      设置 PortOpen 属性为 True 打开端口。设置为 False 关闭端口并清除接收和传输缓冲区。当应用程序终止时,MSComm 
      控件自动关闭串行端口。 
      在打开端口之前,确定 CommPort 属性设置为一个合法的端口号。如果 CommPort 
      属性设置为一个非法的端口号,则当打开该端口时,MSComm 控件产生错误 68(设备无效)。 
      另外,串行端口设备必须支持 Settings 属性当前的设置值。如果 Settings 属性包含硬件不支持的通讯设置值,那么硬件可能不会正常工作。 
      如果在端口打开之前,DTREnable 或 RTSEnable 属性设置为 True,当关闭端口时,该属性设置为 False。否则,DTR 和 
      RTS 线保持其先前的状态。 
      数据类型 
      Boolean 
      PortOpen 属性示例 
      下例以波特率 9600 打开 1 号通讯端口,没有奇偶检查,8 个数据位,1 个停止位。 
      MSComm1.Settings = "9600,n,8,1" 
      MSComm1.CommPort = 1 
      MSComm1.PortOpen = True

Input 属性 
          返回并删除接收缓冲区中的数据流。该属性在设计时无效,在运行时为只读。 
      语法 
      object.Input 
      Input 属性语法包括下列部分: 
      部分 描述 
      object 对象表达式,其值是“应用于”列表中的对象。 
      说明 
      InputLen 属性确定被 Input 属性读取的字符数。设置 InputLen 为 0,则 Input 属性读取缓冲区中全部的内容。 
      InputMode 属性确定用 Input 属性读取的数据类型。如果设置 InputMode 为 comInputModeText,Input 
      属性通过一个 Variant 返回文本数据。如果设置 InputMode 为 comInputModeBinary,Input 属性通过一个 
      Variant .返回一二进制数据的数组。 
      数据类型 
      Variant 
      Input 属性示例 
      该例子说明如何从接收缓冲区读取数据。 
      Private Sub Command1_Click() 
      Dim InString as String 
      ' 读取所有可用数据。 
      MSComm1.InputLen = 0

' 检查数据。 
      If MSComm1.InBufferCount Then 
          ' Read data. 
          InString = MSComm1.Input 
      End If 
      End Sub

Output 属性 
          往传输缓冲区写数据流。该属性在设计时无效,在运行时为只读。 
      语法 
      object.Output [ = value ] 
      Output 属性语法包括下列部分: 
      部分 描述 
      object 对象表达式,其值是“应用于”列表中的对象。 
      value 要写到传输缓冲区中的一个字符串。

说明 
      Output 属性可以传输文本数据或二进制数据。用 Output 属性传输文本数据,必须定义一个包含一个字符串的 
      Variant。发送二进制数据,必须传递一个包含字节数组的 Variant 到 Output 属性。 
      正常情况下,如果发送一个 ANSI 字符串到应用程序,可以以文本数据的形式发送。如果发送包含嵌入控制字符、Null 
      字符等等的数据,要以二进制形式发送。 
      数据类型 
      Variant 
      Output 属性示例 
      下面的例子说明如何将用户键入的每一个字符送到串行端口: 
      Private Sub Form_KeyPress (KeyAscii As Integer) 
          Dim Buffer as Variant 
          ' 设置并打开窗口 
          MSComm1.CommPort = 1 
          MSComm1.PortOpen = True 
          Buffer = Chr$(KeyAscii) 
          MSComm1.Output = Buffer 
      End Sub

OnComm 事件 
      无论何时当 CommEvent 属性的值变化时,就产生 OnComm 事件,标志发生了一个通讯事件或一个错误。 
      语法 
      Private Sub object_OnComm () 
            OnComm 事件语法包括下列部分: 
            部分 描述 
            object 对象表达式,其值是“应用于”列表中的对象。 
            说明 
            CommEvent 属性包含实际错误或产生 OnComm 事件的数码。注意,设置 Rthreshold 或 Sthreshold 属性为 
            0,分别使捕获 comEvReceive 和 comEvSend 事件无效。 
            OnComm 事件示例 
            下例说明如何处理通讯错误和事件。可以在相关的 Case 语句之后插入代码来处理特定的错误或事件。 
            Private Sub MSComm_OnComm () 
                Select Case MSComm1.CommEvent 
                ' Handle each event or error by placing 
                ' code below each case statement 
            ' 错误 
                   Case comEventBreak    ' 收到 Break。 
                   Case comEventCDTO    ' CD (RLSD) 超时。 
                   Case comEventCTSTO    ' CTS Timeout。 
                   Case comEventDSRTO    ' DSR Timeout。 
                   Case comEventFrame    ' Framing Error 
                   Case comEventOverrun    '数据丢失。 
                   Case comEventRxOver   '接收缓冲区溢出。 
                   Case comEventRxParity    ' Parity 错误。 
                   Case comEventTxFull     '传输缓冲区已满。 
                   Case comEventDCB     '获取 DCB 时意外错误 
                ' 事件 
                   Case comEvCD    ' CD 线状态变化。 
                   Case comEvCTS    ' CTS 线状态变化。 
                   Case comEvDSR    ' DSR 线状态变化。 
                   Case comEvRing    ' Ring Indicator 变化。 
                   Case comEvReceive    ' 收到 RThreshold # ofchars. 
                   Case comEvSend    ' 传输缓冲区有 Sthreshold 个字符                     
             ' 
                   Case comEvEof    ' 输入数据流中发现 EOF 字符 
                End Select 
            End Sub 
            CommEvent 属性 
            返回最近的通讯事件或错误。该属性在设计时无效,在运行时为只读。 
            语法 
            object.CommEvent 
            CommEvent 属性语法包括下列部分: 
            部分 描述 
            object 对象表达式,其值是“应用于”列表中的对象。

说明 
            只要有通讯错误或事件发生时都会产生 OnComm 事件,CommEvent 属性存有该错误或事件的数值代码。要确定引发 OnComm 
            事件的确切的错误或事件,请参阅 CommEvent 属性。 
            CommEvent 属性返回下列值之一来表示不同的通讯错误或事件。这些常数可以在该控件的对象库中找到。通讯错误包括下列设置值: 
            常数 值 描述 
            comEventBreak 1001 接收到一个中断信号。 
            comEventCTSTO 1002 Clear To Send 超时。在系统规定时间内传输一个字符时,Clear To Send 
            线为低电平。 
            comEventDSRTO 1003 Data Set Ready 超时。在系统规定时间内传输一个字符时,Data Set Ready 
            线为低电平。 
            comEventFrame 1004 帧错误。硬件检测到一帧错误。 
            comEventOverrun 1006 端口超速。没有在下一个字符到达之前从硬件读取字符,该字符丢失。 
            comEventCDTO 1007 载波检测超时。在系统规定时间内传输一个字符时,Carrier Detect 
            线为低电平。Carrier Detect 也称为 Receive Line Signal Detect (RLSD)。 
            comEventRxOver 1008 接受缓冲区溢出。接收缓冲区没有空间。 
            comEventRxParity 1009 奇偶校验。硬件检测到奇偶校验错误 
            comEventTxFull 1010 传输缓冲区已满。传输字符时传输缓冲区已满 
            comEventDCB 1011 检索端口的设备控制块 (DCB) 时的意外错误

通讯事件包括下列设置值: 
            常数 值 描述 
            comEvSend 1 在传输缓冲区中有比 Sthreshold 数少的字符。 
            comEvReceive 2 收到 Rthreshold 个字符。该事件将持续产生直到用 Input 属性从接收缓冲区中删除数据。 
            comEvCTS 3 Clear To Send 线的状态发生变化。 
            comEvDSR 4 Data Set Ready 线的状态发生变化。该事件只在 DST 从 1 变到 0 时才发生。 
            comEvCD 5 Carrier Detect 线的状态发生变化。 
            comEvRing 6 检测到振铃信号。一些 UART(通用异步接收— 传输)可能不支持该事件。 
            comEvEOF 7 收到文件结束(ASCII 字符为 26)字符。 
            数据类型 
            Integer

串口程序示例

'串口初始化

Private Sub Form_Load()

MSComm1.CommPort = 1             '设置通信端口号为COM1

MSComm1.Settings = "9600,n,8,1"      '设置串口参数

MSComm1.InputMode = 0             '接收文本型数据

MSComm1.RThreshold = 1 '接收缓冲区每收到一个字符都会使 MSComm 控件触发OnComm 事件

MSComm1.PortOpen = True          '打开通信端口1

End Sub

'把字符通过串口发送出去

'启动定时器

Private Sub Cmdsend_Click()

If Textsend.Text = "" Then

pp = MsgBox("发送的数据不能为空!", 16)

Exit Sub

End If

MSComm1.Output = Trim(Textsend.Text)

End Sub

'MSComm 的 OnComm 事件程序

'由 CommEvent 属性值的不同,将各自的程序代码写入相关的子程序中

'只要 RThresold 中的设定字符数到达时便会使得 CommEvent 属性值变成 comEvReceive

'因此接收的子程序便会被执行

Private Sub MSComm1_OnComm()

Dim buf$

Select Case MSComm1.CommEvent

'通过取代每一个 case 表达式来处理每个事件与错误

Case comEvCD               ' CD 线的状态发生变化

Case comEvCTS              ' CTS 线的状态发生变化

Case comEvDSR               ' DSR 线的状态发生变化

Case comEvReceive

buf = Trim(MSComm1.Input)       '将缓冲区内的数据读入buf变量中

Case comEvSend

End Select

TextReceive.Text = TextReceive.Text & buf

End Sub

'停止程序运行

Private Sub Cmdquit_Click()

Unload Me

End Sub

'关闭通信端口,

Private Sub Form_Unload(Cancel As Integer)

MSComm1.PortOpen = False

End Sub

vb编写串口调试程序的更多相关文章

  1. VS2010环境下使用VB编写串口助手

    1.在Form1的设计模式下添加以下控件: 2.添加好控件之后我们就可以打开Form1.vb进行编程了: '使用串口需要引用的命名空间 Imports System.IO.Ports Imports ...

  2. VB编写的验证码生成器

    验证码(CAPTCHA)是“Completely AutomatedPublicTuring test to tell Computers andHumansApart”(全自动区分计算机和人类的图灵 ...

  3. Java编写串口程序

    用Java编写串口程序一般都会用到这个 http://fizzed.com/oss/rxtx-for-java 根据电脑的情况下载 解压以后有安装文档 For a JDK installation: ...

  4. 通过编写串口助手工具学习MFC过程--(十一)弹出模态型对话框

    通过编写串口助手工具学习MFC过程 因为以前也做过几次MFC的编程,每次都是项目完成时,MFC基本操作清楚了,但是过好长时间不再接触MFC的项目,再次做MFC的项目时,又要从头开始熟悉.这次通过做一个 ...

  5. 通过编写串口助手工具学习MFC过程——(十)UpdateData()用法和编辑框的赋值、取值

    通过编写串口助手工具学习MFC过程 因为以前也做过几次MFC的编程,每次都是项目完成时,MFC基本操作清楚了,但是过好长时间不再接触MFC的项目,再次做MFC的项目时,又要从头开始熟悉.这次通过做一个 ...

  6. 通过编写串口助手工具学习MFC过程——(九)自动识别串口的方法

    通过编写串口助手工具学习MFC过程 因为以前也做过几次MFC的编程,每次都是项目完成时,MFC基本操作清楚了,但是过好长时间不再接触MFC的项目,再次做MFC的项目时,又要从头开始熟悉.这次通过做一个 ...

  7. 通过编写串口助手工具学习MFC过程——(八)遇到的一些问题

    通过编写串口助手工具学习MFC过程 因为以前也做过几次MFC的编程,每次都是项目完成时,MFC基本操作清楚了,但是过好长时间不再接触MFC的项目,再次做MFC的项目时,又要从头开始熟悉.这次通过做一个 ...

  8. 通过编写串口助手工具学习MFC过程——(六)添加Edit编辑框控件

    通过编写串口助手工具学习MFC过程 因为以前也做过几次MFC的编程,每次都是项目完成时,MFC基本操作清楚了,但是过好长时间不再接触MFC的项目,再次做MFC的项目时,又要从头开始熟悉.这次通过做一个 ...

  9. 通过编写串口助手工具学习MFC过程——(七)添加Tab Control控件

    通过编写串口助手工具学习MFC过程 因为以前也做过几次MFC的编程,每次都是项目完成时,MFC基本操作清楚了,但是过好长时间不再接触MFC的项目,再次做MFC的项目时,又要从头开始熟悉.这次通过做一个 ...

随机推荐

  1. 树 & 二叉树

    2018-01-04 19:13:46 一.树 在计算机科学中,树(英语:tree)是一种数据结构,用来模拟具有树状结构性质的数据集合.它是由n(n>0)个有限节点组成一个具有层次关系的集合.把 ...

  2. python 读取、保存、二值化、灰度化图片+opencv处理图片的方法

    http://blog.csdn.net/johinieli/article/details/69389980

  3. py-faster-rcnn:在windows上配置

    0.先说一下本机配置 opencv2+cuda7.5+cudnn+anaconda,这些基础的之前都是配置好了的,python环境建议使用anaconda,用到的库基本都有了,好像没有easydict ...

  4. 利用 LINQ的skip和Take 方法对List实现分页效果

    var testList=new List<string>(); )).Take(pageSize); //skip是跳过的条数,pageSize*(pageIndex-),Take 是返 ...

  5. 快速切题 poj 2485 Highways prim算法+堆 不完全优化 难度:0

    Highways Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 23033   Accepted: 10612 Descri ...

  6. RxJava 详解

    给 Android 开发者的 RxJava 详解: http://gank.io/post/560e15be2dca930e00da1083#toc_1

  7. 关于python中urllib.urlencode的时候出错:UnicodeEncodeError: ‘ascii’的记录

    原文我参见了:http://hi.baidu.com/setcookie/item/ddc6b694b1f13435336eeb3c 为毛我要费事的写下了,就是为了让自己记录一下,下面的也是直接摘录过 ...

  8. APUE学习笔记——5缓冲Buffering、流、文件对象

    缓冲的几个基本概念     缓冲的作用:减少系统read和write的次数. 全缓冲         系统标准I/O缓冲区被写满时才进行真正的I/O操作.         磁盘文件一般使用全缓冲   ...

  9. 【Java实战】源码解析为什么覆盖equals方法时总要覆盖hashCode方法

    1.背景知识 本文代码基于jdk1.8分析,<Java编程思想>中有如下描述: 另外再看下Object.java对hashCode()方法的说明: /** * Returns a hash ...

  10. Aria2 - OS X 下载百度云资源神器

    官网介绍: (Aria2 is a light weight multi-protocol & multi-source command-line download utility. It s ...