PlatSim_Genova/_doc/ANALISI_CODICE_ALBERTOOK.md

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:

  1. INTENSITY (A1)
  2. SILENCE (A2) - senza commit
  3. Scan params (A2)
  4. STANDBY (A2) - con commit
  5. Nav data (A4)
  6. INU mode (A5)

Noi:

  1. SILENCE (A2) - con commit
  2. STANDBY (A2) - con commit
  3. Verifica tellback (B7)
  4. Scan params (A2)
  5. Nav data (A4)
  6. INU mode (A5)
  7. 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:

  1. Nessuna verifica tellback
  2. Attese minime
  3. Comandi raggruppati
  4. 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.