Die In-Sight 7000 Serie ist ein vollausgestattetes Bildverarbeitungssystem, das genaue Inspektionen selbst bei hoher Produktionsliniengeschwindigkeit durchf�hrt.
1. Einleitung
Durch das modulare Design kann das System problemlos an die jeweiligen Anwendungsanforderungen angepasst werden. Die In-Sight 7000 Serie ist als Schwarz-Wei�- und Farbmodell mit einer Aufl�sung von VGA bis 5 MP erh�ltlich. Es sind verschiedene Toolkonfigurationen vom Basis-Werkzeugset des In-Sight 7500 bis zu den komplett ausgestatteten Modellen 7600, 7800 und 7900 erh�ltlich.
Je nach Anforderung kann mit der Kamera auf unterschiedliche weise kommuniziert werden. Hierzu stehen folgende industriellen Protokolle OPC UA, EtherNet/IP mit Add-On Profile (AOP), PROFINET Class B, iQSS, Modbus TCP, SLMP/SLMP Scanner, IEEE 1588 (CIP Sync), CC-Link IE Field Basic sowie allgemeine Protokolle TCP/IP, UDP, FTP, SFTP, Telnet, SMTP, RS-232 zur Verf�gung.
In folgendem Artikel wird die Einrichtung und Kommunikation zwischen Kamera und Roboter �ber digitale IOs sowie TCP/IP Sockets beschrieben.
2. Installation der Kamera und Konfiguration im In-Sight Explorer
Die Kamera kann zur Versorgung an den 24 V Klemmenblock des Roboters angeschlossen werden. Ebenso k�nnen die digitalen Ein- und Ausg�nge der Kamera mit den jeweiligen Klemmen im Schaltschrank des Roboters verdrahtet werden. Der Belegungsplan der Kamera ist in der jeweiligen Anleitung zu finden.
Zur Konfiguration der Kamera muss von Cognex der In-Sight Explorer heruntergeladen und installiert werden.
Um mit der Kamera kommunizieren zu k�nnen, muss die IP-Adresse der Teilnehmer im selben Bereich liegen. Wie die IP-Adresse des Roboters ge�ndert werden kann, ist in folgender Dokumentation beschrieben IP-Adresse �ndern.
Die IP-Adresse der Kamera kann in dem In-Sight Explorer eingestellt werden.
2.1. Konfiguration der Kamera �ber den EasyBuilder
Mittels dem EasyBuilder kann die Kamera in dem In-Sight Explorer konfiguriert werden.
Hierzu kann unter dem Men� "Verbindung herstellen" ein neuer Job angelegt werden. Die Kamera muss sich daf�r in dem Offline Modus befinden.
2.1.1. Triggern der Kamera
In dem Men� "Bild einrichten" k�nnen grundlegende Aufnahmeeinstellungen bearbeitet werden. Soll der Trigger digital erfolgen, muss bei dem Feld "Trigger" "Extern" ausgew�hlt werden. Anschlie�end muss unter dem Men� "Eing�nge / Ausg�nge" ein Eingang so konfiguriert werden, dass bei einer steigenden Flanke der Bildaufnahme-Trigger ausgel�st wird.
2.1.2. Teil einlernen
Unter dem Men� "Teil suchen" sowie "Teil einlernen" k�nnen die gew�nschten Objekte eingelernt werden. Informationen dazu finden sich in der Hilfe zu dem EasyBuilder bzw. zu dem In-Sight Explorer.
2.1.3. Einrichten der Kommunikation
Mittels dem Men� "Kommunikation" kann die Kommunikation zwischen Kamera und Roboter konfiguriert werden.
Um eine Kommunikation per TCP/IP mit dem Roboter einzurichten muss zun�chst unter dem Button "Ger�t hinzuf�gen" das Protokoll hinzugef�gt werden. Unter "Ger�t" w�hlt man anschlie�end "Andere" sowie bei "Protokoll" "TCP/IP" aus.
Wird das Textfeld bei "Serverhostname" leer gelassen agiert die Kamera als Server. Wird ein Hostname eingetragen, �bernimmt die Kamera die Rolle des Clients.
Unter "Anschluss" wird die Portnummer eingetragen. Diese muss identisch mit der Portnummer des Servers bzw. Clients sein mit welchem die Verbindung �ber einen Socket aufgebaut wird.
Unter "Formatausgabezeichenfolge" wird die Zeichenfolge definiert, wie die Kamera die Ergebnisse als Nachricht �ber den Socket an den weiteren Teilnehmer sendet. In folgendem Bild wurde die Formatzeichenkette so eingerichtet, dass der Objektscore, der X- und Y-Wert sowie die Orientierung des Objekts ausgegeben werden. Getrennt werden die einzelnen Positionen mittels Semikolon. Dadurch k�nnen sp�ter die Werte in horstFX sehr einfach separiert und zugeordnet werden.
2.2. Konfiguration der Kamera mittels Spreadsheet
Mittels dem Spreadsheet kann die Kamera als Alternative zu dem EasyBuilder in dem In-Sight Explorer konfiguriert werden. Diese Variante erfordert eine etwas st�rkere Einarbeitung, jedoch sind die M�glichkeit im Vergleich zu dem EasyBuilder gr��er.
Mittels Rechtsklick auf den Sensor in dem Netzwerkfenster kann die Tabellenansicht ausgew�hlt werden.
2.2.1. Grundlegende Aufnahmeeinstellungen und Triggern der Kamera
Bei dem Anlegen eines neuen Projekts wird standardm��ig in Zelle A0 ein Image Objekt erstellt. Mittels Doppelklick auf diese Zelle k�nnen Grundlegende Einstellungen zur Bildaufnahme ausgew�hlt werden. Ist bei dem Listenfeld Trigger Kamera ausgew�hlt, kann durch eine Verdrahtung der digitalen Triggerdrahtleitung der Kamera, �ber das Setzen eines digitalen Ausgangs des Roboters, eine Bildaufnahme an der Kamera ausgel�st werden.
2.2.2. Teil einlernen
In dem Fenster Palette finden sich Funktionen zur Steuerung der Kamera die man in die Tabelle hinzuf�gen kann. Unter den Vision Tools befinden sich Funktionen um Objekte einzulernen bzw. zu �berpr�fen. Per drag and drop kann die gew�nschte Aktion in die Tabelle gezogen und anschlie�end mittels Doppelklick darauf parametriert werden.
2.2.3. Einrichten der Kommunikation
Zur Einrichtung der Kommunikation �ber einen TCP/IP Socket wird zun�chst ein TCPDevice hinzugef�gt. Dieses findet man in dem Fenster Palette unter den Funktionen Eingang/Ausgang ? Netzwerk ? TCPDevice. Nach dem Hinzuf�gen wird dieses par Doppelklick parametriert. Wird das Feld Hostname leer gelassen, agiert die Kamera als Server. Die eingestellte Zeit in dem Feld Timeout wird in diesem Falle nicht weiter betrachtet. Als Protokoll wird TCP/IP ausgew�hlt.
Anschlie�end wird die weitere Aktion WriteDevice hinzugef�gt. Diese findet sich auch unter Eingang/Ausgang ? Netzwerk. Diese Aktion wird folgenderma�en parametriert:
Bei dem ersten Argument Ereignis wird die Zellennummer der Funktion Image ausgew�hlt. Die Zellennummer ist hierf�r in der Regel A0.
Als zweites Argument wird die Zellennummer des Ger�ts vergeben. Das Ger�t ist hierbei das soeben hinzugef�gte TCPDevice.
Als drittes Argument wird anschlie�end die Zellennummer der Aktion �bergeben, welche die gew�nschten Daten �ber den Socket sendet. Um den Fall abzufangen, dass die Kamera kein Objekt erkennt, wird hier zus�tzlich eine if-Bedingung eingef�gt. In diesem Beispiel �berpr�fen wir hierbei die G�te. Ist diese G�te != 0 wird die Nachricht der Zelle �bertragen, welche als zweites Argument in der if-Bedingung steht. In diesem Beispiel w�hlen wir hier einfach die leere Zelle neben der Aktion WriteDevice aus. Ist die G�te == 0 senden wir diese Information, also die Zelle in welcher die G�te steht (in diesem Beispiel G5), (drittes Argument der if-Bedingung) an den Roboter. Mit dieser Information wei� der Roboter nun, dass kein Objekt erkannt wurde.
In der oben ausgew�hlten leeren Zelle f�gen wir nun eine Funktion hinzu, welche die gew�nschten Ergebnisse der Kameraerkennung beinhaltet die �ber den Socket an den Roboter gesendet werden. Als Aktion nutzen wir hierf�r einen FormatString. Diese Aktion findet man unter Text ? Zeichenfolge. Mittels Doppelklick kann diese Funktion nun parametriert werden. Mittels dem Button hinzuf�gen k�nnen die gew�nschten Zellen der Detektionsparameter ausgew�hlt werden. Mittels dem Trennzeichen kann anschlie�end auf dem Roboter der gesamte �ber den Socket gesendete String separiert werden.
3. Kommunikation in horstFX
Um mit der Kamera kommunizieren zu k�nnen, muss die IP-Adresse der Teilnehmer im selben Bereich liegen. Wie die IP-Adresse des Roboters ge�ndert werden kann, ist in folgender Dokumentation beschrieben IP-Adresse �ndern.
Folgend wird die Kommunikation per digitalem Triggersignal sowie per TCP/IP mittels einem Socket beschrieben.
Um die Kamera per digitaler Drahtleitung zu triggern, muss wie in Abschnitt 2.1.1 Triggern der Kamera beschrieben, der digitale Eingang der Kamera eingerichtet werden. Anschlie�end kann nach korrekter Verdrahtung mit der "digital out" Klemme im Schaltschrank des Roboters, �ber das setzen des zugeh�rigen digitalen Ausgangs die Kamera getriggert werden.
// Kamera per digitalem Ausgang triggern (flankengesteuert)
output_literal( "OUTPUT_2", 1.0 );
sleep(100);
output_literal( "OUTPUT_2", 0.0 );
Die Objektkoordinaten werden mittels TCP/IP Sockets an den Roboter gesendet. Ausf�hrlichere Informationen zur Kommunikation �ber TCP/IP Sockets finden sich in Sockets.
3.1. Herstellen der Verbindung �ber einen Socket
var IP_Cam = "192.168.0.20";
var Port_Cam = 3000;
var socket = new java.net.Socket();
socket.connect(new java.net.InetSocketAddress(IP_Cam, Port_Cam), 10000); // 10 s timeout
Ein Timeout, falls einige Zeit keine Nachricht von der Kamera gesendet wird, kann �ber folgende Zeile definiert werden. Ansonsten k�nnte das Programm nicht abgebrochen werden, da der Roboter st�ndig auf die Nachricht wartet.
// 10 sek Timeout beim Einlesen der Nachricht ueber einen Socket
socket.setSoTimeout(10000);
3.2. Einlesen der Kameranachricht per Socket
Mittels folgender Funktion kann die Kameranachricht eingelesen werden:
function readFromSocket() {
var bufferedReader =
new java.io.BufferedReader(
new java.io.InputStreamReader(
socket.getInputStream()));
var charArrayType = Java.type("char[]");
var buffer = new charArrayType(1000);
try {
var anzahlZeichen = bufferedReader.read(buffer, 0, 1000);
var nachricht = new java.lang.String(buffer);
} catch (e) {
var nachricht = "Timeout: Keine Nachricht erhalten";
}
return nachricht;
}
Die Funktion kann �ber folgende Zeile aufgerufen werden:
// Einlesen der Kameranachricht
var Msg_Cam = readFromSocket();
show_info(Msg_Cam);
3.3. Aufsplitten der Kameranachricht
Die Kameranachricht kann �ber folgende Zeilen aufgesplittet werden. Die Nachricht sowie das Aufsplitten h�ngt mit der in 2.1.3 Einrichtung der Kommunikation definierten Formatzeichenkette zusammen.
// Aufsplitten der Kameranachricht
Msg_Cam = Msg_Cam.split(";");
var Cam_Score = parseFloat(Msg_Cam[0]);
var Cam_X = parseFloat(Msg_Cam[1]);
var Cam_Y = parseFloat(Msg_Cam[2]);
var Cam_rz = parseFloat(Msg_Cam[3]);
show_info(Cam_Score + "\n" + Cam_X + "\n" + Cam_Y + "\n" + Cam_rz);
4. Komplettes Beispielprogramm
Bei folgendem Programm handelt es sich um ein simples Beispielprogramm, welches die Kommunikation zwischen Roboter und Kamera veranschaulicht.
var IP_Cam = "192.168.0.20"; // IP Adresse der Kamera
var Port_Cam = 3000; // Port der Kamera
// Verbindung ueber Socket herstellen
var socket = new java.net.Socket();
socket.connect(new java.net.InetSocketAddress(IP_Cam, Port_Cam), 10000); // 10 s timeout
// 10 sek Timeout beim Einlesen der Nachricht ueber einen Socket
socket.setSoTimeout(10000);
// Programmablauf
try
{
while(true)
{
// Roboter in Aufnahmeposition fahren
move({
'Coord': 'CARTESIAN_BASIS',
'MoveType': 'JOINT',
'PoseRelation': 'ABSOLUTE',
'anyconfiguration': false,
'speed.ratio': 1.0,
'target': {'xyz+quat': [0.421058, 0.296112, 0.555801, -0.000097, 0.548429, -0.836197, -0.000003]},
'tool': 'No Tool'
}, "Aufnahmepos");
// Kamera per digitalem Ausgang triggern (flankengesteuert)
output_literal( "OUTPUT_1", 1.0 );
sleep(100);
output_literal( "OUTPUT_1", 0.0 );
// Einlesen der Kameranachricht
var Msg_Cam = readFromSocket();
// Ueberpruefe ob Objekt erkannt wurde
if((parseFloat(Msg_Cam) != 0.000) && (Msg_Cam != "Timeout: Keine Nachricht erhalten"))
{
// Aufsplitten der Kameranachricht
Msg_Cam = Msg_Cam.split(";");
var Cam_Score = parseFloat(Msg_Cam[0]);
var Cam_X = parseFloat(Msg_Cam[1]);
var Cam_Y = parseFloat(Msg_Cam[2]);
var Cam_rz = parseFloat(Msg_Cam[3]);
show_info("Score: " + Cam_Score + "\n" + "X: " + Cam_X + "\n" + "Y: " + Cam_Y + "\n" + "rz: " + Cam_rz);
}
else if(Msg_Cam == "Timeout: Keine Nachricht erhalten")
{
show_info(MSG_Cam);
}
else
{
show_info("Kein Objekt von der Kamera erkannt");
}
}
} finally {
socket.close();
}
// ******************************************* Funktionen *******************************************
function readFromSocket() {
var bufferedReader =
new java.io.BufferedReader(
new java.io.InputStreamReader(
socket.getInputStream()));
var charArrayType = Java.type("char[]");
var buffer = new charArrayType(1000);
try {
var anzahlZeichen = bufferedReader.read(buffer, 0, 1000);
var nachricht = new java.lang.String(buffer);
} catch (e) {
var nachricht = "Timeout: Keine Nachricht erhalten";
}
return nachricht;
}
5. Download Beispielprogramme: