Files
HundM_Fortna/2_ILSLib/FB/Misc/FB_SupervisionRasterSensor.scl
T
2026-06-29 16:29:41 +02:00

75 lines
3.1 KiB
Plaintext

FUNCTION_BLOCK "FB_SupervisionRasterSensor"
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
VAR_INPUT
stInSenRaster : "UDT_Sensor"; // Das Signal das überwacht wird
xInMotorRun : Bool; // Motor dreht sich
stInSettings : Struct // Einstellungen
xInEnableSupervision : Bool := false; // Überwachung aktiviert
tInDelayMotorRun : Time := T#200ms; // Motor Delay
tInRasterHigh : Time := T#100ms; // High Signal
tInRasterLow : Time := T#100ms; // Low Signal
sInConveyorName : String;
wInTextListFunctionId : Word;
wInTextListMessageId : Word;
END_STRUCT;
xInErrorQuit : Bool; // Quittieren z.B. Button Reset
END_VAR
VAR_OUTPUT
xOutErrorRasterSensor : Bool; // Fehler ausgeben
END_VAR
VAR
tOn_RasterHigh {InstructionName := 'TON_TIME'; LibVersion := '1.0'} : TON_TIME; // Überwachungszeit High-Signal
tOn_RasterLow {InstructionName := 'TON_TIME'; LibVersion := '1.0'} : TON_TIME; // Überwachungszeit Low-Signal
tOnMotorRunningDelay {InstructionName := 'TON_TIME'; LibVersion := '1.0'} : TON_TIME; // Motor Delay Timer
xErrorRasterSensor : Bool; // Fehler
END_VAR
BEGIN
REGION Überwachung Raster Sensor
#tOnMotorRunningDelay(IN := #xInMotorRun, // CarouselRun muss delayed benutzt werden, wegen Anfahrzeit vom ETF
PT := #stInSettings.tInDelayMotorRun);
#tOn_RasterHigh(IN := #xInMotorRun AND #tOnMotorRunningDelay.Q AND #stInSenRaster.xDirectSensor,
PT := #stInSettings.tInRasterHigh);
#tOn_RasterLow(IN := #xInMotorRun AND #tOnMotorRunningDelay.Q AND NOT #stInSenRaster.xDirectSensor,
PT := #stInSettings.tInRasterLow);
IF #tOn_RasterHigh.Q OR #tOn_RasterLow.Q THEN // Wenn einer der beiden Timer abläuft, dann Fehler!
#xErrorRasterSensor := TRUE;
END_IF;
END_REGION
REGION Quittieren
IF #xErrorRasterSensor AND #stInSettings.xInEnableSupervision AND #xInErrorQuit THEN
#xErrorRasterSensor := FALSE;
END_IF;
END_REGION
REGION Ausgänge
#xOutErrorRasterSensor := #xErrorRasterSensor AND #stInSettings.xInEnableSupervision; // Fehler ausgeben, wenn Überwachung aktiviert
END_REGION
(* REGION Monitoring
#fbMonitoring.stSettings.nErrorType := 1;
#fbMonitoring.stSettings.xErrLedIfMachineIsOff := TRUE;
#fbMonitoring.stSettings.xSelfQuit := TRUE;
#fbMonitoring.stSettings.tDelay := T#1s;
#fbMonitoring(sInFctnName := 'Rastersensorueberwachung',
sInPrefix := #stInSettings.sInConveyorName,
wInTextListId_Function := #stInSettings.wInTextListFunctionId,
wInTextListId_Message := #stInSettings.wInTextListMessageId,
sInSuffix := #stInSenRaster.sName,
InOutMachineState := "DB_MachineGlobal".stStateMain,
xInQuitError := "DB_MachineGlobal".stStateMain.xQuitError,
xInSignal := NOT #xErrorRasterSensor,
sInAlarmMessage := 'Rastersensorueberwachung ausgeloest');
END_REGION *)
END_FUNCTION_BLOCK