-> Hier kostenlos registrieren
Hallo
Ich möchte im Gegensatz zum Siemens Baustein FB "FloatingAverage" einen eigenen Baustein schreiben, wo ich die Anzahl Messpunkte individuell einstellen kann und nicht an einen fixe Länge von 100 gebunden bin.
Ich habe mir das ganze codiert und es funktioniert auch, solange ich positive Messwerte vorgebe. Sobald ich einen negativen Messwert habe funktioniert der Baustein nicht mehr bzw. nach x mal überschreiben des Messwertes mit positiven Werten läuft er wieder. Hat jemand eine Idee woran es liegen könnte?
Input:
-messwert: Real //-10.0 bis +20.0V
-trigger: Bool // 1000ms Rechteck
-anzahl: Int// Anzahl Messwerte für Mittelwert 5..100
Output:
-mittelwert: Real //-10.0 bis +20.0V
Static:
-summe: Real //Summe der eingelesene Messwerte
-statTrigger: Bool // Trigger OLD
-statHistory: Array [0..50] of Real // Ringspeicher
-statCounter: Int // Zähler, Position in Ringspeicher
Temp:
-tempTrigger: Bool // Flanke aus Trigger Signal
Programm:
//Detektion Flanke
#tempTrigger := #trigger AND NOT #statTrigger;
#statTrigger := #trigger;
//Wenn Flanke auftritt, Messwert einlesen und neuer MIttelwert berechnen
IF #tempTrigger THEN
#summe := #summe - #statHistory[#statCounter]; // Ältesten Wert von der Summe subtrahieren
#summe := #summe + #messwert; // Neuen Wert zur Summe addieren
#statHistory[#statCounter] := #messwert; //Neuen Wert im Historienspeicher speichern
// Zähler als Index für Feldzugriffe weiterzählen oder auf 0 setzen
#statCounter := #statCounter + 1;
IF #statCounter >= #anzahl THEN
#statCounter := 0;
END_IF;
// Aus der aktuellen Summe und der Anzahl der Messungen ergibt sich der Mittelwert
#mittelwert := #summe/ #anzahl;
END_IF;
Besten Dank für eure Inputs
Rafi
Ich möchte im Gegensatz zum Siemens Baustein FB "FloatingAverage" einen eigenen Baustein schreiben, wo ich die Anzahl Messpunkte individuell einstellen kann und nicht an einen fixe Länge von 100 gebunden bin.
Ich habe mir das ganze codiert und es funktioniert auch, solange ich positive Messwerte vorgebe. Sobald ich einen negativen Messwert habe funktioniert der Baustein nicht mehr bzw. nach x mal überschreiben des Messwertes mit positiven Werten läuft er wieder. Hat jemand eine Idee woran es liegen könnte?
Input:
-messwert: Real //-10.0 bis +20.0V
-trigger: Bool // 1000ms Rechteck
-anzahl: Int// Anzahl Messwerte für Mittelwert 5..100
Output:
-mittelwert: Real //-10.0 bis +20.0V
Static:
-summe: Real //Summe der eingelesene Messwerte
-statTrigger: Bool // Trigger OLD
-statHistory: Array [0..50] of Real // Ringspeicher
-statCounter: Int // Zähler, Position in Ringspeicher
Temp:
-tempTrigger: Bool // Flanke aus Trigger Signal
Programm:
//Detektion Flanke
#tempTrigger := #trigger AND NOT #statTrigger;
#statTrigger := #trigger;
//Wenn Flanke auftritt, Messwert einlesen und neuer MIttelwert berechnen
IF #tempTrigger THEN
#summe := #summe - #statHistory[#statCounter]; // Ältesten Wert von der Summe subtrahieren
#summe := #summe + #messwert; // Neuen Wert zur Summe addieren
#statHistory[#statCounter] := #messwert; //Neuen Wert im Historienspeicher speichern
// Zähler als Index für Feldzugriffe weiterzählen oder auf 0 setzen
#statCounter := #statCounter + 1;
IF #statCounter >= #anzahl THEN
#statCounter := 0;
END_IF;
// Aus der aktuellen Summe und der Anzahl der Messungen ergibt sich der Mittelwert
#mittelwert := #summe/ #anzahl;
END_IF;
Besten Dank für eure Inputs
Rafi