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