ISO-on-TCP
Die evoVIU-Kamera unterstützt ISO-on-TCP gemäß RFC1006 zur direkten Anbindung an industrielle Steuerungen wie Siemens S7. Dabei erfolgt die Kommunikation über TSAPs (Transport Service Access Points), die Sender und Empfänger eindeutig identifizieren. Die TSAPs werden in der Kamera- und SPS-Konfiguration exakt festgelegt, z. B. evoVIU01
für die Kamera und SPS0123
für die SPS.
Anstelle abstrakter Put-/Get-Befehle ermöglicht die evoVIU den direkten Zugriff auf Datenbausteine (DBs) der Steuerung. Dabei werden ByteArrays verwendet, um Rohdaten effizient zu lesen oder zu schreiben. Die Kamera sendet oder empfängt binäre Daten, die 1:1 in Datenbausteinen verarbeitet werden können – beispielsweise als ARRAY [0..n] OF BYTE
.
Dieser Ansatz erlaubt eine besonders performante, flexible und deterministische Integration der Kamera in bestehende Automatisierungssysteme. Die Konfiguration erfolgt über die Weboberfläche, wo TSAPs, DB-Nummer, Offset und Länge des Datenbereichs definiert werden. Die evoVIU kann so gezielt Steuerungsbefehle empfangen oder Messergebnisse in Echtzeit bereitstellen – ohne zusätzliche Kommunikationsschichten.
Im Vergleich zur Put-/Get-Methode ist diese in der Steuerungstechnik gerne gesehen und verwendet, da man den Datenfluss sicher steuern kann.
Verbindungsdaten
Parameter | Type | Erklärung | Beispiel |
---|---|---|---|
Address | Domain || IP - String | Die Zieladresse der S7-Steuerung. Sie erhalten diese Info vom Steuerungstechniker. | mysps.myfacory.de |
Port | Integer | Port der ISO-On-TCP-Verbindung. In der Regel 102. Sie erhalten diese Info vom Steuerungstechniker. | 102 |
Remote_TSAP | String | Der TSAP (Transport Service Access Point) der Steuerung - Ist eine Art weitere eindeutige Adresse - Wird von der Steuerung vorgegeben und ist frei definierbar. Sie erhalten diese Info vom Steuerungstechniker. | TIA_EVOVIU_2 |
Local_TSAP | Integer | Der TSAP (Transport Service Access Point) der Kamera - Ist eine Art weitere eindeutige Adresse - Wird von der Steuerung vorgegeben und ist frei definierbar. Sie erhalten diese Info vom Steuerungstechniker. | CAM_EVOVIU_2 |
Timeout | Integer | Timeout für Send (Client) - nach Ablauf der Zeit geht der Knoten in den Timeout | 1000 |
Workflow Setup
Anlage einer ISO-on-TCP Client Komponente
Gehen Sie in Workflows unter Components auf ➕.
Suchen Sie nach der “ISO-on-TCP Client” Komponente und wählen Sie diese aus.

Es erscheint eine neue Komponente mit dem Namen “ISO-on-TCP Client”. Diese kann jederzeit umbenannt werden.
Geben Sie die Verbindungsdaten ein und vergewissern Sie sich, dass diese richtig geschrieben wurden.

Öffnen Sie in Ihrem Event Graph per Rechtsklick das Context-Menü.
Suchen Sie nach “Get S7 Plc” und wählen Sie diesen Eintrag aus.
Die Komponente “ISO-on-TCP Client” wurde erfolgreich angelegt und kann nun im Workflow genutzt werden.
Anlage einer ISO-on-TCP Server Komponente
Server und Client funktionieren identisch zueinander. Daher kann man die unter “Anlage eier ISO-on-TCP Client Komponente” beschriebenen Schritte natürlich auch für den Server anwenden. Orientieren Sie sich beim Anlegen der ISO-on-TCP Server Komponente deshalb bitte am oben aufgeführten Beispiel. In der Regel wird aber ISO-on-TCP als Client bei der Steuerung aufgesetzt.
Empfangen und Senden von Daten im Workflow
Im folgenden Abschnitt ist von der Variable “Message” die Rede. Diese muss vom Nutzer selbst angelegt werden. Die Variable ist vom Typ String und wurde mit dem Label “Message” versehen, welches jedoch beliebig gesetzt werden kann.
Da zumeist Steuerungen das Protokoll ISO-on-TCP verwenden, muss im Workflow zunächst das eingehende Byte-Array über eine Variable “Message” aufgenommen werden. Gleichzeitig muss im Workflow eine Antwort-Variable als Byte-Array ebenfalls angelegt werden. Im Grunde kann man sich das Byte-Array als eine Art Darstellung des DBs vorstellen.
Es ist zu empfehlen, diese “DBs” in einzelnen Funktionen vorab vorzubereiten, um diesen dann später einfach nutzen zu können. Folgendes Beispiel zeigt die Übersetzung eines DBs in ein ISO-On-TCP Telegramm. Für die Kommunikation wählen wir in der Steuerung zwei DBs: Eines zum Senden einer Nachricht an die Kamera und eines zum Empfangen von Daten der Kamera.
Das Beispiel soll nicht nur zeigen, wie man eine ISO-on-TCP Verbindung anlegt, sondern diese auch für die Steuerung in der Kamera verwendet.
Nachfolgend die Bespiel-DBs für ISO-on-TCP
DB-Beispiel - von SPS zu evoVIU
Byte | Type | Name |
---|---|---|
0.0 | Bool | Trigger |
0.1 | Bool | Ready |
1.0…3.0 | String | ID |
4.0 | Int | ProgNr |
5.0 | Int | Focus |
6.0…12.0 | String | Message |
13.0 … 33.0 | String | Code |
DB-Beispiel - von evoVIU zu SPS
Byte | Type | Name |
---|---|---|
0.0 | Bool | Ready |
0.1 | Bool | Busy |
0.2 | Bool | ResultOk |
0.3 | Bool | ResultNOk |
1 | Int | Value |
2.0…34.0 | String | Message |
Verbindungsstatus auslesen
Beim Start eines ISO-on-TCP Workflows besteht jederzeit die Möglichkeit den Verbindungstatus zum Server auszulesen. Im Workflow bietet sich dadurch die Option auf die Veränderung der Verbindung durch weitere Nodes zu reagieren.
Suchen Sie nach “Status Changed (ISO-on-TCP) im Context-Menü. Bei jedem Statuswechsel wird dieses Event im Workflow ausgelöst und gibt den aktuellen Verbindungsstatus wieder.

Über den Knoten “To String (ISOOnTCPStatus)” können Sie die Enumeration in ein lesbares Ergebnis umformen und dieses weiter verarbeiten. Es gibt folgende Verbindungsstadien:
Status | Server | Client | |
---|---|---|---|
Starting | Server wird gestartet |
| |
Started | Server erfolgreich gestartet |
| |
TcpConnecting | TCP Connection wird aufgebaut |
| |
TcpConnected | TCP Connection erfolgreich aufgebaut |
| |
RfcConnecting | RFC Connection wird aufgebaut |
| |
RfcConnected | RFC Connection erfolgreich aufgebaut |
| |
Opening | Server wird geöffnet |
| |
Opened | Server erfolgreich geöffnet |
| |
Connecting | Verbindung zum Server wird aufgebaut |
| |
Connected | Verbindung zum Server erfolgreich aufgebaut |
| |
Disconnecting | Verbindung zum Server wird abgebaut |
| |
Disconnected | Verbindung zum Server erfolgreich abgebaut |
| |
ConnectionClosing | Verbindung zum Server wird geschlossen |
| |
ConnectionClosed | Verbindung zum Server erfolgreich geschlossen |
| |
Stopping | Server wird gestoppt |
| |
Stopped | Server erfolgreich gestoppt |
|
Verarbeitung des Verbindungsstatus - Über den Workflow kann dann im nächsten Schritt ein gewünschter Status ausgelesen und anschließend weiter verarbeitet werden. Das nachfolgende Beispiel zeigt, wie sich der Verbindungsstatus “Connected” auslesen und dessen Situation weiterverarbeiten lässt:

Sobald das Event “Status Changed” - dem Status “Connected” entspricht, wird der Branch im “Then”-Pfad weiter verarbeitet. Falls er diesem Status nicht entspricht, werden alle anderen Situationen im “Else”-Pfad abgefangen.
Empfangen von Nachrichten
Nachfolgend werden anhand eines Beispiels die benötigten Knoten erklärt - Im Workflow kann jedoch jederzeit ein eigener Ansatz gewählt werden. Das Beispiel ist kein Muss, es dient nur zur Orientierung.
Sobald die Steuerung Daten an die Kamera sendet, kann dies mit dem Event “Payload Received (ISO-on-TCP Client)” empfangen werden.
Suchen Sie im Context-Menü nach “Payload Received (ISO-on-TCP Client)”.

Legen Sie unter Variablen eine Eingangsvariable - z.B. “Message” vom Typ “Byte” als “Array” an.

Mit “Set Message” können Sie nun den eingehenden Payload in ein Byte-Array schreiben.

Daten empfangen in Byte Array
Die einfachste Variante Daten aus dem “Payload Received”-Knoten auszulesen ist nach dem jeweiligen im DB definierten Byte zu suchen und deren Daten weiter zu verarbeiten. Das folgende Beispiel zeigt das Empfangen der Daten “Code”, “ProgNr” und “Trigger” aus der Steuerung und das Hinterlegen dieser Daten in Variablen.

In Arbeiten mit größeren DBs kann dies schnell komplex werden, da an verschiedenen Stellen stets alle Komponenten ausgelesen werden müssten und der Workflow dadurch unübersichtlich wird. Es empfiehlt sich deshalb die DB-Abfrage anhand einer Custom Function abzubilden.
Anlage einer “FromPLC” Function
Nachfolgen ist das Auslesen des selbst konfigurierten DBs über eine Custom Function dargestellt. Man sieht schnell, dass die Datensätze der eingehenden Bytes schematisch besser aufbereitet sind.

Daten empfangen mit eigener DB-Funktion
Die Erstellung einer Funktion wird generell unter Custom Functions beschrieben. Hier wird nur kurz im Bezug auf ISO-on-TCP eingegangen.
Legen Sie eine Funktion mit dem Namen “FromPLC” an und geben Sie als Parameter das eingehende Byte-Array an. Für die Return Values geben Sie alle Parameter inklusive dem gewünschten Typ an.

Beispiel Erstellung einer DB-Funktion
Nachdem Sie den Entry- und Return-Knoten im Event Graphen der Funktion hinzugefügt haben, können Sie aus der Message die eigehenden Daten puffern und einzeln, wie im oberen Beispiel, auslesen und weitergeben. Der Vorteil: Sie müssen die Funktion nur einmal aufsetzen und vermeiden somit Folgefehler im Workflow.

Beispiel für eine DB-Funktion zum Auslesen der Nachricht
Beispiel zur Verwendung einer eingehenden Nachricht
Im nachfolgenden Beispiel werden nun die Ergebnisse der eingehenden Nachricht weiter verarbeitet.
Dies ist natürlich nur ein Beispiel - Sie können den Workflow so flexibel wie möglich selbst gestalten. Nur Mut! 😉

Der nachfolgende Workflow zeigt ein einfaches Verarbeiten einer empfangenen Nachricht.
Bei jeder eingehenden Nachricht wird die Flüssiglinse über “Set Focus” mit dem entsprechenden Wert gesetzt und die Kamera somit fokussiert.
Wenn das System “Ready” ist und beim Trigger eine steigende Flanke vorliegt, geht das Programm in den Bildaufnahmemodus über den Branch.
Hier entscheidet der “Sequence by Index”-Knoten über die Weiterverarbeitung des Programms:
Wird Programm 1 gewählt, so wird die Image Source 1 geladen,
wird Programm 2 gewählt, so wird die Image Source 2 geladen, usw.
Glückwünsch - eine ISO-on-TCP Client Verbindung wurde erfolgreich erstellt und aufgebaut. Sie können die empfangenen Daten Ihren eigenen Variablen zuweisen und auf Basis dessen Interaktionen und Unterscheidungen im Workflow durchführen. Funktionen helfen Ihnen den DB einmalig sauber darzustellen und aufzuschlüsseln.
Senden von Nachrichten als Client
Alternativ möchten Sie natürlich bei jeder empfangenen Nachricht im Workflow eine entsprechende Rückantwort geben oder auf direktem Wege eine Information je Iteration in der Steuerung ablegen. In diesen Fall wird Ihnen dafür in der Regel von Ihren Steuerungsprogrammierer ein weiterer DB zur Verfügung gestellt.
Identisch zum Lesen wird auch das Schreiben einer Nachricht mittels Byte-Array umgesetzt.
Suchen Sie im Context-Menü nach “Send (Client)” unter ISO-on-TCP und platzieren Sie diesen in Ihrem Event Graphen.

Suchen Sie im Context-Menü anschließend nach der ISO-on-TCP Komponente, platzieren Sie diese daneben und verbinden Sie den Client mit der Komponente.

Nun können Sie das entsprechende Byte-Array für das DB-Protokoll vorbereiten. Es empfiehlt sich hierfür das Anlegen einer Variable, die wir im Beispiel “Response” nennen und die dem Typ “Byte Array” entspricht.

Mit diesem “Byte Array” können Sie nun zu jederzeit den aktuellen Zustand des zu sendenden DBs wiedergeben und abändern. Sollten Sie anhand unseres obigen Beispiel-DBs nach einer Iteration Zustände und Ergebnisse übersenden wollen, so können Sie sich die Response dafür vorab zusammenbauen.
Zunächst wird das Array mit “Get Response” geholt.
Anschließend werden die Bits “Ready” und “ResultOk” auf “True” gesetzt, in dem Dezimal auf Byte umgerechnet wird.
5 => 00000101b
- Mit “Set Element At” kann man das zu setzende Byte dementsprechend überschreiben.Im nächsten Schritt kann man sich aus den Beispiel-Variablen “Value” und “ReadCode” die weiteren Informationen seiner Verarbeitung holen und diese anschließend an den jeweiligen Stellen im Array platzieren.
Mit “Set Response” wird anschließend die angepasste Response in die Variable zurückgeschrieben. Diese ist nun bereit für das Versenden.
Es handelt sich hierbei um ein Beispiel für den Zusammenbau eines Arrays. Dies kann natürlich ebenfalls im eigenen Workflow flexibel umgesetzt werden.
Bitte beachten Sie, dass beim Schreiben eines Strings in ein Array genau darauf geachtet werden muss, wie lange das Ergebnis im Verhältnis zu den vorhandenen Bytes ist.

Binden Sie die “Response” nun an den Eingang ihres Sendeknotens. Sobald der Befehl im Workflow aufgerufen wird, sendet die Kamera nun den Wert in Richtung Ihrer Steuerung.

Um eine Informationen über die erfolgreiche Sendung von Daten zu erhalten, können Sie den booleschen Output “Success” oder den String “Message” nutzen.

Herzlichen Glückwunsch! Sie haben Daten an die Steuerung gesendet und können somit nicht nur Daten empfangen, sondern auch Daten zurückschreiben.
Bitte behandeln Sie Ihren Steuerungstechniker gut und bleiben Sie stets ruhig. Er wird mehrfach während der Entwicklung des Bausteins betonen, dass eine Profinet-Anbindung viel besser ist. Geben Sie Ihm gerne einen Kaffee aus, fragen Sie nach seiner Familie und gehen Sie Schrittweise die Anleitung durch.
Anlage einer “ToPLC” Funktion
Auch beim Versenden kann das Byte-Array aufsetzen sehr schnell - gerade wenn man mehrere Messages während des Prozesses senden will - ausarten. Daher empfiehlt sich auch hier wieder den Datenbaustein über eine Custom Function umzusetzen, da dieser bei einer Änderung des DBs schneller angepasst ist bzw. global angepasst werden kann.
Legen Sie eine Funktion “ToPLC” mit den entsprechenden Parametern im Workflow an. Es ist einfacher das Byte mit den einzelnen Bits in “Bytes” als Input zu wählen.

Orientieren Sie sich beim Zusammenbau der Funktion des DBs am oben aufgeführten Beispiel.

Nutzen Sie an Stellen, an denen Sie die Response-Nachricht zur Steuerung senden wollen, nun Ihre neue DB-Funktion und sparen Sie sich hier viele unnötige Knoten.

Herzlich Glückwunsch! Jetzt haben Sie sogar noch eine schöne “ToPLC”-Funktion erstellt und können fleißig Daten senden.
Falls Sie sich auch noch den Sende-Knoten sparen wollen, können Sie diesen ebenfalls in der Funktion “ToPLC” verstecken. Dazu erweitern Sie Ihre Funktion um den Wert “Client” vom Type “ISO-on-TCP Client” und ersetzen den Byte-Array Output mit dem Bool “Success” und dem String “Message”.


Nun können Sie beim Verwenden der “ToPLC” Funktion relativ einfach die Daten aus dem Workflow holen und zugleich versenden.

Herzlichen Glückwunsch - jetzt haben Sie den Sende-Knoten für den DB zusätzlich noch bis ins Detail optimiert.