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

Systemzeit

MaDe
2012-03-22
2012-03-23
  • MaDe - 2012-03-22

    Hallo nocheinmal, nachdem meine Frage mit der Aufrufherarchie und euren Tipps sehr gut gelöst wurde, hätte ich jetzt noch einmal eine Frage zur Systemzeit.

    Ich möchte gerne anhand der Systemzeit vriablen umkopieren.
    D.h. ich habe irgendwelche Variablen geschreiben. Wenn jetzt z.B. die Zeit von 10Uhr auf 11Uhr umspringt möchte ich die nächsten Variablen kopieren und um 12 Uhr wieder.
    Kann mir jemand von euch da weiterhelfen??

    Danke schonmal

    Gruß Martin

     
  • MaDe - 2012-03-22

    oh da fällt mir noch was ein.
    Über mein Panel welches ich über galileo Programmiert habe, habe ich die systemzeit schon, kann ich die irgendwie in CoDeSys übertragen??

     
  • Schuero - 2012-03-22

    Moin.

    Ich habe mir mal über syslibtime.lib die controllerzeit geholt. Die ausgelesenen Zeit im DT - Format habe ich in eine string gecastet. Mit den string Funktionen habe ich den erhaltenen string in Einzelteile zerlegt. Diese Einzelteile habe ich dann in eine Struktur gedrückt (Also Stunde, Minute, Sekunde in ein Byte gestopft) Mit dieser Struktur kann man dann einfach über ein "Vergleicher" ein event auslösen.

    Z.b.
    If (Systemzeit.Stunde <> systemzeitStundeAlt) then
    "Mach was"
    SystemzeitStundeAt:=Systemzeit.Stunde;
    End_if

    ...Alles sehr knapp beschrieben. Bitte sag Bescheid, wenn irgendwas unklar ist.

    Gruss schuero

     
  • D.Hauer - 2012-03-23

    du kannst auch das mit der controllerzeit ohne string funktionen lösen,

    Zykluszeit in ms besorgen (Das hier ist zwar etwas, das ich mal auf ner Beckhoff sps geschrieben habe sollte aber so in etwa funktionieren):

    udiTaskId := BYTE_TO_UDINT(FB_GetCurrTaskIndex.index);
    ( cycle time comes in ns --> output in ms)
    fc_GetCycleTime := SystemTaskInfoArr[udiTaskId].cycleTime / 10000;

    aus ms den Rest machen:
    udiOpSeconds := udiOpMseconds / 1000;
    udiOperatingHours := udiOpSeconds / 3600;
    udiTmp := udiOpSeconds MOD 3600;
    udiOperatingMinutes := udiTmp / 60;
    udiOperatingSeconds := udiTmp MOD 60;

     
  • MaDe - 2012-03-23

    Jo klappt Danke

     

Log in to post a comment.