Welcome to our new forum
All users of the legacy CODESYS Forums, please create a new account at account.codesys.com. But make sure to use the same E-Mail address as in the old Forum. Then your posts will be matched.
Close
Hallo Forumgemeinde,
ich bin erst seit heute im Forum vertreten und möchte die ersten Handlungen
ausprobieren und das gleich sinnvoll.
Oft hat man mit Bausteinen zu schaffen, die in irdend einer Form zeit-
liche Angaben erfordern.
Ich denke nur an
RAMP_REAL: die maximalen Zu- bzw. Abnahme pro Zeitintervall werden durch
TIMEBASE vom Typ TIME festgelegt
FREQ_MEASURE: ein Messzeitraum ist der Zeitraum zwischen zwei steigenden Flanken
(lt. Hilfe: Vorgabe 1 - 10; also max 10Hz?)
oder sogar die alten
CTU, CTD und CTUD: Mit welcher Frequenz kann ich diese ansteuern?
Fragt man jemanden, dann: "Das ist von der Zykluszeit abhängig!" Das ist ja richtig, aber wie
kann man die Zykluszeit ohne großen Aufwand ermittel? Ich habe mir mal bei der AC1131 V5.1
die Mühe gemacht, aber noch einmal nicht.
Gruß HGD
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Ein einfacher Vorschlag die Zykluszeit mit minimalem Aufwand für beliebige Targets zu ermitteln.
Die Bibliotheken sind von Target zu Target ein wenig unterschiedlich, aber prinzipiell sollten alle die folgenden Strukturen und Funktionen bereitstellen.
die Zykluszeit einer Task lässt sich so ermitteln:
Die Funktion SysTaskGetCurrent gibt dir den Index der Task zurück aus dem die Funktion aufgerufen wurde.
FUNCTION SysTaskGetInfo : BOOL
( Returns the task info of the specified task. )
VAR_INPUT
udiTaskId:UDINT;
pSysTaskInfo:POINTER TO SYSTASKINFO;
END_VAR
Das Struct SYSTASKINFO gibt alle Informationen zu einer Task aus, Zykluszeit in ns.
Das alles in eine Funktion gepackt und du kannst immer die entsprechende Zykluszeit holen und auf anderen Targets wiederverwenden. Hab mir das einmal geschrieben und für ein neues Target ist das ein kleiner Aufwand zu schauen in welcher lib die Informationen stecken, einbinden und fertig.
Hallo,
vielen Dank für die schnelle Reaktion. Beide Vorschläge klingen plausibel und ich werde sie ausprobieren.
Dann melde ich mich dann zu diesem Thema zurück.
Gruß HGD
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Anonymous
-
2012-03-29
Originally created by: jl
Hallo!
Wenn ich die tatsächliche Zykluszeit wissen will, dann mache ich das immer so:
PROGRAM PLC_PRG
VAR
zykZeit: TIME;
timeOld: TIME;
END_VAR
zykZeit := TIME() - timeOld;
timeOld := TIME();
Stimmt erst ab dem zweiten Durchlauf nach Programmstart, Zeit ist in ms
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hallo Forumgemeinde,
ich bin erst seit heute im Forum vertreten und möchte die ersten Handlungen
ausprobieren und das gleich sinnvoll.
Oft hat man mit Bausteinen zu schaffen, die in irdend einer Form zeit-
liche Angaben erfordern.
Ich denke nur an
RAMP_REAL: die maximalen Zu- bzw. Abnahme pro Zeitintervall werden durch
TIMEBASE vom Typ TIME festgelegt
FREQ_MEASURE: ein Messzeitraum ist der Zeitraum zwischen zwei steigenden Flanken
(lt. Hilfe: Vorgabe 1 - 10; also max 10Hz?)
oder sogar die alten
CTU, CTD und CTUD: Mit welcher Frequenz kann ich diese ansteuern?
Fragt man jemanden, dann: "Das ist von der Zykluszeit abhängig!" Das ist ja richtig, aber wie
kann man die Zykluszeit ohne großen Aufwand ermittel? Ich habe mir mal bei der AC1131 V5.1
die Mühe gemacht, aber noch einmal nicht.
Gruß HGD
Hallo,
Ein einfacher Vorschlag die Zykluszeit mit minimalem Aufwand für beliebige Targets zu ermitteln.
Die Bibliotheken sind von Target zu Target ein wenig unterschiedlich, aber prinzipiell sollten alle die folgenden Strukturen und Funktionen bereitstellen.
die Zykluszeit einer Task lässt sich so ermitteln:
Die Funktion SysTaskGetCurrent gibt dir den Index der Task zurück aus dem die Funktion aufgerufen wurde.
FUNCTION SysTaskGetInfo : BOOL
( Returns the task info of the specified task.
)
VAR_INPUT
udiTaskId:UDINT;
pSysTaskInfo:POINTER TO SYSTASKINFO;
END_VAR
Das Struct SYSTASKINFO gibt alle Informationen zu einer Task aus, Zykluszeit in ns.
Das alles in eine Funktion gepackt und du kannst immer die entsprechende Zykluszeit holen und auf anderen Targets wiederverwenden. Hab mir das einmal geschrieben und für ein neues Target ist das ein kleiner Aufwand zu schauen in welcher lib die Informationen stecken, einbinden und fertig.
cheers
FC_GETCYCLETIME.EXP [546 Bytes]
Moin
Völlig Zielsystem und Library abhängig.
Zählt die durchlaufenen Zyklen / Sekunde und gibt die (durchschnittliche) Zykluszeit in ms aus.
Gruß Erik
TASKCYCLETIME_FB.EXP [753 Bytes]
Hallo,
vielen Dank für die schnelle Reaktion. Beide Vorschläge klingen plausibel und ich werde sie ausprobieren.
Dann melde ich mich dann zu diesem Thema zurück.
Gruß HGD
Originally created by: jl
Hallo!
Wenn ich die tatsächliche Zykluszeit wissen will, dann mache ich das immer so:
PROGRAM PLC_PRG
VAR
zykZeit: TIME;
timeOld: TIME;
END_VAR
zykZeit := TIME() - timeOld;
timeOld := TIME();
Stimmt erst ab dem zweiten Durchlauf nach Programmstart, Zeit ist in ms