库卡DEF promain程序.docx
《库卡DEF promain程序.docx》由会员分享,可在线阅读,更多相关《库卡DEF promain程序.docx(12页珍藏版)》请在冰豆网上搜索。
库卡DEFpromain程序
DEFpromain_0510()
;FOLDINI
;FOLDBASISTECHINI
BAS(#INITMOV,0)
INTERRUPTDECL128WHEN$flag[2]==trueDOBufferRecData()
;ENDFOLD(BASISTECHINI)
;FOLDUSERINI
;Makeyourmodificationshere
;ENDFOLD(USERINI)
;ENDFOLD(INI)
;FOLDINITIAL
forl=1to64
RecChar[l]=0
endfor
forl=1to64
last_Char[l]=0
endfor
FORM=1TO64
SENDCHAR[M]=0
ENDFOR
BZ=0
BX=0
BY=0
ZN=0
Xm=0.0
Ym=0.0
Zm=0.0
STATION_NO=0
RANK=0
ROW=0
LAST_STATION=0
LAST_RANK=0
LAST_ROW=0
VEL=0
;ENDFOLDINITIAL
PTP$POS_ACT
$ov_pro=5
PTP$POS_ACT
connectionname[]="XmlServer"
RET=EKI_Init("XmlServer")
RET=EKI_Open("XmlServer")
LOOP
IF$FLAG[1]THEN
;FOLDRESET
;BZ=0
;BX=0
;BY=0
;ZN=0
;Xm=0
;Ym=0
;Zm=0
;STATION_NO=0
;RANK=0
;ROW=0
;LAYER=0
;DOWN=FALSE
;UP=FALSE
;ENDFOLDRESET
;FOLDINITIAL
forl=1to64
RecChar[l]=0
endfor
FORM=1TO64
SENDCHAR[M]=0
ENDFOR
;ENDFOLDINITIAL
RECEIVE_CharAndData()
SEND_CharAndData()
IF((RECCHAR[1]=="G")AND(RECCHAR[2]=="O"))OR((RECCHAR[1]=="S")AND(RECCHAR[2]=="C")AND(RECCHAR[3]=="A")AND(RECCHAR[4]=="N"))THEN
TRANSFER()
ENDIF
$OV_PRO=VEL
IF(RANK<>LAST_RANK)OR(ROW<>LAST_ROW)OR(STATION_NO<>LAST_STATION)OR(RECCHAR[1]<>LAST_CHAR[1])OR(RECCHAR[2]<>LAST_CHAR[2])OR(RECCHAR[3]<>LAST_CHAR[3])OR(RECCHAR[4]<>LAST_CHAR[4])OR(RECCHAR[5]<>LAST_CHAR[5])OR(RECCHAR[6]<>LAST_CHAR[6])THEN
;FOLDCHECKSTATUS()
IF(RECCHAR[1]=="O")AND(RECCHAR[2]=="N")AND(RECCHAR[3]=="A")AND(RECCHAR[4]=="C")AND(RECCHAR[5]=="T")THEN
;ONACT
SENDCHAR[]="KUKAKR16-2ONACT"
WAITFOR$FLAG[1]
SEND_CHAR()
ENDIF
IF(RECCHAR[1]=="L")AND(RECCHAR[2]=="A")AND(RECCHAR[3]=="S")AND(RECCHAR[4]=="T")AND(RECCHAR[5]=="P")AND(RECCHAR[6]=="O")AND(RECCHAR[7]=="S")THEN
;LASTPOS
SENDCHAR[]="LASTPOS"
WAITFOR$FLAG[1]
SEND_CHAR()
ENDIF
IF(RECCHAR[1]=="O")AND(RECCHAR[2]=="F")AND(RECCHAR[3]=="F")AND(RECCHAR[4]=="A")AND(RECCHAR[5]=="C")AND(RECCHAR[6]=="T")THEN
;"OFFACT"
SENDCHAR[]="KUKAKR270 OFFACT"
SEND_CHAR()
SENDCHAR[]="FINISH"
WAITFOR$FLAG[1]
SEND_CHAR()
;;;!
!
!
!
Bytes[]="ERROR"
;;;!
!
!
!
RET=EKI_Send("BinaryStream",Bytes[]
ENDIF
;ENDFOLDCHECKSTATUS()
;FOLDPICK()
IF((RECCHAR[1]=="P")AND(RECCHAR[2]=="I")AND(RECCHAR[3]=="C")AND(RECCHAR[4]=="K"))AND((ZN==1)OR(ZN==2))THEN
IF(BZ>0)AND(BX>0)AND(BY>0)THEN
;PICKPIECE()
SENDCHAR[]="FINISH"
SEND_CHAR()
ENDIF
;FOLDINITIAL
forl=1to64
RecChar[l]=0
endfor
FORM=1TO64
SENDCHAR[M]=0
ENDFOR
;ENDFOLDINITIAL
RET=EKI_ClearBuffer("XmlServer","Sensor");clearconnection
ENDIF
;ENDFOLDPICK()
GoSCAN()
GoPrepallet()
GoRotation()
GoPallet()
GoLINE()
GoPalletUp()
;FOLDGOHOME()
IF(RECCHAR[1]=="H")AND(RECCHAR[2]=="O")AND(RECCHAR[3]=="M")AND(RECCHAR[4]=="E")THEN
gohome()
STORE_DATA()
WAITSEC0
SENDCHAR[]="FINISH"
WAITFOR$FLAG[1]
SEND_CHAR()
;FOLDINITIAL
forl=1to64
RecChar[l]=0
endfor
FORM=1TO64
SENDCHAR[M]=0
ENDFOR
;ENDFOLDINITIAL
WAITFOR$FLAG[1]
RET=EKI_ClearBuffer("XmlServer","Sensor");clearconnection
ENDIF
;ENDFOLDGOHOME()
ELSE
RecChar[]="VALUEINVALID"
SEND_CharANDdata()
ENDIF
ENDIF
ENDLOOP
END
DEF TOUCHPOINT()
;FOLDTOUCHPOINT()
SWITCH zn
CASE1
;TP=Xconvey_pick
;$BASE=$NULLFRAME
TP=Xstation3
$BASE=BASE_DATA[3]
CASE14
;TP=Xbuffur_pick
$BASE=BASE_DATA[2]
IF(ROW==1)AND(RANK==1)THEN
TP=Xbuffur_pick
ENDIF
IF(ROW==1)AND(RANK==3)THEN
TP=Xbuffur_pick3
ENDIF
IF(ROW==1)AND(RANK==5)THEN
TP=Xbuffur_pick5
ENDIF
CASE3
;TP=Xstation3
;$BASE=BASE_DATA[3]
TP=Xstation4
$BASE=BASE_DATA[4]
CASE4
TP=Xstation4
$BASE=BASE_DATA[4]
CASE5
TP=Xstation5
$BASE=BASE_DATA[5]
CASE6
TP=Xstation6_2
$BASE=$NULLFRAME
;$BASE=BASE_DATA[6]
CASE7
TP=Xstation6_1
$BASE=$NULLFRAME
;$BASE=BASE_DATA[7]
CASE8
TP=Xstation6_3
$BASE=$NULLFRAME
;$BASE=BASE_DATA[8]
CASE9
TP1=Xstation7
;$BASE=$NULLFRAME
$BASE=BASE_DATA[11]
CASE10
TP=Xstation6_4
$BASE=$NULLFRAME
;$BASE=BASE_DATA[8]
CASE11
TP=Xstation7_L
;$BASE=$NULLFRAME
$BASE=BASE_DATA[11]
CASE12
TP=XSCAN_L
$BASE=$NULLFRAME
;$BASE=BASE_DATA[8]
CASE13
TP=XSCAN_R
$BASE=$NULLFRAME
;$BASE=BASE_DATA[8]
CASE2
;TP=XBUFFER_PICK2
;$BASE=BASE_DATA[2]
TP=Xstation5
$BASE=BASE_DATA[5]
CASE15
TP=XJIGSCAN1
$BASE=$NULLFRAME
;$BASE=BASE_DATA[8]
CASE17
TP=XJIGSCAN2
$BASE=$NULLFRAME
CASE16
TP=XJIGSCAN3
$BASE=$NULLFRAME
CASE18
TP1=Xstation6_2R
$BASE=$NULLFRAME
CASE19
TP1=Xstation6_1R
$BASE=$NULLFRAME
CASE20
TP1=Xstation20_mid
$BASE=BASE_DATA[11]
CASE21
TP1=Xstation21_R
$BASE=BASE_DATA[11]
CASE22
TP=Xstation22_R_R
$BASE=BASE_DATA[11]
CASE23
TP=Xstation23
$BASE=BASE_DATA[3]
;$BASE=$NULLFRAME
CASE24
TP=Xstation24
$BASE=BASE_DATA[3]
;$BASE=$NULLFRAME
CASE25
TP=Xstation25
$BASE=BASE_DATA[3]
;$BASE=$NULLFRAME
CASE26
TP=Xstation26
;$BASE=$NULLFRAME
$BASE=BASE_DATA[3]
ENDSWITCH
;ENDFOLDTOUCHPOINT()
END
DEFCALCULATE()
;FOLDCALCULATE()
IF(ZN==9)or(zn==20)or(zn==21)or(zn==18)or(zn==19)THEN
PALLET_POS[RANK,ROW]=TP1
PALLET_POS[RANK,ROW].X=TP1.X+(RANK-1)*Xm
PALLET_POS[RANK,ROW].Y=TP1.Y+(ROW-1)*Ym
ELSE
PALLET_POS[RANK,ROW]=TP
PALLET_POS[RANK,ROW].X=TP.X+(RANK-1)*Xm
PALLET_POS[RANK,ROW].Y=TP.Y+(ROW-1)*Ym
ENDIF
PRE_PALLET=PALLET_POS[RANK,ROW]
PRE_PALLET.Z=PALLET_POS[RANK,ROW].Z+Zm
;ENDFOLDCALCULATE()
END
DEFGoPrepallet()
IF((RECCHAR[1]=="G")AND(RECCHAR[2]=="O"))THEN
IF(BZ>0)AND(BX>0)AND(BY>0)THEN
TOUCHPOINT()
CALCULATE()
PTPPRE_PALLET
STORE_DATA()
WAITSEC0
RECCHAR[]="FINISH"
Xm=$pos_act.X
Ym=$pos_act.Y
Zm=$pos_act.Z
WAITFOR$FLAG[1]
SEND_CharANDdata()
ENDIF
;FOLDINITIAL
forl=1to64
RecChar[l]=0
endfor
FORM=1TO64
SENDCHAR[M]=0
ENDFOR
;ENDFOLDINITIAL
WAITFOR$FLAG[1]
RET=EKI_ClearBuffer("XmlServer","Sensor");clearconnection
ENDIF
END
DEFGoPallet()
IF(RECCHAR[1]=="D")AND(RECCHAR[2]=="O")AND(RECCHAR[3]=="W")AND(RECCHAR[4]=="N")THEN
TOUCHPOINT()
CALCULATE()
;SET_TQ_VALUES(0,0,11,0,13,11)
IF(ZN==3)or(zn==2) THEN
PRE_PALLET=PALLET_POS[RANK,ROW]
PRE_PALLET.Z=PRE_PALLET.Z-160
LINPRE_PALLET
$OV_PRO=5
ENDIF
IF (zn==1)THEN
PRE_PALLET=PALLET_POS[RANK,ROW]
PRE_PALLET.Z=PRE_PALLET.Z-340
LINPRE_PALLET
$OV_PRO=5
ENDIF
;LINPALLET_POS[RANK,ROW]
;SET_TQ_VALUES(0,0,0,0,0,0)
STORE_DATA()
WAITSEC0
Xm=$pos_act.X
Ym=$pos_act.Y
Zm=$pos_act.Z
RECCHAR[]="FINISH"
WAITFOR$FLAG[1]
SEND_CharANDdata()
;FOLDINITIAL
forl=1to64
RecChar[l]=0
endfor
FORM=1TO64
SENDCHAR[M]=0
ENDFOR
;ENDFOLDINITIAL
WAITFOR$FLAG[1]
RET=EKI_ClearBuffer("XmlServer","Sensor");clearconnection
ENDIF
END
DEFGoLINE()
IF(RECCHAR[1]=="L")AND(RECCHAR[2]=="I")AND(RECCHAR[3]=="N")AND(RECCHAR[4]=="E")THEN
TOUCHPOINT()
CALCULATE()
;SET_TQ_VALUES(0,0,11,0,13,11)
IF(ZN==3)or(zn==2) THEN
PRE_PALLET=PALLET_POS[RANK,ROW]
PRE_PALLET.Z=PRE_PALLET.Z-180
LINPRE_PALLET
$OV_PRO=5
ENDIF
STORE_DATA()
WAITSEC0
Xm=$pos_act.X
Ym=$pos_act.Y
Zm=$pos_act.Z
RECCHAR[]="FINISH"
WAITFOR$FLAG[1]
SEND_CharANDdata()
;FOLDINITIAL
forl=1to64
RecChar[l]=0
endfor
FORM=1TO64
SENDCHAR[M]=0
ENDFOR
;ENDFOLDINITIAL
WAITFOR$FLAG[1]
RET=EKI_ClearBuffer("XmlServer","Sensor");clearconnection
ENDIF
END
DEFGoPalletUp()
IF(RECCHAR[1]=="U")AND(RECCHAR[2]=="P")THEN
TOUCHPOINT()
CALCULATE()
LINPRE_PALLET
STORE_DATA()
WAITSEC0
Xm=$pos_act.X
Ym=$pos_act.Y
Zm=$pos_act.Z
RECCHAR[]="FINISH"
WAITFOR$FLAG[1]
SEND_CharANDdata()
;FOLDINITIAL
forl=1to64
RecChar[l]=0
endfor
FORM=1TO64
SENDCHAR[M]=0
ENDFOR
;ENDFOLDINITIAL
WAITFOR$FLAG[1]
RET=EKI_ClearBuffer("XmlServer","Sensor");clearconnection
ENDIF
END
GLOBALDEFSEND_CHAR()
;FOLDSEND_CHAR()
RET=EKI_SetString(ConnectionName[],"Robot/CMD",SENDCHAR[])
RET=EKI_Send(ConnectionName[],"Robot")
;ENDFOLDSEND_CHAR()
END
GLOBALDEFSEND_CharAndData()
;FOLDSEND_CharAndData()
WAITSEC0.1
IF((RECCHAR[1]=="R")AND(RECCHAR[2]=="B")AND(RECCHAR[3]=="T")AND(RECCHAR[4]=="P")AND(RECCHAR[5]=="O")AND(RECCHAR[6]=="S"))THEN
Xm=$pos_act.X
Ym=$pos_act.Y
Zm=$pos_act.Z
ENDIF
RET=EKI_SetINT(ConnectionName[],"Robot/STATION",ZN)
RET=EKI_SetINT(ConnectionName[],"Robot/N1",BY)
RET=EKI_SetINT(ConnectionName[],"Robot/N2",BX)
RET=EKI_SetINT(ConnectionName[],"Robot/N3",BZ)
RET=EKI_SetREAL(ConnectionName[],"Robot/N4",Xm)
RET=EKI_SetREAL(ConnectionName[],"Robot/N5",Ym)
RET=EKI_SetREAL(ConnectionName[],"Robot/N6",Zm)
RET=EKI_SetString(ConnectionName[],"Robot/CMD",RecChar[])
RET=EKI_Send(ConnectionName[],"Robot")
;ENDFOLDSEND_CharAndData()
END
GLOBALDEFRECEIVE_CharAndData()
;FOLDRECEIVE_CharAndData()
WAITSEC0
waitfor$flag[2]and$flag[3]and$flag[4]and$flag[5]and$flag[6]and$flag[7]and$flag[8]and$flag[9]
ford=2to9
$flag[d]=false
endfor
RET=EKI_GetINT(ConnectionName[],"Sensor/STATION",ZN)
RET=EKI_GetINT(ConnectionName[],"Sensor/N1",BY)
RET=EKI_GetINT(ConnectionName[],"Sensor/N2",BX)
RET=EKI_GetINT(ConnectionName[],"Sensor/N3",BZ)
RET=EKI_GetREAL(ConnectionName[],"Sensor/N4",Xm)
RET=EKI_GetREAL(ConnectionName[],"Sensor/N5",Ym)
RET=EKI_GetREAL(ConnectionName[],"Sensor/N6",Zm)
RET=EKI_GetSTRING(ConnectionName[],"Sensor/CMD",RecChar[])
INTERRUPTON128
;ENDFOLDRECEIVE_CharAndData()
END
GLOBALDEFRECEIVE_Char()
;FOLDRECEIVE_Char()
waitfor$flag[9]
ford=2to9
$flag[d]=false
endfor
RET=EKI_GetSTRING(ConnectionName[],"Sensor/CMD",RecChar[])
;ENDFOLDRECEIVE_Char()
END
DEFTRANSFER()
;FOLDTRANSFER()
STATION_NO=ZN
RANK=BX
ROW=BY
VEL=BZ
;ENDFOLDTRANSFER()
END
DEFGoRotation()
IF((RECCHAR[1]=="R")AND(RECCHAR[2]=="O")AND(RECCHAR[3]=="T")AND(RECCHAR[4]=="A")AND(RECCHAR[5]=="R"))THEN
TOUCHPOINT()
CALCULATE()
PTPPRE_PALLET
STORE_DATA()
WAITSEC0
Xm=$pos_act.X
Ym=$pos_act.Y
Zm=$pos_act.Z
RECCHAR[]="FINISH"
WAITFOR$FLAG[1]