position updates are working right now.

This commit is contained in:
Teja 2015-01-03 20:06:26 +01:00
parent 358677f42c
commit 6f6c07c3dc
6 changed files with 93 additions and 16 deletions

View file

@ -16,18 +16,37 @@ function WorkingAreaViewModel(loginStateViewModel, settingsViewModel, printerSta
self.isError = ko.observable(undefined);
self.isReady = ko.observable(undefined);
self.isLoading = ko.observable(undefined);
self.currentPos = ko.observable(undefined);
self.laserPos = ko.computed(function(){
console.log("foo")
x = self.x === undefined ? '?' : self.x;
y = self.y === undefined ? '?' : self.y;
return "x"+ x + ", y"+ y;
var pos = self.currentPos();
if(!pos){
return "(?, ?)";
} else {
return "("+ pos.x + ", "+ pos.y + ")";
}
}, this);
self._processPos = function(posStr) {
// example posStr: "X: 73.0000 Y: 192.0000 Z: 0.0000"
var parts = posStr.split(" ");
var x = parseFloat(parts[1]).toFixed(2)
var y = parseFloat(parts[3]).toFixed(2)
self.currentPos({x:x, y:y});
};
self._fromData = function(data) {
workPosition = data.workPosition;
self._processPos(workPosition);
};
self.fromCurrentData = function(data) {
self._fromData(data);
};
self.move_laser = function(el){
console.log(event);
var x = event.offsetX;
var y = event.toElement.offsetHeight - event.offsetY;
console.log(x, y);
var command = "G0 X"+x+" Y"+y;
$.ajax({
url: API_BASEURL + "printer/command",
@ -49,12 +68,8 @@ function WorkingAreaViewModel(loginStateViewModel, settingsViewModel, printerSta
self.pause = self.state.pause;
self.cancel = self.state.cancel;
// self.enable_focus = function(){
// $root.sendCustomCommand({type:'command',command:'M3S5'})
// }
// self.disable_focus = function(){
// $root.sendCustomCommand({type:'command',command:'M5'})
// }
//
// self.getLaserPos = function(){
// console.log("foo")

View file

@ -422,8 +422,8 @@
<script type="text/javascript" src="{{ url_for('static', filename='js/lib/modernizr.custom.js') }}"></script>
<script type="text/javascript" src="{{ url_for('static', filename='js/lib/underscore-min.js') }}"></script>
<script type="text/javascript" src="{{ url_for('static', filename='js/lib/underscore.string.min.js') }}"></script>
<!--<script type="text/javascript" src="{{ url_for('static', filename='js/lib/knockout.js') }}"></script>-->
<script type="text/javascript" src="{{ url_for('static', filename='js/lib/knockout-2.2.1.debug.js') }}"></script>
<script type="text/javascript" src="{{ url_for('static', filename='js/lib/knockout.js') }}"></script>
<!--<script type="text/javascript" src="{{ url_for('static', filename='js/lib/knockout-2.2.1.debug.js') }}"></script>-->
<script type="text/javascript" src="{{ url_for('static', filename='js/lib/knockout.mapping-latest.js') }}"></script>
<script type="text/javascript" src="{{ url_for('static', filename='js/lib/babel.js') }}"></script>
<script type="text/javascript" src="{{ url_for('static', filename='js/lib/avltree.js') }}"></script>

View file

@ -58,6 +58,8 @@ class Printer():
self._state = None
self._currentZ = None
self._machinePosition = "-"
self._workPosition = "-"
self._progress = None
self._printTime = None
@ -196,6 +198,7 @@ class Printer():
def jog(self, axis, amount):
movementSpeed = settings().get(["printerParameters", "movementSpeed", ["x", "y", "z"]], asdict=True)
self.commands(["G91", "G1 %s%.4f F%d" % (axis.upper(), amount, movementSpeed[axis]), "G90"])
self.command("?")
def home(self, axes):
#self.commands(["G91", "G28 %s" % " ".join(map(lambda x: "%s0" % x.upper(), axes)), "G90"])
@ -277,9 +280,22 @@ class Printer():
if self._selectedFile is None:
return
self._addPositionData(None)
self._setCurrentZ(None)
self._comm.startPrint()
def _addPositionData(self, MPos, WPos):
if MPos is None or WPos is None:
MPosString = WPosString = "-"
else:
MPosString = "X: %.4f Y: %.4f Z: %.4f" % ( MPos[0], MPos[1], MPos[2] )
WPosString = "X: %.4f Y: %.4f Z: %.4f" % ( WPos[0], WPos[1], WPos[2] )
self._stateMonitor.setWorkPosition(WPosString)
self._stateMonitor.setMachinePosition(MPosString)
def togglePausePrint(self):
"""
Pause the current printjob.
@ -467,6 +483,10 @@ class Printer():
def mcTempUpdate(self, temp, bedTemp):
self._addTemperatureData(temp, bedTemp)
def mcPosUpdate(self, MPos, WPos):
print WPos
self._addPositionData(MPos, WPos)
def mcStateChange(self, state):
"""
Callback method for the comm object, called if the connection state changes.
@ -693,6 +713,8 @@ class StateMonitor(object):
self._gcodeData = None
self._sdUploadData = None
self._currentZ = None
self._machinePosition = None
self._workPosition = None
self._progress = None
self._offsets = {}
@ -705,16 +727,26 @@ class StateMonitor(object):
self._worker.daemon = True
self._worker.start()
def reset(self, state=None, jobData=None, progress=None, currentZ=None):
def reset(self, state=None, jobData=None, progress=None, currentZ=None, machinePosition=None, workPosition=None):
self.setState(state)
self.setJobData(jobData)
self.setProgress(progress)
self.setMachinePosition(machinePosition)
self.setWorkPosition(workPosition)
self.setCurrentZ(currentZ)
def addTemperature(self, temperature):
self._addTemperatureCallback(temperature)
self._changeEvent.set()
def setWorkPosition(self, workPosition):
self._workPosition = workPosition
self._changeEvent.set()
def setMachinePosition(self, machinePosition):
self._machinePosition = machinePosition
self._changeEvent.set()
def addLog(self, log):
self._addLogCallback(log)
self._changeEvent.set()
@ -764,6 +796,8 @@ class StateMonitor(object):
return {
"state": self._state,
"job": self._jobData,
"machinePosition": self._machinePosition,
"workPosition": self._workPosition,
"currentZ": self._currentZ,
"progress": self._progress,
"offsets": self._offsets

View file

@ -326,6 +326,9 @@ def printerCommand():
commandToSend = command % parameters
commandsToSend.append(commandToSend)
if settings().getBoolean(["feature", "grbl"]):
commandsToSend.append("?")
printer.commands(commandsToSend)
return NO_CONTENT

View file

@ -70,6 +70,7 @@ class PrinterStateConnection(sockjs.tornado.SockJSConnection):
pass
def sendCurrentData(self, data):
print("send_current_data", data)
# add current temperature, log and message backlogs to sent data
with self._temperatureBacklogMutex:
temperatures = self._temperatureBacklog
@ -131,4 +132,5 @@ class PrinterStateConnection(sockjs.tornado.SockJSConnection):
self.sendEvent(event, payload)
def _emit(self, type, payload):
print("emit", type, payload)
self.send({type: payload})

View file

@ -91,7 +91,7 @@ gcodeToEvent = {
"M300": Events.ALERT,
# home print head
"G28": Events.HOME,
"$H": Events.HOME,
# emergency stop
"M112": Events.E_STOP,
@ -647,6 +647,8 @@ class MachineCom(object):
heatingUp = False
swallowOk = False
supportRepetierTargetTemp = settings().getBoolean(["feature", "repetierTargetTemp"])
grblMoving = True
grblLastStatus = ""
while True:
try:
@ -725,6 +727,27 @@ class MachineCom(object):
except ValueError:
pass
# GRBL Position update
if self._grbl and 'MPos:' in line:
if grblLastStatus == line:
grblMoving = False
else:
grblMoving = True
grblLastStatus = line
parts = line.strip("\r\n").split(":")
pos = parts[1].split(",")
MPos = (float(pos[0]), float(pos[1]), float(pos[2]))
pos = parts[2].split(",")
WPos = (float(pos[0]), float(pos[1]), float( pos[2].strip(">") ))
self._callback.mcPosUpdate(MPos, WPos)
##~~ SD Card handling
elif 'SD init fail' in line or 'volume.init failed' in line or 'openRoot failed' in line:
self._sdAvailable = False