Commit 6f49adca authored by Guillaume Seguin's avatar Guillaume Seguin

Merge branch 'master' of github.com:kliment/Printrun

parents 55da08b8 6791f2c9
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
var hostname = window.location.hostname; var hostname = window.location.hostname;
var url = "ws://"+hostname+":8888/socket?user=admin&password=admin"; var url = "ws://"+hostname+":8888/socket?user=admin&password=admin";
console.log(url); console.log(url);
var ws = new WebSocket(url, "construct.text.0.0.1"); var ws = new WebSocket(url, "construct.text.0.2");
$(function () { $(function () {
$consoleWrapper = $(".console"); $consoleWrapper = $(".console");
$console = $(".console pre"); $console = $(".console pre");
......
...@@ -402,6 +402,46 @@ class EventEmitter(object): ...@@ -402,6 +402,46 @@ class EventEmitter(object):
continue continue
# Fast GCode. Because the GCode class is slow.
# -------------------------------------------------
class PyLine(object):
__slots__ = ('x','y','z','e','f','i','j',
'raw', 'command', 'is_move',
'relative','relative_e',
'current_x', 'current_y', 'current_z', 'extruding', 'current_tool',
'gcview_end_vertex')
def __init__(self, l):
self.raw = l
def __getattr__(self, name):
return None
try:
from printrun import gcoder_line
Line = gcoder_line.GLine
except ImportError:
Line = PyLine
class FastGCode(object):
def __init__(self,data):
self.lines = [Line(l2) for l2 in
(l.strip() for l in data)
if l2]
self.all_layers = [self.lines]
def __len__(self):
return len(self.lines)
def __iter__(self):
return self.lines.__iter__()
def idxs(self, index):
return (0, index)
# Prontserve: Server-specific functionality # Prontserve: Server-specific functionality
# ------------------------------------------------- # -------------------------------------------------
...@@ -445,8 +485,10 @@ class Prontserve(pronsole.pronsole, EventEmitter): ...@@ -445,8 +485,10 @@ class Prontserve(pronsole.pronsole, EventEmitter):
sdRef.close() sdRef.close()
def do_print(self): def do_print(self):
if not self.p.online: raise Exception("not online") if not self.p.online: raise Exception("Not online")
if self.printing_jobs: raise Exception("already printing") if self.printing_jobs: raise Exception("Already printing")
no_jobs_msg = "Nothing to print. Try adding a print job with add_job."
if len(self.jobs.list) == 0: raise Exception(no_jobs_msg)
self.printing_jobs = True self.printing_jobs = True
def do_home(self, *args, **kwargs): def do_home(self, *args, **kwargs):
...@@ -479,6 +521,21 @@ class Prontserve(pronsole.pronsole, EventEmitter): ...@@ -479,6 +521,21 @@ class Prontserve(pronsole.pronsole, EventEmitter):
raise Exception("Continuous movement not supported") raise Exception("Continuous movement not supported")
def do_estop(self): def do_estop(self):
self.reset()
print "Emergency Stop!"
self.fire("estop")
# Updating the job progress
print self.print_progress()
self.update_job_progress(self.print_progress())
for k, v in self.target_values.iteritems():
self._set_target_temp(k, 0)
self.do_set_motors("off")
self.do_set_fan("off")
progress = {'eta': 0, 'percent': 100}
self.fire("target_temp_progress_changed", {'e0': progress})
def reset(self):
self.printing_jobs = False self.printing_jobs = False
self.current_job = None self.current_job = None
self.waiting_to_reach_temp = False self.waiting_to_reach_temp = False
...@@ -492,8 +549,9 @@ class Prontserve(pronsole.pronsole, EventEmitter): ...@@ -492,8 +549,9 @@ class Prontserve(pronsole.pronsole, EventEmitter):
# restart the firmware # restart the firmware
pronsole.pronsole.do_reset(self, "") pronsole.pronsole.do_reset(self, "")
print "Emergency Stop!" self.p.printing = False
self.fire("estop")
def do_construct_set(self, subCmd, *args, **kwargs): def do_construct_set(self, subCmd, *args, **kwargs):
method = "do_set_%s"%subCmd method = "do_set_%s"%subCmd
...@@ -562,6 +620,7 @@ class Prontserve(pronsole.pronsole, EventEmitter): ...@@ -562,6 +620,7 @@ class Prontserve(pronsole.pronsole, EventEmitter):
# A better solution would be one in which a print_finised event could be # A better solution would be one in which a print_finised event could be
# listend for asynchronously without polling. # listend for asynchronously without polling.
p = self.p p = self.p
try:
if self.printing_jobs and p.printing == False and p.online: if self.printing_jobs and p.printing == False and p.online:
if self.current_job != None: if self.current_job != None:
self.update_job_progress(100) self.update_job_progress(100)
...@@ -574,7 +633,8 @@ class Prontserve(pronsole.pronsole, EventEmitter): ...@@ -574,7 +633,8 @@ class Prontserve(pronsole.pronsole, EventEmitter):
elif len(self.jobs.list) > 0: elif len(self.jobs.list) > 0:
print "Starting the next print job" print "Starting the next print job"
self.current_job = self.jobs.list.pop(0) self.current_job = self.jobs.list.pop(0)
gc = gcoder.GCode(self.current_job['body'].split("\n")) lines = self.current_job['body'].split("\n")
gc = FastGCode(lines)
self.p.startprint(gc) self.p.startprint(gc)
self.p.paused = False self.p.paused = False
self.fire("job_started", self.jobs.sanitize(self.current_job)) self.fire("job_started", self.jobs.sanitize(self.current_job))
...@@ -586,12 +646,15 @@ class Prontserve(pronsole.pronsole, EventEmitter): ...@@ -586,12 +646,15 @@ class Prontserve(pronsole.pronsole, EventEmitter):
# Updating the job progress # Updating the job progress
self.update_job_progress(self.print_progress()) self.update_job_progress(self.print_progress())
except Exception as ex:
print traceback.format_exc()
#print "print loop" #print "print loop"
next_timeout = time.time() + 0.3 next_timeout = time.time() + 0.3
gen.Task(self.ioloop.add_timeout(next_timeout, self.run_print_queue_loop)) gen.Task(self.ioloop.add_timeout(next_timeout, self.run_print_queue_loop))
def update_job_progress(self, progress): def update_job_progress(self, progress):
if progress != self.previous_job_progress and self.current_job != None: if progress != self.previous_job_progress:
self.previous_job_progress = progress self.previous_job_progress = progress
self.fire("job_progress_changed", progress) self.fire("job_progress_changed", progress)
...@@ -600,7 +663,7 @@ class Prontserve(pronsole.pronsole, EventEmitter): ...@@ -600,7 +663,7 @@ class Prontserve(pronsole.pronsole, EventEmitter):
return 100*float(self.p.queueindex)/len(self.p.mainqueue) return 100*float(self.p.queueindex)/len(self.p.mainqueue)
if(self.sdprinting): if(self.sdprinting):
return self.percentdone return self.percentdone
return "0" return 0
def run_sensor_loop(self): def run_sensor_loop(self):
# A number of conditions that must be met for us to send a temperature # A number of conditions that must be met for us to send a temperature
...@@ -821,7 +884,7 @@ if __name__ == "__main__": ...@@ -821,7 +884,7 @@ if __name__ == "__main__":
sys.exit(1) sys.exit(1)
time.sleep(2) time.sleep(2)
prontserve.do_estop() prontserve.reset()
prontserve.run_sensor_loop() prontserve.run_sensor_loop()
prontserve.run_print_queue_loop() prontserve.run_print_queue_loop()
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment