Laufzeit von Motor ausgeben

chefren_new

Level-1
Beiträge
138
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute

möchte germe mit meiner c314-dp ein Laufzeit von einem Motor ausgeben.

Aufgabe:
Der Motor wird mehrmals am Tag eine unbestimmte Zeit eingeschaltet.

möchte gerne die Summer Laufzeit als ST:MIN:SEK als TOD haben.
Wie kann ich das anstellen.
Hat jemand eine Idee wie man an diese Sache ran gehen kann.

DANKE

Gruß
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Nimm doch einfach einen Timer der eine Sekunde lang läuft... wenn der Timer abgelaufen ist dann erhöhst du den Wert in einem DWORD um 1 und startest den Timer dann neu.

Mit deinem Panel rechnest du dann das DWORD in TOD um ;)

MfG
HelixX23
 
Nimm doch einfach einen Timer der eine Sekunde lang läuft... wenn der Timer abgelaufen ist dann erhöhst du den Wert in einem DWORD um 1 und startest den Timer dann neu.

Mit deinem Panel rechnest du dann das DWORD in TOD um ;)

MfG
HelixX23

Wieso einfach wenns auch kompleziert geht? Schon ein wenig aufwendig und unnötig verschwendung von Timern
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich würde einen Zeit-OB verwenden....

immer wenn der aufgerufen wird, addierst Du die Zeit des Weckintervalls sofern der Motor läuft.
Achtung: man sollte das kaskadieren (einen Zähler und einen Überlaufzähler), denn sonst steht die Zeit irgendwann weil die Rechengenauigkeit nicht ausreichend ist bei Real oder bei DINT erst recht ein Überlauf rauskommt.

Auf gut deutsch: schreib einen FB oder FC der das addieren, kaskadieren und wandeln in TOD übernimmt und ruf diesen in einem Zeit OB auf. Als Parameter würde ich noch den Wert des Aufrufintervalls übergeben damit der Baustein auch universell verwendbar ist.

lG
Karl
 
Ich habe seinerzeit in unserem Betrieb eine FC für Betriebstundenzählung geschrieben. Hintergrund: Die Betriebselektriker wünschten auf der Visu (WinCC V5.1) die Betriebsstunden von Motoren ablesen zu können und beim Erreichen des Abschmierintervalls sollte eine Meldung ausgegeben werden. Intervalldauer war z. B. 3400 Betriebsstunden. Deshalb interessierten mich auch in der Visu keine Sekunden und Minuten. Kann man aber leicht nachbasteln.

Code:
FUNCTION FC 8 : VOID
TITLE =Betriebstundenzähler
//Betriebsstundenzähler // Betriebsstundenzähler mit Meldeausgang
//                           +———————————————————+
//                           |        FC8        |
//                           |                   |
//                         ——|EN                 |
//                           |                   |
//                    Bool ——|LAUFMELD   ZAEHLSEK|—— Int
//                           |                   |
//                    Bool ——|TAKT       ZAEHLSTD|—— DInt
//                           |                   |
//                    Bool ——|RESET       MELDUNG|—— Bool
//                           |                   |
//                    DInt ——|GRZ_WERT        ENO|—— 
//                           +———————————————————+
//
//LAUFMELD = Laufmeldung vom Antrieb         ZAEHLSEK = Sekundenzähler
//TAKT     = Zyklustaktimpuls (1s)           ZAEHLSTD = Stundenzähler
//RESET    = Rücksetzeingang für die         MELDUNG  = Meldeausgang
//           Zähler
//GRZ_WERT = Angabe der max. Betriebs-
//           stunden eines Intervalls
AUTHOR : 
NAME : BSTD_EXT
VERSION : 0.1
 
VAR_INPUT
  LAUFMELD : BOOL ; //Laufmeldung bzw. Antrieb ist ein
  TAKT : BOOL ; //Sekundentakt aus dem System
  RESET : BOOL ; //Zähler rücksetzen
  GRZ_WERT : DINT ; //Grenzwert für den Zähler zur Meldungausgabe (Intervall erreicht)
END_VAR
VAR_OUTPUT
  ZAEHLSEK : INT ; //Sekundenanteil Zähler
  ZAEHLSTD : DINT ; //Gesamtstunden Zählung
  MELDUNG : BOOL ; //Intervallzeit erreicht bzw. überschritten
END_VAR
BEGIN
NETWORK
TITLE =Stundenzähler rücksetzen bei Anforderung
      U     #RESET; 
      SPBNB _001; 
      L     0; 
      T     #ZAEHLSTD; 
_001: NOP   0; 
NETWORK
TITLE =Sekundenzähler aufaddieren
//Wenn der Antrieb läuft und der Zyklusaktimpuls ansteht, wird der Sekundenzähler 
//um 1 erhöht. Wichtig ist, das ausserhalb der FC aus Sekundenzyklustakt eine 
//postive Flanke gebildet wird.
      U     #LAUFMELD; 
      U     #TAKT; 
      SPBNB _002; 
      L     #ZAEHLSEK; 
      L     1; 
      +I    ; 
      T     #ZAEHLSEK; 
_002: NOP   0; 
NETWORK
TITLE =Stundenzähler aufaddieren, Sekundenzähler löschen
//3600 Sekunden = 1 Stunde. Es erfolgt ein Übertrag in den Stundenzähler mit 
//anschließender Ablöschung des Sekundenzählers. Der Sekundenzähler wird aber 
//auch durch den Reset-Eingang gelöscht.
      U(    ; 
      O(    ; 
      U(    ; 
      L     #ZAEHLSEK; 
      L     3600; 
      ==I   ; 
      )     ; 
      SPBNB _003; 
      L     #ZAEHLSTD; 
      L     1; 
      +D    ; 
      T     #ZAEHLSTD; 
      UN    OV; 
      SAVE  ; 
      CLR   ; 
_003: U     BIE; 
      )     ; 
      O     #RESET; 
      )     ; 
      SPBNB _004; 
      L     0; 
      T     #ZAEHLSEK; 
_004: NOP   0; 
NETWORK
TITLE =Meldung ausgeben
      L     #ZAEHLSTD; 
      L     #GRZ_WERT; 
      >=D   ; 
      =     #MELDUNG; 
END_FUNCTION

Vielleicht kannst Du ja etwas damit anfangen.

Gruß
Corosop15
 
möchte germe mit meiner c314-dp ein Laufzeit von einem Motor ausgeben. [...]
möchte gerne die Summer Laufzeit als ST:MIN:SEK als TOD haben.
Hallo chefren_new,

was Du machen willst ist ein Betriebsstundenzähler. Funktionserklärung siehe mal hier:
Betriebsstundenzähler / Wartungsintervalle

Mit dem Datentyp TIME_OF_DAY (TOD) kann man keine Zeiten >= 24 Stunden darstellen.
Betriebsstunden werden üblicherweise in DINT gezählt und dezimal als 99999 Std oder 99999,99 Std angezeigt.

Für eine Anzeige "99999:59:59" (ST:MIN:SEK) kann man 3 Zählvariablen nehmen und an WinCC flexible übergeben.
Eine Variable zählt die Sekunden von 0 bis 59, deren Übertrag bei 59 zu 0 zählt die zweite Variable als
Minuten und deren Übertrag eine dritte Variable als Stunden.
Alternativ kann man einen Betriebs"Sekunden"-Zählwert in einem Skript zum Anzeige-String formatieren.

Harald
 
Hallo,
ich schlate mich hier jetzt auch mal ein, da der TE mich parallel zu diesem Thread auch schon per PN zu der Sache interviewt hat.

Mit dem Datentyp TIME_OF_DAY (TOD) kann man keine Zeiten >= 24 Stunden darstellen.
Das stimmt zwar, man kann den TOD aber durchaus zum Rechnen verwenden. Bleibt man bei der Laufzeit-Betrachtung unter 24 Std., so ist es sowieso kein Problem - und größer, dann kann der Ziel-Datentyp ja auch genauso TIME (was ja genau wie TOD auch nur eine Formatierungs-Variante ist) sein. In Verbindung mit DATE läßt sich dann hier auch was Nettes machen.
Ob das immer so der einfachste Weg ist will ich mal dahin gestellt sein lassen. Das liegt sicher in der Hauptsache im Auge des Betrachters (Erstellers). Ich persönlich verwende diesen Weg z.B. sehr gerne, wenn ich relativ kurze Sachen recht präzise messen möchte.

Ich denke, hier ist erstmal ein wenig Feedback vom TE von Nöten ...

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo


ich möchte mich für die Hilfe bedanken.
Ich denke für mich ist die Rechnungen mit TOD am besten.

ich habe ca. 4 Laufzeiten am Tag daher unter 24h.

leider kann ich derzeit mit AWL noch nicht viel anfagen.

Kann mir jemand in AWL kurz die Programzeilen für eine Laufzeit zeigen danach komme ich selber klar.
Möchte das Ergebis in WinccFelx darstellen, das müssten dann wieder TOD sein, oder.

also nochmals vielen DANK.

GRUß
 
Zurück
Oben