跳到内容
CADCAMFUN
文档

文档

设置和保存的程序

捕获库存、工作框架、刀具分配、有序操作以及用于生成程序的源证据。

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

设置是制造环境

制造设置定义了零件相对于库存、夹具和工具的放置方式。 cam.ManufacturingSetup 记录标识符、修订版本、刚性工作框架、世界坐标库存和夹具包络以及工具组件。本机内核接受 CAD 快照和资源,并生成有序的操作结果和一个发布的程序。

保存的应用程序使用 CamProgramDocument,便携式文档还存储在 Toolpath.data。该合同保留 NC 及其程序表示以及重新打开工作空间所需的设置、库存和图纸快照。可选操作保留单独的操作标识;可选的内核数据保留本机源证据。

便携式文件合同

文档将其自身标识为 format: "cadcamfun-cam" 和 version: 1。必填字段有 gcode, program, 发电机 settings, printer 额外的, stock,以及一个自由形式的 drawing 快照。可选字段有 operations, kernelArtifact, 和 kernelRequest.

每个存储操作都有一个唯一的 id, name, gcode, 和 program,带有可选工具、设置和源元素标识符。保留其 NC 和身份可以使操作往返独立于其显示标签。

操作顺序及组成

combineCamOperations 保留操作秩序。它使用操作标识符命名工具路径标识符,在提供时使用显式操作工具,并在存在多个操作时为显示名称添加前缀。组合程序采用来自第一次操作的单位和工件偏移。

对于单个操作,组合NC就是原文。对于多个操作,助手将其现有 NC 部分与操作注释连接起来。该帮助程序不会将所有部分重新发布到单个控制器程序中。本机内核是生成有序操作并发出一个集成程序的途径。

编写预生成部分的调用者必须确保兼容的单位、零点偏移、刀具编号、标题和程序结尾。成功的文档组合证明了其存储部分的顺序和一致性;它不添加机器清除证据。

生成并保存

  1. 捕获绘图元素和待加工的毛坯。选择材料、机器、工具、工件偏置和质量控制。
  2. 称呼 POST /api/toolpaths/manufacture 和 schemaVersion: 1、工作身份、名称和捕获的元素。按加工顺序明确提供操作或允许内核对其进行计划。
  3. 检查返回的结果、问题、个人索赔和 release。工件可以是预览的或被阻止的;收到结果并不意味着输出已验证。
  4. 建立一个 CamProgramDocument 其 G 代码、程序、工件和捕获的请求描述相同的结果。通过刀具路径创建或更新端点将其与该 G 代码一起保存。

制造端点评估提供的快照,而无需编写绘图或创建刀具路径。发电机 /generate 是一个单独的设置驱动路径,还可以为便携式文档提供 NC。

持久性验证

sidecar 通过格式识别可移植文档,并在保存之前解码完整模式。文档的 G 代码必须与刀具路径行的 G 代码匹配。操作标识符必须是唯一的,并且它们的有序组合必须重现保存的文本。 sidecar 重新解析操作 NC 以重建程序移动,而不是信任客户端提供的移动数据。

对于具有捕获请求的新本机工件,sidecar 会重新运行该请求并比较生成的工件、程序和原始 NC。失败或阻塞的结果、更改的工件以及不匹配的文本将被拒绝。没有捕获请求的新提供的工件将被删除,除非它是已保留在行上的未更改的工件。

当提供的源元素和库存与关联的存储工程图匹配时,该服务将计算工程图修订摘要。客户无法提供值得信赖的 sourceRevision 或任意验证声明。保存的修订由服务派生或仅为同一现有工件保留。

编辑 NC 并保留证据

更新可以取代 NC,同时发送未更改的先前便携式文档。该服务识别该情况,根据新文本重建已解析的程序,并删除不再匹配的操作和本机源证据。不一致的新文档会被拒绝,而不是默默地合并不相关的程序。

普通自由形式刀具路径数据仍然受支持。对 NC 的更改会删除不再匹配的陈旧本机工件元数据。客户提供 verification 和 response 字段不会成为可信的本地证据。

验证实现是 apps/sidecar/src/services/cam-program.ts; runKernelRequest, prepareCamProgramData, 和 drawingRevision 共享生成和保存所使用的相同请求适配器和身份逻辑。

保存的程序可以包含从重复刀具路径生成的子程序。刀具路径可以共享子程序的规则在 凸轮页面.

刚性工作框架

A WorkFrame 有原点和 X/Y/Z 轴。 validateWorkFrame 需要有限坐标、单位轴、成对正交性和数值公差内的右手方向。 workToWorld 应用框架; worldToWork 项目回来。无效帧、无效点和数字溢出会产生范围错误。

validateSetup 还检查非空设置标识符、非负安全整数修订、正体积有限包络、唯一夹具/工具标识符以及正有限刀具和刀架尺寸。切割长度不得超过伸出量。验证返回特定于字段的问题,以便调用者可以识别需要更正的值。

分度工作台加工

cam/indexing.ts 求解索引方向 table-AC 和 table-BC 布局。它将选定的工作平面法线旋转到机器 +Z 上,遵守旋转限制,并且更喜欢较小的可到达倾斜。程序点穿过工作框架和工作台绕机器枢轴旋转。

该适配器对带有固定刀具轴的工作台分度进行建模。倾斜头、控制器倾斜平面循环和同步五轴运动是独立的功能。旋转位置为度数;框架轴仍然是单位向量。

共享设置类型

ManufacturingSetup, WorkFrame, ToolAssembly, validateSetup, validateWorkFrame, workToWorld, 和 worldToWork 是通过出口 cam。便携式操作和文档模式导出自 @cadcamfun/api,这使得它们可用于 sidecar 持久性和桌面恢复逻辑。

在桌面上重新打开

saved-program.ts 捕获当前设置、库存、图纸以及正在保存的精确 NC。仅当其 NC 和哈希与这些字节匹配时,它才会保留内核工件。恢复时,它检查存储的工件和版本,恢复兼容的操作结果,重置重播验证,加载编辑器,并从快照恢复生成器和库存控制。

当只有普通 G 代码可用时,桌面会对其进行解析并显示。成功打开文本不会重新创建丢失的生成请求或升级程序的证据级别。

将源和结果放在一起

更改几何形状、库存、刀具尺寸、工作框架、机器、材料或操作顺序后重新生成。保留源快照以实现可重复性,并将更改的 NC 文件视为需要自己分析的新输出。源版本检查和工件重放可防止将早期结果作为不同程序字节的证据。

评估捕获的设置

快照适配器是本机制造请求的公共边界。这个独立的示例捕获了聚合物毛坯和稍大的库存盒,然后返回工件的实际发布级别。它既不写入绘图也不写入刀具路径。

从编辑器坐标到本地作业
import { cam } from "@cadcamfun/core"

const prepared = cam.kernel.jobOfSnapshot({
  schemaVersion: 1, id: "blank-job", name: "Blank", material: "POM",
  elements: [{ id: "blank", type: "cube", x: 20, y: 20, z: 5,
    width: 40, height: 40, depth: 10 }],
  stock: { x: 20, y: 20, width: 44, height: 44, depth: 11 },
  resolution: 0.5
})
if (prepared.status === "failed") throw new Error(JSON.stringify(prepared.issues))
const result = cam.kernel.runJob(prepared.value)
if (result.status === "failed") throw new Error(JSON.stringify(result.issues))
console.log(result.value.release)
console.log(result.value.claims)
console.log(result.value.identity.nc)

立方体位置为其中心;它的底部是 Z0。快照库存 X/Y 为其中心,宽度/高度为全尺寸。适配器将毛坯底部放置在所选零件的最低 Z 轴处,然后添加声明的深度。内核工作原点默认为库存顶部的库存中心; stock-corner 选择其最小 X/Y 和顶部 Z。

来源: packages/core/src/cam/kernel/snapshot.ts, execute.ts, 和 kernel.test.ts.

快照选项和边界

HTTP 本机请求需要 1–2、000 元素、1 版本、非空作业 ID/名称以及最多 80 个字符的材料名称。它最多接受 500 个显式操作,如果提供的话,还可以接受 1–200 个刀具。省略操作会调用规划器;显式的空操作列表并不是发明操作的请求。

finishAllowance 接受 0–5 毫米; scallop 为正且最多 1 mm; deburr 为正且最多 5 mm。本机默认值使用材料的精加工余量、0.01 毫米扇贝和 0.01 毫米路径公差。重播分辨率可以单独提供。选修的 subprograms: true 仅在所选方言支持的情况下请求翻译的重复发射。

快照机器字段命名已注册的预设。下层 ManufacturingJob 可以携带完整的机器记录,包括明确的行程和工作台几何形状;公共快照机器字符串本身不接受任意机器记录。

来源: packages/api/src/cam-kernel.ts, ai-cam.ts, 和 packages/core/src/cam/kernel/contracts.ts.

解决保存被拒绝的问题

回复信息原因及补救措施
CADCAMFUN 刀具路径文档无效已识别的可移植格式未能满足其架构要求。保留所有必需的设置、打印机、库存、绘图、程序和 G 代码字段。
刀具路径文档和G代码必须包含相同的程序行 NC 和新文档 NC 不同。根据保存的确切字节重建快照。
保存的操作必须具有唯一的 ID,并按顺序组成存储的 G 代码操作标识或订购不再复制该文档。编辑、重新排序或删除操作后重新组合。
保存的内核工件与其源请求和原始 NC 不匹配重放捕获的请求失败、返回被阻止的输出或与声明的工件/程序/NC 不同。重新生成而不是编辑证据字段。

当其源选择/库存与关联的存储的工程图不匹配时,可以保留有效的本机工件而无需源工程图修订。这种缺失并不意味着已保存的 NC 是根据当前图形重新生成的。报告新鲜度时,独立阅读图纸修订和源快照。

来源: apps/sidecar/src/services/cam-program.ts 和 apps/sidecar/test/cam-program.test.ts.

查看 3D 的本地工作

本机作业:POM毛坯,三道工序 拖动进行轨道旋转·滚动进行缩放·右键拖动进行平移
由本机内核为下面的快照生成的真实程序,以世界毫米为单位绘制。紫色:Z50 处的面铣刀 Ø10。绿色:Ø16 自适应粗加工。蓝色:Ø10 球精加工。虚线:急流。半透明盒子:44 × 44 × 11 原料和 40 × 40 × 10 部分。程序处于工作坐标中;工作原点是库存中心顶部、世界 (20、20、11),因此这里的每个移动都是程序移动加上该原点。
奥普战略工具切割长度时间已删除
面材顶部facefacemill-50334.0 mm12.4 s1936 毫米立方
3D 自适应粗加工surfaceflat-16472.2 mm5.3 s3360 毫米立方
3D 陡坡和浅坡整理surfaceball-105660.6 mm113.4 s0 毫米立方

机器 vmc-standard (立式加工中心(BT40,12 000 rpm,11 kW),后置 fanuc), 材料 pom-c (Acetal POM-C (Delrin)). Stock volume 21296 mm³, final 16000 mm³, equal to the part volume, so remaining volume is 0. Estimated cycle time 149 s. Release: verified-program。 NC 的长度为 3071 行。

宣称地位
cutting-data通过了
machine-limits通过了
operations-complete通过了
no-rapid-in-stock通过了
holder-clearance通过了
no-gouge通过了
material-removed通过了
nc-replay通过了
machine-travel不支持的
machine-clearance通过了
machine-travel 是 unsupported 这里是因为预设没有明确的行程范围可供检查。没有证据支持的主张并不是失败,但也不是证据;经过验证的程序版本涵盖了已通过的声明。

工作框架数学,已完成

z = (0.707, 0, 0.707)x = (0.707, 0, −0.707) 原点(40、0、10)世界Xz世界
构建、检查和使用 45° 框架
import { cam } from "@cadcamfun/core"

const frame = cam.frameFromNormal({ x: 40, y: 0, z: 10 }, { x: 1, y: 0, z: 1 })
// xAxis (0.707, 0, -0.707)  yAxis (0, 1, 0)  zAxis (0.707, 0, 0.707)
cam.validateWorkFrame(frame)                     // []

const world = cam.workToWorld(frame, { x: 10, y: 5, z: 0 })   // (47.071, 5, 2.929)
cam.worldToWork(frame, world)                    // (10, 5, 0)

cam.validateWorkFrame({ origin: { x: 0, y: 0, z: 0 },
  xAxis: { x: 1, y: 0, z: 0 }, yAxis: { x: 0, y: 0, z: 1 }, zAxis: { x: 0, y: 1, z: 0 } })
// [{ field: "frame", message: "Work frame axes must be orthonormal and right-handed" }]
frameFromNormal 将法线作为 Z 并将 X 提示(默认情况下为世界 X)投影到平面上。当提示平行于法线时,它会选择另一个垂直线。 Y 始终为 Z × X,因此构造结果是右旋的。

常见面的旋转解决方案

anglesFor(normal, layout, limits) returns every way the table can bring a part direction to machine +Z, smallest tilt first, with the tilt inside the limits (default −120° to 120°). C is wrapped into (−180°, 180°]. These are real outputs:
部分正常表-AC表-BC
(1, 0, 1), 45° 侧A45 C90,然后 A−45 C−90B−45 C0,然后 B45 C180
(1、0、0)、+X 面A90 C90,然后 A−90 C−90B−90 C0,然后 B90 C180
(0, −1, 0), 正面A90 C180,然后 A−90 C0B−90 C90,然后 B90 C−90
(0, 0, −1),底面无(空数组)无(空数组)

底面需要 180° 倾斜,超出默认限制,因此列表为空, indexToolpath 抛出“机器的旋转轴无法在其限制内到达此工作平面”。相反,在第二次设置中加工底面。

索引后帧原点所在的位置
const [angles] = cam.anglesFor({ x: 1, y: 0, z: 1 }, "table-BC")   // { b: -45, c: 0 }
cam.partToMachine({ x: 40, y: 0, z: 10 }, angles, "table-BC", { x: 0, y: 0, z: 0 })
// (21.213, 0, 35.355): the origin rotated -45° about Y around the pivot

设置验证消息

一切都错了
cam.validateSetup({
  id: "", revision: -1, frame,
  stock: { min: { x: 0, y: 0, z: 0 }, max: { x: 0, y: 10, z: 10 } },
  fixtures: [],
  tools: [{ toolId: "t", cuttingDiameter: 6, cuttingLength: 30, stickout: 20,
            holderDiameter: 32, holderLength: 40 }],
})
场地信息
id设置 ID 不能为空
revision设置修订版必须是非负安全整数
stock包络必须具有有限坐标和正体积
tools.t切割长度不得超过伸出长度

问题会被返回,而不是抛出,并且所有问题都会一次性报告,因此表单可以将每个坏字段一起标记。