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

plugins/org.eclipse.fordiac.ide.model/src/org/eclipse/fordiac/ide/model/data/impl/DataTypeAnnotations.java

Definiert isAssignableFrom(DataType other) für jeden IEC 61131-3 Typ

plugins/org.eclipse.fordiac.ide.model/src/org/eclipse/fordiac/ide/model/validation/LinkConstraints.java:200

Prüft Verbindungen mit targetType.isAssignableFrom(sourceType)

tests/.../datatype/helper/ElementaryDataTypeCompatibilityTest.java

Vollständige Test-Matrix aller impliziten Zuweisungen

Grundprinzip

Eine Verbindung von SourceTarget 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. INTUINT ist nicht erlaubt.

Gleitkomma-Typen

Source →

REAL

LREAL

REAL

LREAL

REAL und LREAL akzeptieren außerdem bestimmte Ganzzahl-Typen:

  • REAL akzeptiert: INT, SINT, UINT, USINT

  • LREAL 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:

  • LTIMETIME

  • LDATEDATE

  • LTODTOD

  • LDTDT

Zusammenfassung der Regeln

  1. Breite-Regel: Ein kleinerer Typ darf auf einen größeren Typ verbunden werden (z. B. UINTUDINT).

  2. Keine Verengung: Ein größerer Typ darf nicht auf einen kleineren Typ verbunden werden (z. B. UDINTUINT ist verboten).

  3. Sign-Grenze: Signed und Unsigned Integer sind nicht kompatibel (z. B. INTUINT ist verboten).

  4. Bool-Sonderregel: BOOL darf auf jeden Bit-Typ (BYTE, WORD, DWORD, LWORD) verbunden werden.