Minimalwertauswahl bei Codesys

Wenn die ganzen Ein- und Ausgangsparameter in einer Reihe liegen, kann man auch gut mit Pointerarithmetik arbeiten und erspart sich so die dämliche Tipperei:
Code:
FUNCTION_BLOCK FB_MIN
	VAR_INPUT
	WERT1, WERT2, WERT3, WERT4, WERT5, WERT6 : REAL;
END_VAR
VAR_OUTPUT
	BIN_WERT1, BIN_WERT2, BIN_WERT3, BIN_WERT4, BIN_WERT5, BIN_WERT6 : BOOL;
	minVal : REAL;
END_VAR
VAR
	i : INT;
	ptrMin, ptrAct : POINTER TO REAL;
	ptrOutMin, ptrOutAct : POINTER TO BOOL;
END_VAR

VAR CONSTANT
	ANZAHL : INT := 6;
END_VAR

(*****************************************)
ptrMin     := ADR(WERT1);
ptrAct     := ptrMin;
ptrOutMin  := ADR(BIN_WERT1);
ptrOutAct  := ptrOutMin;
ptrOutMin^ := TRUE;

FOR i := 2 TO ANZAHL DO
	ptrAct    := ptrAct    + SIZEOF(ptrAct^);
	ptrOutAct := ptrOutAct + SIZEOF(ptrOutAct^);
	IF ptrAct^ < ptrMin^ THEN
		ptrMin     := ptrAct;
		ptrOutMin^ := FALSE;
		ptrOutMin  := ptrOutAct;
		ptrOutMin^ := TRUE;
	ELSE
		ptrOutAct^ := FALSE;
	END_IF
END_FOR
minVal := ptrMin^ ; (* Min-Wert ausgeben *)
 
Zurück
Oben