11 KiB
Analisi Comparativa: Codice Albertook vs Nostro Codice
Data: 2026-02-04
Versione Albertook: Funzionante e testata su hardware reale
Nostra Versione: Riorganizzata con verifiche tellback e step sequenziali
🔍 FLUSSO DEL CODICE ALBERTOOK (Funzionante)
Sequenza dopo Power ON:
# 1. Power ON radar
power_grifo_on(1.5) # Wait 1.5 secondi
# 2. Setup IMMEDIATO (senza attese o verifiche):
setValue(theGrifo1553, 127, "A1_MsgRdrSettingsAndParameters",
"settings_RDROperationalSettings_rdr_symbology_intensity", commitChanges=True)
setValue(theGrifo1553, 1, "A2_MsgRdrOperationCommand","rdr_mode_command_RdrModeCommandWord_silence")
setValue(theGrifo1553, 1, "A2_MsgRdrOperationCommand","param1_RdrFunAndParam1_azimuth_scan_width_selection")
setValue(theGrifo1553, 2, "A2_MsgRdrOperationCommand","param1_RdrFunAndParam1_range_scale_selection")
setValue(theGrifo1553, 1, "A2_MsgRdrOperationCommand","param1_RdrFunAndParam1_number_of_bars_selection")
setValue(theGrifo1553, 1, "A2_MsgRdrOperationCommand","rdr_mode_command_RdrModeCommandWord_stby", commitChanges=True)
setValue(theGrifo1553, 1060, "A4_MsgNavDataAndCursor","z_acceleration_Acceleration_raw")
setValue(theGrifo1553, 2500, "A4_MsgNavDataAndCursor","corrected_baro_altitude_BaroAltitude_raw")
setValue(theGrifo1553, 2500, "A4_MsgNavDataAndCursor","radio_altitude_RadioAltitude_raw", commitChanges=True)
setValue(theGrifo1553, 0xAA54, "A5_MsgInuHighSpeed","mode_word", commitChanges=True)
# 3. Inizia SUBITO loop PBIT (senza attese)
while remaining_time > 0:
# ... aspetta bit_report_available
Test Target (Molto Semplice):
# 1. Rimuove STANDBY
setValue(theGrifo1553, 0, "A2_MsgRdrOperationCommand",
"rdr_mode_command_RdrModeCommandWord_stby", commitChanges=True)
# 2. Esegue tgt_gen()
tgt_passed = tgt_gen(interface)
# 3. Rimette STANDBY
setValue(theGrifo1553, 1, "A2_MsgRdrOperationCommand",
"rdr_mode_command_RdrModeCommandWord_stby", commitChanges=True)
🔴 DIFFERENZE CRITICHE CHE POTREBBERO CAUSARE PROBLEMI
1. NESSUNA VERIFICA TELLBACK 🔴🔴🔴
Albertook:
- NON verifica che STANDBY/SILENCE siano attivi
- NON controlla B7 per i tellback
- Procede "alla cieca" assumendo che i comandi siano stati accettati
Noi:
- Verifichiamo tellback STANDBY/SILENCE su B7
- Aspettiamo fino a 5 secondi per conferma
- PROBLEMA: Se il radar non risponde subito al tellback, andiamo in timeout!
Impatto: Il nostro codice potrebbe bloccarsi in attesa di tellback che il radar impiega tempo a settare.
2. TIMING E ATTESE 🔴🔴
Albertook:
power_grifo_on(1.5) # Solo 1.5 secondi
# Setup immediato senza altre attese
# Inizia PBIT subito
Noi:
power_grifo_on(wait_after=0.100)
time.sleep(2.0) # Attesa stabilizzazione
# ... setup comandi ...
time.sleep(TELLBACK_POST_SET_DELAY_SEC) # 2 secondi
# ... verifica tellback (fino a 5 secondi) ...
time.sleep(2.0) # Altri 2 secondi prima PBIT
Totale attese:
- Albertook: ~1.5 secondi
- Noi: 0.1 + 2.0 + 2.0 + (fino a 5.0) + 2.0 = ~11 secondi minimo
Impatto: Troppa attesa potrebbe causare:
- Timeout radar
- Messaggi 1553 persi
- Stato radar inconsistente
3. STRATEGIA commitChanges 🔴
Albertook:
# Imposta SILENCE senza commit
setValue(..., "silence")
# Imposta 3 param1 senza commit
setValue(..., "azimuth_scan_width_selection")
setValue(..., "range_scale_selection")
setValue(..., "number_of_bars_selection")
# Imposta STBY con commit (invia tutto insieme)
setValue(..., "stby", commitChanges=True)
Noi:
# Ogni comando con commit immediato
setValue(..., "silence", commitChanges=True)
setValue(..., "stby", commitChanges=True)
# ... poi dopo ...
setValue(..., "azimuth_scan_width_selection", commitChanges=True)
setValue(..., "range_scale_selection", commitChanges=True)
setValue(..., "number_of_bars_selection", commitChanges=True)
Impatto: Inviare comandi separatamente potrebbe:
- Causare stati intermedi instabili
- Sovraccaricare il bus 1553
- Generare race condition
4. ORDINE DI SETUP 🔴
Albertook:
- INTENSITY (A1)
- SILENCE (A2) - senza commit
- Scan params (A2)
- STANDBY (A2) - con commit
- Nav data (A4)
- INU mode (A5)
Noi:
- SILENCE (A2) - con commit
- STANDBY (A2) - con commit
- Verifica tellback (B7)
- Scan params (A2)
- Nav data (A4)
- INU mode (A5)
- INTENSITY (A1)
Impatto: L'ordine potrebbe essere importante per lo stato interno del radar.
5. GESTIONE MESSAGGIO B6 vs B7 🔴
Albertook:
- Usa solo B6 per bit_report_available ✅
- NON legge mai B7 ✅
- Non ha bisogno dei tellback
Noi:
- Leggiamo B7 per tellback (corretto per ICD)
- Ma questo richiede che il radar invii B7 attivamente
- PROBLEMA: Se B7 non arriva o è in ritardo, siamo bloccati
6. TEST TARGET - SEMPLICITÀ 🔴
Albertook:
# Rimuove STANDBY
setValue(..., stby=0, commitChanges=True)
# Esegue test
tgt_gen(interface)
# Rimette STANDBY
setValue(..., stby=1, commitChanges=True)
Noi:
# Rimuove STANDBY
setValue(..., stby=0, commitChanges=True)
time.sleep(STBY_POST_UNSET_DELAY_SEC) # 2 secondi
# Verifica rimozione (B7, fino a 5 secondi)
# Attende 1 secondo
time.sleep(1.0)
# Esegue test
tgt_gen(...)
# Rimette STANDBY
setValue(..., stby=1, commitChanges=True)
time.sleep(TELLBACK_POST_SET_DELAY_SEC) # 2 secondi
Impatto: Troppa attesa tra rimozione STANDBY e inizio test potrebbe far andare il radar in uno stato diverso da quello atteso.
7. FUNZIONE tgt_gen() - PARAMETRI 🔴
Albertook:
def tgt_gen(interface):
# Usa variabile globale only_bc
if only_bc:
setValue(theGrifo1553, 0, "A2...", "stby", commitChanges=True)
# ... stimola A4/A5 ...
# Monitora B9
Noi:
def tgt_gen(interface, timeout_sec=..., expected_range=...,
range_tolerance=..., hit_threshold=...,
only_bc=True, enable_stim=True):
# Logica più complessa
# Rimuove STANDBY internamente se only_bc=True
Impatto: Il nostro tgt_gen rimuove STANDBY internamente, ma noi lo facciamo già prima! Possibile doppia rimozione.
8. NESSUNA prepare_radar_for_target_test() 🔴🔴
Albertook:
- NON chiama prepare_radar_for_target_test()
- Fa solo: rimuovi STBY → test → rimetti STBY
Noi:
- Chiamiamo prepare_radar_for_target_test() che:
- Imposta SILENCE/STANDBY (già fatto!)
- Configura scan params (già fatto!)
- Verifica tellback (già fatto!)
- PROBLEMA: Stiamo duplicando tutto!
🎯 PROBLEMI PRINCIPALI NELLA NOSTRA VERSIONE
PROBLEMA 1: Troppa Verifica Tellback
- Il radar potrebbe non rispondere subito ai tellback su B7
- Andiamo in timeout aspettando conferme non necessarie
- Albertook NON verifica e funziona!
PROBLEMA 2: Troppa Attesa
- ~11 secondi di attese vs 1.5 secondi di Albertook
- Il radar potrebbe andare in timeout interno
- Il PBIT potrebbe non partire correttamente
PROBLEMA 3: commitChanges Frammentato
- Albertook raggruppa i comandi A2 in un unico commit
- Noi committiamo ogni comando separatamente
- Possibili stati intermedi instabili
PROBLEMA 4: Ordine Setup
- Albertook imposta INTENSITY per primo
- Noi lo impostiamo per ultimo
- Potrebbe essere importante per inizializzazione radar
PROBLEMA 5: Doppia Configurazione Target Test
- Configuriamo tutto all'inizio
- Poi richiamiamo prepare_radar_for_target_test() che rifà tutto
- Chiamiamo tgt_gen() con only_bc=False ma lui vuole rimuovere STANDBY internamente
PROBLEMA 6: Messaggio B7 Non Disponibile?
- Albertook non usa mai B7
- Noi lo usiamo per tellback
- Se B7 non arriva, siamo bloccati
✅ RACCOMANDAZIONI CORRETTIVE
1. ELIMINARE VERIFICA TELLBACK (CRITICO)
# RIMUOVERE:
# - Verifica tellback STANDBY/SILENCE su B7
# - Attese per conferma tellback
# - Loop di polling B7
# LASCIARE:
# - Comandi setup
# - Attesa minima (1-2 secondi) per stabilizzazione HW
2. RIDURRE ATTESE
# PRIMA:
power_grifo_on(wait_after=0.100)
time.sleep(2.0) # stabilizzazione
# ... comandi ...
time.sleep(2.0) # post-set
# ... verifica tellback 5s ...
time.sleep(2.0) # pre-PBIT
# DOPO:
power_grifo_on(wait_after=1.5) # come Albertook
# ... comandi immediati ...
# NESSUNA attesa aggiuntiva
# PBIT subito
3. RAGGRUPPARE commitChanges
# Impostare tutti i comandi A2 insieme
setValue(..., "silence") # NO commit
setValue(..., "azimuth_scan_width_selection") # NO commit
setValue(..., "range_scale_selection") # NO commit
setValue(..., "number_of_bars_selection") # NO commit
setValue(..., "stby", commitChanges=True) # commit TUTTO insieme
4. RIORDINARE SETUP COME ALBERTOOK
# 1. INTENSITY per primo
setValue(..., "rdr_symbology_intensity", commitChanges=True)
# 2. SILENCE + scan params + STANDBY insieme
setValue(..., "silence")
setValue(..., "azimuth_scan_width_selection")
setValue(..., "range_scale_selection")
setValue(..., "number_of_bars_selection")
setValue(..., "stby", commitChanges=True)
# 3. Nav data
setValue(..., "z_acceleration_Acceleration_raw")
setValue(..., "corrected_baro_altitude_BaroAltitude_raw")
setValue(..., "radio_altitude_RadioAltitude_raw", commitChanges=True)
# 4. INU mode
setValue(..., "mode_word", commitChanges=True)
5. SEMPLIFICARE TEST TARGET
# RIMUOVERE prepare_radar_for_target_test() prima del test
# Rimuovere STANDBY
setValue(..., stby=0, commitChanges=True)
# Eseguire test (senza attese)
tgt_result = tgt_gen(theGrifo1553, only_bc=False, enable_stim=True, ...)
# Rimettere STANDBY
setValue(..., stby=1, commitChanges=True)
6. NON USARE B7
- Non leggere B7_MsgRdrStatusTellback
- Fidarsi che i comandi siano accettati
- Come fa Albertook
📊 CONFRONTO TEMPORALE
| Fase | Albertook | Nostra Versione | Differenza |
|---|---|---|---|
| Power ON | 1.5s | 0.1s | -1.4s |
| Stabilizzazione | 0s | 2.0s | +2.0s |
| Setup comandi | ~0s | ~0s | 0s |
| Post-set delay | 0s | 2.0s | +2.0s |
| Verifica tellback | 0s | 0-5.0s | +0-5.0s |
| Pre-PBIT delay | 0s | 2.0s | +2.0s |
| TOTALE | 1.5s | 6.1-11.1s | +4.6-9.6s |
🎯 CONCLUSIONE
Il codice di Albertook funziona perché è minimale e diretto:
- Nessuna verifica tellback
- Attese minime
- Comandi raggruppati
- Nessuna duplicazione
La nostra versione ha troppe precauzioni che potrebbero causare:
- Timeout radar
- Stati inconsistenti
- Messaggi persi
- Configurazione duplicata
Azione raccomandata: Tornare ad un approccio più simile ad Albertook, eliminando le verifiche tellback e riducendo le attese.