Für die Definition der Kanäle ist etwas Hintergrundwissen zu Modbus nützlich. Bei Modbus wird zwischen den folgenden Datentypen unterschieden:


„coils“: Das sind Daten die aus nur einem Bit bestehen und die sowohl gesetzt als auch zurück gelesen werden können. Eine „coil“ könnte z. B. die Spule eines Relais sein, das ein und aus geschaltet werden kann, und dessen Zustand auch zurück gelesen werden kann. Im dydaqlog wird nur das Zurücklesen unterstützt, also nicht das Setzen. Coils können im dydaqlog als „boolean“ Werte eingelesen werden.


„discrete inputs“: Das sind Daten die aus nur einem Bit bestehen und nur gelesen werden können. Ein „discrete input“ entspricht einem digitalen Eingang. Discrete Inputs können im dydaqlog als „boolean“ Werte eingelesen werden.


„input registers“: Das sind Daten die aus 16-Bit Werten bestehen und nur gelesen werden können. Input Register können im dydaqlog als „float“ Werte eingelesen werden. Das Format der Daten kann dabei unterschiedlich sein. Ebenso kann es sein, dass mehrere dieser 16-Bit Werte zu einem Wert zusammen gefasst werden müssen, oder dass an Stelle von Zahlen Zeichenketten (Strings) in manchen Registern abgelegt sind. Näheres dazu weiter unten.


„holding registers“: Das sind Daten die aus 16-Bit Werten bestehen die sowohl gesetzt als auch zurück gelesen werden können. Im dydaqlog wird nur das Zurücklesen unterstützt, also nicht das Setzen. Holding Register können im dydaqlog als „float“ Werte eingelesen werden. Das Format der Daten kann dabei unterschiedlich sein. Ebenso kann es sein, dass mehrere dieser 16-Bit Werte zu einem Wert zusammen gefasst werden müssen, oder dass an Stelle von Zahlen Zeichenketten (Strings) in manchen Registern abgelegt sind. Näheres dazu weiter unten.


Die oben genannten Register werden mit verschiedenen Modbus-Kommandos ausgelesen. Für die Adressierung bzw. Nummerierung der einzelnen Register gibt es unterschiedliche Konventionen.

Intern werden die Register jeden Typs über eine 16-Bit-Adresse im Bereich von 0 bis 65535 angesteuert, also das erste Register jedes Typs mit Adresse 0, das zweite mit Adresse 1, und so weiter. Für jeden der vier Typen (Coil, discrete input, input register, holding register) gibt es also jeweils den gleichen internen Adressraum.


Um die vier Typen (Coil, discrete input, input register, holding register)  schon in der Adresse unterscheiden zu können gibt es verschiedene Konventionen. Im dydaqlog wird die „Traditional Convention“ benutzt, mit den folgenden Eigenschaften:


„coils“: Werden mit Adressen im Bereich beginnend bei 1 bis zu 9999 bezeichnet, wobei die erste Coil (mit interner Adresse 0) in dieser Konvention die Adresse 1 bekommt.


„discrete inputs“: Werden mit Adressen im Bereich beginnend bei 10001 bis zu 19999 bezeichnet, wobei der erste Discrete Input (mit interner Adresse 0) in dieser Konvention die Adresse 10001 bekommt.


„input registers“: Werden mit Adressen im Bereich beginnend bei 30001 bis zu 39999 bezeichnet, wobei das erste Input Register (mit interner Adresse 0) in dieser Konvention die Adresse 30001 bekommt.


„holding registers“: Werden mit Adressen im Bereich beginnend bei 40001 bis zu 49999 bezeichnet, wobei das erste Holding Register (mit interner Adresse 0) in dieser Konvention die Adresse 40001 bekommt.


Entsprechend werden die Register dann weitergezählt, so dass z. B. das fünfte Holding Register (mit interner Adresse 4) im dydaqlog über die Adresse 40005 (= 40001 + 4) angesteuert wird.

Die als Register-Inhalt übertragenen Bits können / müssen dann je nachdem was der Sensor liefert unterschiedlich interpretiert werden.


Für den Typ „16-Bit unsigned (straight binary)“ ist das wie folgt:

Binär-Wert

Hexadezimal

Wert für „16-Bit unsigned (straight binary)“

0000000000000000

0x0000

0

0000000000000001

0x0001

1

0000000000000010

0x0002

2

… usw. ...



0111111111111111

0x7FFF

32767

1000000000000000

0x8000

32768

1000000000000001

0x8001

32769

… usw. ...



1111111111111101

0xFFFD

65533

1111111111111110

0xFFFE

65534

1111111111111111

0xFFFF

65535



Für den Typ „16-Bit unsigned (offset binary)“ ist das wie folgt:

Binär-Wert

Hexadezimal

Wert für „16-Bit unsigned (offset binary)“

0000000000000000

0x0000

-32768

0000000000000001

0x0001

-32767

0000000000000010

0x0002

-32766

… usw. ...



0111111111111111

0x7FFF

-1

1000000000000000

0x8000

0

1000000000000001

0x8001

1

… usw. ...



1111111111111101

0xFFFD

32765

1111111111111110

0xFFFE

32766

1111111111111111

0xFFFF

32767



Für den Typ „16-Bit signed (twos complement)“ ist das wie folgt:

Binär-Wert

Hexadezimal

Wert für „16-Bit signed (twos complement)“

1000000000000000

0x8000

-32768

1000000000000001

0x8001

-32767

1000000000000010

0x8002

-32766

… usw. ...



1111111111111111

0xFFFF

-1

0000000000000000

0x0000

0

0000000000000001

0x0001

1

… usw. ...



0111111111111101

0x7FFD

32765

0111111111111110

0x7FFE

32766

0111111111111111

0x7FFF

32767



Für den Typ „32-Bit unsigned (straight binary)“ ist das wie folgt:

Binär-Wert

Hexadezimal

Wert für „32-Bit unsigned (straight binary)“

00000000000000000000000000000000

0x00000000

0

00000000000000000000000000000001

0x00000001

1

00000000000000000000000000000010

0x00000002

2

… usw. ...



01111111111111111111111111111111‍

0x7FFFFFFF

2147483647

10000000000000000000000000000000

0x80000000

2147483648

10000000000000000000000000000001

0x80000001

2147483649

… usw. ...



‍‍11111111111111111111111111111101

0xFFFFFFFD

4294967293

‍‍11111111111111111111111111111110

0xFFFFFFFE

4294967294

‍‍11111111111111111111111111111111

0xFFFFFFFF

4294967295



Für den Typ „32-Bit signed (twos complement)“ ist das wie folgt:

Binär-Wert

Hexadezimal

Wert für „32-Bit signed (twos complement)“

10000000000000000000000000000000

0x80000000

-2147483648

10000000000000000000000000000001

0x80000001

-2147483647

10000000000000000000000000000010

0x80000002

-2147483646

… usw. ...



1111111111111111‍1111111111111111

0xFFFFFFFF

-1

00000000000000000000000000000000

0x00000000

0

00000000000000000000000000000001

0x00000001

1

… usw. ...



‍‍01111111111111111111111111111101

0x7FFFFFFD

2147483645

‍‍01111111111111111111111111111110

0x7FFFFFFE

2147483646

‍‍01111111111111111111111111111111

0x7FFFFFFF

2147483647


Für den Typ „32-Bit float (IEEE 754)“ erfolgt die Auswertung wie von der Norm  IEEE 754 vorgegeben.


Für die 64-Bit-Werte in „unsigned (straight binary)“ oder „signed (twos complement)“ erfolgt die Auswertung ähnlich wie bei den entsprechenden 16- oder 32-Bit-Werten, nur dann natürlich mit entsprechend mehr Bits.


Wo mehrere 16-Bit-Werte zu einem 32- oder 64-Bit Wert kombiniert werden, liegen die Adressen hintereinander.


Beispiel: Ein 32-Bit Wert der beim siebten Holding Register (interne Adresse 6) beginnt, würde über Register-Adresse 40007 (= 40001 + 6) angesprochen, belegt dann aber auch die nachfolgende Adresse 40008 (intern 7) so dass der nächste Wert dann wieder bei 40009 (intern 8) möglich wäre.


Manche Hersteller speichern auch Strings in einigen Input Registern oder Holding Registern. Da ein Zeichen in einem Byte gespeichert werden kann, können dann zwei Zeichen pro 16-Bit Register abgelegt werden können. Auch hier können mehrere aufeinander folgende Register zusammen gehören und gemeinsam eine Zeichenkette wie z. B. eine Geräte-Bezeichnung enthalten.