Files
engineering-skills/vdi2230/evals/evals.json
T
davide 4a2e3f8389 add vdi2230 skill: VDI 2230 bolt joint dimensioning engine
Full R0-R13 calculation engine with:
- Guided data collection (N bolts, per-bolt load, DA_prime, thermal dT)
- Auto-sizing script (M4->M39 iteration across strength classes)
- fm_table A1 lookup for fast MA/FM queries without full R0-R13
- Warnings for stainless steel galling, ESV insert threads (Helicoil/Ensat)
- Bolt circle load distribution formula (FA + MB + MT)
- 7 evals covering static, fatigue, ESV aluminium, pressure seal,
  thermal steel-aluminium, and combined FA+FQ cases

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-23 10:37:40 +01:00

218 lines
11 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"skill_name": "vdi2230-dimensionamento-viti",
"evals": [
{
"id": 1,
"prompt": "Ho una flangia in acciaio S355 con due metà che devo serrare insieme. La flangia è spessa 40mm in totale, il diametro flangia è 80mm e i fori sono da 17mm. Il carico assiale che arriva sulla connessione è circa 50kN statico. Che vite uso e con che coppia la servo?",
"expected_output": "La skill deve: (1) raccogliere i dati mancanti con domande mirate o assumere default sensati, (2) eseguire lo script vdi2230_calc.py o auto_size.py, (3) restituire almeno: la dimensione vite consigliata (verosimilmente M16 8.8 o M14 10.9), la coppia di serraggio MA in Nm, e il precarico FM. Le verifiche R7-R12 devono essere presentate tutte.",
"assertions": [
{
"text": "Il risultato include una dimensione vite specifica (es. M14, M16) e una classe di resistenza",
"type": "output_contains_pattern",
"pattern": "M\\d{1,2}.*(?:8\\.8|10\\.9|12\\.9)"
},
{
"text": "Il risultato include la coppia di serraggio MA in Nm",
"type": "output_contains_keyword",
"keyword": "Nm"
},
{
"text": "Il risultato include almeno un valore di precarico FM in kN",
"type": "output_contains_keyword",
"keyword": "kN"
},
{
"text": "Sono presenti le verifiche R7-R12 con esito ✅ o ❌",
"type": "output_contains_keyword",
"keyword": "R7"
},
{
"text": "Lo script Python è stato eseguito (non calcolo manuale)",
"type": "output_contains_keyword",
"keyword": "vdi2230_calc"
}
]
},
{
"id": 2,
"prompt": "Devo verificare se una vite M10 classe 8.8 regge su un supporto in alluminio EN-AW 6082. La vite è avvitata direttamente nell'alluminio (no dado), lunghezza avvitamento 16mm. Carico: FA max = 8000N, FA min = 1000N (carico a fatica), nessuna forza trasversale. lK = 20mm, DA = 30mm, foro da 11mm.",
"expected_output": "La skill deve: (1) riconoscere il caso ESV (vite in foro filettato) e alluminio come materiale critico per pG e meff, (2) eseguire il calcolo, (3) segnalare se la lunghezza di avvitamento 16mm è sufficiente (meff_min per alluminio ≈ 2·d = 20mm → probabile fallimento R11), (4) fornire azione correttiva concreta.",
"assertions": [
{
"text": "Il tipo giunzione ESV è correttamente identificato",
"type": "output_contains_keyword",
"keyword": "ESV"
},
{
"text": "Il materiale alluminio è considerato nel calcolo",
"type": "output_contains_keyword",
"keyword": "alluminio"
},
{
"text": "La verifica R11 (lunghezza avvitamento) appare nel report",
"type": "output_contains_keyword",
"keyword": "R11"
},
{
"text": "Se R11 fallisce, è presente un'azione correttiva (aumentare meff o inserto)",
"type": "output_contains_keyword",
"keyword": "avvitamento"
},
{
"text": "La verifica a fatica R9 è presente dato il carico variabile",
"type": "output_contains_keyword",
"keyword": "R9"
}
]
},
{
"id": 3,
"prompt": "Sizing automatico: ho un coperchio da pressione con tenuta verso 8 bar interni. Area guarnizione circa 1200mm². Il coperchio è in ghisa GJL-250, spessore 35mm, flangia da 60mm. I bulloni saranno in posizione simmetrica, con foro da 14mm. Carico assiale sui bulloni trascurabile (è solo pressione). Dimmi qual è il bullone minimo e con che coppia.",
"expected_output": "La skill deve: (1) convertire 8 bar in N/mm² (0.8 N/mm²) e calcolare FKP = AD·pi = 1200·0.8 = 960N, (2) usare auto_size.py per trovare il diametro minimo, (3) usare pG adeguato per ghisa (400-600 N/mm²), (4) restituire la soluzione minima con coppia MA.",
"assertions": [
{
"text": "La pressione 8 bar è convertita in N/mm² (0.8) per il calcolo",
"type": "output_contains_keyword",
"keyword": "0.8"
},
{
"text": "Il materiale ghisa è considerato con pG appropriato (≤ 600 N/mm²)",
"type": "output_contains_keyword",
"keyword": "ghisa"
},
{
"text": "Auto-sizing è stato usato o il diametro minimo è stato trovato iterativamente",
"type": "output_contains_keyword",
"keyword": "auto_size"
},
{
"text": "Il risultato include la coppia di serraggio MA",
"type": "output_contains_keyword",
"keyword": "MA"
}
]
},
{
"id": 4,
"prompt": "Qual è la coppia di serraggio per una M20 classe 10.9 con coefficiente d'attrito 0.14? È una vite passante con dado, condizione di consegna senza lubrificante.",
"expected_output": "Domanda rapida — la skill deve rispondere leggendo MA dalla tabella A1 fm_table.json senza eseguire il calcolo completo R0-R13. Il valore atteso è MA ≈ 661 Nm (tabella A1, M20 10.9, µ=0.14). Non deve chiedere lK, DA, dh o altri parametri geometrici non necessari per questa risposta.",
"assertions": [
{
"text": "Il valore MA restituito è nell'intervallo corretto 600-800 Nm per M20 10.9 µ=0.14",
"type": "numeric_range",
"min": 600,
"max": 800,
"unit": "Nm"
},
{
"text": "Il coefficiente di attrito µ=0.14 è usato nel calcolo",
"type": "output_contains_keyword",
"keyword": "0.14"
},
{
"text": "Il precarico FM è riportato (da tabella A1: ≈ 181 kN per M20 10.9 µ=0.14)",
"type": "output_contains_keyword",
"keyword": "kN"
},
{
"text": "La risposta NON chiede lK, DA, dh o altri parametri geometrici — sono inutili per una semplice lettura di MA/FM da tabella",
"type": "behavior",
"description": "Per domande pure MA/FM con size+classe+µ noti, la skill usa fm_table lookup diretto senza script completo"
}
]
},
{
"id": 5,
"prompt": "Ho già fatto il calcolo VDI 2230 e mi è venuto fuori che R9 (fatica) non passa: σa = 38 MPa ma σAS = 31 MPa. SD = 0.82. Cosa posso fare per farlo passare senza cambiare il diametro?",
"expected_output": "La skill deve fornire azioni correttive specifiche per R9 senza ridimensionamento: (1) passare a filetto rullato post-tempra SG (+20-30% su σAS), (2) aumentare il precarico FM che riduce l'ampiezza relativa, (3) progetto a vita finita se NZ è basso. Deve spiegare il meccanismo fisico dietro ogni azione.",
"assertions": [
{
"text": "È menzionato il trattamento SG (rullato post-tempra) come alternativa a SV",
"type": "output_contains_keyword",
"keyword": "SG"
},
{
"text": "È spiegato come aumentare il precarico riduce σa",
"type": "output_contains_keyword",
"keyword": "precarico"
},
{
"text": "La risposta non suggerisce inutilmente di aumentare il diametro",
"type": "behavior",
"description": "Il progettista ha esplicitamente chiesto soluzioni senza cambio diametro"
},
{
"text": "Il meccanismo fisico è spiegato (σAS dipende da FSm/F0.2min per SG)",
"type": "output_contains_keyword",
"keyword": "σAS"
}
]
}
,
{
"id": 6,
"prompt": "Ho un coperchio in alluminio EN-AW 6082 su un carter in acciaio. Le viti M10 classe 8.8 vengono serrate a freddo (20°C) ma in esercizio il carter raggiunge 120°C. lK=30mm, DA=28mm, dh=11mm. FA_max=5000N statico. Che succede al precarico in esercizio e la vite regge?",
"expected_output": "La skill deve: (1) riconoscere il caso termico critico acciaio-alluminio (alpha_P alluminio ≈ 2,3e-5 vs alpha_S acciaio ≈ 1,15e-5), (2) calcolare la variazione ΔFVth con dT_P_K=100K, (3) verificare che il precarico residuo in esercizio FM_min - ΔFVth sia ancora sufficiente (FKerf). Se il precarico si azzera la giunzione apre. Deve anche verificare pG per alluminio (pG=300-450 N/mm²).",
"assertions": [
{
"text": "La variazione termica ΔFVth è calcolata e presentata",
"type": "output_contains_keyword",
"keyword": "termico"
},
{
"text": "Il coefficiente di dilatazione diverso tra alluminio e acciaio è menzionato",
"type": "output_contains_keyword",
"keyword": "dilatazione"
},
{
"text": "La verifica R10 usa pG corretto per alluminio (≤ 450 N/mm²)",
"type": "output_contains_keyword",
"keyword": "alluminio"
},
{
"text": "È valutato se il precarico residuo in esercizio è ancora sufficiente",
"type": "output_contains_keyword",
"keyword": "FM_min"
},
{
"text": "Se il precarico si riduce pericolosamente, la skill suggerisce contromisure (es. ridurre fZ, aumentare FM_min, usare rondella dura, serrare a caldo)",
"type": "behavior",
"description": "La skill deve proporre azioni correttive concrete al progettista se la verifica termica fallisce"
}
]
},
{
"id": 7,
"prompt": "Ho 4 viti M14 classe 10.9 su una flangia in acciaio che deve reggere contemporaneamente una forza assiale FA_tot = 60 kN e un momento torcente MT = 800 Nm attorno all'asse del giunto. Il raggio del cerchio viti è 50mm. lK=45mm, DA=42mm, dh=15mm. Le viti reggono?",
"expected_output": "La skill deve: (1) dividere FA_tot per N=4 viti → FA_bolt=15000N, (2) calcolare FQ_bolt = MT/(N·r_bc) = 800000/(4·50) = 4000N per vite, (3) eseguire il calcolo con FA_max_N=15000 e FQ_max_N=4000, (4) verificare R12 anti-scorrimento (critico per FQ). Deve dichiarare esplicitamente il calcolo per-vite.",
"assertions": [
{
"text": "FA_bolt = FA_tot/N = 15000 N è dichiarato esplicitamente",
"type": "output_contains_keyword",
"keyword": "15000"
},
{
"text": "FQ_bolt = 4000 N è calcolato dal momento torcente",
"type": "output_contains_keyword",
"keyword": "4000"
},
{
"text": "La verifica R12 anti-scorrimento è presente nel report",
"type": "output_contains_keyword",
"keyword": "R12"
},
{
"text": "Il numero di viti N=4 è usato nel calcolo per-vite",
"type": "output_contains_keyword",
"keyword": "4"
},
{
"text": "Lo script è eseguito con FQ_max_N e FA_max_N entrambi forniti",
"type": "output_contains_keyword",
"keyword": "FQ"
}
]
}
]
}