• Intouch在煙草行業自動化領域中的應用

    1、系統簡介

    《動力工段自控系統改造》項目是對南纖公司原有動力工段的自控系統進行改造和優化。目標是充分利用原有軟硬件資源,用最少的投入獲得高效、安全的系統性能。

    原動力工段包括:化水車間、冷凍空壓車間(簡稱動力車間)、軟水站及一二泵房車間,各自擁有自己的控制室。改造前,化水車間已采用了一套SIEMENS TI545 PLC 和兩臺全點的INTOUCH 操作站實現監控,泵房車間也已采用了一套SIEMENS TI545 PLC 和兩臺256 點的INTOUCH 操作站實現監控,動力車間除5 臺壓縮空氣干燥器采用GE 90-30PLC 控制外其余設備的監控均用盤裝儀表實現。原動力工段系統結構如下圖所示。



    圖1 改造前的系統結構

    系統改造后,泵房車間和動力車間由原泵房車間的SIEMENS TI545 PLC 控制(需增加一些卡件),化水車間在原系統基礎上增加一些功能。將原有的兩臺全點INTOUCH 和一臺256 點INTOUCH 移入新設的集中控制室,實現三個車間的集中監控,在化水車間設一臺256 點INTOUCH 操作站,供現場巡回檢查時使用。

    同時系統通過一臺新設的數據及Web 服務器與公司管理網連接,公司和工段管理者可通過公司區域網獲取生產過程的數據和報表。


    圖2 改造后的系統結構

    2、系統功能及特點

    2.1 冗余的總線及操作站

    系統包含2 臺全點的INTOUCH(SERVER1、SERVER2)和2 臺256 點的INTOUCH(CLIENT1、CLIENT2),SERVER1、SERVER2 分別通過各自的TIWAY 卡與化水、泵房的PLC 構成兩條冗余的TIWAY 總線。CLIENT1、CLIENT2 則通過遠程變量訪問某臺全點INTOUCH 上的數據從而實現對現場的監控。通常CLIENT1、CLIENT2只與SERVER1、SERVE2 中的一臺通訊,當發生通訊故障時會自動嘗試與另一臺SERVER 連接。INTOUCH 中的“通訊狀態”畫面顯示了各工作站、PLC 及總線的當前狀態。


    圖3

    圖中紅線表示操作站在線,黑色表示離線。在CLIENT1、CLIENT2 的“通訊狀態”畫面中,工程師可以手動切換CLIENT 與SERVER 的連接。

    2.2 “瘦”操作站模式

    256 點的CLIENT 通過遠程變量訪問全點的SERVER 從而訪問PLC,這樣CLIENT的變量配置不超過256點。同時系統運用了“分布式報警”和“分布式歷史趨勢”等功能,所有的報警記錄及歷史趨勢都存儲在全點的SERVER上,CLIENT上顯示的報警和歷史趨勢是從SERVER上獲得的。可以說,SERVER充當了INTOUCH服務器而CLIENT是一個INTOUCH 客戶端,只需較低的配置即可。當切換SERVER時,“分布式報警”和“分布式歷史趨勢”也跟著自動切換。

    (1) “分布式報警”的設置

    在INTOUCH 組態中需用“分布式報警”控件,在控件的報警查詢欄中輸入“\\SERVER1\INTOUCH!DONGLI”,SERVER1 為缺省連接的計算機名,DONGLI 表示INTOUCH 中的DONGLI 報警組(報警組包括DONGLI、HS)。在SERVER 的計算機屬性需選中“本機將提供報警”;而在CLIENT 的計算機屬性中需選中“本機將顯示報警”。運行時CLIENT 將通過函數切換與SERVER 的連接。

    為了統一報警設置,我們將報警做在PLC 的報警模塊中通過對PLC 變量“AHA(報警上限)、AHHA(報警上上限)、ALA(報警下限)、ALLA(報警下下限)、APV(報警過程值)、AVF(報警狀態字)”的讀寫來判斷和設置報警。有報警發生時,只有SERVER 會將報警信息寫入報警記錄,SERVER2 在寫報警信息前先判斷SERVER1是否在運行,以免重復寫入。

    (2) “分布式歷史趨勢”的設置(以SERVER1 為例)

    在SERVER 的INTOUCH 組態中需將歷史數據的存放路徑設為INTOUCH 默認路徑。CLIENT 的INTOUCH 組態需在“分布式名稱管理器”中的“分布式歷史”里添加一項,供應器名稱為“SERVER1”,路徑為“\\SERVER1\D\NCFC2000S1”(工程路徑)即可。在CLIENT 中訪問SERVER1 的歷史數據需寫成“SERVER1.TAGNAME”。SERVER2 的設置與SERVER1 相同。

    (3) 遠程變量的引用

    在CLIENT 上使用遠程變量只需在變量名前加計算機名即可,無需在標記名字典中新建變量,所以不占點數。(SERVER:TAGNAME)

    (4) 自動切換功能

    CLIENT 通過遠程變量觀察SERVER 上的$Second 變量,若它在在一段時間內無變化則表明與SERVER 的連接出現問題,這時可通過SetAccessName 函數將CLIENT 上的遠程變量切換到另一臺SERVER 上。

    2.3 公用的操作窗口

    系統中對于具有相同操作接口設備使用了公用的操作窗口,而不是對應每個設備都創建一個操作窗口,這樣大大減少了窗口的數量。實現它需要用到間接變量,可以將間接變量看作一個指針,當對某個設備操作時,利用間接變量指向操作變量,這樣,對間接變量的賦值就會作用到操作變量上,操作變量的變化也會反應到間接變量上。

    以過濾水泵為例,在過濾水處理系統中,點擊3#過濾泵,彈出操作窗口,如下圖所示:


    圖4

    3#過濾泵的操作變量為“RUN-3#GLB(啟動)”、“STOP-3#GLB(停止)”、“RL-3#GLB(反饋)”、“AUTO-3#GLB(自動)”、“REPAIR-3#GLB(檢修)”點擊過濾泵時執行語句:

    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, 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;

    因為設備的啟停一般有兩種:1.啟動與停止是一個輸出;2.啟動與停止是兩個輸出。為一個輸出時我們將輸出變量的COMMENT 屬性寫為“XXX 啟動XXX 停止”這樣,在寫操作記錄時需取COMMENT 的左一半或右一半;若為兩個輸出時,變量的COMMENT 將為“XXX 啟動”或“XXX 停止”,寫記錄時取對應變量的COMMENT即可。

    CLIENT 的情況比較特殊,因為CLIENT 需用間接變量指向遠程變量,而遠程變量的COMMENT 無法賦給間接變量的COMMENT,所以為了在公用窗口中獲得遠程變量的COMMENT 我們只能利用間接變量的NAME(即遠程變量的NAME)在數據庫中查找到COMMENT,再寫操作記錄。語句如下:(寫記錄的操作參見“數據庫的應用”。)

    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 );
    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 數據庫的應用

    系統中的IBM 服務器作為數據存儲和發布的服務器,安裝了SQL SERVER 2000,系統的報警歷史記錄和操作記錄以及設備檔案都存放在名為“DL” 的數據庫中。

    (1) ODBC的連接

    INTOUCH 通過ODBC 訪問SQL SERVER,在ODBC 中建立名為“DL”的用戶DSN,在INTOUCH 中用語句:

    SQLConnect( ConnectionId, "DSN=DL");
    建立連接,若連接成功則ConnectionId > 0 。在執行每一條SQL 語句時都會有一個返回值,若返回值為0 則表示執行成功,否則表示與數據庫連接不正常,需重新建立連接。為了時刻檢測與數據庫服務器的連接情況,在應用程序腳本中每5 秒鐘執行一條查詢語句:
    IF ResultCode = = 0 THEN
    ResultCode = SQLSelect( ConnectionId , "SYSUSERS" ,"SYSUSERS","UID=0", "" );
    ENDIF;
    同時在條件腳本中判斷ResultCode (即返回值

     
     
    網站首頁  |  關于我們  |  聯系我們  |  廣告服務  |  版權隱私  |  友情鏈接  |  站點導航
     
    国产乱码精品一区二区三区| 亚洲色精品vr一区二区三区| 免费精品无码AV片在线观看| 国产精品亚洲专区在线播放| 久久综合国产乱子伦精品免费| 国产偷窥熟女精品视频| 蜜臀98精品国产免费观看| 精品国产黑色丝袜高跟鞋| 98色精品视频在线| 日韩国产成人精品视频| 亚洲精品97久久中文字幕无码| 亚洲AV无码精品蜜桃| 99久久99这里只有免费的精品| 国产精品嫩草影院永久一| 久久无码专区国产精品发布 | 亚洲精品美女久久久久9999| 国产精品视频色视频| 国产精品白嫩在线观看| 精品福利一区二区三区免费视频| 国产在线精品一区二区中文| 日韩精品一区二区三区影院 | 91精品国产免费久久久久久青草| 久久国产精品久久国产精品| selaoban在线视频免费精品| 久久精品视频在线看99| 亚洲av专区无码观看精品天堂| 久久国产精品久久精| 99国产精品久久| 午夜精品久久久久久久无码| 多人伦精品一区二区三区视频| 国产精品影音先锋| 久久精品国产99久久无毒不卡| 九九精品免视看国产成人| 国产日韩精品SUV| 久久er国产精品免费观看8| 日韩精品成人亚洲专区| 精品久久久久久久99热| 久久精品熟女亚洲av麻豆| 国产精品大尺度尺度视频| 国产精品网站在线观看| 国产精品久久久久9999|