zeitmessung mit RS und TON

Daniel81
2010-04-06
2010-04-08
  • Daniel81 - 2010-04-06

    hallo

    ich möchte die zeit messen die vergeht zwischen zwei digitalen eingangssignalen. dies hab ich mit einem RS- und einem TON-Glied versucht. das TON-Glied gibt die zeit auch am ausgang aus solang das RS gesetzt ist, bloß wenn der Rücksetzt befehl kommt geht die zeit wieder auf Null. wie könnte ich diese zeit speichern und später auf einer visualisierung angezeigt bekommen?

     
  • Blitzy - 2010-04-06

    Such bitte erst im Forum, fuer viele Fragen gibts auch schon passende oder aehnliche Antworten, so auch fuer Deine:

    http://forum.3s-software.com/viewtopic.php?t=2300

    Lykke til!

     
  • Rolf-Geisler - 2010-04-07

    Hi,

    Die IEC kennt eine Funktion TIME(), die die CPU-Zeit millisekundengenau zurückgibt. Den Zeitabstand zwischen zwei Digitalsignalen kann man also messen, indem man an der Einschaltflanke des ersten Signals TIME() aufruft und das Ergebnis speichert, dann an der Einschaltflanke des zweiten Signals TIME() noch einmal aufruft und die Differenz zum ersten Aufruf bildet:

    VAR_INPUT
      ixIn1 : BOOL;
      ixIn2 : BOOL;
    END_VAR
    VAR
      lhIn1 : R_TRIG;
      lhIn2 : R_TRIG;
      ZeitIn1 : TIME;
      ZeitIn2 : TIME;
      ZeitAbstand : TIME;
    END_VAR
    (* Signalflanken suchen *)
    lhIn1 (CLK := ixIn1);
    lhIn2 (CLK := ixIn2);
    (* Signalflanken auswerten *)
    IF lhIn1.Q
    THEN (* erstes Signal kommt ==> CPU-Zeit auslesen und merken *)
         ZeitIn1 := TIME();
    END_IF;
    IF lhIn2.Q
    THEN (* zweites Signal kommt ==> CPU-Zeit auslesen und merken *)
         ZeitIn2 := TIME();
    END_IF;
    (* und jetzt den Zeitabstand berechnen *)
    ZeitAbstand := ZeitIn2 - ZeitIn1;
    

    Wenn Du direkt die Millisekunden brauchst, kannst Du mit TIME_TO_DINT eine Wandlung durchführen.

    Gruss Rolf

     
  • Daniel81 - 2010-04-07

    danke!!! werds ausprobieren

     
  • Daniel81 - 2010-04-07

    klasse es funktioniert!!!!

    was ist eigentlich der unterschied wenn ich linksklick auf Bausteine mach. zwischen Programm, Funktionsblock und Funktion????

    als ich den code als Funktion so wie oben geschrieben hab gings nicht obwohl ich meine beiden eingänge ixIn1 und ixIn2 genannt hab.

    habs dann als programm versucht ohne die beiden VAR_INPUT

    ixIn1 : BOOL; und

    ixIn2 : BOOL und es hat funktioniert, aber wieso gings vorher net???

    naja egal es geht ja jetzt. Rolf_Geisler sei DANK!!!

    wenn ich jetzt noch von meinen analogen ausgänge was rausbekomme bin ich glücklich!!!!

     
  • Erik Böhm - 2010-04-08

    Moin

    In Kürze:

    1. PRG: - Kann aus der Taskkonfiguration aufgerufen werden.

          - Hat beliebeig viele IN/OUT Parameter
      
    2. Funktion: - Hat nur EINEN Rückgabewert.

                - Belegt Speicher nur zur Laufzeit
      
    3. FunktionsBlock: - Ist Instanzierbar

                         - Hat beliebig viele IN/OUT Parameter
      
                         - Belegt Speicher dauernd (behält also auch die Variablenzustände bis zum nächsten Aufruf)
      

    Gruss

    Erik

     
  • gravieren - 2010-04-08

    Hi

    Es gibt bereits eine fertige Zeitmessung.

    Diese kann das was du suchst und mehr.

    Schau mal unter w www.oscat.de w nach.

     

Log in to post a comment.