在圖7 -18所示的程序中,F(xiàn)OR表示循環(huán)區(qū)的起始位置,NEXT表示循環(huán)區(qū)的結(jié)束位置。在程序運(yùn)行時(shí),位于FOR~NEXT間的程序反復(fù)執(zhí)行[n.]次(由操作數(shù)決定)后再繼續(xù)執(zhí)行后續(xù)程序。循環(huán)的次數(shù)[n.]=1~ 32767。如果[n.]=-32767~0,則當(dāng)做[n.]=1處理。
圖7-18 三菱PLC的FOR NEXT循環(huán)指令的使用方法
當(dāng)一個(gè)或者多個(gè)指令(程序)重復(fù)多次(次數(shù)可知)時(shí),可使用FOR指令。FOR為有限次循環(huán)指令,NEXT表示循環(huán)區(qū)的結(jié)束位置。
程序的執(zhí)行過程主要分為3個(gè)步驟,輸入檢測(cè)、程序掃描、輸出刷新。這是PLC一個(gè)工作周期的工作順序,在掃描的時(shí)候某些程序段需要執(zhí)行多遍,這個(gè)時(shí)候我們可以使用FOR指令。讓程序中的某一段反復(fù)執(zhí)行多遍,然后再往下掃描。
那么,在哪些地方用到它呢。下面我們來看2個(gè)應(yīng)用案例。
三菱PLC的FOR循環(huán)指令用法
程序的0到9步,觸發(fā)X0的上升沿信號(hào),把M0導(dǎo)通,Z0、D10全部清空;第9到23步,是一段循環(huán)指令,F(xiàn)OR K10表示這段程序循環(huán)10遍。
第一遍,由于變址寄存器Z0里面的數(shù)字為0,D0Z0這個(gè)地址變?yōu)镈0(具體參考變址寄存器的用法),ADD D10 D0Z0 D10,這條指令把D10加D0的數(shù)據(jù)放到D10里面了,由于在程序上面用了D10,所以一開始D10保存的數(shù)據(jù)為0,經(jīng)過加法指令,D10里面保存數(shù)據(jù)就是D0,然后通過INC Z0加一指令,讓Z0自加1,等于1.然后進(jìn)入循環(huán)第二遍.
第二遍,Z0里面的數(shù)據(jù)為1,D0Z0這個(gè)地址變?yōu)镈1,ADD D10 D0Z0 D10這條指令把D10(經(jīng)過第一遍掃描,D10里面保存了D0)加D1的數(shù)據(jù)放到D10里面了,那么 D10里面的數(shù)據(jù)變?yōu)镈0+D1,然后通過INC Z0加一指令,讓Z0自加1,等于2.然后進(jìn)入循環(huán)第三遍。
… …
第10遍,Z0里面的數(shù)據(jù)為9,D0Z0這個(gè)地址變?yōu)镈9,ADD D10 D0Z0 D10這條指令把D10(經(jīng)過第9遍掃描,D10里面保存了D0+D1+… +D8)加D9的數(shù)據(jù)放到D10里面了,那么 D10里面的數(shù)據(jù)變?yōu)镈0到D9里面全部數(shù)據(jù)的總和,然后通過INC Z0加一指令,然后退出循環(huán),進(jìn)入下一步。
M8000常通觸點(diǎn)段開M0,當(dāng)進(jìn)入PLC下一個(gè)工作周期時(shí),由于循環(huán)指令里面的程序都是由M0常開觸點(diǎn)觸發(fā)的,這是就不會(huì)再觸發(fā)了,也就是,經(jīng)過一個(gè)PLC的工作周期,就把D0到D9里面的數(shù)據(jù)加起來,放到了D10里面了。
當(dāng)然,我們也可以寫程序來做一些其他的計(jì)算。下面我們來看下另外一個(gè)應(yīng)用案例:
有54個(gè)X點(diǎn),對(duì)應(yīng)啟動(dòng)54個(gè)Y點(diǎn),需要保持自鎖,當(dāng)按下按鈕M0時(shí)所有輸出停止。
面對(duì)這樣一個(gè)要求,在沒有學(xué)習(xí)循環(huán)指令之前,你可能會(huì)一段一段的寫,需要寫54段程序,今天,我們來嘗試下用FOR指令來寫,如下圖:
每次進(jìn)行掃描都會(huì)先把Z0清0,然后進(jìn)入循環(huán)(54次),第一遍Z0=0,這時(shí)X000Z0的地址是X000,Y000Z0的地址是Y000,X000觸發(fā)Y000線圈并形成自鎖,通過INC指令Z0自加1;第二遍,Z0等于1,這時(shí)X000Z0的地址是X001,Y000Z0的地址是Y001,X001觸發(fā)Y001線圈并形成自鎖,通過INC指令Z0自加1;… …
這樣的話,就把本來很冗長(zhǎng)的一大段簡(jiǎn)化成了一小段,節(jié)省程序步數(shù)的同時(shí)減少了編程的時(shí)間。
關(guān)于FOR指令,除了以上兩種,大家平時(shí)還有什么用法?