Moin!
Ich habe mir interessehalber mal den Code der Funktion angeschaut. Die Funktion soll den Mittelwert des Übergebenen REAL-Arrays berechnen. Beim Lesen des Codes kam bei mir schon Verwunderung auf, der durch einen kleinen Test bestätigt wurde. Es wird nämlich nur ein Teil des Arrays (SHR(size,2)-1) zur Ermittlung des Wertes herangezogen.
Ein Array (0..9) OF REAL mit folgenden Werten:
fArray[0] := 1;
fArray[1] := 2;
...
fArray[8] := 9;
fArray[9] := 10;
ergibt als Mittelwert somit das Ergebnis = 1,5. (Es werden in diesem Fall nur die ersten beiden Werte herangezogen --> (1+2) / 2 = 1,5...
Vielleicht habe ich hier irgendwas nicht verstanden aber ich würde da irgendwie schon ein anderes Ergebnis erwarten zumal auch die Anleitung nichts über ein derartiges Verhalten aussagt.....
hi Belacqua
beispiel:
VAR
ar6 : ARRAY[0..6] OF REAL := 3,2,4,7,1,6,-2;
X: REAL;
END_VAR
X := ARRAY_AVG(ADR(ar6),SIZEOF(ar6));
die summe der 7 real zahlen ergibt 21 und geteilt durch 7 ergibt 3, und genau das gibt die Function auch als ergebnis zurück.
Hast du bei size auch die SIZEOF verwendet !
stop := SHR(size,2)-1;
array_avg := pt^[0];
FOR i := 1 TO stop DO
array_avg := array_avg + pt^;
END_FOR;
array_avg := array_avg / (stop + 1);
Zur Erklärung
stop := SHR(size,2)-1;
ein REAL wert belegt 4 Bytes und 7 Werte ergeben einen size von 28
damit man die Anzahl der Reals im buffer bestimmen kann, wird die buffersize durch 4 dividiert (SHR x,2) und -1 weil mit index 0 begonnen wird.