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)