Minimalwert einer Tabelle mit Fließkommawerten
Die Funktion sucht den Minimalwert und seine Position in einer Fließkomma-Datentabelle und gibt beide Werte aus.
Eingang
Anfang der Datentabelle
Ende der Datentabelle
Ausgang
Minimalwert
Position des Minimalwertes
Der Anfang der Datentabelle wird dem Eingang s1_Start und das Ende dem Eingang s2_:End übergeben. Der Minimalwert wird am Ausgang Min und seine Position am Ausgang Pos zurückgegeben.
Falls mehrere Minimalwerte gefunden werden, wird die relative Adresse des ersten, ausgehend von der Anfangsadresse am Eingang s1_Start gefundenen Minimalwertes in Min gespeichert.
Die Adresse des Minimalwertes am Ausgang Pos ist relativ zur Anfangsadresse der Datentabelle am Eingang s1_Start.
wenn die Adresse der Variable an dem Eingang von s1_Start > s2_End ist.
wenn die Adressbereiche s1_Start und s2_End verschieden sind.
wenn die Fließkommawerte ihren möglichen Bereich überschreiten.
wenn die Adresse der Variable an dem Eingang von s1_Start > s2_End ist.
wenn die Adressbereiche s1_Start und s2_End verschieden sind.
wenn die Fließkommawerte ihren möglichen Bereich überschreiten.
Im POE-Kopf werden alle Ein- und Ausgangsvariablen deklariert, die für die Programmierung dieser Funktion verwendet werden. Für alle Programmiersprachen wird der gleiche POE-Kopf verwendet.
VAR
start: BOOL:=FALSE;
(*activates the function*)
data_array: ARRAY [0..4] OF REAL:=[4.0,7.0,-32.0,13.0,5.0];
sum: REAL:=0.0;
(*the sum of all elements of
data_array; here: -3.0*)
mean: REAL:=0.0;
(*the arithmetic mean of all
elements of data_array;
here: -0.6*)
END_VAR
Wenn die Variable start auf TRUE gesetzt wird, wird die Funktion ausgeführt.
Sie sucht in data_field nach dem Minimalwert minimum und seiner Position. Das Funktionsergebnis result ist hier: min_value = 6,91 und position = 2.BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 6 ;
NETWORK_BODY
B(B_VARIN,,output,7,1,9,3,);
B(B_VARIN,,data field[0],7,2,9,4,);
B(B_VARIN,,data field[4],7,3,9,5,);
B(B_VAROUT,,min_value,18,2,20,4,);
B(B_F,F351_FMIN,,9,0,18,5,,?DEN?D@'s1'?Ds2?AENO?Cmin?Cpos);
B(B_VAROUT,,position,18,3,20,5,);
L(1,0,1,6);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF start then
F351_FMIN( s1_Start:= data_field[0],
s2_End:= data_field[4],
Min=> min_value ,
Pos=> position );
END_IF;