diff --git a/freecad/LaserCladdingWorkbench/commands.py b/freecad/LaserCladdingWorkbench/commands.py index 4a6b7ea..56fe2c7 100644 --- a/freecad/LaserCladdingWorkbench/commands.py +++ b/freecad/LaserCladdingWorkbench/commands.py @@ -143,7 +143,11 @@ class LCSaveProg(): poly = Part.makePolygon(vlist) #Part.show(poly, "ContourPath") poses = get_list_of_poses(face, poly.Edges) - prog.append_contour(poses, progpart.pathtype) + if not hasattr(progpart, 'pathtype'): + pathtype = 'LIN' + else: + pathtype = progpart.pathtype + prog.append_contour(poses, pathtype) elif re.match('Hatch*', progpart.Name): face = pad.ref_body.getSubObject(pad.ref_surface) edges = progpart.Shape.Edges diff --git a/freecad/LaserCladdingWorkbench/kuka.py b/freecad/LaserCladdingWorkbench/kuka.py index 7631a1d..42c53a1 100644 --- a/freecad/LaserCladdingWorkbench/kuka.py +++ b/freecad/LaserCladdingWorkbench/kuka.py @@ -1,9 +1,7 @@ import FreeCAD -import numpy as np import math import time import Part -import re import copy import os @@ -37,13 +35,15 @@ BAS(#PTP_PARAMS,100) PTP Xxp1 ;ENDFOLD""" +z_up_pose = """{X 0.0, Y 0.0, Z 50.0, A 0.0, B 0.0, C 0.0, E1 0.0, E2 0.0}""" + class Kuka_Prog: def __init__(self): self.contour_path_list = [] self.hatchlines_list = [] - self.baseorigin = (0,0,0) + self.baseorigin = (0, 0, 0) self.tool = 6 self.base = 6 self.vproc = 0.023 @@ -85,15 +85,15 @@ class Kuka_Prog: else: self.use_laser_out = self.laser_pilot_out - def append_contour(self, poses, segmenttype = 'LIN'): + def append_contour(self, poses, segmenttype='LIN'): self.contour_path_list.append((poses, segmenttype)) - def append_hatchline(self, line, segmenttype = 'LIN'): + def append_hatchline(self, line, segmenttype='LIN'): if not len(self.hatchlines_list): self.hatchlines_list.append((line, segmenttype)) # poses are sorted # but maybe we need to reverse - #get the point distance from first and last pose + # get the point distance from first and last pose last, _ = self.hatchlines_list[-1] nfirst = line[0] nlast = line[-1] @@ -111,7 +111,7 @@ class Kuka_Prog: self.pose_list.extend(poses) # poses are sorted # but maybe we need to reverse - #get the point distance from first and last pose + # get the point distance from first and last pose last = self.pose_list[-1] nfirst = poses[0] nlast = poses[-1] @@ -138,14 +138,14 @@ class Kuka_Prog: if self.simulation: filename = "kvt_{}_sim.src".format(article) else: - filename = "kvt_{}.src" + filename = "kvt_{}.src".format(article) srcfile = open(os.path.join(path, filename), 'w') srcfile.write(header_src) # subroutine definition srcfile.write("DEF "+filename+"( )\n\n") srcfile.write(";- Kuka src file, generated by KVT\n") - srcfile.write(";- "+ time.asctime()+"\n\n") + srcfile.write(";- " + time.asctime() + "\n\n") # defining world and base srcfile.write("E6POS startp\n") srcfile.write("E6POS point1\n") @@ -162,18 +162,23 @@ class Kuka_Prog: CDIS = 2.3 CVEL = 95.0 + srcfile.write(";- Movement paramters\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) + srcfile.write(";- Input/Output settings\n") + srcfile.write("$ANOUT[1] = %f ; Set laser power\n" % self.laser_power) + srcfile.write("$OUT[%d] = FALSE ; Set Laser off\n" % self.use_laser_out) # don't know but must be on if not self.simulation: - srcfile.write("$OUT[%d] = TRUE ; \n" % self.powder_out) - srcfile.write("$OUT[%d] = TRUE ; \n" % self.inert_gas_out) + srcfile.write("$OUT[2] = TRUE ; Set Laser activation on\n") # don't know but must be on + srcfile.write("$OUT[%d] = TRUE ; Set powder on \n" % self.powder_out) + srcfile.write("$OUT[%d] = TRUE ; Set inert gas on \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("$OUT[%d] = FALSE ; set powder off \n" % self.powder_out) + srcfile.write("$OUT[%d] = FALSE ; set inert gas off\n" % self.inert_gas_out) + srcfile.write(";- Starting point\n") 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") @@ -182,14 +187,15 @@ class Kuka_Prog: srcfile.write(";- Contourpaths\n") for (poses, seg_type) in self.contour_path_list: # start laser code - srcfile.write(";- Turn on Laser\n") - srcfile.write("$VEL.CP = %f ; m/s ; m/s \n" % self.vmax) - srcfile.write("LIN_REL {Z 90.0} C_VEL; GENERATED\n") - srcfile.write("$VEL.CP = %f ; m/s ; m/s \n" % self.vproc) + srcfile.write(";- Move to pose up from contour start\n") + srcfile.write("$VEL.CP = %f ; m/s ; m/s (vmax)\n" % self.vmax) + srcfile.write("LIN_REL {Z 90.0} C_VEL; relative 90mm up\n") + srcfile.write("LIN {}:{} C_VEL; move to start point but save z distance\n".format(poses[0].translate_with(self.baseorigin).to_string(), z_up_pose)) if seg_type == 'LIN': 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("TRIGGER WHEN DISTANCE=0 DELAY=0 DO $OUT[%d]=True ; Turn on Laser at point\n" % self.use_laser_out) + srcfile.write("$VEL.CP = %f ; m/s ; m/s (vproc)\n" % self.vproc) + for pose in poses[1:]: srcfile.write("LIN {} C_VEL; GENERATED\n".format(pose.translate_with(self.baseorigin).to_string())) if seg_type == 'SPLINE': @@ -204,24 +210,25 @@ class Kuka_Prog: srcfile.write(";- Hatchlines\n") srcfile.write("$VEL.CP = %f ; m/s ; m/s \n" % self.vmax) - srcfile.write("LIN_REL {Z 90.0} C_VEL; GENERATED\n") + srcfile.write("LIN_REL {Z 90.0} C_VEL; just move up \n") + (line, seg_type) = self.hatchlines_list[0] + srcfile.write("LIN {}:{} C_VEL; move to first hatch point but with z_up\n".format(line[0].translate_with(self.baseorigin).to_string(), z_up_pose)) for (line, seg_type) in self.hatchlines_list: # start laser code srcfile.write(";- Hatchline\n") if seg_type == 'LIN': 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("TRIGGER WHEN DISTANCE=0 DELAY=0 DO $OUT[%d]=True; Turn on Laser at point \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) + srcfile.write("TRIGGER WHEN DISTANCE=0 DELAY=0 DO $OUT[%d]=FALSE; Turn off Laser at point\n" % self.use_laser_out) # end of subroutine - 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("startp=$POS_ACT\n") + srcfile.write("$OUT[%d] = FALSE; laser off\n" % self.use_laser_out) + srcfile.write("$OUT[%d] = FALSE; powder off\n" % self.powder_out) + srcfile.write("$OUT[%d] = FALSE; inert gas off\n" % self.inert_gas_out) srcfile.write("$VEL.CP = %f ; m/s ; m/s \n" % self.vmax) - #srcfile.write("LIN_REL {Z 90.0} C_DIS; GENERATED\n") + srcfile.write(";- Move to HOME position\n") 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;------------- end ------------\n") srcfile.write("END \n\n") diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 0000000..cec4dfc --- /dev/null +++ b/setup.cfg @@ -0,0 +1,4 @@ +[flake8] +extend-ignore = H101,H202,H233,H301,H306,H401,H403,H404,H405,H501,E501,E231 +exclude = .git,__pycache__,docs/source/conf.py,old,build,dist +max-complexity = 10