Timer TON

Isegrim
2009-11-09
2009-12-28
  • Isegrim - 2009-11-09

    Hallo Forum,

    in einem Schritt in Ablaufsprache lasse ich einen TON-Timer als Verzögerung laufen. Wenn die Schrittkette ein zweites mal durchlaufen wird, verzögert der Timer nicht, sonder schaltet sofort den Ausgang auf True, da ET bereits die komplette Zeit anzeigt.

    Wie kann ich den Timer wieder zurücksetzen, damit er mit jedem Durchlauf der Schrittkette funktioniert? IN auf False setzen alleine scheint nicht zu funktionieren.

    Vielen Dank im voraus.

    Klaus

     
  • Matze001 - 2009-11-09

    Hallo,

    normalerweise sollte das reichen.

    Hast du die Deklaration vom TON vielleicht irgendwo ein zweites mal verwendet? So äußert sich das oft.

    MfG

    Marcel

     
  • J Schohaus - 2009-11-10

    Hallo Klaus

    Deine Zeit wird warscheinlich nur im Schritt mit TRUE am Eingang aufgerufen. Der TON Baustein benötigt zum starten der Zeit aber einen Flankenwechsel. Das einfachste bei Schrittketten ist im Schritt davor die Zeit mit der Eingangsbedingung FALSE aufzurufen.

    mfG Jochen

     
  • Isegrim - 2009-11-14

    Hallo,

    danke für die Antworten. Das Problem konnte ich bisher nicht lösen.

    Die Startbedingung für den Timer wird in dem Schritt zurvor auf False gesetzt. Nur in dem Schritt, wo der Timer laufen soll, wird sie auf True gesetzt.

    In anderen Beiträgen habe ich gelesen, daß teiweise mit Triggern gearbeitet wird. Muß ich das hier auch machen?

     
  • bonatus - 2009-11-16

    Hallo,

    in AS kannst du die AS-Flags nutzen um solche Aufgaben zu meistern

    Wenn du in deiner Aktion eines Schrittes folgendes machst:

    Aktionsname.AC.Q - ist nur aktiv solabge der Schritt aufgerufen wird.

    Diese Flag kannst du als Eingang deines Timers benutzen.

    Bei mir klappts, es kann sein das du noch eine Bibo einbinden musst . Ich weiß jetzt leider nicht genau welche da ich unter TwinCat programmiere.

    Edit: Es ist nicht der Schrittname sondern der Aktionsname.

    gruß bonatus

     
  • Matze001 - 2009-11-16

    Hallo,

    ich habs in Erinnerung das es bei Codesys mit IEC-Bib Schritt.x ist.

    MfG

    Marcel

     
  • norser2006 - 2009-11-17

    Timer1: TON;

    EINGANG: BOOL;

    AUSGANG:BOOL;

    Timer1(IN:=EINGANG,PT:= T#1000ms);

    AUSGANG:=Timer1.Q;

    IF AUSGANG= TRUE THEN

    EINGANG:=FALSE;

    ELSE

    EINGANG:=TRUE;

    END_IF;

     
  • Nitrozin - 2009-11-18

    Moin,

    ( Instanz )

    T_WARTEN: TON;

    ( Wartezeit in AS )

    Schritt 'PAUSE' anlegen

    danach Transition 'T_WARTEN.Q'

    AWL-Code im Schritt Pause:

    LD PAUSE

    CAL T_WARTEN(IN:=PAUSE, PT:=T#10s)

    Gruß Volker

     
  • bonatus - 2009-11-19

    Hallo,

    hier nochmal mein vorschlag ohne viel schnickschnack

    IMG: AS_bsp.jpg

     
  • Matze001 - 2009-11-19

    Es geht noch einfacher!

    Doppelklick auf den Strich der Transition -> Programmiersprache Auswählen, und go...

    MfG

    Marcel

     
  • bonatus - 2009-11-19

    hallo,

    das problem ist aber das du in einer Transition keine Zuweisung machen kannst. Wenn du nur eine bestimmte Zeit warten willst ist das OK, aber wenn du z. B. ein Schütz schalten willst ist das über die Transition nicht möglich.

    gruß bonatus

     
  • Matze001 - 2009-11-19

    doch klar.

    Du setzt im Schritt z.B. Step18 dein Schütz.

    Dann steht in der Transition darunter

    Ton(IN:=Step18.x, PT:=t#5s)

    o.ä.

    Somit schaltet die Transition durch nachdem 5 Sekunden Schritt 18 gesetzt ist.

    MfG

    Marcel

     
  • bonatus - 2009-11-19

    Ja, könnt man auch machen...

     
  • Isegrim - 2009-12-26

    Hallo,

    Danke für die Antworten bisher, aber dieses Thema muß ich nochmal aufgreifen, ich habe das Problem noch nicht gelöst. Hier ist ein Beispielprogramm mit meinem Problem. Der Timer funktioniert nur ein mal.

    Vielen Dank im voraus,

    Klaus

    TIMER_TON.pro [24.25 KiB]

     
  • J Schohaus - 2009-12-27

    Hallo Klaus

    Dein Fehler ist das deine Zeit nur mit dem Zustand des Eingang TRUE

    Aufgerufen wird.

    Ändere Deine Ausgangsaktion folgend.

    bWeiter:=FALSE;
    bStart:= FALSE;
    timer(in:=bStart, PT:=tZeit);
    

    Dein Timer wird dadurch einmal mit FALSE aufgerufen so das beim nächsten Aufruf die Zeit eine neue Flanke erkennt.

    mfG Jochen

     
  • Isegrim - 2009-12-28

    Vielen Dank!

     

Log in to post a comment.