Skip to content
Snippets Groups Projects
Commit f79ae500 authored by Zach Fredin's avatar Zach Fredin
Browse files

added script and line test

parent ca3783fa
No related branches found
No related tags found
No related merge requests found
# camron blackburn 1.10.20
# updates for swabcasting, zach fredin ~april 2020
# gcode cheat sheet: https://www.hartwiginc.com/wp-content/uploads/2015/02/G-Code-List_Okuma.pdf
import argparse
class GcodeMarking:
''' class for generating gcode file '''
def __init__(self, gfile):
self.gfile = gfile
def writeln(self, string):
gfile.write(string + "\n")
return
def setup_gfile(self, power, feed):
self.writeln(";---- Declar and Set Variables -----")
self.writeln("DVAR $POWER")
self.writeln("DVAR $FEED")
self.writeln("")
self.writeln("$POWER=%s" % power)
self.writeln("$FEED=%s" % feed)
self.writeln("")
# set absolute position
self.writeln("G90")
# roughing cycle ?? what does it mean to the oxford ?
self.writeln("G71")
# zeroing position
self.writeln("G92 X0 Y0")
self.writeln("G108")
self.writeln("")
self.writeln(";Laser cutting")
self.writeln(";tool.diameter = 0.045")
self.writeln("")
self.writeln('FARCALL "ATTENUATOR.PGM" s$POWER')
self.writeln('MSGCLEAR -1')
self.writeln('MSGDISPLAY 1, "program Started"')
self.writeln("")
return
def raster_square(self, xpos, ypos, dim, fill, speed_var):
''' xpos, ypos (float, mm): x and y position of upper left corner for square
dim (float, mm): dimensions of square
fill (float, mm): fill interval, distance between line marking
'''
self.writeln("")
self.writeln("G0 X%s Y%s" % (xpos, ypos))
self.writeln("BEAMON")
xmax = xpos + dim
num_passes = int(dim / fill)
curr_y = ypos
# sawtooth pattern fill
for i in range(0, num_passes*2+1):
if i % 2 == 0:
self.writeln("G1 X%s F$%s" % (xmax, speed_var))
else:
self.writeln("G1 X%s Y%s F$%s" % (xpos, round(curr_y-fill, 3), speed_var))
curr_y = curr_y-fill
self.writeln("BEAMOFF")
return
def outline_circle(self, reps, xpos, ypos, radius):
''' reps: number of times around each circle
xpos, ypos (float, mm): x and y position of center point of circle
radius (float, mm): radius of circle
'''
self.writeln("")
self.writeln("G0 X%s Y%s" % (xpos, ypos))
self.writeln("BEAMON")
self.writeln("REPEAT %s" % (reps))
self.writeln("G2 I%s F$FEED" % radius)
self.writeln("ENDRPT")
self.writeln("BEAMOFF")
return
def outline_circle_array(self, radius, spacing, reps, qty_x, qty_y):
''' creates a rectilinear array of outline circles starting at the
current X,Y location and proceding X+/Y+.
radius (float, mm): radius of each circle
spacing (float, mm): center-to-center spacing between circles
reps: number of times around each circle
qty_x, qty_y (float, mm): number of circles in each direction
'''
for i in range(1, qty_x):
for j in range(1, qty_y):
self.outline_circle(reps, i * spacing, j * spacing, radius)
return
def horiz_line(self, xpos, ypos, length, dreps):
''' creates a horizontal line starting at at a given X,Y location and
proceding X+
xpos, ypos (float, mm): x and y position of the left endpoint
length (float, mm): length of line
dreps: number of double passes (back-and-forth)
'''
self.writeln("")
self.writeln("G0 X%s Y%s" % (xpos, ypos))
self.writeln("BEAMON")
self.writeln("REPEAT %s" % (dreps))
self.writeln("G1 X%s F$FEED" % (length))
self.writeln("G1 X0 F$FEED")
self.writeln("ENDRPT")
self.writeln("BEAMOFF")
return
def horiz_line_array(self, length, spacing, dreps, oreps, qty):
''' creates an array of horizontal lines starting at the current X,Y
location and proceding X+/Y+.
length (float, mm): length of each horizontal line
spacing (float, mm): vertical distance between each line
dreps: number of double passes (back-and-forth)
oreps: number of overall program repetitions
qty: number of lines
'''
self.writeln("")
self.writeln("REPEAT %s" % (oreps))
for i in range(0, qty):
self.horiz_line(0, i * spacing, length, dreps)
self.writeln("ENDRPT")
return
def set_gfile_var(self, name, val):
self.writeln("$%s=%s" % (name, val))
return
def def_array_variables(self):
self.writeln(";---- Declare and Set Variables -----")
for i in range(ARRAY_DIM):
self.writeln("DVAR $POWER%s" % i)
self.writeln("DVAR $SPEED%s" % i)
self.writeln("")
def square_array(self, dim, fill, min_power, max_power, min_speed, max_speed):
''' includes setup commands/etc'''
power_step = (max_power - min_power) / ARRAY_DIM
speed_step = (max_speed - min_speed) / ARRAY_DIM
self.def_array_variables()
# set power values
self.writeln("")
self.set_gfile_var("POWER0", min_power)
curr_power = min_power
for i in range(1, ARRAY_DIM):
curr_power += power_step
self.set_gfile_var("POWER%s" % i, curr_power)
self.writeln("")
# set speed values
self.writeln("")
self.set_gfile_var("SPEED0", min_speed)
curr_speed = min_speed
for i in range(1, ARRAY_DIM):
curr_speed += speed_step
self.set_gfile_var("SPEED%s" % i, curr_speed)
self.writeln("")
# set absolute position
self.writeln("G90")
# roughing cycle ?? what does it mean to the oxford ?
self.writeln("G71")
# zeroing position
self.writeln("G92 X0 Y0")
self.writeln("G108")
self.writeln("")
self.writeln(";Laser cutting")
self.writeln(";tool.diameter = 0.045")
self.writeln('MSGDISPLAY 1, "Program Starting"')
self.writeln("")
self.writeln("")
curr_xpos = 0
curr_ypos = 0
for i in range(ARRAY_DIM):
for j in range(ARRAY_DIM):
self.writeln('FARCALL "ATTENUATOR.PGM" s$POWER%s' % j)
self.writeln("MSGCLEAR -1")
self.writeln('MSGDISPLAY 1, "starting square at x %s y %s with SPEED%s POWER%s"' % (curr_xpos, curr_ypos, i, j))
self.raster_square(curr_xpos, curr_ypos, dim, fill, "SPEED%s" % i)
curr_xpos = curr_xpos + dim + 1
curr_ypos = curr_ypos - dim - 1
curr_xpos = 0
return
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="generate g-code for laser circles")
parser.add_argument("name", help="gcode file name")
parser.add_argument("--power", help="laser power setting")
parser.add_argument("--feed", help="laser feed")
parser.add_argument("--spacing", help="circle spacing")
parser.add_argument("--radius", help="circle radius")
parser.add_argument("--qty_x", help="number of circles in X direction")
parser.add_argument("--qty_y", help="number of circles in Y direction")
args = parser.parse_args()
''' various combinations tried and commented out... '''
gfile = open(args.name, "w")
marking = GcodeMarking(gfile)
'''marking.square_array(4, float(args.fill), 0.5, 4, 20, 60)'''
marking.setup_gfile(float(args.power), float(args.feed))
'''marking.outline_circle_array(float(args.radius), float(args.spacing), int(args.qty_x), int(args.qty_y))'''
'''marking.outline_circle_array(float(0.05), float(0.05), int(40), int(50), int(50))'''
'''marking.outline_circle_array(float(0.025), float(0.05), int(40), int(50), int(50))'''
marking.horiz_line_array(float(2), float(0.05), int(5), int(5), int(20))
gfile.close()
;---- Declar and Set Variables -----
DVAR $POWER
DVAR $FEED
$POWER=100.0
$FEED=3.0
G90
G71
G92 X0 Y0
G108
;Laser cutting
;tool.diameter = 0.045
FARCALL "ATTENUATOR.PGM" s$POWER
MSGCLEAR -1
MSGDISPLAY 1, "program Started"
REPEAT 5
G0 X0 Y0.0
BEAMON
REPEAT 5
G1 X2.0 F$FEED
G1 X0 F$FEED
ENDRPT
BEAMOFF
G0 X0 Y0.05
BEAMON
REPEAT 5
G1 X2.0 F$FEED
G1 X0 F$FEED
ENDRPT
BEAMOFF
G0 X0 Y0.1
BEAMON
REPEAT 5
G1 X2.0 F$FEED
G1 X0 F$FEED
ENDRPT
BEAMOFF
G0 X0 Y0.15000000000000002
BEAMON
REPEAT 5
G1 X2.0 F$FEED
G1 X0 F$FEED
ENDRPT
BEAMOFF
G0 X0 Y0.2
BEAMON
REPEAT 5
G1 X2.0 F$FEED
G1 X0 F$FEED
ENDRPT
BEAMOFF
G0 X0 Y0.25
BEAMON
REPEAT 5
G1 X2.0 F$FEED
G1 X0 F$FEED
ENDRPT
BEAMOFF
G0 X0 Y0.30000000000000004
BEAMON
REPEAT 5
G1 X2.0 F$FEED
G1 X0 F$FEED
ENDRPT
BEAMOFF
G0 X0 Y0.35000000000000003
BEAMON
REPEAT 5
G1 X2.0 F$FEED
G1 X0 F$FEED
ENDRPT
BEAMOFF
G0 X0 Y0.4
BEAMON
REPEAT 5
G1 X2.0 F$FEED
G1 X0 F$FEED
ENDRPT
BEAMOFF
G0 X0 Y0.45
BEAMON
REPEAT 5
G1 X2.0 F$FEED
G1 X0 F$FEED
ENDRPT
BEAMOFF
G0 X0 Y0.5
BEAMON
REPEAT 5
G1 X2.0 F$FEED
G1 X0 F$FEED
ENDRPT
BEAMOFF
G0 X0 Y0.55
BEAMON
REPEAT 5
G1 X2.0 F$FEED
G1 X0 F$FEED
ENDRPT
BEAMOFF
G0 X0 Y0.6000000000000001
BEAMON
REPEAT 5
G1 X2.0 F$FEED
G1 X0 F$FEED
ENDRPT
BEAMOFF
G0 X0 Y0.65
BEAMON
REPEAT 5
G1 X2.0 F$FEED
G1 X0 F$FEED
ENDRPT
BEAMOFF
G0 X0 Y0.7000000000000001
BEAMON
REPEAT 5
G1 X2.0 F$FEED
G1 X0 F$FEED
ENDRPT
BEAMOFF
G0 X0 Y0.75
BEAMON
REPEAT 5
G1 X2.0 F$FEED
G1 X0 F$FEED
ENDRPT
BEAMOFF
G0 X0 Y0.8
BEAMON
REPEAT 5
G1 X2.0 F$FEED
G1 X0 F$FEED
ENDRPT
BEAMOFF
G0 X0 Y0.8500000000000001
BEAMON
REPEAT 5
G1 X2.0 F$FEED
G1 X0 F$FEED
ENDRPT
BEAMOFF
G0 X0 Y0.9
BEAMON
REPEAT 5
G1 X2.0 F$FEED
G1 X0 F$FEED
ENDRPT
BEAMOFF
G0 X0 Y0.9500000000000001
BEAMON
REPEAT 5
G1 X2.0 F$FEED
G1 X0 F$FEED
ENDRPT
BEAMOFF
ENDRPT
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment