
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