Стан Data — це фінальний стан встановлення з’єднання FSoE, у якому з’єднання проводить решту свого життєвого циклу. Він іде за станом Parameter. На відміну від попередніх станів, де кількість циклів FSoE була фіксованою протоколом, стан Data виконується безперервно — цикли FSoE передаються, доки не виникне помилка зв’язку або FSoE-вузол не буде зупинено локально. У кожному циклі FSoE Master надсилає SafeOutputs до FSoE Slave, а FSoE Slave підтверджує, надсилаючи SafeInputs назад до Master.
Стан Data використовує дві команди:
- ProcessData — використовується, коли safety-дані є дійсними.
- FailSafeData — використовується, коли вузол локально виявляє, що його safety-дані недійсні або мають бути переведені в безпечний стан.
Ця стаття детально розбирає всі чотири PDU стану Data, визначені в ETG.5100 S (D) V1.2.0, §8.2.2.6, на канонічному прикладі специфікації з 4 октетами safety-даних.
Примітка — кількість байтів 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.
Коли входять у стан Data і коли виходять із нього?
Стан Data входять, коли Master залишає стан Parameter, надсилаючи Safety Master PDU з командою ProcessData (або FailSafeData). Щойно потрапивши в стан Data, з’єднання залишається там нескінченно довго:
| Напрямок | Умова |
|---|---|
| Master залишається в Data | Надсилає ProcessData або FailSafeData PDU циклічно, доки не виникне помилка зв’язку або вузол не буде зупинено локально. |
| Slave залишається в Data | Підтверджує кожен PDU від Master і надсилає ProcessData або FailSafeData назад, доки не виникне помилка зв’язку або вузол не буде зупинено локально. |
Обидва вузли негайно виходять зі стану Data, якщо виявляють помилку зв’язку FSoE — у цьому випадку вони повертаються до стану Reset.
Команда ProcessData (дійсні дані)
Safety Master PDU (FSoE Master → Slave)
Master надсилає цей PDU для передачі SafeOutputs до Slave. Це Таблиця 23 ETG.5100 S (D) V1.2.0 для 4 октетів safety-даних.
| Команда | SafeData[0] | SafeData[1] | CRC_0 | SafeData[2] | SafeData[3] | CRC_1 | Conn_Id | |||
|---|---|---|---|---|---|---|---|---|---|---|
| ProcessData Октет 0 | SafeOutputs, байт 1 Октет 1 | SafeOutputs, байт 2 Октет 2 | CRC_0_Lo Октет 3 | CRC_0_Hi Октет 4 | SafeOutputs, байт 3 Октет 5 | SafeOutputs, байт 4 Октет 6 | CRC_1_Lo Октет 7 | CRC_1_Hi Октет 8 | Connection Id, молодший Октет 9 | Connection Id, старший Октет 10 |
Ключові моменти:
- Command (октет 0) —
ProcessData. - SafeData[0..3] переносять SafeOutputs — фактичні safety-дані виходу від Master до Slave. Байти розташовані за порядком: SafeData[0] — 1-й октет, SafeData[1] — 2-й і так далі.
- Conn_Id (октети 9 і 10) переносить Connection ID, як і в станах Connection та Parameter.
- CRC_0 і CRC_1 передаються як 16-бітні little-endian значення. Успадкування CRC активне протягом усіх циклів стану Data, зчеплюючи кожен PDU із попереднім.
Safety Slave PDU (FSoE Slave → Master)
Slave підтверджує PDU ProcessData від Master і надсилає SafeInputs назад до Master. Це Таблиця 24 ETG.5100 S (D) V1.2.0.
| Команда | SafeData[0] | SafeData[1] | CRC_0 | SafeData[2] | SafeData[3] | CRC_1 | Conn_Id | |||
|---|---|---|---|---|---|---|---|---|---|---|
| ProcessData Октет 0 | SafeInputs, байт 1 Октет 1 | SafeInputs, байт 2 Октет 2 | CRC_0_Lo Октет 3 | CRC_0_Hi Октет 4 | SafeInputs, байт 3 Октет 5 | SafeInputs, байт 4 Октет 6 | CRC_1_Lo Октет 7 | CRC_1_Hi Октет 8 | Connection Id, молодший Октет 9 | Connection Id, старший Октет 10 |
Зверни увагу на асиметрію з попередніми станами: у стані Data Slave не відлунює safety-дані Master. Натомість він надсилає власні SafeInputs — safety-дані входу від Slave до Master. Master надсилає SafeOutputs, Slave відповідає SafeInputs; кожен напрямок переносить власне незалежне корисне навантаження.
Команда FailSafeData (безпечний стан)
Якщо FSoE Master локально виявляє, що SafeOutputs недійсні або мають бути переведені в безпечний стан, він надсилає команду FailSafeData замість ProcessData. Те саме стосується FSoE Slave: якщо він локально виявляє, що SafeInputs недійсні або мають бути переведені в безпечний стан, він надсилає FailSafeData замість ProcessData.
Safety Master PDU з FailSafeData (FSoE Master → Slave)
Це Таблиця 25 ETG.5100 S (D) V1.2.0 для 4 октетів safety-даних.
| Команда | SafeData[0] | SafeData[1] | CRC_0 | SafeData[2] | SafeData[3] | CRC_1 | Conn_Id | |||
|---|---|---|---|---|---|---|---|---|---|---|
| FailSafeData Октет 0 | 0 Октет 1 — fail-safe дані | 0 Октет 2 — fail-safe дані | CRC_0_Lo Октет 3 | CRC_0_Hi Октет 4 | 0 Октет 5 — fail-safe дані | 0 Октет 6 — fail-safe дані | CRC_1_Lo Октет 7 | CRC_1_Hi Октет 8 | Connection Id, молодший Октет 9 | Connection Id, старший Октет 10 |
Ключові моменти:
- Command (октет 0) —
FailSafeData. - Усі октети SafeData встановлені в 0 — fail-safe дані не несуть корисного навантаження; вони сигналізують, що відправник перевів свої виходи в безпечний стан.
- Поля Conn_Id і CRC поводяться точно так само, як у PDU ProcessData. CRC все одно обчислюється і має збігатися — безпечний стан є визначеним робочим станом, а не помилкою зв’язку.
Safety Slave PDU з FailSafeData (FSoE Slave → Master)
Це Таблиця 26 ETG.5100 S (D) V1.2.0 для 4 октетів safety-даних.
| Команда | SafeData[0] | SafeData[1] | CRC_0 | SafeData[2] | SafeData[3] | CRC_1 | Conn_Id | |||
|---|---|---|---|---|---|---|---|---|---|---|
| FailSafeData Октет 0 | 0 Октет 1 — fail-safe дані | 0 Октет 2 — fail-safe дані | CRC_0_Lo Октет 3 | CRC_0_Hi Октет 4 | 0 Октет 5 — fail-safe дані | 0 Октет 6 — fail-safe дані | CRC_1_Lo Октет 7 | CRC_1_Hi Октет 8 | Connection Id, молодший Октет 9 | Connection Id, старший Октет 10 |
ProcessData і FailSafeData обираються незалежно
Ключова властивість стану Data полягає в тому, що вибір між ProcessData і FailSafeData є незалежним у кожному напрямку — він залежить лише від локальних обставин, а не від команди, отриманої від співрозмовника:
- Master надсилає ProcessData, якщо його SafeOutputs дійсні, або FailSafeData, якщо ні.
- Slave надсилає ProcessData, якщо його SafeInputs дійсні, або FailSafeData, якщо ні.
Це означає, що цілком нормально, коли в одному циклі один напрямок переносить ProcessData, а інший — FailSafeData. Наприклад, якщо SafeOutputs у Master дійсні, а SafeInputs у Slave — ні, Master надсилає ProcessData, а Slave відповідає FailSafeData. Жоден вузол не має чекати на інший, щоб змінити команду; рішення суто локальне.
Усе разом: обмін у стані Data
Стан Data — це безперервний циклічний обмін:
- Master → Slave: Safety Master PDU з
Command = ProcessData(переносить SafeOutputs) абоCommand = FailSafeData(усі SafeData = 0). - Slave → Master: Safety Slave PDU з
Command = ProcessData(переносить SafeInputs) абоCommand = FailSafeData(усі SafeData = 0).
Цей цикл повторюється нескінченно. Команда в кожному напрямку обирається незалежно на основі локальної дійсності safety-даних. Якщо будь-який вузол виявляє помилку зв’язку FSoE (див. FSoE: List of all communication error codes), обидва вузли повертаються до стану Reset, і встановлення з’єднання починається спочатку.
Підсумок
У стані Data FSoE Safety PDU нарешті переносить користувацькі safety-дані: Master надсилає SafeOutputs, а Slave відповідає SafeInputs, кожен використовуючи команду ProcessData. Якщо safety-дані будь-якого вузла недійсні або мають бути переведені в безпечний стан, він натомість надсилає команду FailSafeData з усіма октетами SafeData, встановленими в 0. Вибір між двома командами незалежний у кожному напрямку і залежить лише від локальних обставин. Стан Data виконується безперервно, доки не виникне помилка зв’язку (що викликає повернення до Reset) або вузол не буде зупинено локально. Успадкування CRC зчеплює кожен PDU із попереднім протягом усього стану Data, тож будь-яке пошкодження, втрата або переставлення виявляються негайно.
Посилання на стандарт
- ETG.5100 S (D) V1.2.0, §8.2.2.6 Data state, Таблиці 23–26.
Пов’язані статті
Огляд та основи
- 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 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? — порядок байтів багатобайтових полів