Was können wir verbessern?

Dokumentation

Datenfluss

Beschreibung

Der Datenfluss soll erklären, wie Daten zwischen "Device <-> Splitter <-> I/O" in IP-Symcon versendet werden und was dafür eingerichtet werden muss.

Typischer Aufbau

Datenfluss

Datenflussrichtung

Es gibt 2 Datenflussrichtungen.

I/O zu Device

Diese Flussrichtung ist, wie in der Abbildung sichtbar, von der übgeordneten Instanz via SendDataToChildren zu den Children. Die ankommenden Daten werden innerhalb der Children von der überschreibaren Funktion ReceiveData verarbeitet. Zwischen I/O und Device kann optional und falls nötig ein Splitter eingepflegt werden.

Device zu I/O

Diese Flussrichtung ist, wie in der Abbildung sichtbar, von der untergeordneten Instanz via SendDataToParent zu dem Parent. Die ankommenden Daten werden innerhalb des Parents von der überschreibaren Funktion ForwardData verarbeitet. Zwischen Device und I/O kann optional und falls nötig ein Splitter eingepflegt werden.

Datenpakete

Die Datenpakete werden JSONString kodiert. Diese beinhalten einmal die GUID des Datenpakettyps und die eigentlichen Daten.
Über die GUID als Identifikator weiß das jeweilge Modul, welche Daten in dem Datenpaket sind und deren Formatierung. Wenn mehrere GUIDs verschiedener Datenpakettypen eingetragen werden, kann ein Modul auch mehrere Datenpakettypen interpretieren und verarbeiten.

GUIDs der Module

Bei selbstentwickelten Modulen sind die GUIDs für Devices und Splitter in der jeweiligen module.json Datei anzugeben. Diese können über den GUID Generator erstellt werden (Die Optionen "Braces", "Uppcase" und "Hyphens" müssen aktiviert sein).

Seitens der I/O stehen folgende GUIDs für Datenpakettypen zur Verfügung.

Datenpakettypen der IPS I/O RX GUID TX GUID Beschreibung
Virtual I/O {018EF6B5-AB94-40C6-AA53-46943E824ACF} {79827379-F36E-4ADA-8A95-5F8D1DC92FA9} Kann für die Kommunikation von ClientSocket, SerialPort, UDPSocket (nur Buffer), MulticastSocket (nur Buffer) und ServerSocket (nur Buffer) genutzt werden
HID {FD7FF32C-331E-4F6B-8BA8-F73982EF5AA7} {4A550680-80C5-4465-971E-BBF83205A02B} Kann für HID (Human Interface Device) Instanzen genutzt werden
Socket (IP, Port) {7A1272A4-CBDB-46EF-BFC6-DCF4A53D2FC7} {C8792760-65CF-4C53-B5C7-A30FCC84FEFE} Kann für ServerSocket, UDPSocket (ab 5.0), MulticastSocket (ab 5.0) genutzt werden. Liefert Buffer, ClientIP und ClientPort
WWW Reader {018EF6B5-AB94-40C6-AA53-46943E824ACF} {D4C1D08F-CD3B-494B-BE18-B36EF73B8F43} Kann für WWW Reader Instanzen genutzt werden

Vorraussetzung und Einrichtung

Die GUIDs für die verwendeten Datenpakettypen werden in der module.json definiert.
Damit ein Datenfluss zwischen 2 Instanzen etabliert werden kann, muss der Sendende bei dem passenden Requirement die genutzte Kommunikationsart eintragen. Der Empfänger trägt seinerseits unter Implemented die GUID der Kommunikationsart ein.

Ebenfalls muss von jedem Child der jeweilige Parent via ConnectParent, RequireParent oder ForceParent eingerichtet sein.

Beispiel

Kommunikation zwischen I/O, Splitter und Device.
Das Device hat den Splitter als Parent und der Splitter hat das I/O als Parent.

Auszug aus den jeweiligen module.json

Beispiel GUIDs der Datenpakettypen:
IO_TX: {65465465-6546-6546-6546-65465465}
IO_RX: {AE3AE3A-AE3A-AE3A-AE3A-AE3AE3AE}
Device_TX: {78978978-7897-7897-7897-78978978}
Device_RX: {12312312-1231-1231-1231-12312312}

// Innerhalb des I/Os (Parent vom Splitter)
// I/Os haben normalerweise keine weitere Parents. Somit sollte die Liste normalerweise leer sein.
"parentRequirements": [],
// GUID des Datenpakettyps, welches via SendDataToChildren genutzt wird
"childRequirements": ["{AE3AE3A-AE3A-AE3A-AE3A-AE3AE3AE}"],
// Liste GUIDs der Datenpakettypen auf die gehorcht wird.
// Diese wird von der Funktion ForwardData (Daten kommen vom Child) verarbeitet.
"implemented": ["{65465465-6546-6546-6546-65465465}"],
 
// Innerhalb des Splitters (Parent vom Device, Child vom I/O)
// GUID des Datenpakettyps, welches via SendDataToParent genutzt wird
"parentRequirements": ["{65465465-6546-6546-6546-65465465}"],
// GUID des Datenpakettyps, welches via SendDataToChildren genutzt wird
"childRequirements": ["{12312312-1231-1231-1231-12312312}"],
// Liste GUIDs der Datenpakettypen auf die gehorcht wird.
// Diese wird in wird entweder von der Funktion ForwardData (Daten kommen vom Child) oder ReceiveData (Daten kommen vom Parent) verarbeitet.
"implemented": ["{AE3AE3A-AE3A-AE3A-AE3A-AE3AE3AE}", "{78978978-7897-7897-7897-78978978}"],
 
// Innerhalb des Device (Child vom Splitter)
// GUID des Datenpakettyps, welches via SendDataToParent genutzt wird
"parentRequirements": ["{78978978-7897-7897-7897-78978978}"],
// Devices haben normalerweise keine weitere Children. Somit sollte die Liste normalerweise leer sein.
"childRequirements": [],
// Liste GUIDs der Datenpakettypen auf die gehorcht wird.
// Diese wird von der Funktion ReceiveData (Daten kommen vom Parent) verarbeitet.
"implemented": ["{12312312-1231-1231-1231-12312312}"],