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

Стан Parameter іде за станом Connection у процедурі встановлення з’єднання FSoE. Його призначення — передати пов’язані з безпекою параметри зв’язку (значення FSoE watchdog) та специфічні для пристрою пов’язані з безпекою параметри застосунку від Master до Slave. Slave підтверджує кожен Parameter PDU, відлунюючи safety-дані назад. Оскільки параметри застосунку можуть мати будь-яку довжину, передача може охоплювати кілька циклів FSoE. Успадкування CRC забезпечує безпеку та цілісність передачі параметрів через усі цикли (див. FSoE: How does CRC inheritance work?).

Ця стаття детально розбирає PDU стану Parameter, визначені в ETG.5100 S (D) V1.2.0, §8.2.2.5, на канонічному прикладі специфікації з 4 октетами safety-даних і 2 октетами пов’язаного з безпекою параметра застосунку, що потребує двох циклів FSoE.

Примітка — кількість байтів safety-даних є фіксованою для кожного напрямку. Кожне з’єднання FSoE має фіксовану довжину safety-даних (Master→Slave і Slave→Master), однаково налаштовану на обох вузлах. Дозволені довжини — 1, 2, 4, 6 або 8 октетів. Фактична довжина для конкретного з’єднання залежить від FSoE Slave-пристрою і має бути взята з документації Slave або файлу опису пристрою (ESI/EEPROM). Приклади нижче використовують 4 октети, як у специфікації; байтове розташування для інших довжин відповідає тому ж шаблону (октети SafeData заповнюються за порядком, а невикористані октети в останньому циклі встановлюються в 0).

Коли входять у стан Parameter і коли виходять із нього?

Стан Parameter входять, коли Master залишає стан Connection, надсилаючи Safety Master PDU з командою Parameter. Переходи такі:

НапрямокУмова
Master виходить із ParameterПередав повний набір параметрів зв’язку та застосунку й отримав відповідні підтвердження від Slave, надсилає Safety PDU з командою Data (входячи в циклічний обмін даними).
Slave виходить із ParameterОтримує Safety PDU з командою Data від Master.

Обидва вузли також негайно виходять зі стану Parameter, якщо виявляють помилку зв’язку FSoE — у цьому випадку вони повертаються до стану Reset.

Safety-дані, що передаються в стані Parameter

Safety-дані в стані Parameter структуровані інакше, ніж у попередніх станах. Замість фіксованого набору полів вони переносять корисне навантаження змінної довжини з трьома 16-бітними полями заголовка. Таблиця 18 ETG.5100 S (D) V1.2.0 визначає розташування:

Октет SafetyDataОпис
0молодший октет (біти 0–7) довжини параметрів зв’язку в октетах (= 2)
1старший октет (біти 8–15) довжини параметрів зв’язку в октетах (= 0)
2молодший октет (біти 0–7) FSoE watchdog (у мс)
3старший октет (біти 8–15) FSoE watchdog (у мс)
4молодший октет (біти 0–7) довжини параметрів застосунку в октетах
5старший октет (біти 8–15) довжини параметрів застосунку в октетах
61-й октет пов’язаного з безпекою параметра застосунку
n+5n-й октет пов’язаного з безпекою параметра застосунку

Перші два 16-бітні поля — це довжина параметрів зв’язку (завжди 2, тобто лише значення watchdog) і значення FSoE watchdog у мілісекундах. Наступне 16-бітне поле — довжина параметрів застосунку, за якою йдуть самі байти параметрів застосунку. FSoE watchdog і пов’язані з безпекою параметри застосунку налаштовуються через safety-конфігуратор FSoE Master.

Скільки циклів FSoE потрібно?

Оскільки параметри застосунку можуть мати будь-яку довжину, загальна кількість циклів FSoE залежить і від довжини параметрів застосунку, і від фіксованої довжини safety-даних Safety PDU:

$$ \text{cycles} = \left\lceil \frac{6 + \text{appParamLen}}{\text{safetyDataLen}} \right\rceil $$

де 6 відповідає трьом 16-бітним полям заголовка (довжина параметрів зв’язку, watchdog, довжина параметрів застосунку). Якщо в останньому циклі FSoE потрібні не всі октети safety-даних, невикористані октети передаються як 0.

Для прикладу специфікації (4 октети safety-даних, 2 октети параметра застосунку) загальне корисне навантаження становить 6 + 2 = 8 октетів, що вміщується в ⌈8/4⌉ = 2 цикли FSoE. Перший цикл переносить довжину параметрів зв’язку, watchdog, а перші два октети були б довжиною параметрів застосунку — але в цьому прикладі довжина параметрів застосунку (2) надсилається в другому циклі разом із двома байтами параметра застосунку, як показано нижче.

Перший цикл — параметри зв’язку

Перший Safety Master PDU (FSoE Master → Slave)

Master надсилає цей PDU для передачі довжини параметрів зв’язку та значення FSoE watchdog. Це Таблиця 19 ETG.5100 S (D) V1.2.0.

КомандаSafeData[0]SafeData[1]CRC_0SafeData[2]SafeData[3]CRC_1Conn_Id
Parameter
Октет 0
довжина параметрів зв'язку, молодший
Октет 1 — = 2
довжина параметрів зв'язку, старший
Октет 2 — = 0
CRC_0_Lo
Октет 3
CRC_0_Hi
Октет 4
watchdog, молодший
Октет 5 — у мс
watchdog, старший
Октет 6 — у мс
CRC_1_Lo
Октет 7
CRC_1_Hi
Октет 8
Connection Id, молодший
Октет 9
Connection Id, старший
Октет 10

Ключові моменти:

  • Command (октет 0) — Parameter.
  • SafeData[0..1] (октети 1 і 2) переносять 16-бітну довжину параметрів зв’язку в октетах. Вона завжди дорівнює 2 (little-endian: 0x02, 0x00), оскільки єдиним параметром зв’язку є 16-бітне значення watchdog.
  • SafeData[2..3] (октети 5 і 6) переносять 16-бітне значення FSoE watchdog у мілісекундах (little-endian).
  • Conn_Id (октети 9 і 10) переносить Connection ID — як і в стані Connection, тепер він заповнений у кожному Safety PDU.
  • CRC_0 і CRC_1 передаються як 16-бітні little-endian значення. Успадкування CRC активне через усі цикли стану Parameter.

Перший Safety Slave PDU (FSoE Slave → Master, підтвердження)

Slave підтверджує перший Parameter PDU, відлунюючи ті самі safety-дані. Це Таблиця 20 ETG.5100 S (D) V1.2.0.

КомандаSafeData[0]SafeData[1]CRC_0SafeData[2]SafeData[3]CRC_1Conn_Id
Parameter
Октет 0
довжина параметрів зв'язку, молодший
Октет 1 — = 2
довжина параметрів зв'язку, старший
Октет 2 — = 0
CRC_0_Lo
Октет 3
CRC_0_Hi
Октет 4
watchdog, молодший
Октет 5 — у мс
watchdog, старший
Октет 6 — у мс
CRC_1_Lo
Октет 7
CRC_1_Hi
Октет 8
Connection Id, молодший
Октет 9
Connection Id, старший
Октет 10

Другий цикл — параметри застосунку

FSoE Master надсилає другий Safety Master PDU, щойно коректно отримав перший Safety Slave PDU.

Другий Safety Master PDU (FSoE Master → Slave)

Master надсилає цей PDU для передачі довжини параметрів застосунку та самих байтів параметрів застосунку. Це Таблиця 21 ETG.5100 S (D) V1.2.0.

КомандаSafeData[0]SafeData[1]CRC_0SafeData[2]SafeData[3]CRC_1Conn_Id
Parameter
Октет 0
довжина параметрів застосунку, молодший
Октет 1 — = 2
довжина параметрів застосунку, старший
Октет 2 — = 0
CRC_0_Lo
Октет 3
CRC_0_Hi
Октет 4
байт 1 параметра застосунку
Октет 5
байт 2 параметра застосунку
Октет 6
CRC_1_Lo
Октет 7
CRC_1_Hi
Октет 8
Connection Id, молодший
Октет 9
Connection Id, старший
Октет 10

Ключові моменти:

  • SafeData[0..1] (октети 1 і 2) переносять 16-бітну довжину параметрів застосунку в октетах (little-endian). У цьому прикладі вона дорівнює 2.
  • SafeData[2..3] (октети 5 і 6) переносять байти параметрів застосунку. У цьому прикладі їх рівно 2, що заповнюють обидві доступні позиції.
  • Якби параметр застосунку був довшим за доступні октети SafeData в одному циклі, передача продовжилася б у додаткових циклах, причому решта байтів розташовувалася б у тих самих позиціях SafeData (починаючи з SafeData[0] наступного циклу, після будь-якого заголовка, що залишився). Невикористані октети в останньому циклі встановлюються в 0.

Другий Safety Slave PDU (FSoE Slave → Master, підтвердження)

Slave підтверджує другий Parameter PDU, відлунюючи ті самі safety-дані. Це Таблиця 22 ETG.5100 S (D) V1.2.0.

КомандаSafeData[0]SafeData[1]CRC_0SafeData[2]SafeData[3]CRC_1Conn_Id
Parameter
Октет 0
довжина параметрів застосунку, молодший
Октет 1 — = 2
довжина параметрів застосунку, старший
Октет 2 — = 0
CRC_0_Lo
Октет 3
CRC_0_Hi
Октет 4
байт 1 параметра застосунку
Октет 5
байт 2 параметра застосунку
Октет 6
CRC_1_Lo
Октет 7
CRC_1_Hi
Октет 8
Connection Id, молодший
Октет 9
Connection Id, старший
Октет 10

Усе разом: обмін у стані Parameter

Стан Parameter — це багатоциклове рукостискання з відлунням. Кожен цикл відповідає одному шаблону:

  1. Master → Slave: Safety Master PDU з Command = Parameter, що переносить наступний фрагмент корисного навантаження параметрів у полях SafeData.
  2. Slave → Master: Safety Slave PDU з Command = Parameter, що відлунює ті самі safety-дані.

Master надсилає наступний цикл лише після того, як коректно отримав підтвердження Slave від попереднього циклу. Передача триває, доки не буде надіслано всі параметри зв’язку та застосунку. Щойно Master передав повний набір параметрів і отримав фінальне підтвердження, він залишає стан Parameter, надсилаючи Safety PDU з командою Data — це переводить з’єднання в циклічний обмін даними. Якщо будь-який вузол виявляє помилку зв’язку FSoE під час обміну, обидва повертаються до стану Reset.

Чому успадкування CRC важливе в стані Parameter?

Оскільки передача параметрів охоплює кілька циклів FSoE, успадкування CRC — це те, що пов’язує окремі PDU в єдину пов’язану з безпекою передачу. CRC кожного циклу обчислюється не лише над байтами поточного PDU, а й над CRC попереднього PDU — утворюючи ланцюг, який приймач може перевірити наскрізь. Якщо будь-який PDU у послідовності пошкоджено, втрачено або переставлено, ланцюг CRC розривається і приймач виявляє помилку. Саме тому специфікація зазначає, що «успадкування CRC забезпечує безпеку та цілісність передачі параметрів». Деталі алгоритму див. у FSoE: How does CRC inheritance work?.

Підсумок

У стані Parameter FSoE Safety PDU переносить корисне навантаження параметрів змінної довжини з трьома 16-бітними полями заголовка: довжиною параметрів зв’язку (завжди 2), значенням FSoE watchdog у мілісекундах і довжиною параметрів застосунку. Далі йдуть байти параметрів застосунку. Оскільки корисне навантаження може перевищувати фіксовану довжину safety-даних PDU, передача може охоплювати кілька циклів FSoE, причому невикористані октети в останньому циклі встановлюються в 0. Slave підтверджує кожен цикл, відлунюючи safety-дані. Успадкування CRC через усі цикли забезпечує безпеку та цілісність повної передачі параметрів. З’єднання залишає стан Parameter, коли Master надсилає команду Data, входячи в циклічний обмін даними.

Посилання на стандарт

  • ETG.5100 S (D) V1.2.0, §8.2.2.5 Parameter state, Таблиці 18–22.

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

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

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

CRC

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


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