Beiträge von Culater86

    Danke für deine Antwort.


    Die INI Zeile habe ich nicht drin. An sich funktioniert auch der Sprung in das nächste Unterprogramm mit einem Vorlauf vom eingestellten Wert "3". Sehe ich im Debugging.


    Nur bei der letzten Bewegung bleibt er an der Stelle kurz stehen wo der Sart der Überschleifung beginnt. Der Vorlaufzeiger ist bei der letzten Bewegung im vorherigen Unterprogramm schon im nächsten Unterprogramm.


    Wenn ich z.B. den Überschleifwert auf den Wert "500" einstelle , fährt er in der letzten Bewegung bis zu dem Punkt wo die Überschleifung startet, hält kurz, fährt die Bewegung zu Ende und geht ohne zu stoppen nahtlos in die 1.Bewegung vom nächsten Unterprogramm über.

    Hallo zusammen,


    ich würde gerne den letzten Bewegungsbefehl eines Unterprogrammes überschleifen damit der Roboter am Ende eines Unterprogrammes nicht stehen bleibt wenn er die erste Bewegung im nächsten Unterprogramm ausführt. Ich habe schon probiert den Überschleifdistanz auf den Wert "1" zu setzen aber er bleibt immer bei der letzten Bewegung kurz stehen und führt dann die nächste Bewegung des nächsten Unterprogrammes aus. Was ich herausgefunden habe das er an dem Punkt wo er das Überschleifen der Bewegung startet er kurz stoppt. Habe auch schon bei allen was ein Vorlaufstop auslösen könnte ein CONTINUE davorgeschrieben aber


    Habe eine KRC4 Steuerung mit KKS8.7.3 Version


    Ich hoffe Ihr könnt mir helfen .


    Programmcode am Ende des Unterprogrammes:

    Programmcode vom Anfang des nächsten Unterprogrammes:

    Hallo zusammen,


    ich bin relativ neu auf dem Gebiet der Programmierung und habe gerade folgende Aufgabe:


    Der Kunde wünscht, dass beim Umschalten der Betriebsart von T1 auf Ext. das Cell Programm angewählt wird und dieses automatisch abgearbeitet wird. Vorausgesetzt alle Sicherheitseinrichtungen und Signale passen.


    Ich habe hier im Forum schon einige Beiträge gesucht und und auch so umgesetzt aber irgendwie will es nicht funktionieren. Beim Umschalten auf Ext. wird nicht das Cell angewählt.


    Im sps.sub habe ich die Einträge wie folgt:



    &ACCESS RVP

    &REL 1

    &COMMENT PLC on control

    DEF  SPS ( )

    ;FOLD DECLARATIONS

    ;FOLD BASISTECH DECL

    ;Automatik extern

    DECL STATE_T STAT

    DECL MODUS_T MODE

    ;ENDFOLD (BASISTECH DECL)

    ;ENDFOLD (DECLARATIONS)

    ;FOLD INI

    ;FOLD BASISTECH INIT

    BasisTech_PLC_INIT()

    ;ENDFOLD (BASISTECH INIT)

    ;FOLD AUTOEXT INIT

    INTERRUPT DECL 91 WHEN $PRO_STATE1==#P_FREE DO RESET_OUT ()

    INTERRUPT ON 91

    INTERRUPT DECL 92 WHEN $PRO_MOVE==TRUE DO RESET_LINESEL()

    INTERRUPT ON 92

    $LOOP_MSG[]=" "

    MODE=#SYNC

    $H_POS=$H_POS

    ;Automatik extern

    IF ($mode_op==#EX) AND (b_autext==FALSE) AND ($PRO_STATE1==#P_FREE) THEN

    CWRITE($CMD,STAT,MODE,"RUN /R1/CELL()")

    b_autext=TRUE

    ENDIF

    IF ($mode_op==#t1) OR ($mode_op==#t2) THEN

    b_autext=FALSE

    ENDIF

    ;ENDFOLD (AUTOEXT INIT)

    ;FOLD BACKUPMANAGER PLC INIT

    BM_ENABLED = FALSE

    BM_OUTPUTVALUE = 0

    ;ENDFOLD (BACKUPMANAGER PLC INIT)

    ;FOLD USER INIT

    ; Please insert user defined initialization commands

    ;ENDFOLD (USER INIT)

    ;ENDFOLD (INI)

    LOOP

    WAIT FOR NOT($POWER_FAIL)

    ;FOLD BASISTECH PLC

    BasisTech_PLC_LOOP()

    ;ENDFOLD (BASISTECH PLC)

    ;FOLD BACKUPMANAGER PLC

    IF BM_ENABLED THEN

    BM_OUTPUTSIGNAL = BM_OUTPUTVALUE

    ENDIF

    ;ENDFOLD (BACKUPMANAGER PLC)

    ;FOLD USER PLC

    ;Controls programmoverride only in Automatic mode or in Automatic External mode

    IF $AUT THEN

    iProgrammoverride = iSPSProgrammoverride ; transcribe input byte to integer

    IF iProgrammoverride < 0 THEN

    iProgrammoverride = 0

    ENDIF

    IF iProgrammoverride > 100 THEN

    iProgrammoverride = 100  ;$OV_PRO only accepts integers between 0 and 100

    ENDIF

    $OV_PRO = iProgrammoverride

    ENDIF

    ;Mirroring programmoverride

    Spiegel_OVPRO = iProgrammoverride

    ;Mirroring Fertigmeldung

    ; Fertigmeldung = QUITT_Fertigmeldung

    ;ENDFOLD (USER PLC)

    ENDLOOP

    END

    DEF  RESET_OUT ( )

    INT N

    MsgLoop(" ")

    IF REFLECT_PROG_NR == 1 THEN

    FOR N = 0 TO PGNO_LENGTH - 1

    $OUT[PGNO_FBIT_REFL + N] = FALSE

    ENDFOR

    ENDIF

    IF (PGNO_REQ>0) THEN

    $OUT[PGNO_REQ]=FALSE

    ELSE

    IF (PGNO_REQ<0) THEN

    $OUT[-PGNO_REQ]=TRUE

    ENDIF

    ENDIF

    END

    DEF RESET_LINESEL()

    $LINE_SEL_OK=FALSE

    END



    Mein Cell.src sieht so aus:


    &ACCESS RVP

    &REL 3

    &COMMENT HANDLER on external automatic

    DEF  CELL ( )

    ;FOLD INIT

    DECL CHAR DMY[3]

    ;ENDFOLD (INIT)

    ;FOLD BASISTECH INI

    GLOBAL INTERRUPT DECL 3 WHEN $STOPMESS==TRUE DO IR_STOPM ( )

    INTERRUPT ON 3

    BAS (#INITMOV,0 )

    ;ENDFOLD (BASISTECH INI)

    Init () ;User-IO-Initialisation

    IF (NOT $IN_HOME) THEN

    HOME ( )

    ENDIF

    ;FOLD AUTOEXT INI

    P00 (#INIT_EXT,#PGNO_GET,DMY[],0 ) ; Initialize extern mode

    ;ENDFOLD AUTOEXT

    LOOP

    P00 (#EXT_PGNO,#PGNO_GET,DMY[],0 )

    SWITCH PGNO ; Select with Programnumber

    CASE 1

    P00 (#EXT_PGNO,#PGNO_ACKN,DMY[],0 ) ; Reset Progr.No.-Request

    Main_Bottles100()

    CASE 2

    P00 (#EXT_PGNO,#PGNO_ACKN,DMY[],0 ) ; Reset Progr.No.-Request

    Main_Bottles50()

    DEFAULT

    P00 (#EXT_PGNO,#PGNO_FAULT,DMY[],0 )

    ENDSWITCH

    ENDLOOP

    END



    Ich hoffe Ihr könnt mir helfen.