Variable kurzzeitig "blockieren"

bone666

Level-1
Beiträge
72
Reaktionspunkte
4
Zuviel Werbung?
-> Hier kostenlos registrieren
Tag zusammen,

folgendes Problem:
Ich habe 2 Schütze, welche nicht gleichzeitig anziehen dürfen. Es sollten 1-2s dazwischen liegen. Ich belege zwei Button in der Visu mit den Ausgangsvariablen meiner EL2624. Außerdem weise ich beiden Button eine deactivate input-Variable zu. Nun habe ich mit 2 Timern und ein paar IF-Abfragen folgendes realisiert.
Code:
//Inputs -> Status 
        bool_STS_contactor_active AT%I*:ARRAY[1..14] OF BOOL;
//Outputs -> Command 
        bool_CMD_contactor_on AT%Q*:ARRAY[1..7] OF BOOL;
//Timer and deactivate input
        timer1 :TON;
        timer2 :TON;
        bool_deactivate_input :ARRAY[1..2] OF BOOL;
Code:
IF bool_CMD_contactor_on[6] = TRUE THEN
        Timer1(IN:=TRUE, PT:=T#2S);
    END_IF

    IF bool_STS_contactor_active[12] = TRUE AND Timer1.PT <> Timer1.ET THEN
        bool_deactivate_input[2]:=TRUE;
        Timer1.IN:=FALSE;
    ELSE
        bool_deactivate_input[2]:=FALSE;
        Timer1.IN:=FALSE;
    END_IF
//----------------------------------------------    
    IF bool_CMD_contactor_on[7] = TRUE THEN
        Timer2(IN:=TRUE, PT:=T#2S);
    END_IF

    IF bool_STS_contactor_active[13] = TRUE AND Timer2.PT <> Timer2.ET THEN
        bool_deactivate_input[1]:=TRUE;
    ELSE
        bool_deactivate_input[1]:=FALSE;
        Timer2.IN:=FALSE;
    END_IF
Wenn ich nun den ersten Button drücke, wird der zweite für die 2s "verriegelt". Jedoch nur beim ersten mal. Danach müsste ich den Timer ja resetten oder so. Weiß gerade jedoch nicht wie ich das anstellen kann. Habe es mir so gedacht, dass ich Button 1 drücke, 2s ablaufen, dann erst Button 2 drückbar wird und das Ganze natürlich auch umgekehrt. Ich hoffe es ist einigermaßen verständlich und jemand kann mir einen Tipp geben.

MfG Bone
 
Hi,
hilft zwar nur bedingt, aber das Rad wurde schon gut erfunden:
OSCAT: INTERLOCK

GGf. dort nachsehen wie die es gemacht haben oder direkt benutzen...

Viel Spaß
Shrimps
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke für deine Antwort, jedoch macht der FB nicht das, was ich brauche. Er blockiert mir die andere Variable/Button solange bis ich die erste wieder auf FALSE setze. Probiere aber mal in dem FB rumzufuschen.
 
Danke für den Tipp Harald, ich komme dem Ziel etwas näher glaube ich. Habe TON durch TOF ersetzt und die Timer wie folgt belegt:
Code:
Timer1(IN:=NOT bool_STS_contactor_active[12] AND NOT Timer2.Q, PT:=T#2S);    

Timer2(IN:=NOT bool_STS_contactor_active[13] AND NOT Timer1.Q, PT:=T#2S);
Jedoch wird dadurch automatisch nach dem Start erstmal der zweite Button deaktiviert, solange bis ich den ersten drücke. Dann laufen die 2 Sekunden und der zweite wird danach aktiviert. Jedoch wird dann auch automatisch der erste deaktiviert und erst wieder aktiviert wenn ich den zweiten drücke. Danach sind beide drückbar. Ich bewege mich also sehr langsam dem Ziel entgegen -.- über einen weiteren Denkanstoß wäre ich sehr dankbar.

Bone
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Code:
contactor_1 := ... AND NOT TOF_Timer_2.Q;
TOF_Timer_1(IN:=contactor_1, PT:=T#2S);

contactor_2 := ... AND NOT TOF_Timer_1.Q;
TOF_Timer_2(IN:=contactor_2, PT:=T#2S);

PS: Buttons deaktivieren ist im Grunde überflüssig und regelmässig Quelle von "gut" gemeinter aber nicht genügend durchdachter "intelligenter" Unbedienbarkeit zur falschen Zeit. Das Programm muß einfach so programmiert sein, daß zur falschen Zeit gedrückte Buttons nichts bewirken.

Harald
 
Bin wohl zu blöd dafür :D aber probiere weiter rum

edit: Es funktioniert nun :D mit den ursprünglichen TONs

Code:
Timer1(IN:= bool_CMD_contactor_on[6] , PT:=T#2S);    
Timer2(IN:= bool_CMD_contactor_on[7] , PT:=T#2S);    

IF bool_STS_contactor_active[12] = TRUE AND  timer1.Q=FALSE THEN
    bool_deactivate_input[2]:=TRUE;
    ELSE
    bool_deactivate_input[2]:=FALSE;
END_IF
    
IF bool_STS_contactor_active[13] = TRUE AND  timer2.Q=FALSE THEN
    bool_deactivate_input[1]:=TRUE;
    ELSE
    bool_deactivate_input[1]:=FALSE;
END_IF
 
Zuletzt bearbeitet:
edit: Es funktioniert nun :D mit den ursprünglichen TONs

Code:
Timer1(IN:= bool_CMD_contactor_on[6] , PT:=T#2S);    
Timer2(IN:= bool_CMD_contactor_on[7] , PT:=T#2S);    

IF bool_STS_contactor_active[12] = TRUE AND  timer1.Q=FALSE THEN
    bool_deactivate_input[2]:=TRUE;
    ELSE
    bool_deactivate_input[2]:=FALSE;
END_IF
    
IF bool_STS_contactor_active[13] = TRUE AND  timer2.Q=FALSE THEN
    bool_deactivate_input[1]:=TRUE;
    ELSE
    bool_deactivate_input[1]:=FALSE;
END_IF
Hmm, nun hast Du eine ziemlich aufwendige Deaktivierung von Buttons programmiert.
(Sind das Buttons auf einem Touchscreen oder ähnliches? Ich wette, da bekomme ich trotzdem 2 Buttons quasi gleichzeitig gedrückt :cool: )
Nachtrag: Der Code sieht aus wie: wenn ein Schütz schon länger als 2 Sekunden an ist, dann darf man dann doch den anderen Schütz dazuschalten?

Und wie löst Du Deine eigentliche Aufgabe?
folgendes Problem:
Ich habe 2 Schütze, welche nicht gleichzeitig anziehen dürfen. Es sollten 1-2s dazwischen liegen.

Harald
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Es sollen Button in einer HMI-Visu werden, aber kein Touch und ich denke mit der Maus ist man nicht so schnell :D

Im Moment löse ich das Problem ja über die Button, wenn ich ein Schütz anziehen lassen möchte, ist der andere Button ja für 2s deaktiviert. Meinst du codetechnisch gelöst?
 
Es sollen Button in einer HMI-Visu werden, aber kein Touch und ich denke mit der Maus ist man nicht so schnell :D
Oooch, vom Drücken des einen Buttons bis zur Deaktivierung des anderen Buttons vergeht Zeit > 0 (hauptsächlich durch Kommunikation), innerhalb der ich bestimmt auch den anderen Button angeklickt bekomme. Notfalls nehme ich noch ein zweites HMI/Smartphone dazu. ;)

SPS-Programmieren hat nichts mit "ich denke" und "niemand ist schneller als ich gucken kann" zu tun. SPS-Programmieren hat als Ziel, ein Programm zu erstellen, was unter allen denkbaren und undenkbaren Bedingungen zu einem definierten garantierten Ergebnis kommt.

Harald
 
PS: ich begreife es nicht, daß heutzutage viel Arbeitszeit in Verschnörkelung von Bedienoberflächen gesteckt wird, lange bevor die eigentliche Aufgabe gelöst ist.

Vor > 30 Jahren habe ich noch gelernt: zuerst Funktion, dann Effizienz, dann Schönheit

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe 2 Schütze, welche nicht gleichzeitig anziehen dürfen. Es sollten 1-2s dazwischen liegen.
Das ist nicht ganz eindeutig.
(1) Nach mehrerem Durchlesen Deiner Beiträge scheint mir nun, Du meinst wirklich nur das Anziehen der Schütze, was nicht gleichzeitig passieren soll, sondern mit ein paar Sekunden Abstand (zur Vermeidung irgendwelcher Überlastungen?)
(2) Ich hatte dies bisher so interpretiert, daß die Schütze NIE gleichzeitig angezogen sein sollen, wie bei einer Wendeschützschaltung (2 Schütze für verschiedene Drehrichtungen)

Wie hast Du es gemeint?


Bei (1) verriegelt man die Schütze am einfachsten mit TP des anderen Schütz-Ausgangs.
Bei (2) verriegelt man die Schütze am einfachsten mit TOF des anderen Schütz-Ausgangs.
(alle Timer kann man auch auf TON umformen)

(1) Anzugs-Verriegelung
Code:
contactor_1 := ((button_start_1 AND NOT TP_Timer_2.Q) OR contactor_1) AND NOT button_stop_1;
TP_Timer_1(IN:=contactor_1, PT:=T#2S);

contactor_2 := ((button_start_2 AND NOT TP_Timer_1.Q) OR contactor_2) AND NOT button_stop_2;
TP_Timer_2(IN:=contactor_2, PT:=T#2S);

(2) komplett-Verriegelung
Code:
contactor_1 := (button_start_1 OR contactor_1) AND NOT button_stop_1 AND NOT TOF_Timer_2.Q;
TOF_Timer_1(IN:=contactor_1, PT:=T#2S);

contactor_2 := (button_start_2 OR contactor_2) AND NOT button_stop_2 AND NOT TOF_Timer_1.Q;
TOF_Timer_2(IN:=contactor_2, PT:=T#2S);


Bei nur 1..2s Verzögerung zwischen dem Schalten der Schütze würde ich nicht die Buttons deaktivieren, sondern nur wirkungslos machen (ignorieren oder verzögert auswerten). Es ist garnicht sicher, ob sich die Button-Deaktivierung in der Visu innerhalb von 2s überhaupt auswirkt.
Die Verriegelung im SPS-Programm muß sowieso programmiert werden, das Deaktivieren der Tasten kann zusätzlich programmiert werden, ist aber für die Funktion unnötig.
Wie lang sind eigentlich die Signale von der HMI-Visu?

Weißt Du eigentlich, wie man solche Schaltungen mit richtigen elektrischen Bauteilen (Tastern + Relais) realisieren würde? Im Grunde sollte es von der HMI auch nicht anders gemacht werden. Und echte materielle Taster kann man nicht "deaktivieren" oder "grau" oder "unsichtbar" machen.

Harald
 
(3) Anzugs-Verriegelung nach jedem, auch kurzem Anziehen des anderen Schütz
Code:
contactor_1 := ((button_start_1 AND NOT TOF_Timer_2.Q) OR contactor_1) AND NOT button_stop_1;
R_TRIG_1(CLK:=contactor_1);
TOF_Timer_1(IN:=R_TRIG_1.Q, PT:=T#2S);

contactor_2 := ((button_start_2 AND NOT TOF_Timer_1.Q) OR contactor_2) AND NOT button_stop_2;
R_TRIG_2(CLK:=contactor_2);
TOF_Timer_2(IN:=R_TRIG_2.Q, PT:=T#2S);

Harald
 
Nr. 1 ist die richtige Antwort, die Schütze dürfen generell zusammen angezogen sein, jedoch nicht gleichzeit anziehen. Keine Ahnung wie lange die Signalzeiten sind, kann man dies irgendwo nach lesen? Und nein habe keine Ahnung wie man es mit realer Hardware realisieren würde. Ist aber auch nur ein Laborprojekt, also nichts Wildes und fast alles idiotensicher:D

Sehe ich es richtig, dass contactor_1 die Outputvariable darstellt, welche ich an die Klemme gebe? Versuche später mal deine Vorgaben umzusetzen. Danke dir für deine Mühen.

MfG
Bone
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja, contactor_1 soll die Outputvariable an die Klemme sein.

Die Signal-Laufzeiten entsprechen in erster Näherung der Aktualisierungszeit der Variable, wie Du sie in der Visu projektierst. Dazu kommt noch eine normalerweise sehr kleine Zeit vom Drücken des Buttons bis zur "Ankunft" des Signals im SPS-Programm und Reaktion des SPS-Programms: Reaktionszeit der Visu vom Drücken des Buttons bis Senden der Message zur SPS + Übertragungszeit der Message über den Bus + Zykluszeit der SPS bis das SPS-Programm den neuen Signalzustand verarbeitet + Zykluszeit der SPS bis der neue Variablenzustand für das Lesen der Visu bereitgestellt ist.

Harald
 
Zurück
Oben