Hallo MoinMoin,
für diese Meldung brauchst du nicht unbedingt einen zweiten Task.
Du kannst auch einen Zeitlichen Interrupt erzeugen der z.B. alle 2 Sekunden aufgerufen wird und den Override auf 0% prüft. Und gegebenenfalls ein Signal an die SPS sendet.
1: Ein Signal in der IO.sys deklarieren.
-Name "doOverride0Prozent" -SignalType "DO" -Unit "PB_Adapter" -UnitMap "19"
2: Einen Zeitinterrupt und Variablen im Modul erzeugen
!zyklicher interrupt für den override 0% zu senden
LOCAL VAR intnum inOverRide;
!zyklicher interrupt wird alle 1000ms aufgerufen
LOCAL PERS num nITimer:=1.0;
3: Ein Programm zum Bekantgeben und Initialisieren des Interrupts
CheckOverRide() ist das verknüpfte Programm (Trap) zu dem Interrupt
LOCAL PROC InitInterrupts()
!timerinterrupt für override zu senden
IDelete inOverRide;
CONNECT inOverRide WITH CheckOverRide;
ITimer nITimer,inOverRide;
ISleep inOverRide;
ENDPROC
3: Das Programm (Trap) das aufgerufen werden soll
TRAP CheckOverRide
IF CSpeedOverride()=0 THEN
Set doOverride0Prozent;
ELSE
Reset doOverride0Prozent;
ENDIF
RETURN;
ENDTRAP
4: So! Das ganze muß ja nur in Automatikbetrieb laufen. Im Handmodus kannst du den Interrupt deaktivieren. Dann gibst es noch zwei Programme die den Interrupt steuern. Diese Programme mußt du mit Events verknüpfen.
In der SYS.cfg
CAB_EXEC_HOOKS:
-Routine "RestartTrapSys" -Shelf "START" -Task "T_ROB1"
-Routine "RestartTrapSys" -Shelf "RESTART" -Task "T_ROB1"
-Routine "SleepTrapSys" -Shelf "STOP" -Task "T_ROB1"
PROC RestartTrapSys()
InitInterrupts;
!zyklischen interrupt für den overridestatus zu senden
IF OpMode()=OP_AUTO IWatch inOverRide;
RETURN;
ENDPROC
PROC SleepTrapSys()
!zyklischen interrupt für den overridestatus zu senden
ISleep inOverRide;
RETURN;
ENDPROC
Also bei mir funktioniert das Ganze ohne Probleme. Manchmal werden noch Fehlermeldungen mit der Interrupt-Warteschlange mitgeloggt aber die sind halb so wild

Wenn der Roboter sich in Automatik befindet und wird von der SPS (oder Manuell) gestartet wird das Programm " RestartTrapSys" abgearbeitet. Der Interrupt wird aktiviert.
Wenn das Programm gestoppt wird, wird das Programm "SleepTrapSys" abgearbeitet. Der Interrupt wird deaktiviert.
Viel Spaß beim programmieren
