Saltar al contenido
CADCAMFUN
Documentos

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óduloRole
materialesgrados de piezas con sus datos de maquinabilidad.
cortadoresconjuntos de herramientas y la biblioteca predeterminada (70 cortadores)
datos-de-cortevelocidades, avances, profundidades, carga y deflexión de un cortador en un material
planificadorFunciones CAD → operaciones ordenadas con sus cortadores
ejecutarpreparar/ejecutar: estrategias, publicación, repetición NC independiente, linaje de acciones, reclamos y nivel de liberación
cinemática, cabezatrunnion table (AC / BC) and tilting head (B about Y)
asambleael conjunto de herramienta 3D (zona de corte, mango, soporte) como perfil y su sólido de revolución
colisióncomprobación continua de un movimiento conjunto: libre certificado, colisión o no resuelto.
movimientocinco ejes simultáneos: ubicaciones → posturas de mesa, cada movimiento dividido y verificado
existenciasstock volumétrico como vóxeles con un soporte de volumen restante
liquidación de máquinassoporte y vástago contra la mesa en cada movimiento NC
convexodistancia exacta entre cascos convexos (GJK)
Puntos de entrada (execute.ts)
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:

  1. frente a la parte superior de las acciones
  2. rugoso alrededor de los contornos y dentro de los bolsillos (adaptable o de contorno, con un margen de pared)
  3. avellanadores, taladrado por puntos, taladrado o mandrinado helicoidal, avellanadores, fresado de roscas
  4. terminar las paredes
  5. rompa los bordes superiores con un chaflán 2D cuando sea necesario desbarbar
  6. 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.

flat-6 y asambleaProfile(plano-6) - salida real
{"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}
conjunto plano 6 sobre su barrido Arrastrar para orbitar · desplazarse para hacer zoom · arrastrar con el botón derecho para desplazarse
El perfil de montaje giró: flautas r 3 de z 0 a 15 (ámbar), vástago a z 29, soporte r 20 a z 79. Incline al inicio de la ranura de abajo, 3 mm hacia la parte superior original.

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.

stock.ts
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 }
Ranura y anillo de 3 mm de profundidad con 6 plano: rendimiento real
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
Stock repetido (límite exterior) Arrastrar para orbitar · desplazarse para hacer zoom · arrastrar con el botón derecho para desplazarse
Superficie superior de cada columna de vóxel que ni siquiera es posible eliminar, del tramo anterior: la ranura y el anillo están cortados 3 mm de profundidad (un vóxel de holgura se muestra como escalones a lo largo de las paredes).

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).

VeredictoSignificado
claroen cada intervalo el límite inferior del espacio libre es al menos el margen
colisiónun punto de sonda muestreado se encuentra dentro de un obstáculo; en dice dónde a lo largo del movimiento (0 a 1)
irresolutono se pudo demostrar que un intervalo fuera claro dentro de la profundidad y no se encontró ninguna superposición.
flat-6 en una escena lineal sobre tableBox(20, 15, −10, 200, 100, 20) - salida real
// 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íntomaCausaArreglar
error en el estado del trabajo: versión del esquema del trabajo no compatibletrabajo creado para un esquema de kernel diferentereconstruir el trabajo con la versión de esquema actual
soporte de volumen restante anchovóxel demasiado grueso para las característicasutilice 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ápidoel 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 giratorioel 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 inesperadoidoneidad del cortador para el material y rigidezpasar una biblioteca de herramientas con el cortador que desee