SXXXXXXX_PyBusMonitor1553/doc/GrifoScope-QuickStart.md
2025-12-17 07:59:30 +01:00

5.9 KiB

GrifoScope Compatibility Mode - Quick Start Guide

Implementazione Completata

PyBusMonitor1553 ora supporta GRIFOSCOPE_MODE per compatibilità totale con il radar server.

🎯 Cosa è Stato Implementato

  1. B-Request Format

    • B-messages inviate con REQUEST_MODE = True
    • Payload vuoto (0 bytes data) per richieste al radar
    • tr=1 (expect RT to reply), wc=N (word count impostato)
  2. Multi-Message Frame

    • Tutti i messaggi in un UNICO datagram UDP
    • A1-A8 (comandi) + B1-B11 (richieste) in singolo pacchetto
    • Frame rate: 25 Hz (40ms period) come GrifoScope
  3. GrifoScope Mode Activation

    • Flag ambiente PYBM_GRIFOSCOPE_MODE=1
    • Compatibilità con porte GrifoScope (61553/51553)
    • Formato frame identico a qg1553overudp.cpp

🚀 Come Usare GRIFOSCOPE_MODE

GRIFOSCOPE_MODE è ATTIVO di default!

Basta avviare l'applicazione normalmente:

python -m pybusmonitor1553

Il software è già configurato per comunicare esattamente come GrifoScope.

🔧 Disabilitare GrifoScope Mode (opzionale)

Se per qualche motivo vuoi usare la modalità multi-rate ottimizzata, apri pybusmonitor1553/core/scheduler.py:

# Linea ~23
GRIFOSCOPE_MODE = False  # Cambia da True a False

📊 Differenze tra Modalità

GrifoScope Mode (GRIFOSCOPE_MODE=True)

Frame @ 25 Hz (40ms):
  UDP Header (64B)
  ├─ A1 (command, payload)
  ├─ A2 (command, payload)
  ├─ A3 (command, payload)
  ├─ A4 (command, payload)
  ├─ A5 (command, payload)
  ├─ A7 (command, payload)
  ├─ A8 (command, payload)
  ├─ B1 (request, NO payload) ← Polling
  ├─ B2 (request, NO payload)
  ├─ ...
  └─ B11 (request, NO payload)
  End Marker (0x5315)

✅ Banda: ~103 kbps
✅ Compatible con GrifoScope
✅ Single UDP packet per ciclo

Multi-Rate Mode (GRIFOSCOPE_MODE=False, default)

Messaggi separati a rate diversi:
  A1, A3, A7, A8, B6 @ 6.25 Hz  (160ms)
  A2, B7             @ 25 Hz    (40ms)
  A4, A5, B4, B5     @ 50 Hz    (20ms)
  B8                 @ 1.56 Hz  (640ms)

⚠️ Banda: ~172 kbps
✅ Ottimizzato per efficienza
❌ Non compatibile con radar che si aspetta frame singolo

🔧 Test di Verifica

1. Test Formato B-Request

python tools/test_b_request_format.py

Output atteso:

✅ TEST 1 PASSED: A-messages have payload
✅ TEST 2 PASSED: B-messages have NO payload (REQUEST mode)
✅ TEST 3 PASSED: Mixed frames work correctly

2. Test GrifoScope Mode

python tools/test_grifoscope_mode.py

Output atteso:

✅ ALL TESTS PASSED - GRIFOSCOPE MODE WORKS CORRECTLY

Summary:
  - Single frame contains all messages ✅
  - A-messages have payload (commands) ✅
  - B-messages have NO payload (requests) ✅
  - Frame rate: 25 Hz (40ms period) ✅
  - Compatible with GrifoScope behavior ✅

3. Test con Radar Simulato

# Terminal 1: Avvia responder simulato
python tools/simple_rt_responder.py

# Terminal 2: Avvia PyBusMonitor (GrifoScope mode già attivo di default)
python -m pybusmonitor1553

📋 Checklist Pre-Radar Reale

Prima di connetterti al radar vero, verifica:

  • GRIFOSCOPE_MODE attivo di default ( già configurato!)
  • Porte corrette: RX=61553, TARGET=51553
  • IP radar configurato in PYBM_TARGET_IP (se necessario)
  • Test test_b_request_format.py passato
  • Test test_grifoscope_mode.py passato
  • GrifoScope NON in esecuzione (conflitto porte)

🐛 Troubleshooting

Problema: Radar non risponde

Soluzione:

# Verifica GRIFOSCOPE_MODE attivo (dovrebbe essere True di default)
python -c "from pybusmonitor1553.core import scheduler; print(scheduler.GRIFOSCOPE_MODE)"
# Output atteso: True

# Verifica porte
netstat -an | findstr "61553"  # Windows
netstat -an | grep "61553"     # Linux

Problema: Frame troppo grande

Soluzione: Riduci messaggi inviati modificando scheduler.py:_loop_grifoscope():

# Invia solo messaggi essenziali (come GrifoScope originale)
essential_messages = [
    self.controller.msg_a1,
    self.controller.msg_a2,
    self.controller.msg_a3,
    self.controller.msg_a4,
    self.controller.msg_a5,
    self.controller.msg_b6,
    self.controller.msg_b7,
]

Problema: Bandwidth troppo alta

Soluzione: GrifoScope mode usa ~103 kbps vs ~172 kbps multi-rate.
Se bandwidth è problema, usa multi-rate mode (default).


📖 Documenti di Riferimento


🎓 Come Funziona (Per Sviluppatori)

REQUEST_MODE Flag

# lib1553/message_base.py
class MessageBase:
    REQUEST_MODE = False  # True per B-messages (richieste)

# lib1553/messages/msg_b7.py
class MsgB7(MessageBase):
    REQUEST_MODE = True  # Invia senza payload

PacketBuilder Logic

# core/packet_builder.py
if request_mode:
    # GrifoScope B-request: tr=1, wc=N, NO data bytes
    # Radar risponderà con payload pieno
    pass  # Skip payload
elif tr == 0:
    # BC->RT command: invia payload
    payload_bytes = msg.pack(word_count=wc)

Scheduler Modes

# core/scheduler.py
if GRIFOSCOPE_MODE:
    # Invia TUTTI i messaggi ogni 40ms (25 Hz)
    self._loop_grifoscope()
else:
    # Multi-rate: ogni messaggio al suo rate ICD
    self._loop_multirate()

Status Progetto

Completato: 85% → 95% 🎉

  • B-Request format (Task 2)
  • Multi-Message frame (Task 3)
  • GrifoScope compatibility mode
  • Test suite completa
  • Test con radar reale (da fare)

Tempo stimato rimanente: 1-2 giorni per test/validazione radar reale


Ultima modifica: 2025-12-15
Autore: AI Assistant + Team PyBusMonitor
Versione: 1.0 (GrifoScope Compatible)