Wipe tower uses correct gcodes for RepRap gcode flavor (M907->M906, M900->M572 - should fix #1843)
Also, fixed proper setting of the extruder current during toolchange (was broken since 6da83c7
)
This commit is contained in:
parent
7185125f9c
commit
08cb5bc2c7
@ -184,7 +184,7 @@ std::string WipeTowerIntegration::append_tcr(GCode &gcodegen, const WipeTower::T
|
|||||||
|
|
||||||
|
|
||||||
// Disable linear advance for the wipe tower operations.
|
// Disable linear advance for the wipe tower operations.
|
||||||
gcode += "M900 K0\n";
|
gcode += (gcodegen.config().gcode_flavor == gcfRepRap ? std::string("M572 D0 S0\n") : std::string("M900 K0\n"));
|
||||||
// Move over the wipe tower.
|
// Move over the wipe tower.
|
||||||
// Retract for a tool change, using the toolchange retract value and setting the priming extra length.
|
// Retract for a tool change, using the toolchange retract value and setting the priming extra length.
|
||||||
gcode += gcodegen.retract(true);
|
gcode += gcodegen.retract(true);
|
||||||
@ -289,7 +289,7 @@ std::string WipeTowerIntegration::prime(GCode &gcodegen)
|
|||||||
|
|
||||||
if (&m_priming != nullptr && ! m_priming.extrusions.empty()) {
|
if (&m_priming != nullptr && ! m_priming.extrusions.empty()) {
|
||||||
// Disable linear advance for the wipe tower operations.
|
// Disable linear advance for the wipe tower operations.
|
||||||
gcode += "M900 K0\n";
|
gcode += (gcodegen.config().gcode_flavor == gcfRepRap ? std::string("M572 D0 S0\n") : std::string("M900 K0\n"));
|
||||||
// Let the tool change be executed by the wipe tower class.
|
// Let the tool change be executed by the wipe tower class.
|
||||||
// Inform the G-code writer about the changes done behind its back.
|
// Inform the G-code writer about the changes done behind its back.
|
||||||
gcode += m_priming.gcode;
|
gcode += m_priming.gcode;
|
||||||
|
@ -40,7 +40,7 @@ namespace PrusaMultiMaterial {
|
|||||||
class Writer
|
class Writer
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Writer(float layer_height, float line_width) :
|
Writer(float layer_height, float line_width, GCodeFlavor flavor) :
|
||||||
m_current_pos(std::numeric_limits<float>::max(), std::numeric_limits<float>::max()),
|
m_current_pos(std::numeric_limits<float>::max(), std::numeric_limits<float>::max()),
|
||||||
m_current_z(0.f),
|
m_current_z(0.f),
|
||||||
m_current_feedrate(0.f),
|
m_current_feedrate(0.f),
|
||||||
@ -48,7 +48,8 @@ public:
|
|||||||
m_extrusion_flow(0.f),
|
m_extrusion_flow(0.f),
|
||||||
m_preview_suppressed(false),
|
m_preview_suppressed(false),
|
||||||
m_elapsed_time(0.f),
|
m_elapsed_time(0.f),
|
||||||
m_default_analyzer_line_width(line_width)
|
m_default_analyzer_line_width(line_width),
|
||||||
|
m_gcode_flavor(flavor)
|
||||||
{
|
{
|
||||||
// adds tag for analyzer:
|
// adds tag for analyzer:
|
||||||
char buf[64];
|
char buf[64];
|
||||||
@ -333,7 +334,10 @@ public:
|
|||||||
Writer& set_extruder_trimpot(int current)
|
Writer& set_extruder_trimpot(int current)
|
||||||
{
|
{
|
||||||
char buf[128];
|
char buf[128];
|
||||||
sprintf(buf, "M907 E%d\n", current);
|
if (m_gcode_flavor == gcfRepRap)
|
||||||
|
sprintf(buf, "M906 E%d\n", current);
|
||||||
|
else
|
||||||
|
sprintf(buf, "M907 E%d\n", current);
|
||||||
m_gcode += buf;
|
m_gcode += buf;
|
||||||
return *this;
|
return *this;
|
||||||
};
|
};
|
||||||
@ -407,6 +411,7 @@ private:
|
|||||||
int current_temp = -1;
|
int current_temp = -1;
|
||||||
const float m_default_analyzer_line_width;
|
const float m_default_analyzer_line_width;
|
||||||
float m_used_filament_length = 0.f;
|
float m_used_filament_length = 0.f;
|
||||||
|
GCodeFlavor m_gcode_flavor;
|
||||||
|
|
||||||
std::string set_format_X(float x)
|
std::string set_format_X(float x)
|
||||||
{
|
{
|
||||||
@ -510,7 +515,7 @@ WipeTower::ToolChangeResult WipeTowerPrusaMM::prime(
|
|||||||
const float prime_section_width = std::min(240.f / tools.size(), 60.f);
|
const float prime_section_width = std::min(240.f / tools.size(), 60.f);
|
||||||
box_coordinates cleaning_box(xy(5.f, 0.01f + m_perimeter_width/2.f), prime_section_width, 100.f);
|
box_coordinates cleaning_box(xy(5.f, 0.01f + m_perimeter_width/2.f), prime_section_width, 100.f);
|
||||||
|
|
||||||
PrusaMultiMaterial::Writer writer(m_layer_height, m_perimeter_width);
|
PrusaMultiMaterial::Writer writer(m_layer_height, m_perimeter_width, m_gcode_flavor);
|
||||||
writer.set_extrusion_flow(m_extrusion_flow)
|
writer.set_extrusion_flow(m_extrusion_flow)
|
||||||
.set_z(m_z_pos)
|
.set_z(m_z_pos)
|
||||||
.set_initial_tool(m_current_tool)
|
.set_initial_tool(m_current_tool)
|
||||||
@ -612,7 +617,7 @@ WipeTower::ToolChangeResult WipeTowerPrusaMM::tool_change(unsigned int tool, boo
|
|||||||
(tool != (unsigned int)(-1) ? /*m_layer_info->depth*/wipe_area+m_depth_traversed-0.5*m_perimeter_width
|
(tool != (unsigned int)(-1) ? /*m_layer_info->depth*/wipe_area+m_depth_traversed-0.5*m_perimeter_width
|
||||||
: m_wipe_tower_depth-m_perimeter_width));
|
: m_wipe_tower_depth-m_perimeter_width));
|
||||||
|
|
||||||
PrusaMultiMaterial::Writer writer(m_layer_height, m_perimeter_width);
|
PrusaMultiMaterial::Writer writer(m_layer_height, m_perimeter_width, m_gcode_flavor);
|
||||||
writer.set_extrusion_flow(m_extrusion_flow)
|
writer.set_extrusion_flow(m_extrusion_flow)
|
||||||
.set_z(m_z_pos)
|
.set_z(m_z_pos)
|
||||||
.set_initial_tool(m_current_tool)
|
.set_initial_tool(m_current_tool)
|
||||||
@ -631,7 +636,7 @@ WipeTower::ToolChangeResult WipeTowerPrusaMM::tool_change(unsigned int tool, boo
|
|||||||
|
|
||||||
// Increase the extruder driver current to allow fast ramming.
|
// Increase the extruder driver current to allow fast ramming.
|
||||||
if (m_set_extruder_trimpot)
|
if (m_set_extruder_trimpot)
|
||||||
writer.set_extruder_trimpot(550);
|
writer.set_extruder_trimpot(750);
|
||||||
|
|
||||||
// Ram the hot material out of the melt zone, retract the filament into the cooling tubes and let it cool.
|
// Ram the hot material out of the melt zone, retract the filament into the cooling tubes and let it cool.
|
||||||
if (tool != (unsigned int)-1){ // This is not the last change.
|
if (tool != (unsigned int)-1){ // This is not the last change.
|
||||||
@ -693,7 +698,7 @@ WipeTower::ToolChangeResult WipeTowerPrusaMM::toolchange_Brim(bool sideOnly, flo
|
|||||||
m_wipe_tower_width,
|
m_wipe_tower_width,
|
||||||
m_wipe_tower_depth);
|
m_wipe_tower_depth);
|
||||||
|
|
||||||
PrusaMultiMaterial::Writer writer(m_layer_height, m_perimeter_width);
|
PrusaMultiMaterial::Writer writer(m_layer_height, m_perimeter_width, m_gcode_flavor);
|
||||||
writer.set_extrusion_flow(m_extrusion_flow * 1.1f)
|
writer.set_extrusion_flow(m_extrusion_flow * 1.1f)
|
||||||
.set_z(m_z_pos) // Let the writer know the current Z position as a base for Z-hop.
|
.set_z(m_z_pos) // Let the writer know the current Z position as a base for Z-hop.
|
||||||
.set_initial_tool(m_current_tool)
|
.set_initial_tool(m_current_tool)
|
||||||
@ -1022,7 +1027,7 @@ WipeTower::ToolChangeResult WipeTowerPrusaMM::finish_layer()
|
|||||||
// Otherwise the caller would likely travel to the wipe tower in vain.
|
// Otherwise the caller would likely travel to the wipe tower in vain.
|
||||||
assert(! this->layer_finished());
|
assert(! this->layer_finished());
|
||||||
|
|
||||||
PrusaMultiMaterial::Writer writer(m_layer_height, m_perimeter_width);
|
PrusaMultiMaterial::Writer writer(m_layer_height, m_perimeter_width, m_gcode_flavor);
|
||||||
writer.set_extrusion_flow(m_extrusion_flow)
|
writer.set_extrusion_flow(m_extrusion_flow)
|
||||||
.set_z(m_z_pos)
|
.set_z(m_z_pos)
|
||||||
.set_initial_tool(m_current_tool)
|
.set_initial_tool(m_current_tool)
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
|
||||||
#include "WipeTower.hpp"
|
#include "WipeTower.hpp"
|
||||||
|
#include "PrintConfig.hpp"
|
||||||
|
|
||||||
|
|
||||||
namespace Slic3r
|
namespace Slic3r
|
||||||
@ -46,7 +47,7 @@ public:
|
|||||||
// wipe_area -- space available for one toolchange in mm
|
// wipe_area -- space available for one toolchange in mm
|
||||||
WipeTowerPrusaMM(float x, float y, float width, float rotation_angle, float cooling_tube_retraction,
|
WipeTowerPrusaMM(float x, float y, float width, float rotation_angle, float cooling_tube_retraction,
|
||||||
float cooling_tube_length, float parking_pos_retraction, float extra_loading_move,
|
float cooling_tube_length, float parking_pos_retraction, float extra_loading_move,
|
||||||
float bridging, bool set_extruder_trimpot,
|
float bridging, bool set_extruder_trimpot, GCodeFlavor flavor,
|
||||||
const std::vector<std::vector<float>>& wiping_matrix, unsigned int initial_tool) :
|
const std::vector<std::vector<float>>& wiping_matrix, unsigned int initial_tool) :
|
||||||
m_wipe_tower_pos(x, y),
|
m_wipe_tower_pos(x, y),
|
||||||
m_wipe_tower_width(width),
|
m_wipe_tower_width(width),
|
||||||
@ -60,6 +61,7 @@ public:
|
|||||||
m_extra_loading_move(extra_loading_move),
|
m_extra_loading_move(extra_loading_move),
|
||||||
m_bridging(bridging),
|
m_bridging(bridging),
|
||||||
m_set_extruder_trimpot(set_extruder_trimpot),
|
m_set_extruder_trimpot(set_extruder_trimpot),
|
||||||
|
m_gcode_flavor(flavor),
|
||||||
m_current_tool(initial_tool),
|
m_current_tool(initial_tool),
|
||||||
wipe_volumes(wiping_matrix)
|
wipe_volumes(wiping_matrix)
|
||||||
{}
|
{}
|
||||||
@ -223,6 +225,7 @@ private:
|
|||||||
bool m_set_extruder_trimpot = false;
|
bool m_set_extruder_trimpot = false;
|
||||||
bool m_retain_speed_override = true;
|
bool m_retain_speed_override = true;
|
||||||
bool m_adhesion = true;
|
bool m_adhesion = true;
|
||||||
|
GCodeFlavor m_gcode_flavor;
|
||||||
|
|
||||||
float m_perimeter_width = 0.4f * Width_To_Nozzle_Ratio; // Width of an extrusion line, also a perimeter spacing for 100% infill.
|
float m_perimeter_width = 0.4f * Width_To_Nozzle_Ratio; // Width of an extrusion line, also a perimeter spacing for 100% infill.
|
||||||
float m_extrusion_flow = 0.038f; //0.029f;// Extrusion flow is derived from m_perimeter_width, layer height and filament diameter.
|
float m_extrusion_flow = 0.038f; //0.029f;// Extrusion flow is derived from m_perimeter_width, layer height and filament diameter.
|
||||||
|
@ -126,7 +126,6 @@ bool Print::invalidate_state_by_config_options(const std::vector<t_config_option
|
|||||||
"first_layer_bed_temperature",
|
"first_layer_bed_temperature",
|
||||||
"first_layer_speed",
|
"first_layer_speed",
|
||||||
"gcode_comments",
|
"gcode_comments",
|
||||||
"gcode_flavor",
|
|
||||||
"gcode_label_objects",
|
"gcode_label_objects",
|
||||||
"infill_acceleration",
|
"infill_acceleration",
|
||||||
"layer_gcode",
|
"layer_gcode",
|
||||||
@ -1777,7 +1776,7 @@ void Print::_make_wipe_tower()
|
|||||||
float(m_config.wipe_tower_rotation_angle.value), float(m_config.cooling_tube_retraction.value),
|
float(m_config.wipe_tower_rotation_angle.value), float(m_config.cooling_tube_retraction.value),
|
||||||
float(m_config.cooling_tube_length.value), float(m_config.parking_pos_retraction.value),
|
float(m_config.cooling_tube_length.value), float(m_config.parking_pos_retraction.value),
|
||||||
float(m_config.extra_loading_move.value), float(m_config.wipe_tower_bridging),
|
float(m_config.extra_loading_move.value), float(m_config.wipe_tower_bridging),
|
||||||
m_config.high_current_on_filament_swap.value, wipe_volumes,
|
m_config.high_current_on_filament_swap.value, m_config.gcode_flavor, wipe_volumes,
|
||||||
m_wipe_tower_data.tool_ordering.first_extruder());
|
m_wipe_tower_data.tool_ordering.first_extruder());
|
||||||
|
|
||||||
//wipe_tower.set_retract();
|
//wipe_tower.set_retract();
|
||||||
|
Loading…
Reference in New Issue
Block a user