Laden...

[erledigt] Befehle per Socket an Roboter

Erstellt von Woffer vor 7 Jahren Letzter Beitrag vor 7 Jahren 3.211 Views
W
Woffer Themenstarter:in
3 Beiträge seit 2017
vor 7 Jahren
[erledigt] Befehle per Socket an Roboter

Hallo zusammen!

Ich bin möchte ein Programm schreiben, mit welchem ich Befehle an einen Industrieroboter (Universal Robots UR 10) schicken kann.

Der Roboter bietet dabei die Möglichkeit per Socket über einen gewissen Port Befehle anzunehmen.

Ich bin auf diesem Gebiet bisher absoluter Anfänger und daher ein wenig überfordert. 😄
Der Roboterhersteller gibt ein paar Hilfestellungen, welche allerdings ausschließlich in Python programmiert sind.
Ein funktionierender Python-Code zum Aufbau einer Verbindung und zum Schicken eines Fahrbefehls könnt ihr hier sehen:



import socket
HOST = "192.168.178.74"   # Simulation
# HOST = "168.254.175.98"  # realer Roboter
PORT = 30002

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))

cmd = "movel(p[0.25,-0.5,0.6,0,0,0], a=1, v=0.5)"+"\n"
s.send(cmd.encode("utf-8"))

s.close()

Die Verbindung wird aufgebaut und ein Befehl als String gesendet.

Jetzt zu meinem Anliegen an euch:

Mir wurde von mehreren Leuten empfohlen lieber mit C# zu programmieren. Vor allem auch aufgrund der besseren Möglichkeit der GUI-Programmierung.
Allerdings scheitert es gerade schon daran, den Python-Code von oben in C# nachzubasteln, damit ich eine funktionierende Verbindung hinbekomme.

Könnt ihr mir evtl. sagen, wie ich eine solche Socket-Verbindung aufbauen und Befehle - analog zum Code in Python - schicken kann?

Ihr würdet mir damit sehr helfen! 😃
Danke schon mal und einen schönen Abend.

16.834 Beiträge seit 2008
vor 7 Jahren

In keiner Programmiersprache kommst Du drum herum, dass Du Dir selbst die Grundlagen beibringst.
Was das Forum hier auf keinen Fall darstellst ist ein kostenloser Code-Generator.
Siehe auch [Hinweis] Wie poste ich richtig?, was Du vor wenigen Minuten bei Deiner Registrierung als gelesen markiert hast.

Was hast Du also versuchst, woran hängst Du?
Was ist das konkrete Problem der Umsetzung?

T
2.224 Beiträge seit 2008
vor 7 Jahren

@Woffer
Wie Abt schon schreibt, leg dir erst einmal die Grundlagen zu.
Um die Arbeit kommst du nicht drum herum.
Was du dann brauchst sind eigentlich "nur" Wissen im Bereich der Socket (TCP/UDP) Programmierung.
Den Befehl den du dann sendet musst scheint hier ein UTF-8 String zu sein, wie er im Beispiel gezeigt wird.

Versuch erst einmal selbst mit Sockets per TCP und mal per UDP mit einen eigenen Konsolen Programm einen Server und Client aufzusetzen.
Entsprechende Anleitungen gibt es hier im Forum und per Google ohne Ende.
Wenn du die Grundlagen drin hast, solltest du dein Problem lösen können.

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

W
Woffer Themenstarter:in
3 Beiträge seit 2017
vor 7 Jahren

Danke für die schnellen Antworten.

Einen fertigen Code wollte ich auch gar nicht, sorry.

Das Code-Beispiel von oben ist sogar meins. Hatte die Vorlage des Herstellers angepasst.
In Python kann ich auch alle mögliche Befehle schicken.

In C# werden die gesendeten Befehle nicht verarbeitet.

Allerdings weiß ich nicht woran es liegt.
Ich sehe folgende Möglichkeiten:
1.Ich baue die Verbindung falsch auf 1.Ich habe einen Fehler beim Fahrbefehl 1.Der Fahrbefehl wurde nicht richtig konvertiert 1.oder ich sende den Befehl falsch

Hier mal mein derzeitiger Programmcode:


namespace Socket_Test
{
    class Program
    {   
        static void Main(string[] args)
        {
            Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            const int PORT = 30002;
            const string IP_ADRESSE = "192.168.178.74";                                                 //Simulation
            IPAddress ip = IPAddress.Parse(IP_ADRESSE);
            IPEndPoint ip_end = new IPEndPoint(ip, PORT);

            UTF8Encoding utf8 = new UTF8Encoding();

            s.Connect(ip_end);
            string move = "movelj(p[0.25, -0.5, 0.6, 0, 0, 0], a = 1, v = 0.5)" + "\n";
            byte[] cmd = utf8.GetBytes(move);
            s.Send(cmd);




          //  s.Close();


        }
    }
}

Der Code läuft zumindest ohne Fehler durch.

Was man noch erwähnen kann ist, dass auf dem Roboter selbst kein spezifisches Programm zur Annahme der Befehle laufen muss. Die Befehle können vom Roboter direkt verarbeitet werden (deshalb auch die neue Zeile am Ende des Befehls).

Danke nochmals und sorry für die Anfängerfragen.

3.170 Beiträge seit 2006
vor 7 Jahren

Hallo,

vergleich mal die beiden move-Strings in Python und C#:

"movel(p[0.25,-0.5,0.6,0,0,0], a=1, v=0.5)"+"\n"
"movelj(p[0.25, -0.5, 0.6, 0, 0, 0], a = 1, v = 0.5)" + "\n"

Die ganzen zusätzlichen Leerzeichen im C#-String halte ich für einen ein echten Grund.
Außerdem hast Du eimal movel(...) und einmal movelj(...). Ob das trotzdem ein gültiger Befehl ist, kann ich nicht beurteilen.

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

16.834 Beiträge seit 2008
vor 7 Jahren

Schau Dir bitte die Methoden an, die Du selbst nutz - und debugge sie.
[Artikel] Debugger: Wie verwende ich den von Visual Studio?
Send zB, hat eine Rückgabe, wie viel Byte wirklich gesendet werden. Wird bei Dir ignoriert.

Zudem gibt es Tools wie Wireshark um zu prüfen, was tatsächlich über den Kanal läuft.
Damit kannst Du auch den Output zu Python vergleichen.
Sind aber alles Themen, die wir Dir nicht abnehmen können.

W
Woffer Themenstarter:in
3 Beiträge seit 2017
vor 7 Jahren

Nochmals Danke für die schnellen Antworten.

Ich habe meinen Fehler gefunden. Dabei war die Socket-Verbindung richtig eingerichtet, ich hab nur einen Fehler beim Fahrbefehl gemacht. Den habe ich gestern Abend wohl schlicht und einfach übersehen.

@MarsStein:

Hier lag der Fehler begraben.

"movel" stellt eine lineare Bewegung dar, "movej" eine Achs-Bewegung.
Als ich eine Achsbewegung schicken wollte, hatte ich vergessen das "l" zu löschen.

Danke an alle.

Jetzt wo die Verbindung steht kann ich mich an das richtige Programm machen.

Gruß
Woffer