From d7298cee061e2c852d166e2f7847d638826f28c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Tue, 22 Aug 2017 11:21:04 +0200 Subject: [PATCH] Virtual printer: Less code duplication in temp simulation --- .../plugins/virtual_printer/virtual.py | 38 +++++++++++-------- 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/src/octoprint/plugins/virtual_printer/virtual.py b/src/octoprint/plugins/virtual_printer/virtual.py index 8afd3177..2434393e 100644 --- a/src/octoprint/plugins/virtual_printer/virtual.py +++ b/src/octoprint/plugins/virtual_printer/virtual.py @@ -1008,28 +1008,34 @@ class VirtualPrinter(object): if os.path.exists(f) and os.path.isfile(f): os.remove(f) - def _simulateTemps(self, delta=1): + def _simulateTemps(self, delta=0.5): timeDiff = self.lastTempAt - time.time() self.lastTempAt = time.time() + + def simulate(actual, target, ambient): + if target > 0 and abs(actual - target) > delta: + goal = target + factor = 10 + elif not target and abs(actual - ambient) > delta: + goal = ambient + factor = 2 + else: + return actual + + old = actual + actual += math.copysign(timeDiff * factor, goal - actual) + + if math.copysign(1, goal - old) != math.copysign(1, goal - actual): + actual = goal + + return actual + for i in range(len(self.temp)): if i in self.pinnedExtruders: self.temp[i] = self.pinnedExtruders[i] continue - - if abs(self.temp[i] - self.targetTemp[i]) > delta: - oldVal = self.temp[i] - self.temp[i] += math.copysign(timeDiff * 10, self.targetTemp[i] - self.temp[i]) - if math.copysign(1, self.targetTemp[i] - oldVal) != math.copysign(1, self.targetTemp[i] - self.temp[i]): - self.temp[i] = self.targetTemp[i] - if self.temp[i] < self._ambient_temperature: - self.temp[i] = self._ambient_temperature - if abs(self.bedTemp - self.bedTargetTemp) > delta: - oldVal = self.bedTemp - self.bedTemp += math.copysign(timeDiff * 10, self.bedTargetTemp - self.bedTemp) - if math.copysign(1, self.bedTargetTemp - oldVal) != math.copysign(1, self.bedTargetTemp - self.bedTemp): - self.bedTemp = self.bedTargetTemp - if self.bedTemp < self._ambient_temperature: - self.bedTemp = self._ambient_temperature + self.temp[i] = simulate(self.temp[i], self.targetTemp[i], self._ambient_temperature) + self.bedTemp = simulate(self.bedTemp, self.bedTargetTemp, self._ambient_temperature) def _processBuffer(self): while self.buffered is not None: