TIA Auswertung von Messwerten

SimUser

Level-2
Beiträge
41
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo liebes Forum,

ich möchte Messwerte auswerten und einen Mittelwert bilden. Den Code dafür habe ich selbst erstellt und er scheint, auf den ersten Blick, auch das zu machen was er soll. Ich bin jetzt nur am Überlegen, ob meine For Schleife auch richtig programmiert ist. Hier ein Auszug:

VAR_INPUT
Messwert : Int;
Basis : int;
END_VAR

VAR OutPUT
y := Int;
END_VAR;

VAR
z : int ;
i : int ;
k : Int;
Messwert Array of int [32]
END_VAR

FOR i := 1 TO Basis DO
Messwert[Basis] := Messwert;
END_FOR;

Summe := 0;

For k := 1 TO Basis DO
Summe := Summe + Messwert[k]
END_FOR;

z := Summe;

Formel für Mittelwert y := z mal base ... / z mal X-1 ... hier wird das Ergebnis verwendet und damit weiter gerechnet, schreibe ich aber nicht auf da diese das richtige Ergebnis liefert die Formel bleibt wie sie ist :)


Messwert und Basis kann ich am Aufruf des Bausteines parametrieren. Ein Beispiel:

Die For Schleife wird im selben Zyklus durchlaufen, hätte ich in diesem Fall immer den gleichen Messwert? Würde mein Array, das ich mit den Messwerten befüllen möchte, evtl. dieses Aussehen haben (wenn ich den Messwert 2 und die Basis 5 habe)? Die Messung bezieht sich auf die Temperatur eines Heizkessels.

Messwert[1] = 2;
Messwert[2] = 2;
Messwert[3] = 2;
Messwert[4] = 2;
Messwert[5] = 2;
Messwert[6] = 0;

danach geht es wieder mit [1] los
 
Zuletzt bearbeitet:
Den Code dafür habe ich selbst erstellt und er scheint, auf den ersten Blick, auch das zu machen was er soll. Ich bin jetzt nur am Überlegen, ob meine For Schleife auch richtig programmiert ist. (...)
Gut dass du ohne Fehlermeldung trotzdem drüber nachdenkst, ob das so stimmen kann, was du programmiert hast. (y)

Code:
FOR i := 1 TO Basis DO
  Messwert[Basis] := Messwert;
END_FOR;
(...)
Die For Schleife wird im selben Zyklus durchlaufen, hätte ich in diesem Fall immer den gleichen Messwert?
Richtig! Da würde in alle Array-Felder der gleiche Wert geschrieben. Das ist natürlich nicht der Sinn der Sache.

Ich nehme mal an, dein "Messwert[Basis] := Messwert;" ist ein Tippfehler und du meintest Messwert[i] := Messwert; ?
Und das Array kann nicht den gleichen Name wie eine andere Variable haben.

Du müsstest bei jedem Trigger den Messwert immer ins nächste Feld schreiben. Dazu muss sich das Programm bis zum nächsten Trigger merken, in welches Feld zuletzt geschrieben wurde (oder welches Feld das nächste Mal dran ist).
Code:
// Schreibposition i im Ringpuffer weiterstellen
// Schreibposition i im Ringpuffer weiterstellen
// und sicherstellen, dass da nur zulässige Index-Werte drin stehen
i := (i + 1) MOD Basis;  //bei Messwert Array [0..x]
oder
i := i MOD Basis + 1;    //bei Messwert Array [1..x]

Messwert[i] := Messwert_Eingang;

Für die Summe- oder Mittelwert-Berechnung ist die Verwendung der FOR-Schleife (die mit k) korrekt.

Messwert[1] = 2;
Messwert[2] = 2;
Messwert[3] = 2;
Messwert[4] = 2;
Messwert[5] = 2;
Messwert[6] = 0;

danach geht es wieder mit [1] los
da ist offensichtlich der Wert von Basis nur 5
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Code:
Code:
// Schreibposition i im Ringpuffer weiterstellen
// und sicherstellen, dass da nur 1 .. Basis drin steht
i := (i + 1) MOD Basis + 1;
Messwert[i] := Messwert_Eingang;
Zweimal '+1' ist einmal zuviel!
i := (i + 1) MOD Basis + 1; // >>>==> ändern in: i := i MOD Basis + 1;
 
Gut dass du ohne Fehlermeldung trotzdem drüber nachdenkst, ob das so stimmen kann, was du programmiert hast.
Ja ich denke darüber nach. Ich hab das Programm noch nirgends eingespielt. Die For Schleife sah nicht richtig aus deshalb die Annahme dass es nicht korrekt läuft. Das Ergebnis ist mit dem Beispielwert 2 ---->0,4 (MW) ja richtig. Die Vorschläge von euch sind sehr gut vielen Dank :)
 
Zuletzt bearbeitet:
Zurück
Oben