Got one of the dual extruder switching tests passing
Tool change stream tracking requested temps Made printer use settings for settings rather than keeping a copy Moved getting a line without checksum to GCodeFile so it can be re-used
This commit is contained in:
parent
e7fe7bb8da
commit
cae6a7679b
8 changed files with 112 additions and 156 deletions
|
|
@ -49,6 +49,7 @@ namespace MatterHackers.MatterControl.PrinterCommunication.Io
|
|||
private int requestedTool;
|
||||
enum SendStates { Normal, WaitingForMove, SendingBefore }
|
||||
private SendStates SendState = SendStates.Normal;
|
||||
private double[] targetTemps = new double[4];
|
||||
|
||||
public ToolChangeStream(PrinterConfig printer, GCodeStream internalStream, QueuedCommandsStream queuedCommandsStream)
|
||||
: base(printer, internalStream)
|
||||
|
|
@ -80,6 +81,15 @@ namespace MatterHackers.MatterControl.PrinterCommunication.Io
|
|||
return lineToSend;
|
||||
}
|
||||
|
||||
if (lineToSend.StartsWith("M109") || lineToSend.StartsWith("M104"))
|
||||
{
|
||||
int toolTemp = 0;
|
||||
int toolIndex = activeTool;
|
||||
GCodeFile.GetFirstNumberAfter("T", lineToSend, ref toolIndex);
|
||||
GCodeFile.GetFirstNumberAfter("S", lineToSend, ref toolTemp);
|
||||
targetTemps[toolIndex] = toolTemp;
|
||||
}
|
||||
|
||||
// check if any of the heaters we will be switching to need to start heating
|
||||
ManageReHeating(lineToSend);
|
||||
|
||||
|
|
@ -173,31 +183,16 @@ namespace MatterHackers.MatterControl.PrinterCommunication.Io
|
|||
// If there is enough time before we will use this tool again, lower the temp by the inactive_cool_down
|
||||
else if (nextTimeThisTool > timeToReheat)
|
||||
{
|
||||
var targetTemp = PrintingTemperature(activeTool);
|
||||
var targetTemp = targetTemps[activeTool];
|
||||
targetTemp = Math.Max(0, targetTemp - printer.Settings.GetValue<double>(SettingsKey.inactive_cool_down));
|
||||
gcode.AppendLine($"M104 T{activeTool} S{targetTemp}");
|
||||
if (targetTemp != printer.Connection.GetTargetHotendTemperature(activeTool))
|
||||
{
|
||||
gcode.AppendLine($"M104 T{activeTool} S{targetTemp}");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
double PrintingTemperature(int toolIndex)
|
||||
{
|
||||
switch(toolIndex)
|
||||
{
|
||||
default:
|
||||
return printer.Settings.GetValue<double>(SettingsKey.temperature);
|
||||
|
||||
case 1:
|
||||
return printer.Settings.GetValue<double>(SettingsKey.temperature1);
|
||||
|
||||
case 2:
|
||||
return printer.Settings.GetValue<double>(SettingsKey.temperature2);
|
||||
|
||||
case 3:
|
||||
return printer.Settings.GetValue<double>(SettingsKey.temperature3);
|
||||
}
|
||||
}
|
||||
|
||||
private void ManageReHeating(string line)
|
||||
{
|
||||
var timeToReheat = printer.Settings.GetValue<double>(SettingsKey.seconds_to_reheat);
|
||||
|
|
@ -207,7 +202,7 @@ namespace MatterHackers.MatterControl.PrinterCommunication.Io
|
|||
for (int i = 0; i < extruderCount; i++)
|
||||
{
|
||||
var nextToolChange = printer.Connection.NextToolChange(i);
|
||||
var targetTemp = printer.Settings.Helpers.ExtruderTargetTemperature(i);
|
||||
var targetTemp = targetTemps[i];
|
||||
if (nextToolChange.toolIndex >= 0
|
||||
&& nextToolChange.time < timeToReheat
|
||||
&& printer.Connection.GetTargetHotendTemperature(i) != targetTemp)
|
||||
|
|
@ -248,7 +243,7 @@ namespace MatterHackers.MatterControl.PrinterCommunication.Io
|
|||
var gcode = new StringBuilder();
|
||||
|
||||
// If the printer is heating, make sure we are at temp before switching extruders
|
||||
var nextToolTargetTemp = PrintingTemperature(requestedTool);
|
||||
var nextToolTargetTemp = targetTemps[requestedTool];
|
||||
var currentPrinterTargeTemp = printer.Connection.GetTargetHotendTemperature(requestedTool);
|
||||
if (currentPrinterTargeTemp > 0
|
||||
&& printer.Connection.GetActualHotendTemperature(requestedTool) < nextToolTargetTemp - 3)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue