taskbar.setProgress(self, self.machineCom.getPrintPos(), len(self.gcodeList))
if self.machineCom != None:
if self.machineCom.getTemp() > 0:
- status += 'Temp: %d\n' % (self.machineCom.getTemp())
+ status += 'Temp: %s\n' % (' ,'.join(map(str, self.machineCom.getTemp())))
if self.machineCom.getBedTemp() > 0:
status += 'Bed Temp: %d\n' % (self.machineCom.getBedTemp())
self.bedTemperatureLabel.Show(True)
wx.CallAfter(self._mcTempUpdate, temp, bedTemp, targetTemp, bedTargetTemp)
def _mcTempUpdate(self, temp, bedTemp, targetTemp, bedTargetTemp):
- if self.temperatureSelect.GetValue() != targetTemp and wx.Window.FindFocus() != self.temperatureSelect:
- self.temperatureSelect.SetValue(targetTemp)
+ if self.temperatureSelect.GetValue() != targetTemp[0] and wx.Window.FindFocus() != self.temperatureSelect:
+ self.temperatureSelect.SetValue(targetTemp[0])
if self.bedTemperatureSelect.GetValue() != bedTargetTemp and wx.Window.FindFocus() != self.bedTemperatureSelect:
self.bedTemperatureSelect.SetValue(bedTargetTemp)
self.lastDraw = time.time() - 1.0
self.points = []
self.backBuffer = None
- self.addPoint(0, 0, 0, 0)
+ self.addPoint([0]*16, [0]*16, 0, 0)
self.SetMinSize((320, 200))
def OnEraseBackground(self, e):
pass
def OnSize(self, e):
- if self.backBuffer == None or self.GetSize() != self.backBuffer.GetSize():
+ if self.backBuffer is None or self.GetSize() != self.backBuffer.GetSize():
self.backBuffer = wx.EmptyBitmap(*self.GetSizeTuple())
self.UpdateDrawing(True)
#Draw the background up to the current temperatures.
x0 = 0
- t0 = 0
+ t0 = [0] * len(self.points[0][0])
bt0 = 0
tSP0 = 0
btSP0 = 0
for temp, tempSP, bedTemp, bedTempSP, t in self.points:
x1 = int(w - (now - t))
for x in xrange(x0, x1 + 1):
- t = float(x - x0) / float(x1 - x0 + 1) * (temp - t0) + t0
+ for n in xrange(0, len(temp)):
+ t = float(x - x0) / float(x1 - x0 + 1) * (temp[n] - t0[n]) + t0[n]
+ dc.SetPen(tempPenBG)
+ dc.DrawLine(x, h, x, h - (t * h / 300))
bt = float(x - x0) / float(x1 - x0 + 1) * (bedTemp - bt0) + bt0
- dc.SetPen(tempPenBG)
- dc.DrawLine(x, h, x, h - (t * h / 300))
dc.SetPen(bedTempPenBG)
dc.DrawLine(x, h, x, h - (bt * h / 300))
t0 = temp
#Draw the main lines
x0 = 0
- t0 = 0
+ t0 = [0] * len(self.points[0][0])
bt0 = 0
- tSP0 = 0
+ tSP0 = [0] * len(self.points[0][0])
btSP0 = 0
for temp, tempSP, bedTemp, bedTempSP, t in self.points:
x1 = int(w - (now - t))
for x in xrange(x0, x1 + 1):
- t = float(x - x0) / float(x1 - x0 + 1) * (temp - t0) + t0
+ for n in xrange(0, len(temp)):
+ t = float(x - x0) / float(x1 - x0 + 1) * (temp[n] - t0[n]) + t0[n]
+ tSP = float(x - x0) / float(x1 - x0 + 1) * (tempSP[n] - tSP0[n]) + tSP0[n]
+ dc.SetPen(tempSPPen)
+ dc.DrawPoint(x, h - (tSP * h / 300))
+ dc.SetPen(tempPen)
+ dc.DrawPoint(x, h - (t * h / 300))
bt = float(x - x0) / float(x1 - x0 + 1) * (bedTemp - bt0) + bt0
- tSP = float(x - x0) / float(x1 - x0 + 1) * (tempSP - tSP0) + tSP0
btSP = float(x - x0) / float(x1 - x0 + 1) * (bedTempSP - btSP0) + btSP0
- dc.SetPen(tempSPPen)
- dc.DrawPoint(x, h - (tSP * h / 300))
dc.SetPen(bedTempSPPen)
dc.DrawPoint(x, h - (btSP * h / 300))
- dc.SetPen(tempPen)
- dc.DrawPoint(x, h - (t * h / 300))
dc.SetPen(bedTempPen)
dc.DrawPoint(x, h - (bt * h / 300))
t0 = temp
self.points.pop(0)
def addPoint(self, temp, tempSP, bedTemp, bedTempSP):
- if bedTemp == None:
+ if bedTemp is None:
bedTemp = 0
- if bedTempSP == None:
+ if bedTempSP is None:
bedTempSP = 0
- self.points.append((temp, tempSP, bedTemp, bedTempSP, time.time()))
+ self.points.append((temp[:], tempSP[:], bedTemp, bedTempSP, time.time()))
wx.CallAfter(self.UpdateDrawing)
self._serial = None
self._baudrateDetectList = baudrateList()
self._baudrateDetectRetry = 0
- self._temp = 0
+ self._extruderCount = int(profile.getPreference('extruder_amount'))
+ self._temperatureRequestExtruder = 0
+ self._temp = [0] * self._extruderCount
+ self._targetTemp = [0] * self._extruderCount
self._bedTemp = 0
- self._targetTemp = 0
self._bedTargetTemp = 0
self._gcodeList = None
self._gcodePos = 0
self._errorValue = line[6:]
self._changeState(self.STATE_ERROR)
if ' T:' in line or line.startswith('T:'):
- self._temp = float(re.search("[0-9\.]*", line.split('T:')[1]).group(0))
+ self._temp[self._temperatureRequestExtruder] = float(re.search("[0-9\.]*", line.split('T:')[1]).group(0))
if ' B:' in line:
self._bedTemp = float(re.search("[0-9\.]*", line.split(' B:')[1]).group(0))
self._callback.mcTempUpdate(self._temp, self._bedTemp, self._targetTemp, self._bedTargetTemp)
elif self._state == self.STATE_OPERATIONAL:
#Request the temperature on comm timeout (every 2 seconds) when we are not printing.
if line == '':
- self._sendCommand("M105")
+ if self._extruderCount > 0:
+ self._temperatureRequestExtruder = (self._temperatureRequestExtruder + 1) % self._extruderCount
+ self._sendCommand("M105 T%d" % (self._temperatureRequestExtruder))
+ else:
+ self._sendCommand("M105")
tempRequestTimeout = time.time() + 5
elif self._state == self.STATE_PRINTING:
if line == '' and time.time() > timeout:
self._log("Communication timeout during printing, forcing a line")
line = 'ok'
- #Even when printing request the temperture every 5 seconds.
+ #Even when printing request the temperature every 5 seconds.
if time.time() > tempRequestTimeout:
- self._commandQueue.put("M105")
+ if self._extruderCount > 0:
+ self._temperatureRequestExtruder = (self._temperatureRequestExtruder + 1) % self._extruderCount
+ self._sendCommand("M105 T%d" % (self._temperatureRequestExtruder))
+ else:
+ self._sendCommand("M105")
tempRequestTimeout = time.time() + 5
if 'ok' in line:
timeout = time.time() + 5
self._heatupWaitStartTime = time.time()
if 'M104' in cmd or 'M109' in cmd:
try:
- self._targetTemp = float(re.search('S([0-9]+)', cmd).group(1))
+ t = 0
+ if 'T' in cmd:
+ t = int(re.search('T([0-9]+)', cmd).group(1))
+ self._targetTemp[t] = float(re.search('S([0-9]+)', cmd).group(1))
except:
pass
if 'M140' in cmd or 'M190' in cmd: