Changed handling of bed temperatures

Will now be left unset if not detected (instead of dying a horrible death), modified frontend to not display bed settings in such cases. While at it also (hopefully) fixed "Target: off" for bed issue.

TODO: Support repetier's "TargetBed:", "TargetExtr%n" syntax

Fixes #399, partially solves #360
This commit is contained in:
Gina Häußge 2014-03-03 22:34:09 +01:00
parent 9b031ff9d3
commit 8b5d6c9367
6 changed files with 43 additions and 18 deletions

View file

@ -37,6 +37,7 @@ class Printer():
self._gcodeManager.registerCallback(self)
# state
# TODO do we really need to hold the temperature here?
self._temp = None
self._bedTemp = None
self._targetTemp = None
@ -355,10 +356,11 @@ class Printer():
"actual": temp[tool][0],
"target": temp[tool][1]
}
data["bed"] = {
"actual": bedTemp[0],
"target": bedTemp[1]
}
if bedTemp is not None and isinstance(bedTemp, tuple):
data["bed"] = {
"actual": bedTemp[0],
"target": bedTemp[1]
}
self._temps.append(data)

View file

@ -143,7 +143,8 @@ default_settings = {
"forceChecksum": False,
"okWithLinenumber": False,
"numExtruders": 1,
"includeCurrentToolInTemps": True
"includeCurrentToolInTemps": True,
"hasBed": True
}
}
}

View file

@ -17,6 +17,7 @@ function TemperatureViewModel(loginStateViewModel, settingsViewModel) {
};
self.tools = ko.observableArray([]);
self.hasBed = ko.observable(true);
self.bedTemp = self._createToolEntry();
self.bedTemp["name"]("Bed");
self.bedTemp["key"]("bed");
@ -145,8 +146,13 @@ function TemperatureViewModel(loginStateViewModel, settingsViewModel) {
}
}
self.bedTemp["actual"](lastData.bed.actual);
self.bedTemp["target"](lastData.bed.target);
if (lastData.hasOwnProperty("bed")) {
self.hasBed(true);
self.bedTemp["actual"](lastData.bed.actual);
self.bedTemp["target"](lastData.bed.target);
} else {
self.hasBed(false);
}
if (!CONFIG_TEMPERATURE_GRAPH) return;
@ -184,6 +190,7 @@ function TemperatureViewModel(loginStateViewModel, settingsViewModel) {
if (!result) {
result = {};
}
_.each(types, function(type) {
if (!result.hasOwnProperty(type)) {
result[type] = {actual: [], target: []};
@ -199,6 +206,8 @@ function TemperatureViewModel(loginStateViewModel, settingsViewModel) {
if (!d[type]) return;
result[type].actual.push([time, d[type].actual]);
result[type].target.push([time, d[type].target]);
self.hasBed(self.hasBed() || (type == "bed"));
})
});
@ -213,6 +222,10 @@ function TemperatureViewModel(loginStateViewModel, settingsViewModel) {
if (!heaterOptions) return;
_.each(_.keys(heaterOptions), function(type) {
if (type == "bed" && !self.hasBed()) {
return;
}
var actuals = [];
var targets = [];

View file

@ -274,7 +274,7 @@
<!-- ko foreach: tools -->
<tr data-bind="template: { name: 'temprow-template' }"></tr>
<!-- /ko -->
<tr data-bind="template: { name: 'temprow-template', data: bedTemp }"></tr>
<tr data-bind="template: { name: 'temprow-template', data: bedTemp }, visible: hasBed"></tr>
</table>
<script type="text/html" id="temprow-template">

View file

@ -136,10 +136,8 @@ class MachineCom(object):
self._baudrateDetectList = baudrateList()
self._baudrateDetectRetry = 0
self._temp = {}
self._targetTemp = {}
self._tempOffset = {}
self._bedTemp = 0
self._bedTargetTemp = 0
self._bedTemp = None
self._bedTempOffset = 0
self._commandQueue = queue.Queue()
self._currentZ = None
@ -171,6 +169,7 @@ class MachineCom(object):
# regexes
floatPattern = "[-+]?[0-9]*\.?[0-9]+"
positiveFloatPattern = "[+]?[0-9]*\.?[0-9]+"
intPattern = "\d+"
self._regex_command = re.compile("^\s*([GM]\d+|T)")
self._regex_float = re.compile(floatPattern)
@ -188,7 +187,7 @@ class MachineCom(object):
# - 3: actual temperature
# - 4: whole target substring, if given (e.g. " / 22.0")
# - 5: target temperature
self._regex_temp = re.compile("(B|T(\d*)):\s*(%s)(\s*\/?\s*(%s))?" % (floatPattern, floatPattern))
self._regex_temp = re.compile("(B|T(\d*)):\s*(%s)(\s*\/?\s*(%s))?" % (positiveFloatPattern, positiveFloatPattern))
def __del__(self):
self.close()
@ -1065,7 +1064,7 @@ class MachineCom(object):
self.close(True)
def _gcode_T(self, cmd):
toolMatch = re.search('T([0-9]+)', cmd)
toolMatch = self._regex_paramTInt.search(cmd)
if toolMatch:
self._currentExtruder = int(toolMatch.group(1))
return cmd
@ -1097,7 +1096,10 @@ class MachineCom(object):
match = self._regex_paramSInt.search(cmd)
if match:
try:
self._targetTemp[toolNum] = float(match.group(1))
target = float(match.group(1))
if self._temp[toolNum] is not None and isinstance(self._temp[toolNum], tuple):
(actual, oldTarget) = self._temp[toolNum]
self._temp[toolNum] = (actual, target)
except ValueError:
pass
return cmd
@ -1106,7 +1108,10 @@ class MachineCom(object):
match = self._regex_paramSInt.search(cmd)
if match:
try:
self._bedTargetTemp = float(match.group(1))
target = float(match.group(1))
if self._bedTemp is not None and isinstance(self._bedTemp, tuple):
(actual, oldTarget) = self._bedTemp
self._bedTemp = (actual, target)
except ValueError:
pass
return cmd

View file

@ -104,10 +104,14 @@ class VirtualPrinter():
for i in range(len(self.temp)):
allTemps.append((i, self.temp[i], self.targetTemp[i]))
allTempsString = " ".join(map(lambda x: "T%d:%.2f /%.2f" % x, allTemps))
if settings().getBoolean(["devel", "virtualPrinted", "includeCurrentToolInTemps"]):
self.readList.append("ok T:%.2f /%.2f B:%.2f /%.2f %s @:64\n" % (self.temp[self.currentExtruder], self.targetTemp[self.currentExtruder] + 1, self.bedTemp, self.bedTargetTemp, allTempsString))
if settings().getBoolean(["devel", "virtualPrinter", "hasBed"]):
allTempsString = "B:%.2f /%.2f %s" % (self.bedTemp, self.bedTargetTemp, allTempsString)
if settings().getBoolean(["devel", "virtualPrinter", "includeCurrentToolInTemps"]):
self.readList.append("ok T:%.2f /%.2f %s @:64\n" % (self.temp[self.currentExtruder], self.targetTemp[self.currentExtruder] + 1))
else:
self.readList.append("ok %s B:%.2f /%.2f @:64\n" % (allTempsString, self.bedTemp, self.bedTargetTemp))
self.readList.append("ok %s @:64\n" % allTempsString)
else:
self.readList.append("ok T:%.2f /%.2f B:%.2f /%.2f @:64\n" % (self.temp[0], self.targetTemp[0], self.bedTemp, self.bedTargetTemp))
elif 'M20' in data: