FUNCTION_BLOCK FB_ANA_ALARM
TITLE = 'Analog conversion with High/High-Low/Low alarm'
VERSION : INT = 1.0
AUTHOR : 'Your name'
FAMILY : 'Custom Function Blocks'
VAR_INPUT
// 4-20mA analog channel
IW_AnalogChannel : WORD;
// Engineering units range
R_Range_EngMin : REAL := 0.0; // Minimum engineering value (default is 0.0)
R_Range_EngMax : REAL := 100.0; // Maximum engineering value (default is 100.0)
// Measurement range
R_Range_MeasMin : REAL := 0.0; // Minimum measurement value (default is 0.0)
R_Range_MeasMax : REAL := 65535.0; // Maximum measurement value (default is 65535.0)
// Low and High Alarms
R_AlarmLow : REAL := 25.0; // Low Alarm (default is 25.0)
R_AlarmHigh : REAL := 75.0; // High Alarm (default is 75.0)
// Deadband
R_Deadband : REAL := 5.0; // Deadband for alarms (default is 5.0)
END_VAR
VAR_OUTPUT
// Engineering value
R_EngValue : REAL;
// Alarm states
B_AlarmLowActive : BOOL;
B_AlarmHighActive : BOOL;
END_VAR
VAR
// Internal variables
R_Range_MeasTotal : REAL := ABS(R_Range_MeasMax - R_Range_MeasMin);
R_Range_EngTotal : REAL := ABS(R_Range_EngMax - R_Range_EngMin);
R_AlarmLowValue : REAL := (R_AlarmLow / 100.0) * R_Range_EngTotal + R_Range_EngMin;
R_AlarmHighValue : REAL := (R_AlarmHigh / 100.0) * R_Range_EngTotal + R_Range_EngMin;
R_DeadbandValue : REAL := (R_Deadband / 100.0) * R_Range_EngTotal;
END_VAR