50 """Prints a pose target""" 52 return (
'%.3f, %.3f, %.3f, %.3f, %.3f, %.3f, 1' % (x,y,z,r,p,w))
55 """Prints a joint target""" 57 data = [
'a1',
'a2',
'a3',
'a4',
'a5',
'a6',
'e1',
'e2',
'e3',
'e4',
'e5',
'e6']
58 for i
in range(len(angles)):
59 str = str + (
'%s := %.6f, ' % (data[i], angles[i]))
66 """Robot post object""" 82 def __init__(self, robotpost=None, robotname=None, robot_axes = 6, **kwargs):
94 self.
addline_var(
'EROP_OL : OVLREL := (ovl := 100)')
95 self.
addline_var(
'EROP_D0 : DYNAMIC := (velAxis := 10, accAxis := 100, decAxis := 100, jerkAxis := 50, vel := 200, acc := 3000, dec := 3000, jerk := 10000, velOri := 90, accOri := 180, decOri := 180, jerkOri := 10000)')
102 def ProgSave(self, folder, progname, ask_user = False, show_result = False):
103 prognametip = progname +
'.' + self.
PROG_EXT 105 filesave =
getSaveFile(folder, prognametip,
'Save program as...')
106 if filesave
is not None:
107 filesave = filesave.name
111 filesave = folder +
'/' + prognametip
112 fid = open(filesave,
"w")
115 print(
'SAVED: %s\n' % filesave)
120 fid = open(filesave_var,
"w")
126 if type(show_result)
is str:
129 p = subprocess.Popen([show_result, filesave])
130 p = subprocess.Popen([show_result, filesave_var])
132 elif type(show_result)
is list:
134 p = subprocess.Popen(show_result + [filesave])
138 os.startfile(filesave)
139 os.startfile(filesave_var)
140 if len(self.
LOG) > 0:
141 mbox(
'Program generation LOG:\n\n' + self.
LOG)
144 """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". 145 The connection parameters must be provided in the robot connection menu of RoboDK""" 148 def MoveJ(self, pose, joints, conf_RLF=None):
149 """Add a joint movement""" 151 self.
addline(
'PTP(%s, EROP_D0, EROP_OL)' % varname)
155 def MoveL(self, pose, joints, conf_RLF=None):
156 """Add a linear movement""" 158 self.
addline(
'Lin(%s, EROP_D0, EROP_OL)' % varname)
162 def MoveC(self, pose1, joints1, pose2, joints2, conf_RLF_1=None, conf_RLF_2=None):
163 """Add a circular movement""" 168 self.
addline(
'Circ(%s, %s, EROP_D0, EROP_OL)' % (varname1, varname2))
172 def setFrame(self, pose, frame_id=None, frame_name=None):
173 """Change the robot reference frame""" 176 def setTool(self, pose, tool_id=None, tool_name=None):
177 """Change the robot TCP""" 181 """Pause the robot program""" 183 self.addline(
'WaitIsFinished()')
184 self.addline(
'Stop()')
186 self.addline(
'WaitTime(%.3f)' % (time_ms*0.001))
189 """Changes the robot speed (in mm/s)""" 190 self.
addline(
'EROP_D0.vel := %.3f' % speed_mms)
193 """Changes the robot acceleration (in mm/s2)""" 194 self.
addline(
'EROP_D0.acc := %.3f' % accel_mmss)
195 self.
addline(
'EROP_D0.dec := %.3f' % accel_mmss)
198 """Changes the robot joint speed (in deg/s)""" 199 self.
addlog(
'setSpeedJoints not defined')
202 """Changes the robot joint acceleration (in deg/s2)""" 203 self.
addlog(
'setAccelerationJoints not defined')
206 """Changes the zone data approach (makes the movement more smooth)""" 207 self.
addlog(
'setZoneData not defined (%.1f mm)' % zone_mm)
210 """Sets a variable (output) to a given value""" 211 if type(io_var) != str:
212 io_var =
'Out%s' % str(io_var)
213 if type(io_value) != str:
220 self.
addline(
'%s.Set(%s)' % (io_var, io_value))
222 def waitDI(self, io_var, io_value, timeout_ms=-1):
223 """Waits for an input io_var to attain a given value io_value. Optionally, a timeout can be provided.""" 224 if type(io_var) != str:
225 io_var =
'In%s' % str(io_var)
226 if type(io_value) != str:
234 self.
addline(
'%s.Wait(%s)' % (io_var, io_value))
236 self.
addline(
'%s.Wait(%s, %.1f)' % (io_var, io_value, timeout_ms))
238 def RunCode(self, code, is_function_call = False):
239 """Adds code or a function call""" 241 code.replace(
' ',
'_')
247 """Display a message in the robot controller screen (teach pendant)""" 251 self.
addlog(
'Show message on teach pendant not implemented (%s)' % message)
255 """Add a program line""" 256 self.
PROG = self.
PROG + newline +
'\n' 259 """Add a program line""" 264 """Add a log message""" 265 self.
LOG = self.
LOG + newline +
'\n' 270 [x,y,z,r,p,w] = xyzrpw
280 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]])
283 """Test the post with a basic program""" 287 robot.ProgStart(
"Program")
288 robot.RunMessage(
"Program generated by RoboDK using a custom post processor",
True)
289 robot.setFrame(
Pose([807.766544, -963.699898, 41.478944, 0, 0, 0]))
290 robot.setTool(
Pose([62.5, -108.253175, 100, -60, 90, 0]))
291 robot.MoveJ(
Pose([200, 200, 500, 180, 0, 180]), [-46.18419, -6.77518, -20.54925, 71.38674, 49.58727, -302.54752] )
292 robot.MoveL(
Pose([200, 250, 348.734575, 180, 0, -150]), [-41.62707, -8.89064, -30.01809, 60.62329, 49.66749, -258.98418] )
293 robot.MoveL(
Pose([200, 200, 262.132034, 180, 0, -150]), [-43.73892, -3.91728, -35.77935, 58.57566, 54.11615, -253.81122] )
294 robot.RunMessage(
"Setting air valve 1 on")
295 robot.RunCode(
"TCP_On",
True)
297 robot.MoveL(
Pose([200, 250, 348.734575, 180, 0, -150]), [-41.62707, -8.89064, -30.01809, 60.62329, 49.66749, -258.98418] )
298 robot.MoveL(
Pose([250, 300, 278.023897, 180, 0, -150]), [-37.52588, -6.32628, -34.59693, 53.52525, 49.24426, -251.44677] )
299 robot.MoveL(
Pose([250, 250, 191.421356, 180, 0, -150]), [-39.75778, -1.04537, -40.37883, 52.09118, 54.15317, -246.94403] )
300 robot.RunMessage(
"Setting air valve off")
301 robot.RunCode(
"TCP_Off",
True)
303 robot.MoveL(
Pose([250, 300, 278.023897, 180, 0, -150]), [-37.52588, -6.32628, -34.59693, 53.52525, 49.24426, -251.44677] )
304 robot.MoveL(
Pose([250, 200, 278.023897, 180, 0, -150]), [-41.85389, -1.95619, -34.89154, 57.43912, 52.34162, -253.73403] )
305 robot.MoveL(
Pose([250, 150, 191.421356, 180, 0, -150]), [-43.82111, 3.29703, -40.29493, 56.02402, 56.61169, -249.23532] )
306 robot.ProgFinish(
"Program")
309 if len(robot.LOG) > 0:
310 mbox(
'Program generation LOG:\n\n' + robot.LOG)
312 input(
"Press Enter to close...")
314 if __name__ ==
"__main__":
315 """Function to call when the module is executed by itself: test""" def RunMessage(self, message, iscomment=False)
def RunCode(self, code, is_function_call=False)
def setAcceleration(self, accel_mmss)
def setTool(self, pose, tool_id=None, tool_name=None)
def ProgFinish(self, progname)
def setSpeedJoints(self, speed_degs)
def MoveJ(self, pose, joints, conf_RLF=None)
def MoveC(self, pose1, joints1, pose2, joints2, conf_RLF_1=None, conf_RLF_2=None)
def UploadFTP(program, robot_ip, remote_path, ftp_user, ftp_pass)
def setSpeed(self, speed_mms)
def __init__(self, robotpost=None, robotname=None, robot_axes=6, kwargs)
def ProgStart(self, progname)
def setDO(self, io_var, io_value)
def waitDI(self, io_var, io_value, timeout_ms=-1)
def addlog(self, newline)
def mbox(msg, b1='OK', b2='Cancel', frame=True, t=False, entry=None)
def addline(self, newline)
def setZoneData(self, zone_mm)
def ProgSendRobot(self, robot_ip, remote_path, ftp_user, ftp_pass)
def setAccelerationJoints(self, accel_degss)
def ProgSave(self, folder, progname, ask_user=False, show_result=False)
def setFrame(self, pose, frame_id=None, frame_name=None)
def getSaveFile(strdir='C:\\', strfile='file.txt', strtitle='Save file as ...')
def addline_var(self, newline)
def MoveL(self, pose, joints, conf_RLF=None)