Welcome to our new forum
All users of the legacy CODESYS Forums, please create a new account at account.codesys.com. But make sure to use the same E-Mail address as in the old Forum. Then your posts will be matched. Close

F_TRIG und TON?

2023-07-13
2023-07-19
  • codesys-newbie - 2023-07-13

    Hallo,

    wenn man F_TRIG wie folgt nutzt

    VARIABLEN-BERECH:

    VAR
        S:F_TRIG;
    END_VAR
    

    CODE-BERECH:

    S(CLK:=Input_Bit);
    

    Dann wartet die PLC solange, bis beim Eingang Input_Bit eine fallende Flanke detektiert wird, dann wird S.Q auf True gesetzt.

    Hier hätte ich die Frage.

    Es scheint für mich, dass der restlche Code vollkommen unabhängig davon läuft. Wird mit dem obigen Befehl eine Art Interrupt gesteuert? Also fallende Flanke erkannt und der Interrupt ändert das Bit S.Q ?

    Ähnliche Frage hätte ich bei den Timern TON.

    VARIABLEN-BERECH:

    VAR
        Timer:TON;
    END_VAR
    

    CODE-BERECH:

    Timer(IN:=TRUE, PT:=T#1S);
    

    Dies Startet einen Timer, der Timer.Q nach Ablauf der Timer Zeit resettet. Das scheint mir auch vollständig unabhängig vom restlichen Code zu funktionieren. Läuft das auch über eien Interrupt?

    Danke schonmal für die Hilfe.

    schöne Grüße

     
  • bruno-roth - 2023-07-17

    Hallo,

    du bist mit der Arbeitsweise einer PLC nicht so vertraut. Die Bausteine und Funktione in 61131 werdern immer zyklisch abgearbeitet.Vieleicht schaust du dir mal diese Videos an https://www.youtube.com/@automationTutorials

    dann verstehst du das

    Grüße

     
  • codesys-newbie - 2023-07-19

    Ja die SPS arbeitet zyklisch. Das bedeutet, ja, dass der Code von oben nach unten ausgeführt und nach Beendigung des Codes nach einer gewissen Zeit wiederholt wird.

    Zur Funktion von TON:
    Ich sehe, dass, wenn ich einern Timer TON in eine IF-Bedingung lege, sodass der Timer nicht wieder ausgeführt wird, dann zählt dieser nicht weiter.

    IF firstTime THEN

    firstTime := FALSE;
    Zeitobjekt(IN := ZeitobjektHLP, PT := T#2S);
    

    END_IF

    Daraus schließe ich, dass diese Timer Funktion einfach die Zykluszeit des Programms und die Anzahl der Zyklen nutzt, um zu erkennen, wann die Timer-Zeit abgelaufen ist. Stimmt das?

    Das bedeutet das ja, dass auch F_TRIG auf die Schnittstelle schaut, sobald die Zeile ausgeführt wird, aber kann es nicht sein, dass F_TRIG ausgeführt wird, und danach die fallende Flanke im Input auftaucht, sodass beim nächsten ausführen der F_TRIG Zeile die fallende Flanke bereits weg ist?

     

Log in to post a comment.