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

Zeiten bei Bausteinen

CORAS-HGD
2012-03-27
2012-03-29
  • CORAS-HGD - 2012-03-27

    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

     
  • D.Hauer - 2012-03-28

    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]

     
  • Erik Böhm - 2012-03-28

    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]

     
  • CORAS-HGD - 2012-03-28

    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

     
  • 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

     

Log in to post a comment.