Datenkonverter

Datenkonverter sind erforderlich, um die über GInOut verfügbaren Byte-Daten typisiert einzulesen oder zu schreiben, z.B. als Ganzzahl.

Folgende Konverter sind in Viper.NET verfügbar:

Die meisten Konverter unterstützen den Parameter

TwistBytes

[True|False] Bei True wird die Reihenfolge der Bytes gedreht (höchstwertigstes Byte zuerst). Bei False bleibt die Reihenfolge der Bytes unverändert (niederwertigstes Byte zuerst).

Ausnahmen: Die String-, Byte-Array- und Bits-Konverter unterstützen TwistBytes nicht. Beim GenericBitArrayConverter wirkt TwistBytes nur auf die 4 Längen-Bytes (bei FixedCount=False).

Beispiel:

Int16 val = 5;
Byte-Daten [TwistBytes = False]: [0x05][0x00]
Byte-Daten [TwistBytes = True]:  [0x00][0x05]

Für einige Konverter sind zusätzliche Parameter erforderlich.

GenericInputConverter

Für den GenericInputConverter muss, im Gegensatz zu den anderen Konvertern, zusätzlich der Zieltyp angegeben werden. Folgende Zieltypen sind verfügbar:

Zieltyp

Datenlänge in Byte

Boolean

1

Byte

1

SByte

1

Char

2

Int16

2

Int32

4

Int64

8

UInt16

2

UInt32

4

UInt64

8

Single (=float)

4

Double

8

Decimal

16

Es muss darauf geachtet werden, dass die erwartete Datenlänge eingehalten wird.

Byte array -> Byte

Dieser Konverter wurde durch den GenericInputConverter (Zieltyp Byte) ersetzt und ist nur noch für die Abwärtskompatibilität vorhanden.

Byte array -> Byte array

Die Bytedaten werden 1:1 übernommen. Allerdings kann es vorkommen, dass die Datenlängen nicht übereinstimmen. Hier müssen zwei Fälle unterschieden werden:

  • Der Datenbereich in GInOut ist größer als oder gleich groß wie die zu schreibenden Byte-Daten.

    • Der Datenbereich in GInOut wird mit „MemSetVal“ aufgefüllt.

  • Der Datenbereich in GInOut ist kleiner als die zu schreibenden Daten:

    • Unzulässig, generiert einen Fehler (Die Daten können nicht geschrieben werden).

Es muss also darauf geachtet werden, dass der Datenbereich ausreichend groß dimensioniert wird.

Zusätzliche Konverterparameter:

Length

Maximale Länge des Byte-Arrays. Kürzere Daten werden mit MemSetVal aufgefüllt. Bei „-1“ wird die Länge des Datenbereichs verwendet.

MemSetVal

Mit diesem Byte-Wert wird der Datenbereich aufgefüllt, falls die zu schreibenden Daten kürzer sind.

Byte array -> String

Dieser Konverter interpretiert Daten als ASCII-codierte Zeichenkette (String). Bei unterschiedlichen Datenlängen gelten die gleichen Regeln wie bei Byte array -> Byte array.

Zusätzliche Konverterparameter:

Length

Maximale Länge der Zeichenkette. Kürzere Daten werden mit MemSetVal aufgefüllt. Bei „-1“ wird die Länge des Datenbereichs verwendet.

MemSetVal

Mit diesem Byte-Wert wird der Datenbereich aufgefüllt, falls die zu schreibenden Daten kürzer sind.

TrimCharacters

Auflistung aller Einzel-Character, die das Ende der Zeichenkette darstellen können. Die Zeichen können entweder als ASCII-Zeichen oder in Hex-Schreibweise angegeben werden ([0x31] ist z.B. das Zeichen ‚1‘).

Beispiel:

Datenbereich mit Länge 5, Inhalt in HEX: 3132330000
TrimCharacters [0x00]
Der Konverter liefert hier "123"

Byte array -> S7 String

Dieser Konverter interpretiert Daten als S7 STRING:

S7 String Schema

Aufbau S7 STRING

Konverterparameter:

Capacity

Maximale Länge des Strings [0..255]. Wird beim Zuordnen des Datenbereichs automatisch auf dessen Länge minus 2 gesetzt, was für die meisten Anwendungsfälle korrekt ist.

MemSetVal

Mit diesem Byte-Wert wird der Datenbereich aufgefüllt, falls die zu schreibenden Daten kürzer sind.

TrimCharacters

Auflistung aller Einzel-Character, die das Ende der Zeichenkette darstellen können. Die Zeichen können entweder als ASCII-Zeichen oder in Hex-Schreibweise angegeben werden ([0x31] ist z.B. das Zeichen ‚1‘).

Beispiel:

Data segment with length=5, content in HEX: 3132330000
TrimCharacters [0x00]
Converter returns "123"

Byte array -> Int16 bzw. Int32

Diese Konverter wurden durch den GenericInputConverter ersetzt und sind nur noch für die Abwärtskompatibilität erforderlich.

Byte array bits -> Bool, Int16 bzw. Int32

Mit den „Byte array bits“-Konvertern werden einzelne Bits aus dem Datenbereich ausgelesen und ein boolscher bzw. Zahlenwert gebildet. Dadurch können einzelne Bits innerhalb eines Bytes ausmaskiert und die Reihenfolge der Bits beeinflusst werden.

Zusätzliche Konverterparameter:

MapWeightToBitIdx

Komma-separierte Liste der Bit-Indices aus dem Datenbereich, die für die Konvertierung verwendet werden. Die Reihenfolge bildet gleichzeitig die Gewichtung.

Beispiel:

Data segment with length=1, value t 0x17. (Binary1: 0b00010111)
MapWeightToBitIdx: 4, 3, 2
Result after conversion: 5 (Bit 4: 1, Bit 3: 0, Bit 2: 1).

Byte array string -> Int16, Int32 bzw. Double

Die „Byte array string“-Konverter werden hauptsächlich zur Kommunikation mit Waycom Prodel benötigt, da diese Steuerung ihre Daten ausschließlich in ASCII-codierter Form zur verfügung stellt. Ein Bit in Prodel hat bspw. immer den Wert „0x30“ (LOW) bzw. „0x31“ (HIGH).

Die zusätzlichen Konverterparameter sind analog zu Byte array -> String.

Byte array hex string -> UInt32

GenericArrayConverter

Mit diesem Konverter können Arrays einfacher Werttypen eingelesen werden. Unterstützt werden dieselben Datentypen wie beim GenericInputConverter. Die Datenlänge ergibt sich aus der maximalen Anzahl der Elemente (`MaxCount`), dem ausgewählten Datentyp, sowie zusätzlichen 4 Byte wenn `FixedCount=False` ist.

Zusätzlich zu `TwistBytes` unterstützt dieser Konverter noch folgende Parameter:

MaxCount

Gibt die maximale Anzahl der Elemente im Array an.

FixedCount

[True]: Es sind immer alle Elemente gültig. [False]: Die ersten 4 Byte im Datenbereich die Anzahl geben an, wie viele Elemente im Array gültig sind. Für die Konvertierung dieser Bytes wird der GenericInputConverter für UInt32 verwendet.

GenericBitArrayConverter

Dieser Konverter ordnet jedem Bit im Datensegment einen von zwei Werten zu, je nachdem ob das Bit 0 oder 1 ist. Durch diese Methode wird Platz im Datensegment eingespart, wenn mehrere boolsche Informationen gleichzeitig übertragen werden sollen.

MaxCount

Gibt die maximale Anzahl der Elemente im Array an.

FixedCount

[True]: Es sind immer alle Elemente gültig. [False]: Die ersten 4 Byte im Datenbereich die Anzahl geben an, wie viele Elemente im Array gültig sind. Für die Konvertierung dieser Bytes wird der GenericInputConverter für UInt32 verwendet.

LowVal

Wert im Array wenn das zugehörige Bit 0 ist.

HighVal

Wert im Array wenn das zugehörige Bit 1 ist.

StringArrayConverter

Analog zum GenericArrayConverter können mit diesem Konverter Arrays von Zeichenketten konvertiert werden. Die Zeichenketten haben dabei eine maximale Länge. Für die Zeichenketten selbst wird Byte array -> String verwendet.

MaxCount

Gibt die maximale Anzahl der Elemente im Array an.

FixedCount

[True]: Es sind immer alle Elemente gültig. [False]: Die ersten 4 Byte im Datenbereich die Anzahl geben an, wie viele Elemente im Array gültig sind. Für die Konvertierung dieser Bytes wird der GenericInputConverter für UInt32 verwendet.

Length

Die maximale Länge einer Zeichenkette im Array.

MemSetVal

Siehe Byte array -> String

TrimCharacters

Siehe Byte array -> String