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