50     """Converts a pose target to a string"""    51     if reference 
is not None:
    54     return (
'(%.3f,%.3f,%.3f,%.3f,%.3f,%.3f)' % (x,y,z,r,p,w))
    57     """Contverts a joint target to a string"""    58     return '(%s)' % (
','.join(format(ji, 
".5f") 
for ji 
in angles))
    63     """Robot post object"""    65     MAX_LINES_X_PROG = 95000 
    74     PROGRAM_NAME = 
'unknown'    86     def __init__(self, robotpost=None, robotname=None, robot_axes = 6, **kwargs):
    93             robotnamelist = robotname.split(
' ')
    94             if len(robotnamelist) > 1:
    99         for k,v 
in kwargs.items():
   100             if k == 
'lines_x_prog':
   103     def ProgStart(self, progname, generate_sub_program=False):
   104         if self.
nPROGS > 0 
and not generate_sub_program:
   109         m = re.search(
r'\d+$', progname)
   117         self.
RunMessage(
'Program %s' % progname, 
True) 
   125     def ProgSave(self, folder, progname, ask_user = False, show_result = False):
   128         progname_base = progname
   130             filesave = 
getSaveFile(folder, progname, 
'Save program as...')
   131             if filesave 
is not None:
   132                 filesave = filesave.name
   137             filesave = 
'%s/%s.%03i' % (folder, progname, self.
PROG_ID)
   145             mainprog = 
'\' Main program %s calls %i subprograms\n' % (self.
PROGRAM_NAME, self.
nPROGS)
   146             for i 
in range(self.
nPROGS):
   147                 fsavei = (
'%s/%s.%03i' % (folder, progname_base, self.
PROG_ID+i+1))
   149                 mainprog += 
'CALLP [%03i]\n' % (self.
PROG_ID+i+1)
   150                 fid = open(fsavei, 
"w")
   151                 fid.write(self.
PROGS[i])
   154             mainprog = mainprog + 
'END\n'   155             fid = open(filesave, 
"w")
   159             print(
'SAVED: %s\n' % filesave) 
   163             fid = open(filesave, 
"w")
   166             print(
'SAVED: %s\n' % filesave) 
   171             if type(show_result) 
is str:
   175                     p = subprocess.Popen([show_result, file])
   176             elif type(show_result) 
is list:
   178                 p = subprocess.Popen(show_result + [filesave])   
   182                 os.startfile(filesave)
   183             if len(self.
LOG) > 0:
   184                 mbox(
'Program generation LOG:\n\n' + self.
LOG)
   188         """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".   189         The connection parameters must be provided in the robot connection menu of RoboDK"""   192     def MoveJ(self, pose, joints, conf_RLF=None):
   193         """Add a joint movement"""   197     def MoveL(self, pose, joints, conf_RLF=None):
   198         """Add a linear movement"""   205     def MoveC(self, pose1, joints1, pose2, joints2, conf_RLF_1=None, conf_RLF_2=None):
   206         """Add a circular movement"""   210     def setFrame(self, pose, frame_id=None, frame_name=None):
   211         """Change the robot reference frame"""   212         self.
RunMessage(
'Using the reference frame:', 
True)
   214         self.
RunMessage(
'(using all targets with respect to the robot reference)', 
True)
   224     def setTool(self, pose, tool_id=None, tool_name=None):
   225         """Change the robot TCP"""   227         if tool_id 
is None or tool_id < 0:
   250         """Pause the robot program"""   254             self.
addline(
'PAUSE %.3f' % (time_ms*0.001))
   257         """Changes the robot speed (in mm/s)"""   261         """Changes the robot speed (in mm/s)"""   262         self.
addlog(
'setAcceleration not defined')
   265         """Changes the robot joint speed (in deg/s)"""   266         self.
addlog(
'setSpeedJoints not defined')
   269         """Changes the robot joint acceleration (in deg/s2)"""   270         self.
addlog(
'setAccelerationJoints not defined')
   273         """Changes the zone data approach (makes the movement more smooth)"""   277         """Sets a variable (output) to a given value"""   279         if type(io_var) != str:  
   280             io_var = 
'[%02i]' % int(io_var)
   281         if type(io_value) != str: 
   289         self.
addline(
'%s %s' % (setreset, io_var))
   291     def waitDI(self, io_var, io_value, timeout_ms=-1):
   292         """Waits for an input io_var to attain a given value io_value. Optionally, a timeout can be provided."""   294         if type(io_var) != str:  
   295             io_var = 
'[%02i]' % (int(io_var))
   296         if type(io_value) != str: 
   303         self.
addline(
'%s %s' % (waitij, io_var))
   309     def RunCode(self, code, is_function_call = False):
   310         """Adds code or a function call"""   312             self.
RunMessage(
'Call program %s:' % code, 
True) 
   322         """Add a joint movement"""   326             self.
addline(
'REM "' + message + 
'"')
   330         """Add a program line"""   340         self.
PROG += self.
TAB + newline + 
'\n'   344         """Add a log message"""   345         self.
LOG = self.
LOG + newline + 
'\n'   350     [x,y,z,r,p,w] = xyzrpw
   360     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]])
   363     """Test the post with a basic program"""   365     robot = 
RobotPost(
'Nachi program', 
'Generic Nachi Robot')
   367     robot.ProgStart(
"Program")
   368     robot.RunMessage(
"Program generated by RoboDK", 
True)
   369     robot.setFrame(
Pose([807.766544, -963.699898, 41.478944, 0, 0, 0]))
   370     robot.setTool(
Pose([62.5, -108.253175, 100, -60, 90, 0]))
   371     robot.MoveJ(
Pose([200, 200, 500, 180, 0, 180]), [-46.18419, -6.77518, -20.54925, 71.38674, 49.58727, -302.54752] )
   372     robot.MoveL(
Pose([200, 250, 348.734575, 180, 0, -150]), [-41.62707, -8.89064, -30.01809, 60.62329, 49.66749, -258.98418] )
   373     robot.MoveL(
Pose([200, 200, 262.132034, 180, 0, -150]), [-43.73892, -3.91728, -35.77935, 58.57566, 54.11615, -253.81122] )
   374     robot.RunMessage(
"Setting air valve 1 on")
   375     robot.RunCode(
"TCP_On", 
True)
   377     robot.MoveL(
Pose([200, 250, 348.734575, 180, 0, -150]), [-41.62707, -8.89064, -30.01809, 60.62329, 49.66749, -258.98418] )
   378     robot.MoveL(
Pose([250, 300, 278.023897, 180, 0, -150]), [-37.52588, -6.32628, -34.59693, 53.52525, 49.24426, -251.44677] )
   379     robot.MoveL(
Pose([250, 250, 191.421356, 180, 0, -150]), [-39.75778, -1.04537, -40.37883, 52.09118, 54.15317, -246.94403] )
   380     robot.RunMessage(
"Setting air valve off")
   381     robot.RunCode(
"TCP_Off(55)", 
True)
   383     robot.MoveL(
Pose([250, 300, 278.023897, 180, 0, -150]), [-37.52588, -6.32628, -34.59693, 53.52525, 49.24426, -251.44677] )
   384     robot.MoveL(
Pose([250, 200, 278.023897, 180, 0, -150]), [-41.85389, -1.95619, -34.89154, 57.43912, 52.34162, -253.73403] )
   385     robot.MoveL(
Pose([250, 150, 191.421356, 180, 0, -150]), [-43.82111, 3.29703, -40.29493, 56.02402, 56.61169, -249.23532] )
   386     robot.ProgFinish(
"Program")
   389         for i 
in range(len(robot.PROGS)):
   390             print(robot.PROGS[i])
   393         if len(robot.LOG) > 0:
   394             mbox(
'Program generation LOG:\n\n' + robot.LOG)
   396     input(
"Press Enter to close...")
   398 if __name__ == 
"__main__":
   399     """Function to call when the module is executed by itself: test""" 
def RunMessage(self, message, iscomment=False)
def setDO(self, io_var, io_value)
def ProgStart(self, progname, generate_sub_program=False)
def waitDI(self, io_var, io_value, timeout_ms=-1)
def setSpeed(self, speed_mms)
def setFrame(self, pose, frame_id=None, frame_name=None)
def MoveJ(self, pose, joints, conf_RLF=None)
def RunCode(self, code, is_function_call=False)
def name_2_id(str_name_id)
def setSpeedJoints(self, speed_degs)
def MoveC(self, pose1, joints1, pose2, joints2, conf_RLF_1=None, conf_RLF_2=None)
def MoveL(self, pose, joints, conf_RLF=None)
def UploadFTP(program, robot_ip, remote_path, ftp_user, ftp_pass)
def setAccelerationJoints(self, accel_degss)
def setTool(self, pose, tool_id=None, tool_name=None)
def addlog(self, newline)
def mbox(msg, b1='OK', b2='Cancel', frame=True, t=False, entry=None)
def pose_2_str(pose, joints=None, reference=None)
def ProgSave(self, folder, progname, ask_user=False, show_result=False)
def setAcceleration(self, accel_mmss)
def ProgSendRobot(self, robot_ip, remote_path, ftp_user, ftp_pass)
def __init__(self, robotpost=None, robotname=None, robot_axes=6, kwargs)
def setZoneData(self, zone_mm)
def getSaveFile(strdir='C:\\', strfile='file.txt', strtitle='Save file as ...')
def addline(self, newline)
def ProgFinish(self, progname)