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