本文接《為什么我離開了PLC編程行業(yè)(上)》內(nèi)容。
在截止日期前一周,當(dāng)大部分故障排除工作完成時(shí),外部工程公司的項(xiàng)目經(jīng)理提出要求,在PLC程序中實(shí)現(xiàn)手動(dòng)模式:必須能夠在顯示屏上輸入代碼,選擇電機(jī)、泵、閥門,將這些設(shè)置為手動(dòng)模式,并切換這些執(zhí)行器的輸出。這是一個(gè)巨大的變化,為了實(shí)現(xiàn)這一點(diǎn),我必須將所有輸出執(zhí)行器移出單個(gè)步驟,并在將位輸出到實(shí)際執(zhí)行器之前,將其與條件自動(dòng)/手動(dòng)模式位相結(jié)合。更改這將非常耗時(shí)。我當(dāng)然提出了反對(duì)意見(jiàn),但項(xiàng)目經(jīng)理堅(jiān)持要求必須加入這個(gè)手動(dòng)模式。我正考慮給高級(jí)工程師打電話。
為什么我沒(méi)打呢?我在想……這種整個(gè)編程方法根本毫無(wú)意義。中央步進(jìn)控制FB寫得非常緊湊,雖然你可能會(huì)在PLC中使用極端智能的編碼來(lái)節(jié)省空間,并允許使用更小的PLC型號(hào),但節(jié)省空間就會(huì)寫出無(wú)法閱讀的代碼,然后又浪費(fèi)更多空間去寫冗余代碼,這是沒(méi)有意義的。我不得不花費(fèi)數(shù)月時(shí)間輸入所有這些條件和執(zhí)行器的列表,這既令人沮喪又耗時(shí),而且最終證明在需要更改時(shí)非常不靈活,就在我要做的第一個(gè)項(xiàng)目中就遇到了這個(gè)問(wèn)題。中央步進(jìn)控制FB沒(méi)有按預(yù)期工作,這非常奇怪,因?yàn)槿绻教幎荚谑褂?,那么它?yīng)該能夠正常工作。在截止日期前一周才提出手動(dòng)模式的要求,這完全出乎意料。如果這種編程方式到處都在使用,項(xiàng)目經(jīng)理怎么可能不知道這個(gè)請(qǐng)求將意味著需要更改編程呢?現(xiàn)在我知道,我應(yīng)該要求把這些要求的更改寫在紙上,這樣就不會(huì)有任何爭(zhēng)議了,但請(qǐng)記住,我剛從大學(xué)畢業(yè),我不知道該如何處理這種情況。但回到問(wèn)題上:為什么我沒(méi)有給高級(jí)項(xiàng)目經(jīng)理打電話?再想一想……這五個(gè)月來(lái),我一直在輸入這些無(wú)聊的條件和執(zhí)行器的列表……我真的想把這個(gè)作為職業(yè)嗎?
我記得我在大學(xué)期間參加的PLC課程。我們有做過(guò)這些PLC編程練習(xí)。因?yàn)槲以诟咧袝r(shí)就已經(jīng)做過(guò)一些PLC編程,所以我知道有一種簡(jiǎn)單的方法可以避免復(fù)雜的梯形圖邏輯編程:只需使用標(biāo)記定義狀態(tài),當(dāng)滿足下一個(gè)步驟的條件時(shí)設(shè)置下一個(gè)標(biāo)記,并使用反轉(zhuǎn)標(biāo)記來(lái)重置前一個(gè)步驟的標(biāo)記,很容易做到。我們的小組是所有小組中最快完成這些練習(xí)的。當(dāng)老師發(fā)現(xiàn)我使用這種方法時(shí),她給我布置了特別的作業(yè),要求我不能使用這種狀態(tài)編程方法,以讓我改掉這種編程習(xí)慣!現(xiàn)在,兩年后,我在這里,面對(duì)著這一大堆復(fù)制的代碼,根本沒(méi)有更改的余地,因?yàn)槿绻倚枰谝粋€(gè)步驟FB中更改某些內(nèi)容,為了保持一致性,我必須在所有步驟FB中都進(jìn)行更改……這不是很諷刺嗎?這顯示了基于狀態(tài)的編程實(shí)際上是多么低效和不靈活。我必須做出決定。
我評(píng)估了更改以允許集成手動(dòng)模式而無(wú)需重寫所有內(nèi)容的可能性。有一個(gè)解決方案:你可以在當(dāng)前掃描周期中再次重寫輸出,因?yàn)榫彌_輸出只有在掃描周期結(jié)束時(shí)才會(huì)寫入到實(shí)際輸出中。這是一個(gè)糟糕的設(shè)計(jì),因?yàn)楝F(xiàn)在你必須跟蹤PLC程序中哪個(gè)輸出是實(shí)際寫入的。這可以避免重寫所有的步驟FB,但有一個(gè)問(wèn)題:我必須避免程序在手動(dòng)模式下跳轉(zhuǎn)到下一步。不運(yùn)行中央步驟控制FB是不行的,因?yàn)橛行┹敵鲆蕾囉诓襟EFB內(nèi)的輸入:這是一個(gè)Mealy型狀態(tài)機(jī),而不是Moore型。還剩下兩個(gè)選項(xiàng):在每個(gè)步驟FB的下一步中添加手動(dòng)條件,但這樣做我必須更改每個(gè)步驟FB。因此,重寫中央步進(jìn)控制FB的代碼以避免在手動(dòng)模式下步進(jìn)是剩下的最后一個(gè)選項(xiàng)。這花了一天時(shí)間,實(shí)施后我沒(méi)有遇到任何問(wèn)題。
然后是對(duì)最新代碼的測(cè)試,因?yàn)槲冶仨毺砑舆@個(gè)手動(dòng)模式代碼,而且我們只剩下一周時(shí)間了,我們必須熬夜進(jìn)行測(cè)試和故障排除,直到每天凌晨三四點(diǎn)。這包括在比利時(shí)奧瓦爾附近阿爾登地區(qū)冬季可能最冷的酒店房間里夜間編寫代碼。請(qǐng)注意,如果外部工程公司的項(xiàng)目經(jīng)理沒(méi)有要求手動(dòng)模式,這個(gè)項(xiàng)目上周就已經(jīng)完成了。周日下午,也就是截止日期的前一天,它準(zhǔn)備好了,在短短5周多一點(diǎn)的時(shí)間里,它已經(jīng)完全編程、實(shí)施并測(cè)試完畢。
周一早上,我所在公司的部門主管給我打電話,詢問(wèn)項(xiàng)目的進(jìn)展情況。我回答說(shuō)我們遇到了很多問(wèn)題,但項(xiàng)目已經(jīng)完全實(shí)施并投入使用了。他要求我明天到現(xiàn)場(chǎng)去。第二天他并沒(méi)來(lái)現(xiàn)場(chǎng),這讓我感到奇怪。那天我還與外部公司的項(xiàng)目經(jīng)理通了電話,那次通話中并沒(méi)有提到什么緊急的情況。
那天晚上,我被叫到了人力資源部。人力資源部的人說(shuō)他們聽(tīng)到了關(guān)于我的一些不好的事情,說(shuō)我很固執(zhí)己見(jiàn)。之后我一直在問(wèn)自己這些問(wèn)題:難道我沒(méi)有向外部公司的項(xiàng)目經(jīng)理抱怨過(guò)他們沒(méi)有提前要求手動(dòng)模式,導(dǎo)致我不得不重寫步驟控制功能塊(FB)嗎?難道我沒(méi)有向她解釋過(guò)我必須更改步驟控制FB才能讓手動(dòng)模式正常工作嗎?為什么部門主管沒(méi)有問(wèn)我對(duì)發(fā)生的事情的看法?為什么截止日期剛好設(shè)定在我6個(gè)月試用期結(jié)束的前一天?為什么部門主管一開始就沒(méi)有為這個(gè)項(xiàng)目指派項(xiàng)目經(jīng)理呢?
一些觀察:我很確定部門主管沒(méi)有看過(guò)我的代碼,因?yàn)椋何沂窃诰薮蟮臅r(shí)間壓力下決定重寫這個(gè)步進(jìn)控制FB的,而且這些更改可以很快恢復(fù)。我說(shuō)的只是一頁(yè)AWL代碼!我沒(méi)有告訴他,所有的更改都只在我的筆記本電腦上,直到他不在辦公室的最后一天。此外,我還記得有一次部門主管非常粗略地審查了我的代碼,只花了最多10秒鐘,還有另一次他處理了一個(gè)5周的工作,他說(shuō)他可以在一個(gè)周末完成。這絕對(duì)是我職業(yè)生涯中遇到過(guò)的最糟糕的雇主。他沒(méi)有提供任何指導(dǎo),只是利用我來(lái)輸入成千上萬(wàn)行枯燥的代碼。
這些事件讓我重新考慮了我的職業(yè)生涯。很可能我只是被雇來(lái)做那些枯燥的錄入工作,以減輕他們的工作負(fù)擔(dān)。顯然,這種編程方式的真正意圖是為了讓某人能夠輕易地被替換,這在PLC編程中是非常容易的。自動(dòng)化領(lǐng)域是一個(gè)非常保守的領(lǐng)域:公司對(duì)PLC技術(shù)的主要擔(dān)憂是其可靠性和可用性。公司寧愿堅(jiān)持使用已經(jīng)證明可靠且不僅替換零件容易獲得,而且程序員數(shù)量也眾多的昂貴PLC技術(shù)(提示:西門子)。很多PLC程序員只是技術(shù)人員,只是用于現(xiàn)有基礎(chǔ)設(shè)施的維護(hù)。這意味著我必須與很多愿意接受更低工資的人競(jìng)爭(zhēng)。這顯然不是一個(gè)最好的工作環(huán)境,所以我決定換一個(gè)領(lǐng)域。
我決定換到網(wǎng)絡(luò)領(lǐng)域?;ヂ?lián)網(wǎng)剛剛開始興起并變得流行起來(lái),這是一個(gè)充滿新技術(shù)且正在成為主流的令人興奮的新領(lǐng)域:TCP/IP、思科、網(wǎng)絡(luò)瀏覽器、防火墻、Linux、Windows NT、代理服務(wù)器、Exchange、電子郵件。
我申請(qǐng)了一家翻譯公司的初級(jí)職位,負(fù)責(zé)管理公司的網(wǎng)絡(luò)和服務(wù)器。兩周內(nèi)我就找到了新工作,而且薪水更高。我記得我去應(yīng)聘的那天,當(dāng)我走進(jìn)大樓的門廳時(shí):我看到大樓是這家公司與另一家公司共享的。左邊是翻譯公司的標(biāo)志,但右邊竟然是我過(guò)去五個(gè)月一直在為其工作的那家外部工程公司的標(biāo)志!……
說(shuō)真的……(想想看,我們國(guó)家有十幾萬(wàn)家公司!)
所以你可以想象,一年后,我遇到了去年一起工作的項(xiàng)目經(jīng)理。我問(wèn)她項(xiàng)目后來(lái)怎么樣了,我寫的代碼是不是都被扔掉了?她說(shuō):“沒(méi)有沒(méi)有,你的代碼里有很多非常棒的想法!”
如今,當(dāng)我再次審視自動(dòng)化行業(yè)時(shí),我看到了這些工業(yè)PC,它們?cè)赪indows機(jī)器上運(yùn)行著實(shí)時(shí)內(nèi)核,速度比PLC快得多。但當(dāng)我檢查編程環(huán)境時(shí),發(fā)現(xiàn)同樣的編程技術(shù)仍然適用。雖然實(shí)施了一些改進(jìn)(比如IEC 61131-3、面向?qū)ο缶幊痰取?,但當(dāng)我嘗試屏幕編程時(shí),我想起了在SCADA工作時(shí)那種同樣的恐懼:處理GUI元素是多么的不靈活。
如今,當(dāng)我審視專業(yè)的IT世界時(shí),我看到了所有這些技術(shù)正在以非常結(jié)構(gòu)化的方式改變著這個(gè)領(lǐng)域:大規(guī)模葉脊數(shù)據(jù)中心、虛擬化、融合、去重、Docker、軟件定義網(wǎng)絡(luò)、微分段、軟件應(yīng)用、Puppet、云網(wǎng)絡(luò)等等,不一而足。在編程方面,Python正在向前發(fā)展,并推動(dòng)著像lambda、列表推導(dǎo)式、生成器、裝飾器等函數(shù)式編程概念。新的數(shù)據(jù)庫(kù)概念如NoSQL已經(jīng)出現(xiàn)。非??焖俚拈_發(fā)和交付流程被廣泛應(yīng)用。下一代網(wǎng)絡(luò)技術(shù)物聯(lián)網(wǎng)(IoT)將更進(jìn)一步改變格局:現(xiàn)在你將得到所有這些內(nèi)置無(wú)線網(wǎng)絡(luò)的設(shè)備。然后還有數(shù)據(jù)科學(xué)和機(jī)器學(xué)習(xí)……
與IT行業(yè)相比,PLC行業(yè)缺乏新的PLC編程概念,而這些概念本可以極大地改變這個(gè)行業(yè)。原因顯而易見(jiàn),維護(hù)和保養(yǎng)現(xiàn)有設(shè)備的優(yōu)先級(jí)高于嘗試一些新的技術(shù),并且需要冒著這種技術(shù)失敗時(shí)沒(méi)有支持的風(fēng)險(xiǎn)。它仍然是一個(gè)非常代代相傳的行業(yè)。所以,如果問(wèn)我我還愿意回到自動(dòng)化行業(yè)嗎?不,我不打算再回到PLC編程了,但對(duì)于那些愿意進(jìn)入這個(gè)行業(yè)的人,請(qǐng)三思:“軟件正在吞噬世界”。這種情況會(huì)持續(xù)多久,我不知道。
后續(xù)
自從我寫下這篇文章后,我一直在問(wèn)自己,我究竟在什么時(shí)候能夠意識(shí)到這種微觀管理其實(shí)是為了控制,而不是為了支持管理。第一件奇怪的事情是,項(xiàng)目工程師在逆向工程狀態(tài)圖,因?yàn)樗究梢韵蛲獠抗こ坦舅饕@些圖,但這僅僅表明了一次遷移。我收到的第一個(gè)實(shí)際暗示是在我前往設(shè)施之前與經(jīng)理的最后一次通話中。在解釋完我要做的事情后,他突然跳到另一個(gè)話題上。他說(shuō)在這個(gè)項(xiàng)目之后,他會(huì)繼續(xù)和我一起工作,將他基于狀態(tài)的S5編程方案遷移到新的S7編程語(yǔ)言。當(dāng)他在解釋這件事的時(shí)候,我問(wèn)自己:“為什么你現(xiàn)在要談這個(gè)?”S7語(yǔ)言大多是向后兼容的,所以他可以在10分鐘內(nèi)遷移他那只有20行的步驟控制塊。不幸的是,我在測(cè)試期間忘記了這次簡(jiǎn)短的對(duì)話?;叵肫饋?lái),現(xiàn)在很清楚這次遷移工作是多么微不足道,這也直接表明他只是想讓我相信他在項(xiàng)目結(jié)束后還想繼續(xù)雇用我。這件事發(fā)生在我職業(yè)生涯的早期,當(dāng)時(shí)我以為發(fā)生在我身上的事情都是正常的?,F(xiàn)在,隨著我的工作經(jīng)驗(yàn)越來(lái)越豐富,我可以說(shuō)我的第一直覺(jué)大多是正確的,而自我懷疑往往是我背叛自己的原因,換句話說(shuō):當(dāng)事情不合邏輯時(shí),背后一定是有原因的。
現(xiàn)在,這些事情給我上了一堂人生課??纯催@些事情:經(jīng)理真的從這種策略中受益了嗎?實(shí)際上沒(méi)有:他不僅解雇了正在從事他項(xiàng)目的工程師,而且最可能的結(jié)果是項(xiàng)目經(jīng)理接替了這個(gè)角色,不得不“糾正”一切。我知道這件事的結(jié)果,他在我被解雇后的第二個(gè)月就決定離開公司了。所以項(xiàng)目經(jīng)理只是看了看我的工作就決定離開了。巧合嗎?我認(rèn)為不是。對(duì)我來(lái)說(shuō),這開啟了我職業(yè)生涯中的一條新道路,我再也不會(huì)僅僅根據(jù)事情呈現(xiàn)給我的樣子來(lái)假設(shè)它們了。
作者:Jurgen Kobierczynski