asyril Asycube und EYE+

1. Einleitung

Die Kombination aus einem Asycube und dem EYE+ Smart Control System ermöglicht es, bei der Zuführung, Vereinzelnung und Ausrichtung der als Schüttgut gelieferten Teile an Effizienz zu gewinnen. Der Asycube ist dank seiner mit TCP/IP und Modbus TCP kompatiblen Kommunikation mit allen HORSTs und mit jeder SPS kompatibel. Für die Einrichtung und Nutzung von EYE+ sind keine Vorkenntnisse in der Bildverarbeitung erforderlich. Es ist einfach und intuitiv zu bedienen. Folgen Sie einfach den Schritten in der EYE+ Studio Web-Oberfläche.

2. Einrichtung des Systems

Die Einrichtung des Systems ist sehr gut in den Dokumenten von asyril beschrieben. Der Web-Wizard von Asyril leitet einen sehr intuitiv durch die verschiedene Schritte um Bauteile einzulernen sowie die benötigten Rezepte zu erstellen. Weitere Informationen findet man auch in folgender Dokumentation https://doc.eyeplus.asyril.com/de/2.1/index.html

3. Kommunikation

Die Teilnehmer müssen sich im selben Bereich des Netzwerks befinden. Wie man die IP-Adresse des Roboters einstellt ist in folgendem Artikel beschrieben: IP-Adresse ändern

Folgend wird die Kommunikation mittels TCP IP beschrieben. Weitere Informationen dazu findet man unter Sockets

Auf der EYE+ Weboberfläche muss unter dem Tab configuration → robot → TCP/IP Configuration der End of line character auf Carriage Return und Line Feed eingestellt werden.

3.1. Aufbau der Verbindung

// TCP/IP Socket Communication
var IP = "192.168.0.50";    // IP asyril EYE+
var Port = 7171;        // Port IP asyril EYE+
var Terminator = "\r\n";     // Zeilenumbruch Carriage Return + Linefeed. Muss in asyril EYE+ Web HMI unter "configuration" konfiguriert werden 

//********************************************* Programm *********************************************

// Aufbau der Verbindung zu asyril EYE+
try

    var socket = new java.net.Socket();
    socket.connect(new  java.net.InetSocketAddress(IP, Port), 10000); //10s timeout

    // 10 sek Timeout beim Einlesen der Nachricht ueber einen Socket
    socket.setSoTimeout(10000);
}
catch (e)
{
    show_info("A connection with the Asyril EYE+ could not be established!");
}

3.2.  Schreiben einer Nachricht

// Nachricht ueber Socket schreiben
function writeMessage(socket, message)
{
    var printWriter =
        new java.io.PrintWriter(
            new java.io.OutputStreamWriter(
                socket.getOutputStream()));
    printWriter.print(message += Terminator);    
    printWriter.flush();
}

 

3.3. Lesen einer Nachricht

// Nachricht ueber Socket lesen
function readMessage(socket)
{
    var bufferedReader =
        new java.io.BufferedReader(
            new java.io.InputStreamReader(
                socket.getInputStream()));
    var charArrayType = Java.type("char[]");
    var buffer = new charArrayType(1000);
    try {
        var amountCharacters = bufferedReader.read(buffer, 0, 1000);    
        var message = new java.lang.String(buffer);
    } catch (e) {
        var message = "Timeout: Keine Nachricht erhalten";
    }
    return message;
}

 

4. asyril EYE+ Befehle

Folgend findet man Beispiele wie die asyril EYE+ Befehle in horstFX verwendet werden können. Es werden die Hauptbefehle zur Programmausführung beschrieben. Sollten weitere Befehle gebraucht werden, können diese analog dazu umgesetzt werden. Die zur Verfügung stehende Befehle findet man unter https://doc.eyeplus.asyril.com/de/2.1/integration/tcp_programming_guide/commands.html

 

// Asyril EYE+ Status herausfinden
function getState()
{
    var Message = "get_parameter state";
    writeMessage(socket, Message);
    var cam_result = readMessage(socket);
    show_info(cam_result);
}
// Asyril EYE+ Rezeptidentifikator herausfinden
function getReceptIndicator()
{
    var Message = "get_recipe_list";
    writeMessage(socket, Message);
    var cam_result = readMessage(socket);
    show_info(cam_result);
}
// Asyril EYE+ Rezept starten
function startRecept()
{
    var Message = "start production 1813";
    writeMessage(socket, Message);
    var cam_result = readMessage(socket);
    show_info(cam_result);
}
// Asyril EYE+ Teileposition erhalten
function getPartPositions()
{
    var Message = "get_part";
    writeMessage(socket, Message);
    var Cam_result = readMessage(socket);
    show_info(Cam_result);

    // Nachricht aufteilen
    var Splitted = Cam_result.split(" ");
    var State = Splitted[0];
    var CamCoordX = parseFloat(Splitted[1].replace("x=", ""));
    var CamCoordY = parseFloat(Splitted[2].replace("y=", ""));
    var CamCoordRZ = parseFloat(Splitted[3].replace("rz=", ""));

    show_info("X = " + CamCoordX + " Y = " + CamCoordY + " RZ = " + CamCoordRZ);
}
// Asyril EYE+ neue Teile vorbereiten und erkennen 
function prepareNewPart()
{
    var Message = "prepare_part";
    writeMessage(socket, Message);
    var cam_result = readMessage(socket);
    show_info(cam_result);
}
// Asyril EYE+ Produktion stoppen
function stopProduction()
{
    var Message = "stop production";
    writeMessage(socket, Message);
    var cam_result = readMessage(socket);
    show_info(cam_result);
}

 

Die Funktionen können wie nachfolgend beschrieben aufgerufen werden:

// Asyril EYE+ Status herausfinden
getState();

// Asyril EYE+ Rezeptidentifikator herausfinden
getReceptIndicator();

// Asyril EYE+ Rezept starten
startRecept();

// Asyril EYE+ Teileposition erhalten
getPartPositions();

// Asyril EYE+ Neue Teile vorbereiten und erkennen
prepareNewPart();
    
// Asyril EYE+ Produktion stoppen
stopProduction();

 

5. Beispielprogramme

5.1.  Beispielprogramm welches die Kommunikation und EYE+ Befehle beinhaltet

5.2.  Beispielprogramm mit Aufnahme eines Objekts und Abwurf über einem Behälter