ในส่วนนี้จะแสดงวิธีการเปลี่ยนแปลงเล็กๆในหน่วยประมวลผล
ดังตัวอย่าง, การเปลี่ยนแปลง3อย่างจะถูกทำในหน่วยประมวลผล KUKA KRC4
●แทนที่ความเร็วสูงสุดถึง 500 mm/s. ถ้าแม้ว่าถ้าหุ่นยนต์ถูกเขียนให้เร็วกว่านี้, ความเร็วจะยังคงถูกจำกัด 500 mm/sในหน่วยประมวลผล
●สร้างแต่ละโปรแกรมโดยแยกไฟล์ออกจากกันและบังคับโปรแกรมให้มี 3000 เส้นของโค้ดแต่ละโปรแกรมเป็นส่วนใหญ่ โปรแกรมใหญ่จะถูกแบ่งให้เล็กลงและจะถูกเรียกตามลำดับ
ในส่วนก่อนหน้านี้แสดงวิธีการเปิดหน่วยประมวลผลที่แก้ไขอยู่:
1.เลือกโปรแกรม➔เพิ่ม/แก้ไขหน่วยประมวลผล
2.เลือก KUKA_KRC4
3.เลือก OK. หน่วยประมวลผลจะถูกแสดงในตัวแก้ไข Python IDLE
ตามส่วนดังต่อไปนี้แสดงว่าการเปลี่ยนแปลงจากคำแนะนำบนตัวแก้ไขอักษร
เพิ่มการเปลี่ยนแปลงดังต่อไปนี้เพื่อหลีกเลี่ยงการเพิ่มมากกว่าหนึ่งโปรแกรมต่อหนึ่งไฟล์และสร้างโปรแกรมด้วย 3000 เส้นของโค้ดส่วนใหญ่:
1.ตั้งค่าตัวแปรเป็น MAX_LINES_X_PROG ถึง 3000
2.ตั้งค่าตัวแปรเป็น INCLUDE_SUB_PROGRAMS ถึง False

ตามขั้นตอนเหล่านี้เพื่อตั้งค่าความเร็วอยู่ที่ 500 mm/s และหลีกเลี่ยงการตั้งค่าความเร็วที่สูงกว่านี้โดยใช้ RoboDK:
1.ตั้งคำจำกัดความฟังก์ชั่นsetSpeed (def setSpeed)
2.เพิ่มเส้นดังต่อไปนี้เพื่อสร้าง $VEL.CP ผลลัพธ์ซึ่งจะเปลี่ยนความเร็วเป็นm/s:
speed_mms = min(speed_mms, 500)

ส่วนนี้แสดงวิธีปรับแต่งการกำหนดเฟรมของหน่วยประมวลผลที่มีอยู่ ตัวอย่างเช่น การกำหนดเฟรมแบบกำหนดเองสำหรับหุ่นยนต์ KUKA
คุณสามารถใช้หน่วยประมวลผลที่คอมไพล์ไว้แล้ว และเขียนใหม่เฉพาะฟังก์ชันที่จำเป็นได้อย่างง่ายดาย (เช่น setFrame, setTool หรือ setSpeed)
ในตัวอย่างนี้ สมมติว่าเราต้องการปรับแต่งวิธีการกำหนดเบสสำหรับตัวควบคุม KUKA ตัวอย่างเช่น หากคุณต้องการให้บรรทัดต่อไปนี้ถูกส่งออกเมื่อกำหนดเฟรม:
BASE_DATA[8] = {FRAME: X:2000, Y:0, Z:0, A:0, B:0, C:0}
BAS (#BASE,8)
คุณเพียงแค่ต้องสร้างไฟล์ใหม่ชื่อ KUKA_Custom_Post.py ในโฟลเดอร์ C:/RoboDK/Posts/ ด้วยโค้ดเพียงไม่กี่บรรทัดต่อไปนี้ ซึ่งใช้หน่วยประมวลผลมาตรฐาน KUKA_KRC2 และเขียนทับการกำหนดเฟรม (ฟังก์ชัน setFrame):
from KUKA_KRC2 import RobotPost as MainPost
class RobotPost(MainPost):
def setFrame(self, pose, frame_id, frame_name):
"""Change the robot reference frame"""
self.addline('; BASE_DATA[8] = {FRAME: %s}' % (self.pose_2_str(pose)))
self.addline('BAS (#BASE,8)')
อย่างไรก็ตาม เราสามารถเพิ่มตัวกรองที่กำหนดเองตามเกณฑ์บางอย่างเพื่อแยกความแตกต่างระหว่างพฤติกรรมมาตรฐานกับการใช้งานที่กำหนดเองได้ ไฟล์หน่วยประมวลผลสามารถแก้ไขได้ดังนี้:
from KUKA_KRC2 import RobotPost as MainPost
class RobotPost(MainPost):
def setFrame(self, pose, frame_id, frame_name):
"""Change the robot reference frame"""
if frame_name == "Frame 4": # Enter any condition here
# Trigger the call to the default method (same as not overriding the function)
super(MainPost, self).setFrame(pose, frame_id, frame_name)
return
# Implement a custom setFrame
self.addline('; ---- Setting reference: %s ----' % frame_name)
self.addline('; BASE_DATA[8] = {FRAME: %s}' % (self.pose_2_str(pose)))
self.addline('BAS (#BASE,8)')
self.addline('; --------------------------')
เมื่อสร้างโปรแกรมสำหรับตัวควบคุม KUKA KRC มีหลายวิธีในการกำหนดระบบพิกัดหรือเฟรม คำจำกัดความของ setFrame ต่อไปนี้แสดงการใช้งานอีกแบบหนึ่งพร้อมตัวเลือกต่าง ๆ:
def setFrame(self, pose, frame_id, frame_name):
"""Change the robot reference frame"""
self.addline('; ---- Setting reference: %s ----' % frame_name)
# option 1: Build the kinematics based on the MACHINE_DEF array and the provided offset
#self.addline('$BASE = EK (MACHINE_DEF[2].ROOT, MACHINE_DEF[2].MECH_TYPE, { %s })' % self.pose_2_str(pose))
# option 2: Build the kinematics based on the EX_AX_DATA array and the provided offset
#self.addline('$BASE=EK(EX_AX_DATA[1].ROOT,EX_AX_DATA[1].EX_KIN, { %s })' % self.pose_2_str(pose))
# Option 3: Build the kinematics based on the EX_AX_DATA array and the pre-defined offset
#self.addline('; Using external axes')
#self.addline('; $BASE=EK(EX_AX_DATA[1].ROOT,EX_AX_DATA[1].EX_KIN,EX_AX_DATA[1].OFFSET)')
#self.addline('; $ACT_EX_AX= %i' % (self.nAxes - 6))
# Option 4: Use the BAS(#ex_BASE) init function from the BAS.src file
#self.addline('; BASE_DATA[%i] = {FRAME: %s}' % (self.BASE_ID, self.pose_2_str(pose)))
#self.addline('BAS(#ex_BASE,%i)' % self.BASE_ID)
# Option 5: Use the BAS(#BASE) init function from the BAS.src file
self.addline('; BASE_DATA[%i] = {FRAME: %s}' % (self.BASE_ID, self.pose_2_str(pose)))
self.addline('BAS (#BASE,%i)' % self.BASE_ID)
# Option 6: Directly take the base from the BASE_DATA array (usually what the BAS(#BASE) does)
# self.addline('$BASE=BASE_DATA[%i]' % self.BASE_ID)
self.addline('; --------------------------')
ส่วนนี้แสดงวิธีปรับแต่งหน่วยประมวลผลที่มีอยู่ เพื่อบังคับให้การเคลื่อนที่ของข้อต่อใช้ค่าข้อต่อแทนที่จะใช้ค่าพิกัดคาร์ทีเซียน
ในตัวอย่างนี้ เราจะนำการเปลี่ยนแปลงนี้ไปใช้กับตัวควบคุมหุ่นยนต์ ABB IRC5
1.ค้นหาคู่มือการเขียนโปรแกรมของตัวควบคุมหุ่นยนต์ของคุณ ในตัวอย่างนี้เราจะใช้คู่มือการเขียนโปรแกรม ABB IRC5 RAPID
2.ค้นหาคำสั่งสำหรับการเคลื่อนที่ของข้อต่อ ในกรณีนี้ คำสั่งสำหรับการเคลื่อนที่ของข้อต่อแบบสัมบูรณ์ของ ABB คือ MoveAbsJ คำสั่งนี้ต้องการตัวแปร jointtarget ซึ่งกำหนดค่าข้อต่อ

3.เลือก Program→Add/Edit Post Processor แล้วเลือกหน่วยประมวลผลที่คุณกำลังใช้อยู่เพื่อแก้ไข หากคุณกำลังใช้หน่วยประมวลผลที่ปรับแต่งได้อยู่แล้ว หน่วยประมวลผลนั้นจะถูกเลือกเป็นค่าเริ่มต้น
4.ค้นหาฟังก์ชัน MoveJ ในหน่วยประมวลผล ฟังก์ชันนี้กำหนดวิธีที่หน่วยประมวลผลสร้างคำสั่งสำหรับการเคลื่อนที่ของข้อต่อ สำหรับการเคลื่อนที่แบบเส้นตรง RoboDK จะใช้ MoveL แทน ใช้ Python แก้ไขบรรทัดที่เพิ่มเข้าไปในไฟล์โปรแกรม เพื่อให้ระบุข้อมูลมุมข้อต่อ ดังภาพต่อไปนี้

5.สุดท้าย คุณอาจต้องปรับวิธีที่หน่วยประมวลผลแปลงมุมข้อต่อหรือพิกัดท่าทาง (pose) ให้เป็นข้อความ ฟังก์ชัน angles_2_str และ pose_2_str กำหนดวิธีการแปลงมุมข้อต่อและพิกัดท่าทางให้เป็นข้อความตามลำดับ

หน่วยประมวลผล RoboDK ส่วนใหญ่ใช้ข้อมูลข้อต่อสำหรับการเคลื่อนที่ของข้อต่อ และใช้พิกัดคาร์ทีเซียนสำหรับการเคลื่อนที่แบบเส้นตรง ขอแนะนำให้เริ่มต้นจุดแรกของลำดับการเคลื่อนที่แบบเส้นตรงด้วยการเคลื่อนที่ของข้อต่อโดยระบุพิกัดข้อต่อเสมอ วิธีนี้จะช่วยป้องกันไม่ให้โปรแกรมเริ่มต้นด้วยการกำหนดค่าหุ่นยนต์ที่ไม่ถูกต้องและไปถึงจุดเอกฐานหรือขีดจำกัดของข้อต่อ