1. 系統(tǒng)簡介
《動力工段自控系統(tǒng)改造》項目是對南纖公司原有動力工段的自控系統(tǒng)進行改造和優(yōu)化。目標是充分利用原有軟硬件資源,,用最少的投入獲得高效,、安全的系統(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)如下圖所示。
改造前的系統(tǒng)結(jié)構(gòu)
系統(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ù)和報表。
改造后的系統(tǒng)結(jié)構(gòu)
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 則通過遠程變量訪問某臺全點INTOUCH 上的數(shù)據(jù)從而實現(xiàn)對現(xiàn)場的監(jiān)控,。通常CLIENT1、CLIENT2只與SERVER1,、SERVE2 中的一臺通訊,,當(dāng)發(fā)生通訊故障時會自動嘗試與另一臺SERVER 連接,。INTOUCH 中的“通訊狀態(tài)”畫面顯示了各工作站、PLC 及總線的當(dāng)前狀態(tài),。
圖中紅線表示操作站在線,,黑色表示離線。在CLIENT1,、CLIENT2 的“通訊狀態(tài)”畫面中,,工程師可以手動切換CLIENT 與SERVER 的連接。
2.2“瘦”操作站模式
256 點的CLIENT 通過遠程變量訪問全點的SERVER 從而訪問PLC,,這樣CLIENT的變量配置不超過256點,。同時系統(tǒng)運用了“分布式報警”和“分布式歷史趨勢”等功能,所有的報警記錄及歷史趨勢都存儲在全點的SERVER上,,CLIENT上顯示的報警和歷史趨勢是從SERVER上獲得的,。可以說,,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 默認路徑,。CLIENT 的INTOUCH 組態(tài)需在“分布式名稱管理器”中的“分布式歷史”里添加一項,,供應(yīng)器名稱為“SERVER1”,,路徑為“\\SERVER1\D\NCFC2000S1”(工程路徑)即可。在CLIENT 中訪問SERVER1 的歷史數(shù)據(jù)需寫成“SERVER1.TAGNAME”,。SERVER2 的設(shè)置與SERVER1 相同,。
3.遠程變量的引用
在CLIENT 上使用遠程變量只需在變量名前加計算機
名即可,無需在標記名字典中新建變量,,所以不占點數(shù)。(SERVER:TAGNAME)
4.自動切換功能
CLIENT 通過遠程變量觀察SERVER 上的$Second 變量,,若它在在一段時間內(nèi)無變化則表明與SERVER 的連接出現(xiàn)問題,,這時可通過SetAccessName 函數(shù)將CLIENT 上的遠程變量切換到另一臺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" ); //寫操作紀錄
ELSE
IF DL_START.Name = = "NULL" THEN
DL_STOP=0;
Record=StringLeft( DL_STOP.Comment, StringLe(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 需用間接變量指向遠程變量,而遠程變量的COMMENT 無法賦給間接變量的COMMENT,,所以為了在公用窗口中獲得遠程變量的COMMENT 我們只能利用間接變量的NAME(即遠程變量的NAME)在數(shù)據(jù)庫中查找到COMMENT,,再寫操作記錄。語句如下:(寫記錄的操作參見“數(shù)據(jù)庫的應(yīng)用”,。)
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" ); //寫操作紀錄
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 );
www.it168.com
SQLInsert( ConnectionId, "CortrolLog", "CortrolLog" );
ELSE
DL_START=1;
Recor d=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" ),;
即可,。
查詢記錄時,首先準備一個查詢條件,,例如在“稀礬池液位”的動作腳本中有以下語句
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’的信息。
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)和管理,。