2023-07-12
โปรแกรมหุ่นยนต์ ABB ของเราส่วนใหญ่ประกอบด้วยโมดูลสามโมดูล:
1. ธุรการ
2. โปรแกรมการดำเนินการเฉพาะเครื่อง (เราเรียกว่างาน)
3. เขียน RegPos (ใช้เป็นเครื่องหมายหลังจากดำเนินการตำแหน่งเฉพาะในงาน)
ในส่วนข้างต้นของโปรแกรม เราแก้ไขโมดูล 2 โมดูลเป็นหลัก ซึ่งรวมถึงงานจำนวนมาก และแต่ละงานเป็นโปรแกรมเฉพาะที่ใช้การเคลื่อนไหวตำแหน่งหุ่นยนต์
โปรแกรมใดๆ ก็มีจุดเริ่มต้นโปรแกรม และโปรแกรมหุ่นยนต์ก็เช่นกันและทางเข้าโปรแกรมหุ่นยนต์ของเราอยู่ในโปรแกรมผู้ดูแลระบบซอร์สโค้ดของโปรแกรมผู้ดูแลระบบ main() มีดังต่อไปนี้โปรดทราบว่าเราได้เห็น PROC main()หน่วยการเขียนโปรแกรมสำหรับหุ่นยนต์ ABB คือขั้นตอน ซึ่งเรียกโดยย่อว่า PROCขั้นตอนหลักสำหรับโปรแกรม Admin นี้คือหลังจากสร้างเครื่องใหม่แล้ว:
หลัก PROC ()
เชื่อมต่อ fTCPSspeedHigh กับ IGenRobotMoving;
เชื่อมต่อ fTCPSspeedLow กับ IGenRobotMoving
ISignalAO virt_TCPSpeed_Robot1, AIO_ABOVE_HIGH, 0.02, 0, 0, fTCPSpeedHigh;
ISignalAO virt_TCPSpeed_Robot1, AIO_BELOW_HIGH, 0.015, 0, 0, fTCPSpeedLow;
ถ้า OpMode()=OP_MAN_PROG จากนั้น
TPErase;
TPReadFK FunkTaste,"เลือกงานย้ายตามโหมดแมนนวล?","","","","ไม่","ใช่";
ถ้า FunkTaste=5 แล้ว
คู่มือ;
อื่น
TPErase;
TPWrite "หุ่นยนต์เคลื่อนที่ในโหมดแมนนวล";
TPWrite "การสื่อสารกับ Master-PLC";
สิ้นสุด
อื่น
TypNum:=0;
จำนวนงาน:=0;
ฟังค์เทส:=0;
สิ้นสุด
เริ่มต้น;
ตัวจำกัดความเร็ว;
pStartingPoint:=CRobT(เครื่องมือ:=tool0 WObj:=wobj0);
regStartingAngleX:=EulerZYX(X, pStartingPoint.rot);
regStartingAngleY:=EulerZYX(Y, pStartingPoint.rot);
regStartingAngleZ:=EulerZYX(Z, pStartingPoint.rot);
regStoppedAngleX:=EulerZYX(X, pPointAtStop.rot);
regStoppedAngleY:=EulerZYX(Y, pPointAtStop.rot);
regStoppedAngleZ:=EulerZYX(Z, pPointAtStop.rot);
IF (pPointAtStop.trans.X>=(pStartingPoint.trans.X+regTransDiff) หรือ
pPointAtStop.trans.X<=(pStartingPoint.trans.X-regTransDiff) หรือ
pPointAtStop.trans.Y>=(pStartingPoint.trans.Y+regTransDiff) หรือ
pPointAtStop.trans.Y<=(pStartingPoint.trans.Y-regTransDiff) หรือ
pPointAtStop.trans.Z>=(pStartingPoint.trans.Z+regTransDiff) หรือ
pPointAtStop.trans.Z<=(pStartingPoint.trans.Z-regTransDiff)) หรือ
(regStoppedAngleX>=(regStartingAngleX+regRotDiff) หรือ
regStoppedAngleX<=(regStartingAngleX-regRotDiff) หรือ
regStoppedAngleY>=(regStartingAngleY+regRotDiff) หรือ
regStoppedAngleY<=(regStartingAngleY-regRotDiff) หรือ
regStoppedAngleZ>=(regStartingAngleZ+regRotDiff) หรือ
regStoppedAngleZ<=(regStartingAngleZ-regRotDiff)) หรือ
pPointAtStop.robconf<>pStartingPoint.robconf จากนั้น
ตั้งค่า DO13_RobotHasBeenMoved;
สิ้นสุด
ในขณะที่ di8_HsStartMain=0 DO
SetGO DO32_39_HsStepCode,0;
WaitDI DI10_ReadJobCode,1;
เวลเซ็ต DI40_47_Override, 7500;!ความเร็วถูกตั้งค่าไว้ที่สูงสุด
SetGO DO24_31_HsJobCode,DI24_31_JobCode;
SetDO DO10_HsReadJobCode,1;
WaitDI DI10_ReadJobCode,0;
SetDO DO10_HsReadJobCode,0;
!โทรหาโปรแกรมงาน
CallByVar "งาน",DI24_31_JobCode;
สิ้นสุด
ENDPROC
โปรแกรมนี้ค่อนข้างยาวและฉันไม่ต้องการแนะนำมากเกินไปฉันต้องการพูดคุยเกี่ยวกับส่วนสุดท้ายของโปรแกรมเป็นหลัก เนื่องจากส่วนนี้เป็นการดำเนินการตามวิธีที
ส่งคำถามของคุณโดยตรงถึงเรา