Rileva le istruzioni FOR in cui la variabile indice viene utilizzata per accedere a un indice di array e supera l'intervallo dell'indice dell'array.
Giustificazione: Gli array vengono tipicamente elaborati in cicli FOR. Il valore iniziale e finale della variabile contatore deve di solito corrispondere
(o almeno non superare) i limiti superiore e inferiore dell'array. Una tipica causa
di errore viene rilevata in questo caso quando i limiti dell'array vengono modificati
e le costanti non vengono utilizzate con cura; oppure quando nel ciclo FOR viene utilizzato accidentalmente un valore diverso da quello dichiarato nell'array.
Importanza: Alto
Esempio
PROGRAM PLC_PRG VAR iIndex1,iIndex2,iIndex3 : INT; arWord : ARRAY[1..100] OF WORD; arararINT : ARRAY[1..9,1..9,1..9] OF INT; arUSINT : ARRAY[0..99] OF USINT; END_VAR //1 violation of the rule(lower range is exeeded): SA0080 FOR iIndex1 := INT#0 TO INT#100 DO arWord[iIndex1] := INT_TO_WORD(iIndex1); END_FOR //6 violations (lower and upper range is exceeded for each array dimension): 3SA0080 FOR iIndex2 := INT#0 TO INT#10 DO arararINT[iIndex2, iIndex2, iIndex2] := iIndex2; END_FOR //1 violation (upper range is exceeded by the end result of the index), previous expressions on index are not evaluated -> OK FOR iIndex3 := INT#0 TO INT#50 DO arUSINT[iIndex3 * INT#2] := INT_TO_USINT(iIndex3); END_FOR --> SA0080: Loop index range of 'Index1' exceeds array range --> SA0080: Loop index range of 'Index2' exceeds array range