FSoE: Estructura del PDU del estado Reset de Master y Slave

El estado Reset es el punto de entrada de toda conexión FSoE (Fail Safe over EtherCAT). La conexión entra en él tras el encendido, tras un reinicio (reset connection) o cuando se ha detectado un error de comunicación FSoE. Mientras la conexión está en este estado, no se intercambian datos de seguridad del usuario — los Safety PDUs se reutilizan para transportar el comando Reset junto con un código de error de un solo byte que indica al peer por qué se reinició la conexión.

Este artículo recorre los tres PDUs del estado Reset definidos en ETG.5100 S (D) V1.2.0, §8.2.2.2, usando el ejemplo canónico de la especificación de 4 octetos de datos de seguridad. Para los diseños completos de 2/4/6/8 octetos, consulta FSoE Reset PDU: Master and Slave Structure.

Nota — el número de bytes de datos de seguridad es fijo por dirección. Cada conexión FSoE tiene una longitud fija de datos de seguridad (master→slave y slave→master), configurada de forma idéntica en ambos nodos. Las longitudes permitidas son 1, 2, 4, 6 u 8 octetos. La longitud real para una conexión dada depende del dispositivo FSoE Slave y debe tomarse de la documentación del Slave o de su archivo de descripción de dispositivo (ESI/EEPROM). Los ejemplos siguientes usan 4 octetos como en la especificación; el diseño de bytes para otras longitudes se muestra en FSoE Reset PDU: Master and Slave Structure.

Nota — el único byte de datos relevante es el código de error. En cada PDU del estado Reset, SafeData[0] (octeto 1) es el único byte de datos de seguridad que tiene significado:

  • 0x00 — reset intencional (encendido, reinicio / reset connection), o el acuse de recibo del Slave a un Reset del Master.
  • Distinto de cero — el código de error de comunicación FSoE que desencadenó el reset (consulta la Tabla 28 más abajo).

Todos los demás octetos de SafeData están sin usar y deben establecerse a 0. El campo Conn_Id también está sin usar (establecido a 0) — solo se verifica una vez que la conexión se ha establecido. Los campos CRC siguen transmitiéndose y deben seguir verificándose, pero se calculan a partir del estado inicial de reset porque el número de secuencia y el CRC heredado se borran al entrar en Reset (consulta FSoE: How does CRC inheritance work? y How to compute the CRC checksum for FSoE PDUs?).

¿Cuándo se entra y se sale del estado Reset?

El estado Reset reinicializa la conexión FSoE tras el encendido o tras un error de comunicación. Dos cosas se resetean al entrar:

  • el número de secuencia, y
  • el CRC del último telegrama que se usó en el cálculo del CRC (es decir, la cadena de herencia de CRC se rompe).

Las transiciones de estado son asimétricas, reflejando los roles de master/slave:

DirecciónCondición
El Master sale de ResetEnvía un Safety Master PDU con el comando Session al Slave.
El Slave sale de ResetRecibe un Safety Master PDU válido con el comando Session.

En otras palabras, el Master sale de Reset emitiendo el comando Session, y el Slave sale de Reset en cuanto acepta ese PDU Session. Mientras ambos lados siguen en Reset, intercambian Safety PDUs que transportan el comando Reset, como se muestra abajo.

PDU Reset del Master (FSoE Master → Slave)

El Master envía este PDU tras un reinicio o tras detectar un error de comunicación FSoE. El ejemplo siguiente es la Tabla 10 de ETG.5100 S (D) V1.2.0 para 4 octetos de datos de seguridad.

CommandSafeData[0]SafeData[1]CRC_0SafeData[2]SafeData[3]CRC_1Conn_Id
Reset
Octeto 0
código de error
Octeto 1 — 0 para reinicio
0
Octeto 2 — sin usar
CRC_0_Lo
Octeto 3
CRC_0_Hi
Octeto 4
0
Octeto 5 — sin usar
0
Octeto 6 — sin usar
CRC_1_Lo
Octeto 7
CRC_1_Hi
Octeto 8
0
Octeto 9 — sin usar
0
Octeto 10 — sin usar

Puntos clave:

  • Command (octeto 0) es Reset.
  • SafeData[0] (octeto 1) transporta el código de error (bits 0–7). Un valor de 0x00 significa un reinicio simple / reset connection; cualquier valor distinto de cero identifica el error de comunicación que desencadenó el reset (consulta la tabla de abajo).
  • Todos los demás octetos de SafeData están sin usar y establecidos a 0.
  • CRC_0 y CRC_1 siguen transmitiéndose como valores little-endian de 16 bits, pero como el número de secuencia y el CRC heredado se han reseteado al entrar, se calculan a partir del estado inicial de reset — no se encadenan desde la trama anterior.
  • Conn_Id está sin usar y establecido a 0 en el estado Reset. El Connection ID solo se verifica una vez que la conexión se ha establecido.

PDU Reset del Slave — acuse de recibo de un Reset del Master (FSoE Slave → Master)

Cuando el Slave recibe un comando Reset válido del Master, lo acusa recibo enviando un Safety Slave PDU con el comando Reset y todos los octetos de SafeData establecidos a 0 — incluida la posición del código de error. Esto es la Tabla 11 de ETG.5100 S (D) V1.2.0.

CommandSafeData[0]SafeData[1]CRC_0SafeData[2]SafeData[3]CRC_1Conn_Id
Reset
Octeto 0
0
Octeto 1 — acuse de recibo
0
Octeto 2
CRC_0_Lo
Octeto 3
CRC_0_Hi
Octeto 4
0
Octeto 5
0
Octeto 6
CRC_1_Lo
Octeto 7
CRC_1_Hi
Octeto 8
0
Octeto 9 — sin usar
0
Octeto 10 — sin usar

La única diferencia respecto al PDU Reset del Master es que SafeData[0] es siempre 0 — el Slave no repite un código de error al acusar recibo. Un código de error cero en esta posición es exactamente lo que el Master usa para reconocer el acuse de recibo.

PDU Reset del Slave — reset iniciado por el Slave (FSoE Slave → Master)

El Slave puede iniciar él mismo un Reset, ya sea durante un reinicio (reset connection) o en caso de un error que haya detectado localmente. En ese caso envía un Safety Slave PDU que es estructuralmente idéntico al PDU Reset del Master: el comando Reset está establecido, y SafeData[0] transporta el código de error propio del Slave (0x00 para un reinicio simple). Esto es la Tabla 12 de ETG.5100 S (D) V1.2.0.

CommandSafeData[0]SafeData[1]CRC_0SafeData[2]SafeData[3]CRC_1Conn_Id
Reset
Octeto 0
código de error
Octeto 1 — 0 para reinicio
0
Octeto 2 — sin usar
CRC_0_Lo
Octeto 3
CRC_0_Hi
Octeto 4
0
Octeto 5 — sin usar
0
Octeto 6 — sin usar
CRC_1_Lo
Octeto 7
CRC_1_Hi
Octeto 8
0
Octeto 9 — sin usar
0
Octeto 10 — sin usar

El Master acusa recibo de este Reset iniciado por el Slave no enviando otro PDU Reset, sino saliendo del estado Reset: envía un Safety Master PDU con el comando Session, que es la señal para que ambos lados salgan de Reset.

Todo junto: el intercambio del estado Reset

Los tres PDUs anteriores forman un pequeño handshake que depende de quién inició el reset:

  • Reset iniciado por el Master: El Master envía Reset (con código de error) → El Slave acusa recibo con Reset (SafeData = 0) → El Master envía Session para salir de Reset.
  • Reset iniciado por el Slave: El Slave envía Reset (con código de error) → El Master envía Session para salir de Reset (este es el acuse de recibo del Master).

En ambos casos la conexión solo sale del estado Reset cuando el Master emite el comando Session; hasta entonces, cada PDU en el medio transporta el comando Reset, el campo Conn_Id es 0, y el único payload con significado es el byte único de código de error en SafeData[0].

Códigos de error de comunicación FSoE (Tabla 28)

El código de error transportado en SafeData[0] de un PDU Reset se toma de la siguiente tabla. Un valor de 0x00 significa “sin error” — es decir, un reset local o el acuse de recibo de un comando Reset. Los códigos 111 están definidos por el estándar; 0x800xFF están reservados para errores de SafePara específicos del dispositivo.

Código de errorDescripción
0Reset local o acuse de recibo de un comando RESET
1Comando inesperado (INVALID_CMD)
2Comando desconocido (UNKNOWN_CMD)
3Connection ID inválido (INVALID_CONNID)
4Error de CRC (INVALID_CRC)
5Watchdog expirado (WD_EXPIRED)
6FSoE Slave Address inválida (INVALID_ADDRESS)
7Datos de seguridad inválidos (INVALID_DATA)
8Longitud de parámetros de comunicación inválida (INVALID_COMMPARALEN)
9Datos de parámetros de comunicación inválidos (INVALID_COMPARA)
10Longitud de parámetros de aplicación inválida (INVALID_USERPARALEN)
11Datos de parámetros de aplicación inválidos (INVALID_USERPARA)
0x80–0xFFSafePara inválido (específico del dispositivo)

Resumen

En el estado Reset, el Safety PDU de FSoE es efectivamente una envoltura de diagnóstico de un byte: el campo Command es Reset, SafeData[0] transporta el código de error (o 0 al acusar recibo), todos los demás octetos de SafeData y el campo Conn_Id son 0, y los CRC se recalculan a partir del estado inicial de reset porque tanto el número de secuencia como el CRC heredado se han borrado al entrar. La conexión sale de Reset solo cuando el Master envía el comando Session — el Slave nunca envía Session, solo acusa recibo del Reset poniendo a cero sus SafeData.

Referencias

  • ETG.5100 S (D) V1.2.0, §8.2.2.2 Reset state, Tablas 10–12 y Tabla 28.

Artículos relacionados

Visión general y conceptos básicos

Estructuras PDU por estado

CRC

Códigos de error y formato de datos


Echa un vistazo a artículos similares por categoría: FSoE EtherCAT Safety