Datenaustausch zwischen A4 und A5/A6 Steuerungen mit CODESYS V2

Gilt für CODESYS V2 und betrifft den Datenaustausch von z. B. Strukturen mit unterschiedlichen Elementen (z. B. BOOL, WORD…) zwischen A4 und A5/A6 Steuerungen über TCP/IP, UDP oder CODESYS Netzwerkfunktionen.

 

Unterschiedliche Speicherausrichtung

Variablen eines PLC Programms belegen nach dem Compilieren und dem Übertragen auf die Steuerung Bereiche im internen Speicher einer Steuerung:

Variablentyp

Minimaler Speicherbedarf im internen Speicher

BOOL

1 Byte

BYTE

1 Byte

WORD

2 Byte

DWORD

4 Byte

REAL

4 Byte

LREAL 1)

8 Byte

1)  

LREAL Variablen dürfen nicht zwischen A4 und A5/A6 ausgetauscht werden.
Der Variablentyp LREAL wird in der A4 nicht unterstützt.
Siehe 'PLC Projekte einer A5/A6 Steuerung auf A4 Steuerungen verwenden'.

 

Bei Strukturvariablen werden mehrere Variablen zu Datenstrukturen zusammengefasst. Diese Strukturen belegen compilerabhängig unterschiedliche Bereiche im internen Speicher einer Steuerung. Die Programmiersoftware CODESYS verwendet für die Steuerung A4 und A5/A6 unterschiedliche Compiler, was dazu führt, dass die Strukturvariablen unterschiedlich im internen Speicher abgelegt werden.

 

Der Compiler der A5/A6 Steuerung legt Daten hintereinander im internen Speicher ab, unabhängig vom Datentyp.

Der Compiler der A4 Steuerung arbeitet nach folgenden Regeln:

 

Beispiel:

Es soll eine angenommene Struktur von einer A5/A6 Steuerung auf eine A4 übertragen werden.

Beispielhaft angenommene Strukturvariable:

Strukturinhalt

Interner Speicher

Variablenname

Variablentyp

Speicherbedarf im internen Speicher

boVar1

BOOL

1 Byte

dwVar2

DWORD

4 Byte

byVar3

BYTE

1 Byte

wVar4

WORD

2 Byte

 

Ausrichtung im internen Speicher [Byte]

0

1

2

3

4

5

6

7

8

9

10

11

A5/A6 Steuerung

boVar1

dwVar2

byVar3

wVar4

       

A4 Steuerung

boVar1

 

 

 

dwVar2

byVar3

 

wVar4

 

Solange Strukturvariablen nicht zwischen unterschiedlichen Steuerungen ausgetauscht werden ist die interne Speicherbelegung für den Anwender nicht relevant.

Wenn Daten zwischen Steuerungen A4 und A5/A6 ausgetauscht werden, werden die übertragenen Daten im internen Speicher des Empfängers so abgelegt, wie sie gesendet wurden. Der Compiler des Empfängers erwartet die Daten aber in der zuvor dargestellten Anordnung, was dazu führt, dass die übertragenen Daten im Empfänger den Strukturvariablen falsch zugeordnet werden. Im vorherigen Beispiel würde nur die Variable 'boVar1' im Empfängergerät den korrekten Inhalt zugewiesen bekommen.

 

Lösungsvorschläge, aufgezeigt am Beispiel

Die Daten im Sender müssen so angelegt werden, dass sie auch in der Speicherausrichtung des Empfängers korrekt zugewiesen werden.

 

Der Strukturinhalt im Beispiel muss folgendermaßen verändert werden, um die Datenausrichtung auf den Empfänger abzustimmen.

Ausrichtung interner Speicher [Byte]

0

1

2

3

4

5

6

7

8

9

10

11

A5/A6 Steuerung (Sender)

boVar1

byDummy1

byDummy2

byDummy3

dwVar2

byVar3

byDummy4

wVar4

A4 Steuerung (Empfänger)

boVar1

 

 

 

dwVar2

byVar3

 

wVar4

 

Die beispielhaft angenommene Strukturvariable muss wie folgt erweitert werden:

Strukturinhalt

Interner Speicher

Variablenname

Variablentyp

Speicherbedarf im internen Speicher

boVar1

BOOL

1 Byte

byDummy1

Byte

1 Byte

byDummy2

Byte

1 Byte

byDummy3

Byte

1 Byte

dwVar2

DWORD

4 Byte

byVar3

BYTE

1 Byte

byDummy4

BYTE

1 Byte

wVar4

WORD

2 Byte

 

Die mit den Dummyvariablen erweiterte Struktur kann von einer A5/A6 Steuerung auf eine A4 korrekt übertragen und vom A4 Compiler den Strukturvariablen korrekt zugewiesen werden. Auch die Übertragung der Daten von einer A4 auf eine A5/A6 Steuerung funktioniert mit der erweiterten Strukturvariable.