From f3bff01430e48a434c1e1345297e3eb67575706b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Kurlbaum?= Date: Tue, 20 Sep 2022 15:57:06 +0200 Subject: [PATCH] Create .src with params from LaserProgram incl. sim --- freecad/LaserCladdingWorkbench/commands.py | 8 +- freecad/LaserCladdingWorkbench/kuka.py | 110 ++++++++++++++------- freecad/LaserCladdingWorkbench/program.py | 9 ++ 3 files changed, 93 insertions(+), 34 deletions(-) diff --git a/freecad/LaserCladdingWorkbench/commands.py b/freecad/LaserCladdingWorkbench/commands.py index 98fca47..7eb9f9a 100644 --- a/freecad/LaserCladdingWorkbench/commands.py +++ b/freecad/LaserCladdingWorkbench/commands.py @@ -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(): line.append(pose) prog.append_hatchline(line, progpart.pathtype) - prog.set_base(c.base_reference) prog.save_prog(c.progpath) App.ActiveDocument.recompute() diff --git a/freecad/LaserCladdingWorkbench/kuka.py b/freecad/LaserCladdingWorkbench/kuka.py index d34ded1..5ab7bd5 100644 --- a/freecad/LaserCladdingWorkbench/kuka.py +++ b/freecad/LaserCladdingWorkbench/kuka.py @@ -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: 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: # 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() diff --git a/freecad/LaserCladdingWorkbench/program.py b/freecad/LaserCladdingWorkbench/program.py index ae005c1..bbf7408 100644 --- a/freecad/LaserCladdingWorkbench/program.py +++ b/freecad/LaserCladdingWorkbench/program.py @@ -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"