# ICS-SimLab Configuration Generator (Claude) Generatore di configurazioni e logica PLC/HIL per ICS-SimLab usando LLM. ## πŸš€ Quick Start ### 1. Genera configurazione da testo (LLM) ```bash source .venv/bin/activate python3 main.py --input-file prompts/input_testuale.txt ``` ### 2. Build scenario completo ```bash python3 build_scenario.py --out outputs/scenario_run --overwrite ``` ### 3. Valida fix PLC ```bash python3 validate_fix.py ``` ### 4. Esegui ICS-SimLab ```bash ./scripts/run_simlab.sh ``` ## πŸ“ Struttura Progetto ``` ics-simlab-config-gen_claude/ β”œβ”€β”€ main.py # Script principale (LLM -> configuration.json) β”œβ”€β”€ build_scenario.py # Builder scenario (config -> IR -> logic) β”œβ”€β”€ validate_fix.py # Validazione fix PLC startup race β”œβ”€β”€ README.md # Questo file β”‚ β”œβ”€β”€ docs/ # πŸ“š Documentazione completa β”‚ β”œβ”€β”€ README_FIX.md # Main doc per fix PLC startup race β”‚ β”œβ”€β”€ QUICKSTART.txt # Guida rapida β”‚ β”œβ”€β”€ RUNTIME_FIX.md # Fix completo con troubleshooting β”‚ β”œβ”€β”€ CHANGES.md # Dettaglio modifiche con diff β”‚ β”œβ”€β”€ DELIVERABLES.md # Summary completo β”‚ └── ... β”‚ β”œβ”€β”€ scripts/ # πŸ”§ Script utility β”‚ β”œβ”€β”€ run_simlab.sh # Avvia ICS-SimLab (path assoluti) β”‚ β”œβ”€β”€ test_simlab.sh # Test interattivo β”‚ └── diagnose_runtime.sh # Diagnostica β”‚ β”œβ”€β”€ tools/ # βš™οΈ Generatori β”‚ β”œβ”€β”€ compile_ir.py # IR -> logic/*.py (CON FIX!) β”‚ β”œβ”€β”€ make_ir_from_config.py # config.json -> IR β”‚ β”œβ”€β”€ generate_logic.py # Generatore alternativo β”‚ β”œβ”€β”€ validate_logic.py # Validatore β”‚ └── pipeline.py # Pipeline end-to-end β”‚ β”œβ”€β”€ services/ # πŸ”„ Pipeline LLM β”‚ β”œβ”€β”€ pipeline.py # Pipeline principale β”‚ β”œβ”€β”€ generation.py # Chiamate LLM β”‚ β”œβ”€β”€ patches.py # Patch automatiche config β”‚ └── validation/ # Validatori β”‚ β”œβ”€β”€ models/ # πŸ“‹ Schemi dati β”‚ β”œβ”€β”€ ics_simlab_config.py # Config ICS-SimLab β”‚ β”œβ”€β”€ ir_v1.py # IR (Intermediate Representation) β”‚ └── schemas/ # JSON Schema β”‚ β”œβ”€β”€ templates/ # πŸ“ Template codice β”‚ └── tank.py # Template water tank β”‚ β”œβ”€β”€ helpers/ # πŸ› οΈ Utility β”‚ └── helper.py β”‚ β”œβ”€β”€ prompts/ # πŸ’¬ Prompt LLM β”‚ β”œβ”€β”€ input_testuale.txt # Input esempio β”‚ β”œβ”€β”€ prompt_json_generation.txt β”‚ └── prompt_repair.txt β”‚ β”œβ”€β”€ examples/ # πŸ“¦ Esempi riferimento β”‚ β”œβ”€β”€ water_tank/ β”‚ β”œβ”€β”€ smart_grid/ β”‚ └── ied/ β”‚ β”œβ”€β”€ spec/ # πŸ“– Specifiche β”‚ └── ics_simlab_contract.json β”‚ └── outputs/ # 🎯 Output generati β”œβ”€β”€ configuration.json # Config base generata β”œβ”€β”€ ir/ # IR intermedio β”‚ └── ir_v1.json └── scenario_run/ # πŸš€ SCENARIO FINALE PER ICS-SIMLAB β”œβ”€β”€ configuration.json └── logic/ β”œβ”€β”€ plc1.py # βœ… Con _safe_callback β”œβ”€β”€ plc2.py # βœ… Con _safe_callback └── hil_1.py ``` ## πŸ”§ Workflow Completo ### Opzione A: Solo generazione logica (da config esistente) ```bash # Da configuration.json esistente -> scenario completo python3 build_scenario.py --config outputs/configuration.json --overwrite ``` ### Opzione B: Pipeline completa (da testo) ```bash # 1. Testo -> configuration.json (LLM) python3 main.py --input-file prompts/input_testuale.txt # 2. Config -> scenario completo python3 build_scenario.py --overwrite # 3. Valida python3 validate_fix.py # 4. Esegui ./scripts/run_simlab.sh ``` ### Opzione C: Pipeline manuale step-by-step ```bash # 1. Config -> IR python3 -m tools.make_ir_from_config \ --config outputs/configuration.json \ --out outputs/ir/ir_v1.json \ --overwrite # 2. IR -> logic/*.py python3 -m tools.compile_ir \ --ir outputs/ir/ir_v1.json \ --out-dir outputs/scenario_run/logic \ --overwrite # 3. Copia config cp outputs/configuration.json outputs/scenario_run/ # 4. Valida python3 -m tools.validate_logic \ --config outputs/configuration.json \ --logic-dir outputs/scenario_run/logic \ --check-callbacks \ --check-hil-init ``` ## πŸ› Fix PLC Startup Race Condition Il generatore include un fix per il crash di PLC2 all'avvio: - **Problema**: PLC2 crashava quando scriveva a PLC1 prima che fosse pronto - **Soluzione**: Retry wrapper `_safe_callback()` in `tools/compile_ir.py` - **Dettagli**: Vedi `docs/README_FIX.md` ### Verifica Fix ```bash python3 validate_fix.py # Output atteso: βœ… SUCCESS: All PLC files have the callback retry fix ``` ## πŸš€ Esecuzione ICS-SimLab **IMPORTANTE**: Usa percorsi ASSOLUTI con sudo, non `~`! ```bash # βœ… CORRETTO cd /home/stefano/projects/ICS-SimLab-main/curtin-ics-simlab sudo ./start.sh /home/stefano/projects/ics-simlab-config-gen_claude/outputs/scenario_run # ❌ SBAGLIATO (sudo non espande ~) sudo ./start.sh ~/projects/ics-simlab-config-gen_claude/outputs/scenario_run ``` **Oppure usa lo script** (gestisce automaticamente i path): ```bash ./scripts/run_simlab.sh ``` ### Monitoraggio ```bash # Log PLC2 (cercare: NO "Exception in thread" errors) sudo docker logs $(sudo docker ps --format '{{.Names}}' | grep plc2) -f # Stop cd /home/stefano/projects/ICS-SimLab-main/curtin-ics-simlab sudo ./stop.sh ``` ## πŸ“š Documentazione - **Quick Start**: `docs/QUICKSTART.txt` - **Fix Completo**: `docs/README_FIX.md` - **Troubleshooting**: `docs/RUNTIME_FIX.md` - **Modifiche**: `docs/CHANGES.md` - **Comandi Corretti**: `docs/CORRECT_COMMANDS.txt` ## πŸ”‘ Setup Iniziale ```bash # Crea venv python3 -m venv .venv source .venv/bin/activate # Installa dipendenze (se necessario) pip install openai python-dotenv pydantic # Configura API key echo "OPENAI_API_KEY=sk-..." > .env ``` ## 🎯 File Chiave - `tools/compile_ir.py` - **Generatore PLC logic (CON FIX)** - `build_scenario.py` - **Builder scenario deterministico** - `validate_fix.py` - **Validatore fix** - `outputs/scenario_run/` - **Scenario finale per ICS-SimLab** ## ⚠️ Note Importanti 1. **Sempre usare `.venv/bin/python3`** per assicurare venv corretto 2. **Percorsi assoluti con sudo** (no `~`) 3. **Rebuild scenario** dopo modifiche a config: `python3 build_scenario.py --overwrite` 4. **Validare sempre** dopo rebuild: `python3 validate_fix.py` ## πŸ“ TODO / Roadmap - [ ] Supporto per piΓΉ modelli (oltre "tank") - [ ] Generazione automatica HMI - [ ] Parametri retry configurabili - [ ] Test automatizzati end-to-end ## πŸ“„ Licenza Tesi Stefano D'Orazio - OT Security --- **Status**: βœ… Production Ready **Last Update**: 2026-01-27