周國棟,趙錦輝(.上海市機械設備成套(集團)有限公司,上海 000;.江蘇優聯環境發展有限公司,江蘇 南通 6000)
結構化編程在PLC程序設計中的應用
周國棟1,趙錦輝2
(1.上海市機械設備成套(集團)有限公司,上海200120;2.江蘇優聯環境發展有限公司,江蘇南通226000)
摘要:本文比較了常見的PLC程序設計方法,并結合給排水行業的工藝特點,介紹了結構化編程方法在給排水行業的應用實例,該方法具有編程調試簡便,易于擴展,移植性好等特點。
關鍵詞:PLC;結構化;給排水
隨著現代工業發展進程的不斷加快,工業自動化控制技術發揮著越來越大的作用,PLC控制系統的應用也日益廣泛。PLC程序設計的水平優劣往往決定著工程能否及時竣工投產,工業設備能否充分發揮其設計生產能力。傳統的PLC編程方式程序繁瑣冗長,結構不清晰,不利于控制程序在多個項目中的重復使用。如何迅速、優質地編制符合不同設備工藝特點,參數的PLC程序,對工業控制系統的及時完工,提高自動化控制水平具有較大的意義。本文結合給排水行業常用設備及工藝程序的編寫,對結構化編程在PLC中的應用進行了初步的探索,取得了較理想的效果。
常見的程序設計方法分為三種:線性化方法、模塊化方法以及結構化方法[1]。
線性化編程方法:將所有的程序代碼全部放在一個程序塊中,如對S7-300/400來說,在OB1中寫入數據采集、設備控制、臺時統計等全部用戶程序。該方法與PLC所代替的繼電器控制電路類似,系統按照順序處理各條指令。它適用于小型設備配套PLC的編程,對于大中型項目則顯得程序結構不清晰,同時由于需要對不同設備編制大量類似的代碼,導致代碼冗長,難以調試和維護。
模塊化編程方法:將程序根據不同功能需求分成不同的塊,每個功能的控制指令在各自的塊內,OB1按順序調用每個塊。該方法程序結構清晰,便于調試和維護,但僅將功能按塊分配,加以有條件的調用,故雖然CPU效率得到提高,但代碼冗長、調試困難的缺點未得到明顯改善。
結構化編程方法:將復雜的自動化任務分割成過程相關的功能或可多次處理的小任務,以提供可以用于類似任務的通用的程序代碼,這樣更易于控制復雜任務。而這些小任務以相應的程序段表示,稱為塊。只需要在調用程序塊時針對不同的設備和工藝流程代入不同的參數或地址,即可實現不同設備的控制,無須多處重復輸入相同功能的代碼。當需要對功能進行修改時只需要修改程序塊即可,提高了編程的效率和可靠性。
在實際應用中,在對給排水行業通用設備和工藝進行詳細分析的基礎上,針對典型設備和工藝分別編制了水泵、儀表、閥門、泵站水泵調度、自動加藥等不同的控制模塊,使高效開發PLC程序在給排水行業的應用成為可能。下面以變頻水泵及泵站的水泵調度為例來介紹結構化編程方法。
3.1變頻水泵功能塊
變頻水泵是給排水行業最常見的設備,其調用如圖2所示。
圖2為變頻水泵控制塊的調用實例,該FB的輸入輸出參數如圖3示。
功能塊接口參數共分為三種類型:輸入(INPUT);輸出(OUTPUT);輸入輸出(IN_ OUT)。其中輸入參數主要有:遠程信號,上電信號,運行信號,水泵故障,電回路故障,變頻器故障,頻率輸入等;輸出參數主要有:開停控制,頻率控制輸出,實際運行頻率等;輸入輸出類型參數主要有:變頻電機狀態,變頻電機控制命令,電機臺時及開停次數統計,頻率設定值等。
輸入輸出類型參數可由人工或自控程序在功能塊外部進行賦值,也可由本功能塊內部邏輯進行修改。其中的State、Command等參數均為WORD類型,其每一位分別代表了不同的含義。
該功能塊包含了除電流外的變頻水泵常見的絕大部分信號處理及控制功能,對于部分實際工程中未使用的參數,可通過直接設置默認值或空置的方式進行處理。水泵電流可通過專門的模擬量處理程序塊進行數據轉換和上下限報警判斷,當電流超過上下限設定值時發出報警信號(過流、欠流)傳送給變頻水泵功能塊,從而實現水泵的電流超限保護功能。
3.2泵站水泵調度功能塊
污水廠一般具有進水泵房、中間提升泵站、出水泵房等工藝段,其水泵控制模式基本相同,都是根據液位的變化來調節運行的水泵頻率和臺數,調泵時又要考慮單臺設備的運行臺時和啟停間隔等因素。其基本原理介紹如下:
泵站的液位控制一般采用根據液位分段啟停泵的模式,不同的液位分別對應當前需要開泵的臺數,同時具備死區保護功能,停泵液位設定值比啟泵液位設定值略低,以防止特殊情況下水泵的頻繁啟停[2]。
水泵的啟停選擇需要考慮以下幾個條件:
(1)熱備狀態。PLC首先檢測水泵上電情況,遠程狀態,控制模式,故障情況等,當以上條件均滿足時認為該泵處于熱備狀態,可被自控程序進行開停調度。
(2)平衡調泵。累計運行時間最短的泵優先被啟動,運行時間最長的泵優先停止,使每臺泵運轉時間大致相等。當運行時間相同時,按泵的順序啟停。
(3)啟動間隔保護。控制程序使每一臺泵每小時起動次數少于6次,兩次起動間隔≥10分鐘,且不論何種情況,不同時起動2臺及2臺以上水泵。
在實際應用中,根據分段啟泵原理以及低水位保護等條件編制泵站自控功能塊,計算當前需要開泵臺數。根據上述三條件,編制了水泵啟停調度選擇功能塊,用于選擇當前需要啟動的水泵編號。兩功能塊配套使用,可快速完成泵站自動調泵程序的編制工作。限于篇幅,本處不再詳述其具體實現過程。
(1)對于實際項目,我們往往采用模塊化編程與結構化編程相結合的方式來實現。首先將項目根據不同工藝段分為不同的任務模塊,在每個任務模塊中再采用結構化的編程方法來實現具體設備的控制、數據分析統計以及工藝控制程序等功能。具體對于西門子STEP7編程軟件來說,我們通常使用FC來實現不同工藝段設備的控制,而每個FC中的具體設備的控制程序再通過調用FB來實現。
(2)具體設備控制功能塊的規劃以完成單一功能為主,避免出現將大量功能堆砌在同一功能塊中的情況。如上述變頻水泵功能塊,完成設備狀態分析、控制及軟故障判斷等基本功能即可,其余可能需要的功能如電流,溫度的檢測及故障聯鎖停泵等功能可在通用的模擬量塊中進行處理,將最終輸出的停機信號等傳遞給水泵功能塊即可,無須全部加入到水泵功能塊中,避免了重復代碼,結構更加清晰,同時也更便于維護。
(3)建議采用SCL語言來完成PLC程序模塊的編制,并且在編程時盡量采用標準化的,而非西門子特有的指令,對于程序的移植很有好處。如西門子的SCL語言與施耐德、Rockwell等品牌PLC的ST語言(Structured Text)類似,都是類PASCAL語言,符合IEC61131-3國際標準,當移植到相關的編程環境時,只需要進行少量修改即可使用[3]。
(4)可以根據工程逐步積累,開發相關行業的程序庫,從而加快相關工程的開發進度。程序庫中的程序模塊可重復使用,成為下一個項目的寶貴資源,同時可以通過加密方式對程序塊進行保護。
本文結合PLC編程的特點,采用結構化編程思想,將常見的設備以及相關工藝控制流程封裝為程序塊,加以調用,各單個任務塊的創建和測試可以相互獨立地進行。通過使用參數,可將塊設計得十分靈活,實際應用時只需保證現場信號的正確性并對調用接口進行測試即可完成調試工作,大大減少了調試工作量,提高了程序編制和調試效率,同時采用該方法編制程序不易出錯,有效保證了程序的可靠性。同時該方法具有了面向對象的部分特點,當需要擴展部分功能時,只需對原功能模塊進行繼承,派生出新的控制程序模塊,具有較強的靈活性。
參考文獻:
[1]西門子(中國)有限公司.STEP7編程手冊[K].2010.
[2]王明軍.基于PLC的污水泵站自動控制系統[J].自動化技術與應用,2010(05).
[3]HansBerger著,張同莊,方榮惠,伍小杰,鄧先明譯.西門子S7-300/400PLC編程--語句表和結構化控制語言描述(第3版)[M].北京:人民郵電出版社,2008.
作者簡介:周國棟(1973—),男,江蘇南通人,工程碩士,工程師,研究方向:工業自動化。