class VirtualPrinter():
def __init__(self):
self.readList = ['start\n']
+ self.temp = 0.0
+ self.targetTemp = 0.0
def write(self, data):
if self.readList == None:
return
print "Send: %s" % (data.rstrip())
- self.readList.append("ok\n")
+ if 'M104' in data:
+ try:
+ self.targetTemp = float(data[data.find('S')+1:])
+ except:
+ pass
+ if 'M105' in data:
+ self.readList.append("ok T:%f/%f\n" % (self.temp, self.targetTemp))
+ else:
+ self.readList.append("ok\n")
def readline(self):
if self.readList == None:
return ''
+ n = 0
+ self.temp = (self.temp + self.targetTemp) / 2
while len(self.readList) < 1:
time.sleep(0.1)
+ n += 1
+ if n == 20:
+ return ''
if self.readList == None:
return ''
time.sleep(0.001)
programmer.connect(port)
programmer.close()
print "Connecting to: %s %i" % (port, baudrate)
- self.serial = Serial(port, baudrate, timeout=5)
+ self.serial = Serial(port, baudrate, timeout=2)
break
except ispBase.IspError:
pass
self.serial = VirtualPrinter()
else:
try:
- self.serial = Serial(port, baudrate, timeout=5)
+ self.serial = Serial(port, baudrate, timeout=2)
except:
print "Unexpected error while connecting to serial port:" + port, sys.exc_info()[0]
from __future__ import absolute_import\r
import __init__\r
\r
-import wx, threading\r
+import wx, threading, re\r
\r
from gui import machineCom\r
from gui import icon\r
self.thread = None\r
self.gcode = None\r
self.gcodeList = None\r
+ self.sendList = []\r
self.printIdx = None\r
+ self.temp = None\r
self.bufferLineCount = 4\r
self.sendCnt = 0\r
\r
self.printButton = wx.Button(self.panel, -1, 'Print GCode')\r
self.cancelButton = wx.Button(self.panel, -1, 'Cancel print')\r
self.progress = wx.Gauge(self.panel, -1)\r
+ \r
+ h = self.connectButton.GetSize().GetHeight()\r
+ self.temperatureSelect = wx.SpinCtrl(self.panel, -1, '0', size=(21*3,21), style=wx.SP_ARROW_KEYS)\r
+ self.temperatureSelect.SetRange(0, 400)\r
+ \r
self.sizer.Add(self.connectButton, pos=(0,1))\r
#self.sizer.Add(self.loadButton, pos=(1,1))\r
self.sizer.Add(self.printButton, pos=(2,1))\r
self.sizer.Add(self.cancelButton, pos=(3,1))\r
self.sizer.Add(self.progress, pos=(4,0), span=(1,2), flag=wx.EXPAND)\r
+\r
+ self.sizer.Add(wx.StaticText(self.panel, -1, "Temp:"), pos=(0,3))\r
+ self.sizer.Add(self.temperatureSelect, pos=(0,4))\r
+\r
self.sizer.AddGrowableRow(3)\r
self.sizer.AddGrowableCol(0)\r
\r
self.printButton.Bind(wx.EVT_BUTTON, self.OnPrint)\r
self.cancelButton.Bind(wx.EVT_BUTTON, self.OnCancel)\r
\r
+ self.Bind(wx.EVT_SPINCTRL, self.OnTempChange, self.temperatureSelect)\r
+ \r
self.Layout()\r
self.Fit()\r
self.Centre()\r
else:\r
self.progress.SetValue(self.printIdx)\r
status += 'Line: %d/%d\n' % (self.printIdx, len(self.gcodeList))\r
+ if self.temp != None:\r
+ status += 'Temp: %d\n' % (self.temp)\r
self.statsText.SetLabel(status)\r
\r
def OnConnect(self, e):\r
self.thread.join()\r
self.Destroy()\r
\r
+ def OnTempChange(self, e):\r
+ self.sendCommand("M104 S%d" % (self.temperatureSelect.GetValue()))\r
+\r
def LoadGCodeFile(self, filename):\r
if self.printIdx != None:\r
return\r
+ #Send an initial M110 to reset the line counter to zero.\r
gcodeList = ["M110"]\r
for line in open(filename, 'r'):\r
if ';' in line:\r
self.gcodeList = gcodeList\r
self.UpdateButtonStates()\r
self.UpdateProgress()\r
+ \r
+ def sendCommand(self, cmd):\r
+ if self.machineConnected:\r
+ if self.printIdx == None:\r
+ self.machineCom.sendCommand(cmd)\r
+ else:\r
+ self.sendList.append(cmd)\r
\r
def sendLine(self, lineNr):\r
if lineNr >= len(self.gcodeList):\r
return True\r
\r
def PrinterMonitor(self):\r
- skipCount = 0\r
while True:\r
line = self.machineCom.readline()\r
if line == None:\r
elif line.startswith("start"):\r
self.machineConnected = True\r
wx.CallAfter(self.UpdateButtonStates)\r
- if self.printIdx != None:\r
+ if 'T:' in line:\r
+ self.temp = float(re.search("[0-9\.]*", line.split('T:')[1]).group(0))\r
+ wx.CallAfter(self.UpdateProgress)\r
+ if self.printIdx == None:\r
+ if line == '': #When we have a communication "timeout" and we're not sending gcode read the temperature.\r
+ self.machineCom.sendCommand("M105")\r
+ else:\r
if line.startswith("ok"):\r
- if skipCount > 0:\r
- skipCount -= 1\r
+ if len(self.sendList) > 0:\r
+ self.machineCom.sendCommand(self.sendList.pop(0))\r
else:\r
if self.sendLine(self.printIdx):\r
self.printIdx += 1\r