FSoE (Fail Safe over EtherCAT) використовує спеціальний Safety PDU для керувальних та діагностичних команд. Команду Reset Master надсилає після перезапуску або помилки; Slave підтверджує її відповідним Reset PDU. На діаграмах нижче показано структури кадрів Master і Slave для 2, 4, 6 та 8 байтів safety-даних. На кожній діаграмі верхній рядок показує структуру на рівні слів (16-бітні поля CRC і Connection ID), а другий рядок розбиває кожне слово на молодший і старший октети.
Примітка — кількість байтів safety-даних є фіксованою для кожного напрямку. Кожне з’єднання FSoE має фіксовану довжину safety-даних (Master→Slave і Slave→Master), однаково налаштовану на обох вузлах. Дозволені довжини — 1, 2, 4, 6 або 8 октетів. Фактична довжина для конкретного з’єднання залежить від FSoE Slave-пристрою і має бути взята з документації Slave або файлу опису пристрою (ESI/EEPROM). На діаграмах нижче показано всі стандартні довжини, тож можна знайти розташування, що застосовується до конкретного пристрою.
Master Reset PDU (FSoE Master → Slave)
2 байти safety-даних
| Команда | SafeData[0] | SafeData[1] | CRC_0 | Conn_Id | ||
|---|---|---|---|---|---|---|
| Reset Октет 0 | код помилки Октет 1 | 0 Октет 2 | CRC_0_Lo Октет 3 | CRC_0_Hi Октет 4 | Conn_Id_Lo Октет 5 | Conn_Id_Hi Октет 6 |
4 байти safety-даних
| Команда | SafeData[0] | SafeData[1] | CRC_0 | SafeData[2] | SafeData[3] | CRC_1 | Conn_Id | |||
|---|---|---|---|---|---|---|---|---|---|---|
| Reset Октет 0 | код помилки Октет 1 | 0 Октет 2 | CRC_0_Lo Октет 3 | CRC_0_Hi Октет 4 | 0 Октет 5 | 0 Октет 6 | CRC_1_Lo Октет 7 | CRC_1_Hi Октет 8 | Conn_Id_Lo Октет 9 | Conn_Id_Hi Октет 10 |
6 байтів safety-даних
| Команда | SafeData[0] | SafeData[1] | CRC_0 | SafeData[2] | SafeData[3] | CRC_1 | ||
|---|---|---|---|---|---|---|---|---|
| SafeData[4] | SafeData[5] | CRC_2 | Conn_Id | |||||
| Reset Октет 0 | код помилки Октет 1 | 0 Октет 2 | CRC_0_Lo Октет 3 | CRC_0_Hi Октет 4 | 0 Октет 5 | 0 Октет 6 | CRC_1_Lo Октет 7 | CRC_1_Hi Октет 8 |
| 0 Октет 9 | 0 Октет 10 | CRC_2_Lo Октет 11 | CRC_2_Hi Октет 12 | Conn_Id_Lo Октет 13 | Conn_Id_Hi Октет 14 | |||
8 байтів safety-даних
| Команда | SafeData[0] | SafeData[1] | CRC_0 | SafeData[2] | SafeData[3] | CRC_1 | |||
|---|---|---|---|---|---|---|---|---|---|
| SafeData[4] | SafeData[5] | CRC_2 | SafeData[6] | SafeData[7] | CRC_3 | Conn_Id | |||
| Reset Октет 0 | код помилки Октет 1 | 0 Октет 2 | CRC_0_Lo Октет 3 | CRC_0_Hi Октет 4 | 0 Октет 5 | 0 Октет 6 | CRC_1_Lo Октет 7 | CRC_1_Hi Октет 8 | |
| 0 Октет 9 | 0 Октет 10 | CRC_2_Lo Октет 11 | CRC_2_Hi Октет 12 | 0 Октет 13 | 0 Октет 14 | CRC_3_Lo Октет 15 | CRC_3_Hi Октет 16 | Conn_Id_Lo Октет 17 | Conn_Id_Hi Октет 18 |
Slave Reset PDU (FSoE Slave → Master, підтвердження)
2 байти safety-даних
| Команда | SafeData[0] | SafeData[1] | CRC_0 | Conn_Id | ||
|---|---|---|---|---|---|---|
| Reset Октет 0 | 0 Октет 1 | 0 Октет 2 | CRC_0_Lo Октет 3 | CRC_0_Hi Октет 4 | Conn_Id_Lo Октет 5 | Conn_Id_Hi Октет 6 |
4 байти safety-даних
| Команда | SafeData[0] | SafeData[1] | CRC_0 | SafeData[2] | SafeData[3] | CRC_1 | Conn_Id | |||
|---|---|---|---|---|---|---|---|---|---|---|
| Reset Октет 0 | 0 Октет 1 | 0 Октет 2 | CRC_0_Lo Октет 3 | CRC_0_Hi Октет 4 | 0 Октет 5 | 0 Октет 6 | CRC_1_Lo Октет 7 | CRC_1_Hi Октет 8 | Conn_Id_Lo Октет 9 | Conn_Id_Hi Октет 10 |
6 байтів safety-даних
| Команда | SafeData[0] | SafeData[1] | CRC_0 | SafeData[2] | SafeData[3] | CRC_1 | ||
|---|---|---|---|---|---|---|---|---|
| SafeData[4] | SafeData[5] | CRC_2 | Conn_Id | |||||
| Reset Октет 0 | 0 Октет 1 | 0 Октет 2 | CRC_0_Lo Октет 3 | CRC_0_Hi Октет 4 | 0 Октет 5 | 0 Октет 6 | CRC_1_Lo Октет 7 | CRC_1_Hi Октет 8 |
| 0 Октет 9 | 0 Октет 10 | CRC_2_Lo Октет 11 | CRC_2_Hi Октет 12 | Conn_Id_Lo Октет 13 | Conn_Id_Hi Октет 14 | |||
8 байтів safety-даних
| Команда | SafeData[0] | SafeData[1] | CRC_0 | SafeData[2] | SafeData[3] | CRC_1 | |||
|---|---|---|---|---|---|---|---|---|---|
| SafeData[4] | SafeData[5] | CRC_2 | SafeData[6] | SafeData[7] | CRC_3 | Conn_Id | |||
| Reset Октет 0 | 0 Октет 1 | 0 Октет 2 | CRC_0_Lo Октет 3 | CRC_0_Hi Октет 4 | 0 Октет 5 | 0 Октет 6 | CRC_1_Lo Октет 7 | CRC_1_Hi Октет 8 | |
| 0 Октет 9 | 0 Октет 10 | CRC_2_Lo Октет 11 | CRC_2_Hi Октет 12 | 0 Октет 13 | 0 Октет 14 | CRC_3_Lo Октет 15 | CRC_3_Hi Октет 16 | Conn_Id_Lo Октет 17 | Conn_Id_Hi Октет 18 |
Коди помилок зв’язку FSoE
У Master Reset PDU SafeData[0] (біти 0–7) переносить код помилки. Значення 0x00 означає локальний reset або підтвердження.
| Код помилки | Опис |
|---|---|
| 0 | Локальний reset або підтвердження команди RESET |
| 1 | Неочікувана команда (INVALID_CMD) |
| 2 | Невідома команда (UNKNOWN_CMD) |
| 3 | Недійсний Connection ID (INVALID_CONNID) |
| 4 | Помилка CRC (INVALID_CRC) |
| 5 | Watchdog завершився (WD_EXPIRED) |
| 6 | Недійсна FSoE Slave Address (INVALID_ADDRESS) |
| 7 | Недійсні safety-дані (INVALID_DATA) |
| 8 | Недійсна довжина параметрів зв’язку (INVALID_COMPARALEN) |
| 9 | Недійсні дані параметрів зв’язку (INVALID_COMPARA) |
| 10 | Недійсна довжина параметрів застосунку (INVALID_USERPARALEN) |
| 11 | Недійсні дані параметрів застосунку (INVALID_USERPARA) |
| 0x80–0xFF | Недійсний SafePara (специфічний для пристрою) |
Пов’язані статті
Огляд та основи
- What does the FSoE abbreviation actually mean? — що означає абревіатура FSoE
- FSoE frame structure explained by examples — загальна структура Safety PDU
- All the states of the FSoE state machine — п’ять станів FSoE та їхні переходи
- FSoE: Safety PDU command table — повний список команд FSoE
Структури PDU за станами
- FSoE Reset State PDU: Master and Slave Structure — структура PDU та коди помилок для стану Reset
- FSoE Session PDU: Master and Slave Structure — структура PDU для стану Session
- FSoE Connection PDU: Master and Slave Structure — структура PDU для стану Connection
- FSoE Parameter PDU: Master and Slave Structure — структура PDU для стану Parameter
- FSoE Data PDU: Master and Slave Structure — структура PDU для стану Data
CRC
- FSoE CRC: Which polynomial does it use? — 17-бітний поліном, що лежить в основі CRC FSoE
- How are the FSoE CRC tables constructed? — як генеруються таблиці CRC
- FSoE: How does CRC inheritance work? — як ланцюг CRC пов’язує послідовні PDU
- How to compute the CRC checksum for FSoE PDUs? — алгоритм побайтового обчислення CRC
Коди помилок та формат даних
- FSoE: List of all communication error codes — усі коди помилок зв’язку FSoE
- FSoE: Is data transmitted little-endian or big-endian? — порядок байтів багатобайтових полів