精品乱码一区内射人妻无码-亚洲中文AⅤ中文字幕在线-免费不卡国产福利在线观看-国产综合无码一区二区色蜜蜜

          您現(xiàn)在的位置:智能制造網(wǎng)>技術(shù)中心>VBA的妙用:串口通訊程序與EXCEL相結(jié)合

          直播推薦

          更多>

          企業(yè)動態(tài)

          更多>

          推薦展會

          更多>

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

          2015年07月02日 15:44:07人氣:1185來源:北京世紀長秋科技有限公司

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

          2 串口通訊程序
            簡單的串口通訊程序一般是先由上位機向下位機發(fā)送讀(write)或?qū)懀╮ead)數(shù)據(jù)命令,然后等待下位機應(yīng)答;下位機接受到命令之后,首先要對數(shù)據(jù)命令進行校驗,對于符合校驗約束的命令下位機會將相應(yīng)的數(shù)據(jù)回復(fù)到上位機,對于不符合校驗約束的命令下位機或?qū)⑵鋻仐壔蚧貜?fù)錯誤信息;上位機接收到下位機的響應(yīng)之后,首先要對接收到的回復(fù)信息進行校驗,對不符合校驗約束的數(shù)據(jù)進行異常處理,對符合校驗約束的信息進行解碼,解碼之后的信息便是上位機從下位機獲得的有效信息了。
            上位機向串口發(fā)送讀命令之后需要等待下位機應(yīng)答并讀取回復(fù)信息,常用的等待有3種方式:
          1) 輪詢式
            上位機向串口發(fā)送讀命令之后一直等待下位機應(yīng)答,通訊程序處于一個等待循環(huán)中。
            優(yōu)點:速度快、誤碼率低(幾乎不存在誤碼)。
            缺點:消耗CPU。(解決辦法:使用Sleep()API函數(shù))。
          2) 消息式
            消息式通訊是采用響應(yīng)WINDOWS消息的辦法讀取串口。
            優(yōu)點:節(jié)省CPU、誤碼率低。
            缺點:發(fā)送接收機制過于繁瑣。
          3) 定時接收式
            定時接收式通訊是根據(jù)預(yù)設(shè)的定時器時間進行讀取數(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 結(jié)束語
            由上可見,VBA已經(jīng)廣泛應(yīng)用于微軟的應(yīng)用軟件當中,所以為更好的完善二次開發(fā)功能,眾多的組態(tài)軟件都在VBA支持上做了努力,世紀星組態(tài)軟件開發(fā)語言已與VBA非常相似,相信在未來的版本中,世紀星將全面支持VBA,它的二次開發(fā)功能會邁上一個新的臺階。 ■
           

          全年征稿/資訊合作 聯(lián)系郵箱:1271141964@qq.com

          免責(zé)聲明

          • 凡本網(wǎng)注明"來源:智能制造網(wǎng)"的所有作品,版權(quán)均屬于智能制造網(wǎng),轉(zhuǎn)載請必須注明智能制造網(wǎng),http://www.tzhjjxc.com。違反者本網(wǎng)將追究相關(guān)法律責(zé)任。
          • 企業(yè)發(fā)布的公司新聞、技術(shù)文章、資料下載等內(nèi)容,如涉及侵權(quán)、違規(guī)遭投訴的,一律由發(fā)布企業(yè)自行承擔(dān)責(zé)任,本網(wǎng)有權(quán)刪除內(nèi)容并追溯責(zé)任。
          • 本網(wǎng)轉(zhuǎn)載并注明自其它來源的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點或證實其內(nèi)容的真實性,不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個人從本網(wǎng)轉(zhuǎn)載時,必須保留本網(wǎng)注明的作品來源,并自負版權(quán)等法律責(zé)任。
          • 如涉及作品內(nèi)容、版權(quán)等問題,請在作品發(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。

          <
          更多 >

          工控網(wǎng)機器人儀器儀表物聯(lián)網(wǎng)3D打印工業(yè)軟件金屬加工機械包裝機械印刷機械農(nóng)業(yè)機械食品加工設(shè)備制藥設(shè)備倉儲物流環(huán)保設(shè)備造紙機械工程機械紡織機械化工設(shè)備電子加工設(shè)備水泥設(shè)備海洋水利裝備礦冶設(shè)備新能源設(shè)備服裝機械印染機械制鞋機械玻璃機械陶瓷設(shè)備橡塑設(shè)備船舶設(shè)備電子元器件電氣設(shè)備


          我要投稿
          • 投稿請發(fā)送郵件至:(郵件標題請備注“投稿”)1271141964.qq.com
          • 聯(lián)系電話0571-89719789
          工業(yè)4.0時代智能制造領(lǐng)域“互聯(lián)網(wǎng)+”服務(wù)平臺
          智能制造網(wǎng)APP

          功能豐富 實時交流

          智能制造網(wǎng)小程序

          訂閱獲取更多服務(wù)

          微信公眾號

          關(guān)注我們

          抖音

          智能制造網(wǎng)

          抖音號:gkzhan

          打開抖音 搜索頁掃一掃

          視頻號

          智能制造網(wǎng)

          公眾號:智能制造網(wǎng)

          打開微信掃碼關(guān)注視頻號

          快手

          智能制造網(wǎng)

          快手ID:gkzhan2006

          打開快手 掃一掃關(guān)注
          意見反饋
          關(guān)閉
          企業(yè)未開通此功能
          詳詢客服 : 0571-87858618