技術(shù)頻道

娓娓工業(yè)
您現(xiàn)在的位置: 中國(guó)傳動(dòng)網(wǎng) > 技術(shù)頻道 > 技術(shù)百科 > VBA的妙用:串口通訊程序與EXCEL相結(jié)合

VBA的妙用:串口通訊程序與EXCEL相結(jié)合

時(shí)間:2010-03-15 15:04:44來(lái)源:limin

導(dǎo)語(yǔ):?VBA已經(jīng)廣泛應(yīng)用于微軟的應(yīng)用軟件當(dāng)中,所以為更好的完善二次開(kāi)發(fā)功能,眾多的組態(tài)軟件都在VBA支持上做了努力.

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

2 串口通訊程序
  簡(jiǎn)單的串口通訊程序一般是先由上位機(jī)向下位機(jī)發(fā)送讀(write)或?qū)?read)數(shù)據(jù)命令,然后等待下位機(jī)應(yīng)答;下位機(jī)接受到命令之后,首先要對(duì)數(shù)據(jù)命令進(jìn)行校驗(yàn),對(duì)于符合校驗(yàn)約束的命令下位機(jī)會(huì)將相應(yīng)的數(shù)據(jù)回復(fù)到上位機(jī),對(duì)于不符合校驗(yàn)約束的命令下位機(jī)或?qū)⑵鋻仐壔蚧貜?fù)錯(cuò)誤信息;上位機(jī)接收到下位機(jī)的響應(yīng)之后,首先要對(duì)接收到的回復(fù)信息進(jìn)行校驗(yàn),對(duì)不符合校驗(yàn)約束的數(shù)據(jù)進(jìn)行異常處理,對(duì)符合校驗(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ī)制過(guò)于繁瑣。
3) 定時(shí)接收式
  定時(shí)接收式通訊是根據(jù)預(yù)設(shè)的定時(shí)器時(shí)間進(jìn)行讀取數(shù)據(jù)。
  優(yōu)點(diǎn):發(fā)送接收機(jī)制相對(duì)簡(jiǎn)單、節(jié)省CPU。
  缺點(diǎn):誤碼率太高,不同的硬件需要配置不同的通訊時(shí)間參數(shù),需要嚴(yán)格的校驗(yàn)運(yùn)算。

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

世紀(jì)星組態(tài)軟件

  主程序:
  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 "串口打開(kāi)錯(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é)束語(yǔ)
  由上可見(jiàn),VBA已經(jīng)廣泛應(yīng)用于微軟的應(yīng)用軟件當(dāng)中,所以為更好的完善二次開(kāi)發(fā)功能,眾多的組態(tài)軟件都在VBA支持上做了努力,世紀(jì)星組態(tài)軟件開(kāi)發(fā)語(yǔ)言已與VBA非常相似,相信在未來(lái)的版本中,世紀(jì)星將全面支持VBA,它的二次開(kāi)發(fā)功能會(huì)邁上一個(gè)新的臺(tái)階。

 

標(biāo)簽:

點(diǎn)贊

分享到:

上一篇:基于Lonworks總線技術(shù)的環(huán)境...

下一篇:微能WIN-V63矢量控制變頻器在...

中國(guó)傳動(dòng)網(wǎng)版權(quán)與免責(zé)聲明:凡本網(wǎng)注明[來(lái)源:中國(guó)傳動(dòng)網(wǎng)]的所有文字、圖片、音視和視頻文件,版權(quán)均為中國(guó)傳動(dòng)網(wǎng)(www.treenowplaneincome.com)獨(dú)家所有。如需轉(zhuǎn)載請(qǐng)與0755-82949061聯(lián)系。任何媒體、網(wǎng)站或個(gè)人轉(zhuǎn)載使用時(shí)須注明來(lái)源“中國(guó)傳動(dòng)網(wǎng)”,違反者本網(wǎng)將追究其法律責(zé)任。

本網(wǎng)轉(zhuǎn)載并注明其他來(lái)源的稿件,均來(lái)自互聯(lián)網(wǎng)或業(yè)內(nèi)投稿人士,版權(quán)屬于原版權(quán)人。轉(zhuǎn)載請(qǐng)保留稿件來(lái)源及作者,禁止擅自篡改,違者自負(fù)版權(quán)法律責(zé)任。

網(wǎng)站簡(jiǎn)介|會(huì)員服務(wù)|聯(lián)系方式|幫助信息|版權(quán)信息|網(wǎng)站地圖|友情鏈接|法律支持|意見(jiàn)反饋|sitemap

中國(guó)傳動(dòng)網(wǎng)-工業(yè)自動(dòng)化與智能制造的全媒體“互聯(lián)網(wǎng)+”創(chuàng)新服務(wù)平臺(tái)

網(wǎng)站客服服務(wù)咨詢采購(gòu)咨詢媒體合作

Chuandong.com Copyright ?2005 - 2024 ,All Rights Reserved 版權(quán)所有 粵ICP備 14004826號(hào) | 營(yíng)業(yè)執(zhí)照證書(shū) | 不良信息舉報(bào)中心 | 粵公網(wǎng)安備 44030402000946號(hào)