コンテンツへスキップ
CADCAMFUN
ドキュメント

ドキュメント

セットアップと保存されたプログラム

プログラムの作成に使用される在庫、作業フレーム、カッターの割り当て、順序付けられた操作、およびソース証拠をキャプチャします。

英語から自動翻訳されています。 英語の原文を見る

セットアップは製造コンテキストです

製造セットアップは、部品がストック、治具、工具に対してどのように配置されるかを定義します。 cam.ManufacturingSetup 識別子、リビジョン、固定作業フレーム、ワールド座標のストックと治具のエンベロープ、およびツール アセンブリを記録します。ネイティブ カーネルは CAD スナップショットとリソースを受け入れ、順序付けられた操作結果と 1 つのポストされたプログラムを生成します。

保存されたアプリケーション プログラムの使用 CamProgramDocument、ポータブルドキュメントも保存されています Toolpath.data。この契約では、NC とそのプログラム表現、およびワークスペースを再度開くために必要な設定、ストック、図面スナップショットが保持されます。オプションの操作では、個別の操作 ID が保持されます。オプションのカーネル データはネイティブ ソースの証拠を保持します。

携帯用文書契約書

文書はそれ自体を次のように識別します format: "cadcamfun-cam" そして version: 1。必須フィールドは次のとおりです gcode, program、発電機 settings, printer エキストラ、 stock、および自由形式 drawing スナップショット。オプションのフィールドは次のとおりです operations, kernelArtifact、 そして kernelRequest.

保存された各操作には固有の id, name, gcode、 そして program、オプションのツール、設定、ソース要素識別子を使用します。 NC と ID を維持すると、表示ラベルとは無関係に操作がラウンドトリップされます。

操作順序と構成

combineCamOperations 操作の順序を保持します。ツールパス識別子にオペレーション識別子を使用して名前空間を設定し、指定された場合は明示的なオペレーション ツールを使用し、複数のオペレーションがある場合には表示名にプレフィックスを付けます。結合されたプログラムは、最初の操作からオフセットされた単位と作業量を取得します。

単一の操作の場合、結合された NC が元のテキストになります。複数の操作の場合、ヘルパーは既存の NC セクションを操作コメントと結合します。このヘルパーは、すべてのセクションを単一のコントローラー プログラムに再ポストするわけではありません。ネイティブ カーネルは、順序付けされた操作を生成し、1 つの統合プログラムを出力するルートです。

事前に生成されたセクションを構成する呼び出し元は、互換性のある単位、ワーク オフセット、ツール番号付け、ヘッダー、およびプログラムの終了を確認する必要があります。文書の構成が成功すると、保存されているセクションとの順序と一貫性が証明されます。マシンクリアランスの証拠は追加されません。

生成して保存する

  1. 図面要素と加工対象のストックをキャプチャします。材料、機械、ツール、ワークオフセット、品質管理を選択します。
  2. 電話 POST /api/toolpaths/manufacture と schemaVersion: 1、ジョブ ID、名前、およびキャプチャされた要素。加工順序で明示的に操作を指定するか、カーネルに操作を計画させます。
  3. 返された結果、問題、個々のクレーム、および release。アーティファクトはプレビューにすることもブロックすることもできます。結果を受け取ることは、出力が検証されたことを意味するものではありません。
  4. を構築する CamProgramDocument その G コード、プログラム、アーティファクト、およびキャプチャされたリクエストは同じ結果を表します。ツールパスの作成または更新エンドポイントを介して、その G コードとともに保存します。

製造エンドポイントは、図面の書き込みやツールパスの作成を行わずに、提供されたスナップショットを評価します。ジェネレータ /generate は別の設定主導のルートであり、ポータブル ドキュメント用の NC を提供することもできます。

永続性の検証

サイドカーはポータブル ドキュメントをその形式で認識し、保存する前に完全なスキーマをデコードします。ドキュメントの G コードはツールパス行の G コードと一致する必要があります。操作識別子は一意である必要があり、それらの順序付けられた構成は保存されたテキストを再現する必要があります。サイドカーは、クライアントが提供する移動データを信頼するのではなく、オペレーション NC を再解析してプログラムの移動を再構築します。

キャプチャされたリクエストを含む新しいネイティブ アーティファクトの場合、サイドカーはそのリクエストを再実行し、結果のアーティファクト、プログラム、および元の NC を比較します。失敗またはブロックされた結果、変更されたアーティファクト、および不一致のテキストは拒否されます。キャプチャされたリクエストを持たずに新たに提供されたアーティファクトは、行にすでに保持されている未変更のアーティファクトでない限り削除されます。

提供されたソース要素とストックが、関連付けられている保存されている図面と一致すると、サービスは図面リビジョン ダイジェストを計算します。クライアントは信頼できるサービスを提供できない sourceRevision または恣意的な検証請求。保存されたリビジョンはサービスによって派生されるか、同じ既存のアーティファクトに対してのみ保持されます。

NCの編集と証拠の保存

更新により、変更されていない以前のポータブル ドキュメントを送信しながら、NC を置き換えることができます。サービスはそのケースを認識し、新しいテキストから解析されたプログラムを再構築し、一致しなくなった操作とネイティブ ソースの証拠を削除します。矛盾した新しいドキュメントは、無関係なプログラムを黙って結合するのではなく、拒否されます。

通常の自由形式ツールパス データは引き続きサポートされます。 NC を変更すると、一致しなくなった古いネイティブ アーティファクト メタデータが削除されます。クライアント提供 verification そして response フィールドは信頼できるネイティブ証拠にはなりません。

検証の実装は次のとおりです。 apps/sidecar/src/services/cam-program.ts; runKernelRequest, prepareCamProgramData、 そして drawingRevision 生成と保存で使用される同じリクエスト アダプターとアイデンティティ ロジックを共有します。

保存されたプログラムには、繰り返されたツールパスから生成されたサブプログラムを含めることができます。ツールパスがサブプログラムを共有できるルールについては、 CAMページ.

剛性の高いワークフレーム

A WorkFrame 原点と X/Y/Z 軸があります。 validateWorkFrame 有限の座標、単位軸、ペアごとの直交性、および数値許容範囲内の右手方向が必要です。 workToWorld フレームを適用します。 worldToWork プロジェクトを戻します。無効なフレーム、無効なポイント、および数値のオーバーフローにより、範囲エラーが発生します。

validateSetup また、空ではないセットアップ識別子、非負の安全な整数リビジョン、正の体積有限エンベロープ、一意の治具/ツール識別子、正の有限カッターとホルダーの寸法もチェックします。切断長さは突き出しを超えてはなりません。検証ではフィールド固有の問題が返されるため、呼び出し元は修正が必要な値を特定できます。

インデックステーブル加工

cam/indexing.ts インデックス付きの向きを解決します table-AC そして table-BC レイアウト。選択した作業平面を機械 +Z に垂直に回転させ、回転制限を尊重し、到達可能な傾きが小さいことを優先します。プログラム ポイントはワーク フレームを通過し、機械のピボットを中心にテーブルが回転します。

このアダプタは、固定工具軸を使用したテーブルのインデックス付けをモデル化します。傾斜ヘッド、コントローラーの傾斜面サイクル、および同時 5 軸動作は別個の機能です。回転位置は度です。フレーム軸は単位ベクトルのままです。

共有セットアップの種類

ManufacturingSetup, WorkFrame, ToolAssembly, validateSetup, validateWorkFrame, workToWorld、 そして worldToWork を通じて輸出されます cam。ポータブルな操作とドキュメントのスキーマは次からエクスポートされます。 @cadcamfun/apiこれにより、サイドカー永続性とデスクトップ復元ロジックの両方で使用できるようになります。

デスクトップで再度開く

saved-program.ts 現在の設定、ストック、図面、保存されている正確な NC をキャプチャします。 NC とハッシュがそれらのバイトと一致する場合にのみ、カーネル アーティファクトが保持されます。復元時に、保存されたアーティファクトとリリースをチェックし、互換性のある操作結果を復元し、リプレイ検証をリセットし、エディターをロードし、スナップショットからジェネレーターとストック制御を復元します。

通常の G コードのみが利用可能な場合、デスクトップはそれを解析して表示します。テキストを正常に開いても、欠落している生成リクエストが再作成されたり、プログラムの証拠レベルがアップグレードされたりすることはありません。

ソースと結果を一緒に保管する

形状、ストック、工具寸法、ワークフレーム、機械、材料、または操作順序を変更した後に再生成します。再現性を確保するためにソース スナップショットを保存し、変更された NC ファイルを独自の分析が必要な新しい出力として扱います。ソース リビジョン チェックとアーティファクトの再生により、以前の結果がさまざまなプログラム バイトの証拠として提示されるのを防ぎます。

キャプチャしたセットアップを評価する

スナップショット アダプターは、ネイティブ製造リクエストの共通境界です。この自己完結型の例では、ポリマー ブランクと少し大きめのストック ボックスをキャプチャし、アーティファクトの実際のリリース レベルを返します。 It writes neither a drawing nor a toolpath.

エディターコーディネートからネイティブジョブへ
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 mm を受け入れます。 scallop 正で最大 1 mm; deburr は正で最大 5 mm。ネイティブのデフォルトでは、材料の仕上げ許容値、0.01 mm のスカラップ、および 0.01 mm のパス許容差が使用されます。再生解像度は個別に指定できます。オプション 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 コードを順番に構成する必要があります。操作の ID または順序付けによってドキュメントが複製されなくなりました。操作を編集、並べ替え、または削除した後に再構成します。
保存されたカーネル アーティファクトは、ソース リクエストと元の NC と一致しませんキャプチャされたリクエストの再生が失敗したか、ブロックされた出力が返されたか、要求されたアーティファクト/プログラム/NC と異なっていました。証拠フィールドを編集するのではなく、再生成します。

有効なネイティブ アーティファクトは、そのソース選択/ストックが関連する保存された図面と一致しない場合、ソース図面リビジョンなしで保持されることがあります。この欠如は、保存された NC が現在の図面に対して再生成されたことを意味するものではありません。最新性をレポートするときに、図面リビジョンとソース スナップショットを個別に読み取ります。

ソース: apps/sidecar/src/services/cam-program.ts そして apps/sidecar/test/cam-program.test.ts.

3D のネイティブ ジョブを参照

ネイティブ ジョブ: POM ブランク、3 つのオペレーション ドラッグして周回します · スクロールしてズーム · 右ドラッグしてパンします
以下のスナップショット用にネイティブ カーネルによって生成された実際のプログラム。世界ミリメートル単位で描画されます。紫: Z50 のフェースミル Ø10。緑: Ø16 適応荒加工。青: Ø10 ボールの仕上げ。破線: 急流。半透明のボックス: 44 × 44 × 11 ストックと 40 × 40 × 10 パーツ。プログラムは作業座標にあります。作業の原点はストックセンターのトップ、ワールド (20、20、11) であるため、ここでのすべての移動はプログラムの移動にその原点を加えたものになります。
オペ戦略道具カット長さ時間削除されました
フェイスストックトップfacefacemill-50334.0 mm12.4 s1936 mm㎥
3D 適応荒加工surfaceflat-16472.2 mm5.3 s3360 mm㎥
3D 急な仕上げと浅い仕上げsurfaceball-105660.6 mm113.4 s0 mm㎥

機械 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)ワールドXワールドZ
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 「マシンの回転軸は、その制限内でこの作業平面に到達できません」とスローされます。代わりに、2 番目のセットアップで下側を機械加工します。

インデックス作成後にフレームの原点が着地する場所
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切断長さは突き出しを超えてはなりません

問題はスローされずに返され、すべてが 1 回のパスで報告されるため、フォームですべての不良フィールドをまとめてマークできます。