mirror of
https://github.com/BKLronin/touchCNC.git
synced 2024-11-21 16:14:01 +01:00
Added threaded grbl streamer
This commit is contained in:
parent
49cf914d80
commit
c3e37cf6c5
133
cnc.py
133
cnc.py
@ -4,12 +4,15 @@ from tkinter import *
|
|||||||
import serial.tools.list_ports
|
import serial.tools.list_ports
|
||||||
from tkinter import filedialog as fd
|
from tkinter import filedialog as fd
|
||||||
|
|
||||||
|
import threading
|
||||||
|
|
||||||
grbl = 0
|
grbl = 0
|
||||||
i = 10
|
i = 10
|
||||||
GCODE = 0
|
GCODE = 0
|
||||||
AXIS = 'X'
|
AXIS = 'X'
|
||||||
states = {'M3': '0', 'M8':'0', 'M6':'0'} #Spindle, Coolant
|
states = {'M3':'0', 'M8':'0', 'M6':'0'} #Spindle, Coolant
|
||||||
BORDER = 2
|
BORDER = 2
|
||||||
|
freetosend = 1
|
||||||
|
|
||||||
def grblConnect2():
|
def grblConnect2():
|
||||||
global grbl
|
global grbl
|
||||||
@ -37,8 +40,7 @@ def grblConnect2():
|
|||||||
grbl = 0
|
grbl = 0
|
||||||
|
|
||||||
# Stream g-code to grbl
|
# Stream g-code to grbl
|
||||||
#Stream GCODE from -https://onehossshay.wordpress.com/2011/08/26/grbl-a-simple-python-interface/-
|
#Stream GCODE from -https://onehossshay.wordpress.com/2011/08/26/grbl-a-simple-python-interface/-
|
||||||
|
|
||||||
|
|
||||||
def displayPosition():
|
def displayPosition():
|
||||||
if grbl != 0:
|
if grbl != 0:
|
||||||
@ -61,29 +63,28 @@ def displayPosition():
|
|||||||
#show_ctrl_z_w.config(text = coordinates_list[6])
|
#show_ctrl_z_w.config(text = coordinates_list[6])
|
||||||
else:
|
else:
|
||||||
print("No Connection yet")
|
print("No Connection yet")
|
||||||
show_ctrl_x.after(1000,displayPosition)
|
#show_ctrl_x.after(1000,displayPosition)
|
||||||
|
|
||||||
|
def debugWrite():
|
||||||
|
time.sleep(3)
|
||||||
|
print("NOW")
|
||||||
|
|
||||||
|
|
||||||
def jogWrite(grbl,AXIS, CMD, scale):
|
def jogWrite(AXIS, CMD, scale):
|
||||||
DECIMAL = [0.1,1,10,100]
|
DECIMAL = [0.1,1,10,100]
|
||||||
scale = increments.get()
|
scale = increments.get()
|
||||||
MOVE = int(CMD) * DECIMAL[scale -1]
|
MOVE = int(CMD) * DECIMAL[scale -1]
|
||||||
grbl_command = ('$J=G91' +' ' + AXIS + str(MOVE) + ' '+ 'F1000')
|
grbl_command = ('$J=G91' +' ' + AXIS + str(MOVE) + ' '+ 'F1000')
|
||||||
#print(grbl_command)
|
#print(grbl_command)
|
||||||
grbl.write(str.encode(grbl_command + '\n'))
|
if freetosend == 1:
|
||||||
grbl_out = grbl.readline() # Wait for grbl response with carriage return
|
sendGRBL(grbl_command)
|
||||||
#print(grbl_out.strip())
|
|
||||||
infoScreen(grbl_command)
|
|
||||||
infoScreen(grbl_out)
|
|
||||||
|
|
||||||
def directWrite(grbl, CMD):
|
def directWrite(CMD):
|
||||||
grbl_command = CMD
|
grbl_command = CMD
|
||||||
grbl.write(str.encode(grbl_command + '\n'))
|
if freetosend == 1:
|
||||||
grbl_out = grbl.readline() # Wait for grbl response with carriage return
|
sendGRBL(grbl_command)
|
||||||
infoScreen(grbl_command)
|
|
||||||
infoScreen(grbl_out)
|
|
||||||
|
|
||||||
def latchWrite(grbl, CMD):
|
def latchWrite(CMD):
|
||||||
global states
|
global states
|
||||||
if states[CMD] == '0':
|
if states[CMD] == '0':
|
||||||
states[CMD] = '1'
|
states[CMD] = '1'
|
||||||
@ -100,8 +101,11 @@ def latchWrite(grbl, CMD):
|
|||||||
tool.config(bg='grey')
|
tool.config(bg='grey')
|
||||||
|
|
||||||
if CMD == 'M3':
|
if CMD == 'M3':
|
||||||
grbl_command = (CMD * int(states[CMD]))
|
if states['M3'] == '1':
|
||||||
|
grbl_command = 'M3 S1000'
|
||||||
|
if states['M3'] == '0':
|
||||||
|
grbl_command = 'M3 S0'
|
||||||
|
|
||||||
if CMD == 'M8':
|
if CMD == 'M8':
|
||||||
if states['M8'] == '1':
|
if states['M8'] == '1':
|
||||||
grbl_command = (CMD)
|
grbl_command = (CMD)
|
||||||
@ -115,25 +119,16 @@ def latchWrite(grbl, CMD):
|
|||||||
#grbl_command = (CMD * int(states[CMD]) )
|
#grbl_command = (CMD * int(states[CMD]) )
|
||||||
print(grbl_command)
|
print(grbl_command)
|
||||||
print(states)
|
print(states)
|
||||||
grbl.write(str.encode(grbl_command + '\n'))
|
sendGRBL(grbl_command)
|
||||||
grbl_out = grbl.readline() # Wait for grbl response with carriage return
|
|
||||||
infoScreen(grbl_command)
|
|
||||||
infoScreen(grbl_out)
|
|
||||||
|
|
||||||
def zeroWrite(grbl, CMD, AXIS):
|
def zeroWrite(CMD, AXIS):
|
||||||
grbl_command = (CMD + ' ' + AXIS + '0')
|
grbl_command = (CMD + ' ' + AXIS + '0')
|
||||||
grbl.write(str.encode(grbl_command + '\n'))
|
sendGRBL(grbl_command)
|
||||||
grbl_out = grbl.readline() # Wait for grbl response with carriage return
|
|
||||||
infoScreen(grbl_command)
|
|
||||||
infoScreen(grbl_out)
|
|
||||||
|
|
||||||
def terminalWrite(grbl):
|
def terminalWrite():
|
||||||
grbl_command = terminal.get()
|
grbl_command = terminal.get()
|
||||||
#print(grbl_command)
|
#print(grbl_command)
|
||||||
grbl.write(str.encode(grbl_command + '\n'))
|
sendGRBL(grbl_command)
|
||||||
grbl_out = grbl.readline() # Wait for grbl response with carriage return
|
|
||||||
#print(grbl_out.strip())
|
|
||||||
infoScreen(grbl_out)
|
|
||||||
|
|
||||||
def infoScreen(data):
|
def infoScreen(data):
|
||||||
global i
|
global i
|
||||||
@ -157,7 +152,7 @@ def openGCODE():
|
|||||||
fopen.config(bg = 'grey')
|
fopen.config(bg = 'grey')
|
||||||
|
|
||||||
build_xy = findEnvelope()
|
build_xy = findEnvelope()
|
||||||
mill_table.create_rectangle(build_xy[0],build_xy[1], fill = 'blue', stipple = 'gray75')
|
mill_table.create_rectangle(build_xy[0],build_xy[1], fill = 'blue', stipple = 'gray75')
|
||||||
|
|
||||||
def findEnvelope(): #get the max used Buildspace and position of the job
|
def findEnvelope(): #get the max used Buildspace and position of the job
|
||||||
x_coords = []
|
x_coords = []
|
||||||
@ -186,22 +181,25 @@ def findEnvelope(): #get the max used Buildspace and position of the job
|
|||||||
coord_max[0] = max(x_coords) +50
|
coord_max[0] = max(x_coords) +50
|
||||||
coord_max[1] = 350 - max(y_coords) #invertierte Buildplattform mit 0 unten links statt oben links
|
coord_max[1] = 350 - max(y_coords) #invertierte Buildplattform mit 0 unten links statt oben links
|
||||||
coord_min[0] = min(x_coords) +50
|
coord_min[0] = min(x_coords) +50
|
||||||
coord_min[1] = 350 - min(y_coords)
|
coord_min[1] = 350 - min(y_coords)
|
||||||
|
|
||||||
return coord_min, coord_max
|
return coord_min, coord_max
|
||||||
|
|
||||||
def grblWrite(grbl, GCODE):
|
def grblWrite():
|
||||||
#print("write1")
|
#print("write1")
|
||||||
|
|
||||||
GCODE.seek(0)
|
GCODE.seek(0)
|
||||||
for line in GCODE:
|
for line in GCODE:
|
||||||
#print("write")
|
#print("write")
|
||||||
l = line.strip(line) # Strip all EOL characters for streaming
|
l = line.strip(line) # Strip all EOL characters for streaming
|
||||||
l = line.split(";",0)
|
l = line.split(";",0)
|
||||||
grbl.write(str.encode(l[0]+ '\n')) # Send g-code block to grbl
|
grbl_command = l[0]
|
||||||
grbl_out = grbl.readline() # Wait for grbl response with carriage return
|
sendGRBL(grbl_command)
|
||||||
infoScreen(grbl_out.strip())
|
infoScreen("finished")
|
||||||
|
GCODE.close()
|
||||||
|
fopen.config(bg = 'grey')
|
||||||
|
|
||||||
def grblClose(grbl):
|
def grblClose():
|
||||||
# Close file and serial port
|
# Close file and serial port
|
||||||
#f.close()
|
#f.close()
|
||||||
try:
|
try:
|
||||||
@ -211,6 +209,15 @@ def grblClose(grbl):
|
|||||||
except:
|
except:
|
||||||
print("Connection still open")
|
print("Connection still open")
|
||||||
|
|
||||||
|
def sendGRBL(grbl_command):
|
||||||
|
global freetosend
|
||||||
|
#print(grbl_command)
|
||||||
|
grbl.write(str.encode(grbl_command+ '\n')) # Send g-code block to grbl
|
||||||
|
grbl_out = grbl.readline() # Wait for grbl response with carriage return
|
||||||
|
infoScreen(grbl_out)
|
||||||
|
|
||||||
|
infoScreen("finished")
|
||||||
|
|
||||||
#GUI Main
|
#GUI Main
|
||||||
buttonsize_x = 5
|
buttonsize_x = 5
|
||||||
buttonsize_y = 3
|
buttonsize_y = 3
|
||||||
@ -225,31 +232,31 @@ root.tk_setPalette(background='#11192C', foreground='white',activeBackground='#2
|
|||||||
|
|
||||||
increments = IntVar()
|
increments = IntVar()
|
||||||
movement = Frame(root, relief = 'ridge', bd = BORDER)
|
movement = Frame(root, relief = 'ridge', bd = BORDER)
|
||||||
left = Button(root, text="-X", width = buttonsize_x, height = buttonsize_y, command = lambda:jogWrite(grbl, 'X', '-1', increments),bd = BORDER)
|
left = Button(root, text="-X", width = buttonsize_x, height = buttonsize_y, command = lambda:jogWrite('X', '-1', increments),bd = BORDER)
|
||||||
right = Button(root, text="+X",width = buttonsize_x, height = buttonsize_y,command = lambda:jogWrite(grbl, 'X', '1', increments),bd = BORDER)
|
right = Button(root, text="+X",width = buttonsize_x, height = buttonsize_y,command = lambda:jogWrite('X', '1', increments),bd = BORDER)
|
||||||
up = Button(root, text="+Y", width = buttonsize_x, height = buttonsize_y,command = lambda:jogWrite(grbl, 'Y', '1', increments),bd = BORDER)
|
up = Button(root, text="+Y", width = buttonsize_x, height = buttonsize_y,command = lambda:jogWrite('Y', '1', increments),bd = BORDER)
|
||||||
cancel = Button(root, text="cancel", width = buttonsize_x, height = buttonsize_y,bg = 'black', command = lambda:directWrite(grbl,'à'),bd = BORDER)
|
cancel = Button(root, text="cancel", width = buttonsize_x, height = buttonsize_y,bg = '#A31621', command = lambda:directWrite('133'),bd = BORDER)
|
||||||
down = Button(root, text="-Y",width = buttonsize_x, height = buttonsize_y,command = lambda:jogWrite(grbl, 'Y', '-1', increments),bd = BORDER)
|
down = Button(root, text="-Y",width = buttonsize_x, height = buttonsize_y,command = lambda:jogWrite('Y', '-1', increments),bd = BORDER)
|
||||||
z_up = Button(root, text="+Z",width = buttonsize_x, height = buttonsize_y,command = lambda:jogWrite(grbl, 'Z', '1', increments) ,bd = BORDER)
|
z_up = Button(root, text="+Z",width = buttonsize_x, height = buttonsize_y,command = lambda:jogWrite('Z', '1', increments) ,bd = BORDER)
|
||||||
z_down = Button(root, text="-Z",width = buttonsize_x, height = buttonsize_y,command = lambda:jogWrite(grbl, 'Z', '-1', increments),bd = BORDER)
|
z_down = Button(root, text="-Z",width = buttonsize_x, height = buttonsize_y,command = lambda:jogWrite('Z', '-1', increments),bd = BORDER)
|
||||||
|
|
||||||
zero_x = Button(root, text="zero X",width = buttonsize_x, height = buttonsize_y, command = lambda:zeroWrite(grbl,'G92', 'X' ),bd = BORDER)
|
zero_x = Button(root, text="zero X",width = buttonsize_x, height = buttonsize_y, command = lambda:zeroWrite('G92', 'X0' ),bd = BORDER)
|
||||||
zero_y = Button(root, text="zero Y",width = buttonsize_x, height = buttonsize_y, command = lambda:zeroWrite(grbl,'G92', 'Y' ),bd = BORDER)
|
zero_y = Button(root, text="zero Y",width = buttonsize_x, height = buttonsize_y, command = lambda:zeroWrite('G92', 'Y0' ),bd = BORDER)
|
||||||
zero_z = Button(root, text="zero Z",width = buttonsize_x, height = buttonsize_y, command = lambda:zeroWrite(grbl,'G92', 'Z' ),bd = BORDER)
|
zero_z = Button(root, text="zero Z",width = buttonsize_x, height = buttonsize_y, command = lambda:zeroWrite('G92', 'Z0' ),bd = BORDER)
|
||||||
zero_all =Button(root, text="zero All",width = buttonsize_x, height = buttonsize_y, command = lambda:zeroWrite(grbl,'G92', 'XYZ'),bd = BORDER)
|
zero_all =Button(root, text="zero All",width = buttonsize_x, height = buttonsize_y, command = lambda:zeroWrite('G92', 'G28.1'),bd = BORDER)
|
||||||
|
|
||||||
connect_ser = Button(root, text="Cnnct",width = buttonsize_x, height = buttonsize_y, command = grblConnect2, bg = 'grey',bd = BORDER)
|
connect_ser = Button(root, text="Cnnct",width = buttonsize_x, height = buttonsize_y, command = grblConnect2, bg = 'grey',bd = BORDER)
|
||||||
discon_ser = Button(root, text="Dsconct",width = buttonsize_x, height = buttonsize_y, command = lambda:grblClose(grbl),bd = BORDER)
|
discon_ser = Button(root, text="Dsconct",width = buttonsize_x, height = buttonsize_y, command = lambda:grblClose(),bd = BORDER)
|
||||||
unlock = Button(root, text="Unlock",width = buttonsize_x, height = buttonsize_y, command = lambda:directWrite(grbl, '$X'),bd = BORDER)
|
unlock = Button(root, text="Unlock",width = buttonsize_x, height = buttonsize_y, command = lambda:directWrite('$X'),bd = BORDER)
|
||||||
start = Button(root, text="START",width = buttonsize_x, height = buttonsize_y, bg = '#A31621', command = lambda: grblWrite(grbl,GCODE),bd = BORDER)
|
start = Button(root, text="START",width = buttonsize_x, height = buttonsize_y, bg = '#A31621', command = lambda: threading.Thread(target = grblWrite).start(),bd = BORDER)
|
||||||
stop = Button(root, text="STOP",width = buttonsize_x, height = buttonsize_y,bd = BORDER)
|
stop = Button(root, text="STOP",width = buttonsize_x, height = buttonsize_y,bd = BORDER)
|
||||||
pause = Button(root, text="PAUSE",width = buttonsize_x, height = buttonsize_y, bg = '#1F7A8C',bd = BORDER)
|
pause = Button(root, text="PAUSE",width = buttonsize_x, height = buttonsize_y, bg = '#1F7A8C',bd = BORDER)
|
||||||
fopen = Button(root, text="GCODE",width = buttonsize_x , height = buttonsize_y, bg = 'grey', command = openGCODE,bd = BORDER)
|
fopen = Button(root, text="GCODE",width = buttonsize_x , height = buttonsize_y, bg = 'grey', command = openGCODE,bd = BORDER)
|
||||||
|
|
||||||
spindle = Button(root, text="Spindle",width = buttonsize_x, height = buttonsize_y, bg = 'grey', command = lambda:latchWrite(grbl,'M3'))
|
spindle = Button(root, text="Spindle",width = buttonsize_x, height = buttonsize_y, bg = 'grey', command = lambda:latchWrite('M3'))
|
||||||
coolant = Button(root, text="Coolant",width = buttonsize_x, height = buttonsize_y,command = lambda:latchWrite(grbl,'M8') )
|
coolant = Button(root, text="Coolant",width = buttonsize_x, height = buttonsize_y,command = lambda:latchWrite('M8') )
|
||||||
tool = Button(root, text="Tool",width = buttonsize_x, height = buttonsize_y,command = lambda:latchWrite(grbl,'M6') )
|
tool = Button(root, text="Tool",width = buttonsize_x, height = buttonsize_y,command = lambda:latchWrite('M6') )
|
||||||
macro = Button(root, text="Macro1",width = buttonsize_x, height = buttonsize_y,command = lambda:directWrite(grbl,' G90 G1 X10 Y10 Z50 F1000') )
|
macro = Button(root, text="Macro1",width = buttonsize_x, height = buttonsize_y,command = lambda:directWrite(' G90 G0 X10 Y10 Z50 F1000') )
|
||||||
|
|
||||||
step_incr1 = Radiobutton(root, text= '0,1', value = 1 , variable = increments,width = buttonsize_x, height = buttonsize_y, indicatoron = 0 )
|
step_incr1 = Radiobutton(root, text= '0,1', value = 1 , variable = increments,width = buttonsize_x, height = buttonsize_y, indicatoron = 0 )
|
||||||
step_incr2 = Radiobutton(root, text= '1', value = 2 , variable = increments,width = buttonsize_x, height = buttonsize_y, indicatoron = 0 )
|
step_incr2 = Radiobutton(root, text= '1', value = 2 , variable = increments,width = buttonsize_x, height = buttonsize_y, indicatoron = 0 )
|
||||||
@ -258,7 +265,7 @@ step_incr4 = Radiobutton(root, text= '100', value = 4 , variable = increments,wi
|
|||||||
step_incr2.select()
|
step_incr2.select()
|
||||||
|
|
||||||
terminal = Entry(root, width =8, text="GCODE")
|
terminal = Entry(root, width =8, text="GCODE")
|
||||||
terminal_send = Button(root, text="SEND",width = buttonsize_x, height = buttonsize_y, bd= 3, command = lambda: terminalWrite(grbl))
|
terminal_send = Button(root, text="SEND",width = buttonsize_x, height = buttonsize_y, bd= 3, command = lambda: terminalWrite())
|
||||||
terminal_recv = Canvas(root, width = 200, height =400, bg = 'white')
|
terminal_recv = Canvas(root, width = 200, height =400, bg = 'white')
|
||||||
|
|
||||||
show_ctrl_x_label = Label(root,text = "X")
|
show_ctrl_x_label = Label(root,text = "X")
|
||||||
@ -272,7 +279,7 @@ show_ctrl_x_w =Label(root, text = "X_POS_W", width = 8, height = 2, bg ='white',
|
|||||||
show_ctrl_y_w =Label(root, text = "Y_POS_W", width = 8, height = 2, bg ='white', relief = SUNKEN)
|
show_ctrl_y_w =Label(root, text = "Y_POS_W", width = 8, height = 2, bg ='white', relief = SUNKEN)
|
||||||
show_ctrl_z_w =Label(root, text = "Z_POS_W", width = 8, height = 2, bg ='white', relief = SUNKEN)
|
show_ctrl_z_w =Label(root, text = "Z_POS_W", width = 8, height = 2, bg ='white', relief = SUNKEN)
|
||||||
|
|
||||||
show_ctrl_x.after(100, displayPosition)
|
#threading.Thread(target= displayPosition()).start()
|
||||||
|
|
||||||
feed_control = Scale(root, orient = HORIZONTAL, length = 400, label = "Feedrate",tickinterval = 20)
|
feed_control = Scale(root, orient = HORIZONTAL, length = 400, label = "Feedrate",tickinterval = 20)
|
||||||
|
|
||||||
@ -293,7 +300,7 @@ for x in range(0,400,50):
|
|||||||
|
|
||||||
movement.grid(row = 0, column = 0, columnspan = 3, rowspan = 1)
|
movement.grid(row = 0, column = 0, columnspan = 3, rowspan = 1)
|
||||||
left.grid(row=1, column=0, padx=3, pady=2)
|
left.grid(row=1, column=0, padx=3, pady=2)
|
||||||
cancel.grid(row=0, column=0, padx=3, pady=2)
|
cancel.grid(row=0, column=2, padx=3, pady=2)
|
||||||
right.grid(row=1, column=2,padx=3, pady=2)
|
right.grid(row=1, column=2,padx=3, pady=2)
|
||||||
up.grid(row=0, column=1, padx=3, pady=10)
|
up.grid(row=0, column=1, padx=3, pady=10)
|
||||||
down.grid(row=1, column=1,padx=3, pady=2)
|
down.grid(row=1, column=1,padx=3, pady=2)
|
||||||
@ -343,6 +350,6 @@ terminal_recv.grid(row = 0, column = 8, padx =10, pady =10,rowspan = 7, columnsp
|
|||||||
feed_control.grid(row = 8, column = 4, columnspan =4)
|
feed_control.grid(row = 8, column = 4, columnspan =4)
|
||||||
|
|
||||||
mill_table.grid(row=0, column=4,padx=10, pady=10,columnspan = 4, rowspan = 7)
|
mill_table.grid(row=0, column=4,padx=10, pady=10,columnspan = 4, rowspan = 7)
|
||||||
|
|
||||||
root.mainloop()
|
root.mainloop()
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user