Ethernet-KRL, XML Datei an Roboter senden C#

  • Hallo,


    ich habe eine Anwendung, bei der ich Koordinaten an einen Roboter aus einer C# Anwendung heraus senden soll.


    Erklärung:
    Ich werte mit einer C# Anwendung Positionen über eine Kamera aus und möchte diese Daten nun an den Roboter senden, damit dieser die Positionen dann anfährt. Nun soll der Roboter mir zunächst den Status auf Position senden und dann sende ich Ihm die nächsten Koordinaten.
    Ich habe bereits mit einem Socket Test Programm aus dem Internet getestet, dass mein Programm auf dem Roboter funktioniert. Nun muss dies selbst programmiert werden, sodass ich meine XML-Datei an den Roboter senden kann.
    Wenn ich jetzt die Socket.Connect Methode aufrufe, kommt immer der Fehler, dass der Roboter die Verbindung verweigerte.
    Hier mein Code:


    Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    const int Port = 49512;
    const String IP = "127.31.1.147";


    IPAddress ipo = IPAddress.Parse(IP);
    IPEndPoint ipE = new IPEndPoint(ipo, Port);


    string fileName = "Desktop/Daten.xml";



    sock.Connect(ipE);


    sock.SendFile(fileName);


    sock.Shutdown(SocketShutdown.Both);
    sock.Close();


    Danke.

  • Schritt für Schritt zum Roboterprofi!
  • Hallo,
    interessant. mache gerade fast dasselbe. :)
    Ist der Roboter Server oder Client? Bist du sicher, dass du die richtige XML-Konfiguration erstellt hast und diese auch aufrufst?
    bei mir ist der Roboter Client und ein PC der Server. Ich hab's so ungefähr wie unten beschrieben gelöst. Allerdings mit einem Multiserver und ein wenig komplexer. Außerdem habe ich das ganze in VB erstellt. Hier eine ganz simple Lösung in VB, die dir vielleicht einen Ansatz bietet.

    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.

  • Hallo,
    danke für die schnelle Antwort. Ja die XML Konfiguration passt, ich kann mit einem Testprogramm aus dem Internet, welches an einen Port sendet auch Daten mit dem Roboter dann auslesen und weiterverarbeiten.
    Der Roboter ist mein Client und der PC Server. Ich werde mir den Code mal anschauen. An multithreading führt kein Weg vorbei oder?
    Ist es möglich, dass der Port am Roboter nicht frei ist? Habe ihn zwar unter dem Punkt Netzwerkkonfiguration eigentlich festgelegt aber kann dieser trotzdem geschlossen sein?

  • Habe jetzt auch mit dem mitgelieferten Server von Kuka Daten gesendet und funktioniert. Wenn allerdings der Server nicht gestartet ist bekomme ich im Roboterprogramm den Fehler "Ethernet-Verbindung zu externem System konnte nicht hergestellt werden". Ist der Server gestartet funktioniert alles.


  • An multithreading führt kein Weg vorbei oder?


    Da ich gleichzeitig mit 4 Robotern, 3 Kameras , einem Drucker und dem Kundenserver kommunizieren muss, führt in meinem Fall kein Weg am Multithreading vorbei.Ist auch sehr komfortabel und eigentlich kein Hexenwerk.



    Ist es möglich, dass der Port am Roboter nicht frei ist? Habe ihn zwar unter dem Punkt Netzwerkkonfiguration eigentlich festgelegt aber kann dieser trotzdem geschlossen sein?


    Wenn der gleiche Port mit dem KUKA-Beispiel-Server funktioniert, kann's daran nicht liegen.

    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.

  • Ich kann dir vielleicht später mal einen Testserver auf der Basis von meinem Server senden.

    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.

  • Danke, das wäre sehr gut. Komme nämlich gerade kaum weiter aber werde nun erstmal versuchen den oben geschriebenen Code von dir anzupassen in C# und diesen testen.

  • Ergänzung:
    Im Roboterprogramm bekomme ich immer folgenden Fehler, wenn der mitgelieferte Server von Kuka nicht gestartet ist:
    "Ethernetverbindung zum externen System konnte nicht hergestellt werden".
    Kann es sein, dass dieser Server dann erst den Port am PC freigibt und dann deshalb erst eine Verbindung aufgebaut werden kann?

  • Das ist völlig logisch. Es ist ja kein Port geöffnet, an den der Roboter was senden könnte. Egal, ob KUKA-Beispiel-Server oder eigene Software. Der Server muss zuerst laufen, bevor der Client sich verbinden kann.

    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.

  • Ach so okay. Ja so etwas dachte ich mir jetzt schon. Aber wie starte ich einen solchen Server? Habe schon so viel gesucht und getestet aber nichts hat funktioniert.
    Auch den oben geschriebenen Code in c# übersetzt hat nicht funktioniert.

  • Vielen Dank.
    Der Server läuft und eine Verbindung besteht. Nur sende ich scheinbar noch keine Daten, da im Roboterprogramm der Fehler auftritt: "Zugriff auf leeren Empfangsspeicher".
    Wie kann ich dann auf die erhaltenen Daten zugreifen und diese auswerten?

  • Moin,


    ich weiß das Problem bestand schon 2017, aber ich habe jetzt das gleiche Problem, mit dem Zugriff auf den leeren Empfangsspeicher und wollte nachfragen, wie du das gelöst hast.


    Mit freundlichem Gruß

    Jascha

  • genau wie in Beispielen im Handbuch ... nicht aus dem Puffer lesen, wenn der Puffer leer ist.


    EKI sollte das Flag setzen, wenn Daten empfangen werden, und dann mit Interrupt lesen.


    Eine andere (langsamere) Option besteht darin, den Puffer mit EKI_CheckBuffer() zu überprüfen.

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