Состояние Reset — точка входа каждого соединения FSoE (Fail Safe over EtherCAT). Соединение входит в него после включения питания, после перезапуска (reset connection) или при обнаружении ошибки связи FSoE. Пока соединение находится в этом состоянии, пользовательские безопасные данные не передаются — Safety PDU используются для передачи команды Reset вместе с однобайтовым кодом ошибки, который сообщает второй стороне причину сброса соединения.
В этой статье разобраны три PDU состояния Reset, определённые в ETG.5100 S (D) V1.2.0, §8.2.2.2, на каноническом примере спецификации — 4 октета безопасных данных. Полные структуры для 2/4/6/8 октетов см. в FSoE Reset PDU: Master and Slave Structure.
Примечание — количество байтов безопасных данных фиксировано для каждого направления. Каждое соединение FSoE имеет фиксированную длину безопасных данных (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) — единственный байт безопасных данных, несущий смысл:
0x00— преднамеренный сброс (включение питания, перезапуск / reset connection) или подтверждение Reset от Slave.- Ненулевое значение — код ошибки связи FSoE, вызвавшей сброс (см. Таблицу 28 ниже).
Все остальные октеты SafeData не используются и должны быть установлены в 0. Поле Conn_Id также не используется (установлено в 0) — оно проверяется только после установки соединения. Поля CRC по-прежнему передаются и должны проходить проверку, но они вычисляются от сброшенного начального состояния, поскольку порядковый номер и унаследованный 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 | Master отправляет Safety Master PDU с командой Session на Slave. |
| Slave выходит из Reset | Slave получает корректный 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 октетов безопасных данных.
| Command | 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; любое ненулевое значение идентифицирует ошибку связи, вызвавшую сброс (см. таблицу ниже). - Все остальные октеты SafeData не используются и установлены в 0.
- CRC_0 и CRC_1 по-прежнему передаются как 16-битные little-endian значения, но поскольку порядковый номер и унаследованный CRC сброшены при входе, они вычисляются от сброшенного начального состояния — не связаны с предыдущим кадром.
- 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.
| Command | 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 — сброс, инициированный 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.
| Command | 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 подтверждает этот инициированный Slave Reset не отправкой ещё одного Reset PDU, а выходом из состояния Reset: он отправляет Safety Master PDU с командой Session, что служит сигналом для обеих сторон выйти из Reset.
Сведение воедино: обмен в состоянии Reset
Три приведённых выше PDU образуют небольшое рукопожатие, зависящее от того, кто инициировал сброс:
- Сброс, инициированный Master: Master отправляет Reset (с кодом ошибки) → Slave подтверждает Reset (SafeData = 0) → Master отправляет Session для выхода из 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. Коды 1–11 определены стандартом; 0x80–0xFF зарезервированы для специфичных для устройства ошибок SafePara.
| Код ошибки | Описание |
|---|---|
| 0 | Локальный сброс или подтверждение команды RESET |
| 1 | Неожиданная команда (INVALID_CMD) |
| 2 | Неизвестная команда (UNKNOWN_CMD) |
| 3 | Неверный Connection ID (INVALID_CONNID) |
| 4 | Ошибка CRC (INVALID_CRC) |
| 5 | Истёк watchdog (WD_EXPIRED) |
| 6 | Неверный адрес FSoE Slave (INVALID_ADDRESS) |
| 7 | Неверные безопасные данные (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 вычисляются от сброшенного начального состояния, поскольку и порядковый номер, и унаследованный 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 — байтовые структуры для всех длин безопасных данных
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? — порядок байтов многобайтовых полей