這是一個關於20年前事件的故事,它改變了我對進入PLC自動化領域的看法,之後我決定進入(之後迅速發展的)IT網絡領域。
我有一個電氣工程學位,十多年來我一直是網絡管理員。我原本打算進入自動化行業,但90年代後期的經歷改變了我對這個行業的看法。這篇文章是為了記錄發生的一些事情,如果您考慮進入PLC編程行業,可能會對您有所幫助。考慮到這些年世界發生的翻天覆地的變化,我所遇到的問題在這個領域可能不適用於你。
我從軟體編程行業開始作為C + SCADA程式設計師工作了大約1.5年。當我完成學業後,1990年代早期的經濟衰退終於開始消失,我的大多數同學已經找到了工作,我也是如此。我的第一個僱主提供的條件不是最好的,但我所獲得的經驗現在看來對未來的就業非常有利。我認為我在PLC自動化行業會更好,因為我的畢業設計就是PLC編程,我認為這會更容易。事實證明這是一個錯誤。
我找到了一份新的PLC程式設計師工作。首先向我展示了兩個較小的項目,首先添加了新實施的現有西門子S7安裝,然後是全新的西門子S5安裝。一個月後,我加入了一名高級自動化工程師團隊,不得不在一個大項目中實施S5計劃。PLC的規格由另一個項目工程公司提供,該公司通過分包實施物理基礎設施(管道,配件,船舶)。我沒有被告知與該外部工程公司的任何其他項目的項目合同的具體細節。他們每隔3,4天在大信封上發送PLC程序的規格,其中包含大量條件和必須轉向的執行器的紙張。
PLC程序的結構非常簡單:PLC程序包含十幾個必須以逐步方式執行的順序程序。只允許一次執行這些順序程序中的一個,並且這些順序程序中的每個步驟都有自己的步驟編號。西門子S5中有編程塊,稱為SB(* Step Block,或者最初稱為Schritt Baustein),但這種編程方式沒有使用。而是使用自定義編程方案,其中使用為每個步驟指定的整個FB(*功能塊)。
每個步驟或FB,包含3個網絡:一個網絡用於下一步,有條件地將順序程序跳轉到下一步,一個網絡,其中一個Set-bit負責將執行器設置為高,一個網絡,其中一個Reset-bit負責重置執行器。一個小的中央步進控制FB用於跳轉到正確的步驟,基本上所做的是用間接的「B MW 200,SPA FB 0」指令跳轉,使用在ACCU1中加載的步驟編號到正確的步驟FB。當通過下一步條件請求跳轉到下一步時,使用復位位復位當前步驟FB中的執行器,增加步進計數器,然後在同一PLC掃描周期中,調用下一步FB設置位使輸出中未更改的值不會切換其執行器。
順序程序可以存在於10個步驟之間= 10個FB到20個步驟= 20個FB,大約有15個順序程序,並且在每個步驟/ FB中有大約70個致動器被設置或重置。對這些顯示的快速計算顯示,在大約220個FB中,有15x15x70 =大約16000個執行器被編程。步驟更換的所有條件的完整列表以及用於設置和/或重置執行器的條件在紙張上提供的一組列表中提供,與訂書機一起編織,並且我必須複製這些的所有列表執行器進入FB的。
經過2個月的編程後,我們發現規格中存在大量冗餘,我們無法預見的冗餘,因為每3到4天只發送一個順序程序,並且我們需要大約一個半月來推斷整個PLC程序是否都存在冗餘,因此重寫會使以前的所有工作都無效。我們擁有所有未經更新的執行器,這些執行器都是在所有步驟中複製的。在此之上,我們實際上發現一個順序程序上的各個步驟與另一個順序程序中的其他步驟非常相似。這些節目只是彼此的變化。所有這些步驟都是虛擬相同的,如果我們事先知道這一點,整個PLC程序可以實現更小。
我必須在實際的S5 AWL代碼中輸入所有編程。外部項目工程公司已經完成了所有關於制定步驟和分配投入,產出和條件的決定。我沒有輸入:只需繁瑣複製無數條件的列表和+1000頁文本提供的執行器。這項非常無聊的工作需要3個半到4個月才能完成,包括SCADA屏幕開發。
現在,正如你們中的一些人可能會想的那樣,「誰以這種方式工作?為什麼不聘請外部項目工程形式僱用他們自己的PLC工程師?「這個問題也發生在我身上:我能給出的唯一理由是外部項目工程公司沒有資源提供公司所需的全面24×7支持,並且同時給我們提供外包支持,我們必須以一種非常有用的方式進行故障排除的方式實施這些程序,而不考慮實際程序的細節。有人告訴我他們這樣工作的原因是當公司發工程師的支持電話時,支持工程師不必花時間了解PLC程序。當我申請工作時,所有這種工作方式都沒有提前通知我。
當完成所有這些編程代碼的輸入後,部門負責人和高級PLC工程師將在工廠現場實施PLC程序。我被指定為較小的類似裝置實施類似的程序,不僅進入類似但更短的有限狀態機狀態Iisting,這次只有大約70步並且涉及的執行器數量較少。我被要求以類似的方式實現它,使用與上一個工作中完成的項目相同的FB。由於程序規模較小,我可以在幾周內輸入提供的表格,並開始與外部項目工程公司的(女性)工程師在現場實施。
在現場,首先出現了一個小問題,其中MB與用於控制面板的通信FB以及在中央步進控制FB內部使用的MB重疊:當控制面板啟用時,步驟沒有按預期工作。這很容易解決,只需將步進控制FB的MB移動到另一個區域即可。從MB 250-253到MB 240-243區域或類似,仍然功能相同,但我不得不在每一步FB中更新相應的條件跳轉,花了一些時間。
然後出現了一個更嚴重的問題。中央步進控制FB顯示出一個問題:當前一個程序完成後啟動一個新的順序程序時,PLC跳轉到上一個程序的最後一步,而不是新啟動的程序的第一步。這個標準的中央步控制FB不應該沒有錯誤嗎?這令人費解。生成了整個PLC程序的交叉引用,我開始驗證中央步進控制FB的各個方法,以驗證沒有衝突。調試代碼時,步進控制FB AWL代碼顯示為非直觀,因為它結合了字操作,字移位操作,使用掩碼操作的字加詞和單獨的位操作,使其非常緊湊。作為一個終極測試我禁用了除FB之外的所有其他程序,並且它證明問題是由於步進控制FB本身而不是由我的一些代碼引起的。然後我打電話給魯汶的現場高級工程師解釋這個問題。他聽到這個問題後非常驚訝,並回答說這個中央控制裝置到處使用,從來沒有任何問題。
在調試塊期間,我發現在結束程序的最後一步之後,中央步驟FW的緩存沒有被重置,導致下一個程序在最後一步中啟動。為什麼?我將我的實現與我之前用作參考的項目進行了比較,沒有出現任何錯誤,一切都是相同的。為了繼續測試實現,我必須在每個順序程序的中央步控制FB之後採用條件復位。這將允許測試,並且在外部項目公司的項目經理開展自己的業務的空白期間允許我對中央步驟控制FB的代碼進行故障排除。
在大多數故障排除完成的最後期限前一周,外部工程公司的項目經理要求在PLC程序中實施手動模式:必須可以在顯示器上輸入代碼,選擇電機,泵,閥門顯示屏,在手動模式下設置這些並在這些執行器上切換輸出。這是一個很大的改變,為了實現這一點,我必須將所有輸出執行器移動到各個步驟之外,並在將比特輸出到實際執行器之前將其與條件自動/手動模式位組合。改變這將是非常耗時的。當然我反對,但項目經理堅持要求輸入這種手動模式。我打算再打電話給高級工程師。
為什麼我沒有?我在想...這整個編程方法沒有任何意義。中央步進控制FB是超級緊湊的寫入,雖然您可能在PLC中使用極端智能編碼來節省空間並允許使用較小型號的PLC,但它沒有發送以節省具有不可讀代碼的空間然後浪費冗餘代碼的空間更多。我不得不輸入所有這些條件和執行器的列表,這些令人沮喪,耗費時間,並且畢竟證明對於更改是不靈活的,就在我必須做的第一個項目中。中央步進控制FB沒有按預期工作,這非常奇怪,因為如果它在任何地方使用它應該有效。在截止日期前一周的手動模式請求完全沒有了。項目經理怎麼可能沒有' 知道如果這種編程方式到處使用,這個請求會意味著改變編程嗎?
今天我知道我必須要求在紙上寫下這些要求的更改,所以根本沒有爭議,但記得我剛從大學畢業,我不知道如何處理這個問題。但回到這個問題:為什麼我沒有打電話給高級項目經理?再想一想......所有這五個月的無聊條件和執行器列表......我想這樣做是為了這個職業嗎?我打電話給高級項目經理?再想一想......所有這五個月的無聊條件和執行器列表......我想這樣做是為了這個職業嗎?我打電話給高級項目經理?再想一想......所有這五個月的無聊條件和執行器列表......我想這樣做是為了這個職業嗎?
我記得我在大學期間學過的PLC課程。我們進行了所有這些PLC編程練習。因為我已經在高中做了一些PLC編程,所以我知道有一種簡單的方法可以避免困難的梯形邏輯編程:只需使用merkers定義狀態,在滿足下一步的條件時設置下一個merker,並重置之前的步驟merker使用倒立的merker,輕鬆完成。我們小組實施所有這些行動的速度最快。當老師發現我正在使用這種方法時,她為我編寫了一個特殊的任務,我無法使用這種狀態編程方法,讓我擺脫這種編程習慣!現在,2年後,我在這裡現場有大量複製的代碼堆棧,沒有任何空間可以改變,因為如果我必須在一步FB中改變一些東西,我必須在所有步驟FB中更改它以保持一致性......具有諷刺意味的不是嗎?這顯示了基於狀態的低效且不靈活的編程究竟是多麼的巨大。我不得不做出決定。
我評估了改變它的可能性,以便在不重寫所有內容的情況下集成手動模式。有一個解決方案:您可以再次在當前掃描周期中重寫輸出,因為緩衝輸出僅在掃描周期結束後寫入實際輸出。這是糟糕的設計,因為現在你必須跟蹤PLC程序中的哪個輸出是實際寫入的。這可以防止重寫所有步驟FB,但有一個問題:我必須避免程序在手動模式下運行時跳轉到下一步。不運行中央步進控制FB是沒有選擇的,因為輸出依賴於步驟FB內的輸入:這是一個Mealy型狀態機,而不是摩爾。剩下另外兩個選項:在每個步驟FB的下一步添加手動條件,但為了做到這一點,我不得不改變每一步FB。因此,為了避免在手動模式期間踩踏,仍然重寫中央步進控制FB的代碼是剩下的最後一個選項。這花了一天時間,實施後我沒有任何問題。
然後測試了最新的代碼,因為我必須添加這個手動模式代碼,而我們只剩下一個星期,我們不得不經歷測試和故障排除會議,直到每晚4點鐘。晚上可能會在比利時Orval附近的Ardennes最冷的酒店房間裡進行代碼編寫會議。請注意,如果外部工程公司的項目經理沒有請求手動模式,那麼該項目將在上周完成。周日下午,即截止日期前一天,它已經準備就緒,在5個星期內完成了編程,實施和測試。
星期一早上,我工作的公司的部門負責人打電話給我,詢問我項目的狀態。我回答說我們遇到了很多問題,但項目已經全面實施並且正在運行。他要我明天到現場。第二天他不在現場,這讓我很沮喪。在那一天,我又與外部公司的項目經理打了一個電話,在電話會議期間沒有說出任何警告。
那天晚上,人力資源部門要求我。人力資源部門已經說他們已經聽到了關於我的壞話,並說我很自以為是。之後我問自己這些問題:D 不是我向外部公司的項目經理抱怨未提前要求手動模式,因此我不得不重寫步進控制FB?我沒有向她解釋我必須更改步進控制FB以允許手動模式運行嗎?W hy沒有部門負責人問我對發生的事情的看法?W hy是我的6個月試驗期結束前一天的截止日期?W hy首先沒有部門主管為這個項目分配項目經理嗎?
一些觀察結果:我很確定部門主管沒有閱讀我的代碼,因為:我已經決定在高時間壓力下重寫這一步控制FB,並且可以在心跳中改變這些變化。我真的在談論1頁的AWL代碼!我沒有通知他,所有的更改都在我的筆記本電腦上,直到他不在辦公室的最後一天。除此之外我還記得一個例子,部門負責人非常淺薄地審查了我的代碼,他花了最多10秒鐘,另一個例子是他處理了這個為期5周的工作,他告訴他可以在周末這樣做。這是我職業生涯中最糟糕的僱主。他沒有提供任何導師,只是讓我輸入數千行無聊的代碼。
這件事使我重新考慮我的職業生涯。最有可能的是,我只是被僱用來做無聊的錄入工作來卸載工作。很明顯,這種編程方式的真正目的是讓一個角錢的人更換很容易,這在PLC編程中非常容易。自動化領域是一個非常保守的領域:公司對PLC技術的主要關注點是其可靠性和可用性。公司寧願堅持昂貴的PLC技術(提示:西門子),這種技術已經證明是可靠的,不僅可以用於替換零件,還可以用於許多程式設計師。許多PLC程式設計師只是技術人員,只是維護現有基礎設施所需要的。這意味著我必須與很多願意以較低工資工作的人競爭。
我決定改為改變網絡領域。網際網路剛剛起步並開始流行,這是一個激動人心的新領域,新技術正在成為主流:TCP / IP,思科,Web瀏覽器,防火牆,Linux,Windows NT,代理伺服器,Exchange,電子郵件。
我在一家翻譯公司申請了一份初級工作,我在那裡管理它的網絡和伺服器從上到下。在2周內,我找到了一份新工作並且工資更高。在我請求工作的那一天,我還記得我進入大樓入口大廳的那一刻:我看到公司與另一家公司分享了這棟樓。左邊是翻譯公司名稱的標識,但是右邊......
我不騙你...(想想看,我們國家有超過10萬家公司!)
......右邊是我過去5個月工作的外部工程公司的標識!
所以想像一年後,我遇到了去年與我合作的項目經理。我問她這個項目發生了什麼,我的所有代碼都被廢棄了嗎?她說:「不,不,代碼中真的有很棒的想法!」
幾年後,當我重新審視自動化行業時,我發現有些工業PC在Windows機器上運行實時內核,比PLC快得多。但是當我檢查編程環境時,相同的編程技術仍然適用。實現了一些改進(如IEC 61131-3,面向對象編程等等)但是當我嘗試屏幕編程時,我記得當我在使用SCADA時遇到了同樣的恐懼:處理GUI元素有多麼不靈活。
今天,當我研究專業IT世界時,所有這些技術都以一種非常有條理的方式改變了這個領域:大規模的葉子數據中心,虛擬化,融合,重複數據刪除,docker,軟體定義網絡,微分段,軟體電器,Puppet,雲網絡和列表不斷發展。在編程中,Python正在向前發展,並將編程概念推向像lambda,列表推導,生成器,裝飾器等函數式編程。新的資料庫概念如NoSQL已經出現。使用非常快速的開發和交付過程。下一代網絡技術物聯網將進一步改變現狀:現在您將獲得所有這些具有無線網絡內置功能的設備。還有數據科學和機器學習......
與IT行業相比,PLC行業缺乏新的編程概念,這可能會極大地改變行業。原因很明顯,維護和維護現有安裝的需求優先於嘗試一些新的(變形的)技術,並且當這種技術失敗時,沒有任何支持的風險。它仍然是一個非常垂直的行業。所以不,我不打算再次回到PLC編程,但對於那些願意進入這個行業的人,請再想一想:「軟體正在吞噬世界」。這個持續多久,我不知道。
SB = Step Block / Baustein,是西門子PLC環境的有限狀態編程模塊執行器=驅動燈,線圈,電機,接觸器的輸出AWL = Anweisungsliste,西門子PLC的彙編語言FB =功能塊/ Baustein,是一個帶編號的函數,提供AWL網絡=在PLC程序中,網絡是組織部門,您可以將其與文本中的頁面或段落進行比較。MB = Merker Byte,是西門子PLC的8位存儲器單元OB1 = Organization Block / Baustein,是西門子PLC的主程序循環,每秒調用100次SPA =跳轉到標籤/阻止指令ACCU1 / 2 =西門子PLC中使用的兩個主寄存器,用於(雙)字操作間接指令=將一個值預先加載到ACCU1並替換下一條指令的0值,例如B MW 200,SPA FB 0,表示跳轉到FB塊編號,其中值位於MW 200後記
自從我寫這篇文章以來,我已經問過自己,我可以在什麼時候弄清楚微觀管理是關於控制而不是支持管理。第一件奇怪的事情是項目工程師對狀態圖進行逆向工程,因為他本可以向外部工程公司詢問這些圖表,但這僅表示遷移。我收到的第一個實際提示是在我離開設施之前與經理的最後一次通話。在解釋了我必須做的事情之後,他突然跳到另一個話題。在這個項目之後,他將繼續與我一起將基於狀態的S5編程方案遷移到新的S7程式語言。在他解釋這個問題時,我問自己「你為什麼要現在談論這個?」。
S7語言大多向後兼容,所以他可以在10分鐘內移動他的步行控制塊只有20行。現在不幸的是,我在測試時忘了這個簡短的對話。事後看來,現在非常清楚這種移民工作的微不足道,並直接表明他只是想讓我相信我他想在項目結束後繼續僱用我。它發生在我的職業生涯的早期,當時我認為呈現給我的事件是正常的。現在,在我的簡歷上有更多年,我可以說我的第一個直覺大多是正確的,我的自我懷疑往往是背叛了我,否則說:當事情沒有意義時,就有理由。
事後看來,現在非常清楚這種移民工作的微不足道,並直接表明他只是想讓我相信我他想在項目結束後繼續僱用我。它發生在我的職業生涯的早期,當時我認為呈現給我的事件是正常的。現在,在我的簡歷上有更多年,我可以說我的第一個直覺大多是正確的,我的自我懷疑往往是背叛了我,否則說:當事情沒有意義時,就有理由。事後看來,現在非常清楚這種移民工作的微不足道,並直接表明他只是想讓我相信我他想在項目結束後繼續僱用我。它發生在我的職業生涯的早期,當時我認為呈現給我的事件是正常的。現在,在我的簡歷上有更多年,我可以說我的第一個直覺大多是正確的,我的自我懷疑往往是背叛了我,否則說:當事情沒有意義時,就有理由。
現在這些活動確實讓我學到了人生課程。看一下這些事件:經理真的受益於這種策略嗎?實際上沒有:他不僅解僱了工程師在他的項目上工作,最可能的結果是項目經理承擔了這個角色並且必須「糾正」一切。我知道這是事實的結果,他決定在我被解僱後的下個月離開公司。所以項目經理決定離開看我的工作。巧合?我想不是。對我而言,它在我的職業生涯中開闢了一條新的道路,在那裡我再也沒有把它當作呈現給我的東西。