Begrenzungsfehler 40222

  • Hallo zusammen ich arbeite zurzeit an einen 140er mit einer Compact Controller


    Mein Problem ist alle 1 bis 2 Stunden kommt der Fehler Begrenzungsfehler 400222


    Aktionen: rekursive Routinen


    Hat Jemand Erfahrung mit diesem Fehler und was kann ich dagegen machen den ein Stillstand


    Alle 1 bis 2 Stunden ist doof


    Besten Dank in Voraus

  • ANZEIGE
  • Lock500

    Hat den Titel des Themas von „Begrenzungsfehler 400222“ zu „Begrenzungsfehler 40222“ geändert.
  • Die Rekursion finden und eliminieren.

    Rekursion bedeutet, daß eine Routine sich selber wieder aufruft, und das zu oft ineinander verschachtelt, ohne Abbruchbedingung, die dann wieder dafür sorgt, dass über alle Aufrufe wieder zurück gesprungen wird.

    Das zu finden kann schwierig werden, da der rekursiv Aufruf auch tief verschachtelt erfolgen kann. D. h. z. Bsp: Routine1 ruft Routine2 auf, diese ruft Routine3 auf, und diese ruft wieder Routine1 auf.

  • Hallo zusammen,

    ich habe ebenfalls diesen Fehler. Allerdings benötige ich das "ineinander verschachtelte Aufrufen der Routinen ".

    Mir stellt sich die Frage, wie ich die Fehlermeldung und vor allem den Verlust des PZ verhindern kann, ohne groß die Verschachtelungen auflösen zu müssen.


    Habt ihr eine Idee?


    Liebe Grüße


    LB

  • .. Allerdings benötige ich das "ineinander verschachtelte Aufrufen der Routinen.

    Das bezweifle ich.

    Mir stellt sich die Frage, wie ich die Fehlermeldung und vor allem den Verlust des PZ verhindern kann, ohne groß die Verschachtelungen auflösen zu müssen.

    Da wird es keine andere Möglichkeit geben. Zumindest kann man keine aufzeigen, wenn man nicht mal einen kleinen Hinweis hat, wie das Programm aufgebaut ist, und Du der Meinung bist diese Verschachtelung unbedingt zu benötigen.

  • die Verschachtelung an sich brauche ich nicht.

    Aber ich muss aus verschiedenen Routinen immer wieder die selbe aufrufen können.

    Wenn Part 2 nio, dann führe Part 1 nochmal aus und danach Part 2. Jetzt könnte Part 1 auch nio sein. Also soll er nochmal Part 1 ausführen und danach entweder Part 2 ausführen oder stoppen. Und das in verschiedenen Situationen. So kann es zu dieser Verschachtelung kommen.

  • Beim ABB sollte sowas machbar sein.

    Da gibt es die schönen Dinger wie error, raise, trynext usw.

    Da müsste man im Fehlerfall einen Fehler generieren, den im Error Handler nach oben durchreichen, und in einer Hautproutine (neudeutsch sowas wie scheduler) je nach Status und Fehler wieder richtig aufsetzen.

    Soviel zu meiner Idee, die dürfte jetzt ungefähr genau so präzise sein, wie Deine Beschreibung des bestehenden Programms. Aber mehr ist da leider nicht drin, mit den vagen Angaben.

  • die Verschachtelung an sich brauche ich nicht.

    Aber ich muss aus verschiedenen Routinen immer wieder die selbe aufrufen können.

    Wenn Part 2 nio, dann führe Part 1 nochmal aus und danach Part 2. Jetzt könnte Part 1 auch nio sein. Also soll er nochmal Part 1 ausführen und danach entweder Part 2 ausführen oder stoppen. Und das in verschiedenen Situationen. So kann es zu dieser Verschachtelung kommen.

    Wenn so etwas auftritt, dann werden Routinen nicht zuende gefahren!

    Meine Empfehlung: Zeichne mal ein Ablaufdiagramm

    Gruß,

    Konstantin

  • Mit dem Error-Handler wirst du nicht weiterkommen, weil damit der Aufrufstapel ja nicht einfach vergrößert werden kann. Selbst wenn du den größer bekommst, läuft der trotzdem irgendwann voll. Du wirst nicht umhinkommen, die Verschachtelung an irgendeinen Punkt zu beenden.


    Wenn Part 2 nio, dann führe Part 1 nochmal aus und danach Part 2. Jetzt könnte Part 1 auch nio sein. Also soll er nochmal Part 1 ausführen und danach entweder Part 2 ausführen oder stoppen.

    Was wenn Part 1 nio bleibt? Dann gibt es kein Abbruch.


    Kleiner Tipp: Alle Rekursionen können durch Schleifen ersetzt werden.

  • Mit dem Error-Handler wirst du nicht weiterkommen, weil damit der Aufrufstapel ja nicht einfach vergrößert werden kann.

    So war das ja auch nicht gemeint, sondern man kann im Errorhandler mittels RAISE die Rekursion elegant beenden und notfalls in den aufrufenden Routinen wieder mit RAISE solange zurückspringen, bis man im Scheduler ankommt (oberste Ebene) und dann wieder entsprechend der aktuellen Fehlernummer den nächsten Anlauf nehmen.

    Aber das ganze bleibt halt durch die schwammige Beschreibung des Vorgangs dann doch eher undurchsichtig.

  • Alternativ kann man auch noch eine Variable, welche vor dem ersten Aufruf der rekursiven Funktion gesetzt wird. Mit jedem Aufruf wird der Wert dann erhöht oder verringert. Bei einer Grenze ist dann schluss und man kann den Rückweg antreten.


    Ich habe es bereits bei einer Suchfunktion in einem Datensatz benötigt, falls jemand schlampig war und einen Zirkelbezug generiert hat.


    Aber ja - Ein Ablaufdiagramm hat auch mir schon über einige Hürden geholfen.

Hilfe und Support für ABB Roboter Programmierung, Konfiguration, Inbetriebnahme finden Sie hier im ABB Roboter Forum. ABB Rapid Programmierung ist einfach, die Roboterforum Community hilft sehr gerne.

Erstelle ein Benutzerkonto oder melde dich an um zu kommentieren

Du musst ein Benutzerkonto haben um einen Kommentar hinterlassen zu können

Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Geht einfach!
Neues Benutzerkonto erstellen
Anmelden
Du hast bereits ein Benutzerkonto? Melde dich hier an.
Jetzt anmelden