FSoE (Fail Safe over EtherCAT) использует выделенный Safety PDU для управляющих и диагностических команд. Команда Reset отправляется Master после перезапуска или ошибки; Slave подтверждает её соответствующим Reset PDU. На приведённых ниже диаграммах показаны структуры кадров Master и Slave для 2, 4, 6 и 8 байтов безопасных данных. На каждой диаграмме верхняя строка показывает структуру на уровне слов (16-битные поля CRC и Connection ID), а вторая строка разбивает каждое слово на младший и старший октеты.
Примечание — количество байтов безопасных данных фиксировано для каждого направления. Каждое соединение FSoE имеет фиксированную длину безопасных данных (Master→Slave и Slave→Master), одинаково настроенную на обоих узлах. Допустимые длины: 1, 2, 4, 6 или 8 октетов. Фактическая длина для конкретного соединения зависит от устройства FSoE Slave и берётся из документации Slave или файла описания устройства (ESI/EEPROM). На диаграммах ниже показаны все стандартные длины, чтобы можно было найти структуру, применимую к конкретному устройству.
Master Reset PDU (FSoE Master → Slave)
2 байта безопасных данных
| Command | 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 байта безопасных данных
| Command | 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 байтов безопасных данных
| Command | 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 байтов безопасных данных
| Command | 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 байта безопасных данных
| Command | 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 байта безопасных данных
| 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 | Conn_Id_Lo Октет 9 | Conn_Id_Hi Октет 10 |
6 байтов безопасных данных
| Command | 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 байтов безопасных данных
| Command | 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 означает локальный сброс или подтверждение.
| Код ошибки | Описание |
|---|---|
| 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_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? — порядок байтов многобайтовых полей