車健生
(沈陽現代制造服務學校,遼寧沈陽 110148)
設計PLC梯形圖程序,一般是先按系統控制要求,結合工藝流程繪出程序流程框圖,對大型復雜程序應考慮順序功能圖設計原則,由框圖導出梯形圖。教學實踐中,學生由于沒有進過企業、下過車間,難以理解工業系統控制要求和工藝流程。比如對于“郵件分揀機控制”“電鍍生產線控制”等PLC實驗項目,學生也只是在電視里見過類似的設備,無法從系統角度把握控制過程。梯形圖程序雖說是圖,但只是設計上源于、形象上接近繼電器控制電路,現在的學生繼電器控制電路學習的較少,所以梯形圖無法使學生從繼電器電路知識中獲得觸類旁通的學習效果。一般的PLC項目,即便是實驗模型的梯形圖程序也都比較冗長、控制環節繁雜,這也為梯形圖程序設計的抽象性、復雜性蒙上了神秘的色彩。
要解決上述問題,就要通過一定教學手段形象、直觀地描述系統控制要求及生產工藝流程;要在梯形圖講解、設計過程中輔助以實時狀態的動畫效果,展現梯形圖運行時一系列控制狀態。目前一些實踐是使用Flash等實現模擬PLC控制過程的動畫效果。也有學者介紹“利用組態軟件”開發了“四層電梯的虛擬仿真系統”用于PLC實驗教學[1]。這些對PLC理論實踐起到了很大的推動作用。
動畫和虛擬仿真系統開發成本較高,在教學中,如果實驗內容稍加變化,就會顯露靈活性不夠、可擴充性差。利用組態軟件編程模擬PLC梯形圖運行過程,可彌補動畫、虛擬仿真系統存在的不足,模擬不是要做真實系統要做的全部事情,而是模擬出原系統的一個抽象模型。在模擬真實系統中舍棄一些次要、甚至是干擾的因素,有利于突出教學重點、減少程序設計難度、降低軟件開發成本。梯形圖經過多年發展,積累了豐富的控制方面的例程,突出表現在它的邏輯處理能力上,利用組態軟件模擬PLC梯形圖,可以吸取PLC原有例程中對控制過程直觀形象的邏輯表達式,從而使組態軟件模擬編程邏輯上有章可循,事半功倍。
組態軟件,是一種數據采集與過程控制的專用軟件,也指在自動控制系統監控層一級的軟件平臺和開發環境。組態軟件可以讀寫PLC信號,可以通過圖形和動畫等形象地直觀地再現系統控制過程,也可以對工業現場進行監視和控制。以組態軟件EBpro為例,它是一種類BASIC高級語言。組態軟件基于元件驅動編程,含有包括元件外貌圖片在內的各種豐富屬性和方法,元件實質上是一種類,組態軟件編程一般都具有面向對象的腳本語言的特點。
梯形圖是一種“使用最多的”“圖形式的PLC編程語言”,它沿用了“繼電接觸器控制原理圖”,“同時還吸收了計算機的特點”[2]。PLC編程體系的特點突出體現在基于存儲器,通過編程使存儲器產生控制過程所要求的狀態,通常以邏輯位狀態為主要標志。結構化編程語言C、BASIC等,是面向過程的語言,它以最終獲取運算處理結果為目的;PLC編程語言是面向實時狀態的語言,它以能對控制過程不同階段呈現的某種狀態做出相應的反應為目的。
PLC編程語言梯形圖與組態軟件編程語言分別是一個完整的自動化控制系統的下位機和上位機運行程序,它們是有機聯系、前后銜接的關聯語言。這兩種語言的元素體系大部分是同構的,其元素是可以通過映射直接對應的。如PLC中輸入映像寄存器I、輸出映像寄存器Q、位存儲器M、特殊標志位存儲器SM與組態軟件編程語言中“邏輯變量”是對應的,PLC中變量存儲器V和局部變量存儲器則分別與組態軟件編程語言中“全局變量”和“局部變量”相對應。
基于不同目的的計算機語言當然有各自不同的特點,組態軟件與梯形圖中的元件就有很大不同。PLC中定時器T、計數器C、累加器AC等就是如此,這些功能性存儲器,PLC中也稱指令盒,這部分功能存儲器在PLC中數量眾多。組態編程的語言雖含有其中部分元件,但功能有所差別,元件調用方式迥異,只能通過編寫代碼,構造功能模塊才能實現。
梯形圖在程序運算處理中涉及的邏輯關系表達上形象直觀、條理清楚,在目前各種編程語言中是少見的,特別適用于開關量邏輯控制。組態軟件編程如果能夠借用或映射PLC梯形圖的邏輯表達,可極大減化組態軟件編程中邏輯設計工作,并且使組態模擬程序邏輯條理分明、嚴謹可靠;而組態軟件是一種靈活高效的高級語言,擅長外在形象表達。梯形圖與組態軟件在這種意義上,二者相輔相成,珠聯璧合。
本文舉例,PLC型號為S7-200,組態軟件為Easy Builder pro(EB8000升級版,簡稱EBpro)。EBpro編程語言稱之為“宏指令”,用戶程序以自定義函數的形式表述。它提供周期執行、條件執行和啟動一次性執行三種程序執行方式,其中“周期執行”突出體現了面向實時狀態的編程系統的特點,是控制過程軟件最主要的一種執行方式。
PLC典型指令盒的組態軟件函數編程模擬,其技巧和規范也是模擬其它PLC元件時要遵循的,有一定的以點帶面作用。組態編程模擬函數名使用對應的PLC指令(盒)名稱,模擬函數的參數也與PLC指令盒基本對應。PLC指令盒一般均有邏輯位狀態,所以組態編程自定義模擬函數返回值均為邏輯類型。本文程序清單中為書寫方便,通過R符號,對簡單賦值語句進行了歸并,R表示這條語句在編程器中要先換行。
組態軟件均設有定時器元件,但功能與PLC定時器元件有一定差別,編寫模擬函數時,也要求元件應該語句化。組態軟件模擬PLC運行,當然要采用周期執行方式,但定時器的預設值可能大于執行周期,如果不進行保護,定時器沒有完成計時,又被重新執行初始化,或者定時器程序被掛起,就會消耗大量內存資源。解決方法是,函數設置工作標志ti,為1時表示定時器處于計時狀態中,不能再次進入;0表示空閑,可以進入。PLC有為通電延時型TON、斷電延時型TOF和記憶型通電延時定時器TONR三種類型定時器,具有代表性的是通電延時型TON。
程序清單1 定時器TON模擬函數:

計數器用來累計脈沖輸入端上升沿的個數。這個上升沿是瞬間脈沖由0變1的過程,涉及這種上升沿、下降沿的指令還有EU指令、ED指令等,組態軟件編程時,如何把握這個上升沿或下降沿呢?EBpro掃描周期最小100ms,這也是它檢測脈沖最小分辨度,可以假定在這個周期區間脈沖是不變的(這是EBpro模擬檢測脈沖的前提)。在“Loca HMI”,LBLW……系列地址單元設定一個標志位,自定義函數每次讀寫標志位,如果發現標志改變,由0變1,則意味著接受到了1個上升沿,計數器加1。
周期循環執行下,計數器存儲單元也有保護問題。EBpro宏指令在周期循環執行狀態下,每個周期內宏指令函數都被從頭執行一遍,這使得程序中用戶定義的變量每個周期都要被復位或者清零,如果計數工作不在一個周期完成,計數器變量值就不再準確,事實上也很少有計數器是在1個周期內完成的。解決的方法是,計數器函數中存取“計數”的單元不使用局部變量方式引用,而是使用“Loca HMI”,LBLW……這樣的地址存儲單元。
程序清單2 加計數器CTU模擬函數:

組態軟件編程模擬PLC梯形圖元件或指令是模擬整個梯形圖的基礎。組態軟件模擬編程中主程序仍以函數形式表出,被稱之為主函數。仍然要遵循PLC梯形圖程序周期執行的特點,周期性執行下的函數返回后,函數中的變量每次都要被銷毀,所以如果函數要保持其中某些變量的中間結果或最后結果變量,都要考慮脫離函數保持變量值的問題,方法是在函數前部安排GetData(……)語句,從函數變量作用域外讀取要處理的數據;在函數后部安排SetData(……)語句,在函數變量作用域外存儲處理后的數據。
一般帶有實際背景的PLC梯形圖,控制環節多,邏輯關系復雜,這給模擬大型PLC程序帶來一定難度。但是如果能借用已完成設計要求梯形圖邏輯表達語句,直接映射到組態軟件模擬編程中來,那將是簡單而又高效的。PLC中一條獨立電路稱之為一個網絡,每個網絡一般來看由輸入條件和輸出結果兩部分構成。在輸入部分經常呈現的是若干觸點的“串聯、并聯”或者“串并混聯”等,這些在邏輯上表現為“與、或”或者“與或的某種邏輯運算”等,如圖1中網絡1可對應寫出“I00 and not T38”。
程序清單3閃爍電路梯形圖的模擬程序:
macro_command main() // 主函數。周期執行,時間1s
bool I00,T37,T38,Q00 //I00和Q00: 分別為長開觸點I0.0和線圈Q0.0的狀態變量,T37、T38定時器狀態變量


圖1 閃爍電路PLC梯形圖程序的EBpro模擬編程效果圖

模擬程序界面可以梯形圖為背景,背景元件旁安置相應的組態元件。組態軟件編程靈活性較大,可以根據教者要求在任意位置上設置元件,輸出控制過程中的信息,從而生動地表達梯形圖設計思想和聯動設備的工作流程。與STEP7-Micro/WIN編程軟件中“監視程序”不同的是,首先,該模擬程序每個元件在程序控制下狀態位改變時,模擬元件的動畫圖標會隨之變化,開展情景教學;其次,該模擬程序運行時,可為元件重新設置新的參數值,構造新的實驗場景。如在閃爍電路模擬程序運行,增大或減小定時器T37、T38預設值PT,Q0.0燈泡的閃爍會變慢或變快,以便顯現閃爍電路的工作原理,如圖1。
組態軟件種類眾多,廣泛使用的就達十余種,每種軟件體系各具特殊性,以上程序在實際運行時,要根據具體使用的組態編程語言語法做適當的修改。PLC梯形圖元件眾多,控制程序復雜,但在模擬梯形圖時把握周期執行性以面向實時狀態控制程序的特點,映射梯形圖邏輯表達式到組態編程中以簡化模擬編程設計,這兩個要素是具有普遍性的。組態軟件模擬編程能夠對梯形圖教學提供形象直觀教學手段,在某些過程上也可以實現虛擬仿真效果。如果學生能夠參與組態軟件的設計,無疑將調動學生發揮想向力、激發學生自主學習熱情。在工程實踐中利用組態軟件模擬編程輔助梯形圖設計,對于展示PLC程序產品的設計理念和運行效果也有一定的價值。