你现在位置:首页>技术论文>数据通讯>正文
VBA的妙用:串口通讯程序与EXCEL相结合
日期:2010-5-25 20:55:40 点击:
来源:本站整理
作者:
点击【】放大字体.
WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)

1 VBA简介
WWW_P※LCJS_COM-PLC-)技.术_网

  Visual Basic的应用程序版(VBA)是Microsoft公司长期追求的目标,使可编程应用软件得到完美的实现,它作为一种通用的宏语言可被所有的Microsoft 可编程应用软件所共享。在没有VBA以前,一些应用软件如Excel、Word、Access、Project等都采用自己的宏语言供用户开发使用,但每种宏语言都是独立的,需要用户专门去学习,它们之间互不兼容,使得应用软件之间不能在程序上互联。拥有一种可跨越多个应用软件,使各应用软件产品具有高效、灵活且一致性的开发工具是至关重要的。VBA作为一种新一代的标准宏语言,具有上述跨越多种应用软件并且具有控制应用软件对象的能力,使得程序设计人员仅需学习一种统一的标准宏语言,就可以转换到特定的应用软件上去,程序设计人员在编程和调试代码时所看到的是相同的用户界面,而且VBA与原应用软件的宏语言相兼容,以保障用户在代码和工作上的投资。有了VBA以后,多种应用程序共用一种宏语言,节省了程序人员的学习时间,提高了不同应用软件间的相互开发和调用能力。
WWW_PL※CJS_COM-PLC-技.术_网

WWW_PLCJS_COM-PLC-技.术_网

2 串口通讯程序
WWW_P※LCJS_COM-PLC-)技.术_网

  简单的串口通讯程序一般是先由上位机向下位机发送读(write)或写(read)数据命令,然后等待下位机应答;下位机接受到命令之后,首先要对数据命令进行校验,对于符合校验约束的命令下位机会将相应的数据回复到上位机,对于不符合校验约束的命令下位机或将其抛弃或回复错误信息;上位机接收到下位机的响应之后,首先要对接收到的回复信息进行校验,对不符合校验约束的数据进行异常处理,对符合校验约束的信息进行解码,解码之后的信息便是上位机从下位机获得的有效信息了。
WWW_PL※CJS_COM-PLC-技.术_网

  上位机向串口发送读命令之后需要等待下位机应答并读取回复信息,常用的等待有3种方式:
WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)

1) 轮询式
WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)

  上位机向串口发送读命令之后一直等待下位机应答,通讯程序处于一个等待循环中。
WWW_PLCJS@_COM%-PLC-技.术_网

  优点:速度快、误码率低(几乎不存在误码)。
WWW_PLCJS@_COM%-PLC-技.术_网

  缺点:消耗CPU。(解决办法:使用Sleep()API函数)。
WW.W_PLC※JS_C,OM-PL,C-技.术_网

2) 消息式
P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户

  消息式通讯是采用响应WINDOWS消息的办法读取串口。
WWW_PLCJS@_COM%-PLC-技.术_网

  优点:节省CPU、误码率低。
P.L.C.技.术.网——可编程控制器技术门户

  缺点:发送接收机制过于繁琐。
WWW.PLCJS.COM——可编程控制器技术门户

3) 定时接收式
W1WW_P4LCJS_COM-PLC-技.术_网

  定时接收式通讯是根据预设的定时器时间进行读取数据。
——可——编——程——控-制-器-技——术——门——户

  优点:发送接收机制相对简单、节省CPU。
W1WW_P4LCJS_COM-PLC-技.术_网

  缺点:误码率太高,不同的硬件需要配置不同的通讯时间参数,需要严格的校验运算。
WWW.PLCJS.COM——可编程控制器技术门户

WW.W_PLC※JS_C,OM-PL,C-技.术_网

3 EXCEL-VBA串口通讯实例
WWW_P※LCJS_CO※M-PLC-技-.术_网

  软件:EXCEL。
WWW_PLCJS@_COM%-PLC-技.术_网

  硬件:艾默生EC10 PLC。
W1WW_P4LCJS_COM-PLC-技.术_网

  功能:通过EXCEL中的按钮控制PLC的输出继电器Y0。
WWW_PL※CJS_COM-PLC-技.术_网

  界面:RUN(运行通讯)、STOP(停止通讯)、Y0(Y0 ON/OFF控制)。
WWW_PLCJS_COM-PLC-技.术_网

WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)

 
plcjs.技.术_网

WWW_PLCJS@_COM%-PLC-技.术_网

  主程序:
P.L.C.技.术.网——可编程控制器技术门户

  Option Explicit
——可——编——程——控-制-器-技——术——门——户

  Public Declare  Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户

  Public Declare  Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
WW.W_PLCJS_COM-PLC-技.术_网

  Public Declare  Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
WWW_PLC※JS_COM-PmLC-技.术_网

  Public com1 As New MSCommLib.MSComm
WWW_P※LCJS_COM-PLC-)技.术_网

  Public y0Stt As Boolean
P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户

  Public y0_on As Boolean
P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户

  Public tmrFlag As Boolean
WW.W_PLCJS_COM-PLC-技.术_网

  Public tmr As Long
WWcW_PLCJS_COM-PLC-技.术_网

  Sub runn()
WWW_PLC※JS_COM-PmLC-技.术_网

    On Error GoTo ed
WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)

    com1.Settings = "9600,e,8,1"
WWW.PLCJS.COM——可编程控制器技术门户

    If com1.PortOpen = False Then
WWW_PLCJS@_COM%-PLC-技.术_网

      com1.PortOpen = True
WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)

    End If
WW.W_PLC※JS_C,OM-PL,C-技.术_网

    tmr = SetTimer(0, 0, 500, AddressOf ontimer)
WWW.PLCJS.COM——可编程控制器技术门户

    Exit Sub
P.L.C.技.术.网——可编程控制器技术门户

  ed:
WWW_P※LCJS_COM-PLC-)技.术_网

  MsgBox "串口打开错误!"
WWW_P※LCJS_CO※M-PLC-技-.术_网

  End Sub
WWW_P※LCJS_CO※M-PLC-技-.术_网

  Sub stopp()
WWW_PLCJS_COM-PLC-技.术_网

    If com1.PortOpen = True Then
WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)

      com1.PortOpen = False
WWW_PLCJS@_COM%-PLC-技.术_网

      KillTimer 0, tmr
WWcW_PLCJS_COM-PLC-技.术_网

    End If
WWW_P※LCJS_COM-PLC-)技.术_网

  End Sub
——可——编——程——控-制-器-技——术——门——户

  Public Function ontimer() 
WWW_PL※CJS_COM-PLC-技.术_网

  Dim a(7) As Byte
WWW_PL※CJS_COM-PLC-技.术_网

  Dim add As Long
WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)

  On Error GoTo ed
WWW_P※LCJS_CO※M-PLC-技-.术_网

  If tmrFlag = False Then
WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)

    tmrFlag = True
WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)

    If y0_on = True Then
——可——编——程——控-制-器-技——术——门——户

      y0_on = False
WWcW_PLCJS_COM-PLC-技.术_网

      If y0Stt = True Then
WW.W_PLC※JS_C,OM-PL,C-技.术_网

      a(0) = &H1
P.L.C.技.术.网——可编程控制器技术门户

      a(1) = &H5
WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)

      a(2) = &H0
WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)

      a(3) = &H0
plcjs.技.术_网

      a(4) = &HFF
WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)

      a(5) = &H0
WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)

      a(6) = &H8C
P.L.C.技.术.网——可编程控制器技术门户

      a(7) = &H3A
WWW.PLCJS.COM——可编程控制器技术门户

      com1.Output = a
WWW_P※LCJS_COM-PLC-)技.术_网

      add = 0
WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)

      Do
WWW_P※LCJS_COM-PLC-)技.术_网

        DoEvents
WWW_PLC※JS_COM-PmLC-技.术_网

        Sleep 10
WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)

        add = add 1
WW.W_PLC※JS_C,OM-PL,C-技.术_网

        If add >= 100 Then
WW.W_PLCJS_COM-PLC-技.术_网

          Exit Do
WWW_P※LCJS_CO※M-PLC-技-.术_网

        End If
WWcW_PLCJS_COM-PLC-技.术_网

      Loop Until com1.InBufferCount  >= 8
WWW_P※LCJS_CO※M-PLC-技-.术_网

      Else
W1WW_P4LCJS_COM-PLC-技.术_网

      a(0) = &H1
WWW_P※LCJS_COM-PLC-)技.术_网

      a(1) = &H5
plcjs.技.术_网

      a(2) = &H0
WWW_P※LCJS_COM-PLC-)技.术_网

      a(3) = &H0
WWW_P※LCJS_CO※M-PLC-技-.术_网

      a(4) = &H0
WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)

      a(5) = &H0
P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户

      a(6) = &HCD
P.L.C.技.术.网——可编程控制器技术门户

      a(7) = &HCA
WWcW_PLCJS_COM-PLC-技.术_网

      com1.Output = a
WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)

      add = 0
WWW_PLC※JS_COM-PmLC-技.术_网

      Do
WWW.PLCJS.COM——可编程控制器技术门户

        DoEvents
plcjs.技.术_网

        Sleep 10
WWW_PLC※JS_COM-PmLC-技.术_网

        add = add 1
WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)

        If add >= 100 Then
WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)

          Exit Do
WWW_PLC※JS_COM-PmLC-技.术_网

        End If
plcjs.技.术_网

      Loop Until com1.InBufferCount  >= 8
WW.W_PLC※JS_C,OM-PL,C-技.术_网

      End If
WWW_PLCJS_COM-PLC-技.术_网

    End If
WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)

  End If
WWW.PLCJS.COM——可编程控制器技术门户

  tmrFlag = False
WW.W_PLCJS_COM-PLC-技.术_网

  Exit Function
WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)

  ed: MsgBox "串口错误!"

本新闻共2页,当前在第11 2  
WW.W_PLCJS_COM-PLC-技.术_网

上一篇: 用网线制作VGA线
下一: 没有了
评论内容
载入中...
载入中...
P
L
C



|










|


P
L
C









·最新招聘信息
·最新求职信息
·推荐产品
·推荐厂商
·栏目热门排行
·站内热门排行