FSoE Data PDU: структура Master і Slave

Стан 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_0SafeData[2]SafeData[3]CRC_1Conn_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_0SafeData[2]SafeData[3]CRC_1Conn_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_0SafeData[2]SafeData[3]CRC_1Conn_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_0SafeData[2]SafeData[3]CRC_1Conn_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 — це безперервний циклічний обмін:

  1. Master → Slave: Safety Master PDU з Command = ProcessData (переносить SafeOutputs) або Command = FailSafeData (усі SafeData = 0).
  2. 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.

Пов’язані статті

Огляд та основи

Структури PDU за станами

CRC

Коди помилок та формат даних


Дивіться схожі статті за категоріями: FSoE EtherCAT Safety