Я не пойму, к чему вот это и подобное надо городить:
Код:
======================================================
PROGRAM PLC_PRG
VAR
	i : INT;
	ARR : ARRAY[0..10] OF INT := 0,100,200,300,400,500,600,700,800,900,1000;
	PrevScanTimestamp: TIME;
	Speed_Reg : REAL := 0.08;
	Limit_Reg : INT := 10;
	btn_up: BOOL;
	btn_dn: BOOL;
END_VAR

btn_up := DI1;
btn_dn := DI2;
IF i <= Limit_Reg THEN
	i := LIMIT(0, i + REAL_TO_INT(TIME_TO_REAL(TIME() - PrevScanTimestamp) * Speed_Reg * (BOOL_TO_REAL(btn_up) - BOOL_TO_REAL(btn_dn))), Limit_Reg);
	PrevScanTimestamp := TIME();
	AO7 := ARR[i];
ELSIF (i=0 AND btn_dn) THEN
	AO7 := ARR[0];
ELSE
	AO7 := ARR[i];
END_IF
===================================================
Зачем там этот массив нужен, ей богу? Почему нельзя так?
Код:
PROGRAM PLC_PRG
VAR
	PrevScanTimestamp: TIME;
	Speed_Reg : REAL := 0.08;
	Limit_Reg : INT := 10;
END_VAR

AO7 := LIMIT(0, AO7 + REAL_TO_INT(TIME_TO_REAL(TIME() - PrevScanTimestamp) * Speed_Reg * (BOOL_TO_REAL(DI1) - BOOL_TO_REAL(DI2))), Limit_Reg);
PrevScanTimestamp := TIME();
М?