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

Состояние Connection следует за состоянием Session в процедуре установки соединения FSoE. Его задача — передать 16-битный Connection ID — уникальный идентификатор, генерируемый конфигуратором безопасности FSoE Master — вместе с 16-битным адресом FSoE Slave от Master к Slave. Slave подтверждает приём, возвращая те же безопасные данные обратно. С этого момента Connection ID передаётся в поле Conn_Id каждого последующего Safety PDU, чтобы обе стороны могли проверять, действительно ли телеграмма адресована им.

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

Примечание — количество байтов безопасных данных фиксировано для каждого направления. Каждое соединение FSoE имеет фиксированную длину безопасных данных (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. В каждом PDU состояния Connection четыре октета SafeData несут два 16-битных значения:

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

В отличие от состояний Reset и Session, поле Conn_Id (октеты 9 и 10) больше не равно 0 — теперь оно несёт фактический Connection ID, как и во всех последующих Safety PDU после установки соединения. Поля CRC по-прежнему передаются и должны проходить проверку; они вычисляются от сброшенного начального состояния, унаследованного от предшествующего состояния 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 выходит из ConnectionMaster передал полный Connection ID и адрес FSoE Slave, получил соответствующее подтверждение от Slave, затем отправляет Safety PDU с командой Data (переход к циклическому обмену данными).
Slave выходит из ConnectionSlave получает Safety PDU с командой Data от Master.

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

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

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

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

Connection ID и адрес FSoE Slave имеют по 16 бит, поэтому вместе они занимают ровно 4 октета SafeData. Это имеет важное следствие для количества циклов FSoE:

Длина безопасных данныхЦиклы для передачи Connection ID + адреса SlaveПричина
4 октета1 циклВсе 4 октета помещаются в один PDU.
2 октета2 циклаТолько 2 октета SafeData за цикл.
1 октет4 циклаТолько 1 октет SafeData за цикл.

Именно поэтому примеры в спецификации используют 4 октета безопасных данных: при 4 октетах весь Connection ID и адрес FSoE Slave передаются за один цикл FSoE.

Master Connection PDU (FSoE Master → Slave)

Master отправляет этот PDU для передачи Connection ID и адреса FSoE Slave. Пример ниже — Таблица 16 спецификации ETG.5100 S (D) V1.2.0 для 4 октетов безопасных данных.

CommandSafeData[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, младший октет
Октет 5
Адрес FSoE Slave, старший октет
Октет 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 (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.

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

Slave подтверждает команду Connection, отправляя обратно те же безопасные данные — то есть возвращает Connection ID и адрес FSoE Slave, переданные Master. Это Таблица 17 спецификации ETG.5100 S (D) V1.2.0.

CommandSafeData[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, младший октет
Октет 5
Адрес FSoE Slave, старший октет
Октет 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, переданные Master. Так Slave подтверждает, что получил и принял информацию об адресации.

Зачем передаются и Connection ID, и адрес FSoE Slave?

Эти два значения выполняют взаимодополняющие роли в адресации:

  • Адрес FSoE Slave уникален в системе связи и задаётся на соответствующем устройстве FSoE Slave. Передавая его вместе с Connection ID, Slave может проверить, действительно ли он адресован — чтобы некорректная адресация была обнаружена.
  • Connection ID также уникален в системе связи (генерируется конфигуратором безопасности FSoE Master). Благодаря уникальности он передаётся в поле Conn_Id каждого последующего Safety PDU, чтобы и FSoE Master, и FSoE Slave могли определить, адресована ли им телеграмма.

Комбинация двух значений позволяет Slave проверить во время установки соединения, что он является целевым получателем (через адрес FSoE Slave), а затем во время циклической работы оба узла могут проверять каждую телеграмму (через Connection ID в поле Conn_Id).

Сколько соединений FSoE возможно?

Connection ID — 16-битное значение, что номинально допускает 65 536 различных значений. Однако Connection ID = 0x0000 не разрешён, поэтому максимальное число соединений FSoE в системе связи составляет 65 535. Если в системе связи присутствует несколько FSoE Master, пользователь должен обеспечить уникальность Connection IDs, используемых всеми Master, в масштабах всей системы.

Сведение воедино: обмен в состоянии Connection

Состояние Connection — простое эхо-рукопожатие:

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

Как только Master передал полный Connection ID и адрес FSoE Slave и получил подтверждение от Slave, он покидает состояние Connection, отправляя Safety PDU с командой Data — это переводит соединение в циклический обмен данными. Если любая из сторон обнаруживает ошибку связи FSoE во время обмена, обе возвращаются в состояние Reset.

Итоги

В состоянии Connection FSoE Safety PDU несёт два 16-битных значения в полях SafeData: Connection ID (уникальный системный идентификатор, генерируемый конфигуратором безопасности) и адрес FSoE Slave (уникальный адрес, заданный на устройстве 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

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


Check out similar posts by category: FSoE EtherCAT Safety