Komische Verhalten von Flankendetektor beim Einschalten

RMA

Level-1
Beiträge
400
Reaktionspunkte
24
Zuviel Werbung?
-> Hier kostenlos registrieren
Zur Zeit mache ich meine erste Erfahrungen mit CoDeSys und im großen und ganzen geht's ganz gut aber jetzt habe ich ein Problem wozu ich keine Lösung finde.

Es geht um ein Mobilbedienpanel das eine Heizung hat um Kontrast- und andere typische LCD Probleme bei niedrigen Temperaturen zu vermeiden. Es ist auch möglich die Heizung manuel ein- bzw. auszuschalten (für Testzwecke) und das Program dazu ist denkbar einfach: die Funktionstaste F5 wird überwacht und bei positver Flanke wird die Variable "Manuell_heizen_aktiv" umgeschaltet. Die ist eine Lokalvariable die in der Deklaration auf FALSCH gesetzt wird. Wenn "Manuell_heizen_aktiv" TRUE ist wird die Heizung eingeschaltet. Hier ein Ausschnitt aus dem code:

Code:
PROGRAM Display_Heizung
VAR
 TEMP_DISPLAY  AT%MB400  :INT;
 TEMP_EIN   AT%MB302  :INT;
 TEMP_AUS   AT%MB300  :INT;
 TEMP_ICON   AT%MX410.1 :BOOL  := FALSE;
 Manuell_heizen_aktiv   :BOOL  := FALSE;
END_VAR
 
....
 
IF F5_pos.q AND NOT Manuell_heizen_aktiv THEN
 Manuell_heizen_aktiv := TRUE;
ELSIF F5_pos.q AND Manuell_heizen_aktiv THEN
 Manuell_heizen_aktiv := FALSE;
END_IF
IF Manuell_heizen_aktiv THEN
 HEIZUNG_AN_AUS := TRUE;
END_IF

Das Problem ist, wenn das Bedienpanel eingeschaltet wird, wird "Manuell_heizen_aktiv " irgendwie auf TRUE gesetzt und die Heizung wird eingeschaltet obwohl es nicht nötig ist.

Wenn ich beide Variablen mit Forcen auf FALSE setze und dann das Forcen wieder ausschalte, bleiben beide Variablen auf FALSE bis ich entweder F5 drucke oder das Panel aus- und wieder einschalte, dann sind beide wieder auf TRUE gesetzt.

Wenn jemand ein Vorschlag hat was hier los ist, wäre ich sehr dankbar.
 
Hallo,

könnte es sein, daß bei der Initialisierung der Variablen (Neustart) ein falscher Wert eingetragen ist.

Setze mal deine F-Tasten explizit bei Anlauf zurück. Wenns dann ok ist, weißt Du, wo zu suchen ist



Grüße
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

du kannst auch eine art anlaufmerker einführen.
z.B.:

IF Counter>200 THEN
Anlauf_CPU:=TRUE;
ELSE
Counter:=Counter+1;
END_IF
deine anwahl kannst du dann nur zulassen wenn Anlauf_CPU - True ist
 
könnte es sein, daß bei der Initialisierung der Variablen (Neustart) ein falscher Wert eingetragen ist.
Das war auch mein Gedanke, gibt es eine Variable bei CoDeSys die sagt, dass die erste Zyklus läuft oder muss man so was selber basteln wie in Step7?

Wenn man es selber basteln muss, macht man das denn in PLC_PRG oder gibt es was analog zu OB100?
 
Hoi,

Arbeite nicht oft mit CodeSys, aber da hast doch normal einen- (oder in einem) Baustein "init".

Da sind die Anfangswerte eingetragen



LG
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,

ich habe eine "Anlauf_Zyklus" Variable kreiert und mit TRUE initialisiert, dann als letzter Befehl im Program die Variable abgefragt und wenn TRUE Heizung ausgeschaltet und "Anlauf_Zyklus" auf FALSE gesetzt - Problem gelöst!

Danke für die Hilfe.
 
Mal nebenbei,

Wenn die Heizung ein war, soll sie dann bei einem Neustart zwingend aus sein?

Thema "Remanenz".

Ich würde schon nachschauen, wo die var.. beschrieben/Initialisiert wird.
Das kann sich sonst durch dein ganzes Projekt "ziehen". Also mit weiteren variablen, die irgendwie nicht das machen, was du willst.



LG
 
Gute Idee!

Das Projekt ist einer dieser Standard-Programmen die immer wieder benutzt wird und nur angepasst werden muss. Wer weiß wie viele andere Leute vor mir damit herumgespielt haben!
 
Zurück
Oben