Состояние 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 выходит из Connection | Master передал полный Connection ID и адрес FSoE Slave, получил соответствующее подтверждение от Slave, затем отправляет Safety PDU с командой Data (переход к циклическому обмену данными). |
| Slave выходит из Connection | Slave получает 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 октетов безопасных данных.
| Command | SafeData[0] | SafeData[1] | CRC_0 | SafeData[2] | SafeData[3] | CRC_1 | Conn_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.
| Command | SafeData[0] | SafeData[1] | CRC_0 | SafeData[2] | SafeData[3] | CRC_1 | Conn_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 — простое эхо-рукопожатие:
- Master → Slave: Safety Master PDU с
Command = Connection, несущий Connection ID вSafeData[0..1], адрес FSoE Slave вSafeData[2..3]и Connection ID в полеConn_Id. - 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.
Связанные статьи
Обзор и основы
- What does the FSoE abbreviation actually mean? — что означает аббревиатура FSoE
- FSoE frame structure explained by examples — общая структура Safety PDU
- All the states of the FSoE state machine — пять состояний FSoE и их переходы
- FSoE: Safety PDU command table — полный список команд FSoE
Структуры PDU по состояниям
- FSoE Reset State PDU: Master and Slave Structure — структура PDU и коды ошибок для состояния Reset
- FSoE Session PDU: Master and Slave Structure — структура PDU для состояния Session
- FSoE Parameter PDU: Master and Slave Structure — структура PDU для состояния Parameter
- FSoE Data PDU: Master and Slave Structure — структура PDU для состояния Data
- FSoE Reset PDU: Master and Slave Structure — байтовые структуры для всех длин безопасных данных
CRC
- FSoE CRC: Which polynomial does it use? — 17-битный полином, лежащий в основе CRC FSoE
- How are the FSoE CRC tables constructed? — как генерируются таблицы CRC
- FSoE: How does CRC inheritance work? — как цепочка CRC связывает последовательные PDU
- How to compute the CRC checksum for FSoE PDUs? — алгоритм побайтового вычисления CRC
Коды ошибок и формат данных
- FSoE: List of all communication error codes — все коды ошибок связи FSoE
- FSoE: Is data transmitted little-endian or big-endian? — порядок байтов многобайтовых полей