# betriebszeit anzeigen



## Kralle (2 November 2008)

kann mir jemand einen baustein und ggf. bibliothek für CoDeSyS  nennen, mit der man die betriebszeit messen kann?
es sollte einen BOOL eingang haben und einen TIME eingang. die zeit soll stoppen, wenn am BOOL eingang 2 sekunden lang kein signal mehr ankommt. wenn wieder ein BOOL signal ankommt, soll die zeit weiter laufen (nicht wieder von 0 anfangen). ich schreibe das Programm mit CFC. und bitte sagt nicht, dass ich das selber schreiben soll, weil ich mich erst ein paar wochen mit dem programmieren einer SPS auseinander setze. und dieses über mein können hinaus geht.


----------



## Nitrozin (2 November 2008)

Hi,

schau mal auf die Seite http://www.oscat.de, die Bibliothek ist kostenlos und hat mit Sicherheit einen Baustein den du verwenden kannst.
Soweit ich mich erinnere gibts da einen Baustein 'ontime', der sollte für dein Problem der richtige sein.
Gruß Volker


----------



## Kralle (2 November 2008)

danke für die schnelle antwort. die bibliothek hab ich mir schon runtergeladen und den baustein ausprobiert, jedoch gibt der baustein ein REAL signal am output aus. und irgendwie funktioniert der converter "real_to_time" nicht. oder gibts irgendeinen anderen weg, wie ich aus dem REAL signal ein TIME signal machen kann?


----------



## Nitrozin (2 November 2008)

Du kannst ja den Realwert in Stunden und Minuten umrechnen,
dann das ganze in einen String umwandeln und mit der OSCAT-Funktion FSTRING_TO_DT in Zeitformat (DT) umwandeln.

Gruß Volker


----------



## Kralle (2 November 2008)

ich steh gerade aufm schlauch... wie rechne ich das denn um?


----------



## Nitrozin (3 November 2008)

Moin,

mal eben aus der Hüfte geschossen sollte es so gehen.


```
(* Stunden aus Real-Zahl extrahieren *)
strStunden := INT_TO_STRING(TRUNC(Zeitwert_Real));
(* Minuten aus Real-Zahl Rest extrahieren *)
strMinuten := INT_TO_STRING(TRUNC((Zeitwert_Real - TRUNC(Zeitwert_Real)) * 60));
(* String zusammenbauen *)
strTime := CONCAT(CONCAT(strStunden,':'),strMinuten);
(* in DT wandeln *)
MyTime := FSTRING_TO_DT(strTime,'#h:#m');
```
 
Gruß Volker


----------



## Kralle (3 November 2008)

ist es auch möglich die sekunden anzuzeigen?


----------



## Nitrozin (4 November 2008)

Moin,

Bei Verwendung des  ONTIME Bausteins nicht, da dieser ja nur Stunden und Minuten ausgibt. Wenn du einen Betriebstundenzähler hast, der auch die Sekunden auswirft, dann kannst du mit der FSTRING_TO_DT Funktion auch die Sekunden mitkonvertieren. Das steht aber alles auch in der doch sehr guten Hilfe zur OSCAT Bibliothek.

Gruß Volker


----------



## hugo (8 November 2008)

der ontime baustein hat vor release 3 stunden in real ausgegeben. die auflösung war dabei 7 stellen exakt.
das bedeutet das bei 10 stunden betriebszeit noch millisekunden aufgelöst wurden, abewr bei 2 monaten nur  noch sekunden usw.

seit der release 3 wurde dieser baustein modifiziert, er gibt nun die betriebszeit in sekunden aus als 32 bit wert.

intern zählt er aber millisekunden. der eingang spricht auch auf millisekunden an.

bei der auflösung von 1 sekunde am ausgang kann der baustein bis zu 136 jahren die betriebszeit ermitteln


----------



## Kralle (9 November 2008)

hab das mit dem baustein nun mal ausprobiert... der kann mir zwar die umdrehungen anzeigen, aber beim second ausgang bleibt alles bei 0


----------



## volker (9 November 2008)

zu codesys kann ich dir leider nichts sagen. 
aber grundsätzlich lässt sich das leicht selbst bauen.

s7-scl

```
FUNCTION FC100: void

VAR_INPUT
  IN : BOOL;
  RST : BOOL := FALSE;
END_VAR
VAR_IN_OUT
    SECONDS : DINT;
END_VAR    

BEGIN

seconds := seconds + 1;

IF RST THEN
    SECONDS := 0;
END_IF;

END_FUNCTION
```

dieser baustein muss 1 mal pro sekunde aufgerufen werden.

also z.b. über eine positiven flanke eines ton-timers


----------



## Kralle (9 November 2008)

ich habs endlich hinbekommen...
hab die alte version von oscat nochmal benutzt. dann mit dem ONTIME baustein wieder die zeit messen lassen und dann die REAL ausgabe mit dem HOUR_TO_TIME baustein konvertiert.

nächstes problem:

bei der ausgabe steht jetzt T# und dann die zeit. bekommt man das T# irgendwie weg? und am besten auch noch, dass der nur die sekunden, minuten und stunden anzeigt?


----------

