使用FOR和NEXT指令可在重複執行分配計數的循環中執行程序段,每條FOR指令需要一條NEXT指令,将FOR-NEXT循環置于最大嵌套深度為8層的FOR-NEXT循環内。
FOR指令标記循環的開始,NEXT指令為循環體的結束指令。
一、FOR-NEXT指令說明
(1)FOR指令管腳說明
INIT、FINAL分别定義起始值和結束值。
使能輸入EN有效,循環體開始執行,執行到NEXT指令時返回,每執行一次循環體,當前值計數器INDX增1,達到終止值FINAL時,循環結束。
使能輸入無效時,循環體程序不執行。每次使能輸入有效,指令自動将各參數複位。
注意:使用 FOR 和 NEXT 指令可在重複執行分配計數的循環中執行程序段。每條 FOR 指令需要一條 NEXT 指令。
二、FOR-NEXT 簡單循環編程案例(字節)
編程要求:通過FOR-NEXT循環指令把1 -100數字依次放入VB100-VB199地址裡。
(1)建立指針地址:VD10是指指針,就相當于手指指向一樣,&VB100是指針指向的起始地址或首地址,相當于你手指指向的第一個地址。
(2)啟用FOR循環,EN端使能端不需要一直接通,隻需要使用沿脈沖(上升沿)觸發,INDX存放于循環次數使用字數據類型表示,INIT表示起始循環次數,FINAL表示結束循環次數。
(3)寫入指針與指針偏移,當執行一次循環VB1000值加一,把VB1000寫入至VB100,當循環一次指針偏移一個字節。
(4)循環結束完成
(5)演示效果
從VB100開始的100字節分别為VB100-VB199寫入1-100數字。
三、FOR-NEXT 簡單循環編程案例(字)
編程要求:通過FOR-NEXT循環指令把1 -100數字依次放入VW100-VW298地址裡。
(1)建立指針地址:VD10是指指針,就相當于手指指向一樣,&VB100是指針指向的起始地址或首地址,相當于你手指指向的第一個地址。
(2)啟用FOR循環,EN端使能端不需要一直接通,隻需要使用沿脈沖(上升沿)觸發,INDX存放于循環次數使用字數據類型表示,INIT表示起始循環次數,FINAL表示結束循環次數。
(3)寫入指針與指針偏移,把VW0當前循環次數存放到指針指向的VW100地址裡,在通過加法指令把VW100+2=VW102,這裡為什麼要加2呢?是因為既然是循環字,字由兩個字節組成,所以加2是為了依次排序下去。
(4)循環結束完成
(5)效果演示
從VW100開始的100字分别為VW100-VW298寫入1-100數字。
四、FOR-NEXT 簡單循環編程案例(雙字)
編程要求:通過FOR-NEXT循環指令把1 -100數字依次放入VD100-VD496地址裡。
(1)建立指針地址:VD10是指指針,就相當于手指指向一樣,&VB100是指針指向的起始地址或首地址,相當于你手指指向的第一個地址。
(2)啟用FOR循環,EN端使能端不需要一直接通,隻需要使用沿脈沖(上升沿)觸發,INDX存放于循環次數使用字數據類型表示,INIT表示起始循環次數,FINAL表示結束循環次數。
(3)寫入指針與指針偏移,寫入指針與指針偏移,當執行一次循環VD1000值加一,把VD1000寫入至VD100,當循環一次指針偏移一個雙字。
(4)循環結束完成
(5)演示效果
從VD100開始的100雙字分别為VD100-VD496寫入1-100數字。
五、問答專區
(1)從以上圖中可以看出字節/字/雙字都可以達到1到100數值,但VW0值都是101這是為何呢?
答:設定循環次數是100次,但FOR循環指令需要再進行循環一次進行對比,直到循環次數大于100設定值,才能停止,停止将不再執行FOR循環到NEXT這段程序。
(2)為什麼傳送字的時候不需要轉換,而傳送字節、雙字的時候需要轉換呢?
答:FOR循環指令隻能支持字的數據類型,所以不需要轉換直接使用,而字節/雙字才需要轉換。
(3)FOR-NEXT指令的循環次數如何計算?
答:FOR-NEXT工作過程:啟用FOR-NEXT指令,首先将 INIT( 初始值) 複制到 INDX(當前循環次數);每執行一次,INDX (當前循環次數) 加1;如 果 INDX 大于 FINAL (終止循環次數),終止循環。
比如:INIT=1 FINAL=10,則循環體被執行10次,然後退出循環, 退出循環後INDX=11
INIT=0,FINAL=10, 則循環體被執行11次,然後退出循環,退出循環後INDX=11
(4)FOR-NEXT指令執行時,主程序是否執行,對掃描周期的影響?
答:程序自上而下循環掃描,當FOR-NEXT指令啟用後,則循環體被循環執行,直至循環次數到達,循環結束,程序繼續向下執行。即在一個掃描周期内執行循環完畢後才會向下執行,循環次數越多,會導緻掃描周期時間延長越多。如果循環次數過多或者出現死循環,會導緻掃描周期時間超過看門狗時間,報出看門狗超時的緻命錯誤,CPU停機并且SF/DIAG燈紅燈常亮。
(5)如何在FOR-NEXT執行循環過程中,退出循環?
答:您可以在FOR/NEXT 指令處于循環過程中時,在循環體中修改FINAL (終止循環次數)數值。
來源:技成培訓網,作者:技成-徐陳爽,未經授權不得轉載!
有話要說...