Browse Source

comments in generated prog, hack for added contours, velocities

master
Jörg Kurlbaum 3 years ago
parent
commit
d1978e2dc1
  1. 6
      freecad/LaserCladdingWorkbench/commands.py
  2. 61
      freecad/LaserCladdingWorkbench/kuka.py
  3. 4
      setup.cfg

6
freecad/LaserCladdingWorkbench/commands.py

@ -143,7 +143,11 @@ class LCSaveProg():
poly = Part.makePolygon(vlist) poly = Part.makePolygon(vlist)
#Part.show(poly, "ContourPath") #Part.show(poly, "ContourPath")
poses = get_list_of_poses(face, poly.Edges) 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): elif re.match('Hatch*', progpart.Name):
face = pad.ref_body.getSubObject(pad.ref_surface) face = pad.ref_body.getSubObject(pad.ref_surface)
edges = progpart.Shape.Edges edges = progpart.Shape.Edges

61
freecad/LaserCladdingWorkbench/kuka.py

@ -1,9 +1,7 @@
import FreeCAD import FreeCAD
import numpy as np
import math import math
import time import time
import Part import Part
import re
import copy import copy
import os import os
@ -37,13 +35,15 @@ BAS(#PTP_PARAMS,100)
PTP Xxp1 PTP Xxp1
;ENDFOLD""" ;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: class Kuka_Prog:
def __init__(self): def __init__(self):
self.contour_path_list = [] self.contour_path_list = []
self.hatchlines_list = [] self.hatchlines_list = []
self.baseorigin = (0,0,0) self.baseorigin = (0, 0, 0)
self.tool = 6 self.tool = 6
self.base = 6 self.base = 6
self.vproc = 0.023 self.vproc = 0.023
@ -85,15 +85,15 @@ class Kuka_Prog:
else: else:
self.use_laser_out = self.laser_pilot_out 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)) 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): if not len(self.hatchlines_list):
self.hatchlines_list.append((line, segmenttype)) self.hatchlines_list.append((line, segmenttype))
# poses are sorted # poses are sorted
# but maybe we need to reverse # 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] last, _ = self.hatchlines_list[-1]
nfirst = line[0] nfirst = line[0]
nlast = line[-1] nlast = line[-1]
@ -111,7 +111,7 @@ class Kuka_Prog:
self.pose_list.extend(poses) self.pose_list.extend(poses)
# poses are sorted # poses are sorted
# but maybe we need to reverse # 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] last = self.pose_list[-1]
nfirst = poses[0] nfirst = poses[0]
nlast = poses[-1] nlast = poses[-1]
@ -138,14 +138,14 @@ class Kuka_Prog:
if self.simulation: if self.simulation:
filename = "kvt_{}_sim.src".format(article) filename = "kvt_{}_sim.src".format(article)
else: else:
filename = "kvt_{}.src" filename = "kvt_{}.src".format(article)
srcfile = open(os.path.join(path, filename), 'w') srcfile = open(os.path.join(path, filename), 'w')
srcfile.write(header_src) srcfile.write(header_src)
# subroutine definition # subroutine definition
srcfile.write("DEF "+filename+"( )\n\n") srcfile.write("DEF "+filename+"( )\n\n")
srcfile.write(";- Kuka src file, generated by KVT\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 # defining world and base
srcfile.write("E6POS startp\n") srcfile.write("E6POS startp\n")
srcfile.write("E6POS point1\n") srcfile.write("E6POS point1\n")
@ -162,18 +162,23 @@ class Kuka_Prog:
CDIS = 2.3 CDIS = 2.3
CVEL = 95.0 CVEL = 95.0
srcfile.write(";- Movement paramters\n")
srcfile.write("$VEL.CP = %f ; m/s ; m/s \n" % self.vmax) srcfile.write("$VEL.CP = %f ; m/s ; m/s \n" % self.vmax)
srcfile.write("$APO.CDIS = %f ; mm \n" % CDIS) srcfile.write("$APO.CDIS = %f ; mm \n" % CDIS)
srcfile.write("$APO.CVEL = %f ; percent \n" % CVEL) 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: if not self.simulation:
srcfile.write("$OUT[%d] = TRUE ; \n" % self.powder_out) srcfile.write("$OUT[2] = TRUE ; Set Laser activation on\n") # don't know but must be on
srcfile.write("$OUT[%d] = TRUE ; \n" % self.inert_gas_out) 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: else:
srcfile.write("$OUT[%d] = FALSE ; \n" % self.powder_out) srcfile.write("$OUT[%d] = FALSE ; set powder off \n" % self.powder_out)
srcfile.write("$OUT[%d] = FALSE ; \n" % self.inert_gas_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 = {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.S = startp.S\n")
srcfile.write("point1.T = startp.T\n") srcfile.write("point1.T = startp.T\n")
@ -182,13 +187,14 @@ class Kuka_Prog:
srcfile.write(";- Contourpaths\n") srcfile.write(";- Contourpaths\n")
for (poses, seg_type) in self.contour_path_list: for (poses, seg_type) in self.contour_path_list:
# start laser code # start laser code
srcfile.write(";- Turn on Laser\n") srcfile.write(";- Move to pose up from contour start\n")
srcfile.write("$VEL.CP = %f ; m/s ; m/s \n" % self.vmax) srcfile.write("$VEL.CP = %f ; m/s ; m/s (vmax)\n" % self.vmax)
srcfile.write("LIN_REL {Z 90.0} C_VEL; GENERATED\n") srcfile.write("LIN_REL {Z 90.0} C_VEL; relative 90mm up\n")
srcfile.write("$VEL.CP = %f ; m/s ; m/s \n" % self.vproc) 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': if seg_type == 'LIN':
srcfile.write("LIN {} C_VEL; GENERATED\n".format(poses[0].translate_with(self.baseorigin).to_string())) 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) 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:]: for pose in poses[1:]:
srcfile.write("LIN {} C_VEL; GENERATED\n".format(pose.translate_with(self.baseorigin).to_string())) srcfile.write("LIN {} C_VEL; GENERATED\n".format(pose.translate_with(self.baseorigin).to_string()))
@ -204,24 +210,25 @@ class Kuka_Prog:
srcfile.write(";- Hatchlines\n") srcfile.write(";- Hatchlines\n")
srcfile.write("$VEL.CP = %f ; m/s ; m/s \n" % self.vmax) 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: for (line, seg_type) in self.hatchlines_list:
# start laser code # start laser code
srcfile.write(";- Hatchline\n") srcfile.write(";- Hatchline\n")
if seg_type == 'LIN': if seg_type == 'LIN':
srcfile.write("$VEL.CP = %f ; m/s ; m/s \n" % self.vmax) 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("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("$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("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 # end of subroutine
srcfile.write("$OUT[%d] = FALSE\n" % self.use_laser_out) srcfile.write("$OUT[%d] = FALSE; laser off\n" % self.use_laser_out)
srcfile.write("$OUT[%d] = FALSE\n" % self.powder_out) srcfile.write("$OUT[%d] = FALSE; powder off\n" % self.powder_out)
srcfile.write("$OUT[%d] = FALSE\n" % self.inert_gas_out) srcfile.write("$OUT[%d] = FALSE; inert gas off\n" % self.inert_gas_out)
srcfile.write("startp=$POS_ACT\n")
srcfile.write("$VEL.CP = %f ; m/s ; m/s \n" % self.vmax) 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("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("\n;------------- end ------------\n")
srcfile.write("END \n\n") srcfile.write("END \n\n")

4
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
Loading…
Cancel
Save