50 EXT BAS (BAS_COMMAND :IN,REAL :IN ) 60 FDAT_ACT = {TOOL_NO 0,BASE_NO 0,IPO_FRAME #BASE} 64 ;FOLD SET DEFAULT SPEED 73 PTP $AXIS_ACT ; skip BCO quickly 78 """Converts a pose target to a string""" 82 return (
'X %.3f,Y %.3f,Z %.3f,A %.3f,B %.3f,C %.3f' % (x,y,z,w,p,r))
90 for i
in range(njoints-6):
91 extaxes = extaxes + (
',E%i %.5f' % (i+1, joints[i+6]))
95 """Prints a joint target""" 97 data = [
'A1',
'A2',
'A3',
'A4',
'A5',
'A6',
'E1',
'E2',
'E3',
'E4',
'E5',
'E6']
98 for i
in range(len(angles)):
99 str = str + (
'%s %.5f,' % (data[i], angles[i]))
106 """Robot post object""" 108 MAX_LINES_X_PROG = 2500
109 INCLUDE_SUB_PROGRAMS =
False 116 PROG_NAME =
'unknown' 133 def __init__(self, robotpost=None, robotname=None, robot_axes = 6, **kwargs):
139 for k,v
in kwargs.items():
140 if k ==
'lines_x_prog':
144 progname_i = progname
148 progname_i = progname
150 progname_i =
"%s%i" % (self.
PROG_NAME, nPages)
161 self.
addline(
'DEF %s ( )' % progname_i)
163 self.
PROG.append(HEADER)
171 self.
PROG.append(
"END")
178 def progsave(self, folder, progname, ask_user = False, show_result = False):
179 progname = progname +
'.' + self.
PROG_EXT 181 filesave =
getSaveFile(folder, progname,
'Save program as...')
182 if filesave
is not None:
183 filesave = filesave.name
187 filesave = folder +
'/' + progname
191 ext_defs +=
"EXT %s()\n" % prog_nm
193 if len(ext_defs) > 0
and len(self.
PROG) > 1:
194 self.
PROG.insert(1, ext_defs)
195 self.
PROG.insert(1,
"\n; External program calls:")
198 fid = open(filesave,
"w")
202 fid.write(
"&ACCESS RVP\n")
203 fid.write(
"&REL 1\n")
204 fid.write(
"&PARAM TEMPLATE = C:\\KRC\\Roboter\\Template\\vorgabe\n")
205 fid.write(
"&PARAM EDITMASK = *\n")
206 for line
in self.
PROG:
210 print(
'SAVED: %s\n' % filesave)
215 if type(show_result)
is str:
218 p = subprocess.Popen([show_result, filesave])
219 elif type(show_result)
is list:
221 p = subprocess.Popen(show_result + [filesave])
226 os.startfile(filesave)
227 if len(self.
LOG) > 0:
228 mbox(
'Program generation LOG:\n\n' + self.
LOG)
230 def ProgSave(self, folder, progname, ask_user = False, show_result = False):
236 for i
in range(npages-1):
239 self.
PROG_LIST[i].insert(-1,
"\n; Continue running program as cascaded execution")
240 self.
PROG_LIST[i].insert(-1, prog_call_next+
"()\n")
244 for i
in range(npages):
259 self.
PROG.append(
"END")
260 self.
progsave(folder, progname, ask_user, show_result)
263 """Send a program to the robot using the provided parameters. This method is executed right after ProgSave if we selected the option "Send Program to Robot". 264 The connection parameters must be provided in the robot connection menu of RoboDK""" 267 def MoveJ(self, pose, joints, conf_RLF=None):
268 """Add a joint movement""" 271 def MoveL(self, pose, joints, conf_RLF=None):
272 """Add a linear movement""" 275 def MoveC(self, pose1, joints1, pose2, joints2, conf_RLF_1=None, conf_RLF_2=None):
276 """Add a circular movement""" 279 def setFrame(self, pose, frame_id=None, frame_name=None):
280 """Change the robot reference frame""" 291 self.
addline(
'$BASE=EK(EX_AX_DATA[1].ROOT,EX_AX_DATA[1].EX_KIN,EX_AX_DATA[1].OFFSET)')
294 def setTool(self, pose, tool_id=None, tool_name=None):
295 """Change the robot TCP""" 299 """Pause the robot program""" 303 self.
addline(
'WAIT SEC %.3f' % (time_ms*0.001))
306 """Changes the robot speed (in mm/s)""" 307 self.
addline(
'$VEL.CP = %.5f' % (speed_mms/1000.0))
310 """Changes the current robot acceleration""" 311 self.
addline(
'$ACC.CP = %.5f' % (accel_mmss/1000.0))
314 """Changes the robot joint speed (in deg/s)""" 315 self.
addline(
'$VEL.ORI1 = %.5f' % speed_degs)
316 self.
addline(
'$VEL.ORI2 = %.5f' % speed_degs)
319 """Changes the robot joint acceleration (in deg/s2)""" 320 self.
addline(
'$ACC.ORI1 = %.5f' % accel_degss)
321 self.
addline(
'$ACC.ORI2 = %.5f' % accel_degss)
324 """Changes the zone data approach (makes the movement more smooth)""" 327 self.
addline(
'$APO.CPTP = %.3f' % zone_mm)
328 self.
addline(
'$APO.CDIS = %.3f' % zone_mm)
336 """Sets a variable (output) to a given value""" 337 if type(io_var) != str:
338 io_var =
'$OUT[%s]' % str(io_var)
339 if type(io_value) != str:
346 self.
addline(
'%s=%s' % (io_var, io_value))
348 def waitDI(self, io_var, io_value, timeout_ms=-1):
349 """Waits for an input io_var to attain a given value io_value. Optionally, a timeout can be provided.""" 350 if type(io_var) != str:
351 io_var =
'$IN[%s]' % str(io_var)
352 if type(io_value) != str:
360 self.
addline(
'WAIT FOR (%s==%s)' % (io_var, io_value))
363 self.
addline(
'$TIMER_STOP[1]=TRUE')
364 self.
addline(
'$TIMER_FLAG[1]=FALSE')
365 self.
addline(
'$TIMER[1]=%.3f' % (float(timeout_ms)*0.001))
366 self.
addline(
'$TIMER_STOP[1]=FALSE')
367 self.
addline(
'WAIT FOR (%s==%s OR $TIMER_FLAG[1])' % (io_var, io_value))
368 self.
addline(
'$TIMER_STOP[1]=TRUE')
369 self.
addline(
'IF $TIMER_FLAG[1]== TRUE THEN')
370 self.
addline(
' HALT ; Timed out!')
371 self.
addline(
' GOTO START_TIMER')
374 def RunCode(self, code, is_function_call = False):
375 """Adds code or a function call""" 377 code.replace(
' ',
'_')
378 if not code.endswith(
')'):
383 fcn_def = fcn_def.split(
'(')[0]
392 """Add a joint movement""" 396 self.
addline(
'Wait for StrClear($LOOP_MSG[])')
397 self.
addline(
'$LOOP_CONT = TRUE')
398 self.
addline(
'$LOOP_MSG[] = "%s"' % message)
402 """Add a program line""" 411 self.
PROG.append(newline)
415 """Add a log message""" 419 self.
LOG = self.
LOG + newline +
'\n' 424 [x,y,z,r,p,w] = xyzrpw
434 return Mat([[cb*ca, ca*sc*sb - cc*sa, sc*sa + cc*ca*sb, x],[cb*sa, cc*ca + sc*sb*sa, cc*sb*sa - ca*sc, y],[-sb, cb*sc, cc*cb, z],[0,0,0,1]])
437 """Test the post with a basic program""" 439 robot =
RobotPost(
'Kuka_custom',
'Generic Kuka')
441 robot.ProgStart(
"Program")
442 robot.RunMessage(
"Program generated by RoboDK",
True)
443 robot.setFrame(
Pose([807.766544, -963.699898, 41.478944, 0, 0, 0]))
444 robot.setTool(
Pose([62.5, -108.253175, 100, -60, 90, 0]))
445 robot.MoveJ(
Pose([200, 200, 500, 180, 0, 180]), [-46.18419, -6.77518, -20.54925, 71.38674, 49.58727, -302.54752] )
446 robot.MoveL(
Pose([200, 250, 348.734575, 180, 0, -150]), [-41.62707, -8.89064, -30.01809, 60.62329, 49.66749, -258.98418] )
447 robot.MoveL(
Pose([200, 200, 262.132034, 180, 0, -150]), [-43.73892, -3.91728, -35.77935, 58.57566, 54.11615, -253.81122] )
448 robot.RunMessage(
"Setting air valve 1 on")
449 robot.RunCode(
"TCP_On",
True)
451 robot.MoveL(
Pose([200, 250, 348.734575, 180, 0, -150]), [-41.62707, -8.89064, -30.01809, 60.62329, 49.66749, -258.98418] )
452 robot.MoveL(
Pose([250, 300, 278.023897, 180, 0, -150]), [-37.52588, -6.32628, -34.59693, 53.52525, 49.24426, -251.44677] )
453 robot.MoveL(
Pose([250, 250, 191.421356, 180, 0, -150]), [-39.75778, -1.04537, -40.37883, 52.09118, 54.15317, -246.94403] )
454 robot.RunMessage(
"Setting air valve off")
455 robot.RunCode(
"TCP_Off",
True)
457 robot.MoveL(
Pose([250, 300, 278.023897, 180, 0, -150]), [-37.52588, -6.32628, -34.59693, 53.52525, 49.24426, -251.44677] )
458 robot.MoveL(
Pose([250, 200, 278.023897, 180, 0, -150]), [-41.85389, -1.95619, -34.89154, 57.43912, 52.34162, -253.73403] )
459 robot.MoveL(
Pose([250, 150, 191.421356, 180, 0, -150]), [-43.82111, 3.29703, -40.29493, 56.02402, 56.61169, -249.23532] )
460 robot.ProgFinish(
"Program")
462 for line
in robot.PROG:
465 if len(robot.LOG) > 0:
466 mbox(
'Program generation LOG:\n\n' + robot.LOG)
468 input(
"Press Enter to close...")
470 if __name__ ==
"__main__":
471 """Function to call when the module is executed by itself: test"""
def setSpeedJoints(self, speed_degs)
def RunMessage(self, message, iscomment=False)
def MoveJ(self, pose, joints, conf_RLF=None)
def __init__(self, robotpost=None, robotname=None, robot_axes=6, kwargs)
def progsave(self, folder, progname, ask_user=False, show_result=False)
def setAccelerationJoints(self, accel_degss)
def waitDI(self, io_var, io_value, timeout_ms=-1)
def ProgSave(self, folder, progname, ask_user=False, show_result=False)
def addline(self, newline)
def UploadFTP(program, robot_ip, remote_path, ftp_user, ftp_pass)
bool INCLUDE_SUB_PROGRAMS
def setZoneData(self, zone_mm)
def RunCode(self, code, is_function_call=False)
def setAcceleration(self, accel_mmss)
def mbox(msg, b1='OK', b2='Cancel', frame=True, t=False, entry=None)
def setTool(self, pose, tool_id=None, tool_name=None)
def setFrame(self, pose, frame_id=None, frame_name=None)
def ProgSendRobot(self, robot_ip, remote_path, ftp_user, ftp_pass)
def ProgFinish(self, progname, new_page=False)
def MoveC(self, pose1, joints1, pose2, joints2, conf_RLF_1=None, conf_RLF_2=None)
def MoveL(self, pose, joints, conf_RLF=None)
def addlog(self, newline)
def pose_2_str_ext(pose, joints)
def setSpeed(self, speed_mms)
def setDO(self, io_var, io_value)
def getSaveFile(strdir='C:\\', strfile='file.txt', strtitle='Save file as ...')
def ProgStart(self, progname, new_page=False)