Detecta las sentencias FOR en las que la variable de índice se utiliza para acceder a un índice de matriz y excede el rango del índice de matriz.
Justificación: Las matrices suelen procesarse en bucles FOR. Los valores inicial y final de la variable contador deben coincidir (o al menos
no superar) los límites superior e inferior de la matriz. Una causa típica de error
se detecta aquí cuando se cambian los límites del array y no se utilizan cuidadosamente
las constantes; o cuando se utiliza accidentalmente un valor diferente en el bucle
FOR que en la declaración del array.
Importancia: Alta
Ejemplo
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