Typ-Kompatibilität in 4diac-IDE (Datenverbindungen)
Die Regeln für erlaubte Datenverbindungen basieren auf dem Prinzip „Target muss Source aufnehmen können“.
Zentrale Dateien in der Codebasis
Datei |
Zweck |
|---|---|
|
Definiert |
|
Prüft Verbindungen mit |
|
Vollständige Test-Matrix aller impliziten Zuweisungen |
Grundprinzip
Eine Verbindung von Source → Target ist erlaubt, wenn gilt:
targetType.isAssignableFrom(sourceType)
Das bedeutet: der Target-Typ muss gleich oder größer/allgemeiner sein als der Source-Typ.
Integer-Typen
Signed
Source → |
SINT |
INT |
DINT |
LINT |
|---|---|---|---|---|
SINT |
✓ |
✓ |
✓ |
✓ |
INT |
✗ |
✓ |
✓ |
✓ |
DINT |
✗ |
✗ |
✓ |
✓ |
LINT |
✗ |
✗ |
✗ |
✓ |
Unsigned
Source → |
USINT |
UINT |
UDINT |
ULINT |
|---|---|---|---|---|
USINT |
✓ |
✓ |
✓ |
✓ |
UINT |
✗ |
✓ |
✓ |
✓ |
UDINT |
✗ |
✗ |
✓ |
✓ |
ULINT |
✗ |
✗ |
✗ |
✓ |
Wichtig: Zwischen Signed und Unsigned gibt es keine implizite Konvertierung.
INT→UINTist nicht erlaubt.
Gleitkomma-Typen
Source → |
REAL |
LREAL |
|---|---|---|
REAL |
✓ |
✓ |
LREAL |
✗ |
✓ |
REAL und LREAL akzeptieren außerdem bestimmte Ganzzahl-Typen:
REAL akzeptiert:
INT,SINT,UINT,USINTLREAL akzeptiert:
DINT,INT,SINT,UDINT,UINT,USINT,REAL
Bit-Typen
Source → |
BOOL |
BYTE |
WORD |
DWORD |
LWORD |
|---|---|---|---|---|---|
BOOL |
✓ |
✓ |
✓ |
✓ |
✓ |
BYTE |
✗ |
✓ |
✓ |
✓ |
✓ |
WORD |
✗ |
✗ |
✓ |
✓ |
✓ |
DWORD |
✗ |
✗ |
✗ |
✓ |
✓ |
LWORD |
✗ |
✗ |
✗ |
✗ |
✓ |
Zeichen und Strings
Source → |
CHAR |
WCHAR |
STRING |
WSTRING |
|---|---|---|---|---|
CHAR |
✓ |
✗ |
✓ |
✗ |
WCHAR |
✗ |
✓ |
✗ |
✓ |
Zeit- und Datums-Typen
Lang-Typen akzeptieren auch die kurzen Varianten:
LTIME ←
TIMELDATE ←
DATELTOD ←
TODLDT ←
DT
Zusammenfassung der Regeln
Breite-Regel: Ein kleinerer Typ darf auf einen größeren Typ verbunden werden (z. B.
UINT→UDINT).Keine Verengung: Ein größerer Typ darf nicht auf einen kleineren Typ verbunden werden (z. B.
UDINT→UINTist verboten).Sign-Grenze: Signed und Unsigned Integer sind nicht kompatibel (z. B.
INT→UINTist verboten).Bool-Sonderregel:
BOOLdarf auf jeden Bit-Typ (BYTE,WORD,DWORD,LWORD) verbunden werden.