Website đang trong quá trình cập nhật

Vui lòng nhập mật khẩu để truy cập

Quyền truy cập sẽ được lưu trong 48 giờ

Lập trình Robot ABB IRB 1200: Từ cơ bản đến ứng dụng Real-world

Nổi bật Guide Nâng cao 20 phút đọc
550 Lượt xem
0 Thích
3 Bình luận
0 Lưu
Tags: Robot ABB IRB 1200 RAPID RobotStudio Pick and Place

Robot ABB IRB 1200: Giải pháp tối ưu cho ứng dụng nhỏ gọn

ABB IRB 1200 là robot công nghiệp compact với tải trọng 5-7kg và tầm với 700-900mm, lý tưởng cho các ứng dụng pick & place, assembly và machine tending. Với tốc độ cao và độ chính xác ±0.01mm, IRB 1200 là lựa chọn phổ biến trong điện tử và automotive.

1. Giới thiệu ngôn ngữ RAPID

RAPID (Robot Application Programming Interactive Dialogue) là ngôn ngữ lập trình cấp cao của ABB, dễ học và mạnh mẽ:

MODULE MainModule
    ! Khai báo biến
    VAR robtarget home_pos;
    VAR robtarget pick_pos;
    VAR robtarget place_pos;
    
    ! Chương trình chính
    PROC main()
        ! Khởi tạo vị trí home
        home_pos := [[300, 0, 400], [1, 0, 0, 0], [0, 0, 0, 0], [9E9, 9E9, 9E9, 9E9, 9E9, 9E9]];
        
        ! Di chuyển về home
        MoveJ home_pos, v1000, z50, tool0;
        
        ! Gọi routine pick and place
        PickAndPlace;
    ENDPROC
ENDMODULE

2. Các lệnh di chuyển cơ bản

2.1. MoveJ - Di chuyển khớp (Joint)

Di chuyển nhanh nhất giữa 2 điểm,궤đạo không phải đường thẳng:

MoveJ target_pos, v1000, z50, tool0;
! v1000: Tốc độ 1000mm/s
! z50: Zone radius 50mm (độ mượt)
! tool0: Tool coordinate system

2.2. MoveL - Di chuyển tuyến tính

Di chuyển theo đường thẳng, chính xác nhưng chậm hơn:

MoveL target_pos, v500, fine, tool0;
! fine: Dừng chính xác tại điểm (không zone)

2.3. MoveC - Di chuyển cung tròn

Di chuyển theo cung tròn qua 2 điểm:

MoveC via_point, target_pos, v500, z10, tool0;

3. Routine Pick and Place hoàn chỉnh

PROC PickAndPlace()
    ! Khai báo vị trí
    VAR robtarget pick_approach;
    VAR robtarget pick_pos;
    VAR robtarget place_approach;
    VAR robtarget place_pos;
    
    ! Định nghĩa vị trí pick
    pick_approach := [[400, 200, 300], [0, 1, 0, 0], [0, 0, 0, 0], [9E9, 9E9, 9E9, 9E9, 9E9, 9E9]];
    pick_pos := [[400, 200, 150], [0, 1, 0, 0], [0, 0, 0, 0], [9E9, 9E9, 9E9, 9E9, 9E9, 9E9]];
    
    ! Định nghĩa vị trí place
    place_approach := [[200, -300, 300], [0, 1, 0, 0], [0, 0, 0, 0], [9E9, 9E9, 9E9, 9E9, 9E9, 9E9]];
    place_pos := [[200, -300, 150], [0, 1, 0, 0], [0, 0, 0, 0], [9E9, 9E9, 9E9, 9E9, 9E9, 9E9]];
    
    ! ===== PICK SEQUENCE =====
    ! Di chuyển đến approach point
    MoveJ pick_approach, v1000, z50, tool0;
    
    ! Di chuyển thẳng xuống vị trí pick
    MoveL pick_pos, v300, fine, tool0;
    
    ! Đóng gripper (kích hoạt DO)
    SetDO DO_Gripper, 1;
    WaitTime 0.5;
    
    ! Nâng lên
    MoveL pick_approach, v500, z50, tool0;
    
    ! ===== PLACE SEQUENCE =====
    ! Di chuyển đến approach point
    MoveJ place_approach, v1000, z50, tool0;
    
    ! Di chuyển xuống vị trí place
    MoveL place_pos, v300, fine, tool0;
    
    ! Mở gripper
    SetDO DO_Gripper, 0;
    WaitTime 0.5;
    
    ! Nâng lên
    MoveL place_approach, v500, z50, tool0;
    
    ! Về home
    MoveJ home_pos, v1000, z50, tool0;
ENDPROC

4. Xử lý I/O và tích hợp Conveyor

Tích hợp robot với conveyor system sử dụng encoder tracking:

MODULE ConveyorTracking
    ! Khai báo conveyor object
    VAR intnum conveyor_int;
    
    PROC InitConveyor()
        ! Cấu hình conveyor tracking
        CnvGenLink cnv1, "//UNIT_1/S0024/Y1_AI1", "//UNIT_1/S0024/Y2_AI2";
        
        ! Kết nối interrupt khi phát hiện sản phẩm
        CONNECT conveyor_int WITH ProductDetected;
        ISignalDI DI_ProductSensor, HIGH, conveyor_int;
    ENDPROC
    
    TRAP ProductDetected
        VAR num conv_pos;
        
        ! Lấy vị trí hiện tại trên conveyor
        CnvReadActPos cnv1, conv_pos;
        
        ! Tracking object trên conveyor
        StartMove;
        MoveL RelTool(pick_pos, 0, 0, 0), v500, fine, tool0 \WObj:=wobj_conveyor;
        
        ! Pick from moving conveyor
        SetDO DO_Gripper, 1;
        WaitTime 0.3;
        
        ! Place at fixed location
        MoveJ place_pos, v800, z20, tool0 \WObj:=wobj0;
        SetDO DO_Gripper, 0;
        StopMove;
    ENDTRAP
ENDMODULE

5. RobotStudio Simulation

Trước khi deploy lên robot thật, luôn test trong RobotStudio:

  1. Tạo Station: Import robot IRB 1200 và thiết bị ngoại vi
  2. Create Work Object: Định nghĩa hệ tọa độ làm việc
  3. Teach Positions: Dạy các vị trí pick/place
  4. Simulate: Chạy simulation kiểm tra collision và cycle time
  5. Path Optimization: Tối ưu quỹ đạo giảm thời gian

6. Safety và Error Handling

PROC SafePickAndPlace()
    VAR num error_code;
    
    ! Error handler
    ERROR
        IF ERRNO = ERR_ROBLIMIT THEN
            ! Robot ngoài giới hạn
            TPWrite "Error: Robot out of reach!";
            MoveAbsJ home_joints, v500, fine, tool0;
        ELSEIF ERRNO = ERR_COLL THEN
            ! Phát hiện collision
            TPWrite "Collision detected! Emergency stop.";
            StopMove;
            ClearPath;
        ENDIF
        RETURN;
    
    ! Main logic
    PickAndPlace;
ENDPROC

Kết luận

Robot ABB IRB 1200 với ngôn ngữ RAPID cung cấp giải pháp linh hoạt và mạnh mẽ cho automation. Kết hợp với RobotStudio, bạn có thể phát triển và test ứng dụng an toàn trước khi triển khai thực tế.

🎯 Pro Tip: Sử dụng MultiMove để điều khiển nhiều robot đồng bộ, tăng năng suất lên 200%!



Lê Minh Cường 0 bình luận · Tham gia Apr 2025
1 tháng trước
LSTM model cho RUL prediction accuracy cao không? Có so sánh với traditional methods như SVR hay Random Forest không?
Lê Quang Minh 0 bình luận · Tham gia Mar 2024
1 tháng trước
Phần ví dụ về conveyor system rất thực tế. Tôi đang triển khai dự án tương tự và sẽ áp dụng code mẫu này. Thanks!
Trần Văn Hùng 0 bình luận · Tham gia Mar 2024
1 tháng trước
Có ai dùng PDM Professional không? Mình đang cân nhắc upgrade từ bản Standard.