Pular para o conteúdo
CADCAMFUN
Docs

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óduloPapel
materiaisclasses da peça com seus dados de usinabilidade
cortadoresmontagens de ferramentas e a biblioteca padrão (70 cortadores)
dados de cortevelocidades, avanços, profundidades, carga e deflexão para uma fresa em um material
planejadorRecursos CAD → operações ordenadas com suas fresas
executarpreparar/executar: estratégias, pós, replay NC independente, linhagem de estoque, reivindicações e nível de liberação
cinemática, cabeçatrunnion table (AC / BC) and tilting head (B about Y)
conjuntoo conjunto da ferramenta 3D (zona de corte, haste, suporte) como perfil e seu sólido de revolução
colisãoverificação contínua de um movimento conjunto: certificado claro, colisão ou não resolvido
movimentocinco eixos simultâneos: locais → poses de mesa, cada movimento dividido e verificado
estoqueestoque volumétrico como voxels com uma faixa de volume restante
liberação de máquinasuporte e haste contra a mesa em cada movimento NC
convexodistância exata entre cascos convexos (GJK)
Pontos 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"

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:

  1. enfrentar o topo das ações
  2. áspero nos contornos e no interior dos bolsos (adaptável ou contorno, com margem de parede)
  3. escareadores, furação pontual, furação ou mandrilamento helicoidal, escareadores, fresamento de roscas
  4. terminar as paredes
  5. quebre as bordas superiores com um chanfro 2D quando for solicitado o rebarbamento
  6. 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.

flat-6 e assemblyProfile(flat-6) — saída 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}
montagem plana6 sobre sua varredura Arraste para orbitar · role para ampliar · arraste com o botão direito para deslocar
O perfil de montagem girou: canais r 3 de z 0 a 15 (âmbar), haste para z 29, suporte r 20 para z 79. Ponta no início do slot abaixo, 3 mm na parte superior do estoque.

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.

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 }
Ranhura e anel com 3 mm de profundidade com plano 6 — saída 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
Estoque reproduzido (limite externo) Arraste para orbitar · role para ampliar · arraste com o botão direito para deslocar
Superfície superior de cada coluna de voxel que nem sequer é possivelmente removida, da passagem acima: a ranhura e o anel são cortados com 3 mm de profundidade (um voxel de folga aparece como degraus ao longo das paredes).

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.

VeredictoSignificado
claroem cada intervalo o limite inferior da folga é pelo menos a margem
colisãoum ponto de sonda amostrado está dentro de um obstáculo; at diz em que ponto do movimento (0 para 1)
não resolvidoum intervalo não pôde ser comprovado dentro da profundidade e nenhuma sobreposição foi encontrada
flat-6 em uma cena linear sobre tableBox(20, 15, −10, 200, 100, 20) — saída 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}

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

SintomaCausaConsertar
status do trabalho falhou: versão do esquema do trabalho não suportadatrabalho criado para um esquema de kernel diferentereconstruir o trabalho com o esquemaVersion atual
faixa de volume restante amplavoxel muito grosso para os recursosuse um voxel menor; a folga é de cerca de um voxel ao longo de cada parede
colisão em uma rápidasuporte ou envelope com haste atinge a mesa ou peçaaumentar o plano de folga ou encurtar o stickout
não resolvido em um movimento rotativo longoo limite de Lipschitz é fraco longe do centro de rotaçãodividir o movimento ou aceitar a margem que o verificador poderia provar
operação planejada com um cortador inesperadoadequação da fresa ao material e rigidezpasse uma biblioteca de ferramentas com a fresa que você deseja