1.系統(tǒng)簡介
《動力工段自控系統(tǒng)改造》項目是對南纖公司原有動力工段的自控系統(tǒng)進行改造和優(yōu)化。目標(biāo)是充分利用原有軟硬件資源,用最少的投入獲得高效、安全的系統(tǒng)性能。 原動力工段包括:化水車間、冷凍空壓車間(簡稱動力車間)、軟水站及一二泵房車間,各自擁有自己的控制室。改造前,化水車間已采用了一套 SIEMENS TI545 PLC 和兩臺全點的 INTOUCH 操作站實現(xiàn)監(jiān) 控,泵房車間也已采用了一套 SIEMENS TI545 PLC 和兩臺 256 點的 INTOUCH 操作站實現(xiàn)監(jiān)控,動力車間除 5 臺壓縮空氣干燥器采用 GE 90-30PLC 控制外其余設(shè)備的監(jiān)控均用盤裝儀表實現(xiàn)。原動力工段系統(tǒng)結(jié)構(gòu) 如下圖所示。
[align=center]
改造前的系統(tǒng)結(jié)構(gòu)[/align]
系統(tǒng)改造后,泵房車間和動力車間由原泵房車間的 SIEMENS TI545 PLC 控制(需增加一些卡件),化水車間在原系統(tǒng)基礎(chǔ)上增加一些功能。將原有的兩臺全點 INTOUCH和一臺256點 INTOUCH移入新設(shè)的集中控制室,實現(xiàn)三個車間的集中監(jiān)控,在化水車間設(shè)一臺 256點 INTOUCH 操作站,供現(xiàn)場巡回檢查時使用。
同時系統(tǒng)通過一臺新設(shè)的數(shù)據(jù)及 Web 服務(wù)器與公司管理網(wǎng)連接,公司和工段管理者可通過公司區(qū)域網(wǎng)獲取生產(chǎn)過程的數(shù)據(jù)和報表。
2.系統(tǒng)功能及特點
2.1 冗余的總線及操作站
系統(tǒng)包含 2 臺全點的 INTOUCH(SERVER1、SERVER2)和 2 臺 256 點的 INTOUCH(CLIENT1、CLIENT2),SERVER1、SERVER2 分別通過各自的 TIWAY 卡與化水、泵房的 PLC構(gòu)成兩條冗余的TIWAY總線。CLIENT1、CLIENT2 則通過遠(yuǎn)程變量訪問某臺全點 INTOUCH 上的數(shù)據(jù)從而實現(xiàn)對現(xiàn)場的監(jiān)控。通常 CLIENT1、CLIENT2 只與 SERVER1、SERVE2 中的一臺通訊,當(dāng)發(fā)生通訊故障時會自動嘗試與另一臺SERVER連接。INTOUCH 中的“ PLC及總線的當(dāng)前狀態(tài)。
改造后的系統(tǒng)結(jié)構(gòu)
圖中紅線表示操作站在線,黑色表示離線。在 CLIENT1、CLIENT2的“ 狀態(tài)”畫面中,工程師可以手動切換 CLIENT與 SERVER的連接。
2.2“256 點的 CLIENT 通過遠(yuǎn)程變量訪問全點的 SERVER 從而訪問 PLC,這樣 CLIENT 的變量配置不超過256點。同時系統(tǒng)運用了“分布式報警”和“ 式歷史趨勢”等功能,所有的報警記錄及歷史趨勢都存儲在全點的 SERVER 上,CLIENT 上顯示的報警和歷史趨勢是從 SERVER 上獲得的??梢哉f,SERVER 充當(dāng)了 INTOUCH服務(wù)器而 CLIENT是一個 INTOUCH 客戶端,只需較低的配置即可。當(dāng)切換 SERVER時,布式報警”和“分布式歷史趨勢”也跟著自動切換。
1.“分布式報警”的設(shè)置
在INTOUCH組態(tài)中需用 “ 分布式報警 ” 控件 , 在控件的 報警查詢欄中輸入“\\SERVER1\INTOUCH!DONGLI”,SERVER1 為缺省連接的計算機名,DONGLI 表示 INTOUCH 中的DONGLI 報警組(報警組包括 DONGLI、HS)。在 SERVER 的計算機屬性需選中“本機將提供報警”;而在 CLIENT 的計算機屬性中需選中“本機將顯示報警”。運行時 CLIENT 將通過函數(shù)切換與 SERVER 的連接。 為了統(tǒng)一報警設(shè)置,我們將報警做在 PLC 的報警模塊中通過對 PLC 變量“AHA(報警上限)、AHHA(報警上上限)、ALA(報警下限)、ALLA(報警下下限)、APV(報警過程值)、AVF(報警狀態(tài)字)”的 讀寫來判斷和設(shè)置報警。有報警發(fā)生時,只有 SERVER 會將報警信息寫入報警記錄,SERVER2 在寫報警信 息前先判斷 SERVER1 是否在運行,以免重復(fù)寫入。
2.“分布式歷史趨勢”的設(shè)置(以 SERVER1 為例)在 SERVER 的 INTOUCH 組態(tài)中需將歷史數(shù)據(jù)的存放路徑設(shè)為 INTOUCH 默認(rèn)路徑。CLIENT 的 INTOUCH 組態(tài)需在“分布式名稱管理器”中的“分布式歷史”里添加一項,供應(yīng)器名稱為“SERVER1”, 路徑為“\\SERVER1\D\NCFC2000S1”(工程路徑)即可。在 CLIENT 中訪問 SERVER1 的歷史數(shù)據(jù)需寫成“SERVER1.TAGNAME”。SERVER2 的設(shè)置與 SERVER1 相同。
3.遠(yuǎn)程變量的引用
在 CLIENT 上使用遠(yuǎn)程變量只需在變量名前加計算機名即可,無需在標(biāo)記名字典中新建變量,所 以不占點數(shù)。(SERVER:TAGNAME)
4.自動切換功能
CLIENT 通過遠(yuǎn)程變量觀察 SERVER 上的$Second 變量,若它在在一段時間內(nèi)無變化則表明與 SERVER 的連接出現(xiàn)問題,這時可通過 SetAccessName 函數(shù)將 CLIENT 上的遠(yuǎn)程變量切換到另一臺 SERVER 上。
2.3 公用的操作窗口
系統(tǒng)中對于具有相同操作接口設(shè)備使用了公用的操作窗口,而不是對應(yīng)每個設(shè)備都創(chuàng)建一個操作窗口,這樣大大減少了窗口的數(shù)量。實現(xiàn)它需要用到間接變量,可以將間接變量看作一個指針,當(dāng)對某個設(shè)備操作時,利用間接變量指向操作變量,這樣,對間接變量的賦值就會作用到操作變量上,操作變量的變化也會反應(yīng)到間接變量上。
以過濾水泵為例,在過濾水處理系統(tǒng)中,點擊 3#過濾泵,彈出操作窗口,如下圖所示:
3#過濾泵的操作變量為“RUN-3#GLB(啟動)”、“STOP-3#GLB(停止)”、“RL-3#GLB(反饋)”、
“AUTO-3#GLB(自動)”、“REPAIR-3#GLB(檢修)”點擊過濾泵時執(zhí)行語句:
DL_START.NAME=RUN-3#GLB.NAME;
DL_STOP.NAME=STOP-3#GLB.NAME;
DL_RL.NAME = RL-3#GLB.NAME;
AUTO.NAME = AUTO-3#GLB.NAME;
DL_REPAIR.NAME=REPAIR-3#GLB.NAME;
“DL_XXX”為間接變量。在操作窗口中只需對間接變量賦值即可。例如在“啟動”按鈕的動作屬性中寫到:
IF DL_START.Name<>"NULL" AND DL_STOP.Name<>"NULL" THEN
DL_START=1;
DL_STOP=0;
Record=DL_START.Comment;
SQLInsert( ConnectionId, "CortrolLog", "CortrolLog" ); //寫操作紀(jì)錄
ELSE
IF DL_START.Name = = "NULL" THEN
DL_STOP=0;
Record=StringLeft( DL_STOP.Comment, StringLen( DL_STOP.Comment )/2 );
SQLInsert( ConnectionId, "CortrolLog", "CortrolLog" );
ELSE
DL_START=1;
Record=StringLeft( DL_START.Comment, StringLen( DL_START.Comment )/2 );
SQLInsert( ConnectionId, "CortrolLog", "CortrolLog" );
ENDIF;
ENDIF;
因為設(shè)備的啟停一般有 1.啟動與停止是一個輸出;2.啟動與停止是兩個輸出。為一個輸出時我們將輸出變量的 COMMENT 屬性寫為“XXX 啟動 XXX 停止”這樣,在寫操作記錄時需取 COMMENT 的左一半或右一半;若為兩個輸出時,變量的 COMMENT 將為“XXX 啟動”或“XXX停止”,寫記錄時取對應(yīng)變量的 COMMENT 即可。
CLIENT 的情況比較特殊,因為 CLIENT需用間接變量指向遠(yuǎn)程變量,而遠(yuǎn)程變量的 COMMENT 無法賦給間接變量的 COMMENT,所以為了在公用窗口中獲得遠(yuǎn)程變量的 COMMENT 我們只能利用間接變量的NAME(即遠(yuǎn)程變量的 NAME)在數(shù)據(jù)庫中查找到 COMMENT,再寫操作記錄。語句如下:(寫記錄的操作參見“數(shù)據(jù)
IF DL_START.Name<>"NULL" AND DL_STOP.Name<>"NULL" THEN
DL_START=1;
DL_STOP=0;
Record=StringRight( DL_START.Name ,StringLen( DL_START.Name )-7 );
SQLSelect( ConnectionId, "COMM", "COMMENT", "device_id="+"’"+Record + "’" , "" ); //查找
COMMENT
SQLFirst( ConnectionId );
Record=StringTrim( COM, 3 );
SQLEnd( ConnectionId );
SQLInsert( ConnectionId, "CortrolLog", "CortrolLog" ); //寫操作紀(jì)錄
ELSE
IF DL_START.Name=="NULL" THEN
DL_STOP=0;
Record=StringRight( DL_STOP.Name ,StringLen( DL_STOP.Name )-7 );
SQLSelect( ConnectionId, "COMM", "COMMENT", "device_id="+"’"+Record + "’" , "" );
SQLFirst( ConnectionId );
Record=StringTrim( COM, 3 );
Record=StringLeft( Record, StringLen( Record )/2 );
SQLEnd( ConnectionId );
SQLInsert( ConnectionId, "CortrolLog", "CortrolLog" );
ELSE
DL_START=1;
Record=StringRight( DL_START.Name ,StringLen( DL_START.Name )-7 );
SQLSelect( ConnectionId, "COMM", "COMMENT", "device_id="+"’"+Record + "’" , "" );
SQLFirst( ConnectionId );
Record=StringTrim( COM, 3 );
Record=StringLeft( Record, StringLen( Record )/2 );
SQLEnd( ConnectionId );
SQLInsert( ConnectionId, "CortrolLog", "CortrolLog" );
ENDIF;
ENDIF;
2.4 數(shù)據(jù)庫的應(yīng)用
系統(tǒng)中的 IBM 服務(wù)器作為數(shù)據(jù)存儲和發(fā)布的服務(wù)器,安裝了 SQL SERVER 2000,系統(tǒng)的報警歷史記錄 和操作記錄以及設(shè)備檔案都存放在名為“DL” 的數(shù)據(jù)庫中。
2.4.1 ODBC 的連接
INTOUCH 通過 ODBC 訪問 SQL SERVER,在 ODBC 中建立名為“DL”的用戶 DSN,在 INTOUCH
中用語句:
SQLConnect( ConnectionId, "DSN=DL");
建立連接,若連接成功則 ConnectionId > 0 。在執(zhí)行每一條 SQL 語句時都會有一個返回值,若返回值為 0 則表示執(zhí)行成功,否則表示與數(shù)據(jù)庫連接不正常,需重新建立連接。為了時刻檢測與數(shù)據(jù)庫服務(wù)器的連接情 況,在應(yīng)用程序腳本中每 5 秒鐘執(zhí)行一條查詢語句:
IF ResultCode = = 0 THEN
ResultCode = SQLSelect( ConnectionId , "SYSUSERS" ,"SYSUSERS","UID=0", "" );
ENDIF;
同時在條件腳本中判斷 ResultCode (即返回值)若 ResultCode <> 0 則斷開連接:
SQLDisconnect( ConnectionId );
ConnectionId = 0;
SHOW “通訊狀態(tài)”; 打開“通訊狀態(tài)”畫面,顯示信息“與服務(wù)器連接失?。 奔啊爸卦嚒?、“取消”兩個按鈕。按“重試”,置
位系統(tǒng)將每 20 秒進行一次嘗試連接:
IF RETRY = = 1 THEN
ResultCode = SQLConnect( ConnectionId, "DSN=DL");
ENDIF;
直到 ResultCode = 0 為止。
嘗試連接時系統(tǒng)將變得很忙。若想取消連接,則按“取消”按鈕,系統(tǒng)將不再與服務(wù)器連接,對現(xiàn)場的監(jiān)控 可以正常進行,但操作與報警記錄都將不寫入服務(wù)器(數(shù)據(jù)發(fā)布不受影響)。希望重新連接服務(wù)器時,只需 在“通訊狀態(tài)”畫面下按“重試”按鈕即可。
2.4.2 綁定列表
在全點 INTOUCH 中需建立四個綁定列表:“alarmhis”,“cortrolog”,“device”,“sysusers”分別對 應(yīng)數(shù)據(jù)庫中的表格。“sysusers”只是為了檢查 ODBC 連接用的,并無其他用處。在每個列表中用變量與各 字段相對應(yīng),如“cortrolog” 中變量 “DATETIME” 對應(yīng)字段“DATETIME” ;變量“$OPERATER” 對應(yīng)字段“USERNAME” ;變量“RECORD”對應(yīng)字段“RECORD”等。在寫記錄前,只需先對變量復(fù) 值,再執(zhí)行語句:
SQLInsert( ConnectionId, "CortrolLog", "CortrolLog" ); 即可。
查詢記錄時,首先準(zhǔn)備一個查詢條件,例如在“稀礬池液位”的動作腳本中有以下語句
DEVICE_ID= LT51027.Name; ShowAt("設(shè)備檔案",$ObjHor +200, $ObjVer +50);
SQLSelect( ConnectionId , "DevICE" , "DevICE" , "Device_ID=" + "’"+ device_id +"’" , "" ); SQLFirst( ConnectionId );
首先將要查詢的設(shè)備名(LT51027)賦給 DEVICE_ID。
“SQLSelect”語句實際上執(zhí)行了一條 SQL 語句:
SELECT *FROM DEVICE WHERE DEVICE_ID =’LT51027’
然后將查詢到的記錄的字段值賦給綁定列表中的變量。這樣在設(shè)備檔案中里,只要放上綁定列表中的變量就
能顯示查詢的結(jié)果了 。下圖為從數(shù)據(jù)庫中查到的設(shè)備’ LT51027’的信息 。
2.3 管理層應(yīng)用程序 有了數(shù)據(jù)庫中的“操作記錄”、“報警記錄”和“設(shè)備檔案”,可以方便的開發(fā)管理層應(yīng)用程序。下圖是用 Delphi 開發(fā)的一個客戶端軟件,用來查詢記錄及維護設(shè)備檔案,它可以運行在工程師的 PC 上。
另外,利用 Intouch 的 NETDDE 功能,可將生產(chǎn)數(shù)據(jù)實時地通過第三方軟件進行發(fā)布,這里涉及更多的軟件編程技術(shù),就不在深入了。下圖為將數(shù)據(jù)以 WEB 的方式進行發(fā)布。
結(jié)束語
以上的數(shù)據(jù)庫及WEB功能也可以通過IndustrialSQL Sever和SuiteVoyager實現(xiàn),以上的應(yīng)用可以說明 InTouch無論在腳本和第三方軟件的接口方面都是非常靈活的。在過去,組態(tài)軟件往往只針對下位機,一個 控制系統(tǒng)通常與外界隔離,成為信息孤島,使用Intouch可以做到車間層與管理層的緊密結(jié)合,管理者可以在 辦公室里瀏覽到生產(chǎn)一線的數(shù)據(jù),使企業(yè)以更高的效率進行生產(chǎn)和管理.