PLC程序編寫的基礎(chǔ)要求
1 PLC程序需滿足的設(shè)計要求 一套完整的PLC程序,,并不僅僅是使系統(tǒng)能夠運行起來這么簡單,,它也需要完整的注釋,、精良的架構(gòu)、良好的可擴展性、完備的報警保護系統(tǒng),、運行前的模擬系統(tǒng)。 簡單性 使PLC程序盡可能簡單。簡單的含義就是盡可能的使用標準化的程序框架,,盡可能使用簡單的指令,。 要想程序簡單,從大的方面講,,要優(yōu)化程序結(jié)構(gòu),,用流程控制指令簡化程序,從小的方面講還要用功能強的指令取代功能單一的指令,,以及注意指令的安排順序等,。 可讀性 要求所設(shè)計的程序可讀性要好。這不僅便于程序設(shè)計者加深對程序的理解,,便于調(diào)試,,而且,還要便于別人讀懂你的程序,,便于使用者維護,。必要時,也可使程序推廣,。 要使程序可讀性好,,所設(shè)計的程序就要盡可能清晰。要注意層次,,實現(xiàn)模塊化,,以至于用面向?qū)ο蟮姆椒ㄟM行設(shè)計。要多用一些標準的設(shè)計,。 如遇特殊情況下采用語言編程,,多數(shù)情況下請使用梯形圖編程,方便閱讀,。 再就是I/O分配要有規(guī)律性,,便于記憶與理解。必要時,,還要做一些注釋工作,。內(nèi)部器件的使用也要講規(guī)律性,不要隨便地拿來就用,。 可讀性在程序設(shè)計開始時就要注意,。這不易做到。因為在程序調(diào)試的過程中,,指令的增減,,內(nèi)部器件的使用變化,可能使原較清晰的程序,,變的有些亂,。所以在設(shè)計時就對調(diào)試增減留有一定的余地,,然后調(diào)試完畢后再做一下整理,這樣所設(shè)計的程序具有更高的質(zhì)量,。 程序的注釋,,起碼應(yīng)該有以下幾個方面: A、系統(tǒng)注釋:整套程序的版權(quán)公司和此套程序用途 B,、程序塊注釋:此程序塊的主要用途和作者 C,、段注釋:此段代碼的用途 D、變量注釋:重要性無需多言,,包含I/O注釋,、中間變量注釋 而至于保密性的考慮,我覺得應(yīng)該在程序的加密算法或者塊的加密上考慮,,而不應(yīng)該用減少注釋這種小聰明來實現(xiàn),。 正確性 PLC的程序一定要正確,并要經(jīng)過實際工作驗證,,證明其能夠正確工作,。這是對PLC程序的最根本的要求,若這一點做不到,,其它的再好也沒有用,。 要使程序正確,一定要準確的使用指令,,正確的使用內(nèi)部器件,。準確的使用指令與準確理解指令相聯(lián)系,為此對指令含義和使用條件一定要弄清楚,。必要時,,可編些小程序?qū)σ恍┎磺宄闹噶钭餍y試。 同一指令,,由于PLC的出廠批次不同或是PLC的系列型號的不同,,一些指令細節(jié)有可能不一樣,應(yīng)仔細查閱編程手冊,。 內(nèi)部器件正確使用也是重要的,。如有的PLC有掉電保護,有的PLC沒有,。一定要做到該掉電保護的一定要用掉電保護的器件,,反之則不能用。 總之,,要準確的使用指令,,正確使用內(nèi)部器件,使所編的程序能正確運作,,這是對PLC程序最根本的要求,。 舉個簡單的例子,,西門子的上升沿和下降沿需要使用帶存儲功能的變量作為中間變量,比如M點或者DB點,,如果使用FC的temp變量就會出問題的。 可靠性 程序不僅要正確,,還要可靠,。可靠反映著PLC程序的穩(wěn)定性,這也是對PLC程序的基本要求,。 有的PLC程序,,在正常的工作條件下或合法操作時能正確工作,而出現(xiàn)非正常工作條件(如臨時停電,,又很快再通電)或進行非法操作(如一些按鈕不按順序按,,或同時按若干按鈕)后,程序就不能正常工作了,。這種程序,,就不大可靠,或說不穩(wěn)定,,就是不好的程序,。 好的PLC程序?qū)Ψ钦9ぷ鳁l件出現(xiàn),能予以識別,,并能使其與正常條件銜接,,可使程序適應(yīng)于多種情況。好的PLC程序?qū)Ψ欠ú僮髂苡枰跃芙^,,且不留下“痕跡",。只接受合法操作。 聯(lián)鎖是拒絕非法操作常用的手段,,繼電電路常用這個方法,,PLC也可繼承這個方法。 易改性 要使程序易改,,也就是要便于修改,。 PLC的特點之一就是方便,,可靈活地適用于各種情況。其辦法就是靠修改或重新設(shè)計程序。 重新設(shè)計程序用于改變PLC工藝的用途要求的情況,,不僅程序重編,而且I/O也要重新分配,。多數(shù)情況下不需要重編程序,,做一些修改就可以了。這就要求程序具有易性,,便于修改,。 易改也就是彈性,,要求只要作很少的改動,即可達到改變參數(shù)或易改動作的目的,。 擴展性 許多程序可能在進現(xiàn)場之前都已經(jīng)編好,,但是到了現(xiàn)場,可能還需要添加另外的程序,,為了避免打亂整套系統(tǒng)的結(jié)構(gòu),,需要在每個功能區(qū)預(yù)留一定的空間作為備用。 硬件上留出足夠的余量,,軟件在編寫的時候把手動,,自動,半自動考慮好,,位置留出來,。 完備報警系統(tǒng) PLC系統(tǒng)往往用于工業(yè)環(huán)境中,每一次的事故都會造成或大或小的損失,,為了做到事故預(yù)處理或者在事故中將損失降到最小,,必須重視PLC的報警和保護,在此將其摘出來作為系統(tǒng)的一個重要組成部分,。 程序模擬 為了保證現(xiàn)場的調(diào)試進度或者給客戶展示,,往往在進現(xiàn)場之前,要對自己的程序進行全自動的模擬,。為此需要在程序中加入模擬程序部分,,模擬程序部分在正常現(xiàn)場運行之后斷開,。為了使程序具備模擬功能,,需要做以下工作: (1)將實際的PLC的I/O點轉(zhuǎn)換為PLC的中間變量或者數(shù)據(jù)塊變量; (2)根據(jù)工藝要求編寫各個設(shè)備的模擬程序,。 在設(shè)計PLC程序的過程中,,能夠滿足以上幾個方面的要求的就能稱的上是一個好程序了。 2 PLC程序設(shè)計規(guī)范 (1)選擇合適的PLC型號及I/O點數(shù),,有特殊功能需求時選擇特殊功能模塊,。 (2)熟悉所選擇的PLC編程指令及編譯軟件。 (3)進行軟元件規(guī)劃,,包括內(nèi)部繼電器,、保持繼電器、數(shù)據(jù)寄存器,、定時器,、計數(shù)器等。 (4)進行程序規(guī)劃,,一般以故障提取,、故障處理,、手動處理、自動處理,、輸出處理這樣的順序進行編程,。比較大型的工程或設(shè)備按功能單元分段、分塊進行處理,,如一條自動化生產(chǎn)線中有提升機,、移行、頂起旋轉(zhuǎn)裝置等,,則應(yīng)按上述單元分段分塊編程。 (5)在分段分塊編寫的程序前應(yīng)加上簡短的段注釋,,說明此段程序的功能,,如有必要可以注明相應(yīng)的工藝流程。分塊或分段的程序在總體程序的位置順序應(yīng)基本上按工藝流程順序排列,,便于程序的可讀性,。 (6)在程序設(shè)計之前,應(yīng)對設(shè)備進行抽象,,對如停止,、急停、過載,、超限,、超時、安全光幕,、碰停,、門開關(guān)等共用因子進行提取,放在啟動回路或啟動主控,、連鎖回路,,作為整個程序結(jié)構(gòu)的大前提,在此基礎(chǔ)下,,再將程序分為自動,、手動兩大功能區(qū)。 (7)將程序結(jié)構(gòu)手動功能區(qū)共用因子,,如手動,、危及設(shè)備人身安全等因數(shù)因子進行提取,放在手動主控,、連鎖回路,,對手動控制進行保護、屏蔽,、報警,。 (8)將程序結(jié)構(gòu)自動功能區(qū)共用因子,,如自動、超限,、超時等因數(shù)因子進行提取,,放在自動主控、連鎖回路,,對自動控制下設(shè)備進行保護,、屏蔽、報警,。一個總的原則就是,,在確保安全的前提下,嚴格限制設(shè)備的進,,寬松限制設(shè)備的出,。 (9)程序設(shè)計時應(yīng)設(shè)計程序總復(fù)位功能,便于使用者在設(shè)備出現(xiàn)故障情況下,,可以方便盡快恢復(fù)設(shè)備正常工作,。總復(fù)位應(yīng)充分考慮在復(fù)位過程中設(shè)備和人員的安全,。 (10)自動模式切換到手動模式時,,程序應(yīng)清除自動模式下的輸出和中間狀態(tài)。特別是在自動模式使用SET指令時,,必須在手動模式用RESET指令予以清除,。 (11)嚴禁在編制程序中使用雙輸出,即同一條輸出語句或同一個輸出線圈在程序中出現(xiàn)2次及以上,。在不同模式條件下的對同一輸出點的輸出使用中間繼電器進行中轉(zhuǎn),,最后集中到一起并列到輸出點。 (12)使用觸摸屏?xí)r,,對觸摸屏和PLC公用的控制區(qū)和狀態(tài)區(qū),,不得做其他功能方面的編程使用。 (13)對PLC的特殊模塊,,在使用之前,,應(yīng)先查明其控制區(qū)和狀態(tài)區(qū)是否占用工作字,若占用,,不得將這些工作字做其他方面的編程,。 (14)PLC的輸入、輸出,、中間繼電器,、定時器、計數(shù)器、數(shù)據(jù)寄存器等都要加中文注釋,。輸入,、輸出還要有元器件名稱位號。對應(yīng)的輸入點,,一般情況下默認為外圍開關(guān)連接的是NO觸點,,對于需要接NC觸點的須在注釋中標明。所有注釋應(yīng)當(dāng)清晰明了,,不易產(chǎn)生誤解,,盡量少使用泛指。 (15)工程調(diào)試完成后,,系統(tǒng)必須保留最終軟件程序,,保存的文件名應(yīng)包含項目編號/作者/日期信息/版本號等。 (16)關(guān)于程序加密:對于加密程序的密碼必須有專門的文件予以保存,,并注明相應(yīng)的用戶名+密碼+權(quán)限,,分發(fā)給至少兩個人以上了解密碼,防止密碼丟失帶來無法打開程序的情況,。 3 編程建議 (1)PLC和上位機(或觸摸屏)組成監(jiān)控系統(tǒng)時,,在畫面上很多時候需要有“手動",、“自動"等控制模式(一般都是多個只能一個時),。在程序里面可以用“MOV"指令。如:當(dāng)選擇“手動"就將常數(shù)1 MOV到一個寄存器VB10里面,當(dāng)選擇“自動"就將2 MOV到同一寄存器VB10,。只要判斷寄存器的數(shù)據(jù)是多少,,就知道系統(tǒng)是那種控制方式。這樣的思路好處是容易理解,,不需要互鎖之類的麻煩程序,。 (2)程序有模擬量控制時,如果讀取的模擬量基本上沒誤差,,可以采取時間濾波的方式,,延時一段時間。如果讀取的數(shù)據(jù)誤差很大,,就需要采取其它的濾波方式,,如算平均值等??梢圆殚喯嚓P(guān)的資料,。 (3)在程序調(diào)試過程中(特別是設(shè)備改造時,你的程序是加入到原來設(shè)備的程序中時),,當(dāng)程序語句中出現(xiàn)條件滿足,,而輸出線圈不接通時,可以檢查你的這段程序是否是在這樣的語句之間,如JUMPgo to等語句。還有一種可能就是在中斷程序之后,,條件滿足而沒輸出不接通,,一般都是這段的程序不被掃描。 (4)在順序控制程序時,,即一個動作完成后,,進入到下一個動作,等類似的順序控制,,采用+10+10控制模式,,本人覺得很方便。其思路是:預(yù)置一個寄存器,,在初始化時值為0,當(dāng)系統(tǒng)啟動后,,對它+10,此時寄存器為10,,寄存器等于10時可以做第一個動作,;第一個動作完成后,再對寄存器+10,,此時寄存器等于20,,可以做第二個動作,第二個動作完成后又+10,,此時寄存器等于30,,這樣只要判斷寄存器里面數(shù)據(jù)為多少,就知道要完成那個動作,。當(dāng)需要跳躍動作時,,可以不再+10,可以加+20+30....,,看實際的需要而定,。 為什么加10而不是加1,因為加10之后,,如果插入一段,,只要在這10個空余的地方隨便選擇一個位置就可以了。 (5)在設(shè)計程序的時候,,當(dāng)出現(xiàn)工藝上的故障(非控制系統(tǒng)控制),,最好將故障現(xiàn)象保持,并有燈光聲音報警,。直到操作工復(fù)位,,以讓其知道系統(tǒng)出現(xiàn)了故障。不然停機了,,別人還認為你的程序問題,。一般都是在設(shè)計一個新系統(tǒng)時,要注意到這些。 (6)對于經(jīng)常調(diào)用的子程序,,可以做成子模塊,,頻繁調(diào)用。 (7)由于生產(chǎn)機械在工作循環(huán)中的各工步運動在執(zhí)行時需要一定的時間,,且這些時間都有一定的限度,,因此可以以這些時間為參考,在要檢測的工步動作開始的同時,,起動一個定時器,,定時器的時間設(shè)定值比正常情況下該動作要持續(xù)的時間長20%~30%,而定時器的輸出信號可以用于報警或自動停機裝置,。當(dāng)生產(chǎn)機械某工步動作的時間超過規(guī)定時間,,達到對應(yīng)的定時器預(yù)置時間,還未轉(zhuǎn)入下一工步動作時定時器發(fā)出故障信號,,該信號停止正常工作循環(huán)程序,,起動報警或停機程序,這就是我們常說的超節(jié)拍保護,。 (8)一些安全用檢測開關(guān)(如急停按鈕,、安全光幕、極限開關(guān)等)使用常閉(NC)輸入,。 (9)為安全,、節(jié)能考慮,盡量將輸出設(shè)計成需要動作時才動作,,一旦到位就停止輸出,,而不要設(shè)計成平時一直輸出,,需要停止時才讓輸出斷開,。 (10)執(zhí)行元件的動作原則應(yīng)當(dāng)是寧可不動,也不要亂動,! (11)單臺設(shè)備控制:單臺設(shè)備必須有軟手操/自動切換以及軟手操時可以啟/停功能,,由自動切換到軟手操時,設(shè)備不能停機,;由軟手操切換到自動時,,設(shè)備啟/停取決于自動程序。 (12)單臺設(shè)備(泵,、風(fēng)機及其它大型設(shè)備)運行滿24小時必須進行輪換,,且必須有運行時間累計,如果由上位機設(shè)定啟/停順序除外,,操作人員自行設(shè)定,。