kurz vor weg, ich bin absoluter Beginner in dem Bereich...
Ich habe ein kleines Programm geschrieben, das 2 Klimaanlagen (simuliert) prüfen und im Fall "x" von einer auf die andere Klimaanlage schalten soll.
PROGRAM PLC_PRG
VAR
Taster1 AT %IX0.0 : BOOL; ( Channel 1 of first 750-400 )
Stoerer1 AT %IX0.1 : BOOL; ( Channel 2 of first 750-400 )
Taster2 AT %IX0.2 : BOOL; ( Channel 1 of second 750-400 )
Stoerer2 AT %IX0.3 : BOOL; ( Channel 2 of second 750-400 )
Status1 AT %QX0.0 : BOOL; ( Channel 1 of third 750-501 )
Status2 AT %QX0.1 : BOOL; ( Channel 2 of third 750-501 )
END_VAR
IF Stoerer1 = FALSE AND Stoerer2 = FALSE THEN
IF Taster1 = TRUE THEN
Status1 := TRUE;
Status2 := FALSE;
END_IF
IF Taster2 = TRUE THEN
Status1 := FALSE;
Status2 := TRUE;
END_IF
END_IF
IF Stoerer1 =TRUE AND Stoerer2 = FALSE THEN
Status1 := FALSE;
Status2 := TRUE;
END_IF
IF Stoerer1 = FALSE AND Stoerer2 = TRUE THEN
Status1 := TRUE;
Status2 := FALSE;
END_IF
IF Stoerer1 = TRUE AND Stoerer2 = TRUE THEN
Status1 := FALSE;
Status2 := FALSE;
END_IF
IF Stoerer1 = FALSE AND Stoerer2 = FALSE AND Status1 = FALSE AND Status2 = FALSE THEN
Status1 := TRUE;
END_IF
Bei dem Störer handelt es sich um einen RASTER, bei dem Taster um einen TASTER.
Ich habe nun das Problem, das ich es nicht realisiert bekomme, die Systeme auszuschalten sondern immer ein Gerät läuft oder eben beide gestört sind.
Hat jemand von euch einen Tipp oder eine Idee wie ich das am besten realisieren kann?
Die Klimaanlagen müssen auch auszuschalten sein...
Vielen lieben Dank schon mal vorab für's lesen.
-Bei Antworten und Tipps ein noch viel grösseres DANKE!
Liebe Grüße,
David
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
case iState of
1:
Prüfen ob min eine von beiden bereit, wenn ja, dann einschalten und Taster abfragen, wenn nein, dann iState = 10 usw...
10:
;
20:
;
end_case
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Achso, also das Problem einfach umgehen...
Hmm, joa... ich bastel damit gleich noch mal rum.
Allerdings läuft mir die Zeit davon, das ist ein Projekt das heute Nachmittag fertig sein soll
Mir fehlen nur noch zwei Feinheiten, ein TIMER der automatisch nach 60 Sekunden von einer auf die anderen Anlage schaltet und dann eben ein Schalter der jeweils die Anlagen komplett ausschaltet. Und da verzweifel ich leider Gottes dran.
Danke dir für deine Anregung mit dem "CASE"!!
Liebe Grüße aus Dortmund,
David
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
der Timer funktioniert soweit.
Allerdings weiss ich leider nicht wo ich den Timer positionieren soll...
Denn die anderen Funktionen dürfen dadurch nicht beeinträchtigt werden und der Timer soll immer wieder Starten wenn der Status gewechselt hat. ...Aaaarrrrrrr, es tut mir leid, ich bin leider ein blutiger Anfänger :-/
Liebe Grüße,
David
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Dann musst du als Startbedingung (IN) für den Timer das Wechselereignis eintragen (also z.B. Status1 <> Status1Old) oder so.
Der Timer startet immer bei steigender Flanke von IN.
Wo du den dann positionierst wird wohl egal sein.
Denn wie sagt Sepp Herberger:
Nach dem Ablauf ist vor dem Ablauf .
Ich hab dann aber demnächst Feierabend.
Ich kuck heut abend dann noch mal rein ob du schon verzweifelt bist.
Gruß
Erik
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hallo CoDeSys-Gemeinde,
kurz vor weg, ich bin absoluter Beginner in dem Bereich...
Ich habe ein kleines Programm geschrieben, das 2 Klimaanlagen (simuliert) prüfen und im Fall "x" von einer auf die andere Klimaanlage schalten soll.
PROGRAM PLC_PRG
VAR
Taster1 AT %IX0.0 : BOOL; ( Channel 1 of first 750-400 )
Stoerer1 AT %IX0.1 : BOOL; ( Channel 2 of first 750-400 )
Taster2 AT %IX0.2 : BOOL; ( Channel 1 of second 750-400 )
Stoerer2 AT %IX0.3 : BOOL; ( Channel 2 of second 750-400 )
Status1 AT %QX0.0 : BOOL; ( Channel 1 of third 750-501 )
Status2 AT %QX0.1 : BOOL; ( Channel 2 of third 750-501 )
END_VAR
IF Stoerer1 = FALSE AND Stoerer2 = FALSE THEN
IF Taster1 = TRUE THEN
Status1 := TRUE;
Status2 := FALSE;
END_IF
IF Taster2 = TRUE THEN
Status1 := FALSE;
Status2 := TRUE;
END_IF
END_IF
IF Stoerer1 =TRUE AND Stoerer2 = FALSE THEN
Status1 := FALSE;
Status2 := TRUE;
END_IF
IF Stoerer1 = FALSE AND Stoerer2 = TRUE THEN
Status1 := TRUE;
Status2 := FALSE;
END_IF
IF Stoerer1 = TRUE AND Stoerer2 = TRUE THEN
Status1 := FALSE;
Status2 := FALSE;
END_IF
IF Stoerer1 = FALSE AND Stoerer2 = FALSE AND Status1 = FALSE AND Status2 = FALSE THEN
Status1 := TRUE;
END_IF
Bei dem Störer handelt es sich um einen RASTER, bei dem Taster um einen TASTER.
Ich habe nun das Problem, das ich es nicht realisiert bekomme, die Systeme auszuschalten sondern immer ein Gerät läuft oder eben beide gestört sind.
Hat jemand von euch einen Tipp oder eine Idee wie ich das am besten realisieren kann?
Die Klimaanlagen müssen auch auszuschalten sein...
Vielen lieben Dank schon mal vorab für's lesen.
-Bei Antworten und Tipps ein noch viel grösseres DANKE!
Liebe Grüße,
David
Moin
Ich hab das jetzt 3 mal durchgelesen und immer noch nicht verstanden was eigentlich passieren soll...
Aber generell, hast du schon mal an eine 'case' Anweisung gedacht ?
Gruß
Erik
Ja, da die Schalter (Taster + Störer) BOOL sind, geht's nicht. Denn CASE benötigt INT...
Liebe Grüße,
David
Servus
Das ist mir auch schon bekannt
Ich dachte an eine StateMachine wie:
case iState of
1:
Prüfen ob min eine von beiden bereit, wenn ja, dann einschalten und Taster abfragen, wenn nein, dann iState = 10 usw...
10:
;
20:
;
end_case
Achso, also das Problem einfach umgehen...
Hmm, joa... ich bastel damit gleich noch mal rum.
Allerdings läuft mir die Zeit davon, das ist ein Projekt das heute Nachmittag fertig sein soll
Mir fehlen nur noch zwei Feinheiten, ein TIMER der automatisch nach 60 Sekunden von einer auf die anderen Anlage schaltet und dann eben ein Schalter der jeweils die Anlagen komplett ausschaltet. Und da verzweifel ich leider Gottes dran.
Danke dir für deine Anregung mit dem "CASE"!!
Liebe Grüße aus Dortmund,
David
Na dann mach doch einfach am Schluss des Ablaufs einen Schalter:
if bAllOff then
Status1 := FALSE;
Status2 := FALSE;
end_if
Timer etwa so:
Timer: TON;
Timer(IN:= Status1 or Status2,PT := t#60s);
if Timer.Q then
Status1 := not Status1;
Status2 := not Status2;
end_if
Gruß Erik
Hallo Erik,
der Timer funktioniert soweit.
Allerdings weiss ich leider nicht wo ich den Timer positionieren soll...
Denn die anderen Funktionen dürfen dadurch nicht beeinträchtigt werden und der Timer soll immer wieder Starten wenn der Status gewechselt hat. ...Aaaarrrrrrr, es tut mir leid, ich bin leider ein blutiger Anfänger :-/
Liebe Grüße,
David
Dann musst du als Startbedingung (IN) für den Timer das Wechselereignis eintragen (also z.B. Status1 <> Status1Old) oder so.
Der Timer startet immer bei steigender Flanke von IN.
Wo du den dann positionierst wird wohl egal sein.
Denn wie sagt Sepp Herberger:
Nach dem Ablauf ist vor dem Ablauf .
Ich hab dann aber demnächst Feierabend.
Ich kuck heut abend dann noch mal rein ob du schon verzweifelt bist.
Gruß
Erik