🐕

CODESYS Example Projectを調べてみた#11 (CNC)

に公開

CNC

CNCとは、コンピュータが数値データ(主にGコード)を読み取って、工作機械の刃物や工具の位置・速度・回転を自動制御し、金属やプラスチックなどの材料を精密に切削・加工する技術です。

CODESYSにもCNC関連機能のライブラリがあり、工作機器の軌道制御やGコードを使ったプログラミング環境が使用できます。他システムと比較して、CNC以外にもPLC制御・GUI・安全機能を同じプラットホームで取り扱えるメリットがあります。

CNC関連では以下のような13個のExample Projectが提供されています。

今回はこの中で、3D Editorの例を見ていきます。

CNC関連ツールの使い方はCODESYS HelpページCODESYS SoftMotion CNCを参考にしてください。

CODESYS SoftMotion CNCの機能

CODESYS SoftMotion CNCは、以下のような広範な機能を提供します。

  • 多次元パスのプログラミング:
    • 最大9次元のパスを作成可能です。
    • X/Y/Z軸で直線、円弧、楕円、放物線、スプラインをプログラムできます。
    • 3Dモードでは、I/J/Kノーマルベクトルを使用した平面指定(G16、G17、G18、G19)や、任意の空間平面に円弧を挿入することが可能です。このモードでは、Z軸がX軸やY軸と同様に扱われ、Z方向へのあらゆる移動が可能です。2.5Dモードとは異なり、3Dモードでのパス速度と加速度はX/Y/Z座標の動きを指します。
  • 追加軸の制御:
    • 5つの直線補間軸(P/Q/U/V/W)と、3つの3次多項式補間軸(A/B/C)が提供されます。A、B、C軸はスプライン軸として補間され、定接線遷移を持つパスで特に重要です。
  • 多様なキネマティクス変換:
    • 一般的な多くのキネマティクス(例:3関節SCARAシステム、4軸パレタイザー、6軸多関節ロボット、三脚タイプ(リニア軸、垂直軸、回転軸)、門型、T型ガントリーなど)の順運動学および逆運動学変換のための機能ブロックを提供します。
    • これらの変換POU(SMC_TRAFO_<kinematics>とSMC_TRAFOF_<kinematics>)は、空間内の位置から軸位置を計算したり、軸位置から空間内の位置を計算したりします。
  • DIN 66025(Gコード)によるプログラミング:
    • G0(直線による高速位置決め)、G1(工具操作を伴う直線移動)、G2/G3(時計回り/反時計回りの円弧)などの移動コマンドをサポートします。
    • G90/G91(絶対/相対座標)、G98/G99(軸中間点の絶対/相対値)などのモード設定が可能です。
    • G36/G37(変数値の変更)、G53/G54/G55/G56(座標系の移動、回転、スケーリング)などの特殊コマンドも利用できます。
  • 変数と式:
    • Gコード内で、数式、ブール式、文字列式を使用できます(バージョン4.4.0.0以降)。
    • グローバル変数やローカル変数を利用して、プログラムを柔軟に記述できます。ただし、変数や式はオンラインデコーダでのみ機能し、CNCエディタでは機能しません。
  • サブルーチン:
    • 頻繁に繰り返されるタスク(ポケット加工、穴あけ、工具交換など)をGコードのサブルーチンとして作成し、呼び出すことができます。パラメータを渡すことも可能です。サブルーチンもオンラインデコーダでのみ機能し、CNCエディタでは機能しません。
  • 豊富なエディタ機能:
    • テキストエディタ (DIN 66025): Gコードをテキスト形式で記述します。
    • 表形式エディタ: パス要素を表形式で定義します。
    • グラフィカルエディタ: プログラムされたパスを視覚的に表示します。テキストエディタや表形式エディタと連動しており、一方での変更は他方に即座に反映されます。カメラ位置の変更、回転、ズームなどの操作が可能です。
  • プログラムの操作と解析ツール:
    • DXFファイルのインポート、ASCIIファイルへのプログラムの保存/読み込み。
    • パスの反転、移動、回転、スケーリング。ただし、A, B, C軸や変数が使用されている場合はこれらの操作に制約があります。
    • ダイナミクス解析(位置、速度、加速度、ジャークの時間的変化の表示)。
    • 補間点の表示、グリッドの表示、パス終点の表示、前処理済みパスの表示など、視覚化に役立つ機能があります。
    • プログラム行の再番号付け、変数のオフライン値設定、ステップ抑制(スラッシュで始まるブロックの無視)などの管理機能も備わっています。
  • ドライブとバスの独立性:
    • モーションプログラミングは、使用するバスやドライブに依存しません。CiA DSP 402コントローラ、ステッピングモーター、周波数変換器、仮想軸など、多数の標準モーションコントローラ用のドライバが提供されています。

Setup

ExampleページのDownloadボタンからダウンロードできます。

CNC 3D Editor Project

File structure

3D Editorのプロジェクトは以下のファイル構造をしています。

NC 3D Editor Devices window

CNC設定

CNCの全般的な設定は、「CNC-Einstellungen」という項目から行います。Einstellungenは、設定という意味です。

CNC設定

設定画面の上部には、「Path preprocessors」、「Preinterpolation」、「Table editor」という3つの項目があります。それぞれの具体的な使い方は、CODESYS Online Helpに説明があります。

パスの前処理では、パスの平滑化や角の丸め処理などを行います。上図のようにそれぞれの処理がブロックになっているので、それを並べて全体の前処理を作ります。

補間設定では、サイクルタイムや速度モード、最大ジャーク(加速度変化率の制限)を行います。

表形式エディタの設定では、テーブルの表示項目をチェックボックスで選択します。

CNC Programs

Example Project中には、6つのCNC Programが含まれています。Effelturmを開くと以下の画面が表示されます。

CNC Program

CNC Program画面の詳細は、Online Helpで説明されています。上の画面は、DIN66025形式のエディタが表示されています。このほか、Table形式のエディタも利用可能です。

CNC Programでは、コンパイルモードを設定します。「SMC_OutQueue」、「SMC_CNC_REF」、「FILE」の3種類があり、それぞれ以下の特徴を持ちます。

  • SMC_OutQueue: コンパイル時にSMC_OUTQUEUEデータ構造が生成され、直接インターポレーターに入力できます。利点は、インタープリターやパス前処理機能ブロックを呼び出す必要がないことです。欠点は、実行時にプログラムを変更できず、Gコード内の変数が使用できないことです。
  • SMC_CNC_REF: コンパイル時にプログラム変数が生成され、SMC_NCInterpreterによってアプリケーション実行時にGコードが処理されます。これにより、実行時変数の使用、サブルーチンの呼び出し、座標系のシフト/回転/スケーリングが可能になります。
  • FILE: CNCプログラムがコントローラのファイルシステムにASCIIファイルとして保存され、ステップバイステップで読み込まれて実行されます。これは、メモリにすべてを格納できない大規模なプログラムや、コントローラアプリケーションのコンパイル後にユーザーが生成したプログラムに適しています。

CNCMachine FunctionBlock

プログラム全体の流れは以下のようになっています。

  1. プログラムファイル管理:ディレクトリから選択/新規作成/削除/ロード/セーブを実行
  2. Gコードデータ読み込み・デコード・速度検査:SMC_*各FBで処理
  3. パス生成:Gコードの移動命令から、経路配列を生成し、ビジュアライズやシミュレーション用に渡す
  4. 軸制御:補間結果に基づいて、各軸に位置指令を出し続け、実際の動作・停止・緊急停止に応答
  5. ステータス監視:各種エラー・中断・完了状態を常に監視し、状態遷移を制御

FBで定義されている変数は以下のものがあります。

CNCMachine(FB)
FUNCTION_BLOCK CNCMachine
VAR
	_xLoadSaveActive: BOOL;	

	_sGenerateNewFile: STRING;
	_sCurrentProgram: STRING;
	
	_dirData: Directory;
	_xUpdateDir: BOOL := TRUE;
	
	_tecData, _tecData2: TexteditorControl;
	
	_xLoadCommand: BOOL;
	_xSaveCommand: BOOL;
	_xNewCommand: BOOL;
	_xDeleteCommand: BOOL;
	_xDeletePossible: BOOL;
	_xGeneratePathDelayed: BOOL;
	_xUnloadCommand: BOOL;
	
	_iOpenEntry: INT := -1;
	
	_iProgramSelectSpin: INT := 0;
	_sProgram: STRING;
	
	_xStartExecution, _xWaitExecution, _xAbortExecution: BOOL;
	_xRunningExecution, _xWaitingExecution, _xErrorExecution: BOOL;
	_xWaitingExecution_blink, _xErrorExecution_blink: BOOL;
	_lrOverride: LREAL:=100;
	_blink: Blink := (Enable := TRUE, timelow := T#1S, timehigh:=T#1S);
	_rncf: SMC_ReadNCFile;
	_dec: SMC_NCDecoder;
	_cv: SMC_CheckVelocities;
	_ipo: SMC_Interpolator;
	_rncfBuffer : ARRAY[0..99] OF SMC_GCODE_WORD;
	_decBuffer : ARRAY[0..99] OF SMC_GEOINFO;
	
	_pt: SMC_PositionTracker;
	_bufferTracker: ARRAY[0..199] OF VisuStruct3DPathPoint;
	
	_iStatus: INT;
	
	_vc: VisuStruct3DControl;	
	_vc2: VisuStruct3DControl;	
	
	_bufferPath: ARRAY[0..3999] OF VisuStruct3DPathPoint;
	_vs3dt: VisuStruct3DTrack;
	_bufferPath2: ARRAY[0..3999] OF VisuStruct3DPathPoint;
	_vs3dt2: VisuStruct3DTrack;
	
	_diActLine: DINT;

// instances for motion control
	_mcpX, _mcpY, _mcpZ, _mcpA, _mcpB, _mcpC: MC_Power;
	_mchX, _mchY, _mchZ, _mchA, _mchB, _mchC: MC_Halt := (Deceleration := 1000);
	_cbpX, _cbpY, _cbpZ, _cbpA, _cbpB, _cbpC: SMC_ControlAxisByPos;
	
// instances for file handling
	_xGeneratePath: BOOL;
	_pcf: SMC_PathCopierFile;
	
	_sFilename: STRING;
	_iOldProgramSelectSpin: INT := -1;
	
	_iOldSelectedEntry: INT := -1;
	_xOpenProgNext: BOOL;	
	
END_VAR

SMC_GCODE_WORDやSMC_***系の型は、SM3_CNCライブラリで提供されているものです。このライブラリのドキュメントはこちらにあります。

VisuStruct3DPathPointの型は、VisuElem3DPathライブラリで提供されています。このライブラリのドキュメントは、こちらにあります。

Visualization

Visu

SoftMotion General Axis Pool

特別な設定は特にありませんでした。

学びと気づき

  • 機能が多く、実際のアプリケーション構築までは時間がかかる。
  • Gコードのプログラム作成とPLCのアプリケーションの両方を作らないといけない。

まとめ

  • CODESYSでCNCプログラムを作る場合は、一般的な「CNC設定」と具体的な加工にかかわる「CNC Program」を作成する。
  • 目的に応じて、前処理の設定やコンパイルタイプを適切に選択する必要がある。
  • 加工形状をつくるときは、CNC ProgramでGコードコマンドでパスを作る(この時2.5D、3Dの選択が可能)、コンパイルモードを選択、パスの前処理を作成、を行う。
  • 加工機を動かすには、作成したGコードプログラムをIECプログラム内から呼び出す。実際の動作は、GコードをIECプログラム内でパースし、経路データを配列に保持する。そのデータを用いてSoftMotion機能でモーターを駆動する。

Discussion