G-code/ja
English • العربية • български • català • čeština • Deutsch • Ελληνικά • español • فارسی • français • hrvatski • magyar • italiano • română • 日本語 • 한국어 • lietuvių • Nederlands • norsk • polski • português • русский • Türkçe • українська • 中文(中国大陆) • 中文(台灣) • עברית • azərbaycanca • |
このページは現在再翻訳中です。非常にデータが古いため、ベーシックなコード以外は 英語版 を確認するようにして下さい。
このページでは、RepRapファームウェアで使用されているGコードと、その働きを説明します。プリントヘッドの移動に使われるコードは NIST により RS274NGC Gコード スタンダード に準拠しています。したがって、RepRapファームウェアはCNCミリングマシンなどの用途にも使うことができると言えます。Wikipedia の Gコードの記事 (英語) もご参照ください。
3Dプリンターへ使うGコードの準備方法には、いくつかの異なる方法があります。1つは Slic3r や Skeinforge、Cura などの スライスプログラムを使う方法です。これらのプログラムでは、インポートされたCADモデルをレイヤー状にスライスし、それぞれのレイヤーで必要なGコードを出力します。スライサープログラムは、3Dモデルをプリント部品へと変えるのにもっとも簡単な方法ですが、柔軟性に問題を抱えることもあります。Gコードを生成するほかの方法としては、Mecode のような低級ライブラリを使う方法があります。これらのライブラリーでは、ツールパスによって精密なコントロールを行うため、通常のスライスプログラムには適さない、複雑なプリントを行うときには非常に便利です。また、当然ながら、Gコードを自分で書いて3Dプリンターを制御することもできます。この方法は、プリンターの調整時などに、数本の線だけを出力したい、などというときには最も良い手段と言えるでしょう。
世界中には、たくさんの異なるファームウェアが存在します。その開発者たちは議論を交わしたり、誰かがしたことを調べずに新しい機能を実装してしまう傾向にあるため、長年にわたって開発されてきた3Dプリンター固有のコードには、たくさんの意味が持たされてしまっていることがあります。このページは、RepRapのマスターページです。このページの情報にしたがって全てのファームウェアがつくられていれば、同じコードを2つの異なる目的に使われることはなくなるはずです。したがって、新しい機能を開発するのであれば、まずここにコードを追加すればよいのです。とにかく、新しいコードは、このページに追加してから、実装してください。
ただ、残念なことに、人間の本質は変わりません。ベストと考えられる手順が、必ずしも従われるとは言い切れません。そのため、複数の機能がもたされるコードがいくつか出現してしまうことでしょう。もしそのようなことがあっても、このページに既に記載があり、その後から追加されたコードは、基本的には廃止されるか、変更される必要がある、というルールがあることを覚えておいてください。もちろん、後のインスタンスが優先される、技術的に素晴らしい理由があるという際には例外となります。実装日よりも、ここに追加された日の方が重要であることを覚えておいてください。
Contents
はじめに
通常、RepRapマシンに送信されるGコードは以下のようなものです。
N3 T0*57 N4 G92 E0*67 N5 G28*22 N6 G1 F1500.0*82 N7 G1 X2.0 Y2.0 F3000.0*85 N8 G1 X3.0 Y3.0*33
Gコードは、SDカード上のファイルにも保存することができます。RepRapのGコードを含んでいるファイルには、通常、.g
、.gco
、.gcode
などの拡張子が与えられています。BFB/RapManへのファイルには、.bfb
が使われています。ファイルに保存されているものや、スライサーによって生成されたGコードは、以下のようなものとなっているでしょう。
G92 E0 G28 G1 F1500 G1 X2.0 Y2.0 F3000 G1 X3.0 Y3.0
これらの記号や数字、その他のコードの意味は、以下にて説明されています。
スライサーソフトウェアは、Gコードファイルの最初と最後の行に、プリントの前後に行う特殊な操作を行うためのコードを追加します。(オプションとされているものもあります。) 特殊な操作の例としては、オートレベリング、ヒートベッドやホットエンドの加熱/冷却、ウージング(oozing) によるフィラメント切れを防ぐためのノズルの清掃機能、スタートアップ動作、システム電源の ON/OFF、部品の排出機能などが挙げられます。より詳細な情報は、Start GCode routines や End GCode routines ページをご覧ください。
特定のGコードが、どのファームウェアで実装されているのかを確認しやすくするため、コマンドの説明欄には以下のような表が設けられています。
対応状況 | FiveD | Teacup | Sprinter | Marlin | Repetier | Smoothie | RepRapFirmware | Machinekit | MakerBot | grbl | Redeem | MK4duo |
---|---|---|---|---|---|---|---|---|---|---|---|---|
Yes | Automatic | No | Partial | Experimental | Deprecated | ??? | ??? | ??? | ??? | Yes | Partial |
それぞれのフィールドの意味は以下の通りです。
Yes
- 全ての機能をサポートしていることを表します。
Partial または Experimental
- 部分的に機能をサポートしていることを表します。
- この場合には、ファームウェアのソースコードをそれぞれのブランチから確認したり、メインボードに設定されているスイッチを切り替える必要があったりします。
- Automatic
- この機能はファームウェアが自動的に処理することを表しています。したがって、このコマンドを送信する必要はありません。
- 例えば、Teacupファームウェアでの電源の on/off(M80/M81) に関するGコードがこれに相当します。
- ???
- ファームウェアがこのGコードをサポートしているかが不明なことを表します。
- もしあなたがプリンターを販売する予定があるのであれば、生産する前にこの機能をテストする必要があります。
No
- ファームウェアがこの機能をサポートしていないことを表します。
- Deprecated
- ファームウェアがこのGコードを廃止したことを表します。
- ファームウェアの作者は、Gコードを廃止する際には、このページ上のGコードに廃止することを記載し、(必要であるならば) 回避策を提示してください。また、そのコードがサポートされていた最後のバージョンも必ず記載してください。
フィールド
RepRap の Gコードはスペースや改行などで区切られる、フィールドの数々によって構成されています。これらのフィールドは、コマンドやパラメータ、その他の特別な目的として、ファームウェアによって識別されます。フィールドは、直後に数字が続く1文字の特定の文字や、数字を持たない1文字(フラグ) によって構成されます。フィールドの文字にはそれぞれ意味があり、それらはこの節の末尾にあるリストから確認できます。数字は、状況に応じて 整数
(例: 128) または 小数
(例: 12.42) で指定されます。例えば、X軸座標には 整数 である X175
や、少数である X17.62
などを割り当てることができます。しかし、エクストルーダー番号などに 2.76
などといった小数が使われないことは明らかです。このページでは、フィールドの数字は nnn
というプレースホルダーによって表されます。
RepRapFirmwareでは、複数の数値をパラメーターとして割り当てることのできるコマンドがいくつか存在します。この場合、数値の区切りとしてコロンを使用します。通常、これはマルチエクストルーダー環境において、エクストルーダーを指定するために使用されます。それぞれのエクストルーダーには特定の数値が与えられており、この値を指定せずに1つの数値のみを入力すると、そのパラメーターにしたがって全てのエクストルーダーが動作します。
文字 | 意味 |
---|---|
Gnnn | ある点に移動させるなどの、Gコードにおけるスタンダードなコマンドです。 |
Mnnn | 冷却ファンを起動するなどの、RepRap が独自に定義したコマンドです。 |
Tnnn | nnnの番号のツールを選択します。RepRapでは通常、この"ツール"は一つまたは複数のエクストルーダーに取り付けられたノズルを意味します。 |
Snnn | パラメータを指定するコマンドです。秒で指定される時間や、温度、モーターにかける電圧などに使われています。 |
Pnnn | パラメータを指定するコマンドです。ミリ秒で指定される時間や、PIDチューニング における比例定数 (Kp) などに使われています。 |
Xnnn | X軸座標コマンドです。通常は移動先を指定するために使われます。数値は整数でも少数でも構いません。 |
Ynnn | Y軸座標コマンドです。通常は移動先を指定するために使われます。数値は整数でも少数でも構いません。 |
Znnn | Z軸座標コマンドです。通常は移動先を指定するために使われます。数値は整数でも少数でも構いません。 |
U,V,W | さらなる軸に向けての座標コマンドです。(RepRapFirmware) |
Innn | パラメータを指定するコマンドです。円弧移動時の X-オフセットや、PIDチューニング における時間積分の誤差の変化率 (Ki) などに使われています。 |
Jnnn | パラメータを指定するコマンドです。円弧移動時の Y-オフセットなどに使われています。 |
Dnnn | パラメータを指定するコマンドです。PIDチューニング における直径や、導関数 (Kd) などに使われています。 |
Hnnn | パラメータを指定するコマンドです。PIDチューニング において、ヒーター番号として使われています。 |
Fnnn | 1分間あたりのフィードレートです。mmで指定します。(プリントヘッドの移動速度)。 |
Rnnn | パラメータを指定するコマンドです。温度を指定するために使用されています。 |
Qnnn | パラメータを指定するコマンドです。現在は使用されていません。 |
Ennn | 押し出されるフィラメントの長さ (mm) です。X,Y,Zと同様に指定しますが、消費されるフィラメントの長さが指定されます。 |
Nnnn | ライン番号です。通信エラーが起きたときに再送信を要求するために使われます。 |
*nnn | チェックサムです。通信エラーをチェックするために使用されます。 |
大文字/小文字の区別
NISTによるオリジナルのGコードスタンダードでは、Gコードを扱うプログラムに対し、大文字/小文字の区別をつけないことを要求しています。(コメント内の文字は除く) しかしながら、全ての3Dプリンターのファームウェアがこれに準拠しているわけではなく、大文字で書かれたコマンド文や変数のみしか認識しないものもあります。
- 大文字/小文字の区別を要求しないことで知られるファームウェア
- RepRapFirmware version 1.19 とそれ以降 (引用文を除く)
- 大文字/小文字の区別を要求することで知られるファームウェア
- RepRapFirmware version 1.18 とそれ以前
引用文
RepRapFirmwareでは、いくつかのコマンドが 引用文 をサポートしています。これを使うと、スペースやセミコロンなどの通常は使用することのできない文字を、ファイル名やWiFiパスワードなどに変数として使用することができます。引用文は、ダブルクオーテーション "
によって区切られます。引用文中にダブルクオーテーションを使う必要がある場合には、ダブルクオーテーションを二度入力してください。
使用例
ここでは、MYROUTER
というSSIDと、ABCxyz;" 123
というパスワードをWiFiネットワークリストに追加する例を示します。
この場合には、以下のようなコマンドを入力します。
M587 S"MYROUTER" P"ABCxyz;"" 123"
もし小文字を使えないファームウェアを使っている場合には、以下のコマンドを入力します。
M587 S"MYROUTER" P"ABC'X'Y'Z;"" 123"
コメント
Gコードのコメントは、セミコロン (;) から始まり、改行コードで終わります。
N3 T0*57 ; これがコメントです N4 G92 E0*67 ; これもまたコメントとして使えます N5 G28*22
いくつかのファームウェアでは、CNC Gコードスタンダードに準拠し、コメントを括弧で区切っていることがあります。この場合には、括弧は同じ行内に収まっている必要があります。
(軸のホーミング) G28 (ホーミングされる軸) X Y
RepRapプリンターでは、コメントやスペースは無視されます。ただし、これらはプリンターに送られる前にホストコンピューターによって取り除かれる方がよいでしょう。これにより、通信量を削減することができます。
特別なフィールド
N: 行番号
対応状況 | FiveD | Teacup | Sprinter | Marlin | Repetier | Smoothie | RepRapFirmware | Machinekit | MakerBot | grbl | Redeem | MK4duo |
---|---|---|---|---|---|---|---|---|---|---|---|---|
Yes | Yes | Yes | Yes | ??? | ??? | Yes | Yes | ??? | ??? | Yes | Yes |
- 例
N123
行番号が存在する場合、それは行の最初のフィールドでなければなりません。SDカードに保存されるGコードファイルでは、通常行番号は省略されています。
チェック機能がサポートされている場合、RepRap ファームウェアは、行番号が1行につき1ずつ増えることを予測します。この通りにならなかった場合には、エラーとしてフラグが立てられます。しかし、M110
コマンド (以下を参照) を使うことでカウントをリセットすることができます。
Machinekitにおいては、Nを使用することには意味がなく、サポートはされていますが、推奨されません。
*: チェックサム
対応状況 | FiveD | Teacup | Sprinter | Marlin | Repetier | Smoothie | RepRapFirmware | Machinekit | MakerBot | grbl | Redeem | MK4duo |
---|---|---|---|---|---|---|---|---|---|---|---|---|
Yes | Yes | Yes | Yes | ??? | ??? | Yes | ??? | ??? | ??? | No | Yes |
- 例
*71
チェックサムが存在する場合、それは行の最後のフィールドでなければなりません。ただし、コメント文よりは先である必要があります。SDカードに保存されるGコードファイルでは、通常チェックサムは省略されています。
ファームウェアはチェックサムとローカルで計算された値を比較します。これらが異なる場合には、その行を再送信するよう要求します。
チェック機能
対応状況 | FiveD | Teacup | Sprinter | Marlin | Repetier | Smoothie | RepRapFirmware | Machinekit | MakerBot | grbl | Redeem | MK4duo |
---|---|---|---|---|---|---|---|---|---|---|---|---|
Yes | Yes | Yes | Yes | Yes | ??? | Yes | ??? | ??? | ??? | No | Yes |
- 例
N123 [...ここにGコードが書かれます...] *71
RepRapファームウェアは行番号とチェックサムをチェックします。 これらを指定せずにコマンドを送ってもRepRapは動作しますが、チェックは行われません。これらは両方とも指定されているか、指定されていないかのどちらかである必要があります。 もし片方のみが存在している場合には、エラーとなります。
Gコード文字列 "cmd" (行番号も含む) のチェックサム "cs" は、以下のように、それぞれのバイトで排他的論理和計算が行われます。* や NULL文字 と一致すると、処理が終了します。
int cs = 0; for(i = 0; cmd[i] != '*' && cmd[i] != NULL; i++) cs = cs ^ cmd[i]; cs &= 0xff; // 防御的プログラミング
そして計算によって求められた値は、10進数の整数として、コマンドの* の後に追加されます。
バッファリング
対応状況 | FiveD | Teacup | Sprinter | Marlin | Repetier | Smoothie | RepRapFirmware | Machinekit | MakerBot | grbl | Redeem | MK4duo |
---|---|---|---|---|---|---|---|---|---|---|---|---|
Yes | Yes | ??? | Yes | ??? | ??? | Yes | ??? | ??? | Yes | Yes | Yes |
バッファリングがサポートされている場合には、RepRapファームウェアは、いくつかのコマンドを内部リングバッファに保存してから実行します。これはつまり、コマンドが確認され、次のコマンドが送信されるまでの間に (明確な) 遅延がなくなることを意味します。また、線分シーケンスが、それぞれの間を遅延なくプロットされるようになることを意味しています。バッファリングコマンドが受信されるとすぐに、これらは確認作業が行われ、ローカルに格納されます。ローカルバッファーが全て埋まってしまった場合、次のバッファーが利用できるストレージスペースができるまで、確認作業が遅延されます。これは フロー制御 の仕組みと同じです。
通常、次のような移動コマンドはバッファリングされます: G0
-G3
や G28
-G32
Teacup Firmware では、さらに他の設定コマンドもバッファリングします: G20
, G21
, G90
, G91
これ以外の G
, M
, T
コマンドについては、バッファリングされません。
特定のコード (M106 など) が正しい順序で実行されることを保証し、既に実行された移動コマンドがより前方のキューに追加されないようにするために、RepRapFirmware では、さらに内部キューを実装しています。
バッファリングされないコマンドは、受信される、バッファに格納されますが、バッファ内のその他のコマンドが全て実行されるまで、ホストに認識されません。したがって、これらのコマンド送る際には、ホストはそのコマンドが完了されるまで一時停止します。これらのコマンド間で行われる短いポーズは、マシンのパフォーマンスには影響しません。
Gコマンド
G0 & G1: 移動
対応状況 | FiveD | Teacup | Sprinter | Marlin | Repetier | Smoothie | RepRapFirmware | Machinekit | MakerBot | grbl | Redeem | MK4duo |
---|---|---|---|---|---|---|---|---|---|---|---|---|
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
-
G0
: 高速直線移動 -
G1
: 直線移動
- 使用方法
G0 Xnnn Ynnn Znnn Ennn Fnnn Snnn
G1 Xnnn Ynnn Znnn Ennn Fnnn Snnn
- パラメータ
- 全てのパラメータを指定する必要はありませんが、最低でも一つのパラメータは指定する必要があります。
Xnnn
X軸上における移動先の位置Ynnn
Y軸上における移動先の位置Znnn
Z軸上における移動先の位置Ennn
開始地点と終了地点の間で押し出されるフィラメントの量Fnnn
開始地点と終了地点の間のフィードレート(一分間あたりの値。指定されている場合にのみ適用。)Snnn
エンドストップに到達したことをチェックするフラグ (S1
でチェック、S0
で無視。S2
は後述の注意点を参照。デフォルトはS0
です。)1- 例
G0 X12 ; X軸上の 12mm の位置に移動する G0 F1500 ; フィードレートを 1500mm/分 に設定する G1 X90.6 Y13.8 E22.4 ; 22.4mm のフィラメントを押し出しながら、X軸の 90.6mm、Y軸の 13.8mm の位置に移動する
RepRap Firmware では、G0
と G1
を同じコマンドとして扱う仕様となっています。これは同じコマンドとして扱わない場合と、効率が全く変わらないためです。2
ほとんどのRepRapファームウェアでは、フィードレートに対しては巧妙な動作を行います。
G1 F1500 ; フィードレートを 1500mm/分 に設定する G1 X50 Y25.3 E22.4 ; 移動しながら、フィラメントを押し出す
上記の例では、先に 1500mm/分 のフィードレートに設定してから、2点間の間で 22.4mm のフィラメントを押し出しながら、X軸の 50mm、Y軸の 25.3mm に移動します。
G1 F1500 ; フィードレートを 1500mm/分 に設定する G1 X50 Y25.3 E22.4 F3000 ; 3000mm/分 まで加速する
対して、上記の例では、1500mm/分 のフィードレートに設定してから、同様に移動する点は同じですが、こちらの例では、3000 mm/m まで加速させます。全ての動作は同期しているので、X軸やY軸の動きに合わせて、フィラメントの押し出される量も加速します。
RepRapの仕様では、フィードレートは他のパラメータと同様、直線補間される変数として扱われます。これにより、プリントヘッドの加速と減速は、全てがスムーズに動くように完全に制御され、全ての位置で適切な量のフィラメントが出力されるようになります。3
一定の長さでエクストルーダーを巻き戻すには、単純に G0
か G1
コマンドとともに、既に押し出した長さより短い値の E
を送りましょう。(例えば、移動中にノズルが空中に浮いてしまい、そのままでは溶けたフィラメントが垂れてしまうような状況で、内圧を下げるために使われます。)
- 注意点
1 いくつかのファームウェアでは、移動中のエンドストップ検知機能を有効化または無効化することができるようになっています。正しく設定されていない場合には、RepRapにダメージが及ぼされることがあります。したがって、どのファームウェアを使っている場合でも、この使い方と同様に S
パラメーターがサポートされているかどうかを確認してください。RepRapFirmwareでは、デルタプリンターで S1
または S2
パラメータを使うと、XYZ
パラメータがヘッドの位置ではなく、それぞれのタワーモーターの位置を参照するようになります。また、パラメータが S1 の場合には、エンドストップの検知機能が有効化されます。
2 RS274NGCの仕様では、G0
は 高速移動 とされています。これは現在の位置から新しい位置へとできる限り速くかつ効率的に移動するために使われていました。また、G1
は 制御移動 とされています。これは同様の移動をできる限り精密に行う目的で使われていました。
3 いくつかのファームウェアでは、移動コマンドと同時にインラインでフィードレートを設定することをサポートしていません。
4 RepRapFirmware では 'R1' という追加コマンドを提供しています。これは、以前にプリントをポーズした座標へ戻ることをマシンに指示するコマンドです。このパラメータが使われている場合で、軸のコマンドも同時に指定されている場合、ポーズした座標にオフセットが追加されます。(例: G1 R1 Z5
)
いくつかの古いCNCやその他のマシンでは、直線移動でない場所でより速く移動することが可能となっていました。これは、デルタ型 や ポーラー型 プリンターなどの、曲面部で直接よりも速く動きやすい、非カーテシアンプリンターにも当てはまります。
G2 & G3: 円弧補間
対応状況 | FiveD | Teacup | Sprinter | Marlin | Repetier | Smoothie | RepRapFirmware | Machinekit | MakerBot | grbl | Redeem | MK4duo |
---|---|---|---|---|---|---|---|---|---|---|---|---|
No | No | Yes | Yes1 | Yes | Yes | No | Yes | ??? | Yes | Experimental | Yes |
- 使用方法
G2 Xnnn Ynnn Innn Jnnn Ennn Fnnn
(時計回り円弧補間)G3 Xnnn Ynnn Innn Jnnn Ennn Fnnn
(反時計回り円弧補間)- パラメータ
Xnnn
X軸上における移動先の位置Ynnn
Y軸上における移動先の位置Innn
The point in X space from the current X position to maintain a constant distance fromJnnn
The point in Y space from the current Y position to maintain a constant distance fromEnnn
The amount to extrude between the starting point and ending pointFnnn
The feedrate per minute of the move between the starting point and ending point (if supplied)- 例
G2 X90.6 Y13.8 I5 J10 E22.4
(Move in a Clockwise arc from the current point to point (X=90.6,Y=13.8), with a center point at (X=current_X+5, Y=current_Y+10), extruding 22.4mm of material between starting and stopping)
G3 X90.6 Y13.8 I5 J10 E22.4
(Move in a Counter-Clockwise arc from the current point to point (X=90.6,Y=13.8), with a center point at (X=current_X+5, Y=current_Y+10), extruding 22.4mm of material between starting and stopping)
- 注意
1Marlin Firmware では、デルタプリンター や スカラープリンター に対しては実装されていません。