-> Hier kostenlos registrieren
Hallo,
ich würde gern aus meinem Mittelwert Baustein als Multiinstanz aufrufen.
Sobald ich das mache arbeitet er aber nichtmehr....
Ich find leider den Fehler nicht.
Gruß
ich würde gern aus meinem Mittelwert Baustein als Multiinstanz aufrufen.
Sobald ich das mache arbeitet er aber nichtmehr....
Ich find leider den Fehler nicht.
Code:
FUNCTION_BLOCK "Real_Mittelwert_bilden"
TITLE =
VERSION : 0.1
VAR_INPUT
IN : REAL ; //Messwert
Anz_Werte : INT ; //Anzahl der Messwerte [1-20]
END_VAR
VAR_OUTPUT
OUT : REAL ;
END_VAR
VAR
Speicher : REAL ;
Zaehler : INT ;
Zaehler1 : INT ;
Wert_1 : REAL ;
Wert_2 : REAL ;
Wert_3 : REAL ;
Wert_4 : REAL ;
Wert_5 : REAL ;
Wert_6 : REAL ;
Wert_7 : REAL ;
Wert_8 : REAL ;
Wert_9 : REAL ;
Wert_10 : REAL ;
Wert_11 : REAL ;
Wert_12 : REAL ;
Wert_13 : REAL ;
Wert_14 : REAL ;
Wert_15 : REAL ;
Wert_16 : REAL ;
Wert_17 : REAL ;
Wert_18 : REAL ;
Wert_19 : REAL ;
Wert_20 : REAL ;
END_VAR
VAR_TEMP
Anzahl_Werte : INT ;
Adr_1 : DWORD ;
Adr_2 : DWORD ;
END_VAR
BEGIN
NETWORK
TITLE =Anzahl Werte begrenzen
L #Anz_Werte;
L 1;
<I ;
SPBN _1;
L 1;
T #Anzahl_Werte;
SPA _3;
_1: L #Anz_Werte;
L 20;
>I ;
SPBN _2;
L 20;
T #Anzahl_Werte;
SPA _3;
_2: L #Anz_Werte;
T #Anzahl_Werte;
_3: NOP 0;
NETWORK
TITLE =Reset Zähler
U( ;
L #Zaehler;
L #Anzahl_Werte;
>=I ;
) ;
SPBNB _001;
L 0;
T #Zaehler;
_001: NOP 0;
NETWORK
TITLE =Wert in Register schreiben
L #Zaehler;
L 32;
*I ;
L P#18.0; // Anfangsadresse Register
+D ;
T #Adr_1;
// Wert in Speicherplatz
L #IN;
T DID [#Adr_1];
// Zaehler erhöhen
L #Zaehler;
L 1;
+I ;
T #Zaehler;
NETWORK
TITLE =Mittelwert bilden
L P#18.0;
T #Adr_2;
L 0.000000e+000;
T #Speicher;
L #Anzahl_Werte;
Anf: T #Zaehler1;
// Werte summieren
L DID [#Adr_2];
L #Speicher;
+R ;
T #Speicher;
// Adresse inkrementieren
L #Adr_2;
L P#4.0;
+D ;
T #Adr_2;
// Zaehler degrementieren
L #Zaehler1;
LOOP Anf;
// Mittelwert bilden
L #Speicher;
L #Anzahl_Werte;
ITD ;
DTR ;
/R ;
T #OUT;
END_FUNCTION_BLOCK
Gruß