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.