Стан Reset — це точка входу кожного з’єднання FSoE (Fail Safe over EtherCAT). З’єднання входить у нього після вмикання живлення, після перезапуску (reset connection) або щоразу, коли виявлено помилку зв’язку FSoE. Поки з’єднання перебуває в цьому стані, користувацькі safety-дані не обмінюються — Safety PDU перепрофілюються для перенесення команди Reset разом із однобайтовим кодом помилки, що повідомляє співрозмовнику, чому з’єднання було скинуто.
Ця стаття детально розбирає три PDU стану Reset, визначені в ETG.5100 S (D) V1.2.0, §8.2.2.2, на канонічному прикладі специфікації з 4 октетами safety-даних. Повні розташування для 2/4/6/8 октетів див. у FSoE Reset PDU: Master and Slave Structure.
Примітка — кількість байтів safety-даних є фіксованою для кожного напрямку. Кожне з’єднання FSoE має фіксовану довжину safety-даних (Master→Slave і Slave→Master), однаково налаштовану на обох вузлах. Дозволені довжини — 1, 2, 4, 6 або 8 октетів. Фактична довжина для конкретного з’єднання залежить від FSoE Slave-пристрою і має бути взята з документації Slave або файлу опису пристрою (ESI/EEPROM). Приклади нижче використовують 4 октети, як у специфікації; байтове розташування для інших довжин показано у FSoE Reset PDU: Master and Slave Structure.
Примітка — єдиним релевантним байтом даних є код помилки. У кожному PDU стану Reset
SafeData[0](октет 1) — єдиний байт safety-даних, що має значення:
0x00— навмисний reset (вмикання живлення, перезапуск / reset connection) або підтвердження Slave у відповідь на Reset від Master.- Ненульове — код помилки зв’язку FSoE, що викликав reset (див. Таблицю 28 нижче).
Усі інші октети SafeData не використовуються і мають бути встановлені в 0. Поле Conn_Id також не використовується (встановлене в 0) — воно перевіряється лише після встановлення з’єднання. Поля CRC все одно передаються і мають збігатися, але вони обчислюються від початкового стану reset, оскільки порядковий номер і успадкований CRC очищаються при вході в Reset (див. FSoE: How does CRC inheritance work? і How to compute the CRC checksum for FSoE PDUs?).
Коли входять у стан Reset і коли виходять із нього?
Стан Reset повторно ініціалізує з’єднання FSoE після вмикання живлення або після помилки зв’язку. При вході скидаються дві речі:
- порядковий номер, і
- CRC останньої телеграми, що використовувався в обчисленні CRC (тобто ланцюг успадкування CRC розривається).
Переходи асиметричні, віддзеркалюючи ролі Master/Slave:
| Напрямок | Умова |
|---|---|
| Master виходить із Reset | Надсилає Safety Master PDU з командою Session до Slave. |
| Slave виходить із Reset | Отримує коректний Safety Master PDU з командою Session. |
Інакше кажучи, Master залишає Reset, видаючи команду Session, а Slave залишає Reset, щойно приймає цей Session PDU. Поки обидві сторони ще перебувають у Reset, вони обмінюються Safety PDU з командою Reset, як показано нижче.
Master Reset PDU (FSoE Master → Slave)
Master надсилає цей PDU після перезапуску або після виявлення помилки зв’язку FSoE. Приклад нижче — Таблиця 10 ETG.5100 S (D) V1.2.0 для 4 октетів safety-даних.
| Команда | SafeData[0] | SafeData[1] | CRC_0 | SafeData[2] | SafeData[3] | CRC_1 | Conn_Id | |||
|---|---|---|---|---|---|---|---|---|---|---|
| Reset Октет 0 | код помилки Октет 1 — 0 для перезапуску | 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 — не використовується |
Ключові моменти:
- Command (октет 0) —
Reset. - SafeData[0] (октет 1) переносить код помилки (біти 0–7). Значення
0x00означає звичайний перезапуск / reset connection; будь-яке ненульове значення ідентифікує помилку зв’язку, що викликала reset (див. таблицю нижче). - Усі інші октети SafeData не використовуються і встановлені в 0.
- CRC_0 і CRC_1 все одно передаються як 16-бітні little-endian значення, але оскільки порядковий номер і успадкований CRC скинуті при вході, вони обчислюються від початкового стану reset — а не зчеплені з попереднім кадром.
- Conn_Id не використовується і встановлений у 0 у стані Reset. Connection ID перевіряється лише після встановлення з’єднання.
Slave Reset PDU — підтвердження Reset від Master (FSoE Slave → Master)
Коли Slave отримує коректну команду Reset від Master, він підтверджує її, надсилаючи Safety Slave PDU з командою Reset і усіма октетами SafeData, встановленими в 0 — включно з позицією коду помилки. Це Таблиця 11 ETG.5100 S (D) V1.2.0.
| Команда | 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 | 0 Октет 9 — не використовується | 0 Октет 10 — не використовується |
Єдина відмінність від Master Reset PDU полягає в тому, що SafeData[0] завжди дорівнює 0 — Slave не відлунює код помилки при підтвердженні. Нульовий код помилки в цій позиції — це саме те, що Master використовує для розпізнавання підтвердження.
Slave Reset PDU — reset, ініційований Slave (FSoE Slave → Master)
Slave може сам ініціювати Reset — або під час перезапуску (reset connection), або у разі помилки, яку він виявив локально. У цьому випадку він надсилає Safety Slave PDU, структурно ідентичний Master Reset PDU: команда Reset встановлена, і SafeData[0] переносить власний код помилки Slave (0x00 для звичайного перезапуску). Це Таблиця 12 ETG.5100 S (D) V1.2.0.
| Команда | SafeData[0] | SafeData[1] | CRC_0 | SafeData[2] | SafeData[3] | CRC_1 | Conn_Id | |||
|---|---|---|---|---|---|---|---|---|---|---|
| Reset Октет 0 | код помилки Октет 1 — 0 для перезапуску | 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 — не використовується |
Master підтверджує цей Reset, ініційований Slave, не надсилаючи інший Reset PDU, а лишаючи стан Reset: він надсилає Safety Master PDU з командою Session, що є сигналом для обох сторін вийти з Reset.
Усе разом: обмін у стані Reset
Три PDU вище утворюють невелике рукостискання, що залежить від того, хто ініціював reset:
- Reset, ініційований Master: Master надсилає Reset (із кодом помилки) → Slave підтверджує Reset (SafeData = 0) → Master надсилає Session, щоб лишити Reset.
- Reset, ініційований Slave: Slave надсилає Reset (із кодом помилки) → Master надсилає Session, щоб лишити Reset (це підтвердження Master).
В обох випадках з’єднання залишає стан Reset лише тоді, коли Master видає команду Session; до того кожен PDU у мережі переносить команду Reset, поле Conn_Id дорівнює 0, а єдиним значущим корисним навантаженням є один байт коду помилки в SafeData[0].
Коди помилок зв’язку FSoE (Таблиця 28)
Код помилки, що переноситься в SafeData[0] Reset PDU, береться з наведеної нижче таблиці. Значення 0x00 означає «немає помилки» — тобто локальний reset або підтвердження команди Reset. Коди 1–11 визначені стандартом; 0x80–0xFF зарезервовані для специфічних для пристрою помилок SafePara.
| Код помилки | Опис |
|---|---|
| 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_COMMPARALEN) |
| 9 | Недійсні дані параметрів зв’язку (INVALID_COMPARA) |
| 10 | Недійсна довжина параметрів застосунку (INVALID_USERPARALEN) |
| 11 | Недійсні дані параметрів застосунку (INVALID_USERPARA) |
| 0x80–0xFF | Недійсний SafePara (специфічний для пристрою) |
Підсумок
У стані Reset FSoE Safety PDU фактично є однобайтовим діагностичним конвертом: поле Command дорівнює Reset, SafeData[0] переносить код помилки (або 0 при підтвердженні), усі інші октети SafeData та поле Conn_Id дорівнюють 0, а CRC обчислюються заново від початкового стану reset, оскільки і порядковий номер, і успадкований CRC очищені при вході. З’єднання залишає Reset лише тоді, коли Master надсилає команду Session — Slave ніколи не надсилає Session, він лише підтверджує Reset, обнуляючи свої SafeData.
Посилання на стандарт
- ETG.5100 S (D) V1.2.0, §8.2.2.2 Reset state, Таблиці 10–12 і Таблиця 28.
Пов’язані статті
Огляд та основи
- 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 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
- FSoE Reset PDU: Master and Slave Structure — байтові розташування для всіх довжин safety-даних
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? — порядок байтів багатобайтових полів