《電子技術(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亚洲国产精品_日韩亚洲一区二区
免费不卡亚洲欧美| 欧美日韩不卡视频| 亚洲激情偷拍| 先锋影音一区二区三区| 在线亚洲欧美| 91久久精品久久国产性色也91| 国内精品视频在线播放| 国产日韩欧美| 国产精品婷婷| 国产精品无码专区在线观看| 国产精品成人免费| 欧美四级伦理在线| 欧美色视频日本高清在线观看| 欧美精品性视频| 欧美成年人在线观看| 美女主播精品视频一二三四| 久久综合九色综合欧美就去吻 | 亚洲人成在线观看| 亚洲第一狼人社区| 亚洲黄色成人久久久| 亚洲国产婷婷香蕉久久久久久| 亚洲电影自拍| 亚洲区欧美区| 亚洲免费高清| 亚洲视频一区在线观看| 亚洲综合日韩在线| 亚洲影视中文字幕| 午夜欧美不卡精品aaaaa| 午夜精品久久| 久久精品91久久香蕉加勒比| 欧美一区二区三区喷汁尤物| 久久精品夜色噜噜亚洲a∨ | 国产精品嫩草影院av蜜臀| 国产伦精品一区二区三区视频黑人 | 亚洲欧美日本国产有色| 午夜久久久久久久久久一区二区| 欧美一区二区三区在线播放| 久久精品亚洲一区二区三区浴池| 两个人的视频www国产精品| 欧美激情免费观看| 国产精品观看| 国内精品免费午夜毛片| 亚洲激情视频在线播放| 一本色道久久88亚洲综合88| 亚洲中午字幕| 亚洲一区二区综合| 亚洲欧美国产日韩天堂区| 欧美一区二区在线| 久久在线免费观看视频| 欧美激情区在线播放| 国产精品二区二区三区| 国产一区二区三区四区老人| 亚洲国产精品久久久久婷婷老年| aa级大片欧美三级| 亚洲欧美综合v| 亚洲国产成人久久| 亚洲一级在线| 久久久久久久久蜜桃| 欧美黄色小视频| 国产精品日韩在线观看| 樱桃成人精品视频在线播放| 在线视频亚洲欧美| 久久精品亚洲国产奇米99| 一本一本久久| 久久精品卡一| 欧美日本一区二区高清播放视频| 国产精品午夜在线| 亚洲国产你懂的| 亚洲欧美日韩一区二区| 亚洲区国产区| 欧美一区二区黄| 欧美国产日韩xxxxx| 国产欧美va欧美va香蕉在| 亚洲日韩欧美视频| 新狼窝色av性久久久久久| 99re6热在线精品视频播放速度| 久久电影一区| 欧美色一级片| 亚洲国产导航| 性做久久久久久免费观看欧美| 一本一本大道香蕉久在线精品| 久久精品夜色噜噜亚洲aⅴ| 欧美日韩一区二区欧美激情 | 亚洲人成欧美中文字幕| 香蕉视频成人在线观看 | 在线综合+亚洲+欧美中文字幕| 久久久久国产精品厨房| 国产精品对白刺激久久久| 亚洲第一主播视频| 久久精品国产精品亚洲综合| 亚洲欧美在线免费观看| 欧美日韩1区2区3区| 娇妻被交换粗又大又硬视频欧美| 中文av字幕一区| 日韩视频一区二区三区在线播放免费观看 | 欧美日韩三级| 在线欧美一区| 欧美在线看片a免费观看| 午夜精品久久久久久99热| 欧美精品一卡| 亚洲电影有码| 久久精品一区四区| 久久国产婷婷国产香蕉| 国产精品毛片| 一区二区精品在线观看| 日韩一级片网址| 男女精品网站| 激情文学一区| 欧美影片第一页| 欧美在线一二三| 国产精品视频导航| 中文在线不卡视频| 亚洲图中文字幕| 欧美日韩国产片| 91久久精品日日躁夜夜躁国产| 欧美激情1区2区3区| 国产一区91精品张津瑜| 亚洲综合色婷婷| 亚洲一区免费网站| 欧美伦理在线观看| 亚洲精品在线观| avtt综合网| 欧美人与性动交cc0o| 亚洲国产乱码最新视频| 久久精品首页| 久久婷婷麻豆| 韩国成人精品a∨在线观看| 欧美一区二区三区四区高清 | 亚洲一区二区三区影院| 欧美日韩大片| 亚洲美女黄色片| 夜夜夜久久久| 欧美午夜不卡视频| 这里只有视频精品| 亚洲尤物在线视频观看| 欧美日韩在线免费| 亚洲一区黄色| 欧美一区二区在线看| 国产亚洲一区二区三区在线播放| 欧美一区二区在线视频| 久久综合九色九九| 亚洲国产美女| 亚洲视频1区| 国产精品一区二区男女羞羞无遮挡 | 宅男精品导航| 国产精品国产福利国产秒拍| 午夜国产欧美理论在线播放| 久久久成人精品| 在线观看亚洲视频啊啊啊啊| 亚洲精品久久嫩草网站秘色| 欧美日本视频在线| 亚洲一区二区3| 久久久人人人| 亚洲国产一二三| 亚洲图片激情小说| 国产一区二区精品久久| 亚洲精品国产精品乱码不99| 欧美体内she精视频在线观看| 香港成人在线视频| 欧美高清视频免费观看| 国产精品99久久久久久白浆小说| 欧美在线观看一二区| 伊人久久亚洲美女图片| 一区二区三区国产精品| 国产精品资源在线观看| 亚洲国产另类精品专区| 欧美日韩一区二区免费在线观看 | 国产一区白浆| 亚洲美女在线国产| 国产精品美女久久久久久2018| 久久国产精品久久国产精品 | 欧美性理论片在线观看片免费| 午夜久久久久| 欧美a级一区| 亚洲小说欧美另类社区| 久久综合伊人| 99视频国产精品免费观看| 久久久www成人免费毛片麻豆| 91久久精品国产91久久| 欧美一区二区三区在线看| 亚洲国产日韩欧美| 欧美一区2区三区4区公司二百| 影音先锋在线一区| 欧美一级理论片| 亚洲黄色高清| 欧美在线啊v| 亚洲伦理久久| 亚洲黄色精品| 欧美日韩精品综合在线| 国产精品99久久久久久人| 久久久久国产精品一区三寸| 亚洲三级免费| 久久久久久国产精品一区| 亚洲精品久久久久久下一站| 欧美专区日韩专区| 亚洲伦伦在线| 老司机免费视频久久| 亚洲欧美电影在线观看| 欧美国产欧美综合 | 国产精品人人爽人人做我的可爱|