《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 其他 > 設(shè)計(jì)應(yīng)用 > VBA的妙用:串口通訊程序與EXCEL相結(jié)合
VBA的妙用:串口通訊程序與EXCEL相結(jié)合
徐向農(nóng)
摘要: VisualBasic的應(yīng)用程序版(VBA)是Microsoft公司長期追求的目標(biāo),使可編程應(yīng)用軟件得到完美的實(shí)現(xiàn),它作為一種通用的宏語言可被所有的Microsoft可編程應(yīng)用軟件所共享。
Abstract:
Key words :

1 VBA簡介
  Visual Basic的應(yīng)用程序版(VBA)是Microsoft公司長期追求的目標(biāo),使可編程應(yīng)用軟件得到完美的實(shí)現(xiàn),它作為一種通用的宏語言可被所有的Microsoft 可編程應(yīng)用軟件所共享。在沒有VBA以前,一些應(yīng)用軟件如Excel、Word、Access、Project等都采用自己的宏語言供用戶開發(fā)使用,但每種宏語言都是獨(dú)立的,需要用戶專門去學(xué)習(xí),它們之間互不兼容,使得應(yīng)用軟件之間不能在程序上互聯(lián)。擁有一種可跨越多個(gè)應(yīng)用軟件,使各應(yīng)用軟件產(chǎn)品具有高效、靈活且一致性的開發(fā)工具是至關(guān)重要的。VBA作為一種新一代的標(biāo)準(zhǔn)宏語言,具有上述跨越多種應(yīng)用軟件并且具有控制應(yīng)用軟件對象的能力,使得程序設(shè)計(jì)人員僅需學(xué)習(xí)一種統(tǒng)一的標(biāo)準(zhǔn)宏語言,就可以轉(zhuǎn)換到特定的應(yīng)用軟件上去,程序設(shè)計(jì)人員在編程和調(diào)試代碼時(shí)所看到的是相同的用戶界面,而且VBA與原應(yīng)用軟件的宏語言相兼容,以保障用戶在代碼和工作上的投資。有了VBA以后,多種應(yīng)用程序共用一種宏語言,節(jié)省了程序人員的學(xué)習(xí)時(shí)間,提高了不同應(yīng)用軟件間的相互開發(fā)和調(diào)用能力。

 

2 串口通訊程序
  簡單的串口通訊程序一般是先由上位機(jī)下位機(jī)發(fā)送讀(write)或?qū)?read)數(shù)據(jù)命令,然后等待下位機(jī)應(yīng)答;下位機(jī)接受到命令之后,首先要對數(shù)據(jù)命令進(jìn)行校驗(yàn),對于符合校驗(yàn)約束的命令下位機(jī)會(huì)將相應(yīng)的數(shù)據(jù)回復(fù)到上位機(jī),對于不符合校驗(yàn)約束的命令下位機(jī)或?qū)⑵鋻仐壔蚧貜?fù)錯(cuò)誤信息;上位機(jī)接收到下位機(jī)的響應(yīng)之后,首先要對接收到的回復(fù)信息進(jìn)行校驗(yàn),對不符合校驗(yàn)約束的數(shù)據(jù)進(jìn)行異常處理,對符合校驗(yàn)約束的信息進(jìn)行解碼,解碼之后的信息便是上位機(jī)從下位機(jī)獲得的有效信息了。
  上位機(jī)向串口發(fā)送讀命令之后需要等待下位機(jī)應(yīng)答并讀取回復(fù)信息,常用的等待有3種方式:
1) 輪詢式
  上位機(jī)向串口發(fā)送讀命令之后一直等待下位機(jī)應(yīng)答,通訊程序處于一個(gè)等待循環(huán)中。
  優(yōu)點(diǎn):速度快、誤碼率低(幾乎不存在誤碼)。
  缺點(diǎn):消耗CPU。(解決辦法:使用Sleep()API函數(shù))。
2) 消息式
  消息式通訊是采用響應(yīng)WINDOWS消息的辦法讀取串口。
  優(yōu)點(diǎn):節(jié)省CPU、誤碼率低。
  缺點(diǎn):發(fā)送接收機(jī)制過于繁瑣。
3) 定時(shí)接收式
  定時(shí)接收式通訊是根據(jù)預(yù)設(shè)的定時(shí)器時(shí)間進(jìn)行讀取數(shù)據(jù)。
  優(yōu)點(diǎn):發(fā)送接收機(jī)制相對簡單、節(jié)省CPU。
  缺點(diǎn):誤碼率太高,不同的硬件需要配置不同的通訊時(shí)間參數(shù),需要嚴(yán)格的校驗(yàn)運(yùn)算。

 

3 EXCEL-VBA串口通訊實(shí)例
  軟件:EXCEL。
  硬件:艾默生EC10 PLC。
  功能:通過EXCEL中的按鈕控制PLC的輸出繼電器Y0。
  界面:RUN(運(yùn)行通訊)、STOP(停止通訊)、Y0(Y0 ON/OFF控制)。


  主程序:
  Option Explicit
  Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
  Public Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
  Public Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
  Public com1 As New MSCommLib.MSComm
  Public y0Stt As Boolean
  Public y0_on As Boolean
  Public tmrFlag As Boolean
  Public tmr As Long
  Sub runn()
    On Error GoTo ed
    com1.Settings = "9600,e,8,1"
    If com1.PortOpen = False Then
      com1.PortOpen = True
    End If
    tmr = SetTimer(0, 0, 500, AddressOf ontimer)
    Exit Sub
  ed:
  MsgBox "串口打開錯(cuò)誤!"
  End Sub
  Sub stopp()
    If com1.PortOpen = True Then
      com1.PortOpen = False
      KillTimer 0, tmr
    End If
  End Sub
  Public Function ontimer() 
  Dim a(7) As Byte
  Dim add As Long
  On Error GoTo ed
  If tmrFlag = False Then
    tmrFlag = True
    If y0_on = True Then
      y0_on = False
      If y0Stt = True Then
      a(0) = &H1
      a(1) = &H5
      a(2) = &H0
      a(3) = &H0
      a(4) = &HFF
      a(5) = &H0
      a(6) = &H8C
      a(7) = &H3A
      com1.Output = a
      add = 0
      Do
        DoEvents
        Sleep 10
        add = add + 1
        If add >= 100 Then
          Exit Do
        End If
      Loop Until com1.InBufferCount >= 8
      Else
      a(0) = &H1
      a(1) = &H5
      a(2) = &H0
      a(3) = &H0
      a(4) = &H0
      a(5) = &H0
      a(6) = &HCD
      a(7) = &HCA
      com1.Output = a
      add = 0
      Do
        DoEvents
        Sleep 10
        add = add + 1
        If add >= 100 Then
          Exit Do
        End If
      Loop Until com1.InBufferCount >= 8
      End If
    End If
  End If
  tmrFlag = False
  Exit Function
  ed: MsgBox "串口錯(cuò)誤!"
  tmrFlag = False
  End Function
  界面程序:
  Private Sub cmd1_Click()
  y0_on = True
  y0Stt = Not y0Stt
  End Sub
  Private Sub cmdRun_Click()
  runn
  CheckBox1.Value = 1
  End Sub
  Private Sub cmdStop_Click()
  stopp
  CheckBox1.Value = 0
  End Sub

 


4 結(jié)束語
  由上可見,VBA已經(jīng)廣泛應(yīng)用于微軟的應(yīng)用軟件當(dāng)中,所以為更好的完善二次開發(fā)功能,眾多的組態(tài)軟件都在VBA支持上做了努力,世紀(jì)星組態(tài)軟件開發(fā)語言已與VBA非常相似,相信在未來的版本中,世紀(jì)星將全面支持VBA,它的二次開發(fā)功能會(huì)邁上一個(gè)新的臺(tái)階。

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
亚洲精品四区| 久久久久久午夜| 欧美在线观看网站| 亚洲综合色在线| 中文成人激情娱乐网| 亚洲狼人综合| 亚洲精品中文字幕有码专区| 在线成人激情视频| 伊人夜夜躁av伊人久久| 国产日韩一区二区三区在线| 国产精品自在线| 国产三级精品在线不卡| 国产欧美激情| 国产欧美在线| 国内精品久久久久久影视8| 国产亚洲欧美一区在线观看| 国产亚洲福利社区一区| 国产午夜精品一区二区三区欧美| 国产拍揄自揄精品视频麻豆| 国产日韩精品入口| 国产一区二区三区日韩欧美| 国产欧美精品一区二区三区介绍| 国产欧美 在线欧美| 国产日韩欧美一区在线| 国产在线拍偷自揄拍精品| 国产一区二区看久久| 精品二区视频| 亚洲人午夜精品免费| 99亚洲伊人久久精品影院红桃| 一区二区三区欧美日韩| 亚洲一区日本| 欧美综合国产| 亚洲片在线观看| 一区二区不卡在线视频 午夜欧美不卡在 | 亚洲国产日韩综合一区| 亚洲六月丁香色婷婷综合久久| 亚洲最新合集| 午夜欧美理论片| 久久亚洲电影| 欧美伦理视频网站| 国产精品卡一卡二| 狠狠色丁香久久婷婷综合_中| 亚洲电影第三页| 一区二区欧美在线| 欧美伊人久久久久久午夜久久久久| 久久精品国产一区二区电影| 日韩视频免费观看高清完整版| 亚洲一区二区免费| 久久久午夜电影| 欧美日韩国产首页| 国产欧美日韩一级| 悠悠资源网亚洲青| 国产精品99久久久久久宅男| 欧美专区在线观看一区| 99精品视频免费全部在线| 欧美亚洲免费| 欧美粗暴jizz性欧美20| 欧美视频在线观看| 国产一区日韩欧美| 亚洲美女在线一区| 欧美在线欧美在线| 一区二区免费在线视频| 久久九九国产| 欧美日韩亚洲天堂| 黄色精品一二区| 99在线热播精品免费| 亚洲电影免费观看高清完整版在线 | 亚洲开发第一视频在线播放| 亚洲欧美日韩国产成人| 欧美3dxxxxhd| 国产日韩精品一区二区三区在线 | 欧美一级艳片视频免费观看| 免费永久网站黄欧美| 国产精品欧美日韩一区| 亚洲国产精品www| 欧美亚洲色图校园春色| 99这里只有精品| 久久躁狠狠躁夜夜爽| 国产精品另类一区| 亚洲精品久久久久久久久久久| 欧美一区激情视频在线观看| 亚洲午夜精品17c| 欧美bbbxxxxx| 国产网站欧美日韩免费精品在线观看| 日韩视频三区| 亚洲精品美女久久久久| 久久噜噜亚洲综合| 国产精品女同互慰在线看| 亚洲靠逼com| 亚洲精品国产精品国自产观看浪潮 | 欧美中文字幕不卡| 欧美日韩一区在线| 亚洲国产精品久久久久婷婷老年| 篠田优中文在线播放第一区| 亚洲视频1区2区| 欧美精品久久久久久久| 激情五月综合色婷婷一区二区| 亚洲欧洲av一区二区三区久久| 亚洲一区二区三区四区五区午夜 | 久久国产加勒比精品无码| 午夜精品影院在线观看| 欧美日韩午夜视频在线观看| 亚洲精品麻豆| 亚洲精品久久久久久一区二区 | 亚洲一区二区在线视频 | 国产精品久线观看视频| 日韩亚洲欧美一区| 日韩视频免费在线观看| 欧美成人精品一区二区| ●精品国产综合乱码久久久久| 久久激情视频久久| 久久精品女人| 国内精品99| 欧美专区第一页| 久久婷婷丁香| 在线不卡免费欧美| 亚洲国产精品传媒在线观看| 久久久久久色| 一区二区三区在线观看国产| 亚洲国产日韩在线| 欧美成人网在线| 亚洲精品麻豆| 亚洲永久在线| 国产精品亚洲视频| 欧美一区2区三区4区公司二百 | 国产精品女主播在线观看 | 性做久久久久久| 久久久久久国产精品一区| 国产亚洲欧洲| 亚洲第一中文字幕| 你懂的亚洲视频| 亚洲激情二区| 在线亚洲精品| 国产精品视频免费| 欧美一区二区免费视频| 老司机67194精品线观看| 在线看日韩欧美| 日韩一级片网址| 欧美手机在线| 亚洲欧美在线播放| 老司机精品久久| 亚洲激情电影在线| 亚洲一区黄色| 国产日韩亚洲欧美综合| 亚洲国产欧美一区二区三区同亚洲| 欧美大片网址| 一本色道久久综合亚洲精品小说| 亚洲欧美日韩久久精品| 国产亚洲欧美另类一区二区三区| 亚洲激情电影在线| 欧美久久婷婷综合色| 亚洲午夜电影网| 久久精品免费看| 亚洲精品久久久蜜桃| 亚洲免费影视| 国内精品伊人久久久久av一坑| 亚洲精品在线观| 国产精品乱看| 亚洲黄一区二区| 欧美涩涩网站| 欧美在线亚洲综合一区| 欧美国产日本高清在线| 一区二区三区免费网站| 久久久精彩视频| 亚洲精品美女在线观看| 欧美一区二区三区四区在线 | 亚洲一区三区在线观看| 男人插女人欧美| 亚洲一区二区综合| 欧美h视频在线| 亚洲一区二区三区四区中文| 老司机午夜精品视频| 一区二区三区产品免费精品久久75 | 欧美一区二区三区免费在线看| 欧美成人综合| 欧美一级久久久| 欧美日本在线看| 欧美专区亚洲专区| 欧美午夜女人视频在线| 亚洲国产精品久久| 国产精品麻豆欧美日韩ww| 亚洲精品1区2区| 国产欧美日韩在线视频| 日韩视频中文| 国产一区二区三区四区五区美女 | 亚洲视频在线视频| 欧美大片在线观看| 欧美在线免费观看视频| 欧美午夜精品久久久久久人妖| 亚洲高清一二三区| 国产精品亚洲а∨天堂免在线| 亚洲理论在线观看| 国内精品久久久久久| 亚洲欧美激情诱惑| 亚洲精品九九| 美女日韩欧美| 欧美在线观看网址综合| 国产精品国产三级国产专区53| 亚洲精品一区中文| 韩国成人福利片在线播放|