2023-07-12
Chương trình robot ABB của chúng tôi chủ yếu bao gồm ba mô-đun mô-đun:
1. Quản trị viên
2. Chương trình hành động cụ thể của máy (chúng tôi gọi là Công việc)
3. viết RegPos (dùng làm điểm đánh dấu sau khi thực hiện một vị trí cụ thể trong công việc)
Trong phần chương trình trên ta chủ yếu sửa module 2module bao gồm nhiều công việc, mỗi công việc là một chương trình cụ thể thực hiện chuyển động vị trí của robot.
Bất kỳ chương trình nào cũng có điểm vào chương trình, và các chương trình robot cũng vậy.Và lối vào chương trình robot của chúng tôi nằm trong chương trình Quản trị viên.Mã nguồn của main() của chương trình Admin như sau.Xin lưu ý rằng chúng ta đã thấy PROC main().Đơn vị lập trình cho robot ABB là thủ tục, viết tắt là PROC.Quy trình chính cho chương trình Quản trị viên này về cơ bản là sau khi tạo một máy mới:
PROC chính()
KẾT NỐI fTCPSpeedHigh VỚI IGenRobotMoving;
KẾT NỐI fTCPSpeedLow VỚI 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;
NẾU OpMode()=OP_MAN_PROG THÌ
TPErase;
TPReadFK FunkTaste,"Chọn công việc di chuyển bằng chế độ thủ công?","","","","Không","Có";
NẾU FunkTaste=5 THÌ
Thủ công;
KHÁC
TPErase;
TPWrite "Robot di chuyển ở chế độ thủ công";
TPWrite "Giao tiếp với Master-PLC";
KẾT THÚC
KHÁC
TypNum:=0;
Số công việc:=0;
Hương vị thú vị:=0;
KẾT THÚC
Khởi tạo;
Bộ giới hạn tốc độ;
pStartingPoint:=CRobT(Tool:=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);
NẾU (pPointAtStop.trans.X>=(pStartingPoint.trans.X+regTransDiff) HOẶC
pPointAtStop.trans.X<=(pStartingPoint.trans.X-regTransDiff) HOẶC
pPointAtStop.trans.Y>=(pStartingPoint.trans.Y+regTransDiff) HOẶC
pPointAtStop.trans.Y<=(pStartingPoint.trans.Y-regTransDiff) HOẶC
pPointAtStop.trans.Z>=(pStartingPoint.trans.Z+regTransDiff) HOẶC
pPointAtStop.trans.Z<=(pStartingPoint.trans.Z-regTransDiff)) HOẶC
(regStoppedAngleX>=(regStartingAngleX+regRotDiff) HOẶC
regStoppedAngleX<=(regStartingAngleX-regRotDiff) HOẶC
regStoppedAngleY>=(regStartingAngleY+regRotDiff) HOẶC
regStoppedAngleY<=(regStartingAngleY-regRotDiff) HOẶC
regStoppedAngleZ>=(regStartingAngleZ+regRotDiff) HOẶC
regStoppedAngleZ<=(regStartingAngleZ-regRotDiff)) HOẶC
pPointAtStop.robconf<>pStartingPoint.robconf SAU ĐÓ
Đặt DO13_RobotHasBeenMoved;
KẾT THÚC
WHILE di8_HsStartMain=0 LÀM
SetGO DO32_39_HsStepCode,0;
WaitDI DI10_ReadJobCode,1;
VelSet DI40_47_Override, 7500;!Tốc độ được đặt thành tối đa
ĐặtGO DO24_31_HsJobCode,DI24_31_JobCode;
SetDO DO10_HsReadJobCode,1;
WaitDI DI10_ReadJobCode,0;
SetDO DO10_HsReadJobCode,0;
!Gọi chương trình việc làm
CallByVar "Công việc",DI24_31_JobCode;
KẾT THÚC
ENDPROC
Chương trình này hơi dài và tôi không muốn giới thiệu quá nhiều.Tôi chủ yếu muốn nói về phần cuối cùng của chương trình, bởi vì phần này là phần thực hiện cách robot gọi chương trình Công việc trong mô-đun thứ hai khi di chuyển vị trí của nó.Mình nghĩ đây cũng là điều mà hầu hết những ai muốn tìm hiểu về lập trình robot đều muốn biết và hiểu nhất:
Thứ nhất, câu đầu tiên WHILE di8_ HsStartMain=0 DO
Lưu ý rằng 'DI8_HsStartMain' có nghĩa là 'Bắt tay' Bắt đầu chính xong'
Nghĩa là khi tín hiệu Bool HsStartMain của ngõ vào digital bằng 0 nghĩa là Main chưa được khởi động.Chúng ta cần thực thi While Do để hoàn thành tất cả mã.Có khá nhiều mã ở đây và tôi sẽ đưa ra một ví dụ, chẳng hạn như mã thứ hai
WaitDI DI10_ ReadJobCode, 1;Ý nghĩa của biến chú thích "DI10_ReadJobCode" là tín hiệu bắt tay Handshake "đọc Job" từ PLC.
Được rồi, vậy chính xác thì làm thế nào để robot thực hiện các công việc khác nhau?Đừng lo lắng, đó là nó:
!Gọi Jobprogram chỉ là một bình luận
CallByVar "Công việc", DI24_ 31_ Mã công việc;Câu này là bản chất.
Gửi yêu cầu của bạn trực tiếp cho chúng tôi