mxt-Echtzeitsteuerung (RV-6SDL) über Ethernet mit Linux

  • ANZEIGE
  • Hallo,


    eigentlich unterscheidet sich C++ Netzwerkprogrammierung nicht sonderlich zwischen Windows und Linux. Die Windows-Sockets basieren auf der ursprünglichen BSD-Unix Implementierung. Die Funktionen wie socket(), recvfrom(), sendto() usw. unterscheiden sich nur geringfügig z.B. in den Typen ihrer Parameter.


    Das Mitsubishi Beispiel im Handbuch wurde aber sicher mit dem Ziel geschrieben ein Beispiel zu haben, dass auf wenige Druckseiten passt, aber komplett ist und keine externen Libraries verwendet.


    In einer ernsthaften Anwendung würde man da eher versuchen erst mal etwas Struktur hineinzubringen, z.B. mit einer Klasse, die die grundlegende Netzwerkkommunikation kapselt.


    Das braucht man heute nicht mehr selber machen, auch Qt bietet dafür etwas
    http://qt-project.org/doc/qt-5.0/qtnetwork/qudpsocket.html


    Wichtig wäre erstmal, dass du dich mit Netzwerkkommunikation an sich auskennst. Vielleicht erstmal den Datenaustausch zwischen zwei eigenen Programmen zur Übung implementieren. Vom Code in der Anleitung brauchst du nur die Headerdatei strdef.h. Die Robotersteuerung besteht dann eigentlich nur aus dem Packen von Paketen mit passendem Inhalt, Senden, Empfangen der Antwort und Auswertung der Antwort.


    Grüße


    Urmel


  • Ich kann ergaenzen, dass das OPEN Kommando unglaublich eklig ist, wenn ENET nicht gross geschrieben ist oder Leerzeichen enthalten sind.


    Zweitens solltest Du auf dem Roboter (Mit RT Toolbox) sicherstellen, dass die IP Adresse Deines Control-PC's in einem der drei MXTCOMM1-3 Parameter enthalten ist (unter Parameter->Ethernet). Nur von diesen Rechnern empfaengt der Roboter realtime Kommandos.


    Beim MXT Kommando musst Du darauf achten, dass der richtige Koordinaten Typ eingestellt ist. MXT akzeptiert nur XYZ oder Joints oder Inkremente etc.
    Das Echtzeitprotokoll muss mit seinen Sende-Kommandos da uebereinstimmen, und das ist, soweit ich mich erinnere, im Handbuch auch missverstaendlich beschrieben.


    Wie schon Urmel sagte, ist das Testprogramm ein guter Anfang.
    Aeh, und dann gibt es noch das Problem des structure packing, das je nach Compiler unterschiedlich ist, da faehrst Du wahrscheinlich unter Linux auch besser als unter Win7-64Bit, meiner Erfahrung nach.


    Zum Unterschied zwischen Windows und Linux:


    Der Aufruf der select() Funktion unterscheidet sich, der erste Parameter kann unter Windows 0 sein, unter Linux (man select):
    "nfds is the highest-numbered file descriptor in any of the three sets, plus 1."


    Den Aufruf von WSAStartup(MAKEWORD(1, 1), &Data); braucht es unter Linux nicht.


    UNBEDINGT darauf achten, dass unter Linux oder auch Windows die Firewall ausgeschaltet ist!
    Das UDP Protokoll ist unmoeglich zu debuggen, die Pakete verschwinden praktisch per Definition im Nirvana.


    Solltest Du die Kommunikation hinbekommen (d.h. erst Position abfragen, dann neue Position schicken), darauf achten, dass die neue Position nicht zu weit weg ist von der aktuellen, also irgendwas im Millimeterbereich. Sonst schafft es der Roboter in der vorgegeben Zeit (ca 20ms) nicht, da hin zu fahren und meldet einen Fehler.


    Ich bin da auch gerade hart an dem Thema dran, kannst also gerne weiter nachfragen. Wenn's zu off-topic wird halt ueber personal-mail.


    Viel Erfolg!


    Alex.


  • Zweitens solltest Du auf dem Roboter (Mit RT Toolbox) sicherstellen, dass die IP Adresse Deines Control-PC's in einem der drei MXTCOMM1-3 Parameter enthalten ist (unter Parameter->Ethernet). Nur von diesen Rechnern empfaengt der Roboter realtime Kommandos.


    Das stimmt nicht. Dieser Parameter wird nur bei Programmierung in Movemaster Command verwendet, wenn man kompatibel zur alten Echtzeitsteuerung der RV-E Roboter bleiben will, wo Raw-Sockets über Arcnet verwendet wurden. Im Handbuch der separaten Ethernet-Karte stand noch

    Zitat

    This is set only when using the real-time external control function with the MOVEMASTER command robot language.


    in neueren Handbücher ist das verloren gegangen.



    Der Aufruf der select() Funktion unterscheidet sich, der erste Parameter kann unter Windows 0 sein, unter Linux (man select):
    "nfds is the highest-numbered file descriptor in any of the three sets, plus 1."


    Darüber bin ich auch schon gestolpert. :zwink:

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