技術頻道

      世紀星組態軟件和Visual Basic 6.0數據交換

      1 引言
      盡管組態軟件已經具備了很強的功能,但是在很多場合都有直接使用第三方代碼的要求。例如用戶需要將組態軟件采集的實時數據傳送到自己開發的VB程序中做更復雜的數據分析或者是將世紀星采集的數據做特定的處理之后再傳送給世紀星,這都需要有一種數據交換機制。
      當然實現這種交換機制有很多傳統的方法,如使用文件共享數據、使用DDE數據交換機制。傳統的方法雖然能夠達到數據交換的目的,但其使用方法較為煩瑣,使用文件共享數據就需要在組態軟件和外部程序內部進行文件讀取操作,這樣不但麻煩而且處理速度也相對較慢,在要求實時性較好的工程中就顯得力不從心。為了讓第三方程序方便地讀寫世紀星數據,世紀星提供了基于ActiveX技術的OCX控件,此控件可以在大多的開發環境中使用(如VC++6.0、VB6.0),它就是DBComm。
      2 DBComm 世紀星數據交換標準控件
      世紀星提供標準控件 DBComm.ocx 與外部第三方程序進行數據交換,數據交換內容包括:
      2.1 實時數據交換
      外部程序可以讀取世紀星的系統變量(包括系統離散、系統整數、系統實數和系統信息)、內存變量(包括內存離散、內存整數、內存實數和內存信息)和IO變量(包括IO離散、IO整數、IO實數和IO信息);還可以改寫世紀星的內存變量和IO變量。
      相關函數:
      DiscValue=tagReadDisc(Tagname) 讀取世紀星離散變量的當前值
      IntValue=tagReadInt(Tagname) 讀取世紀星整數變量的當前值
      FloatValue=tagReadFloat(Tagname) 讀取世紀星實數變量的當前值
      MessValue=tagReadMess(Tagname) 讀取世紀星信息變量的當前值
      tagWriteDisc(Tagname, DiscValue) 改寫世紀星離散變量的當前值
      tagWriteInt(Tagname, IntValue) 改寫世紀星整數變量的當前值
      tagWriteFloat(Tagname, FloatValue) 改寫世紀星實數變量的當前值
      tagWriteMess(Tagname, String) 改寫世紀星信息變量的當前值
      InitComm() DBComm初始化函數
      2.2 歷史數據讀取
      外部程序可以按時間和變量名稱讀取世紀星的歷史數據。
      TimeUINT=ConvertTime(Year, Month, Day, Hour, Minute, Second)
      時間轉換函數
      DiscResult=GetHistoryData(Tagname,StartTime,EndTime,DataArray,SizeOfArray, Interval)
      根據指定的起止日期時間和世紀星的變量名稱讀取世紀星的歷史數據。
      3 DBComm在VB6.0中的應用
      VB工程和世紀星工程數據交換示意圖:

      世紀長秋 世紀星組態軟件

      下面是一個應用VB程序在外部計算PID輸出功率的一個簡單實驗:

      需要硬件:三菱FX2N系列PLC、FX2N-4AD-TC、加熱器、S分度熱電偶(TC)、固態繼電器(SSR)。

      要軟件:世紀星組態軟件7.22、VB6.0。

      如下圖所示為電器原理圖:

      世紀長秋 世紀星組態軟件

      如上圖所示是一個加熱控制系統。PLC主模塊負責控制繼電器的通斷(PID輸出),TC模塊負責溫度采集(PID輸入),上位機世紀星部分負責溫度設定、采集下位機信號、曲線顯示、數據記錄、數據檢索等功能,上位機VB部分負責從世紀星獲取設定溫度SV、測量溫度PV、計算PID輸出(固態繼電器的通斷時間)。
      3.1 世紀星監控程序
      將控制電路配置好,將上位機連接到PLC。開發世紀星監控程序,配置相應的串口驅動、串口參數,創建的監控畫面如下:
      世紀長秋 世紀星組態軟件
      3.2 VB外掛程序開發
      * 創建一個VB標準工程。
      * Projiec—Components—DBComm ActiveX Control Moudle。
      * 初試化DBComm
      dbcomm_pid.InitComm
      * 從世紀星組態軟件讀取溫度設定和實際值
      SV= dbcomm_pid.tagReadFloat ("sv")
      PV= dbcomm_pid.tagReadFloat ("pv")
      * y0輸出時間計算函數(根據P=0.5,I=0.5,D=0)
      Private Function PIDCalc(pp As PID, ByVal NextPoint As Double) As Double
      Dim dError As Double
      Dim Error As Double
      Error = pp.SetPoint - NextPoint
      pp.SumError = pp.SumError + Error
      dError = pp.LastError - pp.PrevError
      pp.PrevError = pp.LastError
      pp.LastError = Error
      PIDCalc = pp.P * Error + pp.i * pp.SumError + pp.D * dError
      End Function
      3.3 加熱輸出控制
      根據2中計算的加熱時間(時間百分比,x%*1s),對PLC的Y0 進行輸出控制。
      Y0 ON/OFF:tagWriteDisc ("y0",1)/ tagWriteDisc ("y0",0),Y0脈寬調制如下圖所示:
      世紀長秋 世紀星組態軟件
      3.4實驗結果
      本工程利用世紀星組態軟件采集溫度實際值(從PLC),在組態軟件中設定溫度的目標值,在VB6.0程序中計算輸出功率的百分比,VB再將加熱時間(Y0時間)傳遞給組態軟件,組態軟件再傳給PLC,PLC控制加熱。
      由于采用了粗糙的PID,所以控溫精度在正負1度以內(精度不在本文研究范圍內),但是VB通過DBComm和世紀星組態軟件實時交換數據功能良好。
      4 總結
      綜上所述,世紀星所提供的DBComm 控件使用方便,為第三方程序提供了完備的數據交換接口。另外DBComm 控件還可以訪問世紀星組態軟件的歷史數據庫,本篇暫不詳述。

      文章版權歸西部工控xbgk所有,未經許可不得轉載。

      主站蜘蛛池模板: 亚洲欧美日韩国产精品一区| 好爽毛片一区二区三区四| 国产日韩高清一区二区三区| 国产精品视频一区二区猎奇| 国产av一区二区三区日韩| 日本强伦姧人妻一区二区| 性色av无码免费一区二区三区| 91精品国产一区二区三区左线| 爆乳熟妇一区二区三区霸乳| 成人精品一区二区不卡视频| 国产主播福利一区二区| 97久久精品一区二区三区 | 日韩欧美一区二区三区免费观看| 中文字幕久久久久一区| 区三区激情福利综合中文字幕在线一区亚洲视频1 | 风间由美在线亚洲一区| 亚洲色无码专区一区| 2018高清国产一区二区三区 | 亚洲乱色熟女一区二区三区蜜臀| 精品一区二区三区免费毛片爱| 色偷偷一区二区无码视频| 日韩人妻无码一区二区三区99| 久久久久99人妻一区二区三区| 日本中文字幕一区二区有码在线| 国产亚洲无线码一区二区| 国产激情视频一区二区三区| 无码精品黑人一区二区三区 | 夜夜添无码一区二区三区| 久久中文字幕一区二区| 蜜臀Av午夜一区二区三区| 精品一区二区三区免费毛片爱| 国产主播福利一区二区| 精品国产一区二区三区香蕉事| 国产在线步兵一区二区三区| 一区二区三区视频在线播放| 亚洲毛片αv无线播放一区| 色久综合网精品一区二区| 色窝窝免费一区二区三区 | 亚洲一区二区三区日本久久九| 91秒拍国产福利一区| 老熟妇高潮一区二区三区|