1. Mein Denkfehler, dass man mit einer WORD Variablen zwei Bytes im Prozessabbild einsammelt ist zwar jetzt weg ...
2. Das liegt jetzt allerdings alles daran, dass es ein USINT ist, oder?
Zu 1.:
Ich bin noch nicht davon überzeugt, dass es ein Denkfehler war. Mit WORD sollte es gehen. Vielleicht ist es eine Einschränkung von
CodeSys, die mir nicht bewusst ist?
Zu 2.:
Wie meinst Du das? Was liegt alles daran, dass es ein USINT ist?
Die DatenTypen wie BYTE, WORD, DWORD, LWORD, USINT, UINT, UDINT, ULINT, SINT, INT, DINT, LINT, REAL und LREAL beinhalten immer 2 Informationen:
a) ihre Länge bzw. aus wie vielen Bytes sie bestehen (1 oder 2 oder 4 oder 8 ) und
b) ihre Bedeutung bzw. wie der Inhalt zu interpretieren ist (binär alias logisch alias BitMuster oder vorzeichenlose GanzZahl oder GanzZahl mit Vorzeichen oder GleitPunktZahl oder ... .
Ausnahmen sind STRING und WSTRING. Sie sagen nichts darüber aus, wie lang sie sind, sondern nur, wie viele Bytes pro Zeichen sie belegen (STRING 1 Byte und WSTRING 2 Bytes).
Eine weitere Ausnahme kann BOOL sein. BOOL sagt zwar eindeutig aus, dass es eine 1-Bit Information ist, aber häufig wird eine grössere Menge an Bits belegt, um nur das eine Bit an Information "zu verpacken". Dies liegt daran, dass die Prozessoren nicht von Hause aus einzelne Bits adressieren können (die Belange der SPS-Programmierung wurden bei ihrer Entwicklung schlicht vergessen/ignoriert

).
Bei den heutigen, geringen Kosten für Speicher liegt es dann nahe, eine grössere "VerpackungsEinheit" für einzelne Bits zu ver[sch]wenden.
Zurück zu a) und b):
Code:
| binär |G a n z z a h l|Gleit- | Ganzzahl [s] |Ganzzahl [ms]|
|logisch|nur pos|pos&neg| -Punkt| 86400 s/d |86400000 ms/d|
------------+-------+-------+-------+-------+---------------+-------------+---------
1 Byte Länge| BYTE | U[B]S[/B]INT | [B]S[/B]INT | - | - | - | [B]S[/B]=Short
------------+-------+-------+-------+-------+---------------+-------------+---------
2 Byte Länge| WORD | UINT | INT | - | - | - |
------------+-------+-------+-------+-------+---------------+-------------+---------
4 Byte Länge| [B]D[/B]WORD | U[B]D[/B]INT | [B]D[/B]INT | REAL | DATE | TIME | [B]D[/B]=Double
| | | | | DATE_AND_TIME | TIME_OF_DAY |
------------+-------+-------+-------+-------+---------------+-------------+---------
8 Byte Länge| [B]L[/B]WORD | U[B]L[/B]INT | [B]L[/B]INT | [B]L[/B]REAL | - | - | [B]L[/B]=Long
Meinst Du, es liegt an der Länge von USINT oder an der "VorzeichenLosigkeit"?