Melfa OCX + Direct Execute: Benachrichtigung wenn Befehl durchgeführt wurde?

  • Hi !


    Ich steuere einen 6 Achsen Melfa mittels dem Melfa Active X Control von C++ aus. Dazu verwende ich größtenteils einfach den Request 111: Direct Execute und schicke einen MOV Befehl nach dem anderen zum Roboter.


    Wenn ich die Befehle zu schnell sende, queued der Roboter diese nicht sondern liefert die Fehelrmeldung dass das nicht geht solange ein anderen Befehl noch ausgeführt wird. gibt es eine Möglichkeit mitzubekommen wann die Befehlsausführung beendet ist? Momentan warte ich 3 sek nach jedem Befehl, aber ich denke es ginge oft schneller + das funktioniert schlecht wenn man den Roboter zur Entwicklung per OVRD auf Slow Motion stellt.


    Vielen Dank im Voraus :)
    Marc

  • ANZEIGE
  • Hallo,



    Ich steuere einen 6 Achsen Melfa mittels dem Melfa Active X Control von C++ aus.


    ist das ein Mitsubishi Produkt ? Kenne ich gar nicht. :denk:


    Wahrscheinlich ist das eine Verpackung des Roboterprotokolls:
    http://www.roboterforum.de/rob…oboter_rv3sb-t3878.0.html



    Ein


    Direct Execute


    klingt dann aber doch wieder so, als ob die Verpackung durchtunnelt wird ...



    Was vermutlich zu der Antwort führt: Nein, im R3-Protokoll gibt es keine Mitteilung wenn ein Move beendet ist, man muss aktiv nachschauen indem man sich die Statusinformationen oder die aktuelle Roboterposition ansieht.


    Grüße


    Urmel

  • Also ich habe keinerlei Installationscd oder sowas. Als der roboter geliefert wurde und ich den Lieferanten ansprach dass ich eine Steuermöglichkeit vom PC aus brauche und dass das so abgesprochen war machte der seinen Laptop an und kopierte mit ein "Setup für RT ToolBox2 English" und u.a. ein Dir "Utility\MelfaRXM\MELFA CRn-500CRn-700 series Communication middleware.msi" Letzteres installiert ein ActiveX Control dass man in VB, C++, C# etc. in sein Fenster clicken kann. Es hat ein paar Methoden wie Servo an un Servo aus und am wichtigsten aber Request. Da gibt es dann eine Menge Request Nummern und eine Davon ist 111: Direct Execute wo ich einfach Melfa Befehle einzeln abschicken kann als String und der Roboter führt sie direkt aus.


    Wie ist dass denn wenn man ein Programm in den Roboter selbst schreibt? Ist da ein MOV auch nciht blockierend? er macht sofort weiter? Wie fragt man da den Status ab? Wenn man mit der Statusabfrage Pollen kann ob der Befehle durchgeführt ist könnte ich dasselbe vermutlich auch vom PC aus durch das ActiveX Control machen.


    Unabhängig davon: Gibt es noch andere öffentlich bekannte Möglichkeiten den Roboter Fernzusteuern? Dieses RT Toolbox Programm kommuniziert ja auch mit dem Roboter, aber das ActiveX Control sucht man dadrin vergebens ...


  • "Utility\MelfaRXM\MELFA CRn-500CRn-700 series Communication middleware.msi"


    Das klingt nach Mitsubishi. Steht aber nicht im Katalog. ;)



    Dieses RT Toolbox Programm kommuniziert ja auch mit dem Roboter, aber das ActiveX Control sucht man dadrin vergebens ...


    Wahrscheinlich sind beide aber sehr eng verwandt. Auch die Software auf den Touchscreen-Teachboxen. Ist alles Visual C++ mit MFC ...



    Unabhängig davon: Gibt es noch andere öffentlich bekannte Möglichkeiten den Roboter Fernzusteuern?


    Ja, wie schon gesagt über TCP-Verbindung mit dem oben genannten Protokoll. Und natürlich auf Low-Level Basis mit dem MXT-Befehl.



    Wie ist dass denn wenn man ein Programm in den Roboter selbst schreibt? Ist da ein MOV auch nciht blockierend? er macht sofort weiter?


    Das hängt von den Befehlen ab, die hinter dem MOV stehen. Man sollte z.B. nie sowas schreiben


    Code
    Mov P1
    PX = P_Curr


    Dann wird PX irgendwo auf dem Weg zu P1 beschrieben. Aber


    Code
    Mov P1
    Dly 0.02
    PX = P_Curr


    führt zum erwarteten Ergebnis, weil er erst wartet, wenn die Bewegung zuende ist.

  • Hmm, woher weisst du dass jede Bewegung nach 0.02s fertig ausgeführt wurde? (Ich würde eher meinen dass das bei weiten Wegen nicht reicht?!?)


    [edit]Oder heisst das, dly blockiert zunächst bis die vorherige Operation ausgeführt wurde und fängt dann an zu warten für 0.02s?[/edit]

  • Hmm, wie erkennt man aus der Doku ob ein Befehl sofort ausgeführt wird oder ob gewartet wird bis der davor vorbei ist?


    Bei z.B.


    Code
    MOV P1
    MOV P2


    wartet er ja auch bis er P1 erreicht hat. Bei deinem Zuweisungsbeispiel nicht.


    Zuweisungen sofort, Befehle warten? Ist das immer so?


    Ich werde das nächste Mal mal probieren ein dly 0.02 zu requesten nach einem MOV. Mal schauen ob er dann blockiert bis er da ist.


    Ich werde auch aml beim support diese Schnittstellendocu anfordern.

  • Wenn zwei Moves im Programm aufeinander folgen und die Bewegungen verschliffen werden (CNT), muss er sich schon die zweite Bewegung ansehen, wenn er die erste berechnet. Sonst kann er die Kurve ja nicht berechnen.


    Er schaut sich also auf jeden Fall während einer Bewegung schon mindestens die nächste Zeile an. Wie weit er dann noch weitergeht, wenn dort keine Bewegung steht, weiß ich nicht.


    Auf jeden Fall ist es nicht so wie z.B. beim Stäubli, der bei nur bei einem expliziten waitEndMove() oder einer Greiferaktion wartet und im Programmtext sonst kilometerweit vorausläuft.

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