51     """Converts a pose target to a string"""    53     return (
'(%.3f,%.3f,%.3f,%.3f,%.3f,%.3f)' % (x,y,z,w,p,r))
    56     """Contverts a joint target to a string"""    57     return 'J(%s)' % (
','.join(format(ji, 
".5f") 
for ji 
in angles))
    62     """Robot post object"""    64     MAX_LINES_X_PROG = 1e9    
    88     AXES_TYPE = [
'R','R','R','R','R','R']  # Important: This is usually set up by RoboDK automatically. Otherwise, override the __init__ procedure.    96     def __init__(self, robotpost=None, robotname=None, robot_axes = 6, **kwargs):
   103         for k,v 
in kwargs.items():
   104             if k == 
'lines_x_prog':
   121             self.
addline(
'PROGRAM %s' % progname)
   123             self.
addline(
'PROGRAM %s' % progname)
   130         self.
addline(
"' End of program %s" % progname)
   132     def ProgSave(self, folder, progname, ask_user = False, show_result = False):
   133         progname = progname + 
'.' + self.
PROG_EXT   135             filesave = 
getSaveFile(folder, progname, 
'Save program as...')
   136             if filesave 
is not None:
   137                 filesave = filesave.name
   141             filesave = folder + 
'/' + progname
   142         fid = open(filesave, 
"w")
   145         print(
'SAVED: %s\n' % filesave) 
   150             if type(show_result) 
is str:
   153                 p = subprocess.Popen([show_result, filesave])
   154             elif type(show_result) 
is list:
   156                 p = subprocess.Popen(show_result + [filesave])   
   160                 os.startfile(filesave)
   161             if len(self.
LOG) > 0:
   162                 mbox(
'Program generation LOG:\n\n' + self.
LOG)
   165         """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".   166         The connection parameters must be provided in the robot connection menu of RoboDK"""   169     def MoveJ(self, pose, joints, conf_RLF=None):
   170         """Add a joint movement"""   175             var_str = 
'Pos%i' % self.
P_ID   177             self.
addline(
'MOVE P, %s %s' % (self.
PASS, var_str))
   181     def MoveL(self, pose, joints, conf_RLF=None):
   182         """Add a linear movement"""   187                 var_str = 
'Pos%i' % self.
P_ID   189                 self.
addline(
'MOVE L, %s %s' % (self.
PASS, var_str))
   192                 var_str = 
'Pos%i' % self.
P_ID   194                 self.
addline(
'MOVE L, %s %s' % (self.
PASS, var_str))
   201     def MoveC(self, pose1, joints1, pose2, joints2, conf_RLF_1=None, conf_RLF_2=None):
   202         """Add a circular movement"""   207             var_str1 = 
'Pos%i' % self.
P_ID   210             var_str2 = 
'Pos%i' % self.
P_ID   212             self.
addline(
'MOVE C, %s,%s %s' % (var_str1, self.
PASS, var_str2))
   216     def setFrame(self, pose, frame_id=None, frame_name=None):
   217         """Change the robot reference frame"""   218         if frame_id 
is not None and frame_id > 0:
   223     def setTool(self, pose, tool_id=None, tool_name=None):
   224         """Change the robot TCP"""   225         if tool_id 
is not None and tool_id > 0:
   231         """Pause the robot program"""   233             self.
addline(
'HOLD "Program Paused"')
   235             self.
addline(
'DELAY %.3f' % time_ms)
   238         """Changes the robot speed (in mm/s)"""   240         self.
SPEED = max(min(speed_mms/2000.0, 100),1) 
   241         self.
addline(
"' set speed to %.1f mm per sec" % speed_mms)
   245         """Changes the robot acceleration (in mm/s2)"""   252         """Changes the robot joint speed (in deg/s)"""   257         """Changes the robot joint acceleration (in deg/s2)"""   262         """Changes the zone data approach (makes the movement more smooth)"""   273         """Sets a variable (output) to a given value"""   274         if type(io_var) != str:  
   275             io_var = 
'IO[%s]' % str(io_var)        
   276         if type(io_value) != str: 
   283         self.
addline(
'OUT %s = %s' % (io_var, io_value))
   285     def waitDI(self, io_var, io_value, timeout_ms=-1):
   286         """Waits for an input io_var to attain a given value io_value. Optionally, a timeout can be provided."""   287         if type(io_var) != str:  
   288             io_var = 
'IO[%s]' % str(io_var)        
   289         if type(io_value) != str: 
   297             self.
addline(
'WAIT %s = %s' % (io_var, io_value))
   299             self.
addline(
'WAIT %s = %s, %.0f' % (io_var, io_value, timeout_ms))   
   301     def RunCode(self, code, is_function_call = False):
   302         """Adds code or a function call"""   304             code.replace(
' ',
'_')
   305             if code.find(
'(') < 0:
   312         """Add a joint movement"""   316             self.
addline(
'PRINTMSG "%s", 0, "Message"' % message)
   320         """Add a program line"""   324         """Add a log message"""   325         self.
LOG = self.
LOG + newline + 
'\n'   330     [x,y,z,r,p,w] = xyzrpw
   340     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]])
   343     """Test the post with a basic program"""   345     robot = 
RobotPost(
'Vplus_custom', 
'Generic Adept Robot')
   347     robot.ProgStart(
"Program")
   348     robot.RunMessage(
"Program generated by RoboDK", 
True)
   349     robot.setFrame(
Pose([807.766544, -963.699898, 41.478944, 0, 0, 0]))
   350     robot.setTool(
Pose([62.5, -108.253175, 100, -60, 90, 0]))
   351     robot.MoveJ(
Pose([200, 200, 500, 180, 0, 180]), [-46.18419, -6.77518, -20.54925, 71.38674, 49.58727, -302.54752] )
   352     robot.MoveL(
Pose([200, 250, 348.734575, 180, 0, -150]), [-41.62707, -8.89064, -30.01809, 60.62329, 49.66749, -258.98418] )
   353     robot.MoveL(
Pose([200, 200, 262.132034, 180, 0, -150]), [-43.73892, -3.91728, -35.77935, 58.57566, 54.11615, -253.81122] )
   354     robot.RunMessage(
"Setting air valve 1 on")
   355     robot.RunCode(
"TCP_On", 
True)
   357     robot.MoveL(
Pose([200, 250, 348.734575, 180, 0, -150]), [-41.62707, -8.89064, -30.01809, 60.62329, 49.66749, -258.98418] )
   358     robot.MoveL(
Pose([250, 300, 278.023897, 180, 0, -150]), [-37.52588, -6.32628, -34.59693, 53.52525, 49.24426, -251.44677] )
   359     robot.MoveL(
Pose([250, 250, 191.421356, 180, 0, -150]), [-39.75778, -1.04537, -40.37883, 52.09118, 54.15317, -246.94403] )
   360     robot.RunMessage(
"Setting air valve off")
   361     robot.RunCode(
"TCP_Off(55)", 
True)
   363     robot.MoveL(
Pose([250, 300, 278.023897, 180, 0, -150]), [-37.52588, -6.32628, -34.59693, 53.52525, 49.24426, -251.44677] )
   364     robot.MoveL(
Pose([250, 200, 278.023897, 180, 0, -150]), [-41.85389, -1.95619, -34.89154, 57.43912, 52.34162, -253.73403] )
   365     robot.MoveL(
Pose([250, 150, 191.421356, 180, 0, -150]), [-43.82111, 3.29703, -40.29493, 56.02402, 56.61169, -249.23532] )
   366     robot.ProgFinish(
"Program")
   368     print(robot.PROG.replace(
'%PROGDEFS%\n', robot.HEADER_DEFINE))    
   369     if len(robot.LOG) > 0:
   370         mbox(
'Program generation LOG:\n\n' + robot.LOG)
   372     input(
"Press Enter to close...")
   374 if __name__ == 
"__main__":
   375     """Function to call when the module is executed by itself: test""" 
def MoveL(self, pose, joints, conf_RLF=None)
def setAcceleration(self, accel_mmss)
def addlog(self, newline)
def ProgFinish(self, progname)
def UploadFTP(program, robot_ip, remote_path, ftp_user, ftp_pass)
def ProgStart(self, progname)
def ProgSave(self, folder, progname, ask_user=False, show_result=False)
def setSpeed(self, speed_mms)
def mbox(msg, b1='OK', b2='Cancel', frame=True, t=False, entry=None)
def setSpeedJoints(self, speed_degs)
def setTool(self, pose, tool_id=None, tool_name=None)
def setAccelerationJoints(self, accel_degss)
def MoveC(self, pose1, joints1, pose2, joints2, conf_RLF_1=None, conf_RLF_2=None)
def ProgSendRobot(self, robot_ip, remote_path, ftp_user, ftp_pass)
def MoveJ(self, pose, joints, conf_RLF=None)
def setDO(self, io_var, io_value)
def __init__(self, robotpost=None, robotname=None, robot_axes=6, kwargs)
def getSaveFile(strdir='C:\\', strfile='file.txt', strtitle='Save file as ...')
def addline(self, newline)
def setFrame(self, pose, frame_id=None, frame_name=None)
def RunCode(self, code, is_function_call=False)
def setZoneData(self, zone_mm)
def waitDI(self, io_var, io_value, timeout_ms=-1)
def RunMessage(self, message, iscomment=False)