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"""    64     BASE_PROGNAME = 
'SRA120EL-01-A'    65     MAX_LINES_X_PROG = 950 
    73     PROGRAM_NAME = 
'unknown'    85     def __init__(self, robotpost=None, robotname=None, robot_axes = 6, **kwargs):
   103     def ProgSave(self, folder, progname, ask_user = False, show_result = False):
   106         progname_base = progname
   108             filesave = 
getSaveFile(folder, progname, 
'Save program as...')
   109             if filesave 
is not None:
   110                 filesave = filesave.name
   115             filesave = 
'%s/%s.%i' % (folder , progname , self.
PROG_ID)
   122             mainprog = 
'\' Main program %s calls %.0f subprograms\n' % (self.
PROGRAM_NAME, float(self.
nPROGS))
   123             for i 
in range(len(self.
PROGS)):
   124                 fsavei = (
'%s/%s.%i' % (folder, progname_base, self.
PROG_ID+i+1))
   125                 mainprog = mainprog + (
'%s.%i\n' % (progname_base, self.
PROG_ID+i+1))
   126                 fid = open(fsavei, 
"w")
   127                 fid.write(self.
PROGS[i])
   130             mainprog = mainprog + 
'END\n'   131             fid = open(filesave, 
"w")
   135             print(
'SAVED: %s\n' % filesave) 
   138             filesave = 
'%s.%i' % (filesave, self.
PROG_ID)
   139             fid = open(filesave, 
"w")
   142             print(
'SAVED: %s\n' % filesave) 
   147             if type(show_result) 
is str:
   150                 p = subprocess.Popen([show_result, filesave])
   151             elif type(show_result) 
is list:
   153                 p = subprocess.Popen(show_result + [filesave])   
   157                 os.startfile(filesave)
   158             if len(self.
LOG) > 0:
   159                 mbox(
'Program generation LOG:\n\n' + self.
LOG)
   163         """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".   164         The connection parameters must be provided in the robot connection menu of RoboDK"""   167     def MoveJ(self, pose, joints, conf_RLF=None):
   168         """Add a joint movement"""   172     def MoveL(self, pose, joints, conf_RLF=None):
   173         """Add a linear movement"""   177     def MoveC(self, pose1, joints1, pose2, joints2, conf_RLF_1=None, conf_RLF_2=None):
   178         """Add a circular movement"""   182     def setFrame(self, pose, frame_id=None, frame_name=None):
   183         """Change the robot reference frame"""   184         self.
RunMessage(
'Using the reference frame:', 
True)
   186         self.
RunMessage(
'(using all targets with respect to the robot reference)', 
True)
   196     def setTool(self, pose, tool_id=None, tool_name=None):
   197         """Change the robot TCP"""   222         """Pause the robot program"""   226             self.
addline(
'PAUSE %.3f' % (time_ms*0.001))
   229         """Changes the robot speed (in mm/s)"""   233         """Changes the robot speed (in mm/s)"""   234         self.
addlog(
'setAcceleration not defined')
   237         """Changes the robot joint speed (in deg/s)"""   238         self.
addlog(
'setSpeedJoints not defined')
   241         """Changes the robot joint acceleration (in deg/s2)"""   242         self.
addlog(
'setAccelerationJoints not defined')
   245         """Changes the zone data approach (makes the movement more smooth)"""   249         """Sets a variable (output) to a given value"""   250         if type(io_var) != str:  
   251             io_var = 
'OUT[%s]' % str(io_var)        
   252         if type(io_value) != str: 
   259         self.
addline(
'%s=%s' % (io_var, io_value))
   261     def waitDI(self, io_var, io_value, timeout_ms=-1):
   262         """Waits for an input io_var to attain a given value io_value. Optionally, a timeout can be provided."""   263         if type(io_var) != str:  
   264             io_var = 
'IN[%s]' % str(io_var)        
   265         if type(io_value) != str: 
   273             self.
addline(
'WAIT FOR %s==%s' % (io_var, io_value))
   275             self.
addline(
'WAIT FOR %s==%s TIMEOUT=%.1f' % (io_var, io_value, timeout_ms))   
   277     def RunCode(self, code, is_function_call = False):
   278         """Adds code or a function call"""   280             self.
RunMessage(
'Call program %s:' % code, 
True) 
   289         """Add a joint movement"""   293             self.
addline(
'REM "' + message + 
'"')
   297         """Add a program line"""         310         """Add a log message"""   311         self.
LOG = self.
LOG + newline + 
'\n'   316     [x,y,z,r,p,w] = xyzrpw
   326     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]])
   329     """Test the post with a basic program"""   331     robot = 
RobotPost(
'Nachi program', 
'Generic Nachi Robot')
   333     robot.ProgStart(
"Program")
   334     robot.RunMessage(
"Program generated by RoboDK", 
True)
   335     robot.setFrame(
Pose([807.766544, -963.699898, 41.478944, 0, 0, 0]))
   336     robot.setTool(
Pose([62.5, -108.253175, 100, -60, 90, 0]))
   337     robot.MoveJ(
Pose([200, 200, 500, 180, 0, 180]), [-46.18419, -6.77518, -20.54925, 71.38674, 49.58727, -302.54752] )
   338     robot.MoveL(
Pose([200, 250, 348.734575, 180, 0, -150]), [-41.62707, -8.89064, -30.01809, 60.62329, 49.66749, -258.98418] )
   339     robot.MoveL(
Pose([200, 200, 262.132034, 180, 0, -150]), [-43.73892, -3.91728, -35.77935, 58.57566, 54.11615, -253.81122] )
   340     robot.RunMessage(
"Setting air valve 1 on")
   341     robot.RunCode(
"TCP_On", 
True)
   343     robot.MoveL(
Pose([200, 250, 348.734575, 180, 0, -150]), [-41.62707, -8.89064, -30.01809, 60.62329, 49.66749, -258.98418] )
   344     robot.MoveL(
Pose([250, 300, 278.023897, 180, 0, -150]), [-37.52588, -6.32628, -34.59693, 53.52525, 49.24426, -251.44677] )
   345     robot.MoveL(
Pose([250, 250, 191.421356, 180, 0, -150]), [-39.75778, -1.04537, -40.37883, 52.09118, 54.15317, -246.94403] )
   346     robot.RunMessage(
"Setting air valve off")
   347     robot.RunCode(
"TCP_Off(55)", 
True)
   349     robot.MoveL(
Pose([250, 300, 278.023897, 180, 0, -150]), [-37.52588, -6.32628, -34.59693, 53.52525, 49.24426, -251.44677] )
   350     robot.MoveL(
Pose([250, 200, 278.023897, 180, 0, -150]), [-41.85389, -1.95619, -34.89154, 57.43912, 52.34162, -253.73403] )
   351     robot.MoveL(
Pose([250, 150, 191.421356, 180, 0, -150]), [-43.82111, 3.29703, -40.29493, 56.02402, 56.61169, -249.23532] )
   352     robot.ProgFinish(
"Program")
   355         for i 
in range(len(robot.PROGS)):
   356             print(robot.PROGS[i])
   359         if len(robot.LOG) > 0:
   360             mbox(
'Program generation LOG:\n\n' + robot.LOG)
   362     input(
"Press Enter to close...")
   364 if __name__ == 
"__main__":
   365     """Function to call when the module is executed by itself: test""" def RunMessage(self, message, iscomment=False)
def setAcceleration(self, accel_mmss)
def MoveC(self, pose1, joints1, pose2, joints2, conf_RLF_1=None, conf_RLF_2=None)
def setTool(self, pose, tool_id=None, tool_name=None)
def setSpeed(self, speed_mms)
def name_2_id(str_name_id)
def ProgSendRobot(self, robot_ip, remote_path, ftp_user, ftp_pass)
def addlog(self, newline)
def addline(self, newline)
def UploadFTP(program, robot_ip, remote_path, ftp_user, ftp_pass)
def MoveJ(self, pose, joints, conf_RLF=None)
def MoveL(self, pose, joints, conf_RLF=None)
def setFrame(self, pose, frame_id=None, frame_name=None)
def mbox(msg, b1='OK', b2='Cancel', frame=True, t=False, entry=None)
def RunCode(self, code, is_function_call=False)
def setAccelerationJoints(self, accel_degss)
def ProgFinish(self, progname)
def __init__(self, robotpost=None, robotname=None, robot_axes=6, kwargs)
def waitDI(self, io_var, io_value, timeout_ms=-1)
def setDO(self, io_var, io_value)
def ProgStart(self, progname)
def setZoneData(self, zone_mm)
def getSaveFile(strdir='C:\\', strfile='file.txt', strtitle='Save file as ...')
def ProgSave(self, folder, progname, ask_user=False, show_result=False)
def pose_2_str(pose, joints=None, reference=None)
def setSpeedJoints(self, speed_degs)