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)