From af9a6aaad36d86069a3f7580ccf0703af3482a8c Mon Sep 17 00:00:00 2001 From: Nathan Zadoks Date: Sat, 3 Dec 2011 20:18:48 +0100 Subject: [PATCH 1/2] Greatly improved calibrateextruder.py --- calibrateextruder.py | 102 ++++++++++++++++++++++++++++--------------- 1 file changed, 66 insertions(+), 36 deletions(-) diff --git a/calibrateextruder.py b/calibrateextruder.py index 3dfa48c..8808324 100644 --- a/calibrateextruder.py +++ b/calibrateextruder.py @@ -2,7 +2,7 @@ #Interactive RepRap e axis calibration program #(C) Nathan Zadoks 2011 #Licensed under CC-BY-SA or GPLv2 and higher - Pick your poison. -t= 60 #Time to wait for extrusion +s=300 #Extrusion speed (mm/min) n=100 #Default length to extrude m= 0 #User-entered measured extrusion length k=300 #Default amount of steps per mm @@ -11,6 +11,8 @@ temp=210 #Default extrusion temperature tempmax=250 #Maximum extrusion temperature +t=int(n*60)/s #Time to wait for extrusion + try: from printdummy import printcore except ImportError: @@ -42,6 +44,37 @@ def w(s): sys.stdout.write(s) sys.stdout.flush() + +def heatup(p,temp,s=0): + curtemp=gettemp(p) + p.send_now('M109 S%03d'%temp) + p.temp=0 + if not s: w("Heating extruder up..") + f=False + while curtemp<=(temp-1): + p.send_now('M105') + time.sleep(0.5) + if not f: + time.sleep(1.5) + f=True + curtemp=gettemp(p) + if curtemp: w(u"\rHeating extruder up.. %3d \xb0C"%curtemp) + if s: print + else: print "\nReady." + +def gettemp(p): + try: p.logl + except: setattr(p,'logl',0) + try: p.temp + except: setattr(p,'temp',0) + for n in range(p.logl,len(p.log)): + line=p.log[n] + if 'T:' in line: + try: + setattr(p,'temp',int(line.split('T:')[1].split()[0])) + except: print line + p.logl=len(p.log) + return p.temp if not os.path.exists(port): port=0 @@ -83,39 +116,36 @@ print "Length extruded: %3d mm"%n print print "Serial port: %s"%(port if port else 'auto') -#Connect to printer -w("Connecting to printer..") +p=None try: - p=printcore(port,115200) -except: - print 'Error.' - raise -while not p.online: - time.sleep(1) - w('.') -print " connected." - -def sendcb(self,l): - if l=='G92 E0': - self.hot=True -w("Heating extruder up..") -setattr(p,'hot',False) -p.sendcb=sendcb -p.send_now('M109 S%03d'%temp) -while not p.hot: - time.sleep(1) - w('.') -print " ready." - -#Calibration loop -while n!=m: - p.send_now("G92 E0") #Reset e axis - p.send_now("G1 E%d F100"%int(n)) #Extrude length of filament - wait(t,'Extruding.. ') - m=float_input("How many millimeters of filament were extruded? ") - if n!=m: - k=(n/m)*k - p.send_now("M92 E%d"%int(round(k))) #Set new step count - print "Steps per mm: %3d steps"%k #Tell user -print 'Calibration completed.' #Yay! -p.disconnect() + #Connect to printer + w("Connecting to printer..") + try: + p=printcore(port,115200) + except: + print 'Error.' + raise + while not p.online: + time.sleep(1) + w('.') + print " connected." + + heatup(p,temp) + + #Calibration loop + while n!=m: + heatup(p,temp,True) + p.send_now("G92 E0") #Reset e axis + p.send_now("G1 E%d F%d"%(n,s)) #Extrude length of filament + wait(t,'Extruding.. ') + m=float_input("How many millimeters of filament were extruded? ") + if m==0: continue + if n!=m: + k=(n/m)*k + p.send_now("M92 E%d"%int(round(k))) #Set new step count + print "Steps per mm: %3d steps"%k #Tell user + print 'Calibration completed.' #Yay! +except KeyboardInterrupt: + pass +finally: + if p: p.disconnect() From 79223d31561cd8b859a2497be7b1b6cd5bfb9518 Mon Sep 17 00:00:00 2001 From: Nathan Zadoks Date: Sat, 3 Dec 2011 20:19:33 +0100 Subject: [PATCH 2/2] port setting is now also respected if the port exists but is not detected in scan (for udev symlinks) --- pronterface.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pronterface.py b/pronterface.py index 8c8021a..e7b14d2 100755 --- a/pronterface.py +++ b/pronterface.py @@ -392,7 +392,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole): self.serialport.Clear() self.serialport.AppendItems(portslist) try: - if self.settings.port in scan: + if os.path.exists(self.settings.port): self.serialport.SetValue(self.settings.port) elif len(portslist)>0: self.serialport.SetValue(portslist[0])