Instanzen deklariert und alle verhalten sich gleich? Codesys 2.3x

KingHelmer

Level-1
Beiträge
1.076
Reaktionspunkte
139
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo liebes Forum,

ich habe schon wieder ein Problem,

innerhalb eines Funktionsblockes rufe ich 3 Instanzen des FB-Stromstoss aus der Gebaeude_Allgemein.lib auf.
Diese FB werden von 3 Tastern getriggert und schreiben jeweils auf 3 verschiedene lokale Variablen.

Nach dem Test und der Nicht-Funktion meines Programmes, gehe ich irgendwie davon aus, dass sich alle FB-Stromstoss Instanzen
genau gleich verhalten. Also wenn bei der einen Instanz der Ausgang FALSE ist, ist er es zu diesem Zeitpunkt bei allen.

Schaut doch mal bitte kurz über diesen Code und sagt mir, was der Fehler ist oder wie ich es lösen kann oder beides.
Auf jeden Fall bleibt der Ausgang der FB-Stromstoss auf FALSE, egal welchen Taster ich drücke.

Code:
Instanz1_Fb_Stromstoss(
    xTaster:=OP_FREI_ON_OFF ,
    xZenAUS:= ,
    xZenEIN:= ,
    bResetModus:=,
    xAktor=>Merker_OP_FREI );
IF Merker_OP_FREI = TRUE
THEN Rueckmeldung_OP_FREI := TRUE;
Instanz2_FB_Stromstoss.xZenAUS:=TRUE;
Instanz3_FB_Stromstoss.xZenAUS:=TRUE;
END_IF;

Instanz2_Fb_Stromstoss(
    xTaster:=OP_Desinfektion_ON_OFF ,
    xZenAUS:= ,
    xZenEIN:= ,
    bResetModus:=,
    xAktor=>Merker_OP_Desinfektion);
IF Merker_OP_Desinfektion = TRUE
THEN Rueckmeldung_OP_Desinfektion := TRUE;
Instanz1_FB_Stromstoss.xZenAUS:=TRUE;
Instanz3_FB_Stromstoss.xZenAUS:=TRUE;
END_IF;

Instanz3_Fb_Stromstoss(
    xTaster:=OP_Betrieb_ON_OFF,
    xZenAUS:= ,
    xZenEIN:= ,
    bResetModus:=,
    xAktor=>Merker_OP_Desinfektion);
IF Merker_OP_Desinfektion = TRUE
THEN Rueckmeldung_OP_Betrieb := TRUE;
Instanz2_FB_Stromstoss.xZenAUS:=TRUE;
Instanz1_FB_Stromstoss.xZenAUS:=TRUE;
END_IF;


Grüße, Flo
 
Ich kenne den FB nicht, aber nachdem die Eingänge ".xZEnAUS" einmal auf TRUE gesetzt sind, werden sie nie wieder FALSE. Ist das so richtig?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,

keine Ahnung, ob das mit Deinem fehler zu tun hat:

Dein Eingang "xZenAus" wird beim Aufruf nicht belegt!

-> Du musst, wenn Du den Schaltzustand außerhalb des Aufrufs belegen willst, diesen dann beim Aufruf weglassen.

(Also "xZenAus:=," löschen)
 
Hast du den Baustein auch wirkich 3 mal instanziert ?
Eventuell nur 1 mal angelegt und dreimal aufgerufen ???

MfG CAS
 
Hallo Leute,

Danke für eure Antworten.
Ich hatte diesen FB im PLC_PRG instanziert und dort temporät direkt TRUE und FALSE als "Platzhalter" damit das Projekt korrekt ist, eingefügt.
Da ich in der Viso auf die lokalen Variablen getastet habe wie z.B. "OP_FREI_ON_OFF" hatte dies überhaupt keine Auswirkung auf den FB, da das FALSE im PLC_PRG anscheinend Priorität gegenüber dem Tasten der lokalen Variablen in der VIsu hat.

ich habe also die FALSE und TRUE durch glob. Variablen ersetzt und diese dann in der VISU getastet.
Dann hat es funktioniert bzw. nicht funktioniert, was aber dann an der IF THEN ELSE Programmierung lag.

Mittlerweile ist das Problem ganz einfach gelöst durch folgendes:

Code:
IF OP_FREI_ON_OFF = TRUE
THEN Rueckmeldung_OP_FREI := TRUE;
Rueckmeldung_OP_Desinfektion := FALSE;
Rueckmeldung_OP_Betrieb:= FALSE;
END_IF;


IF OP_Desinfektion_ON_OFF = TRUE
THEN Rueckmeldung_OP_Desinfektion := TRUE;
Rueckmeldung_OP_Frei := FALSE;
Rueckmeldung_OP_Betrieb:= FALSE;
END_IF;

IF OP_Betrieb_ON_OFF = TRUE
THEN Rueckmeldung_OP_Betrieb := TRUE;
Rueckmeldung_OP_Frei := FALSE;
Rueckmeldung_OP_Desinfektion:= FALSE;
END_IF;

Ganz schlicht und einfach und es funktioniert wie es soll!

Grüße und danke nochmal an alle!

FLO
 
Zurück
Oben