|
1 引言
盡jin管guan組zu態tai軟ruan件jian已yi經jing具ju備bei了le很hen強qiang的de功gong能neng,但dan是shi在zai很hen多duo場chang合he都dou有you直zhi接jie使shi用yong第di三san方fang代dai碼ma的de要yao求qiu。例li如ru用yong戶hu需xu要yao將jiang組zu態tai軟ruan件jian采cai集ji的de實shi時shi數shu據ju傳chuan送song到dao自zi己ji開kai發fa的deVB程序中做更複雜的數據分析或者是將世紀星采集的數據做特定的處理之後再傳送給世紀星,這都需要有一種數據交換機製。
當然實現這種交換機製有很多傳統的方法,如使用文件共享數據、使用DDE數(shu)據(ju)交(jiao)換(huan)機(ji)製(zhi)。傳(chuan)統(tong)的(de)方(fang)法(fa)雖(sui)然(ran)能(neng)夠(gou)達(da)到(dao)數(shu)據(ju)交(jiao)換(huan)的(de)目(mu)的(de),但(dan)其(qi)使(shi)用(yong)方(fang)法(fa)較(jiao)為(wei)煩(fan)瑣(suo),使(shi)用(yong)文(wen)件(jian)共(gong)享(xiang)數(shu)據(ju)就(jiu)需(xu)要(yao)在(zai)組(zu)態(tai)軟(ruan)件(jian)和(he)外(wai)部(bu)程(cheng)序(xu)內(nei)部(bu)進(jin)行(xing)文(wen)件(jian)讀(du)取(qu)操(cao)作(zuo),這(zhe)樣(yang)不(bu)但(dan)麻(ma)煩(fan)而(er)且(qie)處(chu)理(li)速(su)度(du)也(ye)相(xiang)對(dui)較(jiao)慢(man),在(zai)要(yao)求(qiu)實(shi)時(shi)性(xing)較(jiao)好(hao)的(de)工(gong)程(cheng)中(zhong)就(jiu)顯(xian)得(de)力(li)不(bu)從(cong)心(xin)。為(wei)了(le)讓(rang)第(di)三(san)方(fang)程(cheng)序(xu)方(fang)便(bian)地(di)讀(du)寫(xie)世(shi)紀(ji)星(xing)數(shu)據(ju),世(shi)紀(ji)星(xing)提(ti)供(gong)了(le)基(ji)於(yu)ActiveX技術的OCX控件,此控件可以在大多的開發環境中使用(如VC++6.0、VB6.0),它就是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 控件還可以訪問世紀星組態軟件的曆史數據庫,本篇暫不詳述。
|