Documentação
Núcleo de usinagem CAM
De um trabalho de fabricação a NC e evidências: planejamento, cortadores, estoque de voxel com suporte de volume restante e verificações de colisão certificadas.
Traduzido automaticamente do inglês. Ver o original em inglês
O que é o kernel CAM
O kernel CAM em packages/core/src/cam/kernel (20 arquivos de origem, cerca de 5 260 linhas) leva um trabalho de fabricação revisado para usinar NC, além de evidências sobre esse NC. Ele escolhe cortadores e dados de corte, planeja operações a partir dos recursos CAD, executa as estratégias, publica o código G, reproduz o NC de forma independente em relação ao estoque volumétrico e verifica o movimento do conjunto da ferramenta em busca de colisões. Sua identidade de algoritmo é cadcamfun-cam-kernel@1.
| Módulo | Papel |
|---|---|
| materiais | classes da peça com seus dados de usinabilidade |
| cortadores | montagens de ferramentas e a biblioteca padrão (70 cortadores) |
| dados de corte | velocidades, avanços, profundidades, carga e deflexão para uma fresa em um material |
| planejador | Recursos CAD → operações ordenadas com suas fresas |
| executar | preparar/executar: estratégias, pós, replay NC independente, linhagem de estoque, reivindicações e nível de liberação |
| cinemática, cabeça | trunnion table (AC / BC) and tilting head (B about Y) |
| conjunto | o conjunto da ferramenta 3D (zona de corte, haste, suporte) como perfil e seu sólido de revolução |
| colisão | verificação contínua de um movimento conjunto: certificado claro, colisão ou não resolvido |
| movimento | cinco eixos simultâneos: locais → poses de mesa, cada movimento dividido e verificado |
| estoque | estoque volumétrico como voxels com uma faixa de volume restante |
| liberação de máquina | suporte e haste contra a mesa em cada movimento NC |
| convexo | distância exata 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" Planejamento baseado em recursos
O planejador sequencia uma peça prismática da mesma forma que um programador CAM, a partir dos recursos que o histórico paramétrico realmente possui:
- enfrentar o topo das ações
- áspero nos contornos e no interior dos bolsos (adaptável ou contorno, com margem de parede)
- escareadores, furação pontual, furação ou mandrilamento helicoidal, escareadores, fresamento de roscas
- terminar as paredes
- quebre as bordas superiores com um chanfro 2D quando for solicitado o rebarbamento
- 3Desbaste e acabamento de corpos de formato livre
Um corpo sem histórico de recurso (uma malha, um booleano de primitivos, uma peça esculpida) é usinado com as estratégias de superfície 3D. O planejamento escolhe apenas ferramentas e regiões; os dados de corte são calculados por operação quando o trabalho é executado. Uma execução real em um espaço em branco POM-C de 44 × 44 × 11 mm planejou três operações: face com facemill-50, surface-rough com flat-16 e surface-finish com bola-10, lançado como verified-program com um tempo de ciclo de 149 s. Essa corrida é desenhada fabricação nativa.
Cortadores e montagem da ferramenta
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} Estoque Voxel e faixa de volume restante
Stock é uma grade voxel. Após uma série de movimentos, cada voxel é material, removido com certeza (seu cubo inteiro estava dentro do cortador em alguma posição amostrada) ou removido possível (seu cubo ficou dentro da expansão do cortador: meia diagonal mais metade do espaçamento da amostra). O volume restante é, portanto, um colchete: o material que não foi possivelmente removido é definitivamente deixado, o material que não foi certamente removido pode ser deixado. Um voxel nunca é considerado removido sem que um cortador amostrado o cubra. As ferramentas inclinadas carregam seus eixos por ponto de ponta, portanto as varreduras de cinco eixos usam os mesmos dois testes.
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 O colchete diminui com o tamanho do voxel: reduzir o voxel pela metade reduz a faixa frouxa ao longo de cada parede.
Verificação contínua de colisão
Um controlador move suas juntas linearmente entre dois pontos e pode ocorrer um conflito entre eles. 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, uma sobreposição é amostrada ou a profundidade (12) acaba.
| Veredicto | Significado |
|---|---|
| claro | em cada intervalo o limite inferior da folga é pelo menos a margem |
| colisão | um ponto de sonda amostrado está dentro de um obstáculo; at diz em que ponto do movimento (0 para 1) |
| não resolvido | um intervalo não pôde ser comprovado dentro da profundidade e nenhuma sobreposição foi encontrada |
// 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} O rápido relata 26.875 em vez do permanente 46.875 porque uma verificação móvel certifica um limite inferior: ele subtrai o deslocamento em cada intervalo que não subdividiu mais. A pose nariz-z-10 mostra o porquê unresolved existe: o limite inferior certificado é negativo (o envelope pode se sobrepor), mas nenhum ponto amostrado está dentro dele, portanto, após 4 097 avaliações, o verificador relata o que pode provar em vez de adivinhar. Os envelopes são conservadores: uma cápsula envolve seu segmento de suporte, de modo que uma sobreposição pode ser relatada onde a ferramenta real apenas se aproximaria.
Solução de problemas
| Sintoma | Causa | Consertar |
|---|---|---|
| status do trabalho falhou: versão do esquema do trabalho não suportada | trabalho criado para um esquema de kernel diferente | reconstruir o trabalho com o esquemaVersion atual |
| faixa de volume restante ampla | voxel muito grosso para os recursos | use um voxel menor; a folga é de cerca de um voxel ao longo de cada parede |
| colisão em uma rápida | suporte ou envelope com haste atinge a mesa ou peça | aumentar o plano de folga ou encurtar o stickout |
| não resolvido em um movimento rotativo longo | o limite de Lipschitz é fraco longe do centro de rotação | dividir o movimento ou aceitar a margem que o verificador poderia provar |
| operação planejada com um cortador inesperado | adequação da fresa ao material e rigidez | passe uma biblioteca de ferramentas com a fresa que você deseja |