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.