KUKA 通信子程序 p00src 注释.docx

上传人:b****6 文档编号:6027667 上传时间:2023-01-03 格式:DOCX 页数:11 大小:16.74KB
下载 相关 举报
KUKA 通信子程序 p00src 注释.docx_第1页
第1页 / 共11页
KUKA 通信子程序 p00src 注释.docx_第2页
第2页 / 共11页
KUKA 通信子程序 p00src 注释.docx_第3页
第3页 / 共11页
KUKA 通信子程序 p00src 注释.docx_第4页
第4页 / 共11页
KUKA 通信子程序 p00src 注释.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

KUKA 通信子程序 p00src 注释.docx

《KUKA 通信子程序 p00src 注释.docx》由会员分享,可在线阅读,更多相关《KUKA 通信子程序 p00src 注释.docx(11页珍藏版)》请在冰豆网上搜索。

KUKA 通信子程序 p00src 注释.docx

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1