Added emulation for offline tests
parent
05f84c2f3b
commit
960d4ab56e
|
@ -42,6 +42,7 @@ from helper import *
|
||||||
# Begin configuration. It is overwritten when running setup(baudrate, device)
|
# Begin configuration. It is overwritten when running setup(baudrate, device)
|
||||||
BAUDRATE = 115200
|
BAUDRATE = 115200
|
||||||
DEVICE = "/dev/ttyUSB0"
|
DEVICE = "/dev/ttyUSB0"
|
||||||
|
Emulate = 0
|
||||||
# End configuration
|
# End configuration
|
||||||
|
|
||||||
millis_wait = 0.5 # Delay used when re-trying to send/receive from the serial port [seconds]
|
millis_wait = 0.5 # Delay used when re-trying to send/receive from the serial port [seconds]
|
||||||
|
@ -51,18 +52,24 @@ OK_response = "ok" # First two characters of an OK response (case insensitive)
|
||||||
|
|
||||||
CNC_Machine = []
|
CNC_Machine = []
|
||||||
|
|
||||||
def connect(baudrate, device):
|
def connect(baudrate, device, emulate = 0):
|
||||||
global CNC_Machine
|
global CNC_Machine, Emulate
|
||||||
BAUDRATE = baudrate
|
BAUDRATE = baudrate
|
||||||
DEVICE = device
|
DEVICE = device
|
||||||
print "Connecting to Cyclone..."
|
print "Connecting to Cyclone..."
|
||||||
CNC_Machine = serial.Serial(DEVICE, BAUDRATE, timeout = serial_timeout)
|
if emulate == 0:
|
||||||
|
CNC_Machine = serial.Serial(DEVICE, BAUDRATE, timeout = serial_timeout)
|
||||||
|
Emulate = 0
|
||||||
|
else:
|
||||||
|
Emulate = 1
|
||||||
print "Serial port opened, checking connection..."
|
print "Serial port opened, checking connection..."
|
||||||
time.sleep(2)
|
time.sleep(2)
|
||||||
checkConnection();
|
checkConnection()
|
||||||
print "Connected!"
|
print "Connected!"
|
||||||
|
|
||||||
def flushRecvBuffer(): # We could also use flushInput(), but showing the data that is being discarded is useful for debugging
|
def flushRecvBuffer(): # We could also use flushInput(), but showing the data that is being discarded is useful for debugging
|
||||||
|
if Emulate:
|
||||||
|
return
|
||||||
while CNC_Machine.inWaiting() > 0:
|
while CNC_Machine.inWaiting() > 0:
|
||||||
response = CNC_Machine.readline()
|
response = CNC_Machine.readline()
|
||||||
if response != '':
|
if response != '':
|
||||||
|
@ -71,13 +78,17 @@ def flushRecvBuffer(): # We could also use flushInput(), but showing the data th
|
||||||
|
|
||||||
def sendLine(line):
|
def sendLine(line):
|
||||||
flushRecvBuffer()
|
flushRecvBuffer()
|
||||||
CNC_Machine.write(line)
|
if Emulate == 0:
|
||||||
#print "SENT: ", line
|
CNC_Machine.write(line)
|
||||||
|
print "SENT: ", line
|
||||||
|
|
||||||
def recvLine():
|
def recvLine():
|
||||||
response = CNC_Machine.readline()
|
if Emulate:
|
||||||
#if response != '': print "RECV: ", response
|
response = "ok Z30\n" # Asume OK + Z probing result
|
||||||
#else: print "RECV: Receive timed out!"
|
else:
|
||||||
|
response = CNC_Machine.readline()
|
||||||
|
if response != '': print "RECV: ", response
|
||||||
|
else: print "RECV: Receive timed out!"
|
||||||
return response
|
return response
|
||||||
|
|
||||||
def recvOK():
|
def recvOK():
|
||||||
|
@ -87,9 +98,9 @@ def recvOK():
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
def waitForOK(): # This is a blocking function
|
def waitForOK(): # This is a blocking function
|
||||||
#print "Waiting for confirmation"
|
print "Waiting for confirmation"
|
||||||
while recvOK() != 1:
|
while recvOK() != 1:
|
||||||
#print " Checking again..."
|
print " Checking again..."
|
||||||
time.sleep(millis_wait) # Wait some milliseconds between attempts
|
time.sleep(millis_wait) # Wait some milliseconds between attempts
|
||||||
|
|
||||||
def sendCommand(command): # Send command and wait for OK
|
def sendCommand(command): # Send command and wait for OK
|
||||||
|
@ -109,26 +120,50 @@ def homeZXY():
|
||||||
sendCommand("G28 Z0\n") # move Z to min endstop
|
sendCommand("G28 Z0\n") # move Z to min endstop
|
||||||
sendCommand("G28 X0\n") # move X to min endstop
|
sendCommand("G28 X0\n") # move X to min endstop
|
||||||
sendCommand("G28 Y0\n") # move Y to min endstop
|
sendCommand("G28 Y0\n") # move Y to min endstop
|
||||||
|
if Emulate:
|
||||||
|
time.sleep(3)
|
||||||
|
|
||||||
def moveXYZ(X, Y, Z, F):
|
def moveXYZ(X, Y, Z, F):
|
||||||
#print "Moving to:"
|
print "Moving to:"
|
||||||
|
if F <= 0:
|
||||||
|
print "ERROR: F <= 0"
|
||||||
sendCommand("G1 X"+floats(X)+" Y"+floats(Y)+" Z"+floats(Z)+" F"+floats(F)+"\n")
|
sendCommand("G1 X"+floats(X)+" Y"+floats(Y)+" Z"+floats(Z)+" F"+floats(F)+"\n")
|
||||||
|
if Emulate:
|
||||||
|
dist = (X**2+Y**2+Z**2)**0.5 # [mm]
|
||||||
|
speed = F/60 # [mm/s]
|
||||||
|
time.sleep(dist/speed)
|
||||||
|
|
||||||
def moveXY(X, Y, F):
|
def moveXY(X, Y, F):
|
||||||
#print "Moving to:"
|
print "Moving to:"
|
||||||
|
if F <= 0:
|
||||||
|
print "ERROR: F <= 0"
|
||||||
sendCommand("G1 X"+floats(X)+" Y"+floats(Y)+" F"+floats(F)+"\n")
|
sendCommand("G1 X"+floats(X)+" Y"+floats(Y)+" F"+floats(F)+"\n")
|
||||||
|
if Emulate:
|
||||||
|
dist = (X**2+Y**2)**0.5 # [mm]
|
||||||
|
speed = F/60 # [mm/s]
|
||||||
|
time.sleep(dist/speed)
|
||||||
|
|
||||||
def moveZ(Z, F):
|
def moveZ(Z, F):
|
||||||
#print "Moving Z absolute:"
|
print "Moving Z absolute:"
|
||||||
|
if F <= 0:
|
||||||
|
print "ERROR: F <= 0"
|
||||||
sendCommand("G1 Z"+floats(Z)+" F"+floats(F)+"\n")
|
sendCommand("G1 Z"+floats(Z)+" F"+floats(F)+"\n")
|
||||||
|
if Emulate:
|
||||||
|
dist = abs(Z) # [mm]
|
||||||
|
speed = F/60 # [mm/s]
|
||||||
|
time.sleep(dist/speed)
|
||||||
|
|
||||||
def moveZrel(Z, F):
|
def moveZrel(Z, F):
|
||||||
#print "Moving Z relative:"
|
print "Moving Z relative:"
|
||||||
|
if F <= 0:
|
||||||
|
print "ERROR: F <= 0"
|
||||||
sendCommand("G91\n") # Set relative positioning
|
sendCommand("G91\n") # Set relative positioning
|
||||||
sendCommand("G1 Z"+floats(Z)+" F"+floats(F)+"\n")
|
moveZ(Z, F)
|
||||||
sendCommand("G90\n") # Set absolute positioning
|
sendCommand("G90\n") # Set absolute positioning
|
||||||
|
|
||||||
def moveZrelSafe(Z, F):
|
def moveZrelSafe(Z, F):
|
||||||
|
if F <= 0:
|
||||||
|
print "ERROR: F <= 0"
|
||||||
sendCommand("M121\n") # Enable endstops (for protection! usually it should **NOT** hit neither the endstop nor the PCB)
|
sendCommand("M121\n") # Enable endstops (for protection! usually it should **NOT** hit neither the endstop nor the PCB)
|
||||||
moveZrel(Z, F)
|
moveZrel(Z, F)
|
||||||
sendCommand("M120\n") # Disable endstops (we only use them for homing)
|
sendCommand("M120\n") # Disable endstops (we only use them for homing)
|
||||||
|
@ -151,7 +186,8 @@ def probeZ():
|
||||||
def close():
|
def close():
|
||||||
# IMPORTANT: Before closing the serial port we must make a blocking move in order to wait for all the buffered commands to end
|
# IMPORTANT: Before closing the serial port we must make a blocking move in order to wait for all the buffered commands to end
|
||||||
sendCommand("G28 Z0\n") # move Z to min endstop
|
sendCommand("G28 Z0\n") # move Z to min endstop
|
||||||
CNC_Machine.close() # Close the serial port connection
|
if Emulate == 0:
|
||||||
|
CNC_Machine.close() # Close the serial port connection
|
||||||
|
|
||||||
def probeGrid(grid_origin, grid_len, grid_N, Zlift):
|
def probeGrid(grid_origin, grid_len, grid_N, Zlift):
|
||||||
grid_origin_X = float(grid_origin[0]) # Initial point of the grid [mm]
|
grid_origin_X = float(grid_origin[0]) # Initial point of the grid [mm]
|
||||||
|
@ -188,12 +224,12 @@ def probeGrid(grid_origin, grid_len, grid_N, Zlift):
|
||||||
moveXY(grid_origin_X, grid_origin_Y, F_fastMove)
|
moveXY(grid_origin_X, grid_origin_Y, F_fastMove)
|
||||||
|
|
||||||
for x_i in range(grid_N_X): # For each point on the grid...
|
for x_i in range(grid_N_X): # For each point on the grid...
|
||||||
x_val = float(x_i)*grid_inc_X + grid_origin_X; # Calculate X coordinate
|
x_val = float(x_i)*grid_inc_X + grid_origin_X # Calculate X coordinate
|
||||||
optimal_range = range(grid_N_Y)
|
optimal_range = range(grid_N_Y)
|
||||||
if isOdd(x_i): # This optimises a bit the probing path
|
if isOdd(x_i): # This optimises a bit the probing path
|
||||||
optimal_range = reversed(optimal_range)
|
optimal_range = reversed(optimal_range)
|
||||||
for y_i in optimal_range:
|
for y_i in optimal_range:
|
||||||
y_val = float(y_i)*grid_inc_Y + grid_origin_Y; # Calculate Y coordinate
|
y_val = float(y_i)*grid_inc_Y + grid_origin_Y # Calculate Y coordinate
|
||||||
moveXY(x_val, y_val, F_fastMove) # Move to position
|
moveXY(x_val, y_val, F_fastMove) # Move to position
|
||||||
probe_result[y_i][x_i] = probeZ() # Do the Z probing
|
probe_result[y_i][x_i] = probeZ() # Do the Z probing
|
||||||
moveZrel(Z_probing_lift, F_fastMove/2) # Lift the probe
|
moveZrel(Z_probing_lift, F_fastMove/2) # Lift the probe
|
||||||
|
|
|
@ -14,6 +14,7 @@
|
||||||
# Begin configuration
|
# Begin configuration
|
||||||
BAUDRATE = 115200
|
BAUDRATE = 115200
|
||||||
DEVICE = "/dev/ttyUSB0"
|
DEVICE = "/dev/ttyUSB0"
|
||||||
|
Emulate = 1
|
||||||
# End configuration
|
# End configuration
|
||||||
|
|
||||||
# Begin modules
|
# Begin modules
|
||||||
|
@ -76,7 +77,7 @@ F_drillMove = 50
|
||||||
F_edgeMove = 25
|
F_edgeMove = 25
|
||||||
|
|
||||||
|
|
||||||
cy.connect(BAUDRATE, DEVICE)
|
cy.connect(BAUDRATE, DEVICE, Emulate)
|
||||||
|
|
||||||
cy.sendCommand("G90\n") # Set absolute positioning
|
cy.sendCommand("G90\n") # Set absolute positioning
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue