PZ auf Main nach System-PowerUp

  • Neuer Tag, neues Problem:


    Ich möchte, dass nach dem Hochfahren/Kaltstart der Roboter-Steuerung (RW 6.15.02) in Automatik, der Programmzeiger auf der ersten ausführbaren Zeile von Main steht, so das über eine SPS per "Motors On and Start"-Signal der Programmstart von dort aus erfolgt.


    Randbedingungen:

    - Ich habe nur das "Motors On and Start"-Signal als externes SIgnal zur Verfügung, kein "Start at Main", oder "PP to Main"!

    - das "Motors On and Start"-Signal wird auch zum Wiederanstarten verwendet, wenn das Programm unter einer Fehlerbedingung stoppt.
    Es kann also nicht auch für "PP to Main" o.dgl. verwendet werden.


    Was ich bisher habe:

    In der Bewegungstask (T_ROB1) habe ich folgende "SYS_POWERON"-Routine:

    Code
    PROC SYS_POWERON()
      ExitCycle;
    ENDPROC


    Die sorgt schon mal dafür, dass der PZ von seiner letzten Position (beim Abschalten) verschwindet.

    Nur leider wird der PZ dadurch nicht auf die erste Zeile von Main gesetzt, sondern ist lediglich verschwunden bzw. ungültig! D.h. beim "Motors On and Start"-Signal wird ein Fehler ausgelöst, da der PZ nicht gesetzt ist! Ich möchte aber vermeiden, dass der Anwender am TeachPanel "PZ -> Main" drücken muss, da das Panel für den normalen Werker nicht erreichbar ist!


    Ich habe das jetzt hinbekommen von einer zweiten Task aus, cross-connecteten Signalen etc., ist aber ziemlich un-elegant und schlecht wartbar.


    Frage: habt ihr andere Ideen oder Lösungen dazu, am besten irgendetwas Simples, was ich übersehen habe... ;)

    Danke!

  • ANZEIGE
  • Soweit ich das weiß ist dies ohne ein Signal PP->Main nicht möglich. Ich brauchte das aber auch nie.

    Beim drüber nachdenken ist mir die Frage aufgekommen; Funktioniert das evtl. über ein Power-On-Ereignis, einfach mal das Main in/mit "Power on" verknüpfen?

    Den Roboter "in seinem Lauf hält weder Ochs noch Esel auf!"

  • Kannst du dir nicht einfach vom SPS'ler das PP to Main geben lassen? An sich ist das ja nur ein Eingang bei dir den du auf den Systemeingang legen musst.

    Zur Not mal versuchen ob man den Systemeingang mit dem gleichen Signal wie für Motors On and Start verknüpfen kann.

    Eine weitere Idee wäre du schaltest im entsprechenden Event einen Ausgang. Diesen legst du über eine CrossConnection auf einen Eingang. Mit diesem kannst du dann den PP auf Main setzen über die Systemeingänge.

  • Hast du den Ausgangspost gelesen?


    ...

    Randbedingungen:

    - Ich habe nur das "Motors On and Start"-Signal als externes SIgnal zur Verfügung, kein "Start at Main", oder "PP to Main"!

    - das "Motors On and Start"-Signal wird auch zum Wiederanstarten verwendet, wenn das Programm unter einer Fehlerbedingung stoppt.
    Es kann also nicht auch für "PP to Main" o.dgl. verwendet werden.

    ...

    Den Roboter "in seinem Lauf hält weder Ochs noch Esel auf!"

  • Moin,

    Danke für eure Antworten

    Funktioniert das evtl. über ein Power-On-Ereignis, einfach mal das Main in/mit "Power on" verknüpfen?

    Verstehe ich nicht so ganz was du mit [Main in/mit "Power on" verknüpfen?] meinst:

    Mit "SYS_POWERON()" verwende ich ja bereits das Ereignis "PowerOn", ohne es explizit in der Konfig. als Ereignis einrichten zu müssen. Das Ergebnis ist ja das gleiche...

    Mit "ExitCycle" in diesem Ereignis komme ich auch aus dem Zyklus heraus, allerdings wird der PZ nicht auf die erste ausführbare Zeile in Main gesetzt, so wie in der Doku beschrieben:

    Zitat von Technical Reference Manual

    ExitCycle: Stoppen des aktuellen Zyklus und Setzen des Programmzeigers

    auf die erste Instruktion in der Hauptroutine.

    Möglicherweise funktioniert das so wie beschrieben wenn die Bewegunsgstask läuft bzw. die "Motoren An" sind, aber das ist zum Zeitpunkt des PowerUp noch nicht der Fall. "ExitCycle" macht den PZ nur ungültig, setzt ihn aber nicht auf die erste Instruktion in Main!


    Wie eingangs erwähnt habe ich es ja am Laufen, mit:

    - Cross-Connection von virtuellem Ausgang auf virtuellen System-Eingang mit "PPToMain"
    - "ExitCycle" ausführen und Merker setzen im Ereignis "SYS_POWERON"

    - In parallel laufender (semistatischer) Task den Merker checken und so lange den virtuellen Ausgang pulsen bis ich per Interrupt-Handler das erfolgreiche Setzen von "PPtoMain" in der Bewegungstask gemeldet bekomme.


    Läuft, ist aber meiner Meinung nach recht viel Aufwand für so eine triviale Aufgabe.

    Vielleicht meldet sich ja noch jemand mit Verbesserungsvorschlägen...


    Danke nochmal

  • Ich meine "einfach" mal eine Eventroutine erstellen, Main mit Power_On verknüpfen... versuchen


    Den Roboter "in seinem Lauf hält weder Ochs noch Esel auf!"

  • Ich meine "einfach" mal eine Eventroutine erstellen, Main mit Power_On verknüpfen... versuchen

    Huch, das habe ich wirklich noch nicht/nie ausprobiert, schließe mich da aber der Befürchtung von Programmiersklave an... Vor allen Dingen sollte beim "PowerUp" ja eigentlich nicht Main ausgeführt werden, sondern nur der PZ an den Start innerhalb von Main. Starten soll das erst beim "Motoren an und Start" seitens der SPS. Ich werde es trotzdem bei Gelegenheit mal ausprobieren...




    ?

    Jo, das hatte ich auch gesehen und ist auch so eingestellt! (ist ja auch Default):

    ...bringt aber nix, d.h. es funktioniert eben nicht so wie angegeben.
    Wenn ich in Automatik starte, bleibt der PZ trotzdem da wo ausgeschaltet wurde... X/


    Diese Aufgabenstellung ist ja nicht aus der Luft gegriffen, deswegen hatte ich gehofft, nur irgendwas übersehen zu haben.

  • Uh.. das wird kein gutes Ende nehmen, fürchte ich.

    Ja? Warum? Ich hab das ja nur mal in's blaue hinein geschrieben ohne es zu testen...

    Wenn ich die Woche nochmal unbeobachtet bin und etwas Zeit habe teste ich das mal.

    Mich würde aber schon interessieren warum du dieser Meinung bist...


    PS: wenn Motoren nicht ein und das Programm nicht gestartet sollte doch auch nichts passieren

    (Zitat: "Vor allen Dingen sollte beim "PowerUp" ja eigentlich nicht Main ausgeführt werden").

    Den Roboter "in seinem Lauf hält weder Ochs noch Esel auf!"

    Einmal editiert, zuletzt von AtoK09 () aus folgendem Grund: Anmerkung

  • Wie gesagt, ich werde das bei Gelegenheit auch mal ausprobieren. Vielleicht versucht die Steuerung ja Main zu starten und das schlägt dann fehl, weil Motoren nicht an, oder so. Das könnte man abfangen. Wenn der PZ danach bei der ersten Instruktion in Main steht und von da aus beim Neustart weiterläuft, wäre das ja auch OK.
    Ich poste dann...

  • Ja? Warum?

    Diese Ereignisroutinen sind auf ihre Weise nebenläufig innerhalb der Bewegungstask, meinen unangenehmen Erfahrungen nach. Die lassen sich auch nicht per Stop beenden, nicht abwählen, der PZ lässt sich nicht beeinflussen etc..

    Eine Ereignisroutine auf PowerUp, die nicht endet, führt zu einer Blockade des Systems in der Weise, dass das Programm in der Bewegungstask immer als laufend angesehen wird, mit allen negativen Folgen. Programmanwahl? Editieren? Neustart? Halten sie erst das Programm an. Und dann hilt es ja nichts, denn es ist ja auf PowerUp.

    Letztlich provoziert man dann einen Systemfehler und macht einen der erweiterten Neustarts, um das System überhaupt wieder lauffähig zu bekommen.


    Bin aber tatsächlich nicht sicher, was passiert wenn man "main" nimmt. Aber ich würd's auch nicht probieren wollen.

  • Mahlzeit,


    ich hatte gestern Abend im RobotStudio zu diesem Thema noch etwas mit Prozedur-Aufrufen , Stop- und Exit-Instruktionen etc. im PowerUp-Ereignis experimentiert und die Ergebnisse waren eher ernüchternd: je nach Komplikation laufen die semistatischen Task nicht mehr hoch u.dgl. Das ging teilweise bis zum Komplett-Absturz der virtuellen Steuerung und/oder des RobotStudios.


    Ich denke, ich lass das mit den Experimenten auf der realen Steuerung mal sein und belasse es bei meiner aktuellen, prinzipiell funktionierenden Lösung.


    Danke für eure Beiträge...

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