KUKA 通信子程序 p00src 注释.docx
《KUKA 通信子程序 p00src 注释.docx》由会员分享,可在线阅读,更多相关《KUKA 通信子程序 p00src 注释.docx(11页珍藏版)》请在冰豆网上搜索。
![KUKA 通信子程序 p00src 注释.docx](https://file1.bdocx.com/fileroot1/2023-1/2/7c62be24-d0e7-4df4-8b3d-df5b5ec774b8/7c62be24-d0e7-4df4-8b3d-df5b5ec774b81.gif)
KUKA通信子程序p00src注释
KUKA通信子程序p00.src注释
DEF P00(COMMAND :
IN,PGNO_FUNCT :
IN,P_ID[] :
OUT,E_NO :
IN)
DECLP00_COMMAND COMMAND
DECLFUNCT_TYPE PGNO_FUNCT
DECLCHAR P_ID[]
INT E_NO
E6AXISAK_AXIS STRUCE6AXISREALA1,A2,A3,A4,A5,A6,E1,E2,E3,E4,E5,E6 $OPERATE.SRC
REALAX_DIST
SWITCH COMMAND
CASE#INIT_EXT
INIT_EXT()
CASE#EXT_PGNO
EXT_PGNO(PGNO_FUNCT )
CASE#CHK_HOME
CHK_HOME()
CASE#EXT_ERR
EXT_ERR(P_ID[],E_NO)
ENDSWITCH
END
;********************************
; 函数:
初始化外部接口
;********************************
DEF INIT_EXT()
BOOLERROR
INTN
PGNO_ERROR=0
;********************************
;CHECKHOME
;********************************
;********************************
;INITPGNO_REQUNDAPPL_RUN
;********************************
IF(PGNO_REQ>0)THEN
$OUT[PGNO_REQ]=FALSE
ENDIF
IF(PGNO_REQ<0)THEN
$OUT[-PGNO_REQ]=TRUE
ENDIF
IF(APPL_RUN>0)THEN
$OUT[APPL_RUN]=FALSE
ENDIF
IFPLC_ENABLEAND(ERR_TO_PLC>0)THEN
$OUT[ERR_TO_PLC]=FALSE
ENDIF
IFREFLECT_PROG_NR==1THEN
FORN=0TOPGNO_LENGTH-1
$OUT[PGNO_FBIT_REFL+N]=FALSE
ENDFOR
ENDIF
$LOOP_MSG[]=" "
;*******************
REPEAT
;***********************************************************
ERROR=FALSE
REPEAT
IF($I_O_ACTCONF==FALSE)THEN
ERROR=TRUE
P00_MSG(13)
ENDIF
UNTIL($I_O_ACTCONF==TRUE)
SWITCH PGNO_TYPE
;*********************************************************
CASE1,2;bci-coding,bcd-coding
;*********************************************************
;*****CHECKPGNO_LENGTH*****
IF(PGNO_LENGTH<1)THEN
ERROR=TRUE;pgno_length
P00_MSG
(2)
ENDIF
IF(PGNO_TYPE==1)THEN;bci-coding
IF(PGNO_LENGTH>16)THEN
ERROR=TRUE;pgno_length
P00_MSG
(2)
ENDIF
ENDIF
IF(PGNO_TYPE==2)THEN;bcd-coding
SWITCH PGNO_LENGTH
CASE4,8,12,16
DEFAULT
ERROR=TRUE;pgno_length
P00_MSG(3)
ENDSWITCH
ENDIF
;*****CHECKPGNO_FBIT*****
IF(PGNO_FBIT<1)THEN
ERROR=TRUE;pgno_fbit
P00_MSG(4)
ENDIF
;*****CHECKPGNO_REQ*****
IF(PGNO_REQ==0)THEN
ERROR=TRUE;pgno_req
P00_MSG(7)
ENDIF
IF(PGNO_REQ>0)THEN;activehigh
$OUT[PGNO_REQ]=FALSE;reset
WAITSEC0.2;delayforplc
ENDIF
IF(PGNO_REQ<0)THEN;activelow
$OUT[PGNO_REQ*(-1)]=TRUE;reset
WAITSEC0.2;delayforplc
ENDIF
;*********************************************************
CASE3;oneoutofn
;*********************************************************
;*****CHECKPGNO_LENGTH*****
IF(PGNO_LENGTH<1)THEN
ERROR=TRUE;pgno_length
P00_MSG
(2)
ENDIF
IF(PGNO_LENGTH>16)THEN
ERROR=TRUE;pgno_length
P00_MSG
(2)
ENDIF
;*****CHECKPGNO_FBIT*****
IF(PGNO_FBIT<1)THEN
ERROR=TRUE;pgno_fbit
P00_MSG(4)
ENDIF
;*********************************************************
DEFAULT;PGNO_TYPEwrongtype
;*********************************************************
ERROR=TRUE;pgno_type
P00_MSG
(1)
ENDSWITCH
;***********************************************************
UNTIL(ERROR==FALSE)
END
DEF EXT_PGNO(FUNCT)
;********************************
;Function:
communicationprogram
; forexternalmode
;********************************
DECLFUNCT_TYPEFUNCT
INTI,J,K,L,M,N
BOOLP_RECV
BOOLP_CALC
J=1
K=0
L=1
P_RECV=FALSE
P_CALC=FALSE
IF(APPL_RUN>0)THEN
$OUT[APPL_RUN]=FALSE
ENDIF
SWITCH FUNCT
;*******************
CASE#PGNO_ACKN
;*******************
IF(PGNO_REQ>0)THEN
$OUT[PGNO_REQ]=FALSE
ENDIF
IF(PGNO_REQ<0)THEN
$OUT[PGNO_REQ*(-1)]=TRUE
ENDIF
IF(APPL_RUN>0)THEN
$OUT[APPL_RUN]=TRUE
ENDIF
;*******************
CASE#PGNO_GET
;*******************
IFREFLECT_PROG_NR==1THEN
FORN=0TOPGNO_LENGTH-1
$OUT[PGNO_FBIT_REFL+N]=FALSE
ENDFOR
ENDIF
SWITCH PGNO_TYPE
;*******************
CASE1,2
;*******************
IF(PGNO_VALID>0)THEN
WAITFOR $IN[PGNO_VALID]==FALSE
ENDIF
IF(PGNO_VALID==0)THEN
WAITFOR $EXT_START==FALSE
ENDIF
IF(PGNO_VALID<0)THEN
WAITFOR $IN[PGNO_VALID*(-1)]==TRUE
ENDIF
IF(PGNO_REQ>0)THEN
$OUT[PGNO_REQ]=TRUE
ENDIF
IF(PGNO_REQ<0)THEN
$OUT[PGNO_REQ*(-1)]=FALSE
ENDIF
IF(PGNO_VALID>0)THEN
REPEAT
IFREFLECT_PROG_NR==1THEN
FORI=0TO PGNO_LENGTH-1
IF$IN[PGNO_FBIT+I]==TRUETHEN
$OUT[PGNO_FBIT_REFL+I]=TRUE
ELSE
$OUT[PGNO_FBIT_REFL+I]=FALSE
ENDIF
ENDFOR
ENDIF
$LOOP_MSG[]="WaitforPGNO_VALID=True"
UNTIL $IN[PGNO_VALID]==TRUE
$LOOP_MSG[]=" "
ENDIF
IF(PGNO_VALID==0)THEN
REPEAT
IFREFLECT_PROG_NR==1THEN
FORI=0TO PGNO_LENGTH-1
IF$IN[PGNO_FBIT+I]==TRUETHEN
$OUT[PGNO_FBIT_REFL+I]=TRUE
ELSE
$OUT[PGNO_FBIT_REFL+I]=FALSE
ENDIF
ENDFOR
ENDIF
$LOOP_MSG[]="Waitfor$EXT_START=True"
UNTIL $EXT_START==TRUE
$LOOP_MSG[]=" "
ENDIF
IF(PGNO_VALID<0)THEN
REPEAT
IFREFLECT_PROG_NR==1THEN
FORI=0TO PGNO_LENGTH-1
IF$IN[PGNO_FBIT+I]==TRUETHEN
$OUT[PGNO_FBIT_REFL+I]=TRUE
ELSE
$OUT[PGNO_FBIT_REFL+I]=FALSE
ENDIF
ENDFOR
ENDIF
$LOOP_MSG[]="WaitforPGNO_VALID=False"
UNTIL $IN[PGNO_VALID*(-1)]==FALSE
$LOOP_MSG[]=" "
ENDIF
PGNO=0
SWITCH PGNO_TYPE
;*******************
CASE1
;*******************
FORI=0TO PGNO_LENGTH-1
IF$IN[PGNO_FBIT+I]THEN
IFREFLECT_PROG_NR==1THEN
$OUT[PGNO_FBIT_REFL+I]=TRUE
ENDIF
PGNO=PGNO+J
ENDIF
J=J*2
ENDFOR
;*******************
CASE2
;*******************
FORI=0TO PGNO_LENGTH-1 STEP 4
N=0
J=1
FORM=ITO I+3
IF$IN[PGNO_FBIT+M]THEN
N=N+J
IFREFLECT_PROG_NR==1THEN
$OUT[PGNO_FBIT_REFL+M]=TRUE
ENDIF
ENDIF
J=J*2
ENDFOR
IF(N>9)THEN
PGNO_ERROR=2
PGNO=0
EXIT
ELSE
PGNO=PGNO+N*L
L=L*10
ENDIF
ENDFOR
ENDSWITCH
IF(PGNO_ERROR<>2)THEN
IF(PGNO_PARITY>0)THEN
P_RECV=$IN[PGNO_PARITY]
FORI=0TO PGNO_LENGTH-1
P_CALC=P_CALCEXOR$IN[PGNO_FBIT+I]
ENDFOR
IF(P_RECV<>P_CALC)THEN
PGNO=0
PGNO_ERROR=1
ELSE
PGNO_ERROR=0
ENDIF
ENDIF
IF(PGNO_PARITY<0)THEN
P_RECV=$IN[PGNO_PARITY*(-1)]
FORI=0TO PGNO_LENGTH-1
P_CALC=P_CALCEXOR$IN[PGNO_FBIT+I]
ENDFOR
IF(P_RECV<>NOT(P_CALC))THEN
PGNO=0
PGNO_ERROR=1
ELSE
PGNO_ERROR=0
ENDIF
ENDIF
ENDIF
;*******************
CASE3
;*******************
IFPGNO>0THEN
WAITFOR $IN[PGNO_FBIT+PGNO-1]==FALSE
ENDIF
K=0
REPEAT
FORI=0TO PGNO_LENGTH-1
IF$IN[PGNO_FBIT+I]THEN
IFK==0THEN
K=I+1
ELSE
PGNO_ERROR=0
K=0
ENDIF
ENDIF
ENDFOR
UNTIL((K<>0)OR(PGNO_ERROR==0))
PGNO=K
ENDSWITCH
;***********************************************************
CASE#PGNO_FAULT
;***********************************************************
IFPGNO_ERROR==1THEN
P00_MSG(10)
ENDIF
IFPGNO_ERROR==2THEN
P00_MSG(12)
ENDIF
IFPGNO_ERROR==0THEN
IF(PGNO_TYPE==3)THEN
P00_MSG(15)
ELSE
P00_MSG(11)
ENDIF
ENDIF
PGNO_ERROR=0
IF(PGNO_REQ>0)THEN
$OUT[PGNO_REQ]=FALSE
ENDIF
IF(PGNO_REQ<0)THEN
$OUT[PGNO_REQ*(-1)]=TRUE
ENDIF
WAITSEC0.5
ENDSWITCH
END
DEF CHK_HOME()
BOOLH
DECLMSG_TP_MSG
DECLMSG_TEMPTY_MSG
IF($I_O_ACTCONF==TRUE)THEN
EMPTY_MSG={MSG_T:
VALIDFALSE,RELEASEFALSE,TYP#NOTIFY,MODUL[]"",KEY[]"",PARAM_TYP#VALUE,PARAM[]"",DLG_FORMAT[]"",ANSWER0}
P_MSG={MSG_T:
VALIDFALSE,RELEASEFALSE,TYP#QUIT,MODUL[]"P00",KEY[]"MoveHomeInT1",PARAM_TYP#KEY,PARAM[]"",DLG_FORMAT[]"",ANSWER0}
$MSG_T=P_MSG
WAITSEC1.0
REPEAT
H=TRUE
IF($IN_HOME==FALSE)THEN
H=FALSE
$MSG_T.VALID=TRUE
REPEAT
HALT
IF(($MODE_OP==#T1)OR($MODE_OP==#T2))THEN
$MSG_T.RELEASE=TRUE
$MSG_T=EMPTY_MSG
RETURN
ENDIF
UNTIL$IN_HOME==TR