Da_Basco
Level-1
- Beiträge
- 104
- Reaktionspunkte
- 21
-> Hier kostenlos registrieren
Hallo zusammen,
Ich habe von einem Vorgänger dessen selbergebastelten FB für eine Gleitende Mittelwertbildung mit max. 50 Werten übernommen. Wenn ich diesen mehrmals mit jeweils eigenen Instanz-DB aufrufe funktioniert er wunderbar. Nur hab ich Probleme mit einer Multiinstanz. Dann funktioniert gar nichts mehr.
Nun hab ich mich hier schon umgesehen zwecks Sicherung der Adressregisters, Offset des Adressregisters 2, usw. und auch diverse Tipps hier angewendet. Leider krieg ich das Ding trotzdem nicht zum laufen und steh schon völlig auf dem Schlauch. Weiss einer wo der Fehler steckt?
Danke vielmals!
Ich habe von einem Vorgänger dessen selbergebastelten FB für eine Gleitende Mittelwertbildung mit max. 50 Werten übernommen. Wenn ich diesen mehrmals mit jeweils eigenen Instanz-DB aufrufe funktioniert er wunderbar. Nur hab ich Probleme mit einer Multiinstanz. Dann funktioniert gar nichts mehr.
Nun hab ich mich hier schon umgesehen zwecks Sicherung der Adressregisters, Offset des Adressregisters 2, usw. und auch diverse Tipps hier angewendet. Leider krieg ich das Ding trotzdem nicht zum laufen und steh schon völlig auf dem Schlauch. Weiss einer wo der Fehler steckt?
Danke vielmals!
Code:
FUNCTION_BLOCK "Mittelwertbildung"
TITLE =Gleitende Mittelwertbildung
VERSION : 0.1
VAR_INPUT
In : REAL ;
Anzahl : INT ;
Trigger : BOOL ;
Reset : BOOL ;
END_VAR
VAR_OUTPUT
Out : REAL ;
END_VAR
VAR
Messwert : ARRAY [1 .. 50 ] OF REAL ;
hm_1 : BOOL ;
hm_2 : BOOL ;
hm_3 : BOOL ;
hm_4 : BOOL ;
Zeiger_1 : DWORD ;
Zaehler_1 : INT ;
Zeiger_2 : DWORD ;
Zaehler_2 : INT ;
END_VAR
VAR_TEMP
hmdw_1 : REAL ;
RETTAR1 : DWORD ;
RETTAR2 : DWORD ;
END_VAR
BEGIN
NETWORK
TITLE =Inhalt der Adressregister sichern
LAR1 P##In;
TAR2 ;
+AR1 ;
TAR1 #RETTAR1;
TAR2 #RETTAR2;
NETWORK
TITLE =
U #Reset;
SPBN M001;
L 1;
T #Zaehler_1;
L P#0.0;
T #Zeiger_1;
L 0;
T #Out;
M001: NOP 0;
U #Reset;
FP #hm_1;
SPBN M002;
L P#0.0;
T #Zeiger_2;
L 50;
S002: T #Zaehler_2;
L #Zeiger_2;
LAR1 ;
L 0;
T DID [AR1,P#12.0];
L P#4.0;
L #Zeiger_2;
+D ;
T #Zeiger_2;
L #Zaehler_2;
LOOP S002;
M002: NOP 0;
U #Reset;
FN #hm_2;
SPBN M003;
M003: NOP 0;
U #Reset;
SPB ENDE;
U #Trigger;
FP #hm_3;
SPB M004;
SPA ENDE;
M004: NOP 0;
NETWORK
TITLE =Meßwerte schreiben
L #Zeiger_1;
LAR1 ;
L #In;
T DID [AR1,P#12.0];
L #Zaehler_1;
+ 1;
L #Anzahl;
>I ;
SPBN M005;
L 1;
T #Zaehler_1;
L P#0.0;
T #Zeiger_1;
SPA M006;
M005: NOP 0;
TAK ;
T #Zaehler_1;
L #Zeiger_1;
L P#4.0;
+D ;
T #Zeiger_1;
M006: NOP 0;
NETWORK
TITLE =Meßwertergebis ausgeben
L 0.000000e+000;
T #hmdw_1;
L P#0.0;
T #Zeiger_2;
L #Anzahl;
S001: T #Zaehler_2;
L #Zeiger_2;
LAR1 ;
L DID [AR1,P#12.0];
L #hmdw_1;
+R ;
T #hmdw_1;
L #Zeiger_2;
L P#4.0;
+D ;
T #Zeiger_2;
L #Zaehler_2;
LOOP S001;
L #hmdw_1;
L #Anzahl;
ITD ;
DTR ;
/R ;
T #Out;
NETWORK
TITLE =Adressregister wiederherstellen
ENDE: NOP 0;
LAR1 #RETTAR1;
LAR2 #RETTAR2;
END_FUNCTION_BLOCK