DUTs
GVLs
GVL_EL3174
{attribute 'qualified_only'}
VAR_GLOBAL CONSTANT
(* Analog scaling *)
fRawUpperLimit : LREAL := 16#7736; // Highest raw signal that can be read
fRawLowerLimit : LREAL := 16#0000; // Lowest raw signal that can be read
fScaleUpperLimit : LREAL := 300.0; // Upper limit in L/min
fScaleLowerLimit : LREAL := 0.0; // Lower limit in L/min
END_VAR
GVL_IO
// PLC IO from terminal modules
{attribute 'qualified_only'}
VAR_GLOBAL
(* Slot 1 EL9184*)
(* Slot 2 EL1008*)
{attribute 'pytmc' := '
pv: @(PREFIX):LEAK01
io: i
field: ZNAM "LEAK"
field: ONAM "OK"
'}
{attribute 'TcLinkTo' := 'TIIB[FMS_PLC_E02_EL1008]^Channel 1^Input'}
bLeak01 AT %I* : BOOL; // Ch1
{attribute 'pytmc' := '
pv: @(PREFIX):LEAK02
io: i
field: ZNAM "LEAK"
field: ONAM "OK"
'}
{attribute 'TcLinkTo' := 'TIIB[FMS_PLC_E02_EL1008]^Channel 2^Input'}
bLeak02 AT %I* : BOOL; // Ch2
{attribute 'pytmc' := '
pv: @(PREFIX):LEAK03
io: i
field: ZNAM "LEAK"
field: ONAM "OK"
'}
{attribute 'TcLinkTo' := 'TIIB[FMS_PLC_E02_EL1008]^Channel 3^Input'}
bLeak03 AT %I* : BOOL; // Ch3
{attribute 'pytmc' := '
pv: @(PREFIX):LEAK04
io: i
field: ZNAM "LEAK"
field: ONAM "OK"
'}
{attribute 'TcLinkTo' := 'TIIB[FMS_PLC_E02_EL1008]^Channel 4^Input'}
bLeak04 AT %I* : BOOL; // Ch4
{attribute 'pytmc' := '
pv: @(PREFIX):LEAK05
io: i
field: ZNAM "LEAK"
field: ONAM "OK"
'}
{attribute 'TcLinkTo' := 'TIIB[FMS_PLC_E02_EL1008]^Channel 5^Input'}
bLeak05 AT %I* : BOOL; // Ch5
{attribute 'pytmc' := '
pv: @(PREFIX):LEAK06
io: i
field: ZNAM "LEAK"
field: ONAM "OK"
'}
{attribute 'TcLinkTo' := 'TIIB[FMS_PLC_E02_EL1008]^Channel 6^Input'}
bLeak06 AT %I* : BOOL; // Ch6
{attribute 'pytmc' := '
pv: @(PREFIX):LEAK07
io: i
field: ZNAM "LEAK"
field: ONAM "OK"
'}
{attribute 'TcLinkTo' := 'TIIB[FMS_PLC_E02_EL1008]^Channel 7^Input'}
bLeak07 AT %I* : BOOL; // Ch7
(* Slot 3 EL9184*)
(* Slot4 EL3202-0010 *)
{attribute 'TcLinkTo' := 'TIIB[FMS_PLC_E04_EL3202-0010]^RTD Inputs Channel 1^Value'}
nPCWTempRaw01 AT %I* : INT; // Ch1
{attribute 'TcLinkTo' := 'TIIB[FMS_PLC_E04_EL3202-0010]^RTD Inputs Channel 2^Value'}
nPCWTempRaw02 AT %I* : INT; // Ch2
(* Slot5 EL3202-0010 *)
{attribute 'TcLinkTo' := 'TIIB[FMS_PLC_E05_EL3202-0010]^RTD Inputs Channel 1^Value'}
nPCWTempRaw03 AT %I* : INT; // Ch1
(* Slot6 EL3202-0010 *)
{attribute 'TcLinkTo' := 'TIIB[FMS_PLC_E06_EL3202-0010]^RTD Inputs Channel 1^Value'}
nTempMonRaw01 AT %I* : INT; // Ch1
{attribute 'TcLinkTo' := 'TIIB[FMS_PLC_E06_EL3202-0010]^RTD Inputs Channel 2^Value'}
nTempMonRaw02 AT %I* : INT; // Ch2
(* Slot7 EL3202-0010 *)
{attribute 'TcLinkTo' := 'TIIB[FMS_PLC_E07_EL3202-0010]^RTD Inputs Channel 1^Value'}
nTempMonRaw03 AT %I* : INT; // Ch1
{attribute 'TcLinkTo' := 'TIIB[FMS_PLC_E07_EL3202-0010]^RTD Inputs Channel 2^Value'}
nTempMonRaw04 AT %I* : INT; // Ch2
(* Slot 8 EL3174-0002 *)
{attribute 'TcLinkTo' := 'TIIB[FMS_PLC_E08_EL3174-0002]^AI Standard Channel 1^Value'}
nPCWFlowRaw01 AT %I* : INT; // Ch1 0-20mA Extended Range (0-30518)
{attribute 'TcLinkTo' := 'TIIB[FMS_PLC_E08_EL3174-0002]^AI Standard Channel 2^Value'}
nPCWFlowRaw02 AT %I* : INT; // Ch2 0-20mA Extended Range (0-30518)
END_VAR
POUs
FB_PCWFlow
// Monitors temperature sensors
FUNCTION_BLOCK FB_PCWFlow
VAR_INPUT
nPCWFlowRaw : INT; // Raw signal from the ADC
END_VAR
VAR_OUTPUT
{attribute 'pytmc' := '
pv: FLOWRATE
io: i
field: EGU L/MIN
field: LOPR 0.0
field: HOPR 300
field: LSV MINOR
'}
fFlow : LREAL; // Flow reading in L/min (0-30)
END_VAR
//Scale the raw hex value to the flowrate set in the Keyence (0-20ma -> 0-30L/min)
fFlow := (INT_TO_LREAL(nPCWFlowRaw)/(GVL_EL3174.fRawUpperLimit - GVL_EL3174.fRawLowerLimit)) * GVL_EL3174.fScaleUpperLimit;
END_FUNCTION_BLOCK
- Related:
FB_TemperatureMonitor
// Monitors temperature sensors
FUNCTION_BLOCK FB_TemperatureMonitor
VAR_INPUT
nTempMonRaw : INT; // Raw signal from the ADC
END_VAR
VAR_OUTPUT
{attribute 'pytmc' := '
pv: TEMP
io: i
field: EGU C
field: LOPR 0.0
field: HOPR 1000
field: LSV MINOR
'}
fTemperature : LREAL; // Temperature reading in celsius
END_VAR
//Scale the signed int value from the input to an output reading in celsius
fTemperature := INT_TO_LREAL(nTempMonRaw) / 10;
END_FUNCTION_BLOCK
MAIN
PROGRAM MAIN
VAR
//PCW flow monitors
{attribute 'pytmc' := 'pv: @(PREFIX):PCW:FLOW01'}
fbPCWFlow01 : FB_PCWFlow; //PCW flow monitor 01
{attribute 'pytmc' := 'pv: @(PREFIX):PCW:FLOW02'}
fbPCWFlow02 : FB_PCWFlow; //PCW flow monitor 02
// Gross temperature monitors (PT-1000)
{attribute 'pytmc' := 'pv: @(PREFIX):MON:TEMP01'}
fbTempMon01 : FB_TemperatureMonitor; // System temperature monitor 01
{attribute 'pytmc' := 'pv: @(PREFIX):MON:TEMP02'}
fbTempMon02 : FB_TemperatureMonitor; // System temperature monitor 02
{attribute 'pytmc' := 'pv: @(PREFIX):MON:TEMP03'}
fbTempMon03 : FB_TemperatureMonitor; // System temperature monitor 03
{attribute 'pytmc' := 'pv: @(PREFIX):MON:TEMP04'}
fbTempMon04 : FB_TemperatureMonitor; // System temperature monitor 04
//PCW temperature monitors (PT-1000)
{attribute 'pytmc' := 'pv: @(PREFIX):PCW:TEMP01'}
fbPCWTemp01 : FB_TemperatureMonitor; //PCW temp monitor 01
{attribute 'pytmc' := 'pv: @(PREFIX):PCW:TEMP02'}
fbPCWTemp02 : FB_TemperatureMonitor; //PCW temp monitor 02
{attribute 'pytmc' := 'pv: @(PREFIX):PCW:TEMP03'}
fbPCWTemp03 : FB_TemperatureMonitor; //PCW temp monitor 03
END_VAR
(*******************************************************************
Feed each device function block inputs from the PLC IO. Collect error states detected
by the function blocks into stErrors.
*******************************************************************)
(* Monitors PCW temperature from sensor 1 *)
fbPCWTemp01(
nTempMonRaw := GVL_IO.nPCWTempRaw01
);
(* Monitors PCW temperature from sensor 2 *)
fbPCWTemp02(
nTempMonRaw := GVL_IO.nPCWTempRaw02
);
(* Monitors PCW temperature from sensor 3 *)
fbPCWTemp03(
nTempMonRaw := GVL_IO.nPCWTempRaw03
);
(* Monitors temperature from RTD sensor 1 *)
fbTempMon01(
nTempMonRaw := GVL_IO.nTempMonRaw01
);
(* Monitors temperature from RTD sensor 2 *)
fbTempMon02(
nTempMonRaw := GVL_IO.nTempMonRaw02
);
(* Monitors temperature from RTD sensor 3 *)
fbTempMon03(
nTempMonRaw := GVL_IO.nTempMonRaw03
);
(* Monitors temperature from RTD sensor 4 *)
fbTempMon04(
nTempMonRaw := GVL_IO.nTempMonRaw04
);
(* Monitors flow rate from Keyence sensor 1 *)
fbPCWFlow01(
nPCWFlowRaw := GVL_IO.nPCWFlowRaw01
);
(* Monitors flow rate from Keyence sensor 2 *)
fbPCWFlow02(
nPCWFlowRaw := GVL_IO.nPCWFlowRaw02
);
END_PROGRAM
- Related: