Cell Programm beim Umschalten in Ext automatisch anwählen und starten

  • 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.

  • Schritt für Schritt zum Roboterprofi!
  • Damit das Programm beim Wechsel von T1 auf EXT automatisch umgeschalten werden soll, brauchst du folgende Zeilen in deinem SUB. Dabei darf aber kein Programm angewählt sein.


    IF ($PRO_STATE1==#P_FREE) AND ($MODE_OP==#EX) THEN

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

    ENDIF


    Wenn du das alles über eine SPS machst musst du das EXT Signal abfragen und dann die Startreihenfolge beachten.


    Die Reihenfolge für den Start lautet folgend:

    DRIVES_ON setzen

    auf PERI_RDY = TRUE warten

    DRIVES_ON zurücksetzen

    CONF_MESS setzen

    auf STOP_MESS = FALSE warten

    CONF_MESS zurücksetzen

    EXT_Start setzen

    auf PRO_ACT = TRUE warten

    EXT_Start zurücksetzen



    Ich würde dir auch empfehlen alles was mit der P00.src zu tun hat, aus dem CELL Programm rauszuschmeißen und die Programme im CELL Programm direkt aufzurufen mit einem SWTICH Case. P00.src macht alles nur unnötig kompliziert und ist nicht wirklich notwendig.

  • Diesen Teil musst du im Loop in der SPS.SUB reinschteiben.


    MX_T1 als Bool deklarieren.


    If ($T1 OR $T2) AND NOT MX_T1 then

    MX_T1=true

    Endif

    ;Im Automatik Extern Betrieb wird das Cell neu angewaehlt

    If ($MODE_OP==#EX) AND MX_T1 then

    CWRITE($CMD,STAT,MODE,"CANCEL 1")

    MX_T1 = FALSE

    ENDIF


    If ($MODE_OP==#EX) AND ($PRO_STATE1==#P_FREE) AND NOT MX_T1 then

    CWRITE ($cmd,stat,mode,"run/r1/cell( )")

    Endif

Erstelle ein Benutzerkonto oder melde dich an um zu kommentieren

Du musst ein Benutzerkonto haben um einen Kommentar hinterlassen zu können

Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Geht einfach!
Neues Benutzerkonto erstellen
Anmelden
Du hast bereits ein Benutzerkonto? Melde dich hier an.
Jetzt anmelden