Tải bản đầy đủ (.doc) (17 trang)

Tài liệu Ứng dụng lập trình cho các robot trong hệ thống MiniCIM pdf

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (121.99 KB, 17 trang )

ng d ng l p trình cho các robot trong h th ngỨ ụ ậ ệ ố
MiniCIM
Trong phần này sẽ nêu ra hai chương trình lập trình một ứng dụng cho robot, một
chương trình cho robot làm việc với máy tiện CNC và một chương trình cho robot làm việc
với máy khoan/phay CNC trong hệ thống MiniCIM.
Chương trình robot thực hiện các chức năng cấp phôi lên các Pallet, cấp phôi cho máy
tiện và chờ gia công xong để đưa chi tiết đã gia công xong ra khỏi máy tiện.
Giải thích tóm tắt nhiệm vụ của robot trong chương trình:
Đây là chương trình cho robot thực hiện trong hệ thống MiniCIM, robot sẽ thực hiện
một số chức năng trong dây chuyền chế tạo và lắp ráp hộp giảm tốc dạng mô phỏng. Hệ
thống được điều khiển bằng máy tính trung tâm với phầm mềm CimSoft. Các tín hiệu từ
phần mềm CimSoft và từ máy tiện CNC là các tín hiệu đầu vào quyết định thời điểm và
trình tự thực hiện các công việc của robot. Đầu tiên, khi tại trạm thứ nhất có pallet dừng lại,
robot sẽ lần lượt cấp phôi cho hai pallet (phôi của nắp hộp giảm tốc và của thân hộp giảm
tốc). Tiếp đến khi pallet thức hai dừng lại tại trạm 2 robot sẽ gắp phôi (phôi thân hộp) từ
pallet cấp cho máy tiện đồng thời báo tín hiệu cho máy tiện CNC hoạt động. Trong lúc đó
robot sẽ quay lại trạm 1 để cấp tiếp các bánh răng cho pallet thức nhất khi này đã được kẹp
tại trạm 1. Sau cùng, khi máy tiện CNC tiện xong thân hộp giảm tốc báo ra tín hiệu hoàn
thành robot sẽ quay lại trạm 2 để gắp chi tiết ra cho lên pallet để di chuyển chi tiết đến vị trí
tiếp theo trong dây chuyền.
Chương trình:
//Mảng “KHO_CHUA_NAP” chứa vị trí các điểm cho load nắp
// Mảng “KHO_CHUA_THAN” chứa vị trí các điểm cho load thân
// Mảng “KHO_CHUA_BR1” chứa vị trí các điểm cho load nắp BR1
// Mảng “KHO_CHUA_BR2” chứa vị trí các điểm cho load nắp BR2
//Mảng “LATHE_THAN” chứa vị trí các điểm tại trạm tiện
// Danh sách vào ra
// OUTPUTS INPUTS
// 01. RESET ASRS POSITIONER 01. ASRS PALLET READY
// 02. RESET LATHE POSITIONER 02. LATHE PALLET READY
// 03 LATHE DONE 03. LATHE START


// 04. OPEN CHUCK
// MAIN PROGRAM
CimData$ = "INIT" //INITIALIZE ETHERNET DATA VARIABLE
DataWaiting = 0 //INITIALIZE ETHERNET DATA WAITING FLAG
ProgComplete = 0 //INITIALIZE ETHERNET PALLET DONE FLAG1
ProgComplete2 = 0 //INITIALIZE ETHERNET PALLET DONE FLAG2

MANG_NAP = 1
MANG_THAN = 1
MANG_BR1 = 1
MANG_BR2 = 1

LOADED = 0 //SET LATHE LOADED FLAG TO 0 (NOT LOADED)
//Khai báo các mảng điểm
POINT KHO_CHUA_NAP[10]
POINT KHO_CHUA_THAN[10]
POINT KHO_CHUA_BR1[10]
POINT KHO_CHUA_BR2[10]
POINT LATHE_THAN[20]

XONGBR = 0
J=1 //Biến chọn Pallet để load chương trình cho đúng thứ tự
//Nếu J=1 thì load nắp hộp cho Pallet 01
//Nếu J=2 thì load thân hộp cho Pallet 02
//Nếu J=3 thì load các bánh răng cho Pallet 01
PRINTLN "SET OUTPUTS TO ZERO"
FOR K = 1 to 16
WRITEO K,0
NEXT


SPEED 200 //INITIAL ROBOT CONDITIONS
ACCEL 50
RELEASE

PMOVE KHO_CHUA_THAN[5] // Chờ trước trạm 1
//ETHERNET DECISION LOOP FOR WHICH ROUTINE TO EXECUTE
ETHERLOOP:
IF DataWaiting = 1 then

IF CimData$ = "NOPART,1" AND MANG_NAP<4 AND J=1 THEN
PRINTLN "MESSAGE = ",CimData$
DataWaiting = 0 // RESET ETHERNET DATA FLAG
CALL LOAD_NAP //Gọi chương trình con load nắp
PRINTLN "MESSAGE = ",CimData$
GOTO ETHERLOOP

ELSE IF CimData$ = "NOPART,1" AND MANG_THAN<4 AND J=2 THEN
PRINTLN "MESSAGE = ",CimData$
DataWaiting = 0 // RESET ETHERNET DATA FLAG
CALL LOAD_THAN // Gọi chương trình load thân
GOTO ETHERLOOP

ELSE IF CimData$ = "NOPART,1" AND MANG_BR1<4 AND J=3 THEN
PRINTLN "MESSAGE = ",CimData$
DataWaiting = 0 // RESET ETHERNET DATA FLAG
CALL LOAD_BR // Gọi chương trình load các bánh răng
GOTO ETHERLOOP

ELSE IF CimData$ = "NOPART,1" AND J=4 THEN
PRINTLN "MESSAGE = ",CimData$

DataWaiting = 0 // RESET ETHERNET DATA FLAG
CALL DIQUA // Gọi chương trình con DIQUA
GOTO ETHERLOOP
ELSE IF CimData$ = "11-003,2" THEN
PRINTLN "MESSAGE = ",CimData$
DataWaiting = 0 // RESET ETHERNET DATA FLAG
CALL THAN_ILATHE // Gọi chương trình con cấp phôi
GOTO ETHERLOOP
ELSE
PRINTLN "MESSAGE FAILED =",CimData$
DataWaiting = 0 // RESET ETHERNET DATA FLAG
GOTO ETHERLOOP
ENDIF
ELSE IF INP(3) = 1 AND LOADED=1 AND XONGBR>0 THEN
// RECEIVED LATHE DONE SIGNAL
CALL THAN_OLATHE // Gọi chương trình con THAN_OLATHE
ENDIF
GOTO ETHERLOOP
END

SUB LOAD_NAP
PRINTLN "LOADING NAP HOP GIAM TOC"
SPEED 200
PMOVE KHO_CHUA_NAP[5]
RETRY:
PMOVE KHO_CHUA_NAP[2]
SPEED 80
GRWIDTH 820
PMOVE KHO_CHUA_NAP[1]
GRASP

ZMOVE 300
ZTLMOVE -1000
SPEED 150
DIST=MEASURE()
PRINTLN "PART MEASURES = ",DIST
IF DIST < 600 THEN
RELEASE
MANG_NAP=MANG_NAP+1

IF MANG_NAP=5 THEN
PMOVE <HOME>
MANG_NAP=1
ENDIF

BRANCH RETRY:
ENDIF

//PMOVE KHO_CHUA_NAP[5]
SPEED 200
PMOVE KHO_CHUA_NAP[6]
PMOVE KHO_CHUA_NAP[8]
SPEED 50
PMOVE KHO_CHUA_NAP[7]
RELEASE
SPEED 200
PMOVE KHO_CHUA_NAP[8]
ProgComplete = 1 // TURN ON ETHERNET PALLET DONE FLAG
PMOVE KHO_CHUA_NAP[6]
PMOVE KHO_CHUA_NAP[5]
J=2 //Pallet tiếp theo là load thân

MANG_NAP=MANG_NAP+1
DELAY 100
RETURN

SUB LOAD_THAN
PRINTLN "LOADING THAN HOP GIAM TOC"
SPEED 200
PMOVE KHO_CHUA_THAN[5]
RETRY1:
PMOVE KHO_CHUA_THAN[2]
SPEED 80
GRWIDTH 820
PMOVE KHO_CHUA_THAN[1]
GRASP
ZMOVE 300
ZTLMOVE -1000
SPEED 150
DIST=MEASURE()
PRINTLN "PART MEASURES = ",DIST
IF DIST < 600 THEN
RELEASE
MANG_THAN=MANG_THAN+1
IF MANG_THAN=5 THEN
PMOVE <HOME>
MANG_THAN=1
ENDIF

BRANCH RETRY1:
ENDIF


//PMOVE KHO_CHUA_THAN[5]
SPEED 200
PMOVE KHO_CHUA_THAN[6]
PMOVE KHO_CHUA_THAN[8]
SPEED 50
PMOVE KHO_CHUA_THAN[7]
RELEASE
SPEED 200
PMOVE KHO_CHUA_THAN[8]
ProgComplete = 1 // TURN ON ETHERNET PALLET DONE FLAG
//PMOVE KHO_CHUA_THAN[6] // Wait at Conveyor
PMOVE LATHE_THAN[1]
J=3 //Pallet tiếp theo là gắp bánh răng
MANG_THAN=MANG_THAN+1
DELAY 100

RETURN

SUB LOAD_BR
PRINTLN "LOADING CAC BANHRANG CHO HOP GIAM TOC"

//Cấp bánh răng thứ hai lên pallet
SPEED 200
PMOVE LATHE_THAN[1]
PMOVE KHO_CHUA_BR2[5]
RETRY2:
PMOVE KHO_CHUA_BR2[2]
SPEED 80
GRWIDTH 150
PMOVE KHO_CHUA_BR2[1]

GRASP
ZMOVE 300
ZTLMOVE -1000
SPEED 150
DIST=MEASURE()
PRINTLN "PART MEASURES = ",DIST
IF DIST < 10 THEN
RELEASE
MANG_BR2=MANG_BR2+1
IF MANG_BR2=5 THEN
PMOVE <HOME>
MANG_BR2=1
ENDIF

BRANCH RETRY2:
ENDIF

SPEED 150
PMOVE KHO_CHUA_BR2[5]
SPEED 200
PMOVE KHO_CHUA_BR2[6]
PMOVE KHO_CHUA_BR2[8]
SPEED 60
PMOVE KHO_CHUA_BR2[9]
SPEED 20
PMOVE KHO_CHUA_BR2[7]
RELEASE
SPEED 200
PMOVE KHO_CHUA_BR2[8]
PMOVE KHO_CHUA_BR2[6]


// Cấp bánh răng thứ nhất lên Pallet
PMOVE KHO_CHUA_BR1[5]
RETRY3:
PMOVE KHO_CHUA_BR1[2]
SPEED 80
GRWIDTH 150
PMOVE KHO_CHUA_BR1[1]
GRASP
ZMOVE 300
ZTLMOVE -1000
SPEED 150
DIST=MEASURE()
PRINTLN "PART MEASURES = ",DIST
IF DIST < 10 THEN
RELEASE
MANG_BR1=MANG_BR1+1
IF MANG_BR1=5 THEN
PMOVE <HOME>
MANG_BR1=1
ENDIF

BRANCH RETRY3:
ENDIF

PMOVE KHO_CHUA_BR1[5]
SPEED 200
PMOVE KHO_CHUA_BR1[6]
PMOVE KHO_CHUA_BR1[8]
SPEED 60

PMOVE KHO_CHUA_BR1[9]
SPEED 20
PMOVE KHO_CHUA_BR1[7]
RELEASE
SPEED 100
PMOVE KHO_CHUA_BR1[8]
SPEED 200

IF XONGBR>0 THEN
ProgComplete = 1
ENDIF

PMOVE KHO_CHUA_BR1[6]
J=4 //Pallet tiếp theo sẽ không làm gì mà để đi qua
MANG_BR1=MANG_BR1+1
MANG_BR2=MANG_BR2+1
DELAY 100
IF XONGBR = 0 THEN
PMOVE LATHE_THAN[4]
ELSE
PMOVE KHO_CHUA_BR1[5]
ENDIF

XONGBR=XONGBR+1
RETURN

// Chương trình con đưa thân vào máy tiện để gia công

×