鄙人原本是化工專(zhuān)業(yè)畢業(yè)的,后因工作需要,加之個(gè)人興趣,才轉行搞儀表、機械。十年前,我剛開(kāi)始使用PLC時(shí),也是一頭霧水。仗著(zhù)自己對硬件、工程知識的熟悉,和對組態(tài)軟件的粗淺了解,硬著(zhù)頭皮接下了任務(wù)。當時(shí)已經(jīng)來(lái)不及接受培訓,相關(guān)資料極其缺乏,僅有的參考資料是一本英文的S7-200手冊,以及西門(mén)子網(wǎng)站上找到的一些全西文的示例,總算在三個(gè)月內完成了系統的構建、軟件的編寫(xiě)工作。期間走彎路、出故障是家常便飯,經(jīng)常搞得我茶飯不思,而且還由于操作不慎燒毀過(guò)一臺PLC。所以我非常理解那些剛入門(mén)的網(wǎng)友兩手抓瞎的感覺(jué)。
在此,我想粗略的總結一下自己的學(xué)習之路,供網(wǎng)友們參考。
1、編程需要堅強的毅力和足夠的耐心
人各有所長(cháng)。有些人把編程看作一項冗長(cháng)而枯燥的工作;有些人把編程看作一項趣味的智力游戲。如果你是前者,強烈建議你遠離這份工作。畢竟編程工作是對人的毅力和耐心的挑戰。我所在實(shí)驗室中,很多學(xué)生看到我編程序就會(huì )驚訝于我面對這一堆堆符號所表現出的專(zhuān)注。其實(shí),這是興趣使然。興趣使我具備了足夠的毅力和耐心。經(jīng)過(guò)無(wú)數次失敗后,當看到一個(gè)個(gè)符號按我的思路整齊的排列,PLC按我的要求有條不紊的運行時(shí),興趣得到了極大的滿(mǎn)足,如同打通了一個(gè)游戲的關(guān)口。所以,我告訴這些學(xué)生:你們看到的是一堆枯燥怪異的符號,我看到的卻是一群熱情奔放的舞者,而我則是她們的導演。
2、編程需要敢于實(shí)踐的信心
我曾經(jīng)教過(guò)一個(gè)學(xué)生學(xué)AutoCAD,我對她的唯一要求就是實(shí)踐。我告訴她:你隨便怎么操作,大不了一張圖重畫(huà);最壞的結果是系統崩潰,沒(méi)關(guān)系,系統重做,再來(lái);只要電腦沒(méi)被砸了,怎么都行。兩年后,我再看到她做的CAD圖紙,也自嘆不如。
同樣道理,只有不斷地在PLC上運行這些指令,觀(guān)察運行的結果,才能弄清PLC指令的作用。很多初學(xué)者對PLC一臉的迷茫,往往是出于一種畏懼,擔心損壞設備。而這些畏懼是沒(méi)有任何道理的。仔細的閱讀手冊是非常重要的,但是僅靠讀書(shū)是成不了一個(gè)工程師的。更何況手冊上的內容并非面面俱到。我在接觸到那些不熟悉的指令時(shí),喜歡單獨編一個(gè)小程序,讓PLC運行。然后逐個(gè)修改條件,觀(guān)察運行的結果(MicroWin為用戶(hù)提供了非常好的監控手段),反過(guò)來(lái)再重新理解手冊的描述,這樣就可以非常直觀(guān)的理解這些指令的作用和使用方法。不必擔心自己寫(xiě)的程序會(huì )有什么問(wèn)題,會(huì )影響PLC的正常工作。程序有沒(méi)有問(wèn)題,只有讓PLC運行了才能發(fā)現。而發(fā)現問(wèn)題并解決問(wèn)題就是對自己能力的提高。撇開(kāi)硬件操作不談,單就軟件來(lái)說(shuō),我還真沒(méi)有遇到過(guò)由于軟件問(wèn)題而損壞PLC的事。在這里不必擔心繼電器電路接錯線(xiàn)可能造成的后果。所以,大膽的實(shí)踐是PLC編程的必由之路。
當然,大膽實(shí)踐并不是野蠻操作,而是必須遵循必要的規范。還有一個(gè)要注意的,在程序未經(jīng)可靠性證實(shí)之前,千萬(wàn)不要掛接負載,以免造成不必要的損失。數字量的輸出有LED顯示;而模擬量處理可以采用一些硬件或軟件模擬手段來(lái)解決。
3、編程需要有縝密的邏輯思維
編程本身就是一種邏輯思維過(guò)程。在高級語(yǔ)言中,使用最多的是if then else、select這些條件判別語(yǔ)句,這就是邏輯中的因果關(guān)系。PLC程序就是由這些因果關(guān)系組成的:判別條件是否成立,進(jìn)而決定執行相應的指令。最初的PLC是用來(lái)替代繼電器邏輯電路的,所以繼承了繼電器電路以觸點(diǎn)作為觸發(fā)條件的描述方式。在PLC中,以虛擬觸點(diǎn)代替了繼電器的金屬觸點(diǎn),而繼電器電路所表達的邏輯關(guān)系還是被完整的保留下來(lái)。即使引入了繼電器電路難以勝任的數值處理過(guò)程,PLC從根本上還是在執行一個(gè)個(gè)因果關(guān)系。所以,理順對象的各個(gè)事件之間的邏輯關(guān)系,是編程之前必須精心做好的準備工作。我在接到一項任務(wù)后,第一件事就是整理出一份邏輯關(guān)系圖,與用戶(hù)反復商討,取得用戶(hù)的認可,然后才真正進(jìn)入程序的編寫(xiě)過(guò)程。
4、不可或缺的相關(guān)知識
PLC的程序是直接作用于對象的具體工藝過(guò)程,那么對對象具體工藝過(guò)程的理解是非常重要的的。我在與用戶(hù)的交流過(guò)程中,會(huì )用我所掌握的Unit Operation的知識分析用戶(hù)的工藝過(guò)程,協(xié)助用戶(hù)整理過(guò)程控制中的各個(gè)邏輯關(guān)系,甚至包括各種儀表、硬件的配置。這得益于我原本所學(xué)的專(zhuān)業(yè)。當然,不能要求所有搞PLC程序的工程師都有我這樣的經(jīng)歷。但是有兩門(mén)知識卻是不可或缺的:一是過(guò)程儀表的硬件知識,包括傳感器、變送器(二次儀表)和PLC本身,這是構建控制系統的基礎;二是過(guò)程控制理論,包括各種控制模型的原理和應用,其中最重要的是二位調節和PID調節模型。PID調節是目前用得最廣泛的過(guò)程控制手段,且變化多端。學(xué)習PID最好的方法就是讀書(shū)。幾乎所有講解過(guò)程控制的書(shū)籍都有關(guān)于PID的內容,多讀基本相關(guān)的書(shū)籍對理解PID是很有益處的。我發(fā)現不少網(wǎng)友在進(jìn)入PLC領(lǐng)域時(shí),缺乏這些相關(guān)知識。這并不可怕;可怕的是當事者不能靜下心來(lái)彌補知識的缺陷。我們不要怪罪學(xué)校沒(méi)有教授這些內容,而是要注重自己如何去學(xué)習這些知識。工作中遇到的許多問(wèn)題是學(xué)校里沒(méi)講過(guò)的,這不能成為我們拒絕工作的理由,而應該以積極的態(tài)度去應對這些問(wèn)題。我的體會(huì )是,為了解決工作中的問(wèn)題而學(xué)習的知識,比課堂上學(xué)的東西更容易記住。
5、養成良好的編程習慣
每個(gè)人編程都會(huì )有不同的習慣和特點(diǎn),不能強求一致。但是一些好的習慣還是應該為大多數人所遵循。一是理順邏輯關(guān)系、時(shí)序關(guān)系,編制程序框圖;二是合理分配主程序、子程序和中斷程序;三是合理分配寄存器,編制寄存器符號表。
PLC編程更接近于單片機,或者說(shuō)PLC就是模塊化的單片機。因此PLC的很多操作都是直接針對寄存器的,如果在程序中出現不合理的寄存器地址重疊,一定會(huì )出現不可預想的后果。編制寄存器符號表不僅可以避免上述問(wèn)題(MicroWin會(huì )有問(wèn)題提示),而且可以使程序具備更好的可讀性。這和VB中定義變量有異曲同工之處。
VB編程中關(guān)注的是事件,不強調主程序和子程序的觀(guān)念,因為VB主程序的工作是由PC的操作系統完成的。PLC則不然。PLC程序是以主程序為主干的,CPU不斷的循環(huán)執行主程序,只有觸發(fā)條件成立時(shí)才會(huì )調用子程序或中斷程序。即子程序和中斷程序所執行的任務(wù)不是全時(shí)需要的。如果把這些任務(wù)都放在主程序中會(huì )無(wú)端增加主程序的工作量,降低程序的效率。這點(diǎn)和單片機的編程思路是一致的。子程序的使用可以使整個(gè)程序的邏輯更清晰。而且子程序可以分開(kāi)編寫(xiě)、調試,最后“安裝”到主程序上。這樣你可以一個(gè)一個(gè)解決問(wèn)題。
PLC編程,無(wú)論是LAD,抑或STL,都不如VB那么直觀(guān)、有趣,更不如CAD那么形象。但比單片機的匯編語(yǔ)言的可視性強多了。對于初學(xué)者,LAD(梯形圖)的編程相對直觀(guān),更容易上手。
最后,PLC提供了豐富的指令、模塊,比單片機方便了很多。但是初學(xué)者編程時(shí)應盡量先使用簡(jiǎn)單的指令達到目的。盡管看上去有點(diǎn)土,卻不失為一個(gè)入門(mén)的好途徑,且對你理解那些較為復雜的指令會(huì )有幫助。具備了一定經(jīng)驗后,應該考慮掌握復雜指令的應用,以及程序的優(yōu)化。