124 lines
4.4 KiB
Plaintext
124 lines
4.4 KiB
Plaintext
FUNCTION_BLOCK "FB_ESTOPhandling"
|
|
{ S7_Optimized_Access := 'TRUE' }
|
|
VERSION : 0.1
|
|
VAR_INPUT
|
|
tInPeriodicTime : Time := T#500ms; // BlinkTime LED Output
|
|
sInAlarmFunction : String[20]; // Alarm Function Name
|
|
sInAlarmDevice : String[16]; // Alarm Prefix
|
|
sInAlarmSuffix : String[16]; // Alarm Suffix
|
|
sInAlarmMessage : String; // Alarm Message
|
|
xInAckReqLocal : Bool; // Info from F-CPU: ESTOP.ACK_REQ
|
|
xInEstopOkLocal : Bool; // Info from F-CPU: ESTOP.Q Safety is Enabled
|
|
xInAckReqGlobal : Bool; // Sum-Info from Local ESTOP
|
|
xInSafetyNotOkGlobal : Bool; // Sum-Info from Local ESTOP
|
|
xInMainCabinet : Bool := false; // Activate Main Cabinet and global reset
|
|
wInTextListId_Message : Word;
|
|
wInTextListId_Function : Word;
|
|
wInTextListId_Prefix : Word;
|
|
wInTextListId_Suffix : Word;
|
|
END_VAR
|
|
|
|
VAR_OUTPUT
|
|
xOutLed : Bool; // PushButton LED Output
|
|
xOutSafetyNotOk : Bool; // Info Output for MainCabinet
|
|
xOutAckReq : Bool; // Info Output for MainCabinet
|
|
END_VAR
|
|
|
|
VAR_IN_OUT
|
|
stInOutControlUnitCabinet : "UDT_MainState"; // MachineState of FB_StateMain
|
|
stInOutHmiEstopPanel : "UDT_Panel_EmergencyStop";
|
|
END_VAR
|
|
|
|
VAR
|
|
FB_Blinker : "FB_Blinker";
|
|
fbMonitoringEStop : "FB_Monitoring";
|
|
END_VAR
|
|
|
|
|
|
BEGIN
|
|
REGION Blinker
|
|
// #FB_Blinker(tInPeriodicTime := #tInPeriodicTime,
|
|
// xInActivate := 1);
|
|
END_REGION
|
|
|
|
REGION Logic
|
|
|
|
// Local
|
|
IF NOT #xInMainCabinet THEN
|
|
|
|
IF NOT #xInEstopOkLocal AND #xInAckReqLocal THEN
|
|
// Button not pressed but not Acknowledged
|
|
#xOutLed := "Clock_1Hz"(* #FB_Blinker.xOutput *);
|
|
#xOutSafetyNotOk := FALSE;
|
|
#xOutAckReq := TRUE;
|
|
|
|
ELSIF NOT #xInEstopOkLocal AND NOT #xInAckReqLocal THEN
|
|
// Button pressed
|
|
#xOutLed := TRUE;
|
|
#xOutSafetyNotOk := TRUE;
|
|
#xOutAckReq := FALSE;
|
|
|
|
ELSIF #xInEstopOkLocal AND NOT #xInAckReqLocal THEN
|
|
// ESTOP Activated
|
|
#xOutLed := FALSE;
|
|
#xOutSafetyNotOk := FALSE;
|
|
#xOutAckReq := FALSE;
|
|
|
|
ELSE
|
|
// Button pressed or Hardware-Error
|
|
#xOutLed := TRUE;
|
|
#xOutSafetyNotOk := TRUE;
|
|
#xOutAckReq := FALSE;
|
|
|
|
END_IF;
|
|
|
|
ELSE // Global, Main Cabinet
|
|
|
|
IF ((NOT #xInEstopOkLocal AND #xInAckReqLocal AND NOT #xInAckReqGlobal) OR
|
|
(#xInEstopOkLocal AND NOT #xInAckReqLocal AND #xInAckReqGlobal) OR
|
|
(NOT #xInEstopOkLocal AND #xInAckReqLocal AND #xInAckReqGlobal))
|
|
AND NOT #xInSafetyNotOkGlobal THEN
|
|
#xOutLed := "Clock_1Hz"(* #FB_Blinker.xOutput *);
|
|
ELSIF (NOT #xInEstopOkLocal AND NOT #xInAckReqLocal) OR #xInSafetyNotOkGlobal THEN
|
|
#xOutLed := true;
|
|
ELSIF #xInEstopOkLocal AND NOT #xInAckReqLocal THEN
|
|
#xOutLed := false;
|
|
ELSE
|
|
#xOutLed := true;
|
|
END_IF;
|
|
|
|
END_IF;
|
|
END_REGION
|
|
|
|
REGION Monitoring
|
|
|
|
#fbMonitoringEStop.stSettings.nErrorType := 1;
|
|
#fbMonitoringEStop.stSettings.xErrLedIfMachineIsOff := TRUE;
|
|
#fbMonitoringEStop.stSettings.xSelfQuit := TRUE;
|
|
#fbMonitoringEStop(sInFctnName := #sInAlarmFunction,
|
|
sInPrefix := #sInAlarmDevice,
|
|
sInSuffix := #sInAlarmSuffix,
|
|
InOutMachineState := #stInOutControlUnitCabinet,
|
|
xInQuitError := #stInOutControlUnitCabinet.xQuitError,
|
|
xInSignal := #xInEstopOkLocal,
|
|
wInTextListId_Message := 0,
|
|
wInTextListId_Function := #wInTextListId_Function,
|
|
wInTextListId_Prefix := #wInTextListId_Prefix,
|
|
wInTextListId_Suffix := #wInTextListId_Suffix,
|
|
sInAlarmMessage := #sInAlarmMessage);
|
|
|
|
END_REGION
|
|
|
|
REGION HMI
|
|
#stInOutHmiEstopPanel.sPanelName := #sInAlarmDevice;
|
|
#stInOutHmiEstopPanel.sBMKEStop := #sInAlarmSuffix;
|
|
|
|
#stInOutHmiEstopPanel.sBMKResetButton := '';
|
|
#stInOutHmiEstopPanel.sBMKResetLED := '';
|
|
|
|
#stInOutHmiEstopPanel.xEStopActive := NOT #xInEstopOkLocal;
|
|
#stInOutHmiEstopPanel.xReset := #xOutLed;
|
|
END_REGION
|
|
END_FUNCTION_BLOCK
|
|
|