|
1 引言
jinguanzutairuanjianyijingjubeilehenqiangdegongneng,danshizaihenduochanghetongyangyouzhijieshiyongdisanfangdaimadeyaoqiu。liruyonghuxuyaojiangzutairuanjiancaijideshishishujuchuansongdaozijikaifadeVB程序中做更複雜的數據分析或者是將世紀星采集的數據做特定的處理之後再傳送給世紀星,這些都需要有一種數據交換機製。
當然實現這種交換機製有很多傳統的方法,如使用文件共享數據DDEshujuhejiaohuanjizhi。chuantongdefangfasuirannenggoudadaoshujujiaohuandemude,danqishiyongfangfajiaoweifansuo。heshiyongwenjiangongxiangshujujiuxuyaozaizutairuanjianhewaibuchengxuneibujinxingwenjianduqucaozuo,zheyangbudanmafanerqiechulisuduyexiangduijiaoman,zaiyaoqiushishixingjiaohaodegongchengzhongjiuxiandelibucongxin。weilerangdisanfangchengxufangbiandiduxieshijixingshuju,shijixingtigonglejiyuActiveX技術的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中的應用
3.1 VB工程和世紀星工程數據交換示意圖:

圖 1
下麵是一個應用VB程序在外部計算PID輸出功率的一個簡單實驗:
需要硬件:三菱FX2N係列PLC、FX2N-4AD-TC、加熱器、S分度熱電偶、固態繼電器。
需要軟件:世紀星組態軟件7.22、VB6.0。
電器原理圖如下圖所示:

圖 2
上圖是一個加熱控製係統。PLC主模塊負責控製繼電器的通斷(PID輸出);,TC模塊負責溫度采集(PID輸入);上位機世紀星部分負責溫度設定、采集下位機信號、曲線顯示、數據記錄、數據檢索等功能;上位機VB部分負責從世紀星獲取設定溫度SV、測量溫度PV以計算PID輸出(固態繼電器的通斷時間)。
3.2 世紀星監控程序
首先,正確配置控製電路,將上位機與PLC相連,然後開發世紀星監控程序,創建相應的驅動,便能得到如下監控畫麵:

圖 3
3.3 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.4 加熱輸出控製
根據2中計算的加熱時間(時間百分比,x%*1s),對PLC的Y0 進行輸出控製。
YO ON/OFF:tagWriteDisc ("y0",1)/ tagWriteDisc ("y0",0),Y0脈寬調製如下圖所示:

圖 4
3.5 實驗結果
本工程利用世紀星組態軟件采集溫度實際值(從PLC),通過在組態軟件中設定溫度的目標值,在VB6.0程序中計算輸出功率的百分比,VB再將加熱時間(Y0時間)傳遞給組態軟件,組態軟件最後再傳給PLC控製加熱。由於采用了粗糙的PID,所以控溫精度在正負1度以內(精度不在本文研究範圍內),但是VB通過DBComm和世紀星組態軟件實時交換數據功能良好。
4 總結
綜上所述,世紀星所提供的DBComm控件使用方便,為第三方程序提供了完備的數據交換接口。另外,DBComm控件還可以訪問世紀星組態軟件的曆史數據庫,下次有機會我們再詳述。
|