Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 18

Thema: Variable kurzzeitig "blockieren"

  1. #1
    Registriert seit
    01.09.2015
    Beiträge
    72
    Danke
    10
    Erhielt 3 Danke für 3 Beiträge

    Beitrag


    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
    Zitieren Zitieren Variable kurzzeitig "blockieren"  

  2. #2
    Registriert seit
    16.03.2014
    Beiträge
    359
    Danke
    74
    Erhielt 45 Danke für 38 Beiträge

    Standard

    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

  3. #3
    Registriert seit
    01.09.2015
    Beiträge
    72
    Danke
    10
    Erhielt 3 Danke für 3 Beiträge

    Standard

    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.

  4. #4
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.197
    Danke
    926
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    Zitat Zitat von bone666 Beitrag anzeigen
    Ich habe 2 Schütze, welche nicht gleichzeitig anziehen dürfen. Es sollten 1-2s dazwischen liegen.
    Wir "alten" SPS-Programmierer haben sowas früher ohne fertige Bausteine einfach mit TOF an der Ausgangszuweisung und Verriegelung mit dem jeweils anderen TOF gemacht.

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  5. #5
    Registriert seit
    01.09.2015
    Beiträge
    72
    Danke
    10
    Erhielt 3 Danke für 3 Beiträge

    Standard

    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

  6. #6
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.197
    Danke
    926
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    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
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  7. #7
    Registriert seit
    01.09.2015
    Beiträge
    72
    Danke
    10
    Erhielt 3 Danke für 3 Beiträge

    Standard

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

    edit: Es funktioniert nun 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
    Geändert von bone666 (19.04.2016 um 15:48 Uhr)

  8. #8
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.197
    Danke
    926
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    Zitat Zitat von bone666 Beitrag anzeigen
    edit: Es funktioniert nun 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 )
    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?
    Zitat Zitat von bone666 Beitrag anzeigen
    folgendes Problem:
    Ich habe 2 Schütze, welche nicht gleichzeitig anziehen dürfen. Es sollten 1-2s dazwischen liegen.
    Harald
    Geändert von PN/DP (19.04.2016 um 16:27 Uhr)
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  9. #9
    Registriert seit
    01.09.2015
    Beiträge
    72
    Danke
    10
    Erhielt 3 Danke für 3 Beiträge

    Standard

    Es sollen Button in einer HMI-Visu werden, aber kein Touch und ich denke mit der Maus ist man nicht so schnell

    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?

  10. #10
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.197
    Danke
    926
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von bone666 Beitrag anzeigen
    Es sollen Button in einer HMI-Visu werden, aber kein Touch und ich denke mit der Maus ist man nicht so schnell
    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
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  11. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    weißnix_ (19.04.2016)

Ähnliche Themen

  1. Antworten: 10
    Letzter Beitrag: 19.02.2015, 12:19
  2. Antworten: 11
    Letzter Beitrag: 04.11.2012, 11:54
  3. Skripthilfe "if" -> "then" variable
    Von SPSlash im Forum HMI
    Antworten: 10
    Letzter Beitrag: 06.06.2012, 18:05
  4. "Index Pulse", "Home Switch" und "Position Limit Switch"
    Von senmeis im Forum Antriebstechnik
    Antworten: 3
    Letzter Beitrag: 07.03.2011, 11:21
  5. Antworten: 7
    Letzter Beitrag: 05.03.2008, 07:38

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •