Betriebsstundenzähler (Sekunden bzw. Milisekunden)

d.t.m
2010-02-21
2010-02-24
  • d.t.m - 2010-02-21

    Servus,

    leider muss sich meine Wago von der Oscat-Bibliothek trennen, da ich die Bibliothek trotz aller Versuche nicht so klein bekomme, dass ich sie mit den anderen benötigten Bibliotheken auf die Steuerung bekomme.

    Bis dato habe ich den 'Ontime' Betriebsstundenzähler verwendet, der über die entsprechende Variable auch direkten Zugriff auf die Sekunden ermöglicht hat.

    Hintergrund ist, dass ich für meine Pelletförderschnecke einen Betriebsstundenzähler zwecks Bestimmung des verbrauchten Brennstoffs benötige. Über DI werden die Taktsekunden gelesen, allerdings auch mal halbe Sekunden. Für die Berechnung der Brennstoffmenge muss ich in der Lage sein, nicht nur die Minuten, sondern auch die Sekunden/Milisekunden in die Berechnung mit einzubeziehen.

    'Ontime' gibt direkt die Sekunden aus, so dass man prima von dort ausgehend alle Berechnungen anstellen kann.

    Gibt es eine Möglichkeit, die Sekunden aus "FbBetrDauer" (Bibliothek "Gebäude allgemein" von Wago) auszulesen? Oder kann jemand einen anderen Betriebsstundenzähler empfehlen, der frei zugänglich ist?

    Danke!

    Grüße

    Daniel

     
  • gravieren - 2010-02-21

    Hi

    Ich würde es mal im w www.oscat.de w versuchen.

     
  • d.t.m - 2010-02-21

    Zitat:
    leider muss sich meine Wago von der Oscat-Bibliothek trennen

    trotzdem danke..

    Ich kann es nicht glauben dass es dafür keinen fertigen Baustein von Wago gibt. Ich kann leider kein ST, damit ist es vermutlich relativ leicht umzusetzen(?).

     
  • Matze001 - 2010-02-22

    Hallo ich habe einen selbst in ST programmiert!

    Werde ihn nachher hier einstellen!

    MfG

    Marcel

     
  • d.t.m - 2010-02-22

    Danke Marcel!

    Habe inzwischen angefangen die Oscat-Bibliothek zu "zerhackstückeln", komme da aber bei einer Fehlermeldung nicht weiter (habe ich im Oscat-Forum gepostet).

    Bin dennoch an deiner Lösung interessiert!

    Grüße

    Daniel

     
  • Matze001 - 2010-02-22
    FUNCTION_BLOCK FB_Betriebszeit
    VAR_INPUT
       Eingang: BOOL;
       Zeitstempel: DT;
    END_VAR
    VAR_OUTPUT
       Betriebszeit_Gesammt: TIME;
    END_VAR
    VAR
       R_TRIG_Eingang: R_TRIG;
       F_TRIG_Eingang: F_TRIG;
       Einschaltzeit: TIME;
       Ausschaltzeit: TIME;
       Zeitraum: TIME;
    END_VAR
    
    R_TRIG_Eingang(CLK:=Eingang);
    F_TRIG_Eingang(CLK:=Eingang);
    IF R_TRIG_Eingang.Q THEN
    Einschaltzeit:= DT_TO_TIME (Zeitstempel);
    END_IF
    IF F_TRIG_Eingang.Q THEN
    Ausschaltzeit:= DT_TO_TIME (Zeitstempel);
    Zeitraum:= Ausschaltzeit - Einschaltzeit;
    Betriebszeit_Gesammt:= Betriebszeit_Gesammt + Zeitraum;
    END_IF
    

    Nicht schön aber selten

    MfG

    Marcel

     
  • d.t.m - 2010-02-22

    Vielen Dank! Ich arbeite noch an der abgespeckten Oscat-Bibliothek - wenn das nicht hinhaut werde ich deinen nehmen!

    Grüße

    Daniel

     
  • Matze001 - 2010-02-22

    Problem an meinem:

    die Zeit wird erst beim Ausschalten aktualisiert.

    Man kann es auch mit nem CTU machen... denke das werd ich auch tun.

    MfG

    Marcel

     
  • Anonymous - 2010-02-22

    Originally created by: jl

    Hallo,

    Wie wäre es damit:

    IF Eingang THEN

      Betriebsstd := Betriebsstd + Zykluszeit; (*Zykluszeit des Tasks in ms)*)
    

    END_IF

     
  • Pitsch - 2010-02-22

    Hallo

    Versuchs mal damit:

    Im Deklarationsteil:

    FUNCTION_BLOCK BETR_STD_COUNTER
    VAR_INPUT
       START:BOOL;      (*Start Eingang*)
    END_VAR
    VAR_OUTPUT
       OUTSEK:BYTE;   (*Sekundenzähler*)
       OUTMIN:BYTE;   (*Minutenzähler*)
       OUTSTD:DINT;   (*Stundenzähler*)
    END_VAR
    VAR
       TPInst:TP;         (*Zeitgeber*)
       TIMESTART:BOOL;   (*Zeitstarter*)
    END_VAR
    VAR RETAIN PERSISTENT
       TIMESEK:BYTE;      (*Sekundenzähler*)
       TIMEMIN:BYTE;      (*Minutenzähler*)
       TIMESTD:DINT;      (*Stundenzähler*)
    END_VAR
    

    Dann im Codeteil:

    (*Betriebsstundenzähler*)
    IF START = TRUE THEN
       IF TPInst.Q = FALSE THEN               (*Wenn Zeit (1 Sek) abgelauffen ist*)
          TIMESTART := TRUE;                  (*Restart initialisieren*)
          TPInst(IN := TIMESTART, PT := T#1s);   (*Timer für 1 Sek*)
          TIMESEK := TIMESEK + 1;            (*Sekundenzähler um 1 erhöhen*)
       ELSE
          TIMESTART := FALSE;               (*Wenn Zeit noch läuft, (wird für ein paar Zyklen der Fall sein!) Restart deaktivieren*)
          TPInst(IN := TIMESTART);               (*Impuls-Generator Start-Eingang auf FALSE setzen*)
       END_IF
       IF TIMESEK > 59 THEN                  (*Nach 60 Sekunden*)
          TIMESEK := 0;                        (*Sekundenzähler auf null stellen*)
          TIMEMIN := TIMEMIN + 1;               (*Minutenzähler um 1 erhöhen*)
       END_IF
       IF TIMEMIN > 59 THEN                  (*Nach 60 Minuten*)
          TIMEMIN := 0;                        (*Minutenzähler auf null stellen*)
          TIMESTD := TIMESTD + 1;            (*Stundenzähler um 1 erhöhen*)
       END_IF
       IF TIMESTD > 2147483600 THEN          (*Ueberlauf in 245146 Jahren verhindern*)
          TIMESTD := 0;                        (*Stundenzähler auf null stellen*)
       END_IF
       OUTSEK := TIMESEK;                     (*Sekunden an Ausgang weitergeben*)
       OUTMIN := TIMEMIN;                     (*Minuten an Ausgang weitergeben*)
       OUTSTD := TIMESTD;                     (*Stunden an Ausgang weitergeben*)
    END_IF
    

    Viel Spass beim Ausprobieren!

    Mit freundlichen grüssen! Pitsch

     
  • Matze001 - 2010-02-22

    Der Baustein ist besser Aber ich denke der Überlauf in den paar Jahren kann man sich schenken, ist eher optik!

    MfG

    Marcel

     
  • d.t.m - 2010-02-24

    Danke euch nochmal für eure Beteiligung.

    Ich habe die Oscat-Bib reduzieren können.

    Eure Beispiele sind prima zum Lernen geeignet! Wenn ich dazu komme werde ich sie auf jeden Fall zusätzlich testen!

    Grüße

    Daniel

     

Log in to post a comment.