def doPath(X_offset=0, Y_offset=0): global toolPos_X, toolPos_Y, toolPos_Z, toolPos_F, X_dest, Y_dest, Z_dest, F_dest for path in etch_moves: toolRefresh = 0 toolPos_draw(toolPos_X, toolPos_Y, etching=0) cy.moveZ(Z_origin_offset + getZoffset(X_dest, Y_dest) + Z_global_offset + Zlift_milling, F_fastMove) # Raise and move to next point X_dest = path[0][0] + X_offset Y_dest = path[0][1] + Y_offset F_dest = F_fastMove print(" Traveling to: " + str([X_dest, Y_dest]) + " at Z:" + str(Z_global_offset + Zlift_milling)) cy.moveXY(X_dest, Y_dest, F_dest) toolPos_draw(X_dest, Y_dest, etching=0) Z_dest = path[0][2] if Z_dest > 0: F_dest = F_slowMove else: F_dest = path[0][ 3] # We set the original speed if it is etching/drill cy.moveZ( Z_dest + Z_origin_offset + getZoffset(X_dest, Y_dest) + Z_global_offset, F_dest) # print("Speed:",F_dest) print(" Etching at Z: " + str(Z_dest + Z_global_offset)) toolPos_X = X_dest toolPos_Y = Y_dest toolPos_Z = Z_dest # Not sure.. toolPos_F = F_dest # print(path) for coord in path[1:]: X_dest = coord[0] + X_offset Y_dest = coord[1] + Y_offset Z_dest = coord[2] F_dest = coord[3] distance = (X_dest - toolPos_X)**2 + (Y_dest - toolPos_Y)**2 if distance >= maxDistance: splitLongEtchMove(distance) if distance < minDistance and ( Z_dest - toolPos_Z )**2 < 0.001**2: # Make sure it is not a Z movement print("Ignoring " + str(distance**0.5) + "mm segment!") continue Z_real = Z_dest + Z_origin_offset + getZoffset( X_dest, Y_dest) + Z_global_offset cy.moveXYZ(X_dest, Y_dest, Z_real, F_dest) # print("Coords: Speed: " + str(F_dest)) toolPos_refresh(X_dest, Y_dest, etching=1) toolPos_X = X_dest toolPos_Y = Y_dest toolPos_Z = Z_dest toolPos_F = F_dest
def doPath(X_offset=0, Y_offset=0): global toolPos_X, toolPos_Y, toolPos_Z, toolPos_F, X_dest, Y_dest, Z_dest, F_dest for path in etch_moves : toolRefresh = 0 #toolPos_draw(toolPos_X, toolPos_Y, etching=0) cy.moveZ(Z_origin_offset+getZoffset(X_dest, Y_dest)+Z_global_offset+Zlift_milling,F_fastMove) # Raise and move to next point X_dest = path[0][0]+X_offset Y_dest = path[0][1]+Y_offset F_dest = F_fastMove print(" Traveling to: " + str([X_dest, Y_dest]) + " at Z:" + str(Z_global_offset+Zlift_milling) ) sys.stdout.flush() cy.moveXY(X_dest, Y_dest, F_dest) toolPos_draw(X_dest, Y_dest, etching=0) Z_dest = path[0][2] if Z_dest > 0: F_dest = F_slowMove else: F_dest = path[0][3] # We set the original speed if it is etching/drill cy.moveZ(Z_dest+Z_origin_offset+getZoffset(X_dest, Y_dest)+Z_global_offset,F_dest) # print("Speed:",F_dest) print(" Etching at Z: " + str(Z_dest+Z_global_offset) ) sys.stdout.flush() toolPos_X = X_dest toolPos_Y = Y_dest toolPos_Z = Z_dest # Not sure.. toolPos_F = F_dest # print(path) for coord in path[1:] : X_dest = coord[0]+X_offset Y_dest = coord[1]+Y_offset Z_dest = coord[2] F_dest = coord[3] distance = (X_dest-toolPos_X)**2+(Y_dest-toolPos_Y)**2 if distance >= maxDistance : splitLongEtchMove(distance) if distance < minDistance and (Z_dest-toolPos_Z)**2 < 0.001**2 : # Make sure it is not a Z movement print("Ignoring " + str(distance**0.5) + "mm segment!") continue Z_real = Z_dest+Z_origin_offset+getZoffset(X_dest, Y_dest)+Z_global_offset cy.moveXYZ(X_dest, Y_dest, Z_real, F_dest) # print("Coords: Speed: " + str(F_dest)) toolPos_refresh(X_dest, Y_dest, etching=1) toolPos_X = X_dest toolPos_Y = Y_dest toolPos_Z = Z_dest toolPos_F = F_dest sys.stdout.flush()
def splitLongEtchMove(distance): global toolPos_X, toolPos_Y, toolPos_Z, toolPos_F, X_dest, Y_dest, Z_dest, F_dest X_dest_tmp = toolPos_X Y_dest_tmp = toolPos_Y Z_dest_tmp = toolPos_Z F_dest_tmp = toolPos_Z #distance = distance**0.5 # [mm] N_steps = int((distance / maxDistance)**0.5) # **must be** >= 1 print("Splitting " + str(distance**0.5) + "mm segment into " + str(N_steps) + " steps") # print("Orig: " + (toolPos_X,toolPos_Y,toolPos_Z) + " Dest: " + (X_dest, Y_dest, Z_dest)) X_step = (X_dest - toolPos_X) / float(N_steps) Y_step = (Y_dest - toolPos_Y) / float(N_steps) Z_step = (Z_dest - toolPos_Z) / float(N_steps) F_step = (F_dest - toolPos_F) / float(N_steps) for i in range(N_steps): X_dest_tmp = toolPos_X + X_step Y_dest_tmp = toolPos_Y + Y_step Z_dest_tmp = toolPos_Z + Z_step F_dest_tmp = toolPos_F + F_step Z_real = Z_dest_tmp + Z_origin_offset + getZoffset( X_dest_tmp, Y_dest_tmp) + Z_global_offset cy.moveXYZ(X_dest_tmp, Y_dest_tmp, Z_real, F_dest_tmp) toolPos_refresh(X_dest_tmp, Y_dest_tmp, etching=1) # print("Move: " + (X_dest_tmp, Y_dest_tmp, Z_dest_tmp) ) toolPos_X = X_dest_tmp toolPos_Y = Y_dest_tmp toolPos_Z = Z_dest_tmp toolPos_F = F_dest_tmp
def splitLongEtchMove(distance): global toolPos_X, toolPos_Y, toolPos_Z, toolPos_F, X_dest, Y_dest, Z_dest, F_dest X_dest_tmp = toolPos_X Y_dest_tmp = toolPos_Y Z_dest_tmp = toolPos_Z F_dest_tmp = toolPos_Z #distance = distance**0.5 # [mm] N_steps = int((distance/maxDistance)**0.5) # **must be** >= 1 print("Splitting " + str(distance**0.5) + "mm segment into " + str(N_steps) + " steps") # print("Orig: " + (toolPos_X,toolPos_Y,toolPos_Z) + " Dest: " + (X_dest, Y_dest, Z_dest)) X_step = (X_dest-toolPos_X)/float(N_steps) Y_step = (Y_dest-toolPos_Y)/float(N_steps) Z_step = (Z_dest-toolPos_Z)/float(N_steps) F_step = (F_dest-toolPos_F)/float(N_steps) for i in range(N_steps) : X_dest_tmp = toolPos_X + X_step Y_dest_tmp = toolPos_Y + Y_step Z_dest_tmp = toolPos_Z + Z_step F_dest_tmp = toolPos_F + F_step Z_real = Z_dest_tmp+Z_origin_offset+getZoffset(X_dest_tmp, Y_dest_tmp)+Z_global_offset cy.moveXYZ(X_dest_tmp, Y_dest_tmp, Z_real, F_dest_tmp) toolPos_refresh(X_dest_tmp, Y_dest_tmp, etching=1) # print("Move: " + (X_dest_tmp, Y_dest_tmp, Z_dest_tmp) ) toolPos_X = X_dest_tmp toolPos_Y = Y_dest_tmp toolPos_Z = Z_dest_tmp toolPos_F = F_dest_tmp
toolRefresh = 0 def toolPos_refresh(x, y, etching=0): global toolRefresh if toolRefresh >= toolRefreshSteps: toolPos_draw(toolPos_X, toolPos_Y, etching) toolRefresh = 0 toolRefresh = toolRefresh + 1 def drawTool(x, y): global toolPos_point pltSetFig(gcodeviewer) toolPos_point, = plt.plot(0, 0, markersize=12, c='g', marker='x') pltShowNonBlocking() cy.connect(BAUDRATE, DEVICE, Emulate) cy.sendCommand("G90\n") # Set absolute positioning cy.homeZXY() # Home all the axis drawTool(10, 20) # Show a marker on the gcode plot # Move to the origin of the grid cy.moveXY(x_points[0], y_points[0], F_fastMove) # Warning: Do not lower too much or you will potentially cause damage! initial_Z_lowering_distance = -10 cy.moveZrelSafe(initial_Z_lowering_distance,F_slowMove) # Move Z towards the PCB (saves some probing time for the first coord)
def toolPos_refresh(x, y, etching=0): global toolRefresh if toolRefresh >= toolRefreshSteps: toolPos_draw(toolPos_X, toolPos_Y, etching) toolRefresh = 0 toolRefresh = toolRefresh + 1 def drawTool(x, y): global toolPos_point pltSetFig(gcodeviewer) toolPos_point, = plt.plot(0, 0, markersize=12, c='g', marker='x') pltShowNonBlocking() cy.connect(BAUDRATE, DEVICE, Emulate) cy.sendCommand("G90\n") # Set absolute positioning cy.homeZXY() # Home all the axis drawTool(10, 20) # Show a marker on the gcode plot # Move to the origin of the grid cy.moveXY(x_points[0], y_points[0], F_fastMove) # Warning: Do not lower too much or you will potentially cause damage! initial_Z_lowering_distance = -10 cy.moveZrelSafe( initial_Z_lowering_distance, F_slowMove ) # Move Z towards the PCB (saves some probing time for the first coord)
# Begin configuration from configuration import * # load settings # End configuration # Begin modules from misc import * import CycloneHost.Controller as cy # End modules # Load the Z data file Z_probing_data = loadFromFile(Z_PROBING_FILE) print("connecting...") cy.connect(BAUDRATE, DEVICE, Emulate) print("G90...") cy.sendCommand("G90\n") # Set absolute positioning print("homexyz..") cy.homeZXY() # Home all the axis # (x,y) #grid_origin = (0,0) # Initial point of the grid [mm] #grid_len = (135,84) # Distance to probe [mm] #GRID_N_POINTS = (12,6) # Number of points #grid_origin = (0,0) # Initial point of the grid [mm] #grid_len = (80,60) # Distance to probe [mm] # Use the max values generated when loading the gerber files
# consequential damages resulting from the use, misuse, or inability to use this software, # even if Carlosgs has been advised of the possibility of such damages. # Begin configuration from configuration import * # load settings # End configuration # Begin modules from misc import * import ConfigParser import CycloneHost.Controller as cy # End modules cy.connect(BAUDRATE, DEVICE, Emulate) sys.stdout.flush() cy.sendCommand("G90\n") # Set absolute positioning sys.stdout.flush() #read gcode file gcodeFileName = sys.argv[1] print("Executing " + gcodeFileName) with open(favouritesPath + gcodeFileName + ".gcode", 'r') as gcodeFile: for gcode in gcodeFile: print("Sending command " + gcode.rstrip()) sys.stdout.flush() cy.sendCommand(gcode + "\n") gcodeFile.close()
# Begin configuration from configuration import * # load settings # End configuration # Begin modules from misc import * import ConfigParser import CycloneHost.Controller as cy # End modules # Load the Z data file Z_probing_data = loadFromFile(Z_PROBING_FILE) cy.connect(BAUDRATE, DEVICE, Emulate) cy.sendCommand("G90\n") # Set absolute positioning cy.homeZXY() # Home all the axis Z_origin_offset = cy.probeZ() print("Z offset: " + str(Z_origin_offset) ) sys.stdout.flush() cy.close() # Close the connection with Cyclone config = ConfigParser.RawConfigParser() config.add_section('Z_Probing')