Documentación
Núcleo de mecanizado CAM
Desde un trabajo de fabricación hasta NC y evidencia: planificación, cortadores, stock de vóxeles con un soporte de volumen restante y comprobaciones de colisiones certificadas.
Traducido automáticamente del inglés. Ver el original en inglés
Qué es el núcleo CAM
El núcleo CAM en packages/core/src/cam/kernel (20 archivos fuente, aproximadamente 5 260 líneas) requiere un trabajo de fabricación revisado para mecanizar NC más evidencia sobre ese NC. Elige cortadores y datos de corte, planifica operaciones a partir de las funciones de CAD, ejecuta las estrategias, publica códigos G, reproduce el NC de forma independiente frente al stock volumétrico y verifica el movimiento del conjunto de herramientas para detectar colisiones. Su identidad algorítmica es cadcamfun-cam-kernel@1.
| Módulo | Role |
|---|---|
| materiales | grados de piezas con sus datos de maquinabilidad. |
| cortadores | conjuntos de herramientas y la biblioteca predeterminada (70 cortadores) |
| datos-de-corte | velocidades, avances, profundidades, carga y deflexión de un cortador en un material |
| planificador | Funciones CAD → operaciones ordenadas con sus cortadores |
| ejecutar | preparar/ejecutar: estrategias, publicación, repetición NC independiente, linaje de acciones, reclamos y nivel de liberación |
| cinemática, cabeza | trunnion table (AC / BC) and tilting head (B about Y) |
| asamblea | el conjunto de herramienta 3D (zona de corte, mango, soporte) como perfil y su sólido de revolución |
| colisión | comprobación continua de un movimiento conjunto: libre certificado, colisión o no resuelto. |
| movimiento | cinco ejes simultáneos: ubicaciones → posturas de mesa, cada movimiento dividido y verificado |
| existencias | stock volumétrico como vóxeles con un soporte de volumen restante |
| liquidación de máquinas | soporte y vástago contra la mesa en cada movimiento NC |
| convexo | distancia exacta entre cascos convexos (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" Planificación basada en funciones
El planificador secuencia una pieza prismática como lo hace un programador CAM, a partir de las características que realmente tiene el historial paramétrico:
- frente a la parte superior de las acciones
- rugoso alrededor de los contornos y dentro de los bolsillos (adaptable o de contorno, con un margen de pared)
- avellanadores, taladrado por puntos, taladrado o mandrinado helicoidal, avellanadores, fresado de roscas
- terminar las paredes
- rompa los bordes superiores con un chaflán 2D cuando sea necesario desbarbar
- 3Desbaste y acabado de cuerpos de forma libre
Un cuerpo sin un historial de características (una malla, un booleano de primitivas, una pieza esculpida) se mecaniza con las estrategias de superficie 3D. La planificación elige únicamente herramientas y regiones; Los datos de corte se calculan por operación cuando se ejecuta el trabajo. Una ejecución real en una pieza en bruto de POM-C de 44 × 44 × 11 mm planificó tres operaciones: face con facemill-50, surface-rough con plano-16 y surface-finish con bola-10, lanzada como verified-program con un tiempo de ciclo de 149 s. Esa carrera está dibujada fabricación nativa.
Cortadores y conjunto de herramientas.
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 de voxel y el grupo de volumen restante
Stock es una cuadrícula de vóxeles. Después de una serie de movimientos, cada vóxel es material, eliminado seguro (todo su cubo yacía dentro del cortador en alguna posición de muestreo) o eliminado posible (su cubo quedó dentro de la expansión del cortador: media diagonal más la mitad del espacio entre muestras). El volumen restante es, por tanto, un soporte: el material que no es posible eliminar se deja definitivamente, el material que no es posible eliminar se puede dejar. Un vóxel nunca se elimina sin que un cortador muestreado lo cubra. Las herramientas inclinadas llevan su eje por punto de punta, por lo que los barridos de cinco ejes utilizan las mismas dos pruebas.
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 El soporte se estrecha con el tamaño del vóxel: al dividir el vóxel por la mitad, se reduce a la mitad la banda floja a lo largo de cada pared.
Comprobación continua de colisiones
Un controlador mueve sus articulaciones linealmente entre dos puntos y puede producirse un choque entre ellos. 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, se muestrea una superposición o se agota la profundidad (12).
| Veredicto | Significado |
|---|---|
| claro | en cada intervalo el límite inferior del espacio libre es al menos el margen |
| colisión | un punto de sonda muestreado se encuentra dentro de un obstáculo; en dice dónde a lo largo del movimiento (0 a 1) |
| irresoluto | no se pudo demostrar que un intervalo fuera claro dentro de la profundidad y no se encontró ninguna superposición. |
// 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} Los informes rápidos 26.875 en lugar de los permanentes 46.875 porque un cheque en movimiento certifica un límite inferior: resta el desplazamiento en cada intervalo que no subdividió más. La pose de la nariz-z-10 muestra por qué unresolved existe: el límite inferior certificado es negativo (el sobre puede superponerse) pero no hay ningún punto de muestra dentro, por lo que después de 4 097 evaluaciones, el verificador informa lo que puede probar en lugar de adivinar. Los sobres son conservadores: una cápsula encierra su segmento de soporte, por lo que se puede informar una superposición donde la herramienta real solo se acercaría.
Solución de problemas
| Síntoma | Causa | Arreglar |
|---|---|---|
| error en el estado del trabajo: versión del esquema del trabajo no compatible | trabajo creado para un esquema de kernel diferente | reconstruir el trabajo con la versión de esquema actual |
| soporte de volumen restante ancho | vóxel demasiado grueso para las características | utilice un vóxel más pequeño; la holgura es aproximadamente un vóxel a lo largo de cada pared |
| colisión en un rápido | el sobre del soporte o vástago llega a la mesa o pieza. | eleve el plano libre o acorte el saliente. |
| sin resolver en un largo movimiento giratorio | el límite de Lipschitz es débil lejos del centro de rotación. | dividir el movimiento, o aceptar el margen que el corrector podría demostrar |
| operación planificada con un cortador inesperado | idoneidad del cortador para el material y rigidez | pasar una biblioteca de herramientas con el cortador que desee |