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