秦瓊
(大慶油田自動化儀表有限公司,黑龍江 大慶 163000)
在工業生產運行中,PLC分散控制多應用于大型而復雜的生產控制系統,而多PLC之間程序通信相互協調與同步、數據以及參數之間共享成了工業生產控制中亟待解決的問題。在工業生產中,PLC之間都是通過工業以太網來進行數據傳輸,以S7協議來進行數據間的通信和傳遞,并通過工程師站和中控室的監控軟件來對數據信息進行監控與操作。通過現場傳感器、現場儀表等數據輸入,由中控室操作人員結合數據信息發出指令進行閥門開關和變頻器大小調節。本文主要以西門子PCS7軟件和工業以太網來實現多PLC之間程序通信及相互協調與同步。
在工業生產中通信模式指的是請求方向被請求方發出請求,被請求方對請求方發出的請求進行響應后按照請求方的指令運行,請求方再根據被請求方提供的數據和參數來進行自身參數的控制,在工業運行中,通過程序描述的方式以及步驟按照請求方的請求啟動和停止自身程序,若是有多個程序同時發送請求則需要進行排隊處理,整個操作依次進行,如果請求方的要求被響應,則在請求方的操作界面上彈出對話框,提示操作人員程序已經按時啟動,如果請求方發出的請求沒有被響應(例如由于程序正在運行過程中或是程序基于連鎖的原因無法運行)也會在操作界面上提示用戶正忙的信息,請求方可以選擇等待或是稍后重新發出請求。由于同一時間可能有多個請求發出,控制站會在響應請求后在控制面板上提示哪個程序正在進行。
另外,請求方和被請求方雙方的程序之間不但需要對一些重要的程序運行參數和運行狀態進行相互傳輸,還需要相互間的協調以及同步。例如,某企業清罐車間清罐請求清洗的長程序,通過順序控制程序中的編號來請求啟動CIP工作站中罐體清洗程序,并判斷該清洗程序運行中還是已經結束,然后進行啟動或者停止該程序,其他各工作站也會有類似的請求數據過程。BBT、綜合間等多個工作站都可能會請求CIP清洗程序,雖然請求方和被請求方的程序運行在不同的主機和PLC上,且各程序之間也是相互獨立的,但是,程序運行開始可能會需要某些必要的手動操作,比如,需要對現場的某些手動閥門進行開啟等,并做好相應的準備工作,再由PLC程序進行下步操作。本論文中以企業自動控制系統為例,其控制系統分為發酵、過濾和CIP也就是設備清洗四個主力車間,分別由西門子PCS系列的PLC進行控制,在車間之間通過工業以太網進行數據傳輸,通過S7協議進行數據通信,本文主要以各工作站請求CIP程序為例來介紹西門子PCS7的多PLC之間通信的具體操作過程。
在西門子PCS7的多PLC之間通信程序的實現大都采用標準TCP/IP協議,其在工業生產中廣為應用,具有普遍認可性,與OSI的7層協議相比,其層次相對較少,具有底層網絡較為透明以及對網絡的具體物理實現并不涉及等優點,因而在工業生產中應用較為廣泛。在網絡IP層的協議主要負責傳送和連接互聯網中的數據參數,而數據參數在各IP協議中是相互獨立存在的,其傳輸路徑以及相關的控制信息和參數都在IP報頭中得以表現。IP服務在傳輸控制層TCP中的主要作用就是為虛擬電路和面向數據流提供服務,同時,可以自主對各種網絡BUG進行糾正。
基于工業以太網的S7通信可以使用通信SFB/FB模塊,該模塊與已經組態成功的PCS7相互連接,通過編好的程序進行通信控制。每次作業指令發出后可以傳輸高達64KB的用戶數據信息。而以太網作為“PCS7通信中繼器”,可對PCS7進行傳輸。在工業以太網上,數據傳輸主要是通過ISO傳輸或是ISO-ON-TCP協議兩種方式進行傳輸。但是,以用戶的視角了來分析,標準總線和工業以太網在PSC7通信實現上幾乎完全一致。
在被請求方及CIP控制站PLC程序中首先確定了DB880和DB881兩個數據模塊,CIP運行參數通過BBT進行接收并保存于DB880模塊上,而CIP運行參數則通過綜合間進行接收并保存于DB881模塊上。二者之間的數據結構模式和內部變量定義方式都與DB13模塊相同。
如果在通信方的程序中調取數據庫中的通信模塊GET(從對方讀取數據)以及PUT(向對方傳送數據)都需要代表遠程CPU中的數據塊并定義在本地,并且其遠程數據模塊中與其同名的數據模塊在數據結構和內部變量上必須完全一致。此外,還需要定義相應的本地數據模塊與前面的數據模塊相互對應,也必須保持內部結構以及變量定義完全一樣。通過PUT、GET模塊將本地程序實際讀寫的內容寫入本地映像數據模塊,再將其寫入遠程CPU數據模塊中。在請求方PLC程序中需要定義相應的程序向CIP發出請求,但是,系統只能對其中一個請求進行響應,并只接受來自某個請求方傳送出的數據。因此,每個請求方需要分別定義自身的數據模塊,并且在本地CPU中編寫相應的功能模塊來解決模塊間的沖突。
在請求方的程序中通過使用GET通信模塊和PUT通信模塊來使得本地讀寫遠程模塊與讀寫本地數據一致。GET的主要功能是將遠程CPU數據模塊中指定字節數的相關內容,從某個地址讀寫到本地數據模塊中,而PUT的主要功能則與GET恰恰相反,其將某個地址中的本地數據模塊中指定字節數的內容寫入遠程數據模塊中。在被請求方的程序中,則不需要向請求方調用系統中的通信數據模塊。
本文以某企業清罐車間舉例說明,首先,需要在組織模塊中調用PUT和GET模塊來實現通信數據模塊設計。調用PUT模塊把BBT清洗程序寫入CIP運行參數中(比如,系統是進行何種模式的清洗以及每次清洗時間),在將得到的參數傳輸給CIP工作站中的數據模塊中。如果分別來自BBT和綜合間的數據模塊對罐體清洗程序的請求位同時為1時,則需要對排在梯形圖中最前方的請求進行響應,把對應模塊中的數據寫入相應數據模塊后,BBT中的清洗程序對其進行循環往復讀取其中的變量來進行程序的運行,從而進行整個CIP程序運行狀態的判斷。
FBI一旦對某個請求進行響應后就需要保持其與請求方之間的數據連接,并不斷將請求方傳輸而來的數據傳送到本地數據模塊中來進行CIP程序的運行控制。但是,任意一個請求方可以在所有時間和所有情況下通過讀取CIP中的數據來對目前程序運行狀態和某些重要參數進行判斷,FBI等不能限制這些功能模塊的數據請求。在BBT程序中,清洗長程序啟動時,要啟動CIP罐清洗程序,由操作人員在控制面板上選擇并填寫好清洗參數,通過對CIP罐清洗程序發出請求,這時CIP工作站的CPU上會率先處理排在梯形圖最前面的請求,并進行響應,程序運行結束后BBT通過GET得到當前程序已經結束的信息從而做出響應。
西門子PCS7的多PLC之間程序協調實現的難點主要在于如何使設計同步進行,關鍵通信信號如何定義能使系統協調控制整個程序的運行;系統運行時發生的請求沖突等問題來如何解決,請求方和被請求方通信方式的選擇,以及對整個通信過程中各個模塊的動作和狀態如何進行完善以保證系統正常運行。PLC相較C++語言對每個通信對象沒有較為完善的建模工具和語言,因此,在工業生產中用PLC進行編寫程序,對于較為復雜的工業生產流程還應當采取面向對象的分析方法,通過流程圖、結構圖、交互圖等把參與交互的各個元素作為對象進行分析,將復雜、多對象交互通信問題描述清楚、邏輯自洽,以更好地表現設計人員的設計思路,幫助企業實現自動化發展,節約勞動力成本。
本文主要介紹了西門子PCS7的多PLC之間程序協調運行以及數據通信等功能的實現,并給出了相應的程序實現方式,經過測試在生產運行中穩定性較高,并且較為完善的滿足了工藝需求,取得了良好的生產運行效果,值得在工業生產中廣泛推廣。