Documento de diseño — Fase 4 y arquitectura de largo plazo · LRU Platform · 2026-04-04 · v1.0
En un avion, la informacion fluye en ciclo: mundo fisico → sensores → señales → procesamiento → señales → actuadores → mundo fisico. En cada eslabon, la misma realidad se representa de forma diferente.
Cada representacion es legitima y necesaria en su contexto. El modelo de software debe poder expresar todas simultaneamente.
Una cantidad fisica se expresa como Q = n × [U]. La unidad pertenece a una dimension (longitud, temperatura, presion). Dentro de una dimension, todas las unidades son interconvertibles.
Ejemplo altitud: 10.000 m = 32.808 ft = FL 328 (convencion) = 264.4 hPa (via ISA) = 7.81 inHg. Las tres primeras son conversion de unidad, las dos ultimas conversion de dimension.
ARINC 429 (1978) sigue en A320, 737, 787. MIL-STD-1553 (1973) sigue en F-16, F-35, ISS. El hardware cambio radicalmente pero label 203 sigue siendo altitud barometrica. Tres razones: certificacion (DO-160/178/254), interoperabilidad (Honeywell/Thales/Collins), inversion acumulada (ecosistema de 50 años).
Evolucion real: capas, no reemplazos. A380 usa AFDX + ARINC 429 respaldo. Los protocolos se apilan. En un avion moderno coexisten: discretas, ARINC 429 (100 kbps), 1553 (1 Mbps), AFDX (100 Mbps), CAN, ARINC 818, RS-422.
→ lru_analyzer_protocol_platform.html| Frontera | Capa del modelo | Mecanismo |
|---|---|---|
| F1 — In-memory | Semantica + Transduccion | Variables JS, React context. Sim1Bus opera aqui. |
| F2 — Inter-tab | Protocolo | BroadcastChannel, SharedWorker. Datos serializados. |
| F3 — Red | Protocolo | MQTT, WebSocket, STOMP, AMQP. CommsManager 8 adapters. |
| F4 — Hardware | Fisica + Transduccion | ARINC 429, BLE radio, señales electricas. |
| Aspecto | SequenceEngine | sim-catalog |
|---|---|---|
| Datos | Puertos ADC (adc1, adc2) | SensorIds (N1_L, OilP_L) |
| Valores | 0-4095 crudo | Rango real (85%, 55 psi) |
| Tiempo | Frames capturados | Perfiles declarativos |
Donde esta el escalado hoy: sim-bridges.ts (Capa 2) define mapeos con rangos reales. useSimBridgeConnector (Capa 3) escala: ((real - min) / (max - min)) * 4095. Los clips (InstrumentBridge_03) esperan ADC crudo por closure de cfg1. El escalado es un parche que deberia ser propiedad del transductor.
interface QuantityDef {
sensorId: string; // 'EGT_L', 'ALT'
quantity: string; // 'temperature', 'altitude'
dimension: string; // 'Θ', 'L'
primaryUnit: string; // '°C', 'ft'
range: [number, number]; // en unidad primaria
nominalCruise?: number;
thresholds?: SensorThresholds;
conversions: Record<string, UnitConversion>;
crossDimensionLinks?: CrossDimensionLink[];
}
interface UnitConversion {
type: 'linear' | 'affine'; factor: number; offset?: number;
}
interface CrossDimensionLink {
targetQuantity: string; model: string; fn: string;
}
type ProtocolEncoding =
| { bus: 'adc'; bits: number; range: [number, number] }
| { bus: 'dac'; bits: number; range: [number, number] }
| { bus: 'binary'; activeHigh: boolean }
| { bus: 'pwm'; freqHz: number; dutyRange: [number, number] }
| { bus: 'frequency'; fMin: number; fMax: number }
| { bus: 'counter'; maxCount: number; rollover: boolean }
| { bus: 'current'; range: '4-20mA' | '0-20mA' }
| { bus: 'voltage'; range: '0-5V' | '0-10V' | '±10V' }
| { bus: 'resistance'; element: 'Pt100' | 'NTC' }
| { bus: 'thermocouple'; type: 'K' | 'J' | 'T' | 'E' }
| { bus: 'arinc429'; label: number; encoding: 'BNR'|'BCD';
dataBits: number; resolution: number; ssm: string }
| { bus: 'milstd1553'; rt: number; sa: number; wordCount: number }
| { bus: 'canbus'; msgId: number; startBit: number; length: number }
| { bus: 'serial'; protocol: 'RS232'|'RS422'|'SPI'|'I2C' };
→ Alinear con ProtocolAdapter interface
interface SensorDefinition {
sensorId: string;
quantity: QuantityDef; // que es
protocols: ProtocolEncoding[]; // como viaja (multiples)
transducer?: TransducerDef; // como se mide
}
represent(620, 'EGT_L') → {
'°C': 620, '°F': 1148, 'K': 893.15,
thermocouple_mV: 25.33, conditioned_V: 2.533,
adc_12bit: 2675, adc_percent: 65.3,
arinc429: { label: 0o211, ssm: 'OP', ... },
rangePercent: 65.26, status: 'normal',
}
| Vista | Quien | Que ve |
|---|---|---|
| Instrumento virtual | Piloto/alumno | Aguja + valor numerico |
| Multi-unidad | Ingeniero | 620°C / 1148°F / 893K |
| Transductor | Tecnico mant. | 25.3 mV termopar K |
| Digitalizado | Tecnico avionica | ADC 2675/4095 |
| Word bus | Especialista | ARINC 429 label 211 BNR |
| Estado operativo | Instructor | 65% rango, zona normal |
| Componente Analyzer1 | Relacion con el modelo |
|---|---|
ProtocolAdapter | Se alinea con ProtocolEncoding — cada adapter codifica/decodifica segun su bus |
| 4 tap points | Motor de representaciones genera datos para cada nivel |
| Frame inspector | ARINC 429 (label, SDI, BNR/BCD, SSM, parity) viene del ProtocolEncoding |
| Comparacion protocolos | "620" via MQTT = 70 bytes, via ARINC 429 = 4 bytes — represent() genera ambos |
| Componente | Fichero | Est. |
|---|---|---|
| Catalogo de magnitudes | src/simulation/quantities.ts | ~200 lin |
| SimSequenceRecorder | src/simulation/SimSequenceRecorder.ts | ~100 |
| SimSequencePlayer | src/simulation/SimSequencePlayer.ts | ~80 |
| SeqPanel UI | src/pages/Sim1/panels/SeqPanel/ | ~400 |
| Migracion catalogo+bridges | sim-catalog.ts + sim-bridges.ts | refactor |
| Fase | Que | Runtime |
|---|---|---|
| Inmediata | Definir interfaces. Migrar rangos sim-catalog → QuantityDef | Nada cambia |
| Siguiente | Motor conversion unidades. HwObjPopup multi-unidad | UI muestra °C y °F |
| Secuencias | Recorder/Player semanticos. SeqPanel en PanelGrid | Grabar/reproducir |
| Analyzer1 | Tipos bus (ARINC 429, 1553). Codificador/decodificador | Inspeccion bit a bit |
LRU Platform — Modelo de Señales y Magnitudes — v1.0 — 2026-04-04