Documentazione
Nucleo di lavorazione CAM
Da un lavoro di produzione a NC e prove: pianificazione, taglierine, stock voxel con una fascia di volume rimanente e controlli di collisione certificati.
Tradotto automaticamente dall'inglese. Vedi l'originale in inglese
Cos'è il kernel CAM
Il kernel CAM in packages/core/src/cam/kernel (20 file sorgente, circa 5 260 righe) richiede un lavoro di produzione revisionato per lavorare l'NC più prove su quell'NC. Sceglie frese e dati di taglio, pianifica le operazioni dalle funzionalità CAD, esegue le strategie, pubblica il codice G, riproduce l'NC in modo indipendente rispetto al grezzo volumetrico e controlla il movimento del gruppo utensile per eventuali collisioni. La sua identità dell'algoritmo è cadcamfun-cam-kernel@1.
| Modulo | Ruolo |
|---|---|
| materiali | qualità del pezzo con i relativi dati di lavorabilità |
| frese | gruppi di strumenti e libreria predefinita (70 frese) |
| dati di taglio | velocità, avanzamenti, profondità, carico e deflessione per una fresa in un materiale |
| pianificatore | Caratteristiche CAD → operazioni ordinate con relative frese |
| eseguire | preparare/eseguire: strategie, posta, riproduzione NC indipendente, linea di stock, richieste e livello di rilascio |
| cinematica, testa | trunnion table (AC / BC) and tilting head (B about Y) |
| assemblaggio | il 3insieme dell'utensile D (zona di taglio, gambo, supporto) come profilo e il relativo solido di rivoluzione |
| collisione | controllo continuo di una mossa congiunta: certificata chiara, collisione o irrisolta |
| movimento | cinque assi simultanei: posizioni → pose del tavolo, ogni mossa divisa e controllata |
| azione | stock volumetrico come voxel con una staffa di volume rimanente |
| sdoganamento macchina | supporto e gambo contro il tavolo durante ogni movimento NC |
| convesso | distanza esatta tra scafi convessi (GJK) |
export const prepareJob: (job: ManufacturingJob) => CamResult<PreparedJob>
export const executeJob: (prepared: PreparedJob) => CamResult<CamArtifact>
export const runJob: (job: ManufacturingJob) => CamResult<CamArtifact> // prepare, then execute
export const planOnly: (job: ManufacturingJob) => CamResult<{ operations; notes; unmachined }>
export const KERNEL_ALGORITHM = "cadcamfun-cam-kernel@1" Pianificazione basata sulle funzionalità
Il pianificatore sequenzia una parte prismatica come fa un programmatore CAM, dalle caratteristiche che realmente ha la storia parametrica:
- affrontare la parte superiore delle azioni
- sbozzato attorno ai contorni e all'interno delle tasche (adattativo o di contorno, con un margine di parete)
- lamature, foratura a punti, foratura o alesatura elicoidale, svasatori, fresatura di filetti
- finire le pareti
- rompere i bordi superiori con uno smusso 2D quando viene richiesta la sbavatura
- 3D sgrossatura e finitura di corpi a forma libera
Un corpo senza una storia delle caratteristiche (una mesh, un booleano di primitive, una parte scolpita) viene lavorato con le strategie di superficie 3D. La pianificazione sceglie solo strumenti e regioni; i dati di taglio vengono calcolati per operazione durante l'esecuzione del lavoro. Una corsa reale su un grezzo POM-C da 44 × 44 × 11 mm ha previsto tre operazioni: face con facemill-50, surface-rough con bemolle-16 e surface-finish con palla-10, rilasciato come verified-program con un tempo di ciclo di 149 s. Quella corsa è attirata manifattura nativa.
Frese e assemblaggio dell'utensile
The default library has 70 cutters of nine kinds: flat (Ø1–16, plus aluminium ZrN variants), ball (Ø1–10), bull nose, face mill, spot drill, chamfer mill, engraver, thread mills (P0.5–P2) and drills. A cutter's assembly is its half-section profile from the tip, split into cutting zone, shank and holder.
{"id":"flat-6","name":"End mill Ø6 3F carbide ALTIN","kind":"flat","diameter":6,"flutes":3,
"material":"carbide","coating":"altin","fluteLength":15,"shankDiameter":6,"stickout":29,
"holder":{"diameter":40,"length":50}}
{"points":[{"r":0,"z":0},{"r":3,"z":0},{"r":3,"z":15},{"r":3,"z":29},{"r":20,"z":29},{"r":20,"z":79},{"r":0,"z":79}],
"parts":["cutting","cutting","shank","holder","holder","holder"],"length":79,"assumedHolder":false} Stock Voxel e fascia di volume rimanente
Stock è una griglia di voxel. Dopo una serie di mosse ogni voxel è materiale, rimosso certo (l'intero cubo giaceva all'interno della taglierina in una posizione campionata) o rimosso possibile (il suo cubo rientrava nell'espansione del taglierino: mezza diagonale più metà della spaziatura del campione). Il volume rimanente è quindi una parentesi: materiale non eventualmente rimosso viene definitivamente lasciato, materiale non sicuramente rimosso può rimanere. Un voxel non viene mai definito rimosso senza che un taglierino campionato lo copra. Gli strumenti inclinati portano il loro asse per punto di punta, quindi le spazzate a cinque assi utilizzano gli stessi due test.
export const voxelStock: (min: Vec3, max: Vec3, voxel: number) => VoxelStock // sample step = voxel / 2
export const removeTipPath: (stock: VoxelStock, cutter: Cutter, path: ReadonlyArray<Vec3>, axes?: ReadonlyArray<Vec3>) => void
export const remainingVolume: (stock: VoxelStock) => { lower: number; upper: number } const s = voxelStock({ x: 0, y: 0, z: -10 }, { x: 40, y: 30, z: 0 }, 0.5)
// 80 × 60 × 20 = 96 000 voxels, step 0.25
removeTipPath(s, flat6, path) // slot y = 15, x 8→32, then the ring 8..32 × 8..22, all at z −3
remainingVolume(s) // {"lower":9749.5,"upper":10740} 124 ms
// stock 12 000 mm³: between 1 260 and 2 250.5 mm³ removed La staffa si restringe con la dimensione del voxel: dimezzando il voxel si dimezza la fascia allentata lungo ogni parete.
Controllo continuo delle collisioni
Un controller sposta le sue articolazioni in modo lineare tra due punti e tra di essi può verificarsi uno scontro. checkMotion checks the whole move: probes (the holder and shank, each non-cutting profile segment enclosed by a capsule) against obstacles (the table envelope and the part box). The lower bound is a Lipschitz argument: a signed distance changes by at most the displacement of the moving solid, so the move is bisected until every interval is proven clear by margin, viene campionata una sovrapposizione o la profondità (12) si esaurisce.
| Verdetto | Senso |
|---|---|
| chiaro | su ogni intervallo il limite inferiore del gioco è almeno il margine |
| collisione | un punto della sonda campionato si trova all'interno di un ostacolo; at dice dove lungo lo spostamento (da 0 a 1) |
| irrisolto | non è stato possibile dimostrare chiaramente un intervallo all'interno della profondità e non è stata trovata alcuna sovrapposizione |
// rapid along X at nose z 60
{"verdict":"clear","clearance":26.875,"evaluations":2}
// plunge from nose z 60 to nose z 0
{"verdict":"collision","clearance":-10,"at":1,"evaluations":2}
// standing poses
z 60 {"verdict":"clear","clearance":46.875,"evaluations":2}
z 20 {"verdict":"clear","clearance":6.875,"evaluations":2}
z 10 {"verdict":"unresolved","clearance":-3.125,"evaluations":4097}
z 5 {"verdict":"collision","clearance":-5,"at":0,"evaluations":1} Il rapporto rapido 26.875 invece del rapporto permanente 46.875 perché un controllo mobile certifica un limite inferiore: sottrae lo spostamento su ogni intervallo che non ha ulteriormente suddiviso. La posa naso-z-10 mostra il perché unresolved esiste: il limite inferiore certificato è negativo (l'inviluppo potrebbe sovrapporsi) ma all'interno non è presente alcun punto campionato, quindi dopo 4 097 valutazioni il controllore riporta ciò che può provare invece di indovinare. Le buste sono conservative: una capsula racchiude il suo segmento di supporto, quindi si può segnalare una sovrapposizione dove lo strumento reale si avvicinerebbe solo.
Risoluzione dei problemi
| Sintomo | Causa | Aggiustare |
|---|---|---|
| stato del lavoro non riuscito: versione dello schema del lavoro non supportata | lavoro creato per uno schema kernel diverso | ricostruire il lavoro con la schemaVersion corrente |
| fascia di volume rimanente ampia | voxel troppo grossolano per le caratteristiche | utilizzare un voxel più piccolo; l'allentamento è di circa un voxel lungo ciascuna parete |
| collisione su una rapida | il supporto o la busta con gambo raggiungono il tavolo o la parte | alzare il piano di gioco o accorciare la sporgenza |
| irrisolto in un lungo movimento rotatorio | il limite di Lipschitz è debole lontano dal centro di rotazione | dividere la mossa o accettare il margine che la pedina potrebbe dimostrare |
| operazione pianificata con una taglierina inaspettata | idoneità della taglierina al materiale e alla rigidità | passa una libreria di utensili con la taglierina che desideri |