# CPU Zeit auswerten



## HWPascal (5 März 2009)

Folgendes Problem:

Ich benutze die Bausteine FC8 und SFC1 aus der Standardbibliothek, um die aktuelle CPU-Uhrzeit auszulesen. Wenn ich jetzt eine Variable mit einer Uhrzeit vorbelege und möchte, dass wenn diese Uhrzeit durch Vergleich mit der tatsächlichen erreicht ist eine Aktion ausgeführt wird, funktioniert dieses nur manchmal.

Beispiel:

L #nur_Systemuhrzeit (Datentyp TIME_OF_Day)
T DB1.aktuelle_Uhrzeit (Datentyp TIME_OF_Day)
L TOD#10:0:0.0
==D
S M 90.5

Also, der Merker wird über einen Dauertest von 10 Tagen mit "==D" nur maximal an 2 Tagen gesetzt, an den anderen Tagen läuft die Zeit weiter, ohne irgend eine Reaktion.
Wenn ich aber "<D" oder ">D" auswerten möchte, klappt das jedesmal.

Hat schon jemand dieses Problem gehabt und kann mir einen Tipp geben?

Selbst das Wandeln der Datenformate vor dem Vergleich brachte nichts.

HWPascal


----------



## vierlagig (5 März 2009)

mit ==D müssen die werte 100%ig übereinstimmen, bei einem zyklisch arbeitenden system, bei dem (in den meisten fällen) die daten vor dem zyklus beschafft werden und dann einen ganzen zyklus gültig sind ist die wahrscheinlichkeit nicht hoch, einen treffer zu landen, deswegen erstmal respekt für die zwei treffer 

benutze =>D und alles wird gut.


----------



## Ralle (5 März 2009)

Ich würde mal nicht mit ==D arbeiten, sondern mit einem Bereich. Denn du mußt die Zeit ja absolut exakt treffen. TOD beinhaltet ja auch die Millisekunden. 

Nimm also deine Zeit und schau ob sie größer als 10:0:0.0 und kleiner als 10:0:1.0 ist. 
Aber aufpassen, dies kann dazu führen, das in mehreren SPS-Zyklen hintereinander die Bedingung erfüllt ist. Beim ersten Mal einen Sperrmerker setzen, der verhindert, daß ein weiteres Mal eine Aktion erfolgt. Den Sperrmerker löschen, wenn die Zeit wieder außerhalb des Bereiches liegt!


----------



## Gebs (5 März 2009)

vierlagig schrieb:


> benutze =>D und alles wird gut.


Aber dann würde der Merker auch zwischen 10 Uhr und Mitternacht immer gesetzt!
Ich glaube, dass HWPascal den Merker nur um 10 Uhr setzen will. Ich würde dann folgendes machen:

```
U(
L DB1.aktuelle_Uhrzeit (Datentyp TIME_OF_Day)
L TOD#10:0:0.0
>=D
)
U(
L DB1.aktuelle_Uhrzeit (Datentyp TIME_OF_Day)
L TOD#10:0:1.0
<=D
)
S M 90.5
```
Grüße
Gebs

[Edit]
Ralle war schneller, aber nur weil ich fast 5 Min. lang keine Verbindung zu sps-forum.de bekommen hab.
Ich habe oft das Problem, das mein Browser ewig auf esatex.com wartet.
[/Edit]


----------



## Ralle (5 März 2009)

Gebs schrieb:


> [Edit]
> Ralle war schneller, aber nur weil ich fast 5 Min. lang keine Verbindung zu sps-forum.de bekommen hab.
> Ich habe oft das Problem, das mein Browser ewig auf esatex.com wartet.
> [/Edit]



Hehe, das hätte auch nichts genutzt, ich hab ja schon 3 Minuten benötigt. Aber nun hat er meinen Vorschlag wenigstens als Code, wobei die Geschichte mit dem Sperrmerker fehlt.

Ich erlaube mit mal, deinen Code zu modifizieren:


```
U(
L DB1.aktuelle_Uhrzeit (Datentyp TIME_OF_Day)
L TOD#10:0:0.0
>=D
)
U(
L DB1.aktuelle_Uhrzeit (Datentyp TIME_OF_Day)
L TOD#10:0:1.0
<=D
)
= M 90.5

U M 90.5
FP M 90.6  //HM Flanke Positiv
= M 90.7  //Positive Flanke, bei Erreichen des Zeitpunktes
```

Mit M 90.7 kann dann einmalig irgend eine Aktion erledigt werden.


----------



## HWPascal (5 März 2009)

Ich danke Vierlagig, Ralle und besonders Gebs für die Hilfen.
Folgender Code, angeregt durch Gebs brachte den Durchbruch:

U(
L #nur_Systemuhrzeit
T DB1.aktuelle_Uhrzeit
L TOD#23:5:0.0
>=D
)
U(
L #nur_Systemuhrzeit
T DB1.aktuelle_Uhrzeit
L TOD#23:5:1.0
<=D
)
S M 90.5

Ich habe das mit mehrmals veränderte Sollzeit getestet, die CPU wird jetzt nicht nur an 2 von 10 Tagen das machen was ich will, sondern an jedem !

Danke nochmal, bei neuen Problemen werdet Ihr mir doch auch helfen ?

MfG HWPascal


----------



## Gebs (5 März 2009)

HWPascal schrieb:


> Danke nochmal, bei neuen Problemen werdet Ihr mir doch auch helfen ?



Das ist doch der Sinn dieses Forums, oder ist jemand anderer Meinung?

oT:
An dieser Stelle: Danke an alle engagierten Forumsmitglieder. Vor allem an die 
Moderatoren und unseren Admin, da es ohne sie dieses Forum gar nicht gäbe.

Grüße 
Gebs


----------

