|
概述
編(bian)寫(xie)程(cheng)序(xu)時(shi),我(wo)們(men)經(jing)常(chang)將(jiang)相(xiang)似(si)的(de)模(mo)塊(kuai)組(zu)織(zhi)成(cheng)函(han)數(shu),以(yi)避(bi)免(mian)重(zhong)複(fu)編(bian)碼(ma),這(zhe)樣(yang)維(wei)護(hu)起(qi)來(lai)也(ye)方(fang)便(bian)。同(tong)樣(yang)在(zai)工(gong)程(cheng)組(zu)態(tai)時(shi),也(ye)存(cun)在(zai)相(xiang)似(si)的(de)功(gong)能(neng),相(xiang)似(si)的(de)表(biao)現(xian)形(xing)式(shi),如(ru)果(guo)組(zu)織(zhi)合(he)理(li),同(tong)樣(yang)可(ke)以(yi)讓(rang)我(wo)們(men)事(shi)半(ban)功(gong)倍(bei)。下(xia)麵(mian)以(yi)紫(zi)金(jin)橋(qiao)軟(ruan)件(jian)為(wei)例(li),來(lai)說(shuo)明(ming)如(ru)何(he)減(jian)少(shao)重(zhong)複(fu)工(gong)作(zuo)。
紫金橋軟件提供了間接變量,變量轉向、圖形模板、圖形樣板等多種手段來避免畫麵組態的重複工作,下麵就對這些手段予以詳細說明。
間接變量的使用
間接變量是一種特殊形式的中間變量,是能夠被動態指向其他變量的變量,或稱為指針變量,它類似於C語言中的指針。間接變量在初始狀態並不指向任何變量,它需要通過特殊的賦值語句來定向。其形式如下:
INDIRVAR = &TAGETBAR
其中INDIRVAR:代表間接變量;TAGETBAR表示目標變量,目標變量一般為數據庫變量。

經過這種變量重定向後,變量INDIRVAR和TAGETBAR的數值將保持一致。改變INDIRVAR的數值就等於改變TAGETBAR的值,反之亦然。二者綁定到一起,這種綁定將一直保持,直到INDIRVAR 變量被重定向為其它變量。利用間接變量可以避免畫麵上的大量重複的工作,舉例如下:

例如,如上所示為燈光控製畫麵,圖中紅色的 為照明燈。鼠標單擊照明燈將出現照明設置對話框。

圖中有9盞燈,每盞燈的設置框都類似,隻是關聯的變量不同。如果做將設置對話框畫麵畫好後,複製幾份,將變量分別替換為對應的照明燈的變量,倒也不費事。但是困難的是什麼時候認為第一幅畫麵已經定型,決定複製為第二幅。因為一旦幅之後,如果想對畫麵進行調整,勢必兩幅畫麵都要修改。
對dui於yu這zhe種zhong情qing況kuang,在zai畫hua麵mian中zhong可ke以yi使shi用yong間jian接jie變bian量liang。在zai單dan擊ji照zhao明ming燈deng時shi,將jiang間jian接jie變bian量liang重zhong定ding向xiang指zhi向xiang實shi際ji變bian量liang。例li如ru在zai照zhao明ming燈deng的de鼠shu標biao動dong作zuo中zhong填tian寫xie如ru下xia腳jiao本ben:
第一盞燈:
INDIRVAR = &LAMP1.PV;
DISPLAY(“站台照明設置”);
第二盞燈:
INDIRVAR = &LAMP2.PV;
DISPLAY(“站台照明設置”);
其他類似。
而在站台照明設置窗口中,隻使用間接變量INDIRVAR,這樣你隻需要做一幅畫麵就可以了,減少了畫麵編輯和維護工作量。
變量轉向功能
間接變量隻能重定向到畫麵中已經存在的變量,這就無法讓間接變量指向數據庫動態加入新點。變量轉向功能正是為此目的而產生的。
變量轉向是通過VarRedir函數實現的,該函數格式如下:
VarRedir(Tag, NewTag)
該函數有兩個含義:
1)如果Tag為數據庫變量,則對其進行重定向,即改變變量的數據庫參數項,使其指向其他位號。
2)如果Tag為間接變量,則改變間接變量的指向。
參數
Tag:字符串,數據庫變量或間接變量,必須是變量本身,不能為變量名稱字符串。
NewTag:字符串,新位號名或變量名。數據庫位號要包括參數。
在上麵例子中可以將INDIRVAR = &LAMP1.PV替換為VarRedir(INDIRVAR, "LAMP1.PV")。
通過間接變量,VarRedir都可以將變量轉向到數據庫變量、中間變量、窗口變量,那麼是不是變量重定向函數可以完全代替間接變量呢?
不是的。
· 間接變量在組態時就對變量進行編譯、檢查,所以使用間接變量更安全些,同樣使用VarRedir更靈活,更適合於有規律的、重複度較高的替換。
· 間接變量在組態時就對變量進行編譯、檢查,所以其替換是靜態的,速度比較快。
圖形模板
當多幅畫麵圖像相同,僅僅是每幅畫麵顯示的點不同時,可以使用圖形模板。
注意這裏說的是點不同,而不是變量不同。一個點可以有很多參數,每個”點.參數”對應一個變量。可以認為點是變量的集合。
下麵,我們通過一個簡單的例子來說明圖形模板對象的使用方法。此例子是使用一幅簡單的畫麵來顯示點的NAME、DESC、EU、PV、EULO、EUHI六個基本參數。
下麵是點FI1001的基本參數畫麵:

點FI1002,FI1003等都有與點FI1001類似的基本參數畫麵。如果簡單的複製,我們可以生成其他點的基本參數畫麵,但是畫麵需要調整時就很費事了。
使用間接變量可以避免畫麵複製的問題,對於上麵的畫麵我們至少要定義6個間接變量。變量轉向動作也要象下麵這樣寫很多行。
INDIR_NAME = &FI1001.NAME;
INDIR_DESC = &FI1001.DESC;
INDIR_EU = &FI1001.EU;
INDIR_PV = &FI1001.PV;
INDIR_EULO = &FI1001.EULO;
INDIR_EUHI = &FI1001.EUHI;
是不是看起來很麻煩!
使用圖形模板就可以減少替換語句,隻是替換點名即可。方法如下:
在窗口中畫出如下圖素,並將其與圖形模板對象打成單元。

圖中”TP”為圖形模板對象,運行時不可見。
在文本輸出動作中,分別輸入變量T.NAME、T.DESC、T.EU,在數值輸出動畫中分別輸入T.PV、T.EULO、T.EUHI等。這些變量都定義為模板變量。
變量轉向動作隻要象下麵一行即可。
#TMPL.ChangeTag("T1", "FI1001");
TMPL為圖形模板對象名稱。
圖形樣板
以上講述的都是對變量或點的替換,而樣板是對圖形的替換。
在實際繪圖中我們經常遇到這樣情況,要求畫麵中相同的元素使用相同的顏色或字體,而er在zai項xiang目mu實shi施shi前qian一yi段duan時shi間jian內nei很hen難nan確que定ding下xia來lai,即ji便bian確que定ding下xia來lai在zai項xiang目mu實shi施shi中zhong難nan免mian有you些xie改gai變bian。若ruo是shi沒mei有you確que定ding好hao規gui則ze,就jiu無wu法fa著zhe手shou工gong作zuo,如ru果guo已yi經jing繪hui製zhi了le大da量liang的de畫hua麵mian,修改起來是非常繁瑣的事。尤其是對於單元中的圖元改動更為複雜(需要拆開單元,改後再合成單元)。
樣板就是為了解決上述問題而誕生的。樣板用於規定線的顏色、寬度、線性、填充色、填充樣式、字體、字號以及圖形的形狀。利用樣板可以方便修改具有相同、相似屬性的圖元。
例如規定燃油管線使用樣板A(綠色),蒸汽管線使用樣板B(白色),如果要將所有的燃油管線改為黃色,隻需要重新定義樣板A的顏色屬性為黃色即可,樣板負責對所有畫麵中的燃油管線顏色進行替換。
結論
紫(zi)金(jin)橋(qiao)軟(ruan)件(jian)提(ti)供(gong)了(le)很(hen)多(duo)獨(du)特(te)的(de)方(fang)法(fa)來(lai)減(jian)少(shao)組(zu)態(tai)工(gong)程(cheng)師(shi)的(de)工(gong)作(zuo),利(li)用(yong)這(zhe)些(xie)方(fang)法(fa),可(ke)以(yi)大(da)大(da)減(jian)少(shao)重(zhong)複(fu)性(xing)勞(lao)動(dong),並(bing)使(shi)得(de)工(gong)程(cheng)易(yi)於(yu)維(wei)護(hu),提(ti)高(gao)了(le)工(gong)作(zuo)效(xiao)率(lv)。
|