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