El estado Data es el estado final del establecimiento de la conexión FSoE y aquel en el que la conexión pasa el resto de su vida útil. Sigue al estado Parameter. A diferencia de los estados anteriores, donde el número de ciclos FSoE estaba fijado por el protocolo, el estado Data se ejecuta de forma continua — los ciclos FSoE se transfieren hasta que se produce un error de comunicación o un nodo FSoE se detiene localmente. En cada ciclo, el FSoE Master envía SafeOutputs al FSoE Slave, y el FSoE Slave acusa recibo enviando SafeInputs de vuelta al Master.
El estado Data usa dos comandos:
- ProcessData — se usa cuando los datos de seguridad son válidos.
- FailSafeData — se usa cuando un nodo detecta localmente que sus datos de seguridad no son válidos o debe conmutarse al estado seguro.
Este artículo recorre los cuatro PDUs del estado Data definidos en ETG.5100 S (D) V1.2.0, §8.2.2.6, usando el ejemplo canónico de la especificación de 4 octetos de datos de seguridad.
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.
¿Cuándo se entra y se sale del estado Data?
El estado Data se entra cuando el Master sale del estado Parameter enviando un Safety Master PDU con el comando ProcessData (o FailSafeData). Una vez en el estado Data, la conexión permanece allí indefinidamente:
| Dirección | Condición |
|---|---|
| El Master permanece en Data | Envía PDUs ProcessData o FailSafeData cíclicamente hasta que se produce un error de comunicación o se detiene localmente. |
| El Slave permanece en Data | Acusa recibo de cada PDU del Master y envía ProcessData o FailSafeData de vuelta hasta que se produce un error de comunicación o se detiene localmente. |
Ambos nodos salen del estado Data inmediatamente si detectan un error de comunicación FSoE — en ese caso retroceden al estado Reset.
Comando ProcessData (datos válidos)
Safety Master PDU (FSoE Master → Slave)
El Master envía este PDU para transferir SafeOutputs al Slave. Esto es la Tabla 23 de ETG.5100 S (D) V1.2.0 para 4 octetos de datos de seguridad.
| Command | SafeData[0] | SafeData[1] | CRC_0 | SafeData[2] | SafeData[3] | CRC_1 | Conn_Id | |||
|---|---|---|---|---|---|---|---|---|---|---|
| ProcessData Octeto 0 | SafeOutputs, byte 1 Octeto 1 | SafeOutputs, byte 2 Octeto 2 | CRC_0_Lo Octeto 3 | CRC_0_Hi Octeto 4 | SafeOutputs, byte 3 Octeto 5 | SafeOutputs, byte 4 Octeto 6 | CRC_1_Lo Octeto 7 | CRC_1_Hi Octeto 8 | Connection Id, lo Octeto 9 | Connection Id, hi Octeto 10 |
Puntos clave:
- Command (octeto 0) es
ProcessData. - SafeData[0..3] transportan los SafeOutputs — los datos de salida relacionados con la seguridad del Master al Slave. Los bytes se colocan en orden: SafeData[0] es el 1er octeto, SafeData[1] es el 2º, y así sucesivamente.
- Conn_Id (octetos 9 y 10) transporta el Connection ID, igual que en los estados Connection y Parameter.
- CRC_0 y CRC_1 se transmiten como valores little-endian de 16 bits. La herencia de CRC está activa en todos los ciclos del estado Data, encadenando cada PDU con el anterior.
Safety Slave PDU (FSoE Slave → Master)
El Slave acusa recibo del PDU ProcessData del Master y envía SafeInputs de vuelta al Master. Esto es la Tabla 24 de ETG.5100 S (D) V1.2.0.
| Command | SafeData[0] | SafeData[1] | CRC_0 | SafeData[2] | SafeData[3] | CRC_1 | Conn_Id | |||
|---|---|---|---|---|---|---|---|---|---|---|
| ProcessData Octeto 0 | SafeInputs, byte 1 Octeto 1 | SafeInputs, byte 2 Octeto 2 | CRC_0_Lo Octeto 3 | CRC_0_Hi Octeto 4 | SafeInputs, byte 3 Octeto 5 | SafeInputs, byte 4 Octeto 6 | CRC_1_Lo Octeto 7 | CRC_1_Hi Octeto 8 | Connection Id, lo Octeto 9 | Connection Id, hi Octeto 10 |
Nótese la asimetría con los estados anteriores: en el estado Data, el Slave no repite los datos de seguridad del Master. En su lugar, envía sus propios SafeInputs — los datos de entrada relacionados con la seguridad del Slave al Master. El Master envía SafeOutputs, el Slave responde con SafeInputs; cada dirección transporta su propio payload independiente.
Comando FailSafeData (estado seguro)
Si el FSoE Master detecta localmente que los SafeOutputs no son válidos o deben conmutarse al estado seguro, envía el comando FailSafeData en lugar de ProcessData. Lo mismo aplica al FSoE Slave: si detecta localmente que los SafeInputs no son válidos o deben conmutarse al estado seguro, envía FailSafeData en lugar de ProcessData.
Safety Master PDU con FailSafeData (FSoE Master → Slave)
Esto es la Tabla 25 de ETG.5100 S (D) V1.2.0 para 4 octetos de datos de seguridad.
| Command | SafeData[0] | SafeData[1] | CRC_0 | SafeData[2] | SafeData[3] | CRC_1 | Conn_Id | |||
|---|---|---|---|---|---|---|---|---|---|---|
| FailSafeData Octeto 0 | 0 Octeto 1 — datos fail-safe | 0 Octeto 2 — datos fail-safe | CRC_0_Lo Octeto 3 | CRC_0_Hi Octeto 4 | 0 Octeto 5 — datos fail-safe | 0 Octeto 6 — datos fail-safe | CRC_1_Lo Octeto 7 | CRC_1_Hi Octeto 8 | Connection Id, lo Octeto 9 | Connection Id, hi Octeto 10 |
Puntos clave:
- Command (octeto 0) es
FailSafeData. - Todos los octetos de SafeData se establecen a 0 — los datos fail-safe no transportan ningún payload útil; señalan que el emisor ha conmutado sus salidas al estado seguro.
- Los campos Conn_Id y CRC se comportan exactamente igual que en el PDU ProcessData. El CRC sigue calculándose y debe seguir verificándose — el estado fail-safe es un estado operativo definido, no un error de comunicación.
Safety Slave PDU con FailSafeData (FSoE Slave → Master)
Esto es la Tabla 26 de ETG.5100 S (D) V1.2.0 para 4 octetos de datos de seguridad.
| Command | SafeData[0] | SafeData[1] | CRC_0 | SafeData[2] | SafeData[3] | CRC_1 | Conn_Id | |||
|---|---|---|---|---|---|---|---|---|---|---|
| FailSafeData Octeto 0 | 0 Octeto 1 — datos fail-safe | 0 Octeto 2 — datos fail-safe | CRC_0_Lo Octeto 3 | CRC_0_Hi Octeto 4 | 0 Octeto 5 — datos fail-safe | 0 Octeto 6 — datos fail-safe | CRC_1_Lo Octeto 7 | CRC_1_Hi Octeto 8 | Connection Id, lo Octeto 9 | Connection Id, hi Octeto 10 |
ProcessData y FailSafeData se eligen de forma independiente
Una propiedad clave del estado Data es que la elección entre ProcessData y FailSafeData es independiente en cada dirección — depende solo de las circunstancias locales, no del comando recibido del peer:
- El Master envía ProcessData si sus SafeOutputs son válidos, o FailSafeData si no lo son.
- El Slave envía ProcessData si sus SafeInputs son válidos, o FailSafeData si no lo son.
Esto significa que es totalmente normal que una dirección transporte ProcessData mientras la otra transporta FailSafeData en el mismo ciclo. Por ejemplo, si los SafeOutputs del Master son válidos pero los SafeInputs del Slave no lo son, el Master envía ProcessData y el Slave responde con FailSafeData. Ningún nodo necesita esperar al otro para cambiar de comando; la decisión es puramente local.
Todo junto: el intercambio del estado Data
El estado Data es un intercambio cíclico continuo:
- Master → Slave: Safety Master PDU con
Command = ProcessData(transportando SafeOutputs) oCommand = FailSafeData(todos los SafeData = 0). - Slave → Master: Safety Slave PDU con
Command = ProcessData(transportando SafeInputs) oCommand = FailSafeData(todos los SafeData = 0).
Este ciclo se repite indefinidamente. El comando en cada dirección se elige de forma independiente según la validez local de los datos de seguridad. Si cualquiera de los dos nodos detecta un error de comunicación FSoE (consulta FSoE: List of all communication error codes), ambos nodos retroceden al estado Reset y el establecimiento de la conexión recomienza.
Resumen
En el estado Data, el Safety PDU de FSoE finalmente transporta datos de seguridad del usuario: el Master envía SafeOutputs y el Slave responde con SafeInputs, cada uno usando el comando ProcessData. Si los datos de seguridad de cualquiera de los nodos no son válidos o deben conmutarse al estado seguro, envía el comando FailSafeData en su lugar, con todos los octetos de SafeData establecidos a 0. La elección entre los dos comandos es independiente en cada dirección y depende solo de las circunstancias locales. El estado Data se ejecuta continuamente hasta que se produce un error de comunicación (desencadenando un retroceso a Reset) o un nodo se detiene localmente. La herencia de CRC encadena cada PDU con el anterior durante todo el estado Data, de modo que cualquier corrupción, pérdida o reorden se detecta inmediatamente.
Referencias
- ETG.5100 S (D) V1.2.0, §8.2.2.6 Data state, Tablas 23–26.
Artículos relacionados
Visión general y conceptos básicos
- What does the FSoE abbreviation actually mean? — qué significa el acrónimo FSoE
- FSoE frame structure explained by examples — estructura general del Safety PDU
- All the states of the FSoE state machine — los cinco estados FSoE y sus transiciones
- FSoE: Safety PDU command table — la lista completa de comandos FSoE
Estructuras PDU por estado
- FSoE Reset State PDU: Master and Slave Structure — estructura del PDU y códigos de error del estado Reset
- FSoE Session PDU: Master and Slave Structure — estructura del PDU del estado Session
- FSoE Connection PDU: Master and Slave Structure — estructura del PDU del estado Connection
- FSoE Parameter PDU: Master and Slave Structure — estructura del PDU del estado Parameter
- FSoE Reset PDU: Master and Slave Structure — diseños de bytes para todas las longitudes de datos de seguridad
CRC
- FSoE CRC: Which polynomial does it use? — el polinomio de 17 bits detrás del CRC de FSoE
- How are the FSoE CRC tables constructed? — cómo se generan las tablas de lookup del CRC
- FSoE: How does CRC inheritance work? — cómo la cadena de CRC enlaza PDUs consecutivos
- How to compute the CRC checksum for FSoE PDUs? — algoritmo de cálculo del CRC byte a byte
Códigos de error y formato de datos
- FSoE: List of all communication error codes — todos los códigos de error de comunicación FSoE
- FSoE: Is data transmitted little-endian or big-endian? — orden de bytes de los campos multibyte