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

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

Thema: TON-Timer mehrmals starten bzw. zurücksetzen

  1. #1
    Registriert seit
    07.05.2013
    Beiträge
    2
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ich bin recht neu in der SPS-Welt und bin gerade dabei ein Ablauf (in TwinCAT mit ST) zu programmieren. Allerdings bin ich gleich am Anfang auf ein Problem mit den Timern gestoßen. Ich verwende im Moment den TON.

    TON-Timer
    http://infosys.beckhoff.com/index.ph...echdat.htm&id=

    Was ich machen will:
    Ich toggle meinen Starbutton in der Visualisierung. Wenn er gedrückt wird soll ein Timer starten, nachdem 5sec verstrichen sind sollen dann entsprechende Ventile geschalten werden.
    Ich hab das mit zwei If-Schleifen realisiert. Beim ersten Durchlauf funktioniert alles wie es soll. Doch wenn ich den Startbutton ein zweites mal drücke, springt er mir gleich in die zweite If-Schleife,
    weil das Ausgangssignal Q vom TON immer noch TRUE ist. D.h. ich sollte in der zweiten Schleife den Timer zurücksetzen.
    Ich habe keine Ahnung wie ich das Problem lösen oder umgehen kann.
    Gibt es eine Möglichtkeit das Q oder ET (abgelaufene Zeit des Bausteins) zurückzusetzen?

    Hättet ihr mir evlt. eine Idee?

    Hier mein Programm:

    IF Startbutton THEN (*Wenn Startbutton gedrückt*)
    timer.PT:=T#5s; (*Sollwert Zeit*)
    timer.IN:=TRUE; (*Startsignal für Timer*)
    timer(); (*Aufrufen des Timers*)
    IF timer.Q THEN (*Wenn Timer abgelaufen*)
    Timer.IN:=FALSE;
    END_IF
    END_IF


    Gruß
    Jonas
    Zitieren Zitieren TON-Timer mehrmals starten bzw. zurücksetzen  

  2. #2
    Registriert seit
    12.04.2010
    Beiträge
    300
    Danke
    22
    Erhielt 54 Danke für 52 Beiträge

    Standard

    Code:
    IF Startbutton THEN (*Wenn Startbutton gedrückt*)
      timer.PT:=T#5s; (*Sollwert Zeit*)
      timer.IN:=TRUE; (*Startsignal für Timer*)
      timer(); (*Aufrufen des Timers*)
      IF timer.Q THEN (*Wenn Timer abgelaufen*)
       Timer.IN:=FALSE;
      END_IF
    END_IF
    Hi,
    a) Code immer unter [code] setzen --> Lesbarkeit
    b) timer fub immer aufrufen (zyklisch, keine Bedingungen)
    c) wenn timer.IN = 0 wird ==> rücksetzen erfolgt


    bg
    bb


    Code:
    timer.IN := Startbutton and not start_ventile
    timer ()
    if (timer.Q) then
      start_ventile := 1
    end_if

  3. #3
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.716
    Danke
    398
    Erhielt 2.398 Danke für 1.998 Beiträge

    Standard

    Hallo,
    was der wichtigste Teil des Beitrages von Bits'Bytes ist (der aber m.E. nicht so raus kam) ist, dass du den Timer-Aufruf in deine IF-Abfrage hinein-geschrieben hast. Das geht vom generellen Code-erstellen schon zu machen, bringt aber das Problem mit sich, das der TON (oder TOF) den Eingangs-Trigger ggf. nicht mitbekommt. Deshalb ist es sinnig (man sollte es sich auch gar nicht erst anders angewöhnen) es so zu machen, wie es bb in seinem Code-Beispiel gepostet hat ...

    Gruß
    Larry

  4. #4
    sefo ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    07.05.2013
    Beiträge
    2
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo Larry und bb,

    vielen Dank für die Hilfe. Jetzt tut es. Hat mir auch für das allgemein Verständnis weitergeholfen.
    Bei mir wurde der Timer immer in Schleife aufgerufen und mein timer.In-Signal war ständig True und dadurch war auch mein Q-Signal ständig auf True. -> Wie gesagt, bin noch Anfänger.

    Gibt es eigentlich einen bestimmten Grund, dass es mit den Timern so umständlich realisiert wurde? Sie haben sicherlich für gewissen Anwendungen ihre Berechtigung mit den gebotenen Funktionen.
    Aber ich kenn z.B. von anderen (SPS-/Motor-)Steuerungen die nicht nach IEC-Norm sind, dass es einen Befehl wie "wait" oder "delay" gibt, wo man einfach sagt "delay 50ms" und der nächste Befehl wird dann um 50ms verzögert.

  5. #5
    Registriert seit
    20.08.2007
    Beiträge
    112
    Danke
    13
    Erhielt 10 Danke für 8 Beiträge

    Standard

    Hi,
    darf man Fragen was für eine Steuerung du meinst. Es gibt zwei Echtzeitkonzepte bei SPSen. Das erst ist Codesys/Step7 (und noch viele andere) und das andere ist zum Beispiel Jetter, SIMOTION. Im ersten Konzept wird das Programm immer zyklisch (innerhalb einer definierten Zykluszeit) abgearbeitet und zwar immer von oben bis ganz unten. Bei ablaufgesteuerten Systemen ist das anders. Da wird das Programm bis zu der Stelle abgearbeitet wo es warten muss (, zum Beispiel weil eine Zeit noch nicht abgelaufen ist oder ein Eingang gerade nicht kommt), anschließend wird nur noch im Zykluszeitraster kontrolliert ob diese Bedingung erfüllt wird. Ist Sie dann irgendwann erfüllt, wird dann da weitergemacht.

    Gruß wonderfulworld
    Solls was Rechtes sein, oder darfs auch was von Siemens sein?

  6. #6
    Registriert seit
    25.11.2010
    Ort
    OWL
    Beiträge
    745
    Danke
    27
    Erhielt 164 Danke für 142 Beiträge

    Standard

    Zitat Zitat von sefo Beitrag anzeigen
    Gibt es eigentlich einen bestimmten Grund, dass es mit den Timern so umständlich realisiert wurde? Sie haben sicherlich für gewissen Anwendungen ihre Berechtigung mit den gebotenen Funktionen.
    Aber ich kenn z.B. von anderen (SPS-/Motor-)Steuerungen die nicht nach IEC-Norm sind, dass es einen Befehl wie "wait" oder "delay" gibt, wo man einfach sagt "delay 50ms" und der nächste Befehl wird dann um 50ms verzögert.
    Der Grund für die zyklsche Bearbeitung ist, dass eine SPS meistens eine Vielzahl voneiander unabhängiger Abläufe steuern soll. Bei einem "Wait" oder "Delay" in einem der Abläufe würden alle anderen Abläufe aber auch nicht weiter bearbeitet.

  7. #7
    Registriert seit
    20.08.2007
    Beiträge
    112
    Danke
    13
    Erhielt 10 Danke für 8 Beiträge

    Standard

    Zitat Zitat von StructuredTrash Beitrag anzeigen
    Der Grund für die zyklsche Bearbeitung ist, dass eine SPS meistens eine Vielzahl voneiander unabhängiger Abläufe steuern soll. Bei einem "Wait" oder "Delay" in einem der Abläufe würden alle anderen Abläufe aber auch nicht weiter bearbeitet.
    Ja das stimmt für zyklische Systeme, aber nicht für alle SPSen. Ich möchte ja nicht korinthenkacken, aber ich bin irgendwie von diesen ablaufgesteuerten Steuerungen begeistert, deshalb nochmal ne kleine Erklärung.
    In ablaufgesteuerten Systemen gibt es in der Regel sogar deutlich mehr Tasks (100 Tasks sind keine Seltenheit) als in zyklischen Systemen(hier befindet sich die Anzahl der Tasks doch eher im einstelligen Bereich). Der Trick in ablaufgesteuerten Steuerungen ist der, das die einzelnen Tasks schon in einer definierten garantierten Zykluszeit abgearbeitet werden, aber falls ein "Wait", "Delay" oder auch nur eine Weiterschaltbedingung fehlt, dann unterbricht der Scheduler(also der Taskverwalter) die Arbeitung und stellt der CPU eine andere Task zur Abarbeitung zur Verfügung. Er kontrolliert zwar im Zykluszeitraster ob die Weiterschaltbedingung erfüllt ist. Ist das nicht der Fall, dürfen die anderen Tasks wieder ran, ist es der Fall, dann wird da weitergemacht wo das letzte Mal aufgehört wurde. Diese Technik spart Zykluszeit und ist eigentlich schon irgendwie richtig elegant, aber hat sich soweit ich weiß nicht richtig durchgesetzt. Die einzigen Steuerungen die das meines Wissens einsetzen sind Jetter und SIMOTION. Gearbeitet hab ich mit diesen Steuerungen noch nicht, vielleicht find ich auch deshalb das Konzept so toll.
    Gruß wonderfulworld
    Solls was Rechtes sein, oder darfs auch was von Siemens sein?

  8. #8
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.716
    Danke
    398
    Erhielt 2.398 Danke für 1.998 Beiträge

    Standard

    @Wonderfulworld:
    Beachte aber bitte bei deinen Ausführungen, dass diese sich (wie du ja selber schreibst) auf die Ausnahme und nicht auch die gebräuchliche Regel beziehen - und schon gar nicht auf die ursprüngliche Frage des TE ...

    Gruß
    Larry

  9. #9
    Registriert seit
    13.03.2010
    Ort
    Nähe Koblenz
    Beiträge
    29
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Und genau über dieses Problem einer Ablaufsteuerung, also dass sie "wartet", stolpere ich zurzeit bei Jetter:

    Innerhalb des Ablaufes in einer Anlage habe ich nach jeder Bedingung Schrittmerker eingefügt um den Ablauf kontrollieren zu können und bei Festhängen einer z.B. pneumatischen Bewegung die Anlage zu stoppen. Der Bediener soll z.B. die Info bekommen: "Modul A, Schritt 5, Schieber nicht in AST gefahren". Es ist immer nur EIN Schrittmerker "true".

    Funktionsbeschreibung:
    Auswertung Schritt 1 nach Schritt 2
    Wenn Schritt 1 ausgeführt/aktiv >> maximal 1500mS warten auf Schritt 2, falls Schritt 1 früher fertig ist > wunderbar, weiter mit Auswertung Schritt 2 nach Schritt 3
    Wenn Schritt 2 nach 1500mS nicht aktiv >> Störung und Info

    Auswertung Schritt 2 nach Schritt 3
    Wenn Schritt 2 ausgeführt/aktiv >> maximal1500mS warten auf Schritt 3, falls Schritt 2 früher fertig ist > wunderbar, weiter mit Auswertung Schritt 3 nach Schritt 4
    Schritt 1 nach Schritt 2 Überwachung nicht mehr auswerten
    Wenn Schritt 3 nach 1500mS nicht aktiv >> Störung und Info

    Auswertung Schritt 3 nach Schritt 4
    Wenn Schritt 3 ausgeführt/aktiv >> maximal 1500mS warten auf Schritt 4, falls Schritt 3 früher fertig ist > wunderbar, weiter mit Auswertung Schritt 4 nach Schritt 5
    Schritt 2 nach Schritt 3 Überwachung nicht mehr auswerten
    Wenn Schritt 4 nach 1500mS nicht aktiv >> Störung und Info
    usw


    in (m)einer zyklische-SPS-Welt kein Problem: mehrere Timer, Timer stoppt wenn Bedingung nicht erfüllt, nächster Timer wird anhand der Eingangsbedingung gestartet.

    Nun steht bei JetSym ST/STX dass immer nur EIN Timer pro Task verfügbar ist. Mein Ansatz
    Code:
        // wenn Schritt_01: Überwachungszeit starten
        if step_01_PappToBelt then
            // warten auf nächste Bedingung => Schritt_02 wird aktiviert
            delay (tn_Steps_PappToBelt); //(T#1500mS);
            // wenn Schritt_02 nach Überwachungszeit nicht erreicht => Fehler Bedingung Schritt_01 nach Schritt_02
            If step_01_PappToBelt and not step_02_PappToBelt then
                 num_PappToBelt_StepError := 1;    // Die Nummer dient zum Anzeigen einer Fehlermeldung
                 b_PappToBelt_StepError := TRUE;    // Schnellstopmerker setzen
            End_If;
        End_If;
    
        // wenn Schritt_02: Überwachungszeit starten
        if step_02_PappToBelt then
            // warten auf nächste Bedingung => Schritt_03 wird aktiviert
            delay (tn_Steps_PappToBelt); //(T#1500mS);
            // wenn Schritt_03 nach Überwachungszeit nicht erreicht => Fehler Bedingung Schritt_02 nach Schritt_03
            If step_02_PappToBelt and not step_03_PappToBelt then
                num_PappToBelt_StepError := 2;    // Die Nummer dient zum Anzeigen einer Fehlermeldung
                b_PappToBelt_StepError := TRUE;    // Schnellstopmerker setzen
            End_If;
        End_If;
    
        // wenn Schritt_03: Überwachungszeit starten
        if step_03_PappToBelt then
            // warten auf nächste Bedingung => Schritt_04 wird aktiviert
            delay (tn_Steps_PappToBelt); //(T#1500mS);
            // wenn Schritt_04 nach Überwachungszeit nicht erreicht => Fehler Bedingung Schritt_03 nach Schritt_04
            If step_03_PappToBelt and not step_04_PappToBelt then
                num_PappToBelt_StepError := 3;    // Die Nummer dient zum Anzeigen einer Fehlermeldung
                b_PappToBelt_StepError := TRUE;    // Schnellstopmerker setzen
            End_If;
        End_If;
    arbeitet in der Praxis nicht, der erste delay wartet stur bis die Zeit abgelaufen ist. Bis dahin sind aber schon nächsten Schritte fertig und sollten überwacht werden. Der delay-Befehl wird also nicht "verworfen" sobald die (If)-Bedingung dafür = false wird.

    In der JetSym ST Hilfe habe ich einen Hinweis auf EIN "Zeitregister" für jeden Task gefunden. Das könnte zur Not ja manuell auf "0" gesetzt werden.
    Auch eine Start_Timer // End_Timer Anweisung wird dort beschrieben, die wohl anders als der delay arbeitet.
    Zu beidem finde ich nichts unter JetSym STX (= aktuelle Software) oder in den Registerbeschreibungen der JC340 (CPU).

    Bis auf solch "kleine lästige Haken und Ösen" ( ich vermisse auch einen "flash xxx mS"-Befehl für einen einfachen Blinker einer Leuchte) ist die Jetter und ihre Programmierungsweise für meinen aktuellen Anwendungsfall ideal. Ablaufsteuerung mit pneumatisch gesteuerten Bewegungen und 2 Servoachsen zum Transport und alles an Positionierung und so wird in einer CPU mit einer Programmiersofware abgegolten
    "Eine neue Art von Denken ist notwendig, wenn die Menschheit weiterleben will" (Albert Einstein)

    - SLC500
    - JetSym 4/5
    - JetView 5
    - S5/S7

  10. #10
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.716
    Danke
    398
    Erhielt 2.398 Danke für 1.998 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von S7-kub Beitrag anzeigen
    ...der erste delay wartet stur bis die Zeit abgelaufen ist. Bis dahin sind aber schon nächsten Schritte fertig und sollten überwacht werden. Der delay-Befehl wird also nicht "verworfen" sobald die (If)-Bedingung dafür = false wird.
    Hallo,
    das wäre aus meiner Sicht und meinem Verständnis eines Befehls Delay vollkommen unlogisch. Der Befehl an sich wird ja bedingungslos ausgeführt ...
    Die Aufgabe ist es also zu Starten und die Zeit abzulaufen und am Ende ggf. einen Rückgabewert zu liefern.
    Du mußt hier also aus meiner Sicht schon deine Vorgehensweise überdenken ...

    Gruß
    Larry

Ähnliche Themen

  1. Step5 FB Timer zurücksetzen
    Von Wolve-Hunter im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 29.09.2012, 07:24
  2. IEC Timer TON im Simatic S7
    Von spovi1 im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 23.12.2011, 06:21
  3. PLC_Sim mehrmals starten, NetLink
    Von Senator42 im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 23.09.2010, 12:48
  4. Baugruppen stoppen/zurücksetzen/starten
    Von esa_bs im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 18.06.2008, 15:21
  5. Timer in FB mehrmals verwenden
    Von Mike_S7 im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 10.12.2006, 12:38

Stichworte

Lesezeichen

Berechtigungen

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