FSoE data consist of safe data sections of maximum 16 bits and then CRC sections of 16 bits. If a safe data variable is greater than 16 bits then it must be split in two or more data blocks.
As an example, a PDO mapping of a 56-Bit Variable object (e.g. Safety Position) should look like the following table:
Index | SubIndex | Bit length | Name | Comment |
---|---|---|---|---|
0x2200 | 0 | 16 | Safety Position | First two byte data chunk |
0x6000 | 1 | 16 | CRC - 0 | Checksum |
0x0000 | 0 | 16 | CRC - 1 | Second two byte data chunk |
0x6000 | 1 | 16 | CRC - 0 | Checksum |
0x0000 | 0 | 16 | CRC - 2 | Third two byte data chunk |
0x6000 | 1 | 16 | CRC - 0 | Checksum |
0x0000 | 0 | 8 | CRC - 0 | Fourth byte data chunk |
0x6000 | 1 | 16 | CRC - 3 | Checksum |
For a more detailed overview please refer to the ETG5120 FSoE Protocol enhancements document. In the chapter 5.3.3 "Splitting information in PDO Mapping"
To map safe objects to the process data, the object must contain at least one of these safe flags defined in ecSlvApiDef_CoE.h.
For mapping an object larger than 16 bits, we have to call the PDO create entry function for each 2 byte data blocks. In the example below, we call the CRC mapping too.
The below diagram shows the RxPDO object in the CoE online tab in TwinCAT. The safety position object is split into multiple data chunks, filled with CRC data in between.
The below diagram shows the RxPDO object in the process data tab in TwinCAT.