position updates are working right now.
This commit is contained in:
parent
358677f42c
commit
6f6c07c3dc
6 changed files with 93 additions and 16 deletions
|
|
@ -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")
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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})
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in a new issue