# wo versteckt WAGO die Millisekunden?



## Tom... (5 April 2015)

Hallo zusammen,

mit dem Code

```
VAR
    Zykluszeit_T       :    TON;
    Zykluszeit_DWORD   :    DWORD;
END_VAR


Zykluszeit_DWORD       :=    TIME_TO_DWORD ( Zykluszeit_T . ET ) ;
Zykluszeit_T (    IN   :=    FALSE ) ;
Zykluszeit_T (    IN   :=    TRUE ,
                PT     :=    T#100ms ) ;
```
in der PLC_PRG sollte doch bei jedem neuen Zyklusbeginn in Zykluszeit_DWORD die vergangenne Zeit des letzten Zyklus in ms stehen?

Doch Fehlanzeige! Da steht 0ms, was mache ich falsch? Oder sehe ich den Wald vor lauter Bäumen nicht mehr?

Kann mir da bitte jemand weiterhelfen?!

Schöne Ostern
Tom


----------



## PN/DP (5 April 2015)

Ist Deine Zykluszeit vielleicht kürzer als 1ms?
Oder geht vielleicht folgendes:

```
Zykluszeit_T (    IN   :=    TRUE ) ;
Zykluszeit_DWORD       :=    TIME_TO_DWORD ( Zykluszeit_T.ET ) ;
Zykluszeit_T (    IN   :=    FALSE ) ;
Zykluszeit_T (    IN   :=    TRUE ,
                PT     :=    T#100ms ) ;
```

Harald


----------



## lord2k3 (5 April 2015)

Für eine Zykluszeit bietet sich die Funktion time() an.

Z.B.:
tStart := TIME();
(* PROGRAMM CODE *)
tEnde := TIME();
tZyklus := tEnde - tStart;

Bei dir wird der Eingang des ton sofort wieder zurückgesetzt oder war das nur beispielhaft?


----------



## Tom... (5 April 2015)

PN/DP schrieb:


> Ist Deine Zykluszeit vielleicht kürzer als 1ms?



Nein.


```
GET_PLC_ACT_CYCLE ( reset := FALSE )
```

schwankt zwischen 7 und 9 ms.
Außerdem läuft PLC_PRG in einer Zeitscheibe von 20ms. Ich sollte also eigentlich immer genau diese 20ms angezeigt bekommen, denn weiter kommt T nicht...



lord2k3 schrieb:


> Bei dir wird der Eingang des ton sofort wieder zurückgesetzt oder war das nur beispielhaft?



Auch nein.
Die erste Zeile Code in der PLC_PRG "merkt" sich, wie lang T gelaufen ist ( bei mir also die vergangene Zykluszeit ).


```
Zykluszeit_DWORD        :=    TIME_TO_DWORD ( Zykluszeit_T . ET ) ;
```

Mit den folgende Zeilen


```
Zykluszeit_T (    IN            :=    FALSE ) ;
Zykluszeit_T (    IN            :=    TRUE ,
                PT            :=    T#100ms ) ;
```

Wird die Zeit gelöscht und wieder neu gestartet.
Danach folgt mein ganzer Programmcode.
Ist PLC_PRG zu Ende, komme ich von oben wieder rein und merke mir wieder, wie weit T gelaufen ist u.s.w.

So habe ich mir das wenigstens gedacht, funktioniert so aber nicht?!


----------



## Tom... (5 April 2015)

```
var
Zyklus ,
Speicher : Time ;
end_var ;

Zyklus := TIME ( ) - Speicher ;
Speicher := TIME ( ) ;
```

funktioniert übrigens. Speicher schwankt zwischen 20 und 21 ms.

Erklärt nicht, warum der Rest mit dem TON Timer nicht funktioniert.


TIME ( ) zeigt ca. 13545 Minuten. Seit wann ist das? Sollte TIME nicht die seit 00:00:00 vergangene Zeit in ms anzeigen? Man kann TIME auch keinen Parameter mitgeben?!


----------



## lord2k3 (5 April 2015)

time*—*sollte den aktuellen Unix-Timestamp/Zeitstempel zurückgeben


----------



## Tom... (5 April 2015)

Hallo miteinander,
ich hab es jetztz so gemacht:

```
PROGRAM PLC_PRG
VAR
    Zyklus             :    TIME ;        (* zyklische Laufzeit von PLC_PRG *)
    Laufzeit        :    TIME ;        (* Laufzeit, die der Code benötigt *)
    Speicher         :    TIME ;        (* Zwischenspeicher der Systemzeit *)
END_VAR

Zyklus := TIME ( ) - Speicher ;
Speicher := TIME ( ) ;
.
.
mein ganzer Code
.
.
Laufzeit := TIME ( ) - Speicher ;
```
und das funzt prima.
Zyklus zeigt genau die eingestellten 20ms und Laufzeit mit 6 bis 7ms, was ich davon bis jetzt an Zeit benötige.


----------



## gravieren (5 April 2015)

Tom... schrieb:


> in der PLC_PRG sollte doch bei jedem neuen Zyklusbeginn in Zykluszeit_DWORD die vergangenne Zeit des letzten Zyklus in ms stehen?
> Kann mir da bitte jemand weiterhelfen?!



Hi Tom

Ist das eine Übung  ?

Oder willst du das für deine Zylus-Zeitmessungen realisieren.

Es ist möglich, die Zykluszeit anzuzeigen, ebenso die min.max, Zykluszeit, ebenso den Jitter.
Und das alles, ohne eine Zeile Programm zu schreiben !


----------



## Tom... (5 April 2015)

Nein, keine Übung. Ich kann jetzt mit 100 * ( Laufzeit / Zyklus ) die Auslastung meiner CPU in % anzeigen.
Natürlich kann man für alles auch immer eine fertige bib verwenden, aber wer will das schon, wenn es mit drei Zeilen Code auch erledigt ist...
BTW wie bekommt man den Jitter?

Grüße
Tom


----------



## gravieren (6 April 2015)

Tom... schrieb:


> BTW wie bekommt man den Jitter?


Keine Ahnung.
Das macht die LIB von Wago.


----------



## lord2k3 (6 April 2015)

Jitter:
Dies sollte die Zeit sein, welche den Verzug zwischen den einzelnen Task Aufrufintervallen angibt.
Z.B.:
Aufrufintervall 50ms, wird der zweite Aufruf erst bei 55ms aufgerufen, liegt ein Jitter von 5ms vor.
Korrigiert mich, falls ich falsch liege bin mir nicht 100%ig sicher.


----------



## Tom... (6 April 2015)

lord2k3 schrieb:


> Jitter:
> Dies sollte die Zeit sein, welche den Verzug zwischen den einzelnen Task Aufrufintervallen angibt.
> Z.B.:
> Aufrufintervall 50ms, wird der zweite Aufruf erst bei 55ms aufgerufen, liegt ein Jitter von 5ms vor.
> Korrigiert mich, falls ich falsch liege bin mir nicht 100%ig sicher.



Es liegt mir fern Dich zu korrigieren! Die WAGO lib liefert aber doch keinen Jitter?! Du hast ja angemerkt, dass man keine einzige Zeile programmieren muss...
Außerdem sollte bei einer Zeitscheibe von 20ms, die nur zu 6ms ausgelastet ist, kein Jitter auftreten?!
Unabhängig davon muss man sich aber im Klaren sein, dass z.B. in 20000 Sekunden ein 20ms Task nicht 1000000 mal aufgerufen wird...

Grüße Tom


----------



## lord2k3 (6 April 2015)

Einen jitter und weitere Informationen wird dir in der Taskkonfiguration, sobald du die "SysTaskInfo.lib" einbindest angezeigt.
Gravieren hatte angemerkt, dass keine Programmzeile notwendig ist.

Gruß


----------



## Tom... (6 April 2015)

OK. Ist aber so wie mit allen lib's. Keiner weiß, wie die funktionieren und Beschreibung findet man auch keine. Ostermontag bei WAGO anrufen funktioniert leider auch nicht...


----------



## lord2k3 (7 April 2015)

Immer diese Feiertage


----------



## Tom... (7 April 2015)

Und die von WAGO sind doch die Besten! Kurze eMail und sofort einen Rückruf bekommen.

Außerdem: Libraries, die mit sys... beginnen sind von 3S und bringen in den meisten Fällen eine kleine Doku im installierten Programmpfad von CoDeSys mit.
Da habe ich ja fast jemandem Unrecht getan...


----------



## lord2k3 (7 April 2015)

Kann ich dir nur zustimmen.
In der Online Hilfe sind die ebenfalls beschrieben (F1)


----------

