パス前処理ファンクションブロックの実装
を参照してください CNC14_PathPreprocessing.project のインストールディレクトリにあるサンプルプロジェクト CODESYS 下に ..\CODESYS SoftMotion\Examples。
サンプルプロジェクトは、新しいパス前処理関数ブロックを実装する方法を示しています。
パスの前処理は通常、Gコードから読み取られたパスを変更するために使用されます。これにより、工具半径補正やコーナースムージングなどの機能を実装できます。ただし、特定のマシンまたはアプリケーション用の特定の関数をパス前処理ファンクションブロックとして統合することもできます
パスの前処理の詳細については、以下を参照してください。 パスの前処理とキューサイズ.
パス前処理関数ブロックの使用方法の例については、以下を参照してください。 CNC 例 03: パスの前処理をオンラインで実行する.
接線変更の制限
この例は、2D カッティングアプリケーションを示しています。Gコードで定義された経路に沿って切断するには、ナイフを使用する必要があります。は SMC_TRAFO_GantryCutter2 トランスフォームを使用して、パスの現在の接線に基づいてナイフの角度を決定します。
課題は、ナイフの回転が速すぎないようにすることです。さもないと、切れ目がきれいになりません。ナイフの角速度の制限は、サンプルプロジェクトで新しく作成されたパス前処理関数ブロックを使用して解決されています LimitTangentVelocity。接線の変化速度が設定可能な最大値を超えないように、経路上の送り速度を変更します
Gコードは、角が滑らかになったシンプルな長方形です。
![]() |
トレースには実行結果が表示されます。ナイフの回転速度に対応するC軸の速度がオレンジ色で表示されます。指定どおりに 45°/s に制限されています
![]() |
アプリケーションの構造
この構造はCNCアプリケーションでは一般的です。G コードはバックグラウンドタスクで読み込まれ、パスの前処理もここで行われます。補間はバスタスクで実行されます。
ザ・ LimitTangentVelocity 関数ブロックには、パス前処理関数ブロックに必要なステップと状態が表示されます。
基本的な原則は、関数ブロックがパス要素 (type) を読み取り、処理してから書き込むことです。 SMC_GEOINFO) 入力キューから (poqDataIn() を出力キュー () に送ります。poqDataOut)。要素は入力キューから削除されます。
送り速度を変更するロジックは 102 行目から 138 行目にあります。補助機能です。 ComputeMaxCurvature 特定のパスエレメントで発生する可能性がある最大曲率を計算します。
// Our velocity limitation comes here. This modifies an element from the // input queue and copies the modified element to the output queue. // Finally, the element is removed from the input queue m_geo := pgeo^; // Copy the element // Note: the feature flags set in the G-Code with G38/G39 can be queried // by reading pgo^.dwFeatureFlags, like this: IF (SHR(m_geo.dwFeatureFlags, featureFlag) AND 1) = 1 THEN // feature is turned on ok := ComputeMaxCurvature(m_geo, kappa=> kappa_max); IF NOT ok THEN // Curvature cannot be computed m_state := STATE_ERROR; ErrorID := SMC_INVALID_PARAMETER; OnExit(); RETURN; END_IF // Compute maximum allowed path velocity based on maximum curvature // and maximum allowed angular velocity IF kappa_max = 0 THEN // No curvature, no limitation necessary vel := m_geo.dVel; ELSE vel := m_maxAngularVelocity_rad / kappa_max; END_IF IF velMin < 0 OR vel < velMin THEN velMin := vel; END_IF // Set new maximum velocity for the element m_geo.dVel := MIN(m_geo.dVel, vel); ELSE // feature is turned off END_IF
コミッショニング
アプリケーションをビルドし、コントローラーにダウンロードします。
アプリケーションを起動します。
トレースを開き、コントローラにダウンロードします。
値を書き込む
TRUE変数にPath.bExecuteとPLC_PRG.bStart。トレース内のGコードの処理を追跡できます。

