1,、 引言
改革開(kāi)發(fā)以來(lái),,我國(guó)工業(yè)企業(yè)日新月異,規(guī)模日益壯大,,先進(jìn)設(shè)備廣泛應(yīng)用,,工藝科技含量越來(lái)越高。在生產(chǎn)中,,自動(dòng)化技術(shù)已經(jīng)普及到各個(gè)領(lǐng)域,、各個(gè)車間,這充分說(shuō)明我國(guó)民族工業(yè)的逐漸強(qiáng)大,。但是相比之下,,在許多企業(yè)的污水處理中自動(dòng)化程度不高,采用的軟硬件落后,,甚至有的控制點(diǎn)還依賴于人工操作,,無(wú)形中制約了企業(yè)技術(shù)先進(jìn)化的發(fā)展。為此我們結(jié)合某一個(gè)排污量大(平均流量80T/H),、污水成分復(fù)雜(包括面漆水,、電泳水、車身濃脫脂水等),、控制設(shè)備多(需要600多控制點(diǎn))的汽車制造廠在污水處理改造項(xiàng)目中,,采用20世紀(jì)90年代國(guó)際上先進(jìn)的工控組態(tài)軟件WinCC,開(kāi)發(fā)了相應(yīng)的污水處理的控制程序,。在一年多時(shí)間的實(shí)際運(yùn)行中,,各項(xiàng)工藝指標(biāo)都達(dá)到了預(yù)期的效果,用戶十分滿意,,從而告別了長(zhǎng)期污水排放不達(dá)標(biāo)的被動(dòng)局面,。
2、 WinCC軟件的簡(jiǎn)介
工控組態(tài)軟件WinCC是一個(gè)集成的人機(jī)界面(HMI)系統(tǒng)和監(jiān)控管理系統(tǒng),,它是西門子公司在過(guò)程自動(dòng)化領(lǐng)域中的先進(jìn)技術(shù)和微軟公司強(qiáng)大軟件功能的產(chǎn)物,,WinCC是視窗控制中心(Windows Control Center)的簡(jiǎn)稱。它包括圖形設(shè)計(jì)器,、報(bào)警記錄,、標(biāo)
記記錄、報(bào)告設(shè)計(jì)器,、全局腳本,、控制中心、用戶管理等功能,,使其具有高性能的過(guò)程耦合,、快速的畫(huà)面更新、以及可靠的數(shù)據(jù)管理[1~2>。
3,、 系統(tǒng)構(gòu)成
對(duì)于一個(gè)普通的水處理項(xiàng)目就其工程量而言是巨大的,,尤其是一些大型項(xiàng)目,所以開(kāi)發(fā)控制程序,、調(diào)試的時(shí)間不能不成為必須考慮的因素,。但是出于可靠性的考慮,將控制系統(tǒng)的功能分離是必須的,,即:下位機(jī)執(zhí)行保護(hù),、控制和數(shù)據(jù)的采集,脫離上位機(jī)也能獨(dú)立對(duì)系統(tǒng)進(jìn)行控制,,上位機(jī)執(zhí)行顯示,、操作、報(bào)警,、儲(chǔ)存等,。那么帶來(lái)的問(wèn)題是上下位機(jī)的通訊又成為費(fèi)時(shí)費(fèi)力的工作。
WinCC能和所有主要廠商的PLC進(jìn)行通訊,,如:AB,、GE、Omron等,。如果與西門子的PLC系列及STEP 7軟件合用,,將大幅降低工程時(shí)間,因?yàn)镾TEP 7中定義的變量可以在WinCC中直接使用,。
由于工業(yè)污水的水質(zhì)成分復(fù)雜,,有害物含量高,所以處理工藝的復(fù)雜(包括調(diào)節(jié),、初沉,、混凝氣浮、化學(xué)沉淀,、生化處理等),,要求控制的部件多,相互關(guān)聯(lián)的控制回路也比較多,。其工藝流程簡(jiǎn)圖如圖1所示,。
圖1、車身廠污水處理工藝流程簡(jiǎn)圖
系統(tǒng)上位機(jī)采用工業(yè)用計(jì)算機(jī),,配置為PⅢ800,、256M內(nèi)存、40G硬盤,、21顯示器,,運(yùn)行中文Windows 2000操作系統(tǒng),組態(tài)軟件為WinCC5.0SP2中文版,通過(guò)CP5611通訊卡(MPI/PROFIBUS)與下位機(jī)通訊,;下位機(jī)采用S7-300系列中的CPU318-2DP,共21塊I/O卡,。由于整個(gè)處理工藝的占地面積比較大,,控制回路多,為了避免鋪設(shè)大量的控制線路,,所以采用西門子的ET200模塊將一部分I/O放置在距離中心控制室較遠(yuǎn)而控制點(diǎn)又比較集中的地方,,利用西門子的PROFIBUS-DP通訊協(xié)議形成遠(yuǎn)程I/O??刂葡到y(tǒng)結(jié)構(gòu)如圖2所示,。
4、 WinCC的組態(tài)實(shí)現(xiàn)
4.1 主控界面的組態(tài)
本系統(tǒng)的設(shè)備比較多,,要將所有的設(shè)備都顯示在一張畫(huà)面里是不可能的,,所以將設(shè)備按照處理工藝的功能步驟分級(jí)在多張畫(huà)面內(nèi),分為電泳線,、前處理線,、生化線、加藥線等,,之間的切換使用按鈕的鼠標(biāo)動(dòng)作來(lái)實(shí)現(xiàn),。這對(duì)于用WinCC現(xiàn)成的鼠標(biāo)動(dòng)作來(lái)實(shí)現(xiàn)是很簡(jiǎn)單的,但是不是要在每張圖上都使用相同數(shù)量且位置排列順序一致的按鈕呢,?(出于對(duì)操作的一致性考慮,,不能讓操作人員在不同的圖上,不同的位置找想要操作的按鈕)這個(gè)問(wèn)題的解決我們使用WinCC的腳本編程,,在按鈕動(dòng)作中調(diào)用它的內(nèi)部函數(shù)來(lái)實(shí)現(xiàn),。首先,組態(tài)一幅背景畫(huà)面,,其中包括要顯示的靜態(tài)文本,、OLE(例如,時(shí)鐘),、所有的圖形切換按鈕及推出關(guān)機(jī)按鈕,。第二,在背景畫(huà)面中插入智能對(duì)象(Smart Object)中的畫(huà)面窗口(Picture Window),并且使其的尺寸與其分級(jí)畫(huà)面相同,。第三,,在相應(yīng)的切換按鈕的屬性->事件->鼠標(biāo)動(dòng)作中編寫(xiě)如下C語(yǔ)言腳本代碼:
#include\"apdefap.h\"
void OnClick(char *lpsz PictureName,
char *lpsz ObjectName,char *lpsz PropertyName)
{
SetPictureName(\"背景畫(huà)面\", \"畫(huà)面窗口\", \"電泳處理線\");
?。?//\"背景畫(huà)面\"即為始終顯示地靜態(tài)背景的屬性名,,\"畫(huà)面窗口\"即為在背景畫(huà)//面中插入地畫(huà)面窗口(Picture Window)屬性名,\"電泳處理 線\"即為分級(jí)畫(huà)面//的名稱
這樣就能方便快捷地切換畫(huà)面。
還有一個(gè)必須始終顯示的是報(bào)警記錄,,用畫(huà)面顏色閃爍來(lái)提示操作者有故障發(fā)生,,可以用同樣的C語(yǔ)言腳本(當(dāng)然不是加在鼠標(biāo)動(dòng)作中)在背景畫(huà)面的底部留下一條類似Windows狀態(tài)欄的報(bào)警欄,當(dāng)出現(xiàn)故障報(bào)警的時(shí)候在報(bào)警欄顯示最近一條報(bào)警記錄,,操作人員可以利用按鈕切換到主報(bào)警記錄畫(huà)面了解故障的完全信息,。
4.2 單個(gè)部件的組態(tài)
WinCC在其內(nèi)部的圖庫(kù)里集成很多的圖形對(duì)象,如水箱,、電機(jī),、閥門等等,對(duì)于污水處理用的最多的是水池,,攪拌機(jī)等等,。為了使組態(tài)畫(huà)面貼近實(shí)際,能夠更好的反應(yīng)現(xiàn)場(chǎng)工況,,圖庫(kù)里的元素并不能滿足要求,。我們可以利用WinCC的畫(huà)圖工具自己繪制適應(yīng)實(shí)際的圖形元素,并且使用C腳本使其產(chǎn)生動(dòng)畫(huà)效果,。如3圖所示,。
圖3、組態(tài)部件元素
對(duì)于調(diào)節(jié)池,,反應(yīng)池等可以用矩形來(lái)表示,,以圖形的填充高度來(lái)示意其液位的高度。這里要注意的是一些數(shù)值地轉(zhuǎn)化,,由于一些儀表例如E+H的超聲波液位計(jì),,是以4~20毫安的電流信號(hào)進(jìn)入PLC,對(duì)于表的參數(shù)設(shè)定好以后4毫安就對(duì)應(yīng)相應(yīng)池子的液位最低點(diǎn),,而20毫安對(duì)應(yīng)于池子的液位最高點(diǎn),。所以在顯示數(shù)字高度的時(shí)候要將PLC相對(duì)4、20毫安的數(shù)值轉(zhuǎn)化為實(shí)際池子的高度范圍例如,,0.5~5.5米,。但是對(duì)于圖形填充的時(shí)候是按照百分?jǐn)?shù)來(lái)表示的所以還要將PLC數(shù)值轉(zhuǎn)化為0~100%的度量范圍。
攪拌機(jī)的組態(tài)可以使用C腳本使其產(chǎn)生動(dòng)畫(huà),,在其運(yùn)行時(shí)產(chǎn)生視覺(jué)上的旋轉(zhuǎn),。實(shí)際上攪拌機(jī)的圖形是用兩個(gè)部分橢圓組成的,在橢圓的屬性->幾何->半徑中加入代碼如下:
#include \"apdefap.h\"
long _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
?。?br />
static int x="25",y,z;//x為半徑的初始值為25,,y為切換變量,z為攪拌機(jī)運(yùn)行狀態(tài)變量
z=GetTagBit(\"202攪拌機(jī)運(yùn)行\(zhòng)"); //取得PLC攪拌機(jī)的運(yùn)行狀態(tài)
if(z!=0)
?。?br />
switch(y)
?。?br />
case 0:
x=x-4;
if(x<=0)
y=1;
break;
default :
x=x+4;
if(x>=25)
y=0;
break;
?。?br />
}
return x;
?。?br />
4.3語(yǔ)音報(bào)警的組態(tài)
在工業(yè)現(xiàn)場(chǎng)安全是極其重要的,,無(wú)論從那個(gè)角度講我們應(yīng)該利用一切手段減少故障的發(fā)生。在故障已經(jīng)發(fā)生的時(shí)候,,應(yīng)該在第一時(shí)間以多種方式通知操作人員有故障發(fā)生?,F(xiàn)代微處理計(jì)算機(jī)的處理速度可以完全勝任對(duì)于圖形,語(yǔ)音地同時(shí)處理,。所以我們可以利用計(jì)算機(jī)的聲卡和音箱在有故障發(fā)生的時(shí)候產(chǎn)生語(yǔ)言報(bào)警,但是問(wèn)題是WinCC本身并不能產(chǎn)生語(yǔ)音的功能,,而且其內(nèi)部的上千個(gè)函數(shù)也沒(méi)有提供處理聲音的函數(shù),。解決這個(gè)問(wèn)題的方法歸功于微軟開(kāi)發(fā)的WinCC與操作系統(tǒng)地完美結(jié)合,因?yàn)樵赪inCC中可以直接調(diào)用Windows的API函數(shù),。實(shí)現(xiàn)的具體C腳本代碼如下:
long _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
?。?br />
#pragma code(\"Winmm.dll\")
void WINAPI PlaySoundA(char *pszSound,char *hmode,DWORD dwflay);
#pragma code()
if(GetTagBit(\"112排泥備泵故障\"))
PlaySoundA(\"d:\\\\\\\\winnt\\\\\\\\media\\\\\\\\Mircosoft Sound.wav\",NULL,8);
return 1020;
}
還有一個(gè)值得主意的問(wèn)題是此段代碼的加入點(diǎn),,通過(guò)反復(fù)多次的實(shí)踐得出結(jié)論,,即這個(gè)點(diǎn)必須加在始終顯示于屏幕上的任何圖形元素的屬性中,這樣才能達(dá)到語(yǔ)言報(bào)警的預(yù)期效果,。
5,、 小結(jié)
WinCC采用了當(dāng)今流行的面向?qū)ο蟮募夹g(shù),很類似流行的Visual Basic語(yǔ)言,。對(duì)象的屬性可以進(jìn)行設(shè)定或編程以實(shí)現(xiàn)對(duì)該對(duì)象的動(dòng)畫(huà)及事件的觸發(fā),,內(nèi)嵌的MS C語(yǔ)言減少了開(kāi)發(fā)者的學(xué)習(xí)時(shí)間,并增加了其靈活性,。如果對(duì)于Windows的SDK編程熟悉的話,,WinCC中調(diào)用Windows系統(tǒng)的API函數(shù)完全可以實(shí)現(xiàn)象VB、VC等高級(jí)語(yǔ)言所能實(shí)現(xiàn)的功能,。但在開(kāi)發(fā)時(shí)間和易用性,、穩(wěn)定性上要優(yōu)于以上兩種語(yǔ)言,因?yàn)樗轻槍?duì)工業(yè)現(xiàn)場(chǎng)設(shè)計(jì)開(kāi)發(fā)的,。