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

Состояние Parameter следует за состоянием Connection в процедуре установки соединения FSoE. Его задача — передать относящиеся к безопасности параметры связи (значение watchdog FSoE) и специфичные для устройства безопасные параметры приложения от Master к Slave. Slave подтверждает каждый PDU Parameter, возвращая безопасные данные обратно. Поскольку параметры приложения могут иметь произвольную длину, передача может занимать несколько циклов FSoE. Наследование CRC обеспечивает безопасность и согласованность передачи параметров на всех циклах (см. FSoE: How does CRC inheritance work?).

В этой статье разобраны PDU состояния Parameter, определённые в ETG.5100 S (D) V1.2.0, §8.2.2.5, на каноническом примере спецификации — 4 октета безопасных данных и 2 октета безопасного параметра приложения, что требует двух циклов FSoE.

Примечание — количество байтов безопасных данных фиксировано для каждого направления. Каждое соединение FSoE имеет фиксированную длину безопасных данных (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 выходит из ParameterMaster передал полный набор параметров связи и приложения, получил соответствующие подтверждения от Slave, затем отправляет Safety PDU с командой Data (переход к циклическому обмену данными).
Slave выходит из ParameterSlave получает Safety PDU с командой Data от Master.

Оба узла также немедленно выходят из состояния Parameter при обнаружении ошибки связи FSoE — в этом случае они возвращаются в состояние Reset.

Безопасные данные, передаваемые в состоянии Parameter

Безопасные данные в состоянии Parameter структурированы иначе, чем в предыдущих состояниях. Вместо фиксированного набора полей они несут полезную нагрузку переменной длины с заголовком из трёх 16-битных полей. Таблица 18 спецификации ETG.5100 S (D) V1.2.0 определяет структуру:

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

Первые два 16-битных поля — длина параметров связи (всегда 2, т.е. только значение watchdog) и значение watchdog FSoE в миллисекундах. Следующее 16-битное поле — длина параметров приложения, за которым следуют сами байты параметров приложения. Watchdog FSoE и безопасные параметры приложения настраиваются через конфигуратор безопасности FSoE Master.

Сколько циклов FSoE требуется?

Поскольку параметры приложения могут иметь произвольную длину, общее число циклов FSoE зависит как от длины параметров приложения, так и от фиксированной длины безопасных данных Safety PDU:

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

где 6 учитывает три 16-битных поля заголовка (длина параметров связи, watchdog, длина параметров приложения). Если в последнем цикле FSoE требуются не все октеты безопасных данных, неиспользуемые октеты передаются как 0.

Для примера спецификации (4 октета безопасных данных, 2 октета параметра приложения) общая полезная нагрузка составляет 6 + 2 = 8 октетов, что помещается в ⌈8/4⌉ = 2 цикла FSoE. Первый цикл несёт длину параметров связи, watchdog и первые два октета — длину параметров приложения, но в этом примере длина параметров приложения (2) передаётся во втором цикле вместе с двумя байтами параметра приложения, как показано ниже.

Первый цикл — Параметры связи

Первый Safety Master PDU (FSoE Master → Slave)

Master отправляет этот PDU для передачи длины параметров связи и значения watchdog FSoE. Это Таблица 19 спецификации ETG.5100 S (D) V1.2.0.

CommandSafeData[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-битное значение watchdog FSoE в миллисекундах (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 подтверждает первый PDU Parameter, возвращая те же безопасные данные. Это Таблица 20 спецификации ETG.5100 S (D) V1.2.0.

CommandSafeData[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.

CommandSafeData[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 подтверждает второй PDU Parameter, возвращая те же безопасные данные. Это Таблица 22 спецификации ETG.5100 S (D) V1.2.0.

CommandSafeData[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, возвращающий те же безопасные данные.

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), значение watchdog FSoE в миллисекундах и длина параметров приложения. За ними следуют байты параметров приложения. Поскольку полезная нагрузка может превышать фиксированную длину безопасных данных PDU, передача может занимать несколько циклов FSoE, причём неиспользуемые октеты в последнем цикле устанавливаются в 0. Slave подтверждает каждый цикл, возвращая безопасные данные. Наследование CRC на всех циклах обеспечивает безопасность и согласованность полной передачи параметров. Соединение покидает состояние Parameter, когда Master отправляет команду Data, переходя к циклическому обмену данными.

Ссылки на стандарт

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

Связанные статьи

Обзор и основы

Структуры PDU по состояниям

CRC

Коды ошибок и формат данных


Check out similar posts by category: FSoE EtherCAT Safety