wo versteckt WAGO die Millisekunden?

Tom...

Level-2
Beiträge
91
Reaktionspunkte
5
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

mit dem Code
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
 
Ist Deine Zykluszeit vielleicht kürzer als 1ms?
Oder geht vielleicht folgendes:
Code:
Zykluszeit_T (    IN   :=    TRUE ) ;
Zykluszeit_DWORD       :=    TIME_TO_DWORD ( Zykluszeit_T.ET ) ;
Zykluszeit_T (    IN   :=    FALSE ) ;
Zykluszeit_T (    IN   :=    TRUE ,
                PT     :=    T#100ms ) ;

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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?
 
Ist Deine Zykluszeit vielleicht kürzer als 1ms?

Nein.

Code:
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...

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 ).

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

Mit den folgende Zeilen

Code:
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?!
 
Code:
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?!
 
Hallo miteinander,
ich hab es jetztz so gemacht:
Code:
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.
 
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 !
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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
 
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.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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
 
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ß
 
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...
 
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...
 
Zurück
Oben