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
Truewird die Reihenfolge der Bytes gedreht (höchstwertigstes Byte zuerst). BeiFalsebleibt 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:
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