目次
3Dプリンターでは、Marlinファームウェアを中心にG-Codeが広く使われています。 G-Codeをどのように使えばいいのか悩む方も多いと思いますので、読者の方の参考になればと思い、この記事を書くことにしました。
G-Codeについては、この後にも役立つ内容がありますので、引き続きお読みください。
3DプリンターにおけるGコードとは?
Gコードは、3DプリンターやCNCフライスなどのCNC(Computer Numerically Controlled)マシン用のプログラミング言語で、ファームウェアがプリンターの動作やプリントヘッドの動きを制御するための一連のコマンドを含んでいます。
Gコードはどのように作られるのか?
3Dプリンター用のGコードは、スライサーという特殊なアプリケーションを使って作成します。 このプログラムは、3Dモデルを2Dの薄いレイヤーにスライスするものです。
また、ヒーターやファン、カメラなど、プリンター固有の機能を制御・設定することもできます。
市場で人気のあるスライサーには、PrusaSlicerやCuraがあります。
G-Codeの種類
CNCコマンドの総称はGコードですが、大きく分けると以下の2つのコマンドがあります:
- ジーコード
- エムコード
ジーコード
Gコードはジオメトリーコードの略で、プリントヘッドの動きや位置、経路を制御するのが主な機能です。
Gコードを使って、ノズルを直線的に動かしたり、特定の場所に配置したり、昇降させたり、曲線的に動かすことも可能です。
を前置きしています。 G で、G-Codeであることを示す。
エムコード
Mコードとは、Miscellaneous commandsの略で、プリントヘッドの動作以外のプリンターの機能を制御するマシンコマンドのことです。
モーターのON/OFFやファンの回転数設定などです。また、ベッドの温度やノズルの温度設定もM-Codeが担当します。
前置きが長くなってしまいましたが M, は、miscellaneousの略です。
Gコードの「フレーバー」とは?
G-Codeフレーバーとは、プリンターのファームウェア(OS)が期待するG-Codeのフォーマット方法のことです。 様々なプリンターブランドが使用するG-Code規格とファームウェアが異なるため、異なるフレーバーが存在することになります。
例えば、ムーブやヒーターオンなどの標準コマンドはどのプリンターでも共通ですが、ニッチなコマンドは同じでないものもあり、間違った機械で使用すると印刷エラーになることがあります。
この対策として、ほとんどのスライサーにはプリンタープロファイルを設定するオプションがあり、マシンに適したフレーバーを選ぶことができます。 その後、スライサーは3Dファイルをマシンに適したGコードに翻訳します。
Gコードのフレーバーの例としては、RepRap.Marlin.UltiGcode.Smoothie.などがあります。
3Dプリンティングにおける主なGコード一覧
3Dプリンターのファームウェアには、数多くのG-Codeコマンドが用意されています。 ここでは、プリント中によく目にするコマンドとその使い方をご紹介します。
マーリンM0【無条件停止】について
M0コマンドは無条件停止コマンドと呼ばれ、最後の動作後にプリンターの動作を停止させ、ヒーターとモーターをOFFにするコマンドです。
プリンターの動作を停止した後、設定された時間スリープするか、ユーザーからの入力を待ってオンラインに復帰します。 M0コマンドは3つの異なるパラメータを取ることができます。
これらのパラメータは
- [P <; 時間(ms) >]: プリンターをスリープさせる時間をミリ秒単位で指定します。 例えば、2000msの間、プリンターをスリープさせたい場合は M0 P2000
- {S<.Ltd.」といいます; 時間 >]です: プリンターをスリープさせる時間を秒単位で指定します。 例えば、プリンターを2秒間スリープさせたい場合は M0 S2
- [ メッセージ ]: このパラメータを使用すると、一時停止中にプリンターのLCDにメッセージを表示することができます。 例えば、以下のようになります、 M0 センターボタンを押すと、プリントが再開されます .
注意してください: のことです。 M0 コマンドは M1 コマンドを使用します。
マーリンM81
M81コマンドは、プリンターのPSU(電源装置)をシャットダウンします。 つまり、ヒーターやモーターなど、すべての機能が使えなくなるのです。
また、基板に代替電源がない場合は、こちらもシャットダウンします。
マーリンM82
M82コマンドは、エクストルーダーを絶対モードにします。 つまり、Gコードでエクストルーダーが5mmのフィラメントを押し出すように要求した場合、それまでのコマンドに関係なく5mm押し出すということです。
G90、G91コマンドをオーバーライドします。
このコマンドはエクストルーダーだけに作用するので、他の軸とは無関係です。 例えば、次のようなコマンドを考えてみましょう;
M82;
g1 x0.1 y200.0 z0.3 f1500.0 E15;
g1 x0.4 y20 z0.3 f1500.0 E30;
を使用して、エクストルーダーをアブソリュートモードに設定します。 M82 2行目では、15本のフィラメントを押し出して1行目を描画します。
2行目以降、押し出し値は0に戻されていません。 そのため、3行目では E30 コマンドで30本のフィラメントを押し出すことができます。 E30 コマンドを使用します。
マーリンM83
M83コマンドは、プリンターのエクストルーダーを相対モードに設定します。 つまり、Gコードで5mmのフィラメント押し出しが要求された場合、プリンターは以前のコマンドに基づいて5mmずつ累積して押し出します。
M83コマンドはパラメータを取りません。 例えば、前回の例のコマンドを次のように実行し直してみましょう。 M83 .
M83;
g1 x0.1 y200.0 z0.3 f1500.0 E15;
g1 x0.4 y20 z0.3 f1500.0 E30;
を経て E15 2行目のコマンドでは、E値がゼロに戻らず、15単位のままなので、3行目では30単位のフィラメントを押し出すのではなく、30-15=15単位を押し出すことになります。
マーリンM84
Marlin M84コマンドは、ステッピングモーターとエクストルーダーモーターのうち1つ以上を無効にするコマンドです。 すぐに無効にするか、プリンターがアイドル状態になった後に無効にするかを設定することができます。
4つのパラメータを取ることができます。 それらは以下の通りです:
関連項目: 3Dプリントに適したコンピュータは必要か? ベストコンピュータ&ラップトップ- [S<.jp]です; 時間 >]です: このコマンドを実行し、モーターを停止させるまでのアイドル時間を指定します。 例えば、以下のようになります、 M84 S10 は、10秒間の非アクティブ状態の後、すべてのステッパーを無効にします。
- [e]、[x]、[y]、[z]: これらのいずれか、または複数を使用して、アイドルする特定のモーターを選択することができます。 たとえば、次のようなものです、 M84 X Y XモーターとYモーターをアイドリングさせます。
注意してください: コマンドにパラメータを使用しない場合は、すぐにすべてのステッピングモータをアイドル状態にします。
マーリンM85
M85コマンドは、一定時間操作がない場合、プリンターとファームウェアをシャットダウンします。 秒単位の時間パラメータを受け取ります。
設定した時間パラメーターよりも長い時間、何の動きもないアイドル状態が続くと、プリンターはシャットダウンします。 例えば、5分間アイドル状態が続いた後にプリンターをシャットダウンしたい場合は、次のコマンドを使用します:
M85 S300
マーリン M104
M104コマンドは、プリンターのホットエンドの目標温度を設定し、加熱を開始します。 目標温度を設定した後、ホットエンドがその温度に達するのを待つことはありません。
ホットエンドがバックグラウンドで加熱している間、すぐに他のG-Codeコマンドの実行に移ります。 以下の5つのパラメータを取ります:
- [S<.jp]です; 温度 )>]です: エクストルーダーの目標温度を摂氏で指定します。
- [T<; インデックス(0 >]です: プリンターに複数のノズルがある場合、これで温度を設定したいノズルを選択できます。
- [B <; 温度 )>]です: ホットエンドが到達できる最高温度を設定します。 この設定値は S パラメータを使用して、ホットエンドの温度範囲を設定します。
例えば、デュアルエクストルーダー機の第2ノズルを200℃まで加熱したい場合、コマンドを使用します。 M104 S200 T1 .
マーリン M105
M105 G-Codeコマンドは、ホストに対して温度レポートの送信を要求します。 ホストによっては、M105コマンドの返信を隠蔽できることが報告されていますので、M155コマンドを使用した方がよいでしょう。
エクストルーダー温度、ベッド温度、ビルドチャンバー温度まで摂氏で取得できます。 スタンドアロンコマンドなので、あとは M105 コマンドをプリンタに送信します。
報告書には、使用可能なヒーターの実際の温度と目標温度が記載されている必要があります。
- T - エクストルーダー温度
- B - ベッド温度
- C - 室内温度
マーリン M106
M106コマンドは、プリンターのファンをオンにし、その速度を設定するコマンドです。 ファンの選択とその速度の設定は、そのパラメータを使って行います。
これらのパラメータは以下の通りです:
- [S<.jp]です; 0-255 >]です: このパラメータは、0(オフ)から255(フルスピード)までの値でファンの速度を設定します。
- [P<; 指数 >]です: オンにするファンを決定します。 空欄の場合、デフォルトは0(プリント冷却ファン)です。 ファンの数に応じて、0、1、2のいずれかに設定することができます。
例えば、ノズル冷却ファンを50%の回転数に設定したい場合、コマンドは次のようになります。 M106 S127です。 のことです。 S の値は、255の50%が127であるため、127となります。
を使用することもできます。 M106 コマンドをパラメータなしで実行し、冷却ファンの回転数を100%に設定します。
注意してください: ファンスピードのコマンドは、それに先立つGコードコマンドが終了するまで有効になりません。
マーリンM107
M107は、プリンターのファンを1台ずつシャットダウンします。 1つのパラメーターを取ります、 P には、シャットダウンしたいファンのインデックスが入ります。
パラメータが与えられていない場合、 P はデフォルトで0になり、プリント冷却ファンを停止します。 たとえば、コマンド M107 は、プリント冷却ファンを停止させます。
マーリンM109
のようなものです。 M104 コマンドを使用すると M109 コマンドは、ホットエンドの目標温度を設定し、加熱します。 ただし、ホットエンドと異なり M104 を行い、ホットエンドが目標温度に達するのを待ちます。
ホットエンドが目標温度に達した後、ホストはGコードコマンドの実行を継続します。 M104コマンドが取るのと同じパラメータをすべて取ります。
ただし、1つだけ追加されます。 その1つとは:
- [R&ult]です; 温度 )>]です: このパラメータは、ホットエンドを加熱または冷却するための目標温度を設定します。 S コマンドを実行すると、プリンターがノズルをこの温度まで加熱または冷却するまで待機します。
のことです。 S コマンドは、暖房時には待ちますが、冷房時には待ちません。
例えば、ノズルを高い温度から120℃まで冷却したい場合、コマンドは次のようになります。 M109 R120です。
マーリン M112 シャットダウン
M112は緊急停止G-Codeコマンドで、ホストがこのコマンドを送信すると、直ちにプリンターのヒーターやモーターを全て停止させます。
このコマンドを実行した後、モデルの印刷を再開するには、プリンターをリセットする必要があります。
Marlinファームウェアでは、コマンドがキューでスタックし、実行までに時間がかかることがあります。 これを回避するために、Marlinファームウェアでは、コマンドの実行時に emergency_parser フラグを使用すると、プリンタに送信された直後にコマンドを実行することができます。
プリンターの詳細設定ファイル(Marlin/Configuration_adh.v)を開き、以下のようにテキストを削除することで有効にすることができます:
// 緊急コマンドパーサを有効にし、シリアル受信バッファに入る際に特定のコマンドを // 遮断できるようにする。 // 現在、M108、M112、M410 を扱う // AT90USB (USBCON) プロセッサを使ったボードでは動作しない! //#define EMERGENCY_PARSER
define EMERGENCY_PARSERの前の//を削除して、ソースを再コンパイルする必要があります。
Marlinのファームウェアのアップデートについては、以下のビデオで詳しく説明しています。
マーリン M125
M125コマンドは、プリントを一時停止し、あらかじめ設定された駐車位置にプリントヘッドを駐車させます。 また、駐車前にノズルの現在位置をメモリに保存します。
通常、プリンタのファームウェアにはあらかじめ駐車位置が設定されています。 この位置にノズルを駐車させるために M125 のコマンドを単独で実行します。
ただし、1つまたは複数のパラメータを使用して変更することができます。
- [L<]です; 長さ >]です: 駐車後、ノズルから設定した長さのフィラメントを巻き取るものです
- [X<; ポジ >】、【Y<; ポジ >], [Z <; ポジ >]です: これらの座標パラメータを1つ以上組み合わせて、プリントヘッドの新しい駐車位置を設定することができます。
原点にノズルを停め、9mmのフィラメントを引き込む場合は、以下のコマンドになります。 M125 X0 Y0 Z0 L9.
マーリン M140
M140コマンドは、ベッドの目標温度を設定した後、すぐに他のGコードを実行し、ベッドが目標温度に達するのを待たずに、ホストへ制御を戻します。
プリンターが他のGコードを実行している間、ベッドはバックグラウンドで加熱し続けます。 これは1つのパラメータを取ります:
- [S<.jp]です; 温度 )>]です: このパラメータは、ベッドの目標温度を摂氏で設定します。
例えば、ベッドを80℃まで温める場合 ° C、コマンドは M140 S80です。
マーリン M190
M190コマンドは、ベッドの目標温度を設定し、ベッドがその温度に達するまで、ホストに制御を戻さず、他のGコードも実行しない。
注意してください: で目標温度を設定した場合 S パラメータで指定した場合、ベッドを加熱している間だけ待機します。 アップ しかし、その温度に達するまでにベッドが冷える必要がある場合、ホストは待たされることはありません。
加熱中や冷却中にコマンドが待機するためには、ターゲット温度の設定を R 例えば、ベッドを50℃まで冷やすには、次のようなパラメータが必要です。 ° Cで、その温度に達するまで待つというコマンドです。 M190 S50です。
マーリン M400
M400コマンドは、バッファにある現在の手がすべて完了するまで、Gコード処理キューを一時停止します。 処理キューは、すべてのコマンドが完了するまで、ループで待機しています。
すべての移動を完了した後、プリンタはその行以降のGコードの実行を継続します。 例えば、以下のGコードを見てください:
M400;
M81;
1行目は現在の手がすべて終わるまで処理を一時停止し、2行目で3Dプリンターをシャットダウンするために M81 パワーオフG-Code。
マーリンM420
M420コマンドは、3Dプリンターのベッドレベリング状態を取得または設定します。 このコマンドは、自動ベッドレベリングシステムを持つプリンターでのみ機能します。
M420コマンドは、このメッシュデータをEEPROMから読み出すのに役立ちます。
また、このメッシュデータをプリンターが印刷に使用することを有効または無効にすることができます。 以下のようないくつかのパラメータを取ることができます:
- [S<.jp]です; 0 1 >]です: ベッドレベリングを有効(1)または無効(0)にします。 ベッドレベリングを有効にするには、プリンターのEEPROMに有効なメッシュがある必要があります。
- [l<]です; インデックス >]です: 複数のファイルがある場合に、使用するベッドレベリングメッシュを指定します。 メッシュデータのインデックスを値として取り込みます。
- [V]: 1に設定するとメッシュデータをプリントアウトします。
- [T]: 取得したメッシュデータの出力形式を設定します。0は人間が読める形で、1はCSVで、4はコンパクトな形で出力します。
- Z<; リニア >]です: Zフェードの高さを設定し、この高さを超えるとメッシュ補正の使用を停止します。
例えば、EEPROM内の2番目のメッシュデータをCSV形式で出力したいとします。 正しいコマンドの使い方は M420 V1 I1 T1
マーリンM420 S1
M420 S1は、サブセットです。 M420 EEPROMから取得した有効なメッシュを使用して、プリンターのベッドレベリングを有効にします。
EEPROMに有効なメッシュがない場合、何もしません。 通常は、EEPROMの後に見つかります。 G28 ホーミングコマンド
マーリンG0
Marlin G0は高速移動コマンドで、ノズルをビルドプレート上のある位置から別の位置に最短距離で移動させます(直線)。
移動中にフィラメントを敷かないので、G1コマンドよりも高速な移動が可能です。 その際のパラメータは以下の通りです:
- [X<; ポジ >]、[Y <; ポジ >], [Z<; ポジ >]です: X軸、Y軸、Z軸の移動先となる新しい位置を設定するパラメータです。
- [F<; mm/s >]です: 印字ヘッドの送り速度。 省略すると、プリンターは自動的に最後のG1コマンドからの送り速度を使用します。
つまり、プリントヘッドを100mm/sで原点に高速移動させたい場合は、以下のコマンドになります。 g0 x0 y0 z0 f100.
関連項目: 最強のインフィルパターンとは?マーリンG1
G1コマンドは、ビルドプレート上のある地点から別の地点へ直線的に移動するコマンドで、地点間を移動しながらフィラメントを押し出すことから、リニアムーブコマンドと呼ばれる。
この点は、ラピッドムーブ()と異なる。 G0 )を含むいくつかのパラメータを取り、移動しながらフィラメントを敷設することはありません:
- [X<; ポジ >]、[Y <; ポジ >], [Z<; ポジ >]です: X軸、Y軸、Z軸の移動先となる新しい位置を設定するパラメータです。
- [E<.jp]です; ポジ >]です: 新しいポイントに移動するときに押し出すフィラメントの量を設定します。
- [F<; mm/s >]です: 印字ヘッドの送り速度。 省略すると、プリンターは自動的に最後のG1コマンドからの送り速度を使用します。
例えば、2点間を50mm/sの速度で直線的にフィラメントを敷き詰める場合、正しいコマンドは次のようになります。 G1 X32 Y04 F50 E10.
マーリンG4
G4コマンドは、設定された時間だけマシンを一時停止します。 この間、コマンドキューは一時停止されるので、新しいGコードコマンドは実行されません。
一時停止中も、機械はその状態を維持し、すべてのヒーターは現在の温度を保ち、モーターは作動したままです。
という2つのパラメータを受け取ります:
- [P<; 時間(ms) >]です: 一時停止時間をミリ秒単位で指定します。
- [S<.jp]です; 時間 >]です: 休止時間を秒単位で設定します。 両方のパラメーターが設定されている場合は、Sが優先されます。
10秒間の一時停止を行うには、コマンド G4 S10です。
マーリンG12
G12コマンドは、プリンターのノズルクリーニングを行うコマンドです。 まず、ノズルをプリンターのブラシが装着されている場所に移動させます。
次に、ブラシに付着したフィラメントを掃除するために、プリントヘッドをブラシ上で積極的に動かします。 ここでは、そのパラメータを紹介します。
- [P]: ノズルのクリーニングパターンを選択するパラメーターで、0は直線的な往復、1はジグザグパターン、2は円形パターンです。
- [S<.jp]です; カウント >]です: クリーニングパターンを繰り返す回数です。
- [R&ult]です; ラジウス >]です: パターン2を選択した場合のクリーニングサークルの半径。
- [T<; カウント >]です: ジグザグ模様の三角形の数を指定します。
ブラシについたノズルを往復させて掃除したい場合、正しいコマンドは G12 P0.
Curaでは、このコマンドを実験的な設定で使う方法が用意されています。 wipe nozzleコマンドについては、私が書いた「Curaで実験的な設定を使う方法」という記事で詳しく解説しています。
マーリンG20
G20コマンドは、プリンタのファームウェアがすべての単位をインチで解釈するように設定します。 つまり、押し出し、移動、印刷、そして加速度の値もすべてインチで解釈されます。
つまり、プリンターには、直線運動がインチ、速度がインチ/秒、加速度がインチ/秒2ということになる。
マーリンG21
G21コマンドは、プリンターのファームウェアがすべての単位をミリメートルで解釈するように設定するため、直線運動、速度、加速度は、それぞれmm、mm/s、mm/s2となります。
マーリンG27
G27コマンドは、ビルドプレート上のあらかじめ設定された位置にノズルを配置し、キュー内の動作がすべて完了するまで待機し、ノズルをパークするコマンドです。
プリントを一時停止して調整したいときにとても便利です。 ノズルを駐車しておけば、プリントの上にホバリングして溶かしてしまうことを防げます。
という1つのパラメータを受け取ります:
- [P]: 0を選択した場合、ノズルの初期高さがZパーク位置より低い場合にのみ、Zパーク位置までノズルを上昇させるようになります。
選択1は、ノズルの初期高さに関係なく、Zパークの位置にパークします。 選択2は、ノズルをZパーク分高くしますが、ZハイトをZマックスより低く制限します。
を使用する場合は G27 コマンドをパラメータなしで実行すると、デフォルトでP0になります。
マーリンG28
G28コマンドは、プリンターが原点で既知の位置を確立するために原点復帰を行います。 原点復帰とは、プリンターがプリンターの原点(座標[0,0,0])を見つけるためのプロセスです。
各軸がリミットスイッチを押すまで動かすことで、その軸を原点とする。
そのパラメーターの一部を紹介します:
- [X]、[Y]、[Z]: これらのパラメータのいずれかを追加することで、これらの軸に原点復帰を制限することができます。 例えば、以下のようになります、 G28 X Y はX軸とY軸のみをホームにします。
- [L]: 原点復帰後のベッドレベリング状態を復元するものです。
- [0]: このパラメータは、プリントヘッドの位置が既に信頼されている場合、原点復帰をスキップします。
たとえば、X軸とZ軸だけをホームにしたい場合、正しいコマンドは次のようになります。 G28 X Z. すべての軸をホームにするためには G28 のコマンドを単独で実行します。
マーリンG29
G29は、ベッドレベリング自動化コマンドです。 マシンに搭載されている自動または半自動ベッドレベリングシステムを導入し、ベッドを水平にします。
プリンターのブランドによって、ファームウェアに5つの複雑なベッドレベリングシステムを搭載することができます。 それらは以下の通りです:
- メッシュベッドレベリング
- オートベッドレベリング
- ユニファイドベッドレベリング
- オートベッドレベリング(リニア)
- オートベッドレベリング(3点式)
それぞれ、プリンターのハードウェアと連携するための特定のパラメータを持っています。
マーリンG30
G30コマンドは、自動ベッドレベリングシステムのプローブでビルドプレートの特定のポイントをプローブし、そのポイントのZ高(ノズルからベッドまでの距離)を決定します。
高さを取得した後、ノズルをビルドプレートから適切な距離に設定します。 以下のようないくつかのパラメータを取ります:
- [C]: 多くの材料は加熱すると膨張するため、このパラメータを1に設定すると温度補償が可能になります。
- [X<; ポジ >】、【Y<; ポジ >]です: これらのパラメータは、プローブを行う座標を指定します。
ノズルの現在の位置でベッドをプローブする場合は、パラメータなしでコマンドを使用できます。 100, 67]のような特定の位置でプローブする場合は、正しいコマンドを使用します。 G30 X100 Y67。
マーリンM76
M76コマンドは、プリントジョブタイマーを一時停止します。
マーリンG90
G90コマンドは、プリンタを絶対位置決めモードに設定します。 つまり、Gコード内のすべての座標は、プリンタの原点を基準としたXYZ平面上の位置として解釈されます。
また、M83コマンドで上書きされない限り、エクストルーダーはアブソリュートモードに設定されます。 パラメータは取りません。
マーリンG92/G92 E0
G92コマンドは、ノズルの現在位置を指定した座標に設定します。 プリントベッドの特定の領域を除外したり、プリンターのオフセットを設定するために使用できます。
G92コマンドは、いくつかの座標パラメータを取り込みます。 それらは、以下の通りです:
- [ X<; ポジ >】、【Y<; ポジ >], [Z<; ポジ >]です: これらのパラメータは、プリントヘッドの新しい位置の座標を取り込みます。
- [E<.jp]です; ポジ >]です: このパラメータは、値を取り込んで、それを押出機の位置として設定します。 相対モードまたは絶対モードの場合、E0コマンドを使用して押出機の原点をリセットすることができます。
例えば、ベッドの中心を新しい原点にしたいとします。 まず、ノズルがベッドの真ん中にあることを確認します。
次に、送信します。 G92 X0 Y0 コマンドをプリンターに送信します。
注意してください: G92コマンドは、エンドストップによって設定された物理的な境界を維持します。 G92を使用して、Xリミットスイッチの外側やプリントベッドの下に移動することはできません。
以上のGコードは、3Dプリント愛好家が知っておくべきGコードライブラリのほんの一部ですが、必要不可欠なものです。
印刷するモデルの数が増えれば、G-Codeのコマンドも増えていくでしょう。
がんばって、Happy Printing!