What is the data type of Cartesian_Z:1i
ata ?
If it is a DINT (even though only containing 16 bits of data) and PosStorage is an INT, then what you are doing is what you have to do.
The number of bits copied by a COP is determined by the destination (and length).
The DINT data type has 32 bits, whether they are used or not. A COP (DINT[0], REAL, 1) is only going to copy 32 bits (the size of the REAL) from the DINT array into the REAL, and thus will take all 32 bits of DINT[0] and nothing of DINT[1].
OTOH, a COP (INT[0], REAL, 1) is also going to copy 16 bits from INT[0] and still need to copy an additional 16 bits, so it will take those from INT[1].
If the function is COP(SINT[0], REAL, 1), then the 8-bit patterns from SINT[0], SINT[1], SINT[2], and SINT[3] would be copied to form the 32-bit REAL.
Does that help ?
You might be able to "fix" things depending on how Cartesian_Z:1i
ata got defined, either by editing the EDS file or by changing the configuration of the Generic Ethernet Device (if that's what you're using) for a Comm_Format of "Data - DINT" to "Data- Int".
But that could break other things, so caveat emptor / you get what you pay for and this is free advice and thus paid for with nothing and worth the same.