Hi Leute,
es gibt immer wieder mal ein Resume-Problem bzw sagt der Robi dann "Ungültige Programmstruktur bei Resume" oder so...
Unsere Mitarbeiter sind schon ganz genervt weil die Grundstellung mal klappt und mal nicht. Irgendwann nach zichmal "Programm zurück setzen", "abwählen-anwählen" und der gleichen geht es dann mal.
Vielleicht hat einer ne Idee wie ich das Programm verbessern könnte, so das der Fehler nicht mehr auftritt...
Code
DEF Programm_xyz ( )
INI
;...
;--------------------------
;--- RUECKZUGANFORDERUNG --
;--------------------------
;WENN RUECKZUGTASTER IN "NICHT AUTOMATIK" GEDRÜCKT WIRD
$CYCFLAG[20]=FALSE
WAIT SEC 0.5
WAIT FOR NOT $CYCFLAG[20]
INTERRUPT DECL 20 WHEN $CYCFLAG[20]==TRUE DO RUECKZUG ()
;springt er nach "RUECKZUG()" hier rein oder kommt
;er wieder von ganz oben ???
INTERRUPT ON 20
$CYCFLAG[20]=DI17BT_GRUNDSTELLUNG AND NOT DI23BT_AUTO AND NOT DI07SGM_IN_AUTOMATIK
;--------------------------
;--- HALT BEI RUECKZUG ----
;--------------------------
;WENN RUECKZUGTASTER BEIM RUECKZUG LOSGELASSEN WIRD
$CYCFLAG[21]=DI07SGM_IN_AUTOMATIK OR ((GRUNDSTELLUNG_FAHREN AND NOT DI17BT_GRUNDSTELLUNG) AND NOT ($CYCFLAG[21]))
INTERRUPT DECL 21 WHEN $CYCFLAG[21]==TRUE DO RUECKZUG_HALT ()
;--------------------------
;--- STOP ROBOTER ---------
;--------------------------
;ALLGEMEIN STOP WENN SICHERHEIT NICHT GEGEBEN IST
$CYCFLAG[22]=FALSE
INTERRUPT DECL 22 WHEN $CYCFLAG[22]==TRUE DO STOP_ROB ()
WAIT SEC 0.5
WAIT FOR NOT $CYCFLAG[22]
INTERRUPT ON 22
WAIT SEC 0.5
$CYCFLAG[22]= ((ROBOT_AUSSERHALB_SGM==FALSE) AND (DI02SGM_FORM_OFFEN==FALSE)) OR (DI24BT_BETRIEB_MIT_HG==FALSE) OR ((DO16SCHUTZ_VERRIEGELN==TRUE) AND (DI16SCHUTZ_VERRIEGELT==FALSE)) OR (DI96BETRIEBSDRUCK==FALSE) OR (DI23BT_AUTO==FALSE)
RUECKZUG_BEI_START ()
LOOP
MAINLOOP ()
ENDLOOP
END
;--------------------------
;--- PROGRAMMSCHLEIFE -----
;--------------------------
DEF MAINLOOP ()
LOOP
;---INTERRUPT 20 ROBOTER RUECKZUG
INTERRUPT ON 20
IF (GRUNDSTELLUNG_FAHREN==FALSE) THEN
ENTNAHME ()
ENDIF
IF (GRUNDSTELLUNG_FAHREN==FALSE) THEN
ABLAGE ()
ENDIF
;---RUECKZUG DURCHFUEHREN
IF GRUNDSTELLUNG_FAHREN==TRUE THEN
GRST ()
ENDIF
ENDLOOP
END
;--------------------------
;--- RUECKZUG BEI START ---
;--------------------------
DEF RUECKZUG_BEI_START ( )
INTERRUPT ON 20
IF GRUNDSTELLUNG_FAHREN==FALSE THEN
WAIT FOR NOT DI23BT_AUTO
WAIT FOR NOT $CYCFLAG[20]
WAIT FOR $CYCFLAG[20]
WAIT FOR NOT $CYCFLAG[20]
ENDIF
END
;--------------------------
;--- STOP ROB -------------
;--------------------------
DEF STOP_ROB ( )
INTERRUPT OFF 22
BRAKE
;WARTEN BIS SICHERHEIT WIEDER GEGEBEN IST
WAIT FOR $CYCFLAG[22]==FALSE
INTERRUPT ON 22
INTERRUPT ON 20
END
;--------------------------
;--- RUECKZUG -------------
;--------------------------
DEF RUECKZUG ( )
BRAKE
GRUNDSTELLUNG_FAHREN=TRUE
INTERRUPT OFF 22
INTERRUPT OFF 20
WAIT FOR $CYCFLAG[21]==FALSE
WAIT SEC 0.5
INTERRUPT ON 21
;HIER EIN "WAIT 0 SEC" EINBAUEN ???
RESUME
END
;--------------------------
;--- HALT BEI RUECKZUG ---
;--------------------------
DEF RUECKZUG_HALT ( )
INTERRUPT OFF 21
BRAKE
;WARTEN BIS RUECKZUGBEDINGUNGEN WIEDER I.O. SIND
WAIT FOR $CYCFLAG[21]==FALSE
WAIT SEC 0.5
INTERRUPT ON 21
;WARTEN BIS RUECKZUGTASTER WIEDER GEDRUECKT WIRD
WAIT FOR DI17BT_GRUNDSTELLUNG
END
Alles anzeigen