跳到内容
CADCAMFUN
文档

文档

CAM加工内核

从制造工作到数控和证据:规划、切割机、带有剩余体积支架的体素库存以及经过认证的碰撞检查。

从英文自动翻译。 查看英文原文

CAM 内核是什么

CAM 内核位于 packages/core/src/cam/kernel (20 源文件,大约 5 260 行)采用修订后的制造作业来加工 NC 以及有关该 NC 的证据。它选择刀具和切削数据,根据 CAD 功能规划操作,运行策略,发布 G 代码,根据体积毛坯独立重播 NC,并检查刀具组件的运动是否发生碰撞。其算法恒等式为 cadcamfun-cam-kernel@1.

模块角色
材料工件等级及其可加工性数据
刀具刀具组件和默认库(70 刀具)
切削数据材料中刀具的速度、进给、深度、负载和偏转
规划师CAD 功能 → 使用刀具进行有序操作
执行准备/运行:策略、发布、独立 NC 重播、库存谱系、声明和发布级别
运动学、头部trunnion table (AC / BC) and tilting head (B about Y)
集会3D 刀具组件(切削区域、刀柄、刀柄)作为轮廓及其旋转实体
碰撞连续检查联合动作:证明清晰、碰撞或未解决
运动同步五轴:位置→工作台姿势,每个移动分开并检查
库存体积库存作为带有剩余体积支架的体素
机器间隙每次 NC 移动时,刀柄和刀柄都靠在工作台上
凸的凸包之间的精确距离 (GJK)
入口点(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"

基于特征的规划

规划人员按照 CAM 程序员的方式,根据参数历史记录的实际特征对棱柱形零件进行排序:

  1. 面对股票顶部
  2. 轮廓周围和口袋内部粗糙(自适应或轮廓,有壁余量)
  3. 沉头孔、点钻、钻孔或螺旋镗孔、埋头孔、螺纹铣削
  4. 完成墙壁
  5. 当要求去毛刺时,用 2D 倒角打破顶部边缘
  6. 3D 自由曲面的粗加工和精加工

没有特征历史的实体(网格、基元布尔值、雕刻零件)是使用 3D 曲面策略加工的。规划仅选择工具和区域;作业运行时,会计算每个操作的切削数据。在 44 × 44 × 11 mm POM-C 毛坯上的实际运行计划了三个操作: face 使用面铣刀-50, surface-rough 与平16和 surface-finish 与球-10,发布为 verified-program 周期时间为 149 秒。那次跑步被吸引了 本土制造.

刀具和刀具组件

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 和 assemblyProfile(flat-6) — 真实输出
{"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}
平面-6 装配在其扫描范围内 拖动进行轨道旋转·滚动进行缩放·右键拖动进行平移
装配轮廓旋转:槽 r 3 从 z 0 到 15(琥珀色),柄到 z 29,刀柄 r 20 到 z 79。在下面的槽口开始处进行提示,进入枪托顶部 3 毫米。

体素库存和剩余体积支架

库存是一个体素网格。经过一组移动后,每个体素都是物质的, 删除确定 (它的整个立方体位于切割器内部的某个采样位置)或 删除了可能的 (它的立方体位于切割器的扩展范围内:一半对角线加上一半样本间距)。因此,剩余体积是一个括号:不可能去除的材料肯定会留下,而不一定会去除的材料可能会留下。如果没有采样切割器覆盖体素,则永远不会将其称为已移除。倾斜工具的每个尖端点都有其轴,因此五轴扫描使用相同的两个测试。

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 }
槽和环 3 mm 深,带平面 6 — 实际输出
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
重播股票(外界) 拖动进行轨道旋转·滚动进行缩放·右键拖动进行平移
每个体素柱的顶部表面甚至不可能从上面的运行中移除:槽和环被切割 3 毫米深(一个松弛体素显示为沿着墙壁的台阶)。

支架随着体素大小而变窄:将体素减半将使沿每面墙的松弛带减半。

连续碰撞检查

控制器在两点之间线性移动其关节,它们之间可能会发生冲突。 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,对重叠进行采样,或者深度 (12) 耗尽。

判决意义
清除在每个间隔上,间隙的下限至少为余量
碰撞采样的探测点位于障碍物内部; at 表示移动的位置(0 到 1)
未解决的深度内无法证明清晰的区间,且未发现重叠
tableBox(6, 20, −15, 10, 200, 100) 上的线性场景中的 flat-20 — 真实输出
// 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}

快速报告 26.875 而不是站立的 46.875,因为移动检查证明了下限:它减去了未进一步细分的每个间隔上的位移。鼻子-z-10 姿势说明了原因 unresolved 存在:经过认证的下界为负(包络可能重叠),但内部没有采样点,因此在 4 097 评估之后,检查器报告它可以证明什么,而不是猜测。封套是保守的:胶囊封闭了其固定器部分,因此可以报告重叠,而真正的工具只能接近。

故障排除

症状原因使固定
作业状态失败:作业架构版本不受支持为不同的内核模式构建的作业使用当前 schemaVersion 重建作业
剩余音量括号宽体素对于特征来说太粗糙使用较小的体素;松弛部分大约是沿每面墙的一个体素
快速碰撞支架或柄套到达工作台或零件提高间隙平面或缩短伸出量
长距离旋转运动未解决远离旋转中心时,利普希茨边界很弱分开移动,或接受检查员可以证明的保证金
计划使用意外刀具进行手术刀具对材料和刚性的适应性传递带有您想要的刀具的刀具库