Aktuelles Programm für "Rückzugstrategie" zurücksetzen

  • Hallo zusammen,


    bei uns im Betrieb wird nicht das cell-Programm verwendet, sondern ein main.src. Wurde hier einfach mal so festgelegt.


    Im main.src werden dann auch schon Bewegungen gefahren. Das macht natürlich für eine "Rückzugsstrategie" Probleme, da bei einem deklarierten Interrupt (in dem dann z.B. eine Variable b_ProgAbort gesetzt wird) mit RESUME nicht die Bewegungen von main.src abgebrochen werden. Ausserdem steht der Programmzeiger mitten im Programm. RESUME ist hier dann eigentlich nicht möglich, da es keine untergeordnete Ebene gibt.


    Nun die Idee (um im System zu bleiben):
    Im Submit wird der Eingang für den Programm-Abbruch abgefragt. Kommt dieser, dann wird b_ProgAbort gesetzt, und das main.src gestoppt und zurückgesetzt. Der Bediener muß dann durch erneutes drücken der Starttaste an überlagerter SPS die "Grundstellungsfahrt" einleiten.
    So -> http://www.roboterforum.de/rob…uruecksetzen-t2116.0.html


    Am Anfang des main.src wird dann abgefragt ob die Bedingung b_ProgAbort gegeben ist und dementsprechend reagiert/initialisiert.


    Eure Meinung hierzu? Meist wird der Rückzug ja im cell eingeleitet.
    Wird nach dem Rücksetzen des Programms eine SAK-Fahrt erzwungen?


    Gruß
    Stefan

    Einmal editiert, zuletzt von StefanW ()

  • Schritt für Schritt zum Roboterprofi!
  • Hi,



    Eure Meinung hierzu? Meist wird der Rückzug ja im cell eingeleitet.
    Wird nach dem Rücksetzen des Programms eine SAK-Fahrt erzwungen?


    Start im EXT funktioniert immer gleich, ohne SAK-Fahrt. Wo da genau gestartet wird, ist egal. Auf HOME-Position prüfen und bei Nichterfüllung entsprechend reagieren ist kein Problem.
    Zu CELL weiß ich nichts, benutze ich nie.


    Grüße,
    Michael

  • Tach,


    wie Michael sagt: SAK gibt es in Automatik Extern nicht. Wenn die SPS startet, fährt der Robi los. Ist also kein Problem.


    ich nehme mal an, dein main.src sieht in etwa so aus:

    Code
    Deklarieren
    Initialisieren
    LOOP
      Produzieren
    ENDLOOP


    Das heisst, alles vor dem Loop wird nur 1 mal gemacht, nämlich nach dem Zurücksetzen. Bau da einfach einen Programmaufruf ein, der deine "automatisch Position auswerten und Home fahren" Routine aufruft und setze über den Submit mit einem Eingang dein Programm zurück. (Solltest eventuell im LOOP des main.src eine kleine Kontrolle einbauen, die überprüft ob der submit noch läuft....)


    lg Drudge

  • Na da hast Du zu 100% mein Programm abgeschrieben!!! ;) Genau so sieht mein "main.src" aus!


    Und vor jedem Produktions-Zyklus habe ich noch das stehen (also nach dem Loop):

    Code
    ;FOLD Submitprogramm laeuft ?
    REPEAT
      CONTINUE
      WAIT FOR  ($PRO_STATE0==#P_ACTIVE)
    ;ENDFOLD (Submitprogramm laeuft ?)


    Von daher ist mein Lösungsansatz, den ich mir ausgedacht habe genau der, den Du beschrieben hast.


    Ich werde dann oben (vor der Schleife) meine Abfrage machen, ob das Programm mit b_ProgAbort abgebrochen wurde. Falls ja, dann wird eine Grundstellungsfahrt gemacht.


    Eine Frage noch:
    Ich sollte wohl noch beim Zeitpunkt des Abbruchs die aktuellen Werte für BASE, TOOL und POS_ACT speichern!?
    Dann könnte ich abfragen, ob der Roboter auch noch da steht, wo abgebrochen wurde. Ansonsten könnte der Bediener ja von Hand gefahren sein, was dann böse ausgehen könnte!
    Oder kann ich mir das b_ProgAbort definiert zurücksetzen, wenn der Bediener zwischenzeitlich von Hand gefahren ist? Krieg ich das mit?


    Gruß
    Stefan

    Einmal editiert, zuletzt von StefanW ()

  • Kommt drauf an, wie Deine Rückzugsstrategie aussieht. Das scheint eine der Stellen zu sein, wo jeder Roboterprogrammierer das Rad neu erfindet :)


    Ich bin immer skeptisch, was Methoden angeht, die irgendwelche Zustände über den Programmtod hinaus retten wollen. Mein Ansatz sieht so aus, dass der Robbi zu Beginn des Programms guckt, ob er in Home steht, und wenn nicht, dann guckt er, wo er ist (Weltzonen). Abhängig davon erfolgen dann spezifische Fahrbewegungen oder eben nicht, was ich mit dem Bediener kommuniziere.


    Grüße,
    Michael

  • Wenn es der Kunde zulässt (fast alle ausser die Automobilisten) wählen wir mit dem Submit via CWRITE .... CANCEL1... das aktuell angewählte Programm ab wenn von T1 in AutoExtern gewechselt wird.
    Damit wird sichergestellt das nicht ein falsches Programm läuft.


    Anschliessend wird mit CWRITE unser MAIN.SRC aufgerufen, und da ist am Anfang die SicherZurGrundstellungsRoutine.
    In der wird wie auch bei Programmiersklave verschiedene Workspaces überwacht, oder Wege zwischen den einzelnen Raumpunkten.
    So kann man den Roboter solange er NAHE der Bahn ist immer automatisch heimschicken.


    Wo der Robbi keine Programmierten Wege hat, wird auch nicht heimgefahren, da der Bediener schon vorher etwas bewegt hat.
    Dann soll er auch schauen das das Ding wieder in Grundstellung kommt.


    Gruß Robotnik

  • Ich bevorzuge die Funktion per Interrupt. (Habe ich von Hermann abgekupfert). Bei mir gibt es immer das Programm Automatik. Dort wird der Interrupt deklariert und das eigentlich Programm aufgerufen. Am Anfang von Automatiik wird das Programm Grundstellung aufgerufen, welches also ebenfalls per Interrupt abgebrochen werden kann.
    Im Programm Grundstellung schaue ich mir die Achswerte von A1 an, um erstmal festzustellen wo sich der Robi ungefähr befindet. Nach einem PTP $POS_ACT (vorher passend Tool und Base setzen) kann ich dann die Position des Werkzeugs ermitteln und entsprechen freifahren. Teilweise verfahre ich dann Achspezifisch z.b. PTP {A2 -90, A3 0} oder eben kartesisch z.B.: LIN {z 1000}. Alle Fahrten werden schön langsam ausgeführt, damit der Bediener im Notfall noch stoppen kann. Da nach der HOME-Position bei mir immer noch ein Halt und eine Aufforderung zum Automatikstart folgt, muss der Bediener eh warten bis die Grundstellung erreicht ist.

    Greetings, Irrer Polterer!

    Wie poste ich falsch? Nachdem ich die Suche und die FAQ erfolgreich ignoriert habe, erstelle ich das gleiche Thema in mehreren Unterforen, benutze einen sehr kreativen Titel wie "Hilfe", am Besten noch mit mehreren Ausrufezeichen, und veröffentliche einen so eindeutigen Text, dass sich jeder etwas Anderes darunter vorstellt.


    Life is a beta version. Full of bugs and no Manual.

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