Sperrgebiet - RP-5AH

  • Hallo,


    ich arbeite mit einem Mitsubishi RP-5AH und habe dabei ein kleines Problem. Leider bin ich nicht sehr programmier-erfahren, weshalb es mir schwer fällt, eine Lösung zu finden.
    Der Roboter kann in z-Richtung um 50mm verfahren. Bei meinem Prüfstand kann es aber trotzdem passieren, dass der Greifer gegen einen Teil des Versuchsaufbaus fahren könnte. Dies lässt sich konstruktiv leider auch nicht vermeiden.
    Ich habe mir überlegt, ob ich eine Art Sperrgebiet einrichten kann, das der Roboter nie durchfahren darf. Dafür habe ich auch schon die Funktion "Zone" gefunden, aber wie kann ich es bewerkstelligen, dass dauerhaft überwacht wird, dass der Roboter nicht in diese Zone kommt? Ist das überhaupt möglich?


    Vielen Dank für die Hilfe,
    Torben

  • ANZEIGE
  • Hallo,


    du hast die Möglichkeit deine Zone in einen Interrupt einzubinden.
    Bei einem Interrupt im Hauptprogramm besteht die Möglichkeit in jederzeit
    Ein -oder Auszuschalten. Die Überwachung könnte so ausgesetzt werden.
    Das auslesen der aktuellen Position sollte in einem separaten Programm (Hintergrundtask) passieren.
    (Programmplatzparameter als Always-Task deklarieren )


    Bsp.:


    Hintergrundtask (läuft bei Controller Start sofort los)



    M1 = ZONE(P1,P2,P3)



    Hauptprogramm:


    DEF ACT 1, M1 = 1 GOTO *STOPROB
    !Einschalten
    Act 1 = 1


    *STOPROB
    HLT




    mfg Martl

  • Guten Morgen,
    ich habe jetzt viel herum probiert und ebenso viel im Manual gelesen, habe aber noch nichts funktionierendes hinbekommen.
    Die Struktur habe ich mir jetzt so überlegt:
    Programm Nr. 1 besteht aus der Überwachung mit Hilfe der Zone-Funktion. Es ist in der Parameterliste mit ALWAYS deklariert und soll beim Start dann Programm Nr. 2 laden, in dem sich die Befehle für Bewegungen, etc. befinden.
    Diese Struktur habe ich mir abgeschaut aus der Bedienungs- und Programmieranleitung, Seite 9-42f.
    Wenn ich das ganze so machen möchte, muss ich aber den Parameter ALWENA ändern (laut Anleitung). Diesen Parameter finde ich nirgends... In der Parameterliste, in der ich schon SLT 2 und SLT 3 angepasst habe, taucht er nicht auf. Wo finde ich ihn?
    Funktioniert das so, wie ichs mir überlegt habe, oder hat die Sache noch einen Haken?


    Vielen Dank für Eure Hilfe!
    Torben


    Edit: Wenn diese Überwachung dann funktioniert, wie schnell stoppt der Roboter? Konkret: wenn die Steuerung bei voller Geschwindigkeit merkt, dass die aktuelle Position im "Sperrgebiet" liegt, wie weit fährt der Roboter dann noch bis er steht? Gibts dafür Erfahrungswerte oder muss ich es dann einfach mal ausprobieren?

    Einmal editiert, zuletzt von Torbinho ()

  • Hallo,


    Programmierst du mit Cosirop?
    In Cosirop wäre es einfacher das Programm zu deklarieren.
    RCI-Explorer =>Slots
    Programm in einen Slot laden => Eigenschaften ändern (auf Always) und dann Controller neu starten.
    Das Programm muss aber dann zur Datensicherung wieder auf Start geändert werden, da sonst nicht gesichert werden kann.


    In einem Alwaystask können keine Roboterbewegungen durchgeführt werden.


    Würde auf alle Fälle den Hintergrundtask separat halten und nicht dein
    Bewegungsprogramm damit starten.
    Es soll ja nur zur Überwachung der aktuellen Position dienen.


    Das mit dem Schlüsselschalter den Roboter anstarten ist auf jedefall eine gut Sache, wenn keine übergeordnete Steuerung verwendet wird.
    Verwende ich auch des öfteren.




    mfg


    Martl

  • Hallo Martl,


    ja, ich arbeite mit Cosirop. Allerdings habe ich Version 1.7 und kann dort keinen RCI-Explorer finden. Ich nehm an, man kann COSIROP auch nicht einfach updaten, sondern bräuchte eine neue Lizenz?!
    Wenn ich den Hintergrundtask separat halten soll, wie knüpfe ich dann die Verbindung zwischen Haupt- und Hintergrundtask?


    Hier mal die wesentichen Teile der Quelltexte:
    Hauptprogramm:


    Hintergrundtask


    Dazu sind die Slots so eingestellt:
    SLT2: 1, REP, START, 28
    SLT3: 2, REP, ALWAYS, 10


    Was mache ich falsch?


    Besten Dank,
    Torben

    Einmal editiert, zuletzt von Torbinho ()

  • Hallo,


    um eine Verbindung vom Hintergrundtask zum Hauptprogramm zu erhalten
    muss die Variable M1 als Globale Variable deklariert werden. Dazu wird normalerweise ein Benutzerbasisprogramm erstellt(ganz normales Cosirop Programm).


    z.B var.mb4


    und in diesem Programm deklarierst du die Variable


    Def inte M1


    dann mußt du den Programnamen in den
    Parameter "PRGUSR" eintragen ohne (.mb4) also nur var
    => alles Speichern und dann neu booten


    Somit ist die Variable dann Global gültig.
    So kannst du jederzeit neue Variable ganz leicht
    Global (für alle Programme gültig) machen
    Jetzt kann jedes Programm die Variable M1 verwenden.


    Dein Hintergrundtask wäre soweit in Ordnung.
    Das mit dem Xload für den Hintergrundtask benötigst du gar nicht
    da dein Hintergrundtask als Always in den Parametern deklariert ist,
    und er dadurch beim booten sofort anstarten müsste.


    Welche Teachbox hast du zu verfügung?
    Wahrscheinlich die alte R28TB.
    Mit ner neuen R46TB wäre alles viel übersichtlicher und du könntest
    auch leicht prüfen ob der Task gestartet wurde.



    mfg



    Martl

  • Hey Martl,


    danke für die Hilfe! Das mit der globalen Variable hatte ich zwar schon irgendwo gesehen, aber noch nicht ausprobiert.
    Dies Programm besteht in diesem Fall tatsächlich nur aus der einen Zeile, in der ich M1 deklariere?!
    Muss ich das Programm auch in der SLT-Liste eintragen, oder reichts, wenn das einfach nur einmal an den Roboter übertragen wird?


    Leider bin ich grad nicht mehr bei der Arbeit und werde auch erst Montag wieder da sein. Aber im Zweifelsfall habe ich die alte Teaching-Box. An dem Roboter scheint nichts neu zu sein ;) Leider bin ich auch nicht in der Position, um einfach ne neue zu kaufen :(



    Besten Dank nochmal,
    Torben

  • Guten Morgen,


    nachdem ich nun wieder einige Zeit herumprobiert habe, bin ich schon etwas weiter gekommen. Jetzt habe ich nochmal zwei Fragen:


    1. Wenn ich die SLT-Parameter ändere, dann ist der letzte Eingabewert ja die sogenannte Priorität. Wenn ich das Manual richtig verstehe, ist damit die Anzahl der abzuarbeitenden Zeilen gemeint, bevor die Steuerung aus Programm 1 in Programm 2 springt. Habe ich das so richtig eingestellt?


    SLT1: str, REP, START, 1
    SLT2: ueb, REP, ALWAYS, 4


    Meine Logik dabei ist diese: Nach jeder Zeile im Steuerprogramm soll wieder die Arbeitsraumüberwachung ausgeführt werden. Das Programm ist 4 Zeilen lang und dementsprechend steht dort die 4 am Ende. Stimmt das?


    2. Ich wundere mich etwas über das Label *STOPROB (Quelltext steht ja oben). Ich dachte, dass die Steuerung diese Zeilen ignoriert, wenn das Label nicht aufgerufen wird. Momentan häkt der Roboter aber jedes mal in dieser Zeile an, sprich er durchläuft sie ganz normal, wie jede andere Programmzeile... Habe ich da auch etwas falsch gemacht, oder ist das nomral so? Wie kann ich das ganze dann so einstellen, dass der Roboter nur dann die Befehle nach *STOPROB ausführt, wenn *STOPROB aufgerufen wird?



    Vielen Dank für Eure ausdauernde Hilfe,
    Torben


    Edit: Gibt es außerdem eine Möglichkeit, obwohl ich die alte Teachbox (R28TB) verwende, zu sehen, ob der Hintergrundtask läuft?

    Einmal editiert, zuletzt von Torbinho ()

  • Ok, ein kleiner Nachtrag:


    Das Problem lag darin, dass ich die Globale Variable selbst definiert habe. Ich habe nun die vordefinierte Variable M_01 genommen, mit der das ganze auch funktioniert. Dann brauche ich auch keine var.mb4-Datei mehr, um die GLobale Variable zu definieren.
    Mein Beitrag von eben hat sich damit komplett erledigt. auch das Label habe ich mittlerweile hinbekommen.
    Dafür habe ich ein neues Problem:
    Der Roboter stoppt erst, nachdem er an der gewünschten Position angekommen ist. Das ist aber ja nicht Sinn der Sache, er würde dann ja trotzdem noch ins Hindernis fahren und erst hinterher stoppen.
    Im Manual steht dazu, man könne den DEF ACT-Befehl folgendermaßen abändern:
    DEF ACT 1, M_01=1 GOTO *STOPROB, S
    Mein Cosirop gibt bei diesem "S" aber einen Fehler aus, vielleicht ist die Betriebssoftware des Roboters nicht aktuell genug(kann eigentlich nicht sein: Habe Version H3, laut Manual funktionierts ab E3)?! Wisst ihr noch eine andere Variante? Oder muss ich das evtl. anders eingeben? habe schon einige Varianten probiert, die nicht funktionierten.


    Besten Dank,
    Torben

    Einmal editiert, zuletzt von Torbinho ()

  • Hallo,


    er sollte schon bei einem Interrupt stehenbleiben.


    Bist du sicher, das er überhaupt reinspringt ? Eventuell kannst du mal testweise ein HLT in das Interruptunterprogramm setzen und schauen ob er da stehen bleibt.


    Ich würde auch die Priorität der Tasks erstmal auf den Standardwerten lassen und sie nur ändern, wenn es wirklich erforderlich ist.


    Version H3 ist in der Tat schon sehr alt (6 Jahre ?), ob es da noch Bugs bei Interrupts gab, weiß ich nicht. Kann gut sein, dass es das mit dem "S" damals noch nicht gab.


    Grüße


    Urmel

  • Hallo Urmel,


    ich bin mir sicher, dass der Interrupt reinspringt. Ein HLT war genau der Zweck meines Interrupts ;) Außerdem kann ich auf dem Controller-Display sehen, dass er genau in die richtige Zeile springt. In diese Zeile verweise ich von keiner anderen Stelle aus!


    Der Support hat mir eben geraten, es anstatt der komplizierteren Version mit Interrupt mit den Verfahrwegbegrenzungsebenen zu probieren. Mal sehen, ob ich die weit genug an meinen Versuchsstand anpassen kann. Das Prinzip hört sich ja schonmal einfacher an...


    Wie ist das mit den Versionen? Sind die alphabetisch sortiert, die älteste ist A1 und dann kommen aufsteigend die neueren Versionen? Gibts irgendwo eine Übersicht darüber und kann man die Software updaten?


    Liebe Grüße,
    Torben

    Einmal editiert, zuletzt von Torbinho ()


  • Wie ist das mit den Versionen? Sind die alphabetisch sortiert, die älteste ist A1 und dann kommen aufsteigend die neueren Versionen? Gibts irgendwo eine Übersicht darüber und kann man die Software updaten?


    A1 bedeutet 1.0, das letzte was ich auf einem Controller für einen S- oder A- Roboter gesehen habe war K8k. Die SD-Roboter mit Melfa Basic 5 sind glaube ich schon bei Version P.


    Updaten geht mit einer Speicherkassette, die auf einen Steckplatz im Controller kommt. Ob das alle Kunden selber dürfen oder der Service macht, kann ich nicht sagen. Neuere Roboter mit USB-Anschluss kann man wohl auch von der Teachbox oder dem PC aus updaten.

  • hmm, das mit der Speicherkassette wäre mal ne Maßnahme. Mal schauen, ob ich das in den näcshten Tagen hinbekomme.


    Hat jemand von Euch Erfahrung mit den Parametern AREAnP1, AREAnP2, AREAnME und AREAnAT?
    Eigendlich erscheinen die mir am praktischsten, um einen Teil des arbeitsraums auszuschließen. Ich kriege es jedoch nicht zum Laufen. Meine Einstellungen, nur anhand eines kleinen Beispiels:


    AREA1P1: 175.00,-25.00,20.00,-360.00,-360.00,-360.00
    AREA1P2: 225.00,25.00,30.00,360.00,360.00,360.00
    AREA1AT: 2
    Nun fahre ich mit meinem Testprogramm einfach nur auf die Position (200,0,25), die ja innerhalb dieses Quaders liegen sollte. Aber es passiert schlicht und einfach gar nichts. Wenn ich AREA1At auf 2 setze, sollte ja eigentlich eine Fehlermeldung erscheinen, tut sie aber nicht. Wenn ich AREA1AT auf 1 setze, sollte ich an der Variable M_UAR sehen können, ob sich der Roboter in dem definierten Körper befindet. Aber auch hier tut sich nichts (M_UAR ist immer 0), auch nicht, wenn ich den Parameter USRAREA ändere. Habe da schon eine Menge Varianten durchprobiert, aber nichts passiert.


    Habt Ihr damit Erfahrungen gemacht? Muss ich da etwas anders machen?


    Urmel: Dieses "S" bei den Interrupts funktioniert aber auf aktueller Software? Wäre für mich ein Grund mehr, die neue Software draufzuspielen...


  • Urmel: Dieses "S" bei den Interrupts funktioniert aber auf aktueller Software? Wäre für mich ein Grund mehr, die neue Software draufzuspielen...


    Das will ich doch hoffen, wenn es im Handbuch steht. :mrgreen:


    Ansonsten kann ich leider nicht viel helfen, bei mir sind die meisten Bewegungen in C++ (über den MXT Befehl) programmiert, da kann man seine eigenen Bereichseinschränkungen bauen und da die Bewegung alle 7 ms neu berechnet wird, kann man auch einfach abbrechen.

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