Task zur Laufzeit erzeugen

2010-12-30
2011-01-27
  • RolandAlbers - 2010-12-30

    Hallo!

    Ich möchte zur Laufzeit einen Task erzeugen.
    Die Funktionen aus der SysLibTask.lib benutze ich dazu:


    PROGRAM PLC_PRG
    VAR
    xInit: BOOL;
    id: UDINT;
    END_VAR
    :
    IF NOT xInit THEN
    xInit := TRUE;
    id := SysTaskCreate('Task1',20,10,SysIECGetFctPointer(INDEXOF(Task_PLC)),0);
    END_IF
    :
    :


    PROGRAM Task_PLC
    VAR
    hdl: UDINT;
    END_VAR
    hdl := SysTaskGetCurrent(TRUE);
    j := j+1;
    SysTaskEnd(0,hdl);


    j ist eine globale Variable. Diese wird auch mit SysTaskCreate einmal inkrementiert. Danach nicht mehr.
    id = hdl = 3 in meinem Fall.

    Was mache ich falsch? Was fehlt noch?
    Leider finde ich in den Beispielen von 3S nichts.

     
  • RolandAlbers - 2011-01-27

    Ich würde mich freuen, wenn sich schon kein User meldet, ich wenigstens eine Antwort von 3S bekomme. Oder muss ich mich direkt an den Support wenden?

     
  • bschuster - 2011-01-27

    Hallo,
    der Baustein, dessen Funktionspointer, der Task beim generieren mitgegeben wurde, wird von CoDeSys einmal aufgerufen, deshalb der einmalige Inkrement.
    In dem Baustein muss das Handling der Task (Schleife, Unterbrechung, Beenden) selbst programmiert werden.
    Folgender Code zählt zumindest die Schleife hoch

    WHILE (TRUE) DO
    j:= j+1;
    SysTaskSleep(200);
    END_WHILE

     
  • Anonymous - 2011-01-27

    Originally created by: blackenslaver666

    Hi.
    Ich kenne jetzt die Lib nicht, habe mir aber mal ein PDF angeguckt. Die Beschreibung der FUN "SysTaskEnd" ist für mich nicht eindeutig. Ich nehme mal an, dass du mit deinem Init die Task generieren willst, die dann zyklisch mit dem Intervall laufen soll. Ich denke das passiert auch, aber eben nur 1x weil j nur einmal inkrementiert wird. Ich denke "SysTaskEnd" stoppt darauf die Task wieder nachdem sie 1x abgearbeitet wurde. Daher keine Änderung mehr vom Zähler j. Würde den FUN-Aufruf mal auskommentieren zum Test. Denn bei einer zyklischen Task muss man ja auch keine FUN zum "Beenden" aufrufen.

    Btw. was spricht dagegen in der Task-Konfig gleich eine zyklische Task anzulegen? Geht's dir hier nur um die Ãœbung?

    Gruß Andy

     

Log in to post a comment.