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

Funktion zum Stoppen von Tasks gesucht???

belunas
2007-04-12
2007-04-20
  • belunas - 2007-04-12

    Hallo,

    für eine Testsoftware suche ich eine Funktion oder eine Idee zum Stoppen von Tasks zur Laufzeit des Testprogramms! 2tes Problem: Der Taskstop soll Zielsystemunabhängig funktionieren ... erstmal sollen WAGO, MOELLER & ELAU in die Tests mit einbezogen werden.

    Aber ich bin dankbar für jederlei Idee oder Hilfe zu diesem Thema ...

     
  • gravieren - 2007-04-12

    Hi

    Zitat:
    für eine Testsoftware suche ich eine Funktion oder eine Idee zum Stoppen von Tasks zur Laufzeit des Testprogramms!

    Mach eine Endlosschleife, so stoppen alle Tasks b.z.w. die CPU geht auf Stop wegen Zykluszeitüberwachung.

    Zitat:
    2tes Problem: Der Taskstop soll Zielsystemunabhängig funktionieren ... erstmal sollen WAGO, MOELLER & ELAU in die Tests mit einbezogen werden.

    Kein Problem funktioniert mit allen CPUs (Auch Siemens)

    Spassbeiseite, warum willst du das eigentlich haben.

    Es können Gefährliche Zustände, je nach Einsatzzweck,

    Gefahren für Mensch und Maschine entstehen.

    Gibst du und mehr Informationen / erklärst du uns deinen Gedankengang ?

     
  • belunas - 2007-04-13

    hi nochmal,

    das mit der Endlosschleife wird in meinem Fall nicht gehen, da der Testtask ja weiter abgearbeitet werden soll.

    Jetzt mal tacheles ...

    Mein Projekt besteht aus 2 Teilen, (1) dem Programm zur Steuerung einer Eismaschine und (2) einem Testprogramm, das das Steuerprogramm (1) auf richtigkeit überprüft. Genauer frage ich Zustände ab die ich von der Eismaschine erwarte und kontrolliere desweiteren globale Variablen, Sensoren- und Aktorenaktivitäten. Dieses Testprogramm soll dem Programmierer bei späteren Veränderungen am Steuerprogramm unerwartete Zustände mitteilen und somit zur Qualitätskontrolle beitragen.

    Problem: Beim Testen der FUN-Bausteine, die das Steuerprogramm zur Laufzeit benutzt, entstehen Fehler im Testprogramm!

    D.H. das ich das Steuerprogramm zum testen der FUN-Bausteine stoppen oder pausieren muss >>> So eine TaskStop() - Funktion gibt es für manche Zielsysteme, aber da ich das Testprogramm für alle zukünftigen Steuerprogramme einsetzen möchte bräuchte ich eine allgemeine Funktion oder eine für jedes Zielsystem!!!!

    Oder evtl. andere Ideen????????????

    Codeauszug:

    IF StopTasks THEN ( Test mit TaskStop(), abhängig von Zielsystem )

    TaskStop(pszTaskName := '', bSelf := FALSE);
    
    IF TaskStopGet('Task_Main') = 1 THEN
    
        StopTasks := FALSE;
    
        TasksStopped := TRUE;
    
    END_IF;
    
     
  • debug - 2007-04-13

    Hallo,

    hast Du Dir schon einmal unter CoDeSys AS angeschaut?

    Dort könnte man die Taskweiterschaltung über ein Ext. Signal verhindern.

     
  • belunas - 2007-04-13

    Nein, sitz erst seit 3 Wochen vor CoDeSys und habe Pascal-Erfahrung

    Aber mit AS hatte ich auch schon mal zu tun ... mehr nicht! Ich schau mich da mal um!!!

    THX

     
  • belunas - 2007-04-13

    Vieleicht beschreibst du kurz was du mit Taskweiterschaltung meinst ... finde dazu nichts! Kurz angemerkt: Meine beiden Tasks laufen parallel ab bei jeweils T#200ms.

    Ich dachte auch das die Funktionalität von CoDeSys immer gleich bleibt, egal ob AS oder ST oder ....????!

     
  • debug - 2007-04-13

    die Ablaufsprache wird normalerweise verwendet um mehrere Programmschritte nacheinander oder parallel zueinander ablaufen zulassen. Früher auch als Schrittkettensteuerung bezeichnet.

    Kurz zusammengefasst. Ein Programmteil (Schritt läuft solange ab bis die Ende-Bedingung erreicht ist. (Taskweiterschaltung) In CoDeSys heißen diese Schritt-Transition". Dort kann man auch ein Eingang reinverknüpfen der nur eine manuelle Weiterschaltung erlaubt. In der Online Hilfe ist einiges zu lesen. ansonsten kann ich Dich nur auf Fachbücher (SPS programmieren IEC 61131-3) verweisen.

    Klassischer Anwendungsfall ist eine Ampelsteuerung.

    • Ampel auf Rot stellen

    • Wartezeit

    • Ampel Gelb

    • Wartezeit

    • Ampel Grün

    • Wartezeit

    • Sprung an den Anfang

     
  • Ralph Holz - 2007-04-13

    Hallo

    Wenn ich das richtig verstehe soll also entweder das eine oder das andere Programm abgearbeitet werden. Dazu würde ich auf keinen Fall eine zweite Task verwenden schon allein deshalb weil eine zweite Task ein zweites Prozessabbild anlegt.

    Es gibt so eine nette Funktion wie Programmaufrufe. Ich würde im Hauptprogramm(meist PLC_PRG) einfach entweder das "Maschinenprogramm " oder das "Testprogramm" aufrufen.

    Gruß

    Ralph

     
  • gravieren - 2007-04-13

    Hi

    Schreib doch mal in dein Testprogrom eine Bedingte Anweisung

    IF ( test_programm_aktiv) THEN

    Temperatur O.K ?

    Wasser vorhanden

    ...

    ...

    END_IF

    Setze die Varable "test_programm_aktiv" auf TRUE oder FALSE

    Das Testprogramm hat dann halt ohne Testbetrieb NUR 1 IF-Abrage

    die NICHT ausgeführt wird.

     
  • belunas - 2007-04-17

    Erstmal danke für die Ideen ...

    Ralph:

    Es sollen beide Programme GLEICHZEITIG abgearbeitet werden (Multitasking)

    gravieren:

    So hatte ich es auch vor, aber da ich den Testteil WIEDERVERWENDBAR machen möchte, muss ich ihn in ein extra Task packen, damit ich nicht immer im Code von der Steuerung rummuscheln muss!

    für alle:

    hab mich schlau gemacht und ein Tip von Smart Software Solution bekommen. Die SysLibTasks.lib ist hier mein Retter! Ein Beispiel war auch gleich dabei, nur funzt es bei mir nicht.

    Wer Lust hat kann das kleine Prog (als Anhang!!!!) ja mal testen

    Es sollte eigentlich der Counter bei ButtonKlick gestoppt werden aber nix ....

    ControlIECTask.pro [34.15 KiB]

     
  • Ralph Holz - 2007-04-17

    Hi belunas,

    gleichzeitig gibt es nicht! Entweder werden die beiden Tasks nacheinder abgearbeitet weil das Zielsystem nicht preemtiv oder die Task mit höherer Priorität unterbricht die mit niedriger Priorität an irgendeiner Stelle und wenn sie fertig ist gehts mit der anderen weiter.

    Gruß

    Ralph

     
  • belunas - 2007-04-18

    Ja .. sorry, ich hatte mich nicht exakt ausgedrückt.

    Natürlich nur quasi gleichzeitig (nebenläufig), sonst bräuchte die CPU ja keine Prioritäten.

     
  • debug - 2007-04-19

    Habe es gerade getestet. Geht sehr gut und einfach.

    Ergänzung: Wago 750-841.

     
  • belunas - 2007-04-20

    Schreibt doch bitte noch auf welchem Zielsystem Ihr das Programm testet, damit wir alle reicher an Erfahrung werden oder obs nur simuliert wurde!!!

    Danke

     

Log in to post a comment.