9.4 KiB
Confronto Implementazioni tgt_gen()
Data: 2026-02-03
Scopo: Confrontare la nostra implementazione di tgt_gen() con la versione semplificata testata con successo sulla macchina target reale.
1. PANORAMICA
Versione Collega (Target Reale - FUNZIONANTE)
- Righe di codice: ~60
- Complessità: Bassa (essenziale)
- Testato: ✅ SU HARDWARE REALE con successo
- Return: Boolean (True/False)
Nostra Versione (Sviluppo)
- Righe di codice: ~210
- Complessità: Alta (ricca di funzionalità)
- Testato: ✅ In simulazione
- Return: Dizionario con dettagli completi
2. CONFRONTO DETTAGLIATO
2.1 TIMING E LOOP CONTROL
| Aspetto | Versione Collega | Nostra Versione | Note |
|---|---|---|---|
| Initial sleep | 1.0s | 0.0s | Collega: attesa iniziale esplicita |
| Loop period | 20ms (0.020s) | 0.5ms | 🔴 DIFFERENZA CRITICA |
| Iterazioni max | 500 fisso | Calcolato da timeout | Noi: ~20000 per 10s timeout |
| Timeout | Implicito: ~10s (500×20ms) | Esplicito: 10s controllato | ✅ Noi: early exit se timeout |
| Tempo totale max | ~10 secondi | ~10 secondi | Equivalente |
⚠️ ISSUE CRITICA: Il nostro period_ms = 0.5ms è 40 volte più veloce della versione che funziona sull'hardware reale (20ms).
2.2 FASE DI INIZIALIZZAZIONE (Pre-Loop)
| Operazione | Versione Collega | Nostra Versione | Compatibilità |
|---|---|---|---|
| Set STBY mode | ✅ Sempre (if only_bc) | ✅ Opzionale | ✅ Compatibile |
| Stimolazione A5 | ✅ 10 messaggi, 10ms interval | ✅ 10 messaggi, 20ms interval | ✅ Simile |
| Timetag A5 | Incremento +150 | Incremento +150 | ✅ Identico |
| CommitChanges | ✅ True | ✅ True | ✅ Identico |
Valutazione: Fase iniziale sostanzialmente identica.
2.3 LOOP PRINCIPALE - STIMOLAZIONE
| Operazione | Versione Collega | Nostra Versione | Compatibilità |
|---|---|---|---|
| Messaggio stimolato | A4 (Nav Data) | A4 (Nav Data) | ✅ Identico |
| Metodo chiamata | theGrifo1553.set() |
setValue() con verbose=False |
✅ Equivalente |
| Timetag increment | +150 | +150 | ✅ Identico |
| Timetag wrap | 0x70ff → 10 | 0x70ff → 10 | ✅ Identico |
| CommitChanges | ✅ True | ✅ True | ✅ Identico |
| Frequenza log | Ogni 50 iter (debug) | Ogni 50 iter (debug) | ✅ Identico |
Valutazione: Stimolazione identica.
2.4 LETTURA B9 E DETECTION LOGIC
| Aspetto | Versione Collega | Nostra Versione | Compatibilità |
|---|---|---|---|
| getSingleMessageReceivedSz("B9") | ✅ Sì | ✅ Sì | ✅ Identico |
| Campo b9_t_num | ✅ Letto | ✅ Letto | ✅ Identico |
| Campo b9_t1_rng | ✅ Letto | ✅ Letto | ✅ Identico |
| Campo b9_w12 (timetag) | ✅ Letto | ✅ Letto | ✅ Identico |
| Inizializzazione p_tt | if p_tt==0: p_tt=t_tt; continue |
if p_tt==0 and t_tt!=0: p_tt=t_tt; continue |
⚠️ Noi: check aggiuntivo t_tt!=0 |
| Condizione detection | (t_num>0) OR (p_tt!=t_tt) |
(t_num>0) OR (p_tt!=0 AND t_tt!=p_tt) |
⚠️ Noi: check p_tt!=0 aggiuntivo |
⚠️ DIFFERENZA: La nostra condizione è più restrittiva (richiede p_tt != 0).
2.5 RANGE VALIDATION
| Aspetto | Versione Collega | Nostra Versione | Compatibilità |
|---|---|---|---|
| Expected range | 2536 (hardcoded) | 2536 (configurabile) | ✅ Identico valore |
| Tolerance low | -1000 | -1000 (configurabile) | ✅ Identico |
| Tolerance high | +200 | +200 (configurabile) | ✅ Identico |
| Range finale | [1536, 2736] | [1536, 2736] | ✅ Identico |
| Metodo check | check() |
check() |
✅ Identico |
Valutazione: Validazione identica (noi più configurabile).
2.6 SUCCESS CRITERIA
| Aspetto | Versione Collega | Nostra Versione | Compatibilità |
|---|---|---|---|
| Hit counter | hit > 1 (almeno 2) |
hit >= hit_threshold (default 2) |
✅ Equivalente |
| Early exit | ❌ No (commento #return True) |
✅ Sì (break dopo threshold) |
🟢 Noi meglio |
| InterruptRequest | ✅ Gestito | ✅ Gestito | ✅ Identico |
Valutazione: Noi ottimizzati (early exit quando raggiunto threshold).
2.7 RETURN VALUE
| Aspetto | Versione Collega | Nostra Versione |
|---|---|---|
| Tipo | bool (True/False) |
dict con 7 campi |
| Info detected | ✅ Sì (boolean) | ✅ Sì (bool + dettagli) |
| Info hits | ❌ No | ✅ Sì (count) |
| Info range | ❌ No | ✅ Sì (valore) |
| Info iterations | ❌ No | ✅ Sì (count) |
| Info timing | ❌ No | ✅ Sì (time_to_detect) |
| Info message_count | ❌ No | ✅ Sì (B9 messages) |
Valutazione: Noi molto più ricchi di informazioni per diagnostica e report.
3. ISSUE CRITICHE IDENTIFICATE
🔴 ISSUE #1: PERIOD TROPPO VELOCE
Problema: Il nostro period_ms = 0.5ms è 40 volte più veloce della versione hardware (20ms).
Impatto:
- Possibile overload del bus 1553
- Radar potrebbe non fare in tempo a processare messaggi
- Possibile timing mismatch con refresh B9 (periodo 20ms secondo ICD)
Raccomandazione: CAMBIARE period_ms da 0.5ms a 20ms per allinearsi all'hardware reale.
🟡 ISSUE #2: DETECTION CONDITION PIÙ RESTRITTIVA
Problema: La nostra condizione richiede p_tt != 0 prima di considerare valido un cambio timetag.
Impatto:
- Potrebbe saltare la prima detection se timetag parte da 0
- Logica più conservativa (può essere positivo)
Raccomandazione: MANTENERE - la logica è più robusta e gestisce edge case.
🟢 ISSUE #3: EARLY EXIT MANCANTE NEL COLLEGA
Problema: La versione collega continua il loop anche dopo aver raggiunto i 2 hit (codice commentato #return True).
Impatto:
- Spreco di tempo (continua per tutti i 500 loop)
- La nostra versione è ottimizzata con early exit
Raccomandazione: MANTENERE la nostra implementazione (early exit).
4. ALTRE DIFFERENZE NOTEVOLI
4.1 Gestione Errori
- Collega: Nessuna gestione esplicita
- Noi: Try/except su ogni operazione critica + logging
- Valutazione: ✅ Noi meglio per produzione
4.2 Logging
- Collega: Minimale (molti log commentati)
- Noi: Dettagliato con livelli configurabili + riduzione spam
- Valutazione: ✅ Noi meglio per diagnostica
4.3 Configurabilità
- Collega: Valori hardcoded
- Noi: Parametri configurabili all'inizio script
- Valutazione: ✅ Noi meglio per manutenibilità
4.4 Timeout Control
- Collega: Implicito (fixed iterations)
- Noi: Esplicito con check
current_time >= end_time - Valutazione: ✅ Noi meglio per precisione
5. SINTESI E RACCOMANDAZIONI
✅ COSA MANTENERE DELLA NOSTRA VERSIONE
- Return dict con dettagli completi (essenziale per report e GUI)
- Early exit quando raggiunto threshold (ottimizzazione)
- Timeout esplicito con check su tempo reale
- Gestione errori completa con try/except
- Logging configurabile con riduzione spam
- Parametri configurabili (TARGET_* all'inizio script)
🔴 COSA CAMBIARE PER ALLINEARSI ALL'HARDWARE
- CRITICO: Cambiare
period_msda 0.5ms a 20ms - OPZIONALE: Rimuovere check
p_tt != 0nella detection condition (per compatibilità) - VERIFICA: Test in simulazione con period 20ms
🟡 POSSIBILI OTTIMIZZAZIONI FUTURE
- Aggiungere sleep iniziale 1s (come collega) se necessario per stabilizzazione radar
- Testare se A5 iniziale è davvero necessario o solo A4 basta
- Considerare di aumentare
hit_thresholdda 2 a 3-5 per maggiore robustezza
6. PIANO D'AZIONE PROPOSTO
Step 1: MODIFICHE IMMEDIATE (CRITICHE)
# In GRIFO_M_PBIT.py, funzione tgt_gen(), cambiare:
period_ms = 0.5 # SBAGLIATO
↓
period_ms = 20 # CORRETTO (allineato a hardware reale)
Step 2: TESTING
- Eseguire test in simulazione con period 20ms
- Verificare che timeout 10s funzioni correttamente (~500 iterazioni max)
- Verificare che early exit funzioni (detection dopo 2-3 iterazioni)
Step 3: VALIDAZIONE HARDWARE
- Test sulla macchina target reale
- Confronto risultati con versione collega
- Tuning fine se necessario
7. CONCLUSIONI
Valutazione Complessiva
La nostra implementazione è superiore in termini di:
- ✅ Robustezza (gestione errori)
- ✅ Diagnostica (logging + return dettagliato)
- ✅ Manutenibilità (configurabile)
- ✅ Efficienza (early exit, timeout esplicito)
MA ha un BUG CRITICO: il period troppo veloce potrebbe causare problemi sull'hardware reale.
Raccomandazione Finale
NON sostituire la nostra implementazione con quella del collega, MA correggere il bug del period:
period_ms = 20 # Allineato a versione hardware funzionante
Questa modifica rende la nostra implementazione completamente compatibile con l'hardware reale mantenendo tutti i vantaggi della versione evoluta.
Domande per Discussione
- Accetti la modifica da 0.5ms a 20ms?
- Vuoi testare prima in simulazione o procedere direttamente?
- Preferisci aggiungere lo sleep iniziale 1s del collega?
- Il check
p_tt != 0lo manteniamo o lo rimuoviamo per compatibilità?
Fine del documento di confronto