PART. 01
第一次接觸PLC,是在海天公司給一臺雙色注塑機增加一個轉(zhuǎn)軸功能,這個功能注塑機電腦上沒有,所以外加了一個PLC,記得當(dāng)時用的是三菱FX,這是我接觸的第一個PLC,當(dāng)時因為供應(yīng)商提供了PLC、伺服電機、減速機等一套產(chǎn)品,所以程序也就讓供應(yīng)商寫了。
到了倍福之后,由于整個辦事處就我一個人,處于什么都干的狀態(tài),所以除了銷售工作,也做技術(shù)支持。記得第一個項目是上海的同事寫的代碼,同事來現(xiàn)場一次,后面的維護(hù)我接過來。所幸TwinCAT2這軟件比較簡單,一來二去自己就上手了。 ? 后來慢慢地也給客戶寫一點DEMO,用來給客戶解釋為啥IEC61131-3是一個簡單的東西,不像想象的那么難,不要一想到ST語言就想到高級語言,等等諸如此類的問題。寫著寫著,也有了一些心得。 ? 在聊聊這些心得之前,先說點題外話。我做過兩件和工作不太相關(guān)的學(xué)習(xí),一次是讀研究生時,一個培訓(xùn)班來學(xué)校推銷ISO內(nèi)審員的培訓(xùn),當(dāng)時因為好奇去報了名,花了幾百塊錢聽了一堆ISO的知識,記得講課的是一位老干部。另一次是剛上班時,去報了一個計算機高級程序員的考試,看了幾個月書,離及格線差了那么一大點(不是一小點)。但這兩個事情,對我的影響比較大,ISO的學(xué)習(xí),讓我理解了凡事要有流程,流程要有標(biāo)準(zhǔn),標(biāo)準(zhǔn)要有數(shù)據(jù),數(shù)據(jù)要可追溯,這為后來理解工業(yè)4.0打下了基礎(chǔ),而高級程序員的考試,讓我學(xué)到不少IT的知識,尤其是軟件工程方面的知識,對于構(gòu)建一個大的程序,還是有幫助的。 ?
下面的心得,和這兩件事情,有比較大的關(guān)系,說穿了,就是多做紙面工作。
PART. 02
在寫代碼之前,我會先建個EXCEL表格,大約有這么幾項(這里我虛擬了一個立體車庫的項目,因為每天到辦公室都會和立體車庫打交道): ? 1、IO表,輸入輸出的模塊型號,模塊的位置,每個模塊上每個點的定義,以及外面接的是什么元器件。對于一些電氣CAD軟件,會自動生成這個表,但我們還是建議用EXCEL做一份,以便存檔。
2、變量表,一部分變量是有地址的,比如需要和上面提到的IO表進(jìn)行對應(yīng),比如Modbus通訊。Modbus通訊需要定義變量地址,而IO對應(yīng)的不需要在程序中指定,只要在系統(tǒng)配置中和硬件進(jìn)行連接。另一部分變量是沒有地址的,但也不能隨便定義,要有一定的規(guī)則,以便閱讀。
3、結(jié)構(gòu)體(Structure),結(jié)構(gòu)體的設(shè)計,可以放在變量表之前,為了提高效率,我們會設(shè)計一些結(jié)構(gòu)體來做數(shù)據(jù)類型,比如一個氣缸,就可以設(shè)計一個結(jié)構(gòu)體來表述,這個結(jié)構(gòu)體會包含氣缸的方向,磁性開關(guān)狀態(tài),以及兩個方向的超時報警時間。在使用到氣缸時,就可以用這個結(jié)構(gòu)體類型來直接定義氣缸,而無需去定義每個氣缸設(shè)計的變量。
必要的話,可以設(shè)計枚舉變量,用來表述機器的狀態(tài)。 ?
4、POU名稱(Program Organization Unit程序組織單元)。POU有三種類型:程序(Program)、功能塊(Function Block)、函數(shù)(Function)。在規(guī)劃階段,程序和功能塊的構(gòu)建是很重要的,功能塊會降低很多重復(fù)工作,從而避免一些普遍性的錯誤(當(dāng)然,錯了也就都錯了),程序的調(diào)用、狀態(tài)的切換是否清晰可控,則決定了整個項目是否足夠強壯,并可持久改進(jìn)及維護(hù)。
? 5、工藝說明,包括各個工作步驟、步驟的銜接、條件的轉(zhuǎn)換等。這個步驟,可以在EXCEL中做,也可以用word、PPT,但相比之下,EXCEL可能是個更好的選擇,因為EXCEL的紙面是沒有限制大小的,而word和PPT很容易遇到編輯范圍太小的問題。
當(dāng)然,也可以在紙張上來畫。我個人建議每個項目備一個A4的本子,和EXCEL配合使用。 ? 做完這個表格之后,我習(xí)慣將變量表直接復(fù)制到TwinCAT中,因為在EXCEL中,很多重復(fù)工作可以直接選中表格單元進(jìn)行拖拉復(fù)制,比如注釋的“(* ”和“*)”,以及末尾的“;”,都是直接復(fù)制單元格的,而對于一些帶序號的變量,如X0-X7,順序復(fù)制即可,這會在大幅度減少工作量的同時,降低變量編寫出錯機率。 ? 在程序編寫過程中,除了用于for循環(huán)的累加數(shù),以及用來調(diào)試時的一些標(biāo)志之外,如果要增加有實際意義的變量名,必須先在EXCEL里增加,再復(fù)制到程序中。這有點強迫癥,但事實證明,這個有用。 ? 接下去就是建立各個POU,對于功能塊,要寫好輸入變量和輸出變量,而函數(shù)只需要有參數(shù)即可。寫完了每個POU,記得在每個POU的主體敲個";",這樣,即使我們一句代碼也不寫,也是可以編譯通過的。如果這時候編譯不通過,可以看看是不是哪里有手誤了,因為這時候能錯的地方都是系統(tǒng)保留字,或者是忘記敲";",注釋的括號少了之類。
? 接下來是不是寫代碼?不是的,是先寫注釋,而且是全面注釋,即在各個功能塊中,先寫好注釋。在TwinCAT中,一個程序塊只需要一個“;”,即可編譯通過,我們上面已經(jīng)敲好了";",所以不用擔(dān)心沒有代碼會造成程序不能編譯。
我們回到前面第4點,如果流程圖已經(jīng)畫好,那我們就把流程圖搬到編程環(huán)境中,還是按照從大到小的原則,我們先把步驟編好,具體每一步里面做什么,可能遠(yuǎn)不如步驟之間怎么切換銜接來得重要。所以,在這個過程中,我們還可以用注釋來替代代碼,但別忘了在各種for、case中加上“;”。 ? 最后一步,讓我們在所有注釋的地方,把代碼寫上。然后,編譯一下。 ? 如果有人可以把PackML的文檔看一遍,會發(fā)現(xiàn)里面就有關(guān)于狀態(tài)切換的圖表,如果有興趣,可以去找下PackML的文檔。
如果你用的是TwinCAT或者Codesys的環(huán)境,我建議在寫EXCEL表格和畫流程圖的時候,順帶把人機界面的草圖也畫了,我覺得集成人機界面的開發(fā)環(huán)境就是自動化工程師的大救星。人機界面和PLC在同一個環(huán)境內(nèi),意味著可以隨時看到工程師想看到的內(nèi)容,比如在調(diào)試時,需要看多個變量,那建在人機界面上會方便很多,不需要在程序中在線觀察。 ? 人機界面和PLC的集成,除了大大提高自動化工程師的幸福感之外,也會極大激發(fā)自動化工程師的創(chuàng)作欲望。比如有些DEMO,我會將邏輯動作的條件和輸出狀態(tài)都放在畫面中,這樣可以很清楚看到一個邏輯動作沒有執(zhí)行的原因,比如某幾個動作有先后,那做個定時器或者多個定時器,將這些定時器的輸出放在同一個畫面,就可以明察秋毫了。 ? 寫完了程序,機器也動了,我們再來做一張表,就是修改記錄,在這張表里,我們寫下,某年某月某日,為了什么原因,我們改了哪個程序,怎么改的,修改后我們怎么測試的,測試的效果如何。 ?
而修改的程序,不建議直接在原程序上改,可以建一個新的POU,也可以在POU里寫一個新的action,在對應(yīng)的調(diào)用處改掉調(diào)用名字即可。這樣,即使新的程序出了問題,也很容易改回(RollBack)到原來的程序。而新的代碼中,記得在頭部寫好注釋。
PART. 03
至此,我們回過頭來看看,我們獲得了哪些好處: ?
1、我們有了一個清晰的名字列表,包括變量的、IO的、程序的 2、我們有了一個清晰的結(jié)構(gòu) 3、所有的問題會有據(jù)可查。
上面這幾點是針對程序本身的益處,而對于項目和企業(yè)而言,則有更大的意義:
1、通過分解,將代碼部分的工作量比例降低了,這種逐步聚焦的方式,可以讓工程師把精力放在最關(guān)鍵的地方。
2、便于溝通,在代碼之前的這些工作,都可以和其他人共享,比如IO表部分可以和電氣工程師以及電工溝通,程序流程部分可以用來和工藝工程師溝通。
3、便于維護(hù),在移交給其他工程師,或者多人開發(fā)同一項目時會方便很多。如果沒有注釋,基本上工程師自己都會忘記原來寫的什么。
4、便于更換平臺,當(dāng)需要更換一個控制器平臺時,會發(fā)現(xiàn),大部分工作是相通共用的,這會在切換平臺時節(jié)約大量的時間。
后記 ? 寫這篇文章的原因,一方面是看了鄧?yán)罾蠋煹奈恼?,也想談?wù)勛约旱男牡?,另一方面,也是看到隨著工業(yè)4.0的普及,以及我國OEM制造業(yè)正在向高端發(fā)展,PLC程序方面,也慢慢向IT方向發(fā)展。 ? 相比于PC或者網(wǎng)絡(luò)軟件,自動化程序有幾個特點:
1、使用對象比較窄,這造成了對程序的質(zhì)量要求、功能要求都不是太高,機器能開就行。
2、代碼量小,因為1的原因,以及機器本身的特性,PLC的代碼量是很小的。
3、協(xié)作性很低,很多公司只有一個自動化工程師負(fù)責(zé)PLC程序,而且對程序質(zhì)量要求很低,只要求機器能跑。
這些特點,造成了自動化行業(yè),尤其是離散自動化行業(yè),對于代碼的質(zhì)量基本是沒有要求的。我記得大學(xué)時候買過一本《軟件工程》的書,開頭有個例子,是一個科幻電影里的飛船計算機艾爾出了軟件故障的故事,隨著現(xiàn)在機械設(shè)備制造業(yè)的發(fā)展,機器的銷售越來越多,客戶的需求也變得越來越定制化,這種軟件的故障,在將來會慢慢出現(xiàn),如何應(yīng)對這個事情,唯一的道路,只能是從計算機行業(yè)去借一些經(jīng)驗來。 ? 我作為一個銷售來寫這個文章,會有很多漏洞,但還是期望我的文字可以引起自動化工程師的共鳴,起到拋磚引玉的作用,大家一起為未來做些事情。
編輯:黃飛
?
評論
查看更多