环球电气之家-午夜精彩视频-中国专业电气电子产品行业服务网站!

產(chǎn)品分類

當(dāng)前位置: 首頁 > 傳感測量產(chǎn)品 > 數(shù)據(jù)采集產(chǎn)品 > 數(shù)據(jù)通訊產(chǎn)品

類型分類:
科普知識
數(shù)據(jù)分類:
數(shù)據(jù)通訊產(chǎn)品

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

發(fā)布日期:2022-04-27 點(diǎn)擊率:493

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)。擁有一種可跨越多個應(yīng)用軟件,使各應(yīng)用軟件產(chǎn)品具有高效、靈活且一致性的開發(fā)工具是至關(guān)重要的。VBA作為一種新一代的標(biāo)準(zhǔn)宏語言,具有上述跨越多種應(yīng)用軟件并且具有控制應(yīng)用軟件對象的能力,使得程序設(shè)計人員僅需學(xué)習(xí)一種統(tǒng)一的標(biāo)準(zhǔn)宏語言,就可以轉(zhuǎn)換到特定的應(yīng)用軟件上去,程序設(shè)計人員在編程和調(diào)試代碼時所看到的是相同的用戶界面,而且VBA與原應(yīng)用軟件的宏語言相兼容,以保障用戶在代碼和工作上的投資。有了VBA以后,多種應(yīng)用程序共用一種宏語言,節(jié)省了程序人員的學(xué)習(xí)時間,提高了不同應(yīng)用軟件間的相互開發(fā)和調(diào)用能力。

2 串口通訊程序

簡單的串口通訊程序一般是先由上位機(jī)向下位機(jī)發(fā)送讀(write)或?qū)?read)數(shù)據(jù)命令,然后等待下位機(jī)應(yīng)答;下位機(jī)接受到命令之后,首先要對數(shù)據(jù)命令進(jìn)行校驗,對于符合校驗約束的命令下位機(jī)會將相應(yīng)的數(shù)據(jù)回復(fù)到上位機(jī),對于不符合校驗約束的命令下位機(jī)或?qū)⑵鋻仐壔蚧貜?fù)錯誤信息;上位機(jī)接收到下位機(jī)的響應(yīng)之后,首先要對接收到的回復(fù)信息進(jìn)行校驗,對不符合校驗約束的數(shù)據(jù)進(jìn)行異常處理,對符合校驗約束的信息進(jìn)行解碼,解碼之后的信息便是上位機(jī)從下位機(jī)獲得的有效信息了。

上位機(jī)向串口發(fā)送讀命令之后需要等待下位機(jī)應(yīng)答并讀取回復(fù)信息,常用的等待有3種方式:

1) 輪詢式

上位機(jī)向串口發(fā)送讀命令之后一直等待下位機(jī)應(yīng)答,通訊程序處于一個等待循環(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) 定時接收式

定時接收式通訊是根據(jù)預(yù)設(shè)的定時器時間進(jìn)行讀取數(shù)據(jù)。

優(yōu)點(diǎn):發(fā)送接收機(jī)制相對簡單、節(jié)省CPU。

缺點(diǎn):誤碼率太高,不同的硬件需要配置不同的通訊時間參數(shù),需要嚴(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 "串口打開錯誤!"
  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)用軟件當(dāng)中,所以為更好的完善二次開發(fā)功能,眾多的組態(tài)軟件都在VBA支持上做了努力,世紀(jì)星組態(tài)軟件開發(fā)語言已與VBA非常相似,相信在未來的版本中,世紀(jì)星將全面支持VBA,它的二次開發(fā)功能會邁上一個新的臺階。

下一篇: PLC、DCS、FCS三大控

上一篇: 索爾維全系列Solef?PV

推薦產(chǎn)品

更多
主站蜘蛛池模板: 广东机电安装工程_中央空调工程_东莞装饰装修-广东粤标建设有限公司 | 继电器模组-IO端子台-plc连接线-省配线模组厂家-世麦德 | 二手注塑机回收_旧注塑机回收_二手注塑机买卖 - 大鑫二手注塑机 二手光谱仪维修-德国OBLF光谱仪|进口斯派克光谱仪-热电ARL光谱仪-意大利GNR光谱仪-永晖检测 | 阴离子_阳离子聚丙烯酰胺厂家_聚合氯化铝价格_水处理絮凝剂_巩义市江源净水材料有限公司 | 重庆磨床过滤机,重庆纸带过滤机,机床伸缩钣金,重庆机床钣金护罩-重庆达鸿兴精密机械制造有限公司 | led全彩屏-室内|学校|展厅|p3|户外|会议室|圆柱|p2.5LED显示屏-LED显示屏价格-LED互动地砖屏_蕙宇屏科技 | 骁龙云呼电销防封号系统-axb电销平台-外呼稳定『免费试用』 | 软文世界-软文推广-软文营销-新闻稿发布-一站式软文自助发稿平台 | 酒万铺-酒水招商-酒水代理 | 合肥白癜风医院_[治疗白癜风]哪家好_合肥北大白癜风医院 | 吨袋包装机|吨包秤|吨包机|集装袋包装机-烟台华恩科技 | 柴油机_柴油发电机_厂家_品牌-江苏卡得城仕发动机有限公司 | 华禹护栏|锌钢护栏_阳台护栏_护栏厂家-华禹专注阳台护栏、楼梯栏杆、百叶窗、空调架、基坑护栏、道路护栏等锌钢护栏产品的生产销售。 | 超声波_清洗机_超声波清洗机专业生产厂家-深圳市好顺超声设备有限公司 | 隐形纱窗|防护纱窗|金刚网防盗纱窗|韦柏纱窗|上海青木装潢制品有限公司|纱窗国标起草单位 | 一体化预制泵站-一体化提升泵站-一体化泵站厂家-山东康威环保 | 北京晚会活动策划|北京节目录制后期剪辑|北京演播厅出租租赁-北京龙视星光文化传媒有限公司 | PSI渗透压仪,TPS酸度计,美国CHAI PCR仪,渗透压仪厂家_价格,微生物快速检测仪-华泰和合(北京)商贸有限公司 | 黑龙江「京科脑康」医院-哈尔滨失眠医院_哈尔滨治疗抑郁症医院_哈尔滨精神心理医院 | 开平机_纵剪机厂家_开平机生产厂家|诚信互赢-泰安瑞烨精工机械制造有限公司 | 广州工业氧气-工业氩气-工业氮气-二氧化碳-广州市番禺区得力气体经营部 | 钢格板|镀锌钢格板|热镀锌钢格板|格栅板|钢格板|钢格栅板|热浸锌钢格板|平台钢格板|镀锌钢格栅板|热镀锌钢格栅板|平台钢格栅板|不锈钢钢格栅板 - 专业钢格板厂家 | 3d可视化建模_三维展示_产品3d互动数字营销_三维动画制作_3D虚拟商城 【商迪3D】三维展示服务商 广东健伦体育发展有限公司-体育工程配套及销售运动器材的体育用品服务商 | 闪电优家-卫生间防水补漏_酒店漏水渗水维修_防水堵漏公司 | 山东商品混凝土搅拌楼-环保型搅拌站-拌合站-分体仓-搅拌机厂家-天宇 | 喷漆房_废气处理设备-湖北天地鑫环保设备有限公司 | 废气处理设备-工业除尘器-RTO-RCO-蓄热式焚烧炉厂家-江苏天达环保设备有限公司 | 硫酸亚铁-聚合硫酸铁-除氟除磷剂-复合碳源-污水处理药剂厂家—长隆科技 | 活性炭-蜂窝-椰壳-柱状-粉状活性炭-河南唐达净水材料有限公司 | 佛山商标注册_商标注册代理|专利注册申请_商标注册公司_鸿邦知识产权 | 爆破器材运输车|烟花爆竹运输车|1-9类危险品厢式运输车|湖北江南专用特种汽车有限公司 | 温州食堂承包 - 温州市尚膳餐饮管理有限公司| 活性炭-果壳木质煤质柱状粉状蜂窝活性炭厂家价格多少钱 | 踏板力计,制动仪,非接触多功能速度仪,逆反射系数测试仪-创宇 | 蓝鹏测控平台 - 智慧车间系统 - 车间生产数据采集与分析系统 | 不锈钢酒柜|恒温酒柜|酒柜定制|酒窖定制-上海啸瑞实业有限公司 | 食药成分检测_调料配方还原_洗涤剂化学成分分析_饲料_百检信息科技有限公司 | uv机-uv灯-uvled光固化机-生产厂家-蓝盾机电 | 楼承板-开口楼承板-闭口楼承板-无锡海逵 | 热镀锌槽钢|角钢|工字钢|圆钢|H型钢|扁钢|花纹板-天津千百顺钢铁贸易有限公司 | 科威信洗净科技,碳氢清洗机,超声波清洗机,真空碳氢清洗机 |