Communication between TwinCAT and BX/BCxx50
For transferring data from TwinCAT to the Bus Terminal Controller, it makes sense to organize the data in a structure. Please note the following to account for the differences in data management on the two systems.
- If two different data types are sent in sequence (e.g. byte and INT), the following variable is set to the next even address offset
 - Boolean variables should never be allocated individually within a structure, since they would invariably occupy 1 byte. Boolean expressions should always be masked in a byte or word.
 
Example 1: A structure on the BX/BCxx50 and on the PC
Variable  | BX/BCxx50 memory  | PC memory (TwinCAT)  | 
|---|---|---|
Byte  | %..B0  | %..B0  | 
INT (1)  | %..B2  | %..B1  | 
INT (2)  | %..B4  | %..B3  | 
Due to the fact that another variable type (INT) follows the first byte, in the BX/BCxx50 it was assigned the next free even address. In order to achieve the same data structure on both systems, a dummy byte has to be inserted in the PC project (see example 2).
Example 2: A structure on the BX/BCxx50 and on the PC with the same memory allocation
Variable  | BX/BCxx50 memory  | PC memory (TwinCAT)  | 
|---|---|---|
Byte  | %..B0  | %..B0  | 
Byte  | %..B1 (not necessarily required, since the system deals with this itself if the variable does not exist)  | %..B1  | 
INT (1)  | %..B2  | %..B2  | 
INT (2)  | %..B4  | %..B4  | 
Data structure
Type PB_Data
STRUCT
wVar_1:WORD;
iValue_1:INT;
iValue_2:INT;
iValue_3:INT;
END_STRUCT
END_TYPE
Creating a variable structure
VAR_Global
strData_Out AT %QB1000:PB_Data; (*PLC Variables *)
bInput_01 AT %IX0.0:BOOL; (* Input from a terminal *)
END_VAR
Small programming example
strData_Out.wVar_1.0:=bInput_01;
![]()  | Do not use real values in a mixed data structure A mixed data structure should not contain real values. If this is nevertheless the case, the high and low words must be swapped in the BX/BCxx50 or in the TwinCAT master project. It is better to use an array of Real values or to transfer the Real values individually.  | 
![]()  | Larger fieldbus data blocks You can transfer larger fieldbus data blocks, in order to have a reserve for your structure. Disadvantage: These reserves are then transferred with each fieldbus telegram, resulting in overload of the fieldbus communication.  | 
