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

ドキュメント

CAM加工カーネル

製造ジョブから NC および証拠まで: プランニング、カッター、残量ブラケット付きのボクセル ストック、認定された衝突チェック。

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

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 ツール アセンブリ (カッティング ゾーン、シャンク、ホルダー) のプロファイルとその回転体
衝突関節の動きの継続的なチェック: 認定されたクリア、衝突、または未解決
モーション同時5軸:ロケーション→テーブルポーズ、各動作を分割して確認
ストック残存体積ブラケットを備えたボクセルとしての体積ストック
マシンクリアランス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 ブランクでの実際の実行では、次の 3 つの操作が計画されました。 face フェイスミル付き-50、 surface-rough flat-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 mm 入れます。

ボクセルストックと残量ブラケット

ストックはボクセル グリッドです。一連の動きの後、各ボクセルはマテリアルになり、 確実に削除されました (立方体全体がカッター内のサンプリングされた位置にありました) または 削除可能 (その立方体はカッターの拡張範囲内に入りました:対角線の半分とサンプル間隔の半分)。したがって、残りのボリュームはブラケットです。除去できない可能性のある物質は確実に残りますが、確実に除去できない物質は残る可能性があります。ボクセルは、サンプリングされたカッターがそれをカバーしない限り、削除されたとは決して呼ばれません。傾斜工具は先端点ごとに軸を保持するため、5 軸スイープでは同じ 2 つのテストが使用されます。

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 mm の深さでカットされます (1 つのボクセルのたるみが壁に沿った段差として表示されます)。

ブラケットはボクセル サイズとともに狭くなります。ボクセルを半分にすると、すべての壁に沿ったスラック バンドが半分になります。

継続的な衝突チェック

コントローラーは 2 点間でジョイントを直線的に移動させるため、それらの間で衝突が発生する可能性があります。 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 でジョブを再構築します
残量ブラケットワイド特徴に対してボクセルが粗すぎますより小さいボクセルを使用します。たるみは各壁に沿って約 1 ボクセルです
急流での衝突ホルダーまたはシャンクのエンベロープがテーブルまたは部品に到達するクリアランスプレーンを上げるか、突き出しを短くしてください
長い回転移動で未解決リプシッツ境界は回転中心から遠く離れたところでは弱い手を分割するか、チェッカーが証明できるマージンを受け入れる
予期せぬカッターで計画された操作カッターの材質と剛性の適合性必要なカッターを備えたツールライブラリを渡します