YOKOGAWA SDV144-S13 日本橫河控制器
我把PLC程序規(guī)范為以下幾個(gè)組成部分:
一、系統(tǒng)初始化,
二、過程或狀態(tài)的描述(相當(dāng)于繼電、接觸控制中的中間繼電器),
三、人機(jī)操作控制(手動(dòng)操作,參數(shù)修改等),
四、設(shè)備控制輸出(電機(jī)、閥等),
五、通信(各控制設(shè)備間的互鎖和數(shù)據(jù)交換),
六、過程或狀態(tài)的故障描述,
七、報(bào)警輸出和故障位置等信息顯示,
八、生產(chǎn)過程報(bào)表(產(chǎn)、質(zhì)量等)。

下面主要談?wù)勥^程或狀態(tài)的描述和設(shè)備控制輸出,因?yàn)檫@基本上是程序的主要部分。
程序好壞的標(biāo)準(zhǔn):穩(wěn)定、易調(diào)試、易修改、易擴(kuò)展、易讀、實(shí)時(shí)性(快)。在這么多年的實(shí)踐中,我感到先由過程或狀態(tài)的描述得到各種狀態(tài)變量,再對(duì)設(shè)備輸出進(jìn)行編程能比較好的達(dá)到上述目標(biāo),可能它在快的方面有所欠缺(因?yàn)槌绦蜷L(zhǎng)一些)但這完全可以從其它方面得到解決(例如中斷)。這種想法主要源自數(shù)學(xué)上的狀態(tài)方程:Q=f(S1,S2,S3 Sn)其中Q為設(shè)備輸出,S1、S2、S3 Sn為狀態(tài)變量(包括輸入輸出)。f是由指令系統(tǒng)組成的算法。一般地,在一個(gè)系統(tǒng)中狀態(tài)變量是確定不變的(這取決于你的狀態(tài)描述),就象組成世界的元素是是基本不變一樣,所以只要改變算法就可以得到不同的控制輸出,因此擴(kuò)展和修改都非常方便。在調(diào)試和排除故障時(shí),根據(jù)狀態(tài)進(jìn)程,可以很快找到故障原因。因?yàn)榭刂戚敵鲆话愣际菐追N狀態(tài)的函數(shù)(算法),它們是有冗余關(guān)系的,因此穩(wěn)定可靠性、抗干擾性得到大大增強(qiáng)。
在現(xiàn)代自動(dòng)化設(shè)備中,一般都利用觸摸屏和PLC聯(lián)合進(jìn)行控制,以方便進(jìn)行工藝參數(shù)的設(shè)定、系統(tǒng)狀態(tài)的顯示、故障信息的顯示等,但直接操作觸摸屏很容易使觸摸屏損壞,減短其使用壽命,所以有些控制中就使用帶觸摸按鍵的操作屏甚至用工控機(jī)加組態(tài)軟件作系統(tǒng)參數(shù)設(shè)定及顯示之用。但后者的價(jià)格比起一般的觸摸屏來(lái)說(shuō)要貴的多。鑒與此,我利用PLC編程的方法,并用一些按鈕作觸摸屏的功能操作和數(shù)字設(shè)定,而不需直接操作觸摸屏,這樣可減少觸摸屏的損壞。

1. 控制系統(tǒng)的硬件構(gòu)成示意如下:
我使用的是西門子S7-200PLC作控制,對(duì)TP170觸摸屏做外部按鍵操作?,F(xiàn)需四個(gè)功能鍵(F1、F2、F3、F4),用于觸摸屏畫面的切換;十個(gè)數(shù)字鍵(0-9)、兩個(gè)方向鍵和退出鍵(ESC)、刪除鍵(DEL)、回車鍵(ENTER)用于參數(shù)數(shù)字的設(shè)定及修改。但考慮到節(jié)省PLC輸入點(diǎn),我用矩陣掃描的方法,其硬件連線如下圖:
用這種掃描的方法只需4個(gè)輸出點(diǎn)和5個(gè)輸入點(diǎn)就可產(chǎn)生4X5=20個(gè)按鍵信號(hào),比用一個(gè)個(gè)輸入點(diǎn)去控制一個(gè)個(gè)按鍵信號(hào)更具價(jià)格優(yōu)勢(shì),這樣只需利用PLC的一些指令達(dá)到分時(shí)采集20個(gè)信號(hào)的功能。

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