用戶中心
· 企業(yè)空間 首頁 | 資訊 | 技術 | 產品 | 企業(yè) | 直播 | 專題 | 智能制造 | 論壇| 在線研討會
北京世紀長秋科技有限公司
企業(yè)空間 > 案例應用 > 正文
  • VBA的妙用:串口通訊程序與EXCEL相結合
  • 發(fā)布時間:2010/11/3 13:17:26   修改時間:2010/11/3 13:17:26 瀏覽次數(shù):2694
  • 1 VBA簡介
      Visual Basic的應用程序版(VBA)是Microsoft公司長期追求的目標,使可編程應用軟件得到完美的實現(xiàn),它作為一種通用的宏語言可被所有的Microsoft 可編程應用軟件所共享。在沒有VBA以前,一些應用軟件如Excel、Word、Access、Project等都采用自己的宏語言供用戶開發(fā)使用,但每種宏語言都是獨立的,需要用戶專門去學習,它們之間互不兼容,使得應用軟件之間不能在程序上互聯(lián)。擁有一種可跨越多個應用軟件,使各應用軟件產品具有高效、靈活且一致性的開發(fā)工具是至關重要的。VBA作為一種新一代的標準宏語言,具有上述跨越多種應用軟件并且具有控制應用軟件對象的能力,使得程序設計人員僅需學習一種統(tǒng)一的標準宏語言,就可以轉換到特定的應用軟件上去,程序設計人員在編程和調試代碼時所看到的是相同的用戶界面,而且VBA與原應用軟件的宏語言相兼容,以保障用戶在代碼和工作上的投資。有了VBA以后,多種應用程序共用一種宏語言,節(jié)省了程序人員的學習時間,提高了不同應用軟件間的相互開發(fā)和調用能力。

     

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

     

    3 EXCEL-VBA串口通訊實例
      軟件:EXCEL。
      硬件:艾默生EC10 PLC。
      功能:通過EXCEL中的按鈕控制PLC的輸出繼電器Y0。
      界面:RUN(運行通訊)、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 "串口打開錯誤!"
      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 "串口錯誤!"
      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 結束語
      由上可見,VBA已經廣泛應用于微軟的應用軟件當中,所以為更好的完善二次開發(fā)功能,眾多的組態(tài)軟件都在VBA支持上做了努力,世紀星組態(tài)軟件開發(fā)語言已與VBA非常相似,相信在未來的版本中,世紀星將全面支持VBA,它的二次開發(fā)功能會邁上一個新的臺階。

  • 企業(yè)介紹
北京世紀長秋科技有限公司是從事工業(yè)自動化軟件研發(fā)的高新技術企業(yè),提供軟件開發(fā)、銷售、服務及工業(yè)自動化系統(tǒng)集成等整套服務,以創(chuàng)新為本的理念,為用戶提供量身定做的解決方案。 我們的團隊由充滿創(chuàng)新活力、綜合素質高的業(yè)內精英組成,擁有經…  更多>>
  • 聯(lián)系方式

北京世紀長秋科技有限公司

聯(lián)系人:徐向農

地址:北京市順義區(qū)空港工業(yè)區(qū)B區(qū)裕東路7號

郵編:100029

電話:010-84645656

傳真:010-84646515

公司網址:http://www.chncla.com

  • 該空間手機版

掃描此二維碼即可訪問該空間手機版

  • 在線反饋
1.我有以下需求:



2.詳細的需求:
姓名:
單位:
電話:
郵件:
您還沒有登錄,請登陸,
如果您還沒有注冊,點擊這里注冊.
  • 網友反饋
  • 王工 在2023/10/17 10:43:00留言
  • 留言類型:得到貴公司產品的價格信息,
  • 詳細留言:買軟件,系統(tǒng)一些的東西,聯(lián)系您這邊一直聯(lián)系不上
  • 鄭文瑞 在2022/8/8 13:14:00留言
  • 留言類型:得到貴公司產品的價格信息,貴公司產品銷售人員聯(lián)系我,
  • 詳細留言:需要組態(tài)軟件
  • 崔文濤 在2022/4/14 14:14:00留言
  • 留言類型:我想得到貴公司產品的價格信息,
  • 詳細留言:得到貴公司產品詳細資料,得到貴公司產品的價格信息,
  • 馬成亮 在2021/5/23 10:32:00留言
  • 留言類型:得到貴公司產品詳細資料,得到貴公司產品的價格信息,
  • 詳細留言:組態(tài)軟件
  • 方雪峰 在2021/4/13 16:22:00留言
  • 留言類型:得到貴公司產品詳細資料,
  • 詳細留言:我是一名大四學生,無機非金屬材料專業(yè),畢業(yè)設計為混凝土攪拌站的設計 希望貴公司能提供一些生產資料進行學習借鑒,祝貴公司生意興隆
更多請進入空間管理中心查看
關于我們 | 網站地圖 | 聯(lián)系我們
© 2003-2018    經營許可編號:京ICP證120335號
公安機關備案號:110102002318  服務熱線:010-82053688
我要反饋