%_N_CMD_ACK_SPF
;$PATH=/_N_CUS_DIR
PROC CMD_ACK(INT T_CMD) SAVE DISPLOF SBLOF
$A_DBB[1]=0 $A_DBB[2]=0 ; 清除命令字
IF T_CMD<>10 GOTOF _AUX
; 判断刀库旋转方向 vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
_ZSFR[2]=$MN_USER_DATA_INT[15]/2 ; 最大刀位数 /2
IF _TM[0]<>3 GOTOF _L_PT
$A_DBW[4]=$P_TOOLP ; 目标刀位送到 PLC
_ZSFR[0]=$P_TOOLNO-$A_DBW[6]
IF _ZSFR[0]==0 GOTOF
$A_DBW[4]=$P_TOOLNO
GOTOF _R_DIF
:
IF _TM[19]<>3 GOTOF _DD_EE
GOTOF _N_MGZ
_DD_EE:
_ZSFR[0]=$P_TOOLP-$A_DBW[6]
GOTO _R_DIF
_FF_AD:
_ZSFR[0]=$P_TOOLP-$P_TOOLNO
GOTOF _R_DIF
_L_PT:
$A_DBW[4]=$P_TOOLP ; 目标刀位送到 PLC
_ZSFR[0]=$P_TOOLP-$A_DBW[6]
_R_DIF:
IF _ZSFR[0]==0 GOTOF _N_MGZ ; 刀库当前刀位等于编程刀具刀库无需旋
转
IF (((_ZSFR[0]>0)AND(_ZSFR[0]<=_ZSFR[2]))OR((_ZSFR[0]<0)AND(_ZSFR[0]<-_ZSFR[2])))
GOTOF _MGZ_P
IF (((_ZSFR[0]>0)AND(_ZSFR[0]>=_ZSFR[2]))OR((_ZSFR[0]<0)AND(_ZSFR[0]>-_ZSFR[2])))
GOTOF _MGZ_N
_MGZ_P:
STOPRE
$A_DBB[0]=5
GOTOF _Z_POS
_MGZ_N:
STOPRE
$A_DBB[0]=6
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_Z_POS: ; Z 轴进入还刀准备位置
G153 G1 Z=$MN_USER_DATA_FLOAT[1] F=$MN_USER_DATA_FLOAT[4]
GOTOF _WAITING
_AUX:
$A_DBB[0]=T_CMD
_WAITING:
IF $MN_USER_DATA_HEX[15] B_AND 'B10000000'
MSG("<<< 等待 >>>: 命令字 $A_DBB[0]="<<$A_DBB[0]<<" 送到 PLC")
ENDIF
_W_CMD: ; 等待 PLC接受命令
IF $A_DBB[1]<>$A_DBB[0] GOTOB _W_CMD
IF $MN_USER_DATA_HEX[15] B_AND 'B10000000'
MSG("<<< 等待 >>>: 命令 $A_DBB[0]="<<$A_DBB[0]<<" 完成 ")
ENDIF
_W_ACK: ; 等待 PLC完成任务
IF $A_DBB[2]<>$A_DBB[1] GOTOB _W_ACK
_N_MGZ:
RET
%_N_FIXPOINT_SPF
;$PATH=/_N_CUS_DIR
PROC FIXPOINT SAVE DISPLOF SBLOF
IF $MN_USER_DATA_HEX[15] B_AND 'B00000001' ;
ENDIF
IF $MN_USER_DATA_HEX[15] B_AND 'B00000010' ;
ENDIF
RET
%_N_INI_SPF
;$PATH=/_N_CUS_DIR
PROC INI SAVE DISPLOF
;=================================================================
;IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
;II 刀库初始化 II
;II 初始化的目的是将 PLC的刀库计数器与实际刀库位置对应 II
;II 1. 如果刀库具有零点开关 , 则可在任何时候回零 II
;II 2. 如果刀库没有零点开关 , 则需在刀库手动方式下将刀库转到 II
;II 一号刀位 , 然执行该初始化程序 II
;IIIIIIIIIIIIIIIIII
换刀用户程序(802d) 来自淘豆网m.daumloan.com转载请标明出处.