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

Стан Connection іде за станом Session у процедурі встановлення з’єднання FSoE. Його призначення — передати 16-бітний Connection ID — унікальний ідентифікатор, який генерує safety-конфігуратор FSoE Master — разом із 16-бітною FSoE Slave Address від Master до Slave. Slave підтверджує, відлунюючи ті самі safety-дані у зворотному напрямку. Від цього моменту Connection ID переноситься у полі Conn_Id кожного наступного Safety PDU, тож обидва вузли можуть перевіряти, чи телеграма насправді адресована їм.

Ця стаття детально розбирає два PDU стану Connection, визначені в ETG.5100 S (D) V1.2.0, §8.2.2.4, на канонічному прикладі специфікації з 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.

Примітка — релевантні байти даних — це Connection ID і FSoE Slave Address. У кожному PDU стану Connection чотири октети SafeData переносять два 16-бітних значення:

  • SafeData[0..1] (октети 1 і 2) — Connection ID (молодший октет, старший октет). Це унікальне 16-бітне значення, згенероване safety-конфігуратором; 0x0000 не дозволено, тож у одній системі зв’язку можуть співіснувати до 65 535 з’єднань FSoE.
  • SafeData[2..3] (октети 5 і 6) — FSoE Slave Address (молодший октет, старший октет). Це унікальна адреса, задана на відповідному FSoE Slave-пристрої.

На відміну від станів Reset і Session, поле Conn_Id (октети 9 і 10) більше не дорівнює 0 — тепер воно переносить фактичний Connection ID, як і в кожному наступному Safety PDU після встановлення з’єднання. Поля CRC все одно передаються і мають збігатися; вони обчислюються від початкового стану reset, успадкованого від попереднього стану Reset (див. FSoE: How does CRC inheritance work? і How to compute the CRC checksum for FSoE PDUs?).

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

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

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

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

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

Перш ніж розглянути повне розташування PDU, варто зосередитися саме на частині safety-даних. Таблиця 15 ETG.5100 S (D) V1.2.0 визначає, які байти передаються:

Октет SafetyDataОпис
0молодший октет (біти 0–7) Connection ID
1старший октет (біти 8–15) Connection ID
2молодший октет (біти 0–7) FSoE Slave Address
3старший октет (біти 8–15) FSoE Slave Address

Connection ID і FSoE Slave Address кожен мають ширину 16 біт, тож разом вони займають рівно 4 октети SafeData. Це має важливий наслідок для кількості циклів FSoE, необхідних для передачі:

Довжина safety-данихЦикли на передачу Connection ID + Slave AddressПричина
4 октети1 циклУсі 4 октети вміщуються в один PDU.
2 октети2 циклиЛише 2 октети SafeData за цикл.
1 октет4 циклиЛише 1 октет SafeData за цикл.

Саме тому приклади специфікації використовують 4 октети safety-даних: за 4 октетів увесь Connection ID і FSoE Slave Address передаються за один цикл FSoE.

Master Connection PDU (FSoE Master → Slave)

Master надсилає цей PDU для передачі Connection ID і FSoE Slave Address. Приклад нижче — Таблиця 16 ETG.5100 S (D) V1.2.0 для 4 октетів safety-даних.

КомандаSafeData[0]SafeData[1]CRC_0SafeData[2]SafeData[3]CRC_1Conn_Id
Connection
Октет 0
Connection Id, молодший октет
Октет 1
Connection Id, старший октет
Октет 2
CRC_0_Lo
Октет 3
CRC_0_Hi
Октет 4
FSoE Slave Address, молодший октет
Октет 5
FSoE Slave Address, старший октет
Октет 6
CRC_1_Lo
Октет 7
CRC_1_Hi
Октет 8
Connection Id, молодший октет
Октет 9
Connection Id, старший октет
Октет 10

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

  • Command (октет 0) — Connection.
  • SafeData[0..1] (октети 1 і 2) переносять 16-бітний Connection ID (little-endian). Це те саме значення, що тепер також фігурує в полі Conn_Id.
  • SafeData[2..3] (октети 5 і 6) переносять 16-бітну FSoE Slave Address (little-endian). Це унікальна адреса, налаштована на Slave-пристрої.
  • Conn_Id (октети 9 і 10) переносить Connection ID — він більше не дорівнює 0, як у станах Reset і Session. Починаючи з цього PDU, поле Conn_Id заповнене в кожному Safety PDU.
  • CRC_0 і CRC_1 передаються як 16-бітні little-endian значення, обчислені від початкового стану reset, успадкованого від попереднього стану Reset.

Slave Connection PDU (FSoE Slave → Master, підтвердження)

Slave підтверджує команду Connection, надсилаючи назад ті самі safety-дані — тобто відлунюючи Connection ID і FSoE Slave Address, які надіслав Master. Це Таблиця 17 ETG.5100 S (D) V1.2.0.

КомандаSafeData[0]SafeData[1]CRC_0SafeData[2]SafeData[3]CRC_1Conn_Id
Connection
Октет 0
Connection Id, молодший октет
Октет 1
Connection Id, старший октет
Октет 2
CRC_0_Lo
Октет 3
CRC_0_Hi
Октет 4
FSoE Slave Address, молодший октет
Октет 5
FSoE Slave Address, старший октет
Октет 6
CRC_1_Lo
Октет 7
CRC_1_Hi
Октет 8
Connection Id, молодший октет
Октет 9
Connection Id, старший октет
Октет 10

На відміну від стану Session, де Slave відповідає власним незалежно згенерованим Slave Session ID, у стані Connection Slave відлунює Connection ID і FSoE Slave Address, які надіслав Master. Це спосіб Slave підтвердити, що він отримав і прийняв інформацію про адресування.

Чому передаються і Connection ID, і FSoE Slave Address?

Ці два значення виконують взаємодоповнювальні ролі в адресації:

  • FSoE Slave Address є унікальною в системі зв’язку і задається на відповідному FSoE Slave-пристрої. Передаючи її разом із Connection ID, Slave може перевірити, чи до нього фактично звертаються — тож недійсна адресація буде виявлена.
  • Connection ID також є унікальним у системі зв’язку (генерується safety-конфігуратором FSoE Master). Завдяки унікальності він надсилається в полі Conn_Id кожного наступного Safety PDU, тож і FSoE Master, і FSoE Slave можуть виявити, чи звертаються до них у телеграмі.

Поєднання обох значень дає змогу Slave перевірити під час встановлення з’єднання, що він є цільовим вузлом (через FSoE Slave Address), а потім під час циклічної роботи обидва вузли можуть перевіряти кожну телеграму (через Connection ID у полі Conn_Id).

Скільки з’єднань FSoE можливе?

Connection ID — це 16-бітне значення, що номінально дозволяє 65 536 різних значень. Однак Connection ID = 0x0000 не дозволено, тож максимальна кількість з’єднань FSoE у системі зв’язку становить 65 535. Якщо в системі зв’язку наявні кілька FSoE Master, користувач має переконатися, що Connection ID, які використовують усі Master, є унікальними в межах усієї системи.

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

Стан Connection — це просте рукостискання з відлунням:

  1. Master → Slave: Safety Master PDU з Command = Connection, що переносить Connection ID у SafeData[0..1], FSoE Slave Address у SafeData[2..3] і Connection ID у полі Conn_Id.
  2. Slave → Master: Safety Slave PDU з Command = Connection, що відлунює ті самі Connection ID і FSoE Slave Address.

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

Підсумок

У стані Connection FSoE Safety PDU переносить два 16-бітних значення в полях SafeData: Connection ID (унікальний системний ідентифікатор, згенерований safety-конфігуратором) і FSoE Slave Address (унікальна адреса, задана на Slave-пристрої). Slave підтверджує, відлунюючи ці дані назад. На відміну від станів Reset і Session, поле Conn_Id тепер заповнене фактичним Connection ID — і залишається заповненим у кожному наступному Safety PDU, даючи змогу обом вузлам перевіряти, що кожна телеграма адресована їм. Оскільки Connection ID 0x0000 не дозволено, у одній системі зв’язку можуть співіснувати до 65 535 з’єднань FSoE.

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

  • ETG.5100 S (D) V1.2.0, §8.2.2.4 Connection state, Таблиці 15–17.

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

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

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

CRC

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


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