FlashForge のG-Codeを覗いてみる

3Dプリンタ

NC屋としては、3DプリンタのG-Codeにも興味があるので、
FlashPrint5が吐き出した、Adventurer3用データを覗いてみました。
前回、FlashPrint5 の「.GX」拡張子のG-Codeを編集できるソフトを公開しました。
このソフトで、閲覧や編集が可能になります。
一般的なエディターでも、上部のヘッダー部を無視するか削除すれば閲覧は可能です

3Dプリンタ、G-Code 資料

とりあえず、ググってみました。
一般的な「Gコード」「Mコード」は下記で参考になりそうです

http://replicat.org/gcodes
http://replicat.org/mcodes

基本的なGコードは、工作機械と若干の互換もあるみたいですね

  • G0 – Rapid Motion
  • G1 – Coordinated Motion
  • G2 – Arc – Clockwise
  • G3 – Arc – Counter Clockwise
  • G4 – Dwell
  • G20 – Inches as units
  • G21 – Millimeters as units
  • G28 – Home given Axes to maximum
  • G30 – Go Home via Intermediate Point (not implemented)
  • G53 – Set absolute coordinate system
  • G90 – Absolute Positioning
  • G91 – Relative Positioning
  • G92 – Define current position on axes

Mコードは、工作機械もそうですが互換性は少ないです
終了や工具(ヘッド)交換ぐらいでしょうかね?
ただ、FlashPrint5 では、終了コードは、「M18」のようです。

  • M2 End program
  • M6 Tool change. This code waits until the toolhead is ready before proceeding. This is often used to wait for a toolhead to reach the its set temperature before beginning a print. ReplicatorG also supports giving a timeout with M6 P<secs>.
  • M30 program rewind

こんなページもありましたが、やはり内容はだいぶ違いますね。
FlashForge 用の資料も見つけました
slic3r-configs/Flashforge Gcode protocol(open).md at master · minsk-hackerspace/slic3r-configs · GitHub
https://googlegroups.com/group/flashforge/attach/46dc32d7dc6079ae/FlashForge%20Gcode%20Protocol(open).pdf?part=0.1

参考にしやすいように、ここに書かれているFlashForge仕様をまとめてみました。

  • G1 :直線補間|X軸|Y軸|Z軸|E押出し長|F送り
  • G4 :一時停止時間設定|P(ms)|S(s)
  • G28 :ホーム位置|X軸|Y軸|Z軸|なし:全軸
  • G90 :絶対座標指令
  • G91 :相対座標指示
  • G92 :現在位置座標系設定
  • M6 :ヘッド選択|T0(右ヘッド)|T1(左ヘッド)|S(待ち時間:初期値600s)
  • M7  :プラットフォーム温度待ち|S(待ち時間:初期値600s)
  • M17 :ステッピングモータを有効|X軸|Y軸|Z軸|A軸|B軸|E(A&B)|なし:全軸
  • M18 :ステッピングモータ無効|X軸|Y軸|Z軸|A軸|B軸|E(A&B)|なし:全軸
  • M104 :ヘッド温度設定|S(°C)|T0 or T1(右・左ヘッド)
  • M105:エクストルーダーとプラットフォーム温度確認
  • M106 :冷却ファン有効
  • M107 :冷却ファン無効
  • M108 :ヘッド交換|T0 or T1(右・左ヘッド)
  • M112:緊急停止
  • M114:現在位置取得
  • M115:機械情報取得
  • M119:マシンの状態確認
  • M140 :プラットフォーム温度設定|S(°C)
  • M132 :メモリからホームポジション位置を読み込む|X軸|Y軸|Z軸|A軸|B軸
  • M907 :ステッパー電流値を設定|X軸|Y軸|Z軸|A軸|B軸

FlashPrint5 が作成したG-Code

FlashPrint5に標準で用意されている、サンプルの「20mm_Box」をスライスさせてみます。
作成された、「20mm_Box.gx」の内容をみてみましょう。
通常のエディタでも、最上部部分が文字化けしますが、読めない事はないです。
前回公開した、「EditorForFlashPrint5.exe」では、閲覧、編集、保存が可能です。
もし、興味あれば、ダウンロードしてみてください。

全体の構造

先頭の「;」はコメント文です。
まず最初の数行で、スライス条件が、コメント文でまとめられています。

スライス条件情報の後、ヘッダー部分で機械をプリント可能状態へ準備運転させています。
その後、実際のプリント部分ですが、動作指示は全て「G1:直線補間」で定義されていますね
工作機械と違い、G2,G3 の円弧補間は、あまり必要ないのかもしれませんね。
最後に、初期状態へ戻して終了です。

コメント文でスライス条件掲示

データの最初に、スライス条件が、まとめられています。
参照する人は少ないかもしれませんが、後日条件を確認したい場合など
G-Codeデータだけで確認できそうです。
条件を突き詰めている人には、重宝するかもしれません。

;machine_type: Adventurer 3 Series
;right_extruder_material: PLA
;right_extruder_material_density: 1.24
;filament_diameter0: 1.75
;right_extruder_temperature: 210
;layer_height: 0.18

データ構造を分析

M118  : 正確にはわかっていません。後ほどわかる範囲で説明します。
M140 S50 T0 : プラットフォーム温度設定 S(°C)
M104 S215 T0 : 右(T0)ヘッド温度設定 S(°C)
M104 S0 T1 : 左ヘッド温度設定ですが、シングルヘッドの場合不要
M107 : 冷却ファンOFF
G90 : 絶対座標指令
G28 : 全軸ホーム位置へ移動
M132 X Y Z A B  : メモリから原点位置を読み込む
G1 Z50.000 F420 : Z50.000 へ420mm/sのスピードで移動
G161 X Y F3300 : X、Y軸の最小点へ移動
M7 T0 : プラットフォーム温度待ち
M6 T0 : 右ヘッド(T0)ヘッド選択
M651 S255 : 筐体ファンON
;layer_count: 60
M108 T0 : ヘッド交換
G1 X11.85 Y-16.35 F4800 : X11.85 Y-16.35 へF4800で移動
;preExtrude:0.20
M106 : 冷却ファンON
G1 Z.200 F420 : Z0.200 へF420で移動
;structure:pre-extrude ———– プリント開始 ———————
G1 X11.85 Y-16.35 F4800
G1 X13.55 Y-15.58 E.2706 F1200 : E指令:フィラメント押し出し量mm
G1 X14.97 Y-14.37 E.5412


G1 X-9.06 Y8.48 E211.5981
G1 X-8.48 Y9.06 E211.6248
G1 X-9.06 Y9.05 E211.6438
M107 : 冷却ファンOFF
G1 E209.1438 F1500 : フィラメント引き戻し「211.6438 – 209.1438 = 2.5mm」
G1 Z11.650 F420
G1 X10.94 Y9.05 F6000
;end gcode ———– プリント終了 ———————
M104 S0 T0 : 右(T0)ヘッド温度キャンセル
M140 S0 T0 : プラットフォーム温度キャンセル
G162 Z F1800 : Z軸の最大点に移動
G28 X Y : X、Y軸ホーム位置へ移動
M132 X Y A B  : メモリから原点位置を読み込む
M652 : 筐体ファンOFF
G91 :相対座標指示
M18 :ステッピングモータ無効

M118

「M118」はよくわかりません。検索しても適格な説明はみつかりませんでしたが
ラフトなども含めた造形範囲を定義しているような感じです。
なんとなく分かったのは、プラットフォーム中心からの、上下(Y軸)左右(X軸)高さ(Z軸)
の最大値のようです。
一軸に対して、「+-」の座標的な意味はないようで、数値的に大きい方で定義するようです。
検証として、標準サンプルの「20mm-Box」を「センターに配置」して、
「ラフトなし、プレ押し出しなし」の他は標準条件でスライスしてみました。

M118 X10.94 Y10.00 Z10.10 T0

となりました、「X10.00」を予想していましたが、「X10.94」でした。
ただこれは、プリントのスタート位置をスライサーが若干調整しているのでは?
と勝手に解釈し無視する事にします。
次に、モデルを「X+10.0」「Y+10.0」に移動して、同様にスライスします。

M118 X20.94 Y20.00 Z10.10 T0

X軸、Y軸とも10mmシフトしたので、中心からの距離も10mm長くなります。
モデルの幅は変わりませんが、M118の値は、「10mm」プラスされています。
次に、一旦センターに戻し、センターから「X-10.0」「Y-10.0」に移動して、
同様にスライスします。

M118 X20.00 Y20.00 Z10.10 T0

このように、「0.94」を無視すれば、上記と同様の値になりました
座標の方向性は関係なく、大きな値になるようですね。
まぁ、通常はこの設定はスライサーに任せればいいと思いますが、
プリンタの最大値に設定したい場合には、Adventurer3の造形範囲「150×150×150mm」の場合

M118 X75.0 Y75.0 Z150.0 T0

でよさそうです。

FlashPrint が苦手な書式

コードを確かめていて、FlashPrint のプレビューがおかしくなるコードが見つかりました

1.工作機械のISOコードの場合、「G1 」と「G01」は同等ですが、「G01」の指令では
  FlashPrint で 正常に描画できません。

2.また、ISOコードでは、NCワードとワードの区切りは無くても問題ありませんが
  FlashPrint は「スペース」で区切らないと、同様に正常に描画できませんでした。

ただし、単純に移動するだけのコードで試してみたところ、FlashPrintでは異常でしたが
実際にAdventurer3に送って動作させると、正常に動作しました。
FlashPrint5の問題かもしれませんが、「G1」のように、コードの数値はそのまま書き
ワードとワードは、「スペース」を間に入れた方がFlashPrintで動作確認できます。

まとめ

機械のウォームアップ(ヘッダー)とクールダウン(フッター)指令が分かりました
ヘッダーとフッターの間に、実際のプリント指令が定義されます。
NC工作機械と違って、手打ちのG-Codeで3Dプリンタを動かす事は少ないと思いますが
次回、マシンをランニング運転させるデータを作成してみようと思います。

コメント

タイトルとURLをコピーしました