Skip to main content
Skip table of contents

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
192.168.0.123

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

  1. Gehen Sie in Workflows unter Components auf ➕.

  2. Suchen Sie nach der “ISO-on-TCP Client” Komponente und wählen Sie diese aus.

image-20250723-211432.png
  1. Es erscheint eine neue Komponente mit dem Namen “ISO-on-TCP Client”. Diese kann jederzeit umbenannt werden.

  2. Geben Sie die Verbindungsdaten ein und vergewissern Sie sich, dass diese richtig geschrieben wurden.

image-20250723-211726.png

 

  1. Öffnen Sie in Ihrem Event Graph per Rechtsklick das Context-Menü.

  2. 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.

  1. 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.

image-20250730-194605.png
  1. Ü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

(Haken)

Started

Server erfolgreich gestartet

(Haken)

TcpConnecting

TCP Connection wird aufgebaut

(Haken)

TcpConnected

TCP Connection erfolgreich aufgebaut

(Haken)

RfcConnecting

RFC Connection wird aufgebaut

(Haken)

RfcConnected

RFC Connection erfolgreich aufgebaut

(Haken)

Opening

Server wird geöffnet

(Haken)

Opened

Server erfolgreich geöffnet

(Haken)

Connecting

Verbindung zum Server wird aufgebaut

(Haken)

Connected

Verbindung zum Server erfolgreich aufgebaut

(Haken)

Disconnecting

Verbindung zum Server wird abgebaut

(Haken)

Disconnected

Verbindung zum Server erfolgreich abgebaut

(Haken)

ConnectionClosing

Verbindung zum Server wird geschlossen

(Haken)

ConnectionClosed

Verbindung zum Server erfolgreich geschlossen

(Haken)

Stopping

Server wird gestoppt

(Haken)

Stopped

Server erfolgreich gestoppt

(Haken)

  1. 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:

image-20250730-200339.png

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.

  1. Suchen Sie im Context-Menü nach “Payload Received (ISO-on-TCP Client)”.

image-20250730-203404.png
  1. Legen Sie unter Variablen eine Eingangsvariable - z.B. “Message” vom Typ “Byte” als “Array” an.

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

image-20250730-134419.png

Daten empfangen in Byte Array

  1. 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.

image-20250730-204305.png

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.

image-20250730-134356.png

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.

  1. 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.

image-20250730-134515.png

Beispiel Erstellung einer DB-Funktion

  1. 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.

image-20250730-134600.png

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! 😉

image-20250730-205847.png

Der nachfolgende Workflow zeigt ein einfaches Verarbeiten einer empfangenen Nachricht.

  1. Bei jeder eingehenden Nachricht wird die Flüssiglinse über “Set Focus” mit dem entsprechenden Wert gesetzt und die Kamera somit fokussiert.

  2. Wenn das System “Ready” ist und beim Trigger eine steigende Flanke vorliegt, geht das Programm in den Bildaufnahmemodus über den Branch.

  3. Hier entscheidet der “Sequence by Index”-Knoten über die Weiterverarbeitung des Programms:

    1. Wird Programm 1 gewählt, so wird die Image Source 1 geladen,

    2. 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.

  1. Suchen Sie im Context-Menü nach “Send (Client)” unter ISO-on-TCP und platzieren Sie diesen in Ihrem Event Graphen.

image-20250731-053856.png
  1. 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.

image-20250731-054341.png
  1. 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.

image-20250731-054539.png
  1. 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.

    1. Zunächst wird das Array mit “Get Response” geholt.

    2. 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.

    3. 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.

    4. 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.

image-20250731-055443.png
  1. 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.

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

image-20250731-060654.png

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.

  1. 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.

image-20250731-063057.png

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

image-20250731-063012.png
  1. 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.

image-20250731-063427.png

Herzlich Glückwunsch! Jetzt haben Sie sogar noch eine schöne “ToPLC”-Funktion erstellt und können fleißig Daten senden.

  1. 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”.

image-20250731-064153.png
image-20250731-064114.png

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

image-20250731-064405.png

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

JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.