Kommunikation zwischen TwinCAT und BX/BCxx50
Um von TwinCAT-Daten zum Busklemmen-Controller zu transportieren liegt es nahe, die Daten in einer Struktur anzulegen. Da die Datenhaltung auf beiden Systemen unterschiedlich ist sind folgende Hinweise zu beachten.
- Wenn zwei unterschiedliche Datentypen aufeinander folgen (zum Beispiel Byte und INT) wird die folgende Variable auf den nächsten graden Adress-Offset gelegt
- Boolsche Variablen sollten nie einzeln in eine Struktur gelegt werden, da sie so immer 1 Byte belegen würden. Boolsche Ausdrücke sollten immer in ein Byte oder Wort maskiert sein.
Beispiel 1: Eine Struktur auf den BX/BCxx50 und auf dem PC
Variable | Speicher des BX/BCxx50 | Speicher des PC (TwinCAT) |
---|---|---|
Byte | %..B0 | %..B0 |
INT (1) | %..B2 | %..B1 |
INT (2) | %..B4 | %..B3 |
Dadurch das hinter dem ersten Byte eine anderer Variable-Typ (INT) folgt ist dieser im BX/BCxx50 auf die nächste freie grade Adresse gelegt worden. Will man beide auf beiden Systemen die gleiche Datenstruktur haben, muss im PC-Projekt ein Dummy-Byte eingefügt werden (siehe Beispiel 2).
Beispiel 2: Eine Struktur auf den BX/BCxx50 und auf dem PC mit gleicher Speicherbelegung
Variable | Speicher des BX/BCxx50 | Speicher des PC (TwinCAT) |
---|---|---|
Byte | %..B0 | %..B0 |
Byte | %..B1 (nicht unbedingt notwendig, da dies das System selber macht, wenn diese Variabel nicht vorhanden ist) | %..B1 |
INT (1) | %..B2 | %..B2 |
INT (2) | %..B4 | %..B4 |
Daten Struktur
Type PB_Data
STRUCT
wVar_1:WORD;
iValue_1:INT;
iValue_2:INT;
iValue_3:INT;
END_STRUCT
END_TYPE
Anlegen einer Struktur in den Variablen
VAR_Global
strData_Out AT %QB1000:PB_Data; (*PLC Variables *)
bInput_01 AT %IX0.0:BOOL; (* Input from a terminal *)
END_VAR
Kleines Programmbeispiel
strData_Out.wVar_1.0:=bInput_01;
Keine Real-Werte in gemischter Datenstruktur verwenden In einer gemischten Datenstruktur sollten keine Real-Werte enthalten sein. Wenn dies doch der Fall ist, muss zusätzlich im BX/BCxx50 oder im TwinCAT-Masterprojekt das High und Low Word vertauscht werden. Verwenden Sie besser ein Array von Real-Werten oder übertragen Sie die Real-Werte einzeln. |
Größere Feldbusdatenblöcke Sie können auch größere Feldbusdatenblöcke übertragen, um eine Reserve für Ihre Struktur zu haben. Nachteil: Diese Reserven werden dann mit jedem Feldbustelegramm übertagen, was eine Mehrbelastung der Feldbuskommunikation verursacht. |