Browse Source

Create .src with params from LaserProgram incl. sim

master
Jörg Kurlbaum 3 years ago
parent
commit
f3bff01430
  1. 8
      freecad/LaserCladdingWorkbench/commands.py
  2. 110
      freecad/LaserCladdingWorkbench/kuka.py
  3. 9
      freecad/LaserCladdingWorkbench/program.py

8
freecad/LaserCladdingWorkbench/commands.py

@ -121,6 +121,13 @@ class LCSaveProg(): @@ -121,6 +121,13 @@ class LCSaveProg():
c = App.ActiveDocument.getObject("LaserProgram")
pads = c.Group
prog = Kuka_Prog()
prog.set_baseorigin(c.base_reference)
prog.set_tool(c.rob_tool)
prog.set_base(c.rob_base)
prog.set_velocity(c.laser_feedrate, c.laser_speed)
prog.set_laser_power(c.laser_power)
prog.set_laser_out(c.laser_real_out)
prog.set_simulation(c.simulation)
for pad in pads:
# one pad with contours and hatchlines
@ -151,7 +158,6 @@ class LCSaveProg(): @@ -151,7 +158,6 @@ class LCSaveProg():
line.append(pose)
prog.append_hatchline(line, progpart.pathtype)
prog.set_base(c.base_reference)
prog.save_prog(c.progpath)
App.ActiveDocument.recompute()

110
freecad/LaserCladdingWorkbench/kuka.py

@ -43,10 +43,47 @@ class Kuka_Prog: @@ -43,10 +43,47 @@ class Kuka_Prog:
def __init__(self):
self.contour_path_list = []
self.hatchlines_list = []
self.base = (0,0,0)
def set_base(self, vec):
self.base = (vec.x, vec.y, vec.z)
self.baseorigin = (0,0,0)
self.tool = 6
self.base = 6
self.vproc = 0.023
self.vmax = 0.15
self.laser_power = 0.4
self.laser_out = 3
self.laser_pilot_out = 4 # default is pilot laser
self.use_laser_out = self.laser_pilot_out
self.inert_gas_out = 9
self.powder_out = 7
self.simulation = True
def set_baseorigin(self, vec):
self.baseorigin = (vec.x, vec.y, vec.z)
def set_tool(self, tool):
self.tool = tool
def set_base(self, base):
self.base = base
def set_velocity(self, vproc, vmax):
self.vproc = vproc
self.vmax = vmax
def set_laser_power(self, power):
self.laser_power = power
def set_laser_out(self, laser_output):
self.laser_out = laser_output
def set_laser_pilot_out(self, laser_pilot_out):
self.laser_pilot_out = laser_pilot_out
def set_simulation(self, sim):
self.simulation = sim
if not self.simulation:
self.use_laser_out = self.laser_out
else:
self.use_laser_out = self.laser_pilot_out
def append_contour(self, poses, segmenttype = 'LIN'):
self.contour_path_list.append((poses, segmenttype))
@ -108,49 +145,56 @@ class Kuka_Prog: @@ -108,49 +145,56 @@ class Kuka_Prog:
srcfile.write(";- "+ time.asctime()+"\n\n")
# defining world and base
srcfile.write("E6POS startp\n")
srcfile.write("E6POS point1\n")
# srcfile.write("DECL E6AXIS xp1={A1 -1.9, A2 -105.76, A3 79.97, A4 178.83, A5 -20.3, A6 -4.37, E1 -90, E2 0}\n")
srcfile.write(";------------- definitions ------------\n")
srcfile.write("EXT BAS (BAS_COMMAND :IN,REAL :IN ) ;set base to World\n")
srcfile.write("BAS (#INITMOV,0 ) ;Initialicing the defaults for Vel and so on \n\n")
srcfile.write("BAS (#TOOL,6) ;Initialicing the defaults for Vel and so on \n\n")
srcfile.write("BAS (#BASE,2) ;Initialicing the defaults for Vel and so on \n\n")
#srcfile.write(ptp_fold)
srcfile.write("BAS (#TOOL,%d) ;Initialicing the defaults for Vel and so on \n\n" % self.tool)
srcfile.write("BAS (#BASE,%d) ;Initialicing the defaults for Vel and so on \n\n" % self.base)
srcfile.write("PTP {A1 -33.31, A2 -104.71, A3 114.60, A4 282.66, A5 -39.21, A6 -104.87, E1 -90, E2 1.0}\n")
srcfile.write("\n;------------- main part ------------\n")
srcfile.write("startp=$POS_ACT\n")
#V = w.Velocity / 1000.0 # from mm/s to m/s
V_prozess = 0.0225
V_max = 0.15
CDIS = 2.3
CVEL = 95.0
LASERPOWER = 0.4
srcfile.write("$VEL.CP = %f ; m/s ; m/s \n"%V_max)
srcfile.write("$APO.CDIS = %f ; mm \n"%CDIS)
srcfile.write("$APO.CVEL = %f ; percent \n"%CVEL)
srcfile.write("$ANOUT[1] = %f ; \n"%LASERPOWER)
srcfile.write("$OUT[7] = TRUE ; \n")
srcfile.write("$OUT[9] = TRUE ; \n")
srcfile.write("LIN startp:{X -100.0, Y 0.0, Z 0.0, A 0.0000, B 0.0000, C 0.0000, E1 0.0000, E2 0.0000} C_VEL; GENERATED\n")
srcfile.write("WAIT SEC 10.0\n")
srcfile.write("$VEL.CP = %f ; m/s ; m/s \n" % self.vmax)
srcfile.write("$APO.CDIS = %f ; mm \n" % CDIS)
srcfile.write("$APO.CVEL = %f ; percent \n" % CVEL)
srcfile.write("$ANOUT[1] = %f ; \n" % self.laser_power)
if not self.simulation:
srcfile.write("$OUT[%d] = TRUE ; \n" % self.powder_out)
srcfile.write("$OUT[%d] = TRUE ; \n" % self.inert_gas_out)
else:
srcfile.write("$OUT[%d] = FALSE ; \n" % self.powder_out)
srcfile.write("$OUT[%d] = FALSE ; \n" % self.inert_gas_out)
srcfile.write("point1 = {X -110.0, Y 0.0, Z 0.0, A 0.0000, B 0.0000, C 0.0000, E1 0.0000, E2 0.0000}\n")
srcfile.write("point1.S = startp.S\n")
srcfile.write("point1.T = startp.T\n")
srcfile.write("LIN point1 C_VEL; GENERATED\n")
srcfile.write("WAIT SEC 7.0\n")
srcfile.write(";- Contourpaths\n")
for (poses, seg_type) in self.contour_path_list:
# start laser code
srcfile.write("$VEL.CP = %f ; m/s ; m/s \n"%V_prozess)
srcfile.write("$VEL.CP = %f ; m/s ; m/s \n" % self.vproc)
srcfile.write(";- Turn on Laser\n")
if seg_type == 'LIN':
srcfile.write("LIN startp:{} C_VEL; GENERATED\n".format(poses[0].translate_with(self.base).to_string()))
srcfile.write("TRIGGER WHEN DISTANCE=0 DELAY=0 DO $OUT[3]=True\n" ) ## Einschalten
srcfile.write("LIN {} C_VEL; GENERATED\n".format(poses[0].translate_with(self.baseorigin).to_string()))
srcfile.write("TRIGGER WHEN DISTANCE=0 DELAY=0 DO $OUT[%d]=True\n" % self.use_laser_out)
for pose in poses[1:]:
srcfile.write("LIN startp:{} C_VEL; GENERATED\n".format(pose.translate_with(self.base).to_string()))
srcfile.write("LIN {} C_VEL; GENERATED\n".format(pose.translate_with(self.baseorigin).to_string()))
if seg_type == 'SPLINE':
srcfile.write("SPLINE\n")
for pose in poses:
srcfile.write(" SPL startp:{} ; GENERATED\n".format(pose.translate_with(self.base).to_string()))
srcfile.write(" SPL {} ; GENERATED\n".format(pose.translate_with(self.baseorigin).to_string()))
srcfile.write("ENDSPLINE\n")
srcfile.write(";- Turn off Laser\n")
srcfile.write("$OUT[3] = FALSE\n")
srcfile.write("$OUT[%d] = FALSE\n" % self.use_laser_out)
# end of subroutine
srcfile.write(";- Hatchlines\n")
@ -158,16 +202,16 @@ class Kuka_Prog: @@ -158,16 +202,16 @@ class Kuka_Prog:
# start laser code
srcfile.write(";- Hatchline\n")
if seg_type == 'LIN':
srcfile.write("$VEL.CP = %f ; m/s ; m/s \n"%V_max)
srcfile.write("LIN startp:{} C_VEL; GENERATED\n".format(line[0].translate_with(self.base).to_string()))
srcfile.write("TRIGGER WHEN DISTANCE=0 DELAY=0 DO $OUT[3]=True\n" ) ## Einschalten
srcfile.write("$VEL.CP = %f ; m/s ; m/s \n"%V_prozess)
srcfile.write("LIN startp:{} C_VEL; GENERATED\n".format(line[1].translate_with(self.base).to_string()))
srcfile.write("TRIGGER WHEN DISTANCE=0 DELAY=0 DO $OUT[3]=FALSE\n") ## Ausschalten
srcfile.write("$VEL.CP = %f ; m/s ; m/s \n" % self.vmax)
srcfile.write("LIN {} C_VEL; GENERATED\n".format(line[0].translate_with(self.baseorigin).to_string()))
srcfile.write("TRIGGER WHEN DISTANCE=0 DELAY=0 DO $OUT[%d]=True\n" % self.use_laser_out)
srcfile.write("$VEL.CP = %f ; m/s ; m/s \n" % self.vproc)
srcfile.write("LIN {} C_VEL; GENERATED\n".format(line[1].translate_with(self.baseorigin).to_string()))
srcfile.write("TRIGGER WHEN DISTANCE=0 DELAY=0 DO $OUT[%d]=FALSE\n" % self.use_laser_out)
# end of subroutine
srcfile.write("$OUT[3] = FALSE\n")
srcfile.write("$OUT[7] = FALSE ; \n")
srcfile.write("$OUT[9] = FALSE ; \n")
srcfile.write("$OUT[%d] = FALSE\n" % self.use_laser_out)
srcfile.write("$OUT[%d] = FALSE\n" % self.powder_out)
srcfile.write("$OUT[%d] = FALSE\n" % self.inert_gas_out)
srcfile.write("\n;------------- end ------------\n")
srcfile.write("END \n\n")
srcfile.close()

9
freecad/LaserCladdingWorkbench/program.py

@ -34,6 +34,15 @@ class LaserProgram: @@ -34,6 +34,15 @@ class LaserProgram:
obj.addProperty("App::PropertyFloat", "laser_speed", "Laser Parameter", "Velocity reaching (m/s)")
obj.laser_speed = 0.15
obj.addProperty("App::PropertyInteger", "rob_tool", "Roboter Parameter", "Tool")
obj.rob_tool = 6
obj.addProperty("App::PropertyInteger", "rob_base", "Roboter Parameter", "Base")
obj.rob_base = 6
obj.addProperty("App::PropertyBool", "simulation", "Roboter Parameter", "Use Simulation")
obj.simulation = True
obj.addProperty("App::PropertyFile", "progpath", "Export Parameters", "Where to store the Program")
obj.progpath = "/home/jk/test_export_workbench.src"

Loading…
Cancel
Save