こんにちは、Make WakのWak (@wak198)です。
3Dプリンターを使い込んでくると、直接Gコードを記述したいことがあります。
特にスライサーソフトCuraで、「スタートGコード」と呼ばれるところを自分で記述することがあります。(プリント前の原点復帰などを設定できる部分。効率化や品質向上のため、自分でいじることがある)
基本的なGコードは Google で検索すれば出てくるのですが、さらにここに「変数」を使いたいことが出てきます。
例えば、ノズル昇温をしたいけど、 材料ごとの設定データに合わせてほしい、といった場面ですね。
今回はこの辺のGコードの設定、特に変数の活用に関して防備メモ的に解説していきます。
最後には変数リストも載せておくのでリファレンスとして活用してください。
ステップ①:スタートGコードとは
Curaではプリンターの設定からマシンセッティングのメニューを開くとスタートGコードを編集することができます。
マシンセッティングの中にスタートGコードを記述するテキストボックスがあります。
ここを自分で編集すると、プリントをスタートした直後に原点復帰をする動作などをいじることができます。
たとえば以下の例だと最初に M 140(ベッドの昇温)を始めます。
その後に G 28(原点復帰)を指定することで、ベッドの温度を上げながら原点復帰動作を同時に行っています。
動作を並行して行うことで時間を有効活用しています。
(Gコードの直接変更は機械を破損する可能性もあるので自己責任でお願いします)
このように、CURAでスタートGコードを設定した状態で、スライスしたファイル(Gコード形式)を開いてみるとどうなっているでしょうか。
このように
①先頭にCuraがコメントを勝手に追加して、
②その次に自分が指定したスタートGコードがそのまま埋め込まれ、
③その後にようやくモデルのプリント動作が記述されていきます。
つまりスタートGコードをCuraで設定してやるとプリントの前の準備動作を自分で上書きすることが可能なのです。
ステップ②:ベッド温度を設定してみる
スタートGコードの意味がわかったところで実際にベッド温度を昇温するコードを書いてみましょう。ネットで「3Dプリンター Gコード」などで検索をするとこのようなサイトがヒットします。
ここで調べてみるとベッド温度を上げるためには 「M 140」というコードを記述してやればいいようです。
M140 S[温度]
で温度を変更できるようです。
なのでスタートGコードにも M 140を使ってみましょう。
僕は普段PLAのベッド温度を65度に設定しているので、
「M140 S65」と書いてみます。
これでベッドの温度を65度に昇温する G コードが完成しました。
でもちょっと待ってください、 ABS を印刷したい時はベッド温度を100℃にしたいですよね?
この方法だと絶対に65℃にしか昇温してくれません。
いちいちスタートGコードを書き換えていたらめんどくさいですよね?
ここでようやく変数を使おう、ということになるわけです。
ステップ③:ベッド温度をスライス設定とリンクさせる(変数を使う)
結論から言うとベッド温度に変数を指定するには、以下のような記述を行えば OK です。
M140 S{material_bed_temperature}
この {material_bed_temperature} の部分が変数です。
materialごとの設定のbedのtemperatureの設定を反映する、という意味です。
例えば下の例ではベッドの温度65°に設定しているので、
M140 S{material_bed_temperature} は
M140 S65として翻訳されます。
実際にスライスした後のGコードを見てみると、 このように
「M140 S65」として
記述されています 。
つまりCuraが変数を理解して、65℃という固定値に翻訳して出力してくれました。
これでPLAのときは65℃、ABSのときは100℃、のようにスライス設定とリンクして自動で G コードを出力してくれるようになります。
ステップ④:ノズル温度もリンクさせてみる(変数を使う2回目)
試しに、 ベッドの温度だけではなく、ノズルの温度も変数を使って設定してみましょう。
先ほどと同じようにノズル温度を上げるコマンドを検索してみると、
M109 S[温度]
を使えば良いらしいということがわかります。
また変数についても調べてみると、
{material_print_temperature}
を使えば良いということも分かります。
よってノズル温度を、材料ごとのプリント設定とリンクさせるには、以下のように記述すればOKです。
M109 S{material_print_temperature}
これで試しにスライスしてみたGコードを開いてみると以下のようになっています 。
ちゃんと僕が PLA 用に設定した、ノズル温度200℃になるように翻訳されていますね。
これでノズル温度の設定も、変数を使って行うことができました。
ちなみに
M104はベッドを昇温するコマンド
M140はベッドを昇温して設定温度になるまで待機するコマンド
M109はノズル温度を昇温するコマンド
M190はノズルを昇温して設定温度になるまで待機するコマンド
です。
よく使うのでメモしておくといいかもしれません。
まとめ
今回はCuraで変数を使用してGコードを記述する方法について見てみました。
かなりニッチな話でしたが 、G コードを自由に扱えるようになると3 D プリンターの活用の幅がぐっと広がってきます。
上で紹介したような原点復帰の効率化も、自分の意思で行うことができるようになりますので、もし興味があれば(慎重に)トライしてみてください
また、今回は温度設定についてだけ紹介しましたが、他にも変数はたくさんあるようです。
自分が調べてみた結果を以下にリストアップしておくので参考にしてみてください。
(このメモを残しておくことが、この記事の一番の目的だったりする。。。)
それでは良いモデリングライフを!
Wak
変数リファンレンス
ここから先はネットから拾ってきた変数のリストです。
まともに使えるか、確認していないので十分注意して参考情報でお願いします。
(3 D プリンターの破損など、いかなる損害についても補償することができません。ご了承ください)
また、ボリュームが非常に多いのでブラウザの検索機能を使ってみてください。
例)温度だったら「temp」で検索(Ctrl+F)
“acceleration_enabled”: false,
“acceleration_infill”: 3000,
“acceleration_layer_0”: 3000,
“acceleration_prime_tower”: 3000,
“acceleration_print”: 3000,
“acceleration_print_layer_0”: 3000,
“acceleration_skirt_brim”: 3000,
“acceleration_support”: 3000,
“acceleration_support_infill”: 3000,
“acceleration_support_interface”: 3000,
“acceleration_topbottom”: 3000,
“acceleration_travel”: 5000,
“acceleration_travel_layer_0”: 5000.0,
“acceleration_wall”: 3000,
“acceleration_wall_0”: 3000,
“acceleration_wall_x”: 3000,
“adhesion_extruder_nr”: “0”,
“adhesion_type”: “brim”,
“alternate_extra_perimeter”: false,
“blackmagic”: 0,
“bottom_layers”: 8,
“bottom_thickness”: 0.8,
“brim_line_count”: 20,
“brim_outside_only”: true,
“brim_width”: 8.0,
“coasting_enable”: false,
“coasting_min_volume”: 0.8,
“coasting_speed”: 90,
“coasting_volume”: 0.064,
“conical_overhang_angle”: 50,
“conical_overhang_enabled”: false,
“cool_fan_enabled”: true,
“cool_fan_full_at_height”: 0.3,
“cool_fan_full_layer”: 2,
“cool_fan_speed”: 100.0,
“cool_fan_speed_max”: 100.0,
“cool_fan_speed_min”: 100.0,
“cool_lift_head”: false,
“cool_min_layer_time”: 5,
“cool_min_layer_time_fan_speed_max”: 10,
“cool_min_speed”: 10,
“cooling”: 0,
“draft_shield_dist”: 10,
“draft_shield_enabled”: false,
“draft_shield_height”: 10,
“draft_shield_height_limitation”: “full”,
“dual”: 0,
“experimental”: 0,
“extruder_prime_pos_abs”: false,
“extruder_prime_pos_x”: 0,
“extruder_prime_pos_y”: 0,
“extruder_prime_pos_z”: 0,
“gantry_height”: 55,
“gradual_infill_step_height”: 5.0,
“gradual_infill_steps”: 0,
“infill”: 0,
“infill_before_walls”: true,
“infill_line_distance”: 4.0,
“infill_line_width”: 0.4,
“infill_mesh”: false,
“infill_mesh_order”: 0,
“infill_overlap”: 10,
“infill_overlap_mm”: 0.04,
“infill_pattern”: “grid”,
“infill_sparse_density”: 20,
“infill_sparse_thickness”: 0.1,
“infill_wipe_dist”: 0.1,
“jerk_enabled”: false,
“jerk_infill”: 20,
“jerk_layer_0”: 20,
“jerk_prime_tower”: 20,
“jerk_print”: 20,
“jerk_print_layer_0”: 20,
“jerk_skirt_brim”: 20,
“jerk_support”: 20,
“jerk_support_infill”: 20,
“jerk_support_interface”: 20,
“jerk_topbottom”: 20,
“jerk_travel”: 30,
“jerk_travel_layer_0”: 30.0,
“jerk_wall”: 20,
“jerk_wall_0”: 20,
“jerk_wall_x”: 20,
“layer_0_z_overlap”: 0.15,
“layer_height”: 0.1,
“layer_height_0”: 0.3,
“line_width”: 0.4,
“machine_acceleration”: 4000,
“machine_center_is_zero”: false,
“machine_depth”: 205,
“machine_extruder_count”: 1,
“machine_Gコード_flavor”: “RepRap (Marlin/Sprinter)”,
“machine_heat_zone_length”: 16,
“machine_heated_bed”: true,
“machine_height”: 200,
“machine_max_acceleration_e”: 10000,
“machine_max_acceleration_x”: 9000,
“machine_max_acceleration_y”: 9000,
“machine_max_acceleration_z”: 100,
“machine_max_feedrate_e”: 45,
“machine_max_feedrate_x”: 500,
“machine_max_feedrate_y”: 500,
“machine_max_feedrate_z”: 30,
“machine_max_jerk_e”: 5.0,
“machine_max_jerk_xy”: 20.0,
“machine_max_jerk_z”: 0.4,
“machine_min_cool_heat_time_window”: 50.0,
“machine_minimum_feedrate”: 0.0,
“machine_name”: “Ultimaker Original+”,
“machine_nozzle_cool_down_speed”: 2,
“machine_nozzle_expansion_angle”: 45,
“machine_nozzle_head_distance”: 3,
“machine_nozzle_heat_up_speed”: 2,
“machine_nozzle_size”: 0.4,
“machine_nozzle_tip_outer_diameter”: 1,
“machine_settings”: 0,
“machine_show_variants”: false,
“machine_use_extruder_offset_to_offset_coords”: true,
“machine_width”: 205,
“magic_fuzzy_skin_enabled”: false,
“magic_fuzzy_skin_point_density”: 1.25,
“magic_fuzzy_skin_point_dist”: 0.8,
“magic_fuzzy_skin_thickness”: 0.3,
“magic_mesh_surface_mode”: “normal”,
“magic_spiralize”: false,
“material”: 0,
“material_bed_temp_prepend”: true,
“material_bed_temp_wait”: true,
“material_bed_temperature”: 60,
“material_diameter”: 2.85,
“material_extrusion_cool_down_speed”: 0.5,
“material_flow”: 100,
“material_flow_dependent_temperature”: false,
“material_flow_temp_graph”: “[[3.5,200],[7.0,240]]”,
“material_guid”: “”,
“material_print_temp_prepend”: true,
“material_print_temp_wait”: true,
“material_print_temperature”: 200,
“material_standby_temperature”: 175,
“max_feedrate_z_override”: 0,
“meshfix”: 0,
“meshfix_extensive_stitching”: false,
“meshfix_keep_open_polygons”: false,
“meshfix_union_all”: true,
“meshfix_union_all_remove_holes”: false,
“multiple_mesh_overlap”: 0.15,
“ooze_shield_angle”: 60,
“ooze_shield_dist”: 2,
“ooze_shield_enabled”: false,
“outer_inset_first”: false,
“platform_adhesion”: 0,
“prime_tower_enable”: false,
“prime_tower_flow”: 100,
“prime_tower_line_width”: 0.4,
“prime_tower_position_x”: 200,
“prime_tower_position_y”: 200,
“prime_tower_size”: 0,
“prime_tower_wipe_enabled”: true,
“print_sequence”: “all_at_once”,
“raft_acceleration”: 3000,
“raft_airgap”: 0.3,
“raft_base_acceleration”: 3000,
“raft_base_fan_speed”: 0,
“raft_base_jerk”: 20,
“raft_base_line_spacing”: 1.6,
“raft_base_line_width”: 0.8,
“raft_base_speed”: 22.5,
“raft_base_thickness”: 0.36,
“raft_fan_speed”: 0,
“raft_interface_acceleration”: 3000,
“raft_interface_fan_speed”: 0,
“raft_interface_jerk”: 20,
“raft_interface_line_spacing”: 1.0,
“raft_interface_line_width”: 0.8,
“raft_interface_speed”: 22.5,
“raft_interface_thickness”: 0.15000000000000002,
“raft_jerk”: 20,
“raft_margin”: 15,
“raft_speed”: 30.0,
“raft_surface_acceleration”: 3000,
“raft_surface_fan_speed”: 0,
“raft_surface_jerk”: 20,
“raft_surface_layers”: 2,
“raft_surface_line_spacing”: 0.4,
“raft_surface_line_width”: 0.4,
“raft_surface_speed”: 30.0,
“raft_surface_thickness”: 0.1,
“resolution”: 0,
“retraction_amount”: 6.5,
“retraction_combing”: “all”,
“retraction_count_max”: 90,
“retraction_enable”: true,
“retraction_extra_prime_amount”: 0,
“retraction_extrusion_window”: 6.5,
“retraction_hop”: 1,
“retraction_hop_after_extruder_switch”: true,
“retraction_hop_enabled”: false,
“retraction_hop_only_when_collides”: false,
“retraction_min_travel”: 0.8,
“retraction_prime_speed”: 25,
“retraction_retract_speed”: 25,
“retraction_speed”: 25,
“shell”: 0,
“skin_alternate_rotation”: false,
“skin_line_width”: 0.4,
“skin_no_small_gaps_heuristic”: true,
“skin_outline_count”: 0,
“skin_overlap”: 5,
“skin_overlap_mm”: 0.02,
“skirt_brim_line_width”: 0.4,
“skirt_brim_minimal_length”: 250,
“skirt_brim_speed”: 30,
“skirt_gap”: 3,
“skirt_line_count”: 1,
“speed”: 0,
“speed_equalize_flow_enabled”: false,
“speed_equalize_flow_max”: 150,
“speed_infill”: 60,
“speed_layer_0”: 30,
“speed_prime_tower”: 60,
“speed_print”: 60,
“speed_print_layer_0”: 30,
“speed_slowdown_layers”: 2.0,
“speed_support”: 60,
“speed_support_infill”: 60,
“speed_support_interface”: 40.0,
“speed_topbottom”: 30.0,
“speed_travel”: 120,
“speed_travel_layer_0”: 60.0,
“speed_wall”: 30.0,
“speed_wall_0”: 30.0,
“speed_wall_x”: 60.0,
“support”: 0,
“support_angle”: 50,
“support_bottom_distance”: 0.1,
“support_bottom_height”: 1,
“support_bottom_stair_step_height”: 0.3,
“support_conical_angle”: 30,
“support_conical_enabled”: false,
“support_conical_min_width”: 5.0,
“support_connect_zigzags”: true,
“support_enable”: false,
“support_extruder_nr”: “0”,
“support_extruder_nr_layer_0”: “0”,
“support_infill_extruder_nr”: “0”,
“support_infill_rate”: 15,
“support_interface_density”: 100,
“support_interface_enable”: false,
“support_interface_extruder_nr”: “0”,
“support_interface_height”: 1,
“support_interface_line_distance”: 0.4,
“support_interface_line_width”: 0.4,
“support_interface_pattern”: “concentric”,
“support_interface_skip_height”: 0.3,
“support_join_distance”: 2.0,
“support_line_distance”: 2.6666666666666665,
“support_line_width”: 0.4,
“support_minimal_diameter”: 3.0,
“support_offset”: 0.2,
“support_pattern”: “zigzag”,
“support_roof_height”: 1,
“support_top_distance”: 0.1,
“support_tower_diameter”: 3.0,
“support_tower_roof_angle”: 65,
“support_type”: “everywhere”,
“support_use_towers”: true,
“support_xy_distance”: 0.7,
“support_xy_distance_overhang”: 0.2,
“support_xy_overrides_z”: “z_overrides_xy”,
“support_z_distance”: 0.1,
“switch_extruder_prime_speed”: 20,
“switch_extruder_retraction_amount”: 16,
“switch_extruder_retraction_speed”: 20,
“switch_extruder_retraction_speeds”: 20,
“top_bottom_pattern”: “lines”,
“top_bottom_thickness”: 0.8,
“top_layers”: 8,
“top_thickness”: 0.8,
“travel”: 0,
“travel_avoid_distance”: 0.625,
“travel_avoid_other_parts”: true,
“travel_compensate_overlapping_walls_0_enabled”: true,
“travel_compensate_overlapping_walls_enabled”: true,
“travel_compensate_overlapping_walls_x_enabled”: true,
“wall_0_inset”: 0,
“wall_line_count”: 2,
“wall_line_width”: 0.4,
“wall_line_width_0”: 0.4,
“wall_line_width_x”: 0.4,
“wall_thickness”: 0.8,
“wireframe_bottom_delay”: 0,
“wireframe_drag_along”: 0.6,
“wireframe_enabled”: false,
“wireframe_fall_down”: 0.5,
“wireframe_flat_delay”: 0.1,
“wireframe_flow”: 100,
“wireframe_flow_connection”: 100,
“wireframe_flow_flat”: 100,
“wireframe_height”: 3,
“wireframe_nozzle_clearance”: 1,
“wireframe_printspeed”: 5,
“wireframe_printspeed_bottom”: 5,
“wireframe_printspeed_down”: 5,
“wireframe_printspeed_flat”: 5,
“wireframe_printspeed_up”: 5,
“wireframe_roof_drag_along”: 0.8,
“wireframe_roof_fall_down”: 2,
“wireframe_roof_inset”: 3,
“wireframe_roof_outer_delay”: 0.2,
“wireframe_straight_before_down”: 20,
“wireframe_strategy”: “compensate”,
“wireframe_top_delay”: 0,
“wireframe_top_jump”: 0.6,
“wireframe_up_half_speed”: 0.3,
“xy_offset”: 0,
“z_seam_type”: “shortest”
コメント