47 from robolink 
import *
    51     """Prints a pose target"""    53     return (
'pose([%.6f, %.6f, %.6f, %.6f, %.6f, %.6f])' % (x,y,z,r,p,w))
    56     """Prints a joint target"""    59         return (
'[%.6f, %.6f, %.6f, %.6f, %.6f, %.6f]' % (angles[0], angles[1], angles[2], angles[3], angles[4], angles[5]))
    61         return 'this post only supports 6-axis robots'    66     """Robot post object"""    72     BLEND_RADIUS_MM = 0.001  
    78     ROBOT_NAME = 
'generic'    80     MAIN_PROGNAME = 
'unknown'    85     def __init__(self, robotpost=None, robotname=None, robot_axes = 6, **kwargs):
    94         self.
addline(
'def %s():' % progname)        
    98             self.
addline(
'# default parameters:')
   109     def ProgSave(self, folder, progname, ask_user = False, show_result = False):
   111         progname = progname + 
'.' + self.
PROG_EXT   113             filesave = 
getSaveFile(folder, progname, 
'Save program as...')
   114             if filesave 
is not None:
   115                 filesave = filesave.name
   119             filesave = folder + 
'/' + progname
   120         fid = open(filesave, 
"w")
   123         print(
'SAVED: %s\n' % filesave) 
   129         filesave_control = filesave + 
'.control'   130         if not progitem.Valid():
   131             error_msg = 
'Problems getting the program'   134             error_msg, joint_list, error_code = progitem.InstructionListJoints(0.5, 0.5, filesave + 
'.control')
   137             mbox(
'Program issues:\n\n' + error_msg)
   141             if type(show_result) 
is str:
   144                 p = subprocess.Popen([show_result, filesave])
   145                 p = subprocess.Popen([show_result, filesave_control])               
   146             elif type(show_result) 
is list:
   148                 p = subprocess.Popen(show_result + [filesave])   
   152                 os.startfile(filesave)
   153             if len(self.
LOG) > 0:
   154                 mbox(
'Program generation LOG:\n\n' + self.
LOG)
   157         """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".   158         The connection parameters must be provided in the robot connection menu of RoboDK"""   161     def MoveJ(self, pose, joints, conf_RLF=None):
   162         """Add a joint movement"""   166     def MoveL(self, pose, joints, conf_RLF=None):
   167         """Add a linear movement"""   172     def MoveC(self, pose1, joints1, pose2, joints2, conf_RLF_1=None, conf_RLF_2=None):
   173         """Add a circular movement"""   177     def setFrame(self, pose, frame_id=None, frame_name=None):
   178         """Change the robot reference frame"""   185     def setTool(self, pose, tool_id=None, tool_name=None):
   186         """Change the robot TCP"""   190         """Pause the robot program"""   194             self.
addline(
'sleep(%.3f)' % (time_ms*0.001))
   197         """Changes the robot speed (in mm/s)"""   198         self.
addline(
'speed_mms    = %.3f' % speed_mms)
   201         """Changes the robot acceleration (in mm/s2)"""       202         self.
addline(
'accel_mmss   = %.3f' % accel_mmss)
   205         """Changes the robot joint speed (in deg/s)"""   206         self.
addline(
'speed_degs  = %.3f' % speed_degs)
   209         """Changes the robot joint acceleration (in deg/s2)"""   210         self.
addline(
'accel_degss = %.3f' % accel_degss)
   213         """Changes the zone data approach (makes the movement more smooth)"""   220         """Sets a variable (output) to a given value"""   221         if type(io_var) != str:  
   222             io_var = 
'OUT[%s]' % str(io_var)        
   223         if type(io_value) != str: 
   230         self.
addline(
'%s=%s' % (io_var, io_value))
   232     def waitDI(self, io_var, io_value, timeout_ms=-1):
   233         """Waits for an input io_var to attain a given value io_value. Optionally, a timeout can be provided."""   234         if type(io_var) != str:  
   235             io_var = 
'IN[%s]' % str(io_var)        
   236         if type(io_value) != str: 
   244             self.
addline(
'WAIT FOR %s==%s' % (io_var, io_value))
   246             self.
addline(
'WAIT FOR %s==%s TIMEOUT=%.1f' % (io_var, io_value, timeout_ms))   
   248     def RunCode(self, code, is_function_call = False):
   249         """Adds code or a function call"""   251             code.replace(
' ',
'_')
   258         """Show a message on the controller screen"""   262             self.
addline(
'popup("%s")' % message)
   266         """Add a program line"""   270         """Add a log message"""   271         self.
LOG = self.
LOG + newline + 
'\n'   276     [x,y,z,r,p,w] = xyzrpw
   286     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]])
   289     """Test the post with a basic program"""   291     robot = 
RobotPost(
'Universal Robotics', 
'Generic UR robot')
   293     robot.ProgStart(
"Program")
   294     robot.RunMessage(
"Program generated by RoboDK", 
True)
   295     robot.setFrame(
Pose([807.766544, -963.699898, 41.478944, 0, 0, 0]))
   296     robot.setTool(
Pose([62.5, -108.253175, 100, -60, 90, 0]))
   298     robot.setAcceleration(3000) 
   299     robot.MoveJ(
Pose([200, 200, 500, 180, 0, 180]), [-46.18419, -6.77518, -20.54925, 71.38674, 49.58727, -302.54752] )
   300     robot.MoveL(
Pose([200, 250, 348.734575, 180, 0, -150]), [-41.62707, -8.89064, -30.01809, 60.62329, 49.66749, -258.98418] )
   301     robot.MoveL(
Pose([200, 200, 262.132034, 180, 0, -150]), [-43.73892, -3.91728, -35.77935, 58.57566, 54.11615, -253.81122] )
   302     robot.RunMessage(
"Setting air valve 1 on")
   303     robot.RunCode(
"TCP_On", 
True)
   305     robot.MoveL(
Pose([200, 250, 348.734575, 180, 0, -150]), [-41.62707, -8.89064, -30.01809, 60.62329, 49.66749, -258.98418] )
   306     robot.MoveL(
Pose([250, 300, 278.023897, 180, 0, -150]), [-37.52588, -6.32628, -34.59693, 53.52525, 49.24426, -251.44677] )
   307     robot.MoveL(
Pose([250, 250, 191.421356, 180, 0, -150]), [-39.75778, -1.04537, -40.37883, 52.09118, 54.15317, -246.94403] )
   308     robot.RunMessage(
"Setting air valve off")
   309     robot.RunCode(
"TCP_Off", 
True)
   311     robot.MoveL(
Pose([250, 300, 278.023897, 180, 0, -150]), [-37.52588, -6.32628, -34.59693, 53.52525, 49.24426, -251.44677] )
   312     robot.MoveL(
Pose([250, 200, 278.023897, 180, 0, -150]), [-41.85389, -1.95619, -34.89154, 57.43912, 52.34162, -253.73403] )
   313     robot.MoveL(
Pose([250, 150, 191.421356, 180, 0, -150]), [-43.82111, 3.29703, -40.29493, 56.02402, 56.61169, -249.23532] )
   314     robot.ProgFinish(
"Program")
   317     if len(robot.LOG) > 0:
   318         mbox(
'Program generation LOG:\n\n' + robot.LOG)
   320     input(
"Press Enter to close...")
   322 if __name__ == 
"__main__":
   323     """Function to call when the module is executed by itself: test""" def RunCode(self, code, is_function_call=False)
def MoveC(self, pose1, joints1, pose2, joints2, conf_RLF_1=None, conf_RLF_2=None)
def setDO(self, io_var, io_value)
def MoveL(self, pose, joints, conf_RLF=None)
def setSpeedJoints(self, speed_degs)
def waitDI(self, io_var, io_value, timeout_ms=-1)
def setAcceleration(self, accel_mmss)
def setTool(self, pose, tool_id=None, tool_name=None)
def UploadFTP(program, robot_ip, remote_path, ftp_user, ftp_pass)
def setSpeed(self, speed_mms)
def addlog(self, newline)
def MoveJ(self, pose, joints, conf_RLF=None)
def mbox(msg, b1='OK', b2='Cancel', frame=True, t=False, entry=None)
def ProgStart(self, progname)
def __init__(self, robotpost=None, robotname=None, robot_axes=6, kwargs)
def ProgSendRobot(self, robot_ip, remote_path, ftp_user, ftp_pass)
def addline(self, newline)
def getSaveFile(strdir='C:\\', strfile='file.txt', strtitle='Save file as ...')
def setFrame(self, pose, frame_id=None, frame_name=None)
def setZoneData(self, zone_mm)
def setAccelerationJoints(self, accel_degss)
def RunMessage(self, message, iscomment=False)
def ProgFinish(self, progname)
def ProgSave(self, folder, progname, ask_user=False, show_result=False)