50     """Prints a pose target"""    52     return (
'%.3f, %.3f, %.3f, %.3f, %.3f, %.3f, 1' % (x,y,z,r,p,w))
    55     """Prints a joint target"""    57     data = [
'a1',
'a2',
'a3',
'a4',
'a5',
'a6',
'e1',
'e2',
'e3',
'e4',
'e5',
'e6']
    58     for i 
in range(len(angles)):
    59         str = str + (
'%s := %.6f, ' % (data[i], angles[i]))
    66     """Robot post object"""    82     def __init__(self, robotpost=None, robotname=None, robot_axes = 6, **kwargs):
    94         self.
addline_var(
'EROP_OL : OVLREL := (ovl := 100)')
    95         self.
addline_var(
'EROP_D0 : DYNAMIC := (velAxis := 10, accAxis := 100, decAxis := 100, jerkAxis := 50, vel := 200, acc := 3000, dec := 3000, jerk := 10000, velOri := 90, accOri := 180, decOri := 180, jerkOri := 10000)')
   102     def ProgSave(self, folder, progname, ask_user = False, show_result = False):
   103         prognametip = progname + 
'.' + self.
PROG_EXT   105             filesave = 
getSaveFile(folder, prognametip, 
'Save program as...')
   106             if filesave 
is not None:
   107                 filesave = filesave.name
   111             filesave = folder + 
'/' + prognametip
   112         fid = open(filesave, 
"w")
   115         print(
'SAVED: %s\n' % filesave) 
   120         fid = open(filesave_var, 
"w")
   126             if type(show_result) 
is str:
   129                 p = subprocess.Popen([show_result, filesave])
   130                 p = subprocess.Popen([show_result, filesave_var])
   132             elif type(show_result) 
is list:
   134                 p = subprocess.Popen(show_result + [filesave])   
   138                 os.startfile(filesave)
   139                 os.startfile(filesave_var)
   140             if len(self.
LOG) > 0:
   141                 mbox(
'Program generation LOG:\n\n' + self.
LOG)
   144         """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".   145         The connection parameters must be provided in the robot connection menu of RoboDK"""   148     def MoveJ(self, pose, joints, conf_RLF=None):
   149         """Add a joint movement"""   151         self.
addline(
'PTP(%s, EROP_D0, EROP_OL)' % varname)
   155     def MoveL(self, pose, joints, conf_RLF=None):
   156         """Add a linear movement"""   158         self.
addline(
'Lin(%s, EROP_D0, EROP_OL)' % varname)
   162     def MoveC(self, pose1, joints1, pose2, joints2, conf_RLF_1=None, conf_RLF_2=None):
   163         """Add a circular movement"""   168         self.
addline(
'Circ(%s, %s, EROP_D0, EROP_OL)' % (varname1, varname2))
   172     def setFrame(self, pose, frame_id=None, frame_name=None):
   173         """Change the robot reference frame"""   176     def setTool(self, pose, tool_id=None, tool_name=None):
   177         """Change the robot TCP"""   181         """Pause the robot program"""   183             self.addline(
'WaitIsFinished()')
   184             self.addline(
'Stop()')            
   186             self.addline(
'WaitTime(%.3f)' % (time_ms*0.001))
   189         """Changes the robot speed (in mm/s)"""   190         self.
addline(
'EROP_D0.vel := %.3f' % speed_mms)
   193         """Changes the robot acceleration (in mm/s2)"""   194         self.
addline(
'EROP_D0.acc := %.3f' % accel_mmss)
   195         self.
addline(
'EROP_D0.dec := %.3f' % accel_mmss)        
   198         """Changes the robot joint speed (in deg/s)"""   199         self.
addlog(
'setSpeedJoints not defined')
   202         """Changes the robot joint acceleration (in deg/s2)"""   203         self.
addlog(
'setAccelerationJoints not defined')
   206         """Changes the zone data approach (makes the movement more smooth)"""   207         self.
addlog(
'setZoneData not defined (%.1f mm)' % zone_mm)
   210         """Sets a variable (output) to a given value"""   211         if type(io_var) != str:  
   212             io_var = 
'Out%s' % str(io_var)        
   213         if type(io_value) != str: 
   220         self.
addline(
'%s.Set(%s)' % (io_var, io_value))
   222     def waitDI(self, io_var, io_value, timeout_ms=-1):
   223         """Waits for an input io_var to attain a given value io_value. Optionally, a timeout can be provided."""   224         if type(io_var) != str:  
   225             io_var = 
'In%s' % str(io_var)        
   226         if type(io_value) != str: 
   234             self.
addline(
'%s.Wait(%s)' % (io_var, io_value))
   236             self.
addline(
'%s.Wait(%s, %.1f)' % (io_var, io_value, timeout_ms))   
   238     def RunCode(self, code, is_function_call = False):
   239         """Adds code or a function call"""   241             code.replace(
' ',
'_')
   247         """Display a message in the robot controller screen (teach pendant)"""   251             self.
addlog(
'Show message on teach pendant not implemented (%s)' % message)
   255         """Add a program line"""   256         self.
PROG = self.
PROG + newline + 
'\n'   259         """Add a program line"""   264         """Add a log message"""   265         self.
LOG = self.
LOG + newline + 
'\n'   270     [x,y,z,r,p,w] = xyzrpw
   280     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]])
   283     """Test the post with a basic program"""   287     robot.ProgStart(
"Program")
   288     robot.RunMessage(
"Program generated by RoboDK using a custom post processor", 
True)
   289     robot.setFrame(
Pose([807.766544, -963.699898, 41.478944, 0, 0, 0]))
   290     robot.setTool(
Pose([62.5, -108.253175, 100, -60, 90, 0]))
   291     robot.MoveJ(
Pose([200, 200, 500, 180, 0, 180]), [-46.18419, -6.77518, -20.54925, 71.38674, 49.58727, -302.54752] )
   292     robot.MoveL(
Pose([200, 250, 348.734575, 180, 0, -150]), [-41.62707, -8.89064, -30.01809, 60.62329, 49.66749, -258.98418] )
   293     robot.MoveL(
Pose([200, 200, 262.132034, 180, 0, -150]), [-43.73892, -3.91728, -35.77935, 58.57566, 54.11615, -253.81122] )
   294     robot.RunMessage(
"Setting air valve 1 on")
   295     robot.RunCode(
"TCP_On", 
True)
   297     robot.MoveL(
Pose([200, 250, 348.734575, 180, 0, -150]), [-41.62707, -8.89064, -30.01809, 60.62329, 49.66749, -258.98418] )
   298     robot.MoveL(
Pose([250, 300, 278.023897, 180, 0, -150]), [-37.52588, -6.32628, -34.59693, 53.52525, 49.24426, -251.44677] )
   299     robot.MoveL(
Pose([250, 250, 191.421356, 180, 0, -150]), [-39.75778, -1.04537, -40.37883, 52.09118, 54.15317, -246.94403] )
   300     robot.RunMessage(
"Setting air valve off")
   301     robot.RunCode(
"TCP_Off", 
True)
   303     robot.MoveL(
Pose([250, 300, 278.023897, 180, 0, -150]), [-37.52588, -6.32628, -34.59693, 53.52525, 49.24426, -251.44677] )
   304     robot.MoveL(
Pose([250, 200, 278.023897, 180, 0, -150]), [-41.85389, -1.95619, -34.89154, 57.43912, 52.34162, -253.73403] )
   305     robot.MoveL(
Pose([250, 150, 191.421356, 180, 0, -150]), [-43.82111, 3.29703, -40.29493, 56.02402, 56.61169, -249.23532] )
   306     robot.ProgFinish(
"Program")
   309     if len(robot.LOG) > 0:
   310         mbox(
'Program generation LOG:\n\n' + robot.LOG)
   312     input(
"Press Enter to close...")
   314 if __name__ == 
"__main__":
   315     """Function to call when the module is executed by itself: test""" def RunMessage(self, message, iscomment=False)
def RunCode(self, code, is_function_call=False)
def setAcceleration(self, accel_mmss)
def setTool(self, pose, tool_id=None, tool_name=None)
def ProgFinish(self, progname)
def setSpeedJoints(self, speed_degs)
def MoveJ(self, pose, joints, conf_RLF=None)
def MoveC(self, pose1, joints1, pose2, joints2, conf_RLF_1=None, conf_RLF_2=None)
def UploadFTP(program, robot_ip, remote_path, ftp_user, ftp_pass)
def setSpeed(self, speed_mms)
def __init__(self, robotpost=None, robotname=None, robot_axes=6, kwargs)
def ProgStart(self, progname)
def setDO(self, io_var, io_value)
def waitDI(self, io_var, io_value, timeout_ms=-1)
def addlog(self, newline)
def mbox(msg, b1='OK', b2='Cancel', frame=True, t=False, entry=None)
def addline(self, newline)
def setZoneData(self, zone_mm)
def ProgSendRobot(self, robot_ip, remote_path, ftp_user, ftp_pass)
def setAccelerationJoints(self, accel_degss)
def ProgSave(self, folder, progname, ask_user=False, show_result=False)
def setFrame(self, pose, frame_id=None, frame_name=None)
def getSaveFile(strdir='C:\\', strfile='file.txt', strtitle='Save file as ...')
def addline_var(self, newline)
def MoveL(self, pose, joints, conf_RLF=None)