這是一個20年前發(fā)生在我身上的故事,這些事情改變了我對我所從事的PLC自動化領(lǐng)域的看法,之后我決定進(jìn)入(當(dāng)時迅速發(fā)展的)IT網(wǎng)絡(luò)領(lǐng)域。
我擁有電子工程學(xué)位,并且已經(jīng)做了十多年的網(wǎng)絡(luò)管理員。我原本打算進(jìn)入自動化行業(yè),但20世紀(jì)90年代末的我所遇到的事情改變了我對這個行業(yè)的看法。這里提供的信息是為了講述當(dāng)時發(fā)生的事件,如果你考慮進(jìn)入PLC編程領(lǐng)域,這篇文章所提供的信息可能會對你有所幫助。但在此之前請考慮到,經(jīng)濟(jì)環(huán)境會隨時間變化,我曾經(jīng)所遇到的問題可能并不適用于現(xiàn)如今你在這個領(lǐng)域的情況。
最初我是在軟件編程行業(yè)開始工作的,作為程序員工作了大約一年半。當(dāng)我完成學(xué)業(yè)時,20世紀(jì)90年代初的經(jīng)濟(jì)衰退終于開始消退,我的大多數(shù)前同學(xué)都已經(jīng)找到了工作,我也一樣。我的第一個雇主提供的條件并不是最好的,但我認(rèn)為在這份工作所獲得的經(jīng)驗對我未來就業(yè)非常有利。所以當(dāng)大多數(shù)前同學(xué)在一年內(nèi)都離開了這個條件不是很好的領(lǐng)域,去尋找更好的機(jī)會時,我卻認(rèn)為我在PLC自動化行業(yè)會更有發(fā)展,因為PLC編程是我在論文中做過的內(nèi)容,而且我認(rèn)為這會更容易一些。但事實證明這是一個錯誤。
我找到了一份新工作,作為PLC程序員。一開始,我接觸了兩個較小的項目,首先是對一個新落地的西門子S7系統(tǒng)進(jìn)行增補(bǔ),然后是一個全新的西門子S5系統(tǒng)。一個月后,我與一位資深自動化工程師一起,在一個大項目中裝配了一個S5程序。這個PLC的說明書是由另一家負(fù)責(zé)實施物理基礎(chǔ)設(shè)施(管道、裝配、容器)的工程公司通過分包提供的。我沒有被告知這個項目或與這家外部工程公司的任何其他項目的合同細(xì)節(jié)。他們每隔三四天就會給我們寄來一大包信封,里面裝滿了紙張,上面寫滿了需要控制的條件和執(zhí)行器的狀態(tài),所有這些都是以有限狀態(tài)機(jī)狀態(tài)的列表形式寫下來的。
PLC程序的結(jié)構(gòu)非常簡單:它包含十幾個需要逐步執(zhí)行的順序程序。這些順序程序中,每次只允許執(zhí)行一個,并且每個步驟都有自己的步驟編號。西門子S5中有一種編程塊,稱為SB(Step Block,或最初稱為Schritt Baustein),但在這個項目中并沒有使用這種編程方式。相反,采用了一種自定義的編程方案,即為每個步驟都指定了一個完整的FB(Function Block)。每個步驟或FB都包含3個網(wǎng)絡(luò):一個網(wǎng)絡(luò)用于根據(jù)下一個步驟的條件將順序程序跳轉(zhuǎn)到下一步,一個網(wǎng)絡(luò)用于通過Set-bit將執(zhí)行器設(shè)置為高電平,還有一個網(wǎng)絡(luò)用于通過Reset-bit將執(zhí)行器復(fù)位。一個小的中央步進(jìn)控制FB用于跳轉(zhuǎn)到正確的步驟,它基本上所做的就是通過“BMW 200, SPA FB 0”指令,使用加載在ACCU1中的步驟編號跳轉(zhuǎn)到正確的步驟FB。當(dāng)通過下一個步驟的條件請求跳轉(zhuǎn)到下一步時,當(dāng)前步驟FB中的執(zhí)行器會使用Reset-bit進(jìn)行復(fù)位,步驟計數(shù)器會增加,然后在同一個PLC掃描周期內(nèi),下一個步驟的FB會被Set-bit調(diào)用,以確保輸出中未更改的值不會切換其執(zhí)行器。一個順序程序可能包含10個步驟(即10個FB)到20個步驟(即20個FB),大約有15個順序程序,每個步驟/FB中大約有70個執(zhí)行器需要設(shè)置或復(fù)位。對這些進(jìn)行簡單計算,結(jié)果顯示大約有15×15×70
=約16000個執(zhí)行器需要編程到約220個FB中。所有步驟切換的條件以及設(shè)置 與/或 復(fù)位執(zhí)行器的條件都提供在成捆的紙張上,這些紙張用訂書釘裝訂在一起,我必須將這些執(zhí)行器的所有條件列表復(fù)制到FB中。
在編程了2個月后,我們發(fā)現(xiàn)提供的說明書中存在大量冗余,這些冗余是我們無法預(yù)見的,因為每3到4天才交付一個順序程序,而且我們花了大約1.5個月的時間才推斷出這些冗余在整個PLC程序中都存在,因此重寫將使之前的工作全部無效。我們在所有步驟中都有那些沒有更新但被重復(fù)的執(zhí)行器。除此之外,實際上我們還發(fā)現(xiàn),一個順序程序中的單個步驟與另一個順序程序中的其他步驟非常相似。這些程序只是彼此的變體。所有這些步驟幾乎都是相同的,如果我們事先知道這一點,整個PLC程序可以實施得更小。雖然在過程中我們實施了一些捷徑,但更多是事后才想到的。
我必須使用實際的S5 AWL代碼進(jìn)行所有編程。外部項目工程公司已經(jīng)完成了所有步驟的布局以及輸入、輸出和條件的分配決策。我不需要做任何輸入,只是枯燥地復(fù)制了+1000頁文本上提供的無數(shù)條件和執(zhí)行器的列表。這項極其無聊的工作花了3.5到4個月的時間才完成,其中包括了SCADA屏幕的開發(fā)。
現(xiàn)在,你們中的一些人可能會想,“誰還會用這種方式工作?為什么外部項目工程公司不雇用自己的PLC工程師?”這個問題我也曾有過:我唯一能給出的合理解釋是,外部項目工程公司沒有資源提供公司所需的全天候24×7支持,因此將支持外包給了我們,而且我們必須以一種非常工具化的方式來實現(xiàn)這些程序,以便能夠在不考慮實際程序具體細(xì)節(jié)的情況下進(jìn)行故障排除。這并不是他們告訴我的原因,他們告訴我他們這樣工作的原因是,當(dāng)公司發(fā)出需要工程師的支持請求時,支持工程師不需要花時間去理解PLC程序。而在我申請這份工作時,并沒有人提前告訴我這種工作方式。
當(dāng)所有編程代碼的輸入完成后,部門負(fù)責(zé)人和高級PLC工程師將在工廠現(xiàn)場部署PLC程序。我被指定為一個規(guī)模較小但類似的安裝項目部署一個類似的程序,不僅要輸入一個類似但更短的有限狀態(tài)機(jī)狀態(tài)列表,這次只涉及大約70個步驟和較少量的執(zhí)行器。我被要求以類似的方式實施,使用與之前項目中相同的FB。由于程序規(guī)模較小,我在幾周內(nèi)就完成了提供的表格的輸入,并開始與外部項目工程公司的一名(女性)工程師在現(xiàn)場實施。
在現(xiàn)場,首先出現(xiàn)了一個小問題,即控制面板使用的通信FB與中央步進(jìn)控制FB內(nèi)部使用的MB發(fā)生了重疊:當(dāng)控制面板啟用時,程序沒有按預(yù)期工作。這個問題很簡單就解決了,只需將步進(jìn)控制FB的MB移動到另一個區(qū)域即可。從MB 250-253區(qū)域移動到MB 240-243區(qū)域或類似區(qū)域,功能仍然相同,但我必須更新每個步驟FB中對應(yīng)的條件跳轉(zhuǎn),這花費了一些時間。
然后出現(xiàn)了一個更嚴(yán)重的問題。中央步驟控制FB出現(xiàn)了問題:當(dāng)前一個程序完成后啟動一個新的順序程序時,PLC跳到了前一個程序的最后一步,而不是新啟動程序的第一步。這個標(biāo)準(zhǔn)的中央步驟控制FB不是應(yīng)該沒有錯誤嗎?這讓人很困惑。我生成了整個PLC程序的交叉引用,開始驗證中央步驟控制FB的各個標(biāo)記,以確保沒有沖突。我調(diào)試了代碼,步驟控制FB的AWL代碼非常不直觀,因為它結(jié)合了字操作、字移位操作、使用掩碼操作的布爾字以及單個位操作,使其非常緊湊。作為最終測試,我禁用了除了這個FB之外的所有程序,結(jié)果證明問題確實是由步驟控制FB本身引起的,而不是由我的某些代碼引起的。然后我打電話給在魯汶的現(xiàn)場高級工程師解釋了這個問題。他聽到這個問題后非常驚訝,并回復(fù)說這個中央控制被廣泛使用,從未遇到過任何問題……
在調(diào)試該模塊時,我發(fā)現(xiàn)中央步進(jìn)FW的標(biāo)記在程序最后一步結(jié)束后沒有被重置,導(dǎo)致下一個程序從最后一步開始。為什么呢?我將我的項目與我之前用作參考的項目進(jìn)行了比較,沒有發(fā)現(xiàn)任何錯誤,一切都相同。為了繼續(xù)測試實現(xiàn),我不得不在每個順序程序的中央步進(jìn)控制FB之后采用條件重置。這將允許進(jìn)行測試,并且在外部項目公司的項目經(jīng)理忙于自己事務(wù)的空檔期,我可以對中央步驟控制FB的代碼進(jìn)行故障排除。
《為什么我離開了PLC編程行業(yè)(上)》到此結(jié)束,歡迎大家繼續(xù)關(guān)注《為什么我離開了PLC編程行業(yè)(下)》
作者:Jurgen Kobierczynski