52 """Prints a pose target""" 54 return (
'%.3f, %.3f, %.3f, %.3f, %.3f, %.3f' % (x,y,z,r,p,w))
57 """Prints a joint target""" 59 data = [
',',
',',
',',
',',
',',
'']
60 for i
in range(len(angles)):
62 str = str + (
'%.3f%s ' % (angles[i],data[i]))
69 """Robot post object""" 86 def __init__(self, robotpost=None, robotname=None, robot_axes = 6, **kwargs):
97 self.
addline(
' Public Sub MAIN')
98 self.
addline(
' Dim prof1 As New Profile')
99 self.
addline(
' Dim loc1 As New Location')
100 self.
addline(
' prof1.Speed = 40')
101 self.
addline(
' prof1.Straight = True')
102 self.
addline(
' Controller.PowerEnabled = 1')
103 self.
addline(
' Robot.Attached = 1')
111 def ProgSave(self, folder, progname, ask_user=True, show_result=True):
112 progname =
'Main' +
'.' + self.
PROG_EXT 114 filesave =
getSaveFile(folder, progname,
'Save program as...')
115 if filesave
is not None:
116 filesave = filesave.name
120 filesave = folder +
'/' + progname
121 fid = open(filesave,
"w")
124 print(
'SAVED: %s\n' % filesave)
129 if type(show_result)
is str:
132 p = subprocess.Popen([show_result, filesave])
133 elif type(show_result)
is list:
135 p = subprocess.Popen(show_result + [filesave])
139 os.startfile(filesave)
141 if len(self.
LOG) > 0:
142 mbox(
'Program generation LOG:\n\n' + self.
LOG)
145 """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". 146 The connection parameters must be provided in the robot connection menu of RoboDK""" 149 def MoveJ(self, pose, joints, conf_RLF=None):
150 """Add a joint movement""" 154 def MoveL(self, pose, joints, conf_RLF=None):
155 """Add a linear movement""" 159 def MoveC(self, pose1, joints1, pose2, joints2, conf_RLF_1=None, conf_RLF_2=None):
160 """Add a circular movement""" 165 def setFrame(self, pose, frame_id = None, frame_name = None):
166 """Change the robot reference frame""" 170 def setTool(self, pose, tool_id = None, tool_name = None):
171 """Change the robot TCP""" 176 """Pause the robot program""" 177 self.
addline(
' Move.Delay(%s)' % (time_ms*0.001))
180 """Changes the robot speed (in mm/s)""" 181 self.
addline(
' prof1.Speed = %0.2f' % speed_mms)
184 """Changes the robot acceleration (in %)""" 185 self.
addline(
' prof1.Accel = %0.2f' % accel_ptg)
186 self.
addline(
' prof1.Decel = %0.2f' % accel_ptg)
189 """Changes the robot joint speed (in deg/s)""" 190 self.
addlog(
'setSpeedJoints not defined')
193 """Changes the robot joint acceleration (in deg/s2)""" 194 self.
addlog(
'setAccelerationJoints not defined')
197 """Changes the zone data approach (makes the movement more smooth)""" 198 self.
addlog(
'setZoneData not defined (%.1f mm)' % zone_mm)
201 """Sets a variable (output) to a given value""" 202 if type(io_var) != str:
203 io_var =
'OUT[%s]' % str(io_var)
204 if type(io_value) != str:
211 self.
addline(
'%s=%s' % (io_var, io_value))
213 def waitDI(self, io_var, io_value, timeout_ms=-1):
214 """Waits for an input io_var to attain a given value io_value. Optionally, a timeout can be provided.""" 215 if type(io_var) != str:
216 io_var =
'IN[%s]' % str(io_var)
217 if type(io_value) != str:
225 self.
addline(
'WAIT FOR %s==%s' % (io_var, io_value))
227 self.
addline(
'WAIT FOR %s==%s TIMEOUT=%.1f' % (io_var, io_value, timeout_ms))
229 def RunCode(self, code, is_function_call = False):
230 """Adds code or a function call""" 232 code.replace(
' ',
'_')
233 if not code.endswith(
')'):
240 """Display a message in the robot controller screen (teach pendant)""" 244 self.
addline(
'Print "%s"' % message)
248 """Add a program line""" 249 self.
PROG = self.
PROG + newline +
'\n' 252 """Add a log message""" 253 self.
LOG = self.
LOG + newline +
'\n' 258 [x,y,z,r,p,w] = xyzrpw
268 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]])
271 """Test the post with a basic program""" 275 robot.ProgStart(
"Program")
277 robot.MoveJ(
Pose([200, 200, 500, 180, 0, 180]), [-46.18419, -6.77518, -20.54925, 71.38674, 49.58727, -302.54752] )
278 robot.MoveL(
Pose([200, 250, 15, 180, 0, -150]), [-41.62707, -8.89064, -30.01809, 60.62329, 49.66749, -258.98418] )
279 robot.MoveC(
Pose([200, 200, 34, 180, 0, -150]), [-43.73892, -3.91728, -35.77935, 58.57566, 54.11615, -253.81122],
Pose([200, 200, 15, 180, 0, -150]), [-43.73892, -3.91728, -35.77935, 58.57566, 54.11615, -253.81122])
287 if len(robot.LOG) > 0:
288 mbox(
'Program generation LOG:\n\n' + robot.LOG)
290 input(
"Press Enter to close...")
292 if __name__ ==
"__main__":
293 """Function to call when the module is executed by itself: test""" def MoveJ(self, pose, joints, conf_RLF=None)
def addline(self, newline)
def ProgFinish(self, progname)
def setZoneData(self, zone_mm)
def setTool(self, pose, tool_id=None, tool_name=None)
def __init__(self, robotpost=None, robotname=None, robot_axes=6, kwargs)
def setDO(self, io_var, io_value)
def UploadFTP(program, robot_ip, remote_path, ftp_user, ftp_pass)
def ProgSave(self, folder, progname, ask_user=True, show_result=True)
def ProgSendRobot(self, robot_ip, remote_path, ftp_user, ftp_pass)
def mbox(msg, b1='OK', b2='Cancel', frame=True, t=False, entry=None)
def waitDI(self, io_var, io_value, timeout_ms=-1)
def RunCode(self, code, is_function_call=False)
def addlog(self, newline)
def RunMessage(self, message, iscomment=False)
def Acceleration(self, accel_ptg)
def setSpeedJoints(self, speed_degs)
def setAccelerationJoints(self, accel_degss)
def setSpeed(self, speed_mms)
def getSaveFile(strdir='C:\\', strfile='file.txt', strtitle='Save file as ...')
def MoveC(self, pose1, joints1, pose2, joints2, conf_RLF_1=None, conf_RLF_2=None)
def setFrame(self, pose, frame_id=None, frame_name=None)
def MoveL(self, pose, joints, conf_RLF=None)
def ProgStart(self, progname)