(*********************************************
Import-Export
Version := RSLogix 5000 v15.01
Owner := SLAC, SLAC National Accelerator Laboratory
Exported := Thu May 06 11:31:23 2010
**********************************************)
IE_VER := 2.6;
CONTROLLER sd38435406c2_0_0 (Description := "cvs/plc/pps/und/sd38435406c2_0_0.ACD",
ProcessorType := 1756-L62,
Major := 15,
TimeSlice := 20,
PowerLossProgram := Powerup_Program,
RedundancyEnabled := 0,
KeepTestEditsOnSwitchOver := 0,
DataTablePadPercentage := 50,
SecurityCode := 0,
SFCExecutionControl := CurrentActive,
SFCRestartPosition := MostRecent,
SFCLastScan := DontScan,
SerialNumber := 16#0048_eac2,
MatchProjectToController := No)
DATATYPE BTM_TEST (FamilyType := NoFamily)
SINT ZZZZZZZZZZBTM_TEST0 (Hidden := 1);
BIT UUT_Vent ZZZZZZZZZZBTM_TEST0 : 0;
BIT UUT_Fill ZZZZZZZZZZBTM_TEST0 : 1;
BIT UUT_Fault ZZZZZZZZZZBTM_TEST0 : 2;
BIT UUT_Reset ZZZZZZZZZZBTM_TEST0 : 3;
BIT Alarm_low_pressure ZZZZZZZZZZBTM_TEST0 : 4;
BIT Alarm_vent_time ZZZZZZZZZZBTM_TEST0 : 5;
BIT Alarm_fill_time ZZZZZZZZZZBTM_TEST0 : 6;
BIT Alarm_flow_rate ZZZZZZZZZZBTM_TEST0 : 7;
SINT ZZZZZZZZZZBTM_TEST9 (Hidden := 1);
BIT Alarm_over_pressure ZZZZZZZZZZBTM_TEST9 : 0;
BIT Alarm_sum ZZZZZZZZZZBTM_TEST9 : 1;
DINT One_Shot;
SINT ZZZZZZZZZZBTM_TEST13 (Hidden := 1);
BIT Slope_check_1 ZZZZZZZZZZBTM_TEST13 : 0;
BIT Slope_check_2 ZZZZZZZZZZBTM_TEST13 : 1;
REAL Slope_fill_pressure;
REAL Slope_vent_pressure;
REAL Slope;
REAL Low_trip;
REAL High_reset;
TIMER Fill_Timer (Radix := Float);
TIMER Vent_Timer (Radix := Float);
END_DATATYPE
DATATYPE Data_Array (FamilyType := NoFamily)
DINT Data_00;
DINT Data_01;
DINT Data_02;
DINT Data_03;
DINT Data_04;
DINT Data_05;
DINT Data_06;
DINT Data_07;
END_DATATYPE
DATATYPE Data_Array_Real (FamilyType := NoFamily)
REAL Data_00;
REAL Data_01;
REAL Data_02;
REAL Data_03;
REAL Data_04;
REAL Data_05;
REAL Data_06;
REAL Data_07;
END_DATATYPE
DATATYPE FAULTRECORD (FamilyType := NoFamily)
DINT Time_Low;
DINT Time_High;
INT Type;
INT Code;
DINT Info[8] (Radix := Hex);
END_DATATYPE
MODULE Local (Parent := Local,
ParentModPortId := 1,
CatalogNumber := 1756-L62,
Vendor := 1,
ProductType := 14,
ProductCode := 55,
Major := 15,
Minor := 56,
PortLabel := RxBACKPLANE,
ChassisSize := 10,
Slot := 0,
Mode := 2#0000_0000_0000_0001,
CompatibleModule := 0,
KeyMask := 2#0000_0000_0001_1111)
END_MODULE
MODULE IN_01 (Parent := Local,
ParentModPortId := 1,
CatalogNumber := 1756-IB16D,
Vendor := 1,
ProductType := 7,
ProductCode := 2,
Major := 2,
Minor := 1,
PortLabel := RxBACKPLANE,
Slot := 1,
CommMethod := 536870913,
ConfigMethod := 8388610,
Mode := 2#0000_0000_0000_0000,
CompatibleModule := 1,
KeyMask := 2#0000_0000_0001_1111)
ConfigData := [44,17,1,0,0,0,1,1,1,1,0,0,0,0,0,65535,0,0,0,0];
CONNECTION StandardInput (Rate := 10000,
EventID := 0)
InputData := [0,16837,[-2003860275,-2147482220],0,0,0,0];
InputForceData := [0,0,0,0,-59,65,0,0,-51,-124,-113,-120,-108,5,0,-128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
END_CONNECTION
END_MODULE
MODULE IN_02 (Parent := Local,
ParentModPortId := 1,
CatalogNumber := 1756-IB16D,
Vendor := 1,
ProductType := 7,
ProductCode := 2,
Major := 2,
Minor := 1,
PortLabel := RxBACKPLANE,
Slot := 2,
CommMethod := 536870913,
ConfigMethod := 8388610,
Mode := 2#0000_0000_0000_0000,
CompatibleModule := 1,
KeyMask := 2#0000_0000_0001_1111)
ConfigData := [44,17,1,0,0,0,1,1,1,1,0,0,0,0,65535,65535,0,0,0,0];
CONNECTION StandardInput (Rate := 10000,
EventID := 0)
InputData := [0,24343,[1749745223,-2147482220],0,0,0,0];
InputForceData := [0,0,0,0,23,95,0,0,71,-2,74,104,-108,5,0,-128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
END_CONNECTION
END_MODULE
MODULE IN_03 (Parent := Local,
ParentModPortId := 1,
CatalogNumber := 1756-IB16D,
Vendor := 1,
ProductType := 7,
ProductCode := 2,
Major := 2,
Minor := 1,
PortLabel := RxBACKPLANE,
Slot := 3,
CommMethod := 536870913,
ConfigMethod := 8388610,
Mode := 2#0000_0000_0000_0000,
CompatibleModule := 1,
KeyMask := 2#0000_0000_0001_1111)
ConfigData := [44,17,1,0,0,0,1,1,1,1,0,0,0,0,65535,65535,0,0,0,0];
CONNECTION StandardInput (Rate := 10000,
EventID := 0)
InputData := [0,24343,[1628358015,-2147482220],0,0,0,0];
InputForceData := [0,0,0,0,23,95,0,0,127,-59,14,97,-108,5,0,-128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
END_CONNECTION
END_MODULE
MODULE OUT_01 (Parent := Local,
ParentModPortId := 1,
CatalogNumber := 1756-OB16D,
Vendor := 1,
ProductType := 7,
ProductCode := 4,
Major := 2,
Minor := 1,
PortLabel := RxBACKPLANE,
Slot := 4,
CommMethod := 536870914,
ConfigMethod := 8388612,
Mode := 2#0000_0000_0000_0000,
CompatibleModule := 1,
KeyMask := 2#0000_0000_0001_1111)
ConfigData := [44,19,1,0,0,0,0,0,0,0,0,0,0,0];
CONNECTION Diagnostic (Rate := 10000,
EventID := 0)
InputData := [0,4354,[26368,-2147483648],0,0,0,0];
InputForceData := [0,0,0,0,2,17,0,0,0,103,0,0,0,0,0,-128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
OutputData := [258];
OutputForceData := [2,17,0,0,0,0,0,0,0,0,0,0];
END_CONNECTION
END_MODULE
MODULE OUT_02 (Parent := Local,
ParentModPortId := 1,
CatalogNumber := 1756-OB16D,
Vendor := 1,
ProductType := 7,
ProductCode := 4,
Major := 2,
Minor := 1,
PortLabel := RxBACKPLANE,
Slot := 5,
CommMethod := 536870914,
ConfigMethod := 8388612,
Mode := 2#0000_0000_0000_0000,
CompatibleModule := 1,
KeyMask := 2#0000_0000_0001_1111)
ConfigData := [44,19,1,0,0,0,0,0,0,0,0,0,0,0];
CONNECTION Diagnostic (Rate := 10000,
EventID := 0)
InputData := [0,0,[65280,-2147483648],0,0,0,0];
InputForceData := [0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,-128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
OutputData := [32768];
OutputForceData := [0,0,0,0,0,0,0,0,0,0,0,0];
END_CONNECTION
END_MODULE
MODULE OUT_03 (Parent := Local,
ParentModPortId := 1,
CatalogNumber := 1756-OB16D,
Vendor := 1,
ProductType := 7,
ProductCode := 4,
Major := 2,
Minor := 1,
PortLabel := RxBACKPLANE,
Slot := 6,
CommMethod := 536870914,
ConfigMethod := 8388612,
Mode := 2#0000_0000_0000_0000,
CompatibleModule := 1,
KeyMask := 2#0000_0000_0001_1111)
ConfigData := [44,19,1,0,0,0,0,0,0,0,0,0,0,0];
CONNECTION Diagnostic (Rate := 10000,
EventID := 0)
InputData := [0,1,[61184,-2147483648],0,0,0,0];
InputForceData := [0,0,0,0,1,0,0,0,0,-17,0,0,0,0,0,-128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
OutputData := [1];
OutputForceData := [1,0,0,0,0,0,0,0,0,0,0,0];
END_CONNECTION
END_MODULE
MODULE DeviceNet (Parent := Local,
ParentModPortId := 1,
CatalogNumber := 1756-DNB,
Vendor := 1,
ProductType := 12,
ProductCode := 14,
Major := 6,
Minor := 2,
PortLabel := RxBACKPLANE,
Slot := 7,
NodeAddress := 0,
CommMethod := 536870913,
Mode := 2#0000_0000_0000_0000,
CompatibleModule := 1,
KeyMask := 2#0000_0000_0001_1111,
PrimCxnInputSize := 500,
PrimCxnOutputSize := 496,
SecCxnInputSize := 128,
SecCxnOutputSize := 0)
ExtendedProp := [[[______]]]
CONNECTION Standard (Rate := 5000,
EventID := 0)
InputData := [[0],[-1335919616,65280,0,0,-2147483648,-1335919616,65280,0,0,-2147483648,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0]];
InputForceData := [0,0,0,0,0,124,95,-80,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,-128,0,124,95,-80,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,-128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
OutputData := [[0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]];
OutputForceData := [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
END_CONNECTION
CONNECTION Status (Rate := 5000,
EventID := 0)
InputData := [59826,[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[1,0,0,0,0,0,0,0],[6,0,0,0,0,0,0,0],[65,35,48,48],0,80,0,80,[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[80,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]];
InputForceData := [-79,-23,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,65,35,48,48,0,80,0,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,80,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
END_CONNECTION
END_MODULE
MODULE ControlNet (Parent := Local,
ParentModPortId := 1,
CatalogNumber := 1756-CNB/D,
Vendor := 1,
ProductType := 12,
ProductCode := 7,
Major := 5,
Minor := 22,
PortLabel := RxBACKPLANE,
Slot := 8,
NodeAddress := 1,
Mode := 2#0000_0000_0000_0000,
CompatibleModule := 1,
KeyMask := 2#0000_0000_0001_1111,
ControlNetSignature := 16#415c_e2d5)
ExtendedProp := [[[______]]]
END_MODULE
MODULE Remote (Parent := ControlNet,
ParentModPortId := 2,
CatalogNumber := 1756-CNBR/D,
Vendor := 1,
ProductType := 12,
ProductCode := 8,
Major := 5,
Minor := 5,
PortLabel := CNet,
ChassisSize := 10,
Slot := 0,
NodeAddress := 2,
CommMethod := 805306369,
Mode := 2#0000_0000_0000_0000,
CompatibleModule := 1,
KeyMask := 2#0000_0000_0001_1111)
CONNECTION Output (Rate := 20000,
EventID := 0)
InputData := [-247,[[-1,0],[0,34523],[0,48],[-1,0],[0,49151],[0,49151],[0,0],[0,0],[-1,0],[-1,0]]];
InputForceData := [9,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,-37,-122,0,0,0,0,0,0,48,0,0,0,-1,-1,-1,-1,0,0,0,0,0,0,0,0,-1,-65,0,0,0,0,0,0,-1,-65,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,0,0,0,0,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
OutputData := [-247,[[0],[0],[0],[0],[0],[0],[0],[0],[0],[0]]];
OutputForceData := [9,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
END_CONNECTION
END_MODULE
MODULE IN_04 (Parent := Remote,
ParentModPortId := 1,
CatalogNumber := 1756-IB16D,
Vendor := 1,
ProductType := 7,
ProductCode := 2,
Major := 2,
Minor := 1,
PortLabel := RxBACKPLANE,
Slot := 1,
CommMethod := 1073741824,
ConfigMethod := 8388612,
Mode := 2#0000_0000_0000_0000,
CompatibleModule := 1,
KeyMask := 2#0000_0000_0001_1111)
ConfigData := [28,16,1,0,0,0,1,1,1,1,0,0,0,0,65535,65535];
InputAliasComments ;
END_MODULE
MODULE IN_05 (Parent := Remote,
ParentModPortId := 1,
CatalogNumber := 1756-IB16D,
Vendor := 1,
ProductType := 7,
ProductCode := 2,
Major := 2,
Minor := 1,
PortLabel := RxBACKPLANE,
Slot := 2,
CommMethod := 1073741824,
ConfigMethod := 8388612,
Mode := 2#0000_0000_0000_0000,
CompatibleModule := 1,
KeyMask := 2#0000_0000_0001_1111)
ConfigData := [28,16,1,0,0,0,1,1,1,1,0,0,0,0,65535,65535];
InputAliasComments ;
END_MODULE
MODULE IN_06 (Parent := Remote,
ParentModPortId := 1,
CatalogNumber := 1756-IB16D,
Vendor := 1,
ProductType := 7,
ProductCode := 2,
Major := 2,
Minor := 1,
PortLabel := RxBACKPLANE,
Slot := 4,
CommMethod := 1073741824,
ConfigMethod := 8388612,
Mode := 2#0000_0000_0000_0000,
CompatibleModule := 1,
KeyMask := 2#0000_0000_0001_1111)
ConfigData := [28,16,1,0,0,0,1,1,1,1,0,0,0,0,65535,65535];
InputAliasComments ;
END_MODULE
MODULE IN_07 (Parent := Remote,
ParentModPortId := 1,
CatalogNumber := 1756-IB16D,
Vendor := 1,
ProductType := 7,
ProductCode := 2,
Major := 2,
Minor := 1,
PortLabel := RxBACKPLANE,
Slot := 5,
CommMethod := 1073741824,
ConfigMethod := 8388612,
Mode := 2#0000_0000_0000_0000,
CompatibleModule := 1,
KeyMask := 2#0000_0000_0001_1111)
ConfigData := [28,16,1,0,0,0,1,1,1,1,0,0,0,0,65535,65535];
InputAliasComments ;
END_MODULE
MODULE OUT_04 (Parent := Remote,
ParentModPortId := 1,
CatalogNumber := 1756-OB16D,
Vendor := 1,
ProductType := 7,
ProductCode := 4,
Major := 2,
Minor := 1,
PortLabel := RxBACKPLANE,
Slot := 6,
CommMethod := 1073741824,
ConfigMethod := 8388614,
Mode := 2#0000_0000_0000_0000,
CompatibleModule := 1,
KeyMask := 2#0000_0000_0001_1111)
ConfigData := [28,18,1,0,0,0,0,0,0,0];
InputAliasComments ;
OutputAliasComments ;
END_MODULE
MODULE OUT_05 (Parent := Remote,
ParentModPortId := 1,
CatalogNumber := 1756-OB16D,
Vendor := 1,
ProductType := 7,
ProductCode := 4,
Major := 2,
Minor := 1,
PortLabel := RxBACKPLANE,
Slot := 7,
CommMethod := 1073741824,
ConfigMethod := 8388614,
Mode := 2#0000_0000_0000_0000,
CompatibleModule := 1,
KeyMask := 2#0000_0000_0001_1111)
ConfigData := [28,18,1,0,0,0,0,0,0,0];
InputAliasComments ;
OutputAliasComments ;
END_MODULE
MODULE ANA_01 (Parent := Remote,
ParentModPortId := 1,
CatalogNumber := 1756-IF16,
Vendor := 1,
ProductType := 10,
ProductCode := 6,
Major := 1,
Minor := 1,
PortLabel := RxBACKPLANE,
Slot := 8,
CommMethod := 536870914,
ConfigMethod := 8388610,
Mode := 2#0000_0000_0000_0000,
CompatibleModule := 1,
KeyMask := 2#0000_0000_0001_1111)
ConfigData := [392,40,1,2,100,[0,2,0,0.00000000e+000,1.00000000e+001,0.00000000e+000,5.00000000e+001,0.00000000e+000
],[0,2,0,0.00000000e+000,1.00000000e+001,0.00000000e+000,5.00000000e+001,0.00000000e+000],[0,2,0
,0.00000000e+000,1.00000000e+001,0.00000000e+000,5.00000000e+001,0.00000000e+000],[0,2,0,0.00000000e+000
,1.00000000e+001,0.00000000e+000,5.00000000e+001,0.00000000e+000],[0,2,0,0.00000000e+000,1.00000000e+001
,0.00000000e+000,5.00000000e+001,0.00000000e+000],[0,2,0,0.00000000e+000,1.00000000e+001,0.00000000e+000
,5.00000000e+001,0.00000000e+000],[0,2,0,0.00000000e+000,1.00000000e+001,0.00000000e+000,5.00000000e+001
,0.00000000e+000],[0,2,0,0.00000000e+000,1.00000000e+001,0.00000000e+000,5.00000000e+001,0.00000000e+000
],[0,2,0,0.00000000e+000,1.00000000e+001,0.00000000e+000,5.00000000e+001,0.00000000e+000],[0,2,0
,0.00000000e+000,1.00000000e+001,0.00000000e+000,5.00000000e+001,0.00000000e+000],[0,2,0,0.00000000e+000
,1.00000000e+001,0.00000000e+000,5.00000000e+001,0.00000000e+000],[0,2,0,0.00000000e+000,1.00000000e+001
,0.00000000e+000,5.00000000e+001,0.00000000e+000],[0,2,0,0.00000000e+000,1.00000000e+001,0.00000000e+000
,5.00000000e+001,0.00000000e+000],[0,2,0,0.00000000e+000,1.00000000e+001,0.00000000e+000,5.00000000e+001
,0.00000000e+000],[0,2,0,0.00000000e+000,1.00000000e+001,0.00000000e+000,5.00000000e+001,0.00000000e+000
],[0,2,0,0.00000000e+000,1.00000000e+001,0.00000000e+000,5.00000000e+001,0.00000000e+000]];
CONNECTION FloatSingleEndedNoAlm (Rate := 100000,
EventID := 0,
ControlNetScheduled := No)
InputData := [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1.40756655e+001,1.44275770e+001,1.44181929e+001,1.45237656e+001,1.45573931e+001
,1.44612036e+001,1.40490770e+001,1.45347147e+001,1.42039175e+001,1.45839815e+001,1.31380177e+001
,1.44909210e+001,1.46121349e+001,1.45401888e+001,3.80846024e-001,1.45597391e+001,32420];
InputForceData := [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-71,50,97,65,-61,-35,102,65,83,-73,102,65,-68,87,104,65,-31,-25,104,65,127,103,103,65
,5,-55,96,65,49,-114,104,65,63,67,99,65,49,91,105,65,-122,56,82,65,-48,-38,103,65,78,-53,105,65,-47,-89,104,65,-64
,100,-61,62,-79,-12,104,65,108,127,104,65,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
END_CONNECTION
END_MODULE
MODULE Network (Parent := Local,
ParentModPortId := 1,
CatalogNumber := 1756-ENET/B,
Vendor := 1,
ProductType := 12,
ProductCode := 20,
Major := 2,
Minor := 3,
PortLabel := RxBACKPLANE,
Slot := 9,
NodeAddress := 172.27.12.89,
Mode := 2#0000_0000_0000_0000,
CompatibleModule := 1,
KeyMask := 2#0000_0000_0001_1111)
END_MODULE
TAG
In_Data_0 OF Local:7:I.Data[0] (RADIX := Binary);
In_Data_1 OF Local:7:I.Data[5] (RADIX := Binary);
PLCADMIN_PLC_LTU1_PP01 : DINT[40] (RADIX := Decimal) := [1,0,0,0,4778690,12384,55,14351,0,0,1999,6,9,4,55,57,387050,436,7,0,1666,3180,256,388,198,662,198,662,198,662,0,1
,384,354,6,1,2,0,0,0];
PLCADMIN_UPTIMETIMER : TIMER := [-1071112558,1000000000,436007];
PPS_UND_EPICS_0 : Data_Array := [4,0,0,0,0,0,0,0];
PPS_UND_EPICS_1 : Data_Array := [-1335919616,-1335919616,24343,24343,1446401,-805306369,3180251,0];
PPS_UND_EPICS_2 : Data_Array_Real := [0.00000000e+000,0.00000000e+000,0.00000000e+000,0.00000000e+000,0.00000000e+000,0.00000000e+000
,0.00000000e+000,0.00000000e+000];
PPS_UND_EPICS_3 : Data_Array_Real := [0.00000000e+000,0.00000000e+000,0.00000000e+000,0.00000000e+000,0.00000000e+000,0.00000000e+000
,0.00000000e+000,0.00000000e+000];
PPS_UND_EPICS_4 : Data_Array_Real := [0.00000000e+000,0.00000000e+000,0.00000000e+000,0.00000000e+000,0.00000000e+000,0.00000000e+000
,0.00000000e+000,0.00000000e+000];
PPS_UND_EPICS_5 : Data_Array_Real := [0.00000000e+000,0.00000000e+000,0.00000000e+000,0.00000000e+000,0.00000000e+000,0.00000000e+000
,0.00000000e+000,0.00000000e+000];
PPS_UND_EPICS_6 : Data_Array_Real := [1.40756655e+001,1.44275770e+001,1.44181929e+001,1.45237656e+001,1.45573931e+001,1.44612036e+001
,1.40490770e+001,1.45347147e+001];
PPS_UND_EPICS_7 : Data_Array_Real := [1.42031355e+001,1.45855455e+001,1.31387997e+001,1.44924850e+001,1.46121349e+001,1.45417528e+001
,3.81628036e-001,1.45605211e+001];
PPS_UND_EPICS_8 : Data_Array := [0,0,0,0,0,0,0,0];
END_TAG
PROGRAM MainProgram (MAIN := MainRoutine,
MODE := 0,
DisableFlag := 0)
TAG
Alarm_1 OF Module_OUT_02.6 (RADIX := Decimal);
Alarm_2 OF Module_OUT_02.7 (RADIX := Decimal);
Alarm_3 OF Module_OUT_02.8 (RADIX := Decimal);
Alarm_4 OF Module_OUT_02.9 (RADIX := Decimal);
BTH_Bailing_Control : BOOL (RADIX := Decimal) := 0;
BTH_Command : BOOL (RADIX := Decimal) := 0;
BTH_Controlled_Access_Driver : BOOL (RADIX := Decimal) := 0;
BTH_Door_E_LAT_A OF Pilz_Chain_A.21 (RADIX := Decimal);
BTH_Door_E_LAT_B OF Pilz_Chain_B.21 (RADIX := Decimal);
BTH_Door_E_SUM_A OF Pilz_Chain_A.20 (RADIX := Decimal);
BTH_Door_E_SUM_B OF Pilz_Chain_B.20 (RADIX := Decimal);
BTH_Door_Release_Delay : TIMER := [3357102,2000,0];
BTH_Door_WM_LAT_A OF Pilz_Chain_A.17 (RADIX := Decimal);
BTH_Door_WM_LAT_B OF Pilz_Chain_B.17 (RADIX := Decimal);
BTH_Door_WM_SUM_A OF Pilz_Chain_A.16 (RADIX := Decimal);
BTH_Door_WM_SUM_B OF Pilz_Chain_B.16 (RADIX := Decimal);
BTH_EE_E_LAT_A OF Pilz_Chain_A.12 (RADIX := Decimal);
BTH_EE_E_LAT_B OF Pilz_Chain_B.12 (RADIX := Decimal);
BTH_EE_WM_LAT_A OF Pilz_Chain_A.11 (RADIX := Decimal);
BTH_EE_WM_LAT_B OF Pilz_Chain_B.11 (RADIX := Decimal);
BTH_EO_A OF Pilz_Chain_A.10 (RADIX := Decimal);
BTH_EO_B OF Pilz_Chain_B.10 (RADIX := Decimal);
BTH_Gate_E_LAT_A OF Pilz_Chain_A.23 (RADIX := Decimal);
BTH_Gate_E_LAT_B OF Pilz_Chain_B.23 (RADIX := Decimal);
BTH_Gate_E_SUM_A OF Pilz_Chain_A.22 (RADIX := Decimal);
BTH_Gate_E_SUM_B OF Pilz_Chain_B.22 (RADIX := Decimal);
BTH_Gate_WM_LAT_A OF Pilz_Chain_A.19 (RADIX := Decimal);
BTH_Gate_WM_LAT_B OF Pilz_Chain_B.19 (RADIX := Decimal);
BTH_Gate_WM_SUM_A OF Pilz_Chain_A.18 (RADIX := Decimal);
BTH_Gate_WM_SUM_B OF Pilz_Chain_B.18 (RADIX := Decimal);
BTH_Interlock_Sum : BOOL (RADIX := Decimal) := 0;
BTH_KB1_E_A OF Pilz_Chain_A.13 (RADIX := Decimal);
BTH_KB1_E_B OF Pilz_Chain_B.13 (RADIX := Decimal);
BTH_KB2_E_A OF Pilz_Chain_A.14 (RADIX := Decimal);
BTH_KB2_E_B OF Pilz_Chain_B.14 (RADIX := Decimal);
BTH_KB_E_LAT_A OF Pilz_Chain_A.15 (RADIX := Decimal);
BTH_KB_E_LAT_B OF Pilz_Chain_B.15 (RADIX := Decimal);
BTH_Key_Release_Delay : TIMER := [1675027,2000,0];
BTH_Permitted_Access_Driver : BOOL (RADIX := Decimal) := 0;
BTH_Search_Reset : BOOL (RADIX := Decimal) := 0;
BTH_SP_Mu_A OF Pilz_Chain_A.6 (RADIX := Decimal);
BTH_SP_Mu_B OF Pilz_Chain_B.6 (RADIX := Decimal);
BTH_SP_WM_A OF Pilz_Chain_A.7 (RADIX := Decimal);
BTH_SP_WM_B OF Pilz_Chain_B.7 (RADIX := Decimal);
BTM60_IN_A OF Module_IN_04.9 (RADIX := Decimal);
BTM60_IN_B OF Module_IN_04.10 (RADIX := Decimal);
BTM60_OUT OF Module_IN_04.11 (RADIX := Decimal);
CA_BTH_E OF Module_OUT_01.11 (RADIX := Decimal);
CA_DMP OF Module_OUT_02.15 (RADIX := Decimal);
Crash_Bar_BTHWM OF Module_IN_05.8 (RADIX := Decimal);
Crash_Bar_BTH_E OF Module_IN_05.9 (RADIX := Decimal);
Crash_Bar_DMP OF Module_IN_05.10 (RADIX := Decimal);
D2_IN_A OF Module_IN_04.6 (RADIX := Decimal);
D2_IN_B OF Module_IN_04.7 (RADIX := Decimal);
D2_OUT OF Module_IN_04.8 (RADIX := Decimal);
DMP_Bailing_Control : BOOL (RADIX := Decimal) := 0;
DMP_Command : BOOL (RADIX := Decimal) := 0;
DMP_Controlled_Access_Driver : BOOL (RADIX := Decimal) := 0;
DMP_Door_B OF Module_IN_03.14 (RADIX := Decimal);
DMP_Door_LAT_A OF Module_IN_02.15 (RADIX := Decimal);
DMP_Door_LAT_B OF Module_IN_03.15 (RADIX := Decimal);
DMP_Door_Release_Delay : TIMER := [3235095,2000,0];
DMP_Door_SUM_A OF Module_IN_02.14 (RADIX := Decimal);
DMP_EE_LAT_A OF Module_IN_02.9 (RADIX := Decimal);
DMP_EE_LAT_B OF Module_IN_03.9 (RADIX := Decimal);
DMP_EO_A OF Module_IN_02.8 (RADIX := Decimal);
DMP_EO_B OF Module_IN_03.8 (RADIX := Decimal);
DMP_Gate_B OF Module_IN_03.12 (RADIX := Decimal);
DMP_Gate_LAT_A OF Module_IN_02.13 (RADIX := Decimal);
DMP_Gate_LAT_B OF Module_IN_03.13 (RADIX := Decimal);
DMP_Gate_SUM_A OF Module_IN_02.12 (RADIX := Decimal);
DMP_Interlock_Sum : BOOL (RADIX := Decimal) := 0;
DMP_KB_A OF Module_IN_02.10 (RADIX := Decimal);
DMP_KB_B OF Module_IN_03.10 (RADIX := Decimal);
DMP_KB_LAT_A OF Module_IN_02.11 (RADIX := Decimal);
DMP_KB_LAT_B OF Module_IN_03.11 (RADIX := Decimal);
DMP_Key_Release_Delay : TIMER := [2906609,2000,0];
DMP_Permitted_Access_Driver : BOOL (RADIX := Decimal) := 0;
DMP_Search_Reset : BOOL (RADIX := Decimal) := 0;
DMP_SP_1_A OF Module_IN_02.6 (RADIX := Decimal);
DMP_SP_1_B OF Module_IN_03.6 (RADIX := Decimal);
DMP_SP_2_A OF Module_IN_02.7 (RADIX := Decimal);
DMP_SP_2_B OF Module_IN_03.7 (RADIX := Decimal);
DoorRel_BTHE OF Module_IN_01.3 (RADIX := Decimal);
DoorRel_BTH_DIB : BOOL (RADIX := Decimal) := 0;
DoorRel_DMP OF Module_IN_01.9 (RADIX := Decimal);
DoorRel_DMP_DIB : BOOL (RADIX := Decimal) := 0;
DoorRel_LED_BTHE OF Module_OUT_01.13 (RADIX := Decimal);
DoorRel_LED_DMP OF Module_OUT_03.1 (RADIX := Decimal);
EO_Lights OF Module_OUT_03.6 (RADIX := Decimal);
EO_Lights_DMP OF Module_OUT_03.7 (RADIX := Decimal);
ILCK_CMPLT_BTH_A OF Pilz_Chain_A.2 (RADIX := Decimal);
ILCK_CMPLT_BTH_B OF Pilz_Chain_B.2 (RADIX := Decimal);
ILCK_CMPLT_DMP_A OF Pilz_Chain_A.3 (RADIX := Decimal);
ILCK_CMPLT_DMP_B OF Pilz_Chain_B.3 (RADIX := Decimal);
IOC_BTH_Stoppers_IN OF IOC_Control.Data_00.7 (RADIX := Decimal);
IOC_BTH_Stoppers_OUT OF IOC_Control.Data_00.6 (RADIX := Decimal);
IOC_Control OF PPS_UND_EPICS_0 ;
IOC_Controlled_Access_BTH OF IOC_Control.Data_00.1 (RADIX := Decimal);
IOC_Controlled_Access_DMP OF IOC_Control.Data_00.4 (RADIX := Decimal);
IOC_Door_Release_BTH OF IOC_Control.Data_01.1 (RADIX := Decimal);
IOC_Door_Release_DMP OF IOC_Control.Data_01.5 (RADIX := Decimal);
IOC_Interlock_Reset_BTH OF IOC_Control.Data_01.2 (RADIX := Decimal);
IOC_Interlock_Reset_DMP OF IOC_Control.Data_01.6 (RADIX := Decimal);
IOC_Keybank_Release_BTH OF IOC_Control.Data_01.0 (RADIX := Decimal);
IOC_Keybank_Release_DMP OF IOC_Control.Data_01.4 (RADIX := Decimal);
IOC_No_Access OF IOC_Control.Data_00.2 (RADIX := Decimal);
IOC_Permitted_Access_BTH OF IOC_Control.Data_00.0 (RADIX := Decimal);
IOC_Permitted_Access_DMP OF IOC_Control.Data_00.3 (RADIX := Decimal);
IOC_Search_Reset_BTH OF IOC_Control.Data_01.3 (RADIX := Decimal);
IOC_Search_Reset_DMP OF IOC_Control.Data_01.7 (RADIX := Decimal);
IOC_Status OF PPS_UND_EPICS_1 ;
KB_Rel_BTH_E OF Module_OUT_01.6 (RADIX := Decimal);
KB_Rel_DMP OF Module_OUT_02.10 (RADIX := Decimal);
Loop_A_Cmplt OF Module_IN_05.0 (RADIX := Decimal);
Loop_A_Lat OF Module_IN_05.1 (RADIX := Decimal);
Loop_A_Not_Cmplt OF Module_IN_05.4 (RADIX := Decimal);
Loop_B_Cmplt OF Module_IN_05.2 (RADIX := Decimal);
Loop_B_Lat OF Module_IN_05.3 (RADIX := Decimal);
Loop_B_Not_Cmplt OF Module_IN_05.5 (RADIX := Decimal);
MCC_Door_Rel_BTH OF Module_OUT_03.12 (RADIX := Decimal);
MCC_Door_Rel_DMP OF Module_OUT_03.15 (RADIX := Decimal);
MCC_Hardware_En OF Module_IN_01.15 (RADIX := Decimal);
MCC_Reset_BTH OF Module_OUT_03.11 (RADIX := Decimal);
MCC_Reset_DMP OF Module_OUT_03.14 (RADIX := Decimal);
MCC_SecLoopRST OF Module_OUT_02.13 (RADIX := Decimal);
MCC_SR_BTH OF Module_OUT_03.10 (RADIX := Decimal);
MCC_SR_DMP OF Module_OUT_03.13 (RADIX := Decimal);
MlockSwitch_BTH_E OF Module_IN_01.2 (RADIX := Decimal);
MlockSwitch_DMP OF Module_IN_01.8 (RADIX := Decimal);
MlockSw_UNDE1 OF Module_IN_01.4 (RADIX := Decimal);
MlockSw_UNDE2 OF Module_IN_01.5 (RADIX := Decimal);
Mlock_BTHWM OF Module_OUT_01.2 (RADIX := Decimal);
Mlock_BTH_E OF Module_OUT_01.7 (RADIX := Decimal);
Mlock_DMP OF Module_OUT_02.11 (RADIX := Decimal);
Mlock_FLT_BTHWM OF Module_OUT_01.5 (RADIX := Decimal);
Mlock_FLT_BTH_E OF Module_OUT_02.12 (RADIX := Decimal);
Mlock_FLT_DMP OF Module_OUT_01.4 (RADIX := Decimal);
Mlock_LED_BTHE OF Module_OUT_01.14 (RADIX := Decimal);
Mlock_LED_DMP OF Module_OUT_03.2 (RADIX := Decimal);
Mlock_Switch_BTHWM OF Module_IN_01.0 (RADIX := Binary);
Mlock_UND_E OF Module_OUT_02.1 (RADIX := Decimal);
Module_IN_01 OF Local:1:I.Data (RADIX := Binary);
Module_IN_02 OF Local:2:I.Data (RADIX := Binary);
Module_IN_03 OF Local:3:I.Data (RADIX := Binary);
Module_IN_04 OF Remote:1:I.Data (RADIX := Binary);
Module_IN_05 OF Remote:2:I.Data (RADIX := Decimal);
Module_OUT_01 OF Local:4:O.Data (RADIX := Binary);
Module_OUT_02 OF Local:5:O.Data (RADIX := Binary);
Module_OUT_03 OF Local:6:O.Data (RADIX := Binary);
NA2_CA_Driver : BOOL (RADIX := Decimal) := 0;
NA_BTH_E OF Module_OUT_01.10 (RADIX := Decimal);
NA_DMP OF Module_OUT_02.14 (RADIX := Decimal);
No_Access : BOOL (RADIX := Decimal) := 0;
No_Access_Driver : BOOL (RADIX := Decimal) := 0;
No_Op : BOOL (RADIX := Decimal) := 1;
PA_BTH_E OF Module_OUT_01.12 (RADIX := Decimal);
PA_DMP OF Module_OUT_03.0 (RADIX := Decimal);
Pilz_Chain_A OF In_Data_0 (RADIX := Binary);
Pilz_Chain_B OF In_Data_1 (RADIX := Binary);
ReturnAccum : BOOL (RADIX := Decimal) := 0;
ReturnTest : BOOL (RADIX := Decimal) := 0;
SEARCH_LAT_BTH_A OF Pilz_Chain_A.4 (RADIX := Decimal);
SEARCH_LAT_BTH_B OF Pilz_Chain_B.4 (RADIX := Decimal);
SEARCH_LAT_DMP_A OF Pilz_Chain_A.5 (RADIX := Decimal);
SEARCH_LAT_DMP_B OF Pilz_Chain_B.5 (RADIX := Decimal);
Security_Loop_A OF Pilz_Chain_A.0 (RADIX := Decimal);
Security_Loop_B OF Pilz_Chain_B.0 (RADIX := Decimal);
SP_Egress_A OF Module_IN_01.6 (RADIX := Decimal);
SP_Egress_B OF Module_IN_01.7 (RADIX := Decimal);
ST60_IN_A OF Module_IN_04.0 (RADIX := Decimal);
ST60_IN_B OF Module_IN_04.1 (RADIX := Decimal);
ST60_OUT OF Module_IN_04.2 (RADIX := Decimal);
ST61_IN_A OF Module_IN_04.3 (RADIX := Decimal);
ST61_IN_B OF Module_IN_04.4 (RADIX := Decimal);
ST61_OUT OF Module_IN_04.5 (RADIX := Decimal);
Stoppers_DSBLD OF Module_IN_04.15 (RADIX := Decimal);
Stoppers_ENBLD OF Module_IN_04.14 (RADIX := Decimal);
Stopper_ENBL_A OF Module_IN_04.12 (RADIX := Decimal);
Stopper_ENBL_B OF Module_IN_04.13 (RADIX := Decimal);
Stopper_IN_Sum_A : BOOL (RADIX := Decimal) := 1;
Stopper_IN_Sum_B : BOOL (RADIX := Decimal) := 1;
Stopper_Out_A OF Module_OUT_03.8 (RADIX := Decimal);
Stopper_Out_B OF Module_OUT_03.9 (RADIX := Decimal);
STOPPER_PERM_A OF Pilz_Chain_A.1 (RADIX := Decimal);
STOPPER_PERM_B OF Pilz_Chain_B.1 (RADIX := Decimal);
S_Preset1_LED_DMP OF Module_OUT_03.4 (RADIX := Decimal);
S_Preset2_LED_DMP OF Module_OUT_03.5 (RADIX := Decimal);
S_Preset_BTHWM_LED OF Module_OUT_01.3 (RADIX := Decimal);
S_Preset_BTHW_Egress_LED OF Module_OUT_01.1 (RADIX := Decimal);
S_Preset_BTHW_Muon_LED OF Module_OUT_01.0 (RADIX := Decimal);
S_Preset_LED_UNDE OF Module_OUT_02.5 (RADIX := Decimal);
S_Preset_LED_UNDW OF Module_OUT_02.4 (RADIX := Decimal);
S_Reset_LED_BTH_E OF Module_OUT_01.15 (RADIX := Decimal);
S_Reset_LED_DMP OF Module_OUT_03.3 (RADIX := Decimal);
Test_Mode OF Module_IN_01.14 (RADIX := Decimal);
UND_EE_E_LAT_A OF Module_IN_02.1 (RADIX := Decimal);
UND_EE_E_LAT_B OF Module_IN_03.1 (RADIX := Decimal);
UND_EO_A OF Module_IN_02.0 (RADIX := Decimal);
UND_EO_B OF Module_IN_03.0 (RADIX := Decimal);
UND_Gate_E_B OF Module_IN_03.4 (RADIX := Decimal);
UND_Gate_E_LAT_A OF Module_IN_02.5 (RADIX := Decimal);
UND_Gate_E_LAT_B OF Module_IN_03.5 (RADIX := Decimal);
UND_Gate_E_SUM_A OF Module_IN_02.4 (RADIX := Decimal);
UND_Gate_W_B OF Module_IN_03.2 (RADIX := Decimal);
UND_Gate_W_LAT_A OF Module_IN_02.3 (RADIX := Decimal);
UND_Gate_W_LAT_B OF Module_IN_03.3 (RADIX := Decimal);
UND_Gate_W_SUM_A OF Module_IN_02.2 (RADIX := Decimal);
UND_SP_E_A OF Pilz_Chain_A.9 (RADIX := Decimal);
UND_SP_E_B OF Pilz_Chain_B.9 (RADIX := Decimal);
UND_SP_W_A OF Pilz_Chain_A.8 (RADIX := Decimal);
UND_SP_W_B OF Pilz_Chain_B.8 (RADIX := Decimal);
YM_Flash OF Module_OUT_01.9 (RADIX := Decimal);
YM_M_DMP OF Module_OUT_02.13 (RADIX := Decimal);
YM_Yellow OF Module_OUT_01.8 (RADIX := Decimal);
YM_Y_DMP OF Module_OUT_02.12 (RADIX := Decimal);
END_TAG
ROUTINE Access_Control
RC: "$N"
"*******************************************************************************$'$N"
"ACCESS CONTROL$N"
"*******************************************************************************$'$N"
"$N"
"";
N: SBR()OTE(No_Op);
RC: "$N"
"$N"
"*******************************************************************************$'$N"
"BTH Door and Keybank Control$N"
"*******************************************************************************$'$N"
"$N"
"";
N: XIC(MCC_Hardware_En)[XIC(IOC_Keybank_Release_BTH) ,XIC(BTH_Key_Release_Delay.TT) ]TON(BTH_Key_Release_Delay,?,?);
N: XIC(Stopper_IN_Sum_A)XIC(Stopper_IN_Sum_B)XIC(CA_BTH_E)XIC(BTH_Key_Release_Delay.TT)OTE(KB_Rel_BTH_E);
N: XIC(MCC_Hardware_En)[XIC(IOC_Door_Release_BTH) XIC(DoorRel_BTHE) ,XIC(BTH_Door_Release_Delay.TT) ]TON(BTH_Door_Release_Delay,?,?);
N: XIO(PA_BTH_E)XIC(BTH_EE_E_LAT_A)XIC(BTH_EE_E_LAT_B)XIO(BTH_Door_Release_Delay.TT)OTE(Mlock_BTH_E);
N: XIO(MlockSwitch_BTH_E)OTE(Mlock_LED_BTHE);
N: [XIC(MCC_Hardware_En) XIC(IOC_Door_Release_BTH) ,XIC(BTH_Door_Release_Delay.TT) ]OTE(DoorRel_LED_BTHE);
RC: "*******************************************************************************$'$N"
"BTH West Maze Magnetic Lock$N"
"*******************************************************************************$'$N"
"$N"
"";
N: XIO(PA_BTH_E)XIC(BTH_EE_WM_LAT_A)XIC(BTH_EE_WM_LAT_B)OTE(Mlock_BTHWM);
RC: "*******************************************************************************$'$N"
"UND East Gate Magnetic Lock$N"
"*******************************************************************************$'$N"
"$N"
"";
N: [XIO(PA_BTH_E) ,XIO(PA_DMP) ]XIC(UND_EE_E_LAT_A)XIC(UND_EE_E_LAT_B)[XIC(S_Preset_LED_UNDE) ,XIC(S_Preset1_LED_DMP) ,XIC(S_Preset2_LED_DMP) ]OTE(Mlock_UND_E);
RC: "*******************************************************************************$'$N"
"UND Door and Keybank Control$N"
"*******************************************************************************$'$N"
"$N"
"";
N: XIC(MCC_Hardware_En)[XIC(IOC_Keybank_Release_DMP) ,XIC(DMP_Key_Release_Delay.TT) ]TON(DMP_Key_Release_Delay,?,?);
N: XIC(Stopper_IN_Sum_A)XIC(Stopper_IN_Sum_B)XIC(CA_DMP)XIC(DMP_Key_Release_Delay.TT)OTE(KB_Rel_DMP);
N: XIC(MCC_Hardware_En)[XIC(IOC_Door_Release_DMP) XIC(DoorRel_DMP) ,XIC(DMP_Door_Release_Delay.TT) ]TON(DMP_Door_Release_Delay,?,?);
N: XIO(PA_DMP)XIC(DMP_EE_LAT_A)XIC(DMP_EE_LAT_B)XIO(DMP_Door_Release_Delay.TT)OTE(Mlock_DMP);
N: XIO(MlockSwitch_DMP)OTE(Mlock_LED_DMP);
N: [XIC(MCC_Hardware_En) XIC(IOC_Door_Release_DMP) ,XIC(DMP_Door_Release_Delay.TT) ]OTE(DoorRel_LED_DMP);
N: RET();
END_ROUTINE
ROUTINE Bailing
RC: "$N"
"*******************************************************************************$'$N"
"BAILING$N"
"*******************************************************************************$'$N"
"$N"
"";
N: SBR()OTE(No_Op);
RC: "*******************************************************************************$N"
"Bailing Circuit$N"
"*******************************************************************************$N"
"*******************************************************************************$N"
"Bailing Control is use to inhibit bailing between states$N"
"*******************************************************************************$N"
"$N"
"";
N: XIC(ST60_IN_A)XIC(ST61_IN_A)XIC(D2_IN_A)XIC(BTM60_IN_A)OTE(Stopper_IN_Sum_A);
N: XIC(ST60_IN_B)XIC(ST61_IN_B)XIC(D2_IN_B)XIC(BTM60_IN_B)OTE(Stopper_IN_Sum_B);
N: XIC(MCC_Hardware_En)XIC(Stopper_IN_Sum_A)XIC(Stopper_IN_Sum_B)XIC(BTH_KB1_E_A)XIC(BTH_KB1_E_B)XIC(BTH_KB2_E_A)XIC(BTH_KB2_E_B)OTE(BTH_Bailing_Control);
N: XIC(MCC_Hardware_En)XIC(Stopper_IN_Sum_A)XIC(Stopper_IN_Sum_B)XIC(DMP_KB_A)XIC(DMP_KB_B)OTE(DMP_Bailing_Control);
N: XIC(ILCK_CMPLT_BTH_A)XIC(ILCK_CMPLT_BTH_B)OTE(BTH_Interlock_Sum);
N: XIC(ILCK_CMPLT_DMP_A)XIC(ILCK_CMPLT_DMP_B)OTE(DMP_Interlock_Sum);
N: XIC(SEARCH_LAT_BTH_A)XIC(SEARCH_LAT_BTH_B)OTE(BTH_Search_Reset);
N: XIC(SEARCH_LAT_DMP_A)XIC(SEARCH_LAT_DMP_B)OTE(DMP_Search_Reset);
RC: "*******************************************************************************$N"
"Access State Drivers$N"
"*******************************************************************************$N"
"$N"
"";
N: XIC(BTH_Bailing_Control)XIC(DMP_Bailing_Control)XIC(CA_BTH_E)XIO(BTH_Controlled_Access_Driver)XIC(CA_DMP)XIO(DMP_Controlled_Access_Driver)XIC(BTH_Interlock_Sum)XIC(DMP_Interlock_Sum)XIC(BTH_Search_Reset)XIC(DMP_Search_Reset)XIC(IOC_No_Access)OTE(No_Access_Driver);
N: XIC(BTH_Bailing_Control)XIC(DMP_Bailing_Control)XIC(No_Access)XIO(IOC_No_Access)[XIC(IOC_Controlled_Access_DMP) ,XIC(IOC_Controlled_Access_BTH) ]OTE(NA2_CA_Driver);
N: XIC(BTH_Bailing_Control)XIC(PA_BTH_E)XIO(IOC_Permitted_Access_BTH)XIC(IOC_Controlled_Access_BTH)OTE(BTH_Controlled_Access_Driver);
N: XIC(DMP_Bailing_Control)XIC(PA_DMP)XIO(IOC_Permitted_Access_DMP)XIC(IOC_Controlled_Access_DMP)OTE(DMP_Controlled_Access_Driver);
N: XIC(BTH_Bailing_Control)XIC(CA_BTH_E)XIO(IOC_Controlled_Access_BTH)XIC(IOC_Permitted_Access_BTH)OTE(BTH_Permitted_Access_Driver);
N: XIC(DMP_Bailing_Control)XIC(CA_DMP)XIO(IOC_Controlled_Access_DMP)XIC(IOC_Permitted_Access_DMP)OTE(DMP_Permitted_Access_Driver);
RC: "*******************************************************************************$N"
"No Access$N"
"*******************************************************************************$N"
"$N"
"";
N: [XIC(No_Access_Driver) ,XIC(No_Access) XIO(BTH_Controlled_Access_Driver) XIO(DMP_Controlled_Access_Driver) XIO(NA2_CA_Driver) ]OTE(No_Access);
N: XIC(No_Access)OTE(NA_BTH_E);
N: XIC(No_Access)OTE(NA_DMP);
RC: "*******************************************************************************$N"
"BTH Controlled Access$N"
"*******************************************************************************$N"
"$N"
"";
N: [XIC(BTH_Controlled_Access_Driver) ,XIC(NA2_CA_Driver) ,XIC(CA_BTH_E) XIO(BTH_Permitted_Access_Driver) XIO(No_Access_Driver) ]OTE(CA_BTH_E);
RC: "*******************************************************************************$N"
"DMP Controlled Access$N"
"*******************************************************************************$N"
"$N"
"";
N: [XIC(DMP_Controlled_Access_Driver) ,XIC(NA2_CA_Driver) ,XIC(CA_DMP) XIO(DMP_Permitted_Access_Driver) XIO(No_Access_Driver) ]OTE(CA_DMP);
RC: "*******************************************************************************$N"
" BTH Permitted Access$N"
"*******************************************************************************$N"
"$N"
"";
N: [XIC(BTH_Permitted_Access_Driver) ,XIO(CA_BTH_E) XIO(No_Access) ]OTE(PA_BTH_E);
RC: "*******************************************************************************$N"
"DMP Permitted Access$N"
"*******************************************************************************$N"
"$N"
"";
N: [XIC(DMP_Permitted_Access_Driver) ,XIO(CA_DMP) XIO(No_Access) ]OTE(PA_DMP);
N: RET();
END_ROUTINE
ROUTINE Hazard_Lights
RC: "$N"
"*******************************************************************************$'$N"
"HAZARD LIGHTS$N"
"*******************************************************************************$'$N"
"$N"
"";
N: SBR()OTE(No_Op);
RC: "$N"
"*******************************************************************************$'$N"
"BTH Yellow Magenta Lights$N"
"*******************************************************************************$'$N"
"$N"
"";
N: XIC(Stopper_IN_Sum_A)XIC(Stopper_IN_Sum_B)XIO(No_Access)OTE(YM_Yellow);
N: [XIO(Stopper_IN_Sum_A) ,XIO(Stopper_IN_Sum_B) ]OTE(YM_Flash);
RC: "$N"
"*******************************************************************************$'$N"
"Emergency Off Lights$N"
"*******************************************************************************$'$N"
"$N"
"";
N: XIC(Security_Loop_A)XIC(Security_Loop_B)OTE(EO_Lights);
RC: "$N"
"*******************************************************************************$'$N"
"Alarms and Warnings$N"
"*******************************************************************************$'$N"
"$N"
"";
N: XIC(Loop_A_Lat)XIC(Loop_B_Lat)OTE(Alarm_1);
N: XIC(STOPPER_PERM_A)XIC(STOPPER_PERM_B)OTE(Alarm_2);
N: RET();
END_ROUTINE
ROUTINE IOC_Control
RC: "$N"
"*******************************************************************************$'$N"
"IOC CONTROL$N"
"*******************************************************************************$'$N"
"$N"
"";
N: SBR()OTE(No_Op);
RC: "$N"
"$N"
"*******************************************************************************$N"
"Controls to inhibit IOC commands$N"
"*******************************************************************************";
N: XIC(MCC_Hardware_En)XIC(CA_BTH_E)OTE(BTH_Command);
N: XIC(MCC_Hardware_En)XIC(CA_DMP)OTE(DMP_Command);
RC: "$N"
"$N"
"*******************************************************************************$N"
"Stopper Controls$N"
"*******************************************************************************";
N: XIC(STOPPER_PERM_A)XIC(Stopper_ENBL_A)XIC(Stoppers_ENBLD)XIO(Stoppers_DSBLD)XIO(IOC_BTH_Stoppers_IN)[XIC(MCC_Hardware_En) XIC(IOC_BTH_Stoppers_OUT) ,XIC(Stopper_Out_A) ]OTE(Stopper_Out_A);
N: XIC(STOPPER_PERM_B)XIC(Stopper_ENBL_B)XIC(Stoppers_ENBLD)XIO(Stoppers_DSBLD)XIO(IOC_BTH_Stoppers_IN)[XIC(MCC_Hardware_En) XIC(IOC_BTH_Stoppers_OUT) ,XIC(Stopper_Out_B) ]OTE(Stopper_Out_B);
RC: "*******************************************************************************$N"
"Commands to safety control PLC$N"
"*******************************************************************************";
N: XIC(BTH_Command)XIC(IOC_Search_Reset_BTH)OTE(MCC_SR_BTH);
N: XIC(BTH_Command)XIC(IOC_Interlock_Reset_BTH)OTE(MCC_Reset_BTH);
N: XIC(MCC_Hardware_En)XIC(STOPPER_PERM_A)XIC(STOPPER_PERM_B)XIC(IOC_Interlock_Reset_BTH)OTE(MCC_SecLoopRST);
N: XIC(BTH_Command)[XIC(IOC_Door_Release_BTH) ,XIC(MCC_Door_Rel_BTH) ]OTE(MCC_Door_Rel_BTH);
N: XIC(DMP_Command)XIC(IOC_Search_Reset_DMP)OTE(MCC_SR_DMP);
N: XIC(DMP_Command)XIC(IOC_Interlock_Reset_DMP)OTE(MCC_Reset_DMP);
N: XIC(DMP_Command)[XIC(IOC_Door_Release_DMP) ,XIC(MCC_Door_Rel_DMP) ]OTE(MCC_Door_Rel_DMP);
N: RET();
END_ROUTINE
ROUTINE IOC_Status
RC: "$N"
"*******************************************************************************$'$N"
"IOC STATUS$N"
"*******************************************************************************$'$N"
"$N"
"";
N: SBR()OTE(No_Op);
RC: "$N"
"*******************************************************************************$'$N"
"Status shows a crash bar violation$N"
"*******************************************************************************$'$N"
"$N"
"";
N: [XIC(BTH_Door_Release_Delay.EN) ,XIC(BTH_Command) XIC(DoorRel_BTH_DIB) ]OTE(DoorRel_BTH_DIB);
N: [XIO(Crash_Bar_BTH_E) XIO(PA_BTH_E) XIO(DoorRel_BTH_DIB) ,[XIO(BTH_Command) ,XIO(IOC_Interlock_Reset_BTH) ] XIC(Mlock_FLT_BTH_E) ][OTE(Mlock_FLT_BTH_E) ,OTE(PPS_UND_EPICS_1.Data_04.22) ];
N: [XIO(Crash_Bar_BTHWM) XIO(PA_BTH_E) ,[XIO(BTH_Command) ,XIO(IOC_Interlock_Reset_BTH) ] XIC(Mlock_FLT_BTHWM) ][OTE(Mlock_FLT_BTHWM) ,OTE(PPS_UND_EPICS_1.Data_04.21) ];
N: [XIC(DMP_Door_Release_Delay.EN) ,XIC(DMP_Command) XIC(DoorRel_BTH_DIB) ]OTE(DoorRel_DMP_DIB);
N: [XIO(Crash_Bar_DMP) XIO(PA_DMP) XIO(DoorRel_DMP_DIB) ,[XIO(DMP_Command) ,XIO(IOC_Interlock_Reset_DMP) ] XIC(Mlock_FLT_DMP) ][OTE(Mlock_FLT_DMP) ,OTE(PPS_UND_EPICS_1.Data_04.23) ];
RC: "$N"
"**********************************************************************$N"
"IOC Status$N"
"**********************************************************************$N"
"**********************************************************************$N"
"Block move the data from the Pilz to the EPICS IOC array$N"
"Individual bits are assigned tags in Progam Tags$N"
"**********************************************************************$N"
"$N"
"";
N: MOV(Pilz_Chain_A,IOC_Status.Data_00);
N: MOV(Pilz_Chain_B,IOC_Status.Data_01);
RC: "**********************************************************************$N"
"Move other data from the Pilz to the EPICS IOC array$N"
"$N"
"Pilz Chain A Data$N"
"**********************************************************************$N"
"$N"
"";
N: XIC(UND_EO_A)OTE(IOC_Status.Data_02.0);
N: XIC(UND_EE_E_LAT_A)OTE(IOC_Status.Data_02.1);
N: XIC(UND_Gate_W_SUM_A)OTE(IOC_Status.Data_02.2);
N: XIC(UND_Gate_W_LAT_A)OTE(IOC_Status.Data_02.3);
N: XIC(UND_Gate_E_SUM_A)OTE(IOC_Status.Data_02.4);
N: XIC(UND_Gate_E_LAT_A)OTE(IOC_Status.Data_02.5);
N: XIC(DMP_SP_1_A)OTE(IOC_Status.Data_02.6);
N: XIC(DMP_SP_2_A)OTE(IOC_Status.Data_02.7);
N: XIC(DMP_EO_A)OTE(IOC_Status.Data_02.8);
N: XIC(DMP_EE_LAT_A)OTE(IOC_Status.Data_02.9);
N: XIC(DMP_KB_A)OTE(IOC_Status.Data_02.10);
N: XIC(DMP_KB_LAT_A)OTE(IOC_Status.Data_02.11);
N: XIC(DMP_Gate_SUM_A)OTE(IOC_Status.Data_02.12);
N: XIC(DMP_Gate_LAT_A)OTE(IOC_Status.Data_02.13);
N: XIC(DMP_Door_SUM_A)OTE(IOC_Status.Data_02.14);
N: XIC(DMP_Door_LAT_A)OTE(IOC_Status.Data_02.15);
RC: "**********************************************************************$N"
"Move other data from the Pilz to the EPICS IOC array$N"
"$N"
"Pilz Chain B Data$N"
"**********************************************************************";
N: XIC(UND_EO_B)OTE(IOC_Status.Data_03.0);
N: XIC(UND_EE_E_LAT_B)OTE(IOC_Status.Data_03.1);
N: XIC(UND_Gate_W_B)OTE(IOC_Status.Data_03.2);
N: XIC(UND_Gate_W_LAT_B)OTE(IOC_Status.Data_03.3);
N: XIC(UND_Gate_E_B)OTE(IOC_Status.Data_03.4);
N: XIC(UND_Gate_E_LAT_B)OTE(IOC_Status.Data_03.5);
N: XIC(DMP_SP_1_B)OTE(IOC_Status.Data_03.6);
N: XIC(DMP_SP_2_B)OTE(IOC_Status.Data_03.7);
N: XIC(DMP_EO_B)OTE(IOC_Status.Data_03.8);
N: XIC(DMP_EE_LAT_B)OTE(IOC_Status.Data_03.9);
N: XIC(DMP_KB_B)OTE(IOC_Status.Data_03.10);
N: XIC(DMP_KB_LAT_B)OTE(IOC_Status.Data_03.11);
N: XIC(DMP_Gate_B)OTE(IOC_Status.Data_03.12);
N: XIC(DMP_Gate_LAT_B)OTE(IOC_Status.Data_03.13);
N: XIC(DMP_Door_B)OTE(IOC_Status.Data_03.14);
N: XIC(DMP_Door_LAT_B)OTE(IOC_Status.Data_03.15);
RC: "**********************************************************************$N"
"Move access control data to the EPICS IOC array$N"
"$N"
"Allan Bradley Access Control Data$N"
"**********************************************************************";
N: XIC(S_Preset_BTHW_Egress_LED)OTE(IOC_Status.Data_04.0);
N: XIC(S_Preset_BTHW_Muon_LED)OTE(IOC_Status.Data_04.1);
N: XIC(S_Preset_BTHWM_LED)OTE(IOC_Status.Data_04.2);
N: XIC(S_Preset_LED_UNDE)OTE(IOC_Status.Data_04.3);
N: XIC(S_Preset_LED_UNDW)OTE(IOC_Status.Data_04.4);
N: XIC(S_Reset_LED_BTH_E)OTE(IOC_Status.Data_04.5);
N: XIC(S_Preset1_LED_DMP)OTE(IOC_Status.Data_04.6);
N: XIC(S_Preset2_LED_DMP)OTE(IOC_Status.Data_04.7);
N: XIC(S_Reset_LED_DMP)OTE(IOC_Status.Data_04.8);
N: XIC(PA_BTH_E)OTE(IOC_Status.Data_04.9);
N: XIC(CA_BTH_E)OTE(IOC_Status.Data_04.10);
N: XIC(NA_BTH_E)OTE(IOC_Status.Data_04.11);
N: XIC(PA_DMP)OTE(IOC_Status.Data_04.12);
N: XIC(CA_DMP)OTE(IOC_Status.Data_04.13);
N: XIC(NA_DMP)OTE(IOC_Status.Data_04.14);
N: XIO(Mlock_Switch_BTHWM)OTE(IOC_Status.Data_04.15);
N: XIO(MlockSwitch_BTH_E)OTE(IOC_Status.Data_04.16);
N: XIO(MlockSw_UNDE1)OTE(IOC_Status.Data_04.17);
N: XIO(MlockSw_UNDE2)OTE(IOC_Status.Data_04.18);
N: XIO(MlockSwitch_DMP)OTE(IOC_Status.Data_04.19);
N: XIC(Test_Mode)OTE(IOC_Status.Data_04.20);
RC: "**********************************************************************$N"
"Move Stopper data to the EPICS IOC array$N"
"$N"
"**********************************************************************";
N: XIC(ST60_IN_A)OTE(IOC_Status.Data_06.0);
N: XIC(ST60_IN_B)OTE(IOC_Status.Data_06.1);
N: XIC(ST60_OUT)OTE(IOC_Status.Data_06.2);
N: XIC(ST61_IN_A)OTE(IOC_Status.Data_06.3);
N: XIC(ST61_IN_B)OTE(IOC_Status.Data_06.4);
N: XIC(ST61_OUT)OTE(IOC_Status.Data_06.5);
N: XIC(D2_IN_A)OTE(IOC_Status.Data_06.6);
N: XIC(D2_IN_B)OTE(IOC_Status.Data_06.7);
N: XIC(D2_OUT)OTE(IOC_Status.Data_06.8);
N: XIC(BTM60_IN_A)OTE(IOC_Status.Data_06.9);
N: XIC(BTM60_IN_B)OTE(IOC_Status.Data_06.10);
N: XIC(BTM60_OUT)OTE(IOC_Status.Data_06.11);
N: XIC(Stopper_ENBL_A)OTE(IOC_Status.Data_06.12);
N: XIC(Stopper_ENBL_B)OTE(IOC_Status.Data_06.13);
N: XIC(Stoppers_ENBLD)OTE(IOC_Status.Data_06.14);
N: XIC(Stoppers_DSBLD)OTE(IOC_Status.Data_06.15);
N: XIC(Loop_A_Cmplt)OTE(IOC_Status.Data_06.16);
N: XIC(Loop_A_Lat)OTE(IOC_Status.Data_06.17);
N: XIC(Loop_B_Cmplt)OTE(IOC_Status.Data_06.18);
N: XIC(Loop_B_Lat)OTE(IOC_Status.Data_06.19);
N: XIC(Loop_A_Not_Cmplt)OTE(IOC_Status.Data_06.20);
N: XIC(Loop_B_Not_Cmplt)OTE(IOC_Status.Data_06.21);
N: RET();
END_ROUTINE
ROUTINE MainRoutine
N: JSR(Bailing,0);
N: JSR(Access_Control,0);
N: JSR(Hazard_Lights,0);
N: JSR(Search_Reset,0);
N: JSR(IOC_Control,0);
N: JSR(IOC_Status,0);
END_ROUTINE
ROUTINE Search_Reset
RC: "$N"
"*******************************************************************************$'$N"
"SEARCH RESET$N"
"*******************************************************************************$'$N"
"$N"
"";
N: SBR()OTE(No_Op);
RC: "$N"
"*******************************************************************************$'$N"
"BTH Search Reset$N"
"Provides status to local indicators$N"
"*******************************************************************************$'$N"
"$N"
"";
N: XIC(SP_Egress_A)XIC(SP_Egress_B)OTE(S_Preset_BTHW_Egress_LED);
N: XIC(BTH_SP_Mu_A)XIC(BTH_SP_Mu_B)OTE(S_Preset_BTHW_Muon_LED);
N: XIC(BTH_SP_WM_A)XIC(BTH_SP_WM_B)OTE(S_Preset_BTHWM_LED);
N: XIC(UND_SP_E_A)XIC(UND_SP_E_B)OTE(S_Preset_LED_UNDE);
N: XIC(UND_SP_W_A)XIC(UND_SP_W_B)OTE(S_Preset_LED_UNDW);
N: XIC(SEARCH_LAT_BTH_A)XIC(SEARCH_LAT_BTH_B)OTE(S_Reset_LED_BTH_E);
RC: "$N"
"*******************************************************************************$'$N"
"DMP Search Reset$N"
"Provides status to local indicators$N"
"*******************************************************************************$'$N"
"$N"
"";
N: XIC(DMP_SP_1_A)XIC(DMP_SP_1_B)OTE(S_Preset1_LED_DMP);
N: XIC(DMP_SP_2_A)XIC(DMP_SP_2_B)OTE(S_Preset2_LED_DMP);
N: XIC(SEARCH_LAT_DMP_A)XIC(SEARCH_LAT_DMP_B)OTE(S_Reset_LED_DMP);
N: RET();
END_ROUTINE
END_PROGRAM
PROGRAM plcAdminProgram (MAIN := plcAdmin,
MODE := 0,
DisableFlag := 0)
TAG
PLCADMIN_DOCBASE OF PLCADMIN_PLC_LTU1_PP01[33] (RADIX := Decimal);
PLCADMIN_DOCPREFIX OF PLCADMIN_PLC_LTU1_PP01[31] (RADIX := Decimal);
PLCADMIN_DOCREV OF PLCADMIN_PLC_LTU1_PP01[35] (RADIX := Decimal);
PLCADMIN_DOCSERIES OF PLCADMIN_PLC_LTU1_PP01[32] (RADIX := Decimal);
PLCADMIN_DOCSUFFIX OF PLCADMIN_PLC_LTU1_PP01[34] (RADIX := Decimal);
PLCADMIN_FWVERSIONRAW OF PLCADMIN_PLC_LTU1_PP01[7] (RADIX := Decimal);
PLCADMIN_HEARTBEATRAW OF PLCADMIN_PLC_LTU1_PP01[19] (RADIX := Decimal);
PLCADMIN_MAJORFAULTRAW OF PLCADMIN_PLC_LTU1_PP01[8] (RADIX := Decimal);
PLCADMIN_MINORFAULTRAW OF PLCADMIN_PLC_LTU1_PP01[9] (RADIX := Decimal);
PLCADMIN_MODELRAW OF PLCADMIN_PLC_LTU1_PP01[6] (RADIX := Decimal);
PLCADMIN_PLCADMINV1 OF PLCADMIN_PLC_LTU1_PP01[0] (RADIX := Decimal);
PLCADMIN_PLCADMINV2 OF PLCADMIN_PLC_LTU1_PP01[1] (RADIX := Decimal);
PLCADMIN_PLCADMINV3 OF PLCADMIN_PLC_LTU1_PP01[2] (RADIX := Decimal);
PLCADMIN_PROG1TLST OF PLCADMIN_PLC_LTU1_PP01[24] (RADIX := Decimal);
PLCADMIN_PROG1TMAX OF PLCADMIN_PLC_LTU1_PP01[25] (RADIX := Decimal);
PLCADMIN_PROG2TLST OF PLCADMIN_PLC_LTU1_PP01[26] (RADIX := Decimal);
PLCADMIN_PROG2TMAX OF PLCADMIN_PLC_LTU1_PP01[27] (RADIX := Decimal);
PLCADMIN_PROG3TLST OF PLCADMIN_PLC_LTU1_PP01[28] (RADIX := Decimal);
PLCADMIN_PROG3TMAX OF PLCADMIN_PLC_LTU1_PP01[29] (RADIX := Decimal);
PLCADMIN_PROGPLCATLST OF PLCADMIN_PLC_LTU1_PP01[22] (RADIX := Decimal);
PLCADMIN_PROGPLCATMAX OF PLCADMIN_PLC_LTU1_PP01[23] (RADIX := Decimal);
PLCADMIN_SERIALNUMBER OF PLCADMIN_PLC_LTU1_PP01[4] (RADIX := Decimal);
PLCADMIN_STATUSRAW OF PLCADMIN_PLC_LTU1_PP01[5] (RADIX := Decimal);
PLCADMIN_TASKMAINTLST OF PLCADMIN_PLC_LTU1_PP01[20] (RADIX := Decimal);
PLCADMIN_TASKMAINTMAX OF PLCADMIN_PLC_LTU1_PP01[21] (RADIX := Decimal);
PLCADMIN_TODDATE OF PLCADMIN_PLC_LTU1_PP01[12] (RADIX := Decimal);
PLCADMIN_TODHOUR OF PLCADMIN_PLC_LTU1_PP01[13] (RADIX := Decimal);
PLCADMIN_TODMICROSECOND OF PLCADMIN_PLC_LTU1_PP01[16] (RADIX := Decimal);
PLCADMIN_TODMINUTE OF PLCADMIN_PLC_LTU1_PP01[14] (RADIX := Decimal);
PLCADMIN_TODMONTH OF PLCADMIN_PLC_LTU1_PP01[11] (RADIX := Decimal);
PLCADMIN_TODSECOND OF PLCADMIN_PLC_LTU1_PP01[15] (RADIX := Decimal);
PLCADMIN_TODYEAR OF PLCADMIN_PLC_LTU1_PP01[10] (RADIX := Decimal);
PLCADMIN_UPTIMEDAY OF PLCADMIN_PLC_LTU1_PP01[18] (RADIX := Decimal);
PLCADMIN_UPTIMESEC OF PLCADMIN_PLC_LTU1_PP01[17] (RADIX := Decimal);
PLCADMIN_VERSIONMAJOR OF PLCADMIN_PLC_LTU1_PP01[36] (RADIX := Decimal);
PLCADMIN_VERSIONMINOR OF PLCADMIN_PLC_LTU1_PP01[37] (RADIX := Decimal);
PLCADMIN_VERSIONREV OF PLCADMIN_PLC_LTU1_PP01[38] (RADIX := Decimal);
END_TAG
ROUTINE plcAdmin
N: GSV(CONTROLLERDEVICE,?,SerialNumber,PLCADMIN_SERIALNUMBER);
N: GSV(CONTROLLERDEVICE,?,Status,PLCADMIN_STATUSRAW);
N: GSV(CONTROLLERDEVICE,?,ProductCode,PLCADMIN_MODELRAW);
N: GSV(CONTROLLERDEVICE,?,ProductRev,PLCADMIN_FWVERSIONRAW);
N: GSV(FAULTLOG,?,MajorFaultBits,PLCADMIN_MAJORFAULTRAW);
N: GSV(FAULTLOG,?,MinorFaultBits,PLCADMIN_MINORFAULTRAW);
N: GSV(WALLCLOCKTIME,?,DateTime,PLCADMIN_TODYEAR);
N: TON(PLCADMIN_UPTIMETIMER,?,?);
N: GRT(PLCADMIN_UPTIMETIMER.ACC,86400000)SUB(PLCADMIN_UPTIMETIMER.ACC,86400000,PLCADMIN_UPTIMETIMER.ACC)ADD(PLCADMIN_UPTIMEDAY,1,PLCADMIN_UPTIMEDAY);
N: DIV(PLCADMIN_UPTIMETIMER.ACC,1000,PLCADMIN_UPTIMESEC);
N: MOD(PLCADMIN_UPTIMESEC,2,PLCADMIN_HEARTBEATRAW);
N: GSV(TASK,MainTask,LastScanTime,PLCADMIN_TASKMAINTLST);
N: GSV(TASK,MainTask,MaxScanTime,PLCADMIN_TASKMAINTMAX);
N: GSV(PROGRAM,plcAdminProgram,LastScanTime,PLCADMIN_PROGPLCATLST);
N: GSV(PROGRAM,plcAdminProgram,MaxScanTime,PLCADMIN_PROGPLCATMAX);
N: GSV(PROGRAM,MainProgram,LastScanTime,PLCADMIN_PROG1TLST);
N: GSV(PROGRAM,MainProgram,MaxScanTime,PLCADMIN_PROG1TMAX);
N: GSV(PROGRAM,MainProgram,LastScanTime,PLCADMIN_PROG2TLST);
N: GSV(PROGRAM,MainProgram,MaxScanTime,PLCADMIN_PROG2TMAX);
N: GSV(PROGRAM,MainProgram,LastScanTime,PLCADMIN_PROG3TLST);
N: GSV(PROGRAM,MainProgram,MaxScanTime,PLCADMIN_PROG3TMAX);
END_ROUTINE
END_PROGRAM
PROGRAM Powerup_Program (MAIN := Powerup_Routine,
MODE := 0,
DisableFlag := 0)
TAG
PLCADMIN_FAULTRECORD : FAULTRECORD := [-1168582532,191525,0,0,[1865045796,191509,0,0,0,0,0,0]];
PLCADMIN_UPTIMEDAY OF PLCADMIN_PLC_LTU1_PP01[18] (RADIX := Decimal);
PLCADMIN_UPTIMESEC OF PLCADMIN_PLC_LTU1_PP01[17] (RADIX := Decimal);
END_TAG
ROUTINE Powerup_Routine
N: GSV(PROGRAM,THIS,MAJORFAULTRECORD,PLCADMIN_FAULTRECORD.Time_Low);
N: EQU(PLCADMIN_FAULTRECORD.Type,1)EQU(PLCADMIN_FAULTRECORD.Code,1)CLR(PLCADMIN_FAULTRECORD.Type)CLR(PLCADMIN_FAULTRECORD.Code);
N: SSV(PROGRAM,THIS,MAJORFAULTRECORD,PLCADMIN_FAULTRECORD.Time_Low);
N: MOV(0,PLCADMIN_UPTIMETIMER.ACC);
N: MOV(0,PLCADMIN_UPTIMESEC);
N: MOV(0,PLCADMIN_UPTIMEDAY);
END_ROUTINE
END_PROGRAM
PROGRAM testMode (Description := "Burn Through Monitor Test",
MAIN := MainTest,
MODE := 0,
DisableFlag := 0)
TAG
BTM01_Fault_A OF MODULE_IN_06.Data.0 (RADIX := Decimal);
BTM01_Fault_B OF MODULE_IN_07.Data.0 (RADIX := Decimal);
BTM01_Fill_Setpoint OF BTM_FillSetPoint (RADIX := Float);
BTM01_Struct : BTM_TEST := [0,0,0,0,0.00000000e+000,0.00000000e+000,0.00000000e+000,0.00000000e+000,0.00000000e+000,[0,300000
,0],[0,300000,0]];
BTM01_Test_Start OF EPICS_CTL_BTM.0 (RADIX := Decimal);
BTM01_Transducer_IN OF MODULE_ANA_01.Ch0Data (RADIX := Float);
BTM01_Valve_1 OF MODULE_OUT_04.Data.0 (Description := "FILL",
RADIX := Decimal);
BTM01_Valve_2 OF MODULE_OUT_04.Data.1 (Description := "VENT",
RADIX := Decimal);
BTM02_Fault_A OF MODULE_IN_06.Data.1 (RADIX := Decimal);
BTM02_Fault_B OF MODULE_IN_07.Data.1 (RADIX := Decimal);
BTM02_Fill_Setpoint OF BTM_FillSetPoint (RADIX := Float);
BTM02_Struct : BTM_TEST := [0,0,0,0,0.00000000e+000,0.00000000e+000,0.00000000e+000,0.00000000e+000,0.00000000e+000,[0,300000
,0],[0,300000,0]];
BTM02_Test_Start OF EPICS_CTL_BTM.1 (RADIX := Decimal);
BTM02_Transducer_IN OF MODULE_ANA_01.Ch1Data (RADIX := Float);
BTM02_Valve_1 OF MODULE_OUT_04.Data.2 (RADIX := Decimal);
BTM02_Valve_2 OF MODULE_OUT_04.Data.3 (RADIX := Decimal);
BTM03_Fault_A OF MODULE_IN_06.Data.2 (RADIX := Decimal);
BTM03_Fault_B OF MODULE_IN_07.Data.2 (RADIX := Decimal);
BTM03_Fill_Setpoint OF BTM_FillSetPoint (RADIX := Float);
BTM03_Struct : BTM_TEST := [0,0,0,0,0.00000000e+000,0.00000000e+000,0.00000000e+000,0.00000000e+000,0.00000000e+000,[0,300000
,0],[0,300000,0]];
BTM03_Test_Start OF EPICS_CTL_BTM.2 (RADIX := Decimal);
BTM03_Transducer_IN OF MODULE_ANA_01.Ch2Data (RADIX := Float);
BTM03_Valve_1 OF MODULE_OUT_04.Data.4 (RADIX := Decimal);
BTM03_Valve_2 OF MODULE_OUT_04.Data.5 (RADIX := Decimal);
BTM04_Fault_A OF MODULE_IN_06.Data.3 (RADIX := Decimal);
BTM04_Fault_B OF MODULE_IN_07.Data.3 (RADIX := Decimal);
BTM04_Fill_Setpoint OF BTM_FillSetPoint (RADIX := Float);
BTM04_Struct : BTM_TEST := [0,0,0,0,0.00000000e+000,0.00000000e+000,0.00000000e+000,0.00000000e+000,0.00000000e+000,[0,300000
,0],[0,300000,0]];
BTM04_Test_Start OF EPICS_CTL_BTM.3 (RADIX := Decimal);
BTM04_Transducer_IN OF MODULE_ANA_01.Ch3Data (RADIX := Float);
BTM04_Valve_1 OF MODULE_OUT_04.Data.6 (RADIX := Decimal);
BTM04_Valve_2 OF MODULE_OUT_04.Data.7 (RADIX := Decimal);
BTM05_Fault_A OF MODULE_IN_06.Data.4 (RADIX := Decimal);
BTM05_Fault_B OF MODULE_IN_07.Data.4 (RADIX := Decimal);
BTM05_Fill_Setpoint OF BTM_FillSetPoint (RADIX := Float);
BTM05_Struct : BTM_TEST := [0,0,0,0,0.00000000e+000,0.00000000e+000,0.00000000e+000,0.00000000e+000,0.00000000e+000,[0,300000
,0],[0,300000,0]];
BTM05_Test_Start OF EPICS_CTL_BTM.4 (RADIX := Decimal);
BTM05_Transducer_IN OF MODULE_ANA_01.Ch4Data (RADIX := Float);
BTM05_Valve_1 OF MODULE_OUT_04.Data.8 (RADIX := Decimal);
BTM05_Valve_2 OF MODULE_OUT_04.Data.9 (RADIX := Decimal);
BTM06_Fault_A OF MODULE_IN_06.Data.5 (RADIX := Decimal);
BTM06_Fault_B OF MODULE_IN_07.Data.5 (RADIX := Decimal);
BTM06_Fill_Setpoint OF BTM_FillSetPoint (RADIX := Float);
BTM06_Struct : BTM_TEST := [0,0,0,0,0.00000000e+000,0.00000000e+000,0.00000000e+000,0.00000000e+000,0.00000000e+000,[0,300000
,0],[0,300000,0]];
BTM06_Test_Start OF EPICS_CTL_BTM.5 (RADIX := Decimal);
BTM06_Transducer_IN OF MODULE_ANA_01.Ch5Data (RADIX := Float);
BTM06_Valve_1 OF MODULE_OUT_04.Data.10 (RADIX := Decimal);
BTM06_Valve_2 OF MODULE_OUT_04.Data.11 (RADIX := Decimal);
BTM07_Fault_A OF MODULE_IN_06.Data.6 (RADIX := Decimal);
BTM07_Fault_B OF MODULE_IN_07.Data.6 (RADIX := Decimal);
BTM07_Fill_Setpoint OF BTM_FillSetPoint (RADIX := Float);
BTM07_Struct : BTM_TEST := [0,0,0,0,0.00000000e+000,0.00000000e+000,0.00000000e+000,0.00000000e+000,0.00000000e+000,[0,300000
,0],[0,300000,0]];
BTM07_Test_Start OF EPICS_CTL_BTM.6 (RADIX := Decimal);
BTM07_Transducer_IN OF MODULE_ANA_01.Ch6Data (RADIX := Float);
BTM07_Valve_1 OF MODULE_OUT_04.Data.12 (RADIX := Decimal);
BTM07_Valve_2 OF MODULE_OUT_04.Data.13 (RADIX := Decimal);
BTM08_Fault_A OF MODULE_IN_06.Data.7 (RADIX := Decimal);
BTM08_Fault_B OF MODULE_IN_07.Data.7 (RADIX := Decimal);
BTM08_Fill_Setpoint OF BTM_FillSetPoint (RADIX := Float);
BTM08_Struct : BTM_TEST := [0,0,0,0,0.00000000e+000,0.00000000e+000,0.00000000e+000,0.00000000e+000,0.00000000e+000,[0,300000
,0],[0,300000,0]];
BTM08_Test_Start OF EPICS_CTL_BTM.7 (RADIX := Decimal);
BTM08_Transducer_IN OF MODULE_ANA_01.Ch7Data (RADIX := Float);
BTM08_Valve_1 OF MODULE_OUT_04.Data.14 (RADIX := Decimal);
BTM08_Valve_2 OF MODULE_OUT_04.Data.15 (RADIX := Decimal);
BTM09_Fault_A OF MODULE_IN_06.Data.8 (RADIX := Decimal);
BTM09_Fault_B OF MODULE_IN_07.Data.8 (RADIX := Decimal);
BTM09_Fill_Setpoint OF BTM_FillSetPoint (RADIX := Float);
BTM09_Struct : BTM_TEST := [0,0,0,0,0.00000000e+000,0.00000000e+000,0.00000000e+000,0.00000000e+000,0.00000000e+000,[0,300000
,0],[0,300000,0]];
BTM09_Test_Start OF EPICS_CTL_BTM.8 (RADIX := Decimal);
BTM09_Transducer_IN OF MODULE_ANA_01.Ch8Data (RADIX := Float);
BTM09_Valve_1 OF MODULE_OUT_05.Data.0 (RADIX := Decimal);
BTM09_Valve_2 OF MODULE_OUT_05.Data.1 (RADIX := Decimal);
BTM10_Fault_A OF MODULE_IN_06.Data.9 (RADIX := Decimal);
BTM10_Fault_B OF MODULE_IN_07.Data.9 (RADIX := Decimal);
BTM10_Fill_Setpoint OF BTM_FillSetPoint (RADIX := Float);
BTM10_Struct : BTM_TEST := [0,0,0,0,0.00000000e+000,0.00000000e+000,0.00000000e+000,0.00000000e+000,0.00000000e+000,[0,300000
,0],[0,300000,0]];
BTM10_Test_Start OF EPICS_CTL_BTM.9 (RADIX := Decimal);
BTM10_Transducer_IN OF MODULE_ANA_01.Ch9Data (RADIX := Float);
BTM10_Valve_1 OF MODULE_OUT_05.Data.2 (RADIX := Decimal);
BTM10_Valve_2 OF MODULE_OUT_05.Data.3 (RADIX := Decimal);
BTM11_Fault_A OF MODULE_IN_06.Data.10 (RADIX := Decimal);
BTM11_Fault_B OF MODULE_IN_07.Data.10 (RADIX := Decimal);
BTM11_Fill_Setpoint OF BTM_FillSetPoint (RADIX := Float);
BTM11_Struct : BTM_TEST := [0,0,0,0,0.00000000e+000,0.00000000e+000,0.00000000e+000,0.00000000e+000,0.00000000e+000,[0,300000
,0],[0,300000,0]];
BTM11_Test_Start OF EPICS_CTL_BTM.10 (RADIX := Decimal);
BTM11_Transducer_IN OF MODULE_ANA_01.Ch10Data (RADIX := Float);
BTM11_Valve_1 OF MODULE_OUT_05.Data.4 (RADIX := Decimal);
BTM11_Valve_2 OF MODULE_OUT_05.Data.5 (RADIX := Decimal);
BTM12_Fault_A OF MODULE_IN_06.Data.11 (RADIX := Decimal);
BTM12_Fault_B OF MODULE_IN_07.Data.11 (RADIX := Decimal);
BTM12_Fill_Setpoint OF BTM_FillSetPoint (RADIX := Float);
BTM12_Struct : BTM_TEST := [0,0,0,0,0.00000000e+000,0.00000000e+000,0.00000000e+000,0.00000000e+000,0.00000000e+000,[0,300000
,0],[0,300000,0]];
BTM12_Test_Start OF EPICS_CTL_BTM.11 (RADIX := Decimal);
BTM12_Transducer_IN OF MODULE_ANA_01.Ch11Data (RADIX := Float);
BTM12_Valve_1 OF MODULE_OUT_05.Data.6 (RADIX := Decimal);
BTM12_Valve_2 OF MODULE_OUT_05.Data.7 (RADIX := Decimal);
BTM13_Fault_A OF MODULE_IN_06.Data.12 (RADIX := Decimal);
BTM13_Fault_B OF MODULE_IN_07.Data.12 (RADIX := Decimal);
BTM13_Fill_Setpoint OF BTM_FillSetPoint (RADIX := Float);
BTM13_Struct : BTM_TEST := [0,0,0,0,0.00000000e+000,0.00000000e+000,0.00000000e+000,0.00000000e+000,0.00000000e+000,[0,300000
,0],[0,300000,0]];
BTM13_Test_Start OF EPICS_CTL_BTM.12 (RADIX := Decimal);
BTM13_Transducer_IN OF MODULE_ANA_01.Ch12Data (RADIX := Float);
BTM13_Valve_1 OF MODULE_OUT_05.Data.8 (RADIX := Decimal);
BTM13_Valve_2 OF MODULE_OUT_05.Data.9 (RADIX := Decimal);
BTM14_Fault_A OF MODULE_IN_06.Data.13 (RADIX := Decimal);
BTM14_Fault_B OF MODULE_IN_07.Data.13 (RADIX := Decimal);
BTM14_Fill_Setpoint OF BTM_FillSetPoint (RADIX := Float);
BTM14_Struct : BTM_TEST := [0,0,0,0,0.00000000e+000,0.00000000e+000,0.00000000e+000,0.00000000e+000,0.00000000e+000,[0,300000
,0],[0,300000,0]];
BTM14_Test_Start OF EPICS_CTL_BTM.13 (RADIX := Decimal);
BTM14_Transducer_IN OF MODULE_ANA_01.Ch13Data (RADIX := Float);
BTM14_Valve_1 OF MODULE_OUT_05.Data.10 (RADIX := Decimal);
BTM14_Valve_2 OF MODULE_OUT_05.Data.11 (RADIX := Decimal);
BTM15_Fault_A OF MODULE_IN_06.Data.14 (RADIX := Decimal);
BTM15_Fault_B OF MODULE_IN_07.Data.14 (RADIX := Decimal);
BTM15_Fill_Setpoint OF BTM_FillSetPoint (RADIX := Float);
BTM15_Struct : BTM_TEST := [0,0,0,0,0.00000000e+000,0.00000000e+000,0.00000000e+000,0.00000000e+000,0.00000000e+000,[0,300000
,0],[0,300000,0]];
BTM15_Test_Start OF EPICS_CTL_BTM.14 (RADIX := Decimal);
BTM15_Transducer_IN OF MODULE_ANA_01.Ch14Data (RADIX := Float);
BTM15_Valve_1 OF MODULE_OUT_05.Data.12 (RADIX := Decimal);
BTM15_Valve_2 OF MODULE_OUT_05.Data.13 (RADIX := Decimal);
BTM16_Fault_A OF MODULE_IN_06.Data.15 (RADIX := Decimal);
BTM16_Fault_B OF MODULE_IN_07.Data.15 (RADIX := Decimal);
BTM16_Fill_Setpoint OF BTM_FillSetPoint (RADIX := Float);
BTM16_Struct : BTM_TEST := [0,0,0,0,0.00000000e+000,0.00000000e+000,0.00000000e+000,0.00000000e+000,0.00000000e+000,[0,300000
,0],[0,300000,0]];
BTM16_Test_Start OF EPICS_CTL_BTM.15 (RADIX := Decimal);
BTM16_Transducer_IN OF MODULE_ANA_01.Ch15Data (RADIX := Float);
BTM16_Valve_1 OF MODULE_OUT_05.Data.14 (RADIX := Decimal);
BTM16_Valve_2 OF MODULE_OUT_05.Data.15 (RADIX := Decimal);
BTM_Alarm_fill_time_fault OF PPS_UND_EPICS_8.Data_01 (RADIX := Decimal);
BTM_Alarm_flow_rate_fault OF PPS_UND_EPICS_8.Data_02 (RADIX := Decimal);
BTM_Alarm_low_pressure_start OF PPS_UND_EPICS_8.Data_04 (RADIX := Decimal);
BTM_Alarm_over_pressure OF PPS_UND_EPICS_8.Data_03 (RADIX := Decimal);
BTM_Alarm_RESET OF EPICS_CTL_BTM.16 (RADIX := Decimal);
BTM_Alarm_UUT OF PPS_UND_EPICS_8.Data_05 (RADIX := Decimal);
BTM_Alarm_vent_time_fault OF PPS_UND_EPICS_8.Data_00 (RADIX := Decimal);
BTM_FillSetPoint : REAL (RADIX := Float) := 1.48000000e+001;
BTM_MAX_PRESSURE : REAL (RADIX := Float) := 1.50000000e+001;
EPICS_ANA_01 OF PPS_UND_EPICS_2 ;
EPICS_ANA_02 OF PPS_UND_EPICS_3 ;
EPICS_ANA_03 OF PPS_UND_EPICS_4 ;
EPICS_ANA_04 OF PPS_UND_EPICS_5 ;
EPICS_ANA_05 OF PPS_UND_EPICS_6 ;
EPICS_ANA_06 OF PPS_UND_EPICS_7 ;
EPICS_CTL_BTM OF PPS_UND_EPICS_0.Data_02 (RADIX := Decimal);
EPICS_STAT_BTM OF PPS_UND_EPICS_1.Data_05 (RADIX := Decimal);
Hardware_EN OF Local:1:I.Data.15 (RADIX := Decimal);
MODULE_ANA_01 OF Remote:8:I ;
MODULE_IN_06 OF Remote:4:I ;
MODULE_IN_07 OF Remote:5:I ;
MODULE_OUT_04 OF Remote:6:O ;
MODULE_OUT_05 OF Remote:7:O ;
NOOP : BOOL (RADIX := Decimal) := 1;
Test_Mode OF Local:1:I.Data.14 (RADIX := Decimal);
END_TAG
ROUTINE BTM_TEST_01
RC: "$N"
"*******************************************************************************$'$N"
"BTM Test Sub-Routine$N"
"*******************************************************************************$'$N"
"$N"
"";
N: SBR()OTE(NOOP);
RC: "$N"
"$N"
"****************************************$N"
"$N"
"This routine runs the BTM Test$N"
"$N"
"****************************************";
N: XIC(Hardware_EN)XIC(BTM01_Test_Start)XIO(BTM01_Struct.Vent_Timer.TT)XIO(BTM01_Struct.Fill_Timer.TT)ONS(BTM01_Struct.One_Shot.0)OTL(BTM01_Struct.UUT_Vent);
N: [XIC(BTM01_Struct.Vent_Timer.TT) ,XIC(BTM01_Struct.Fill_Timer.TT) ]OTE(BTM_Alarm_UUT.0);
RC: "Move the transucer reading to the slope register when the vent cycle begins$N"
"Move zero to the slope register when the pressure is below 10 psi$N"
"The register is zeroed becase a flow rate alarm would occur if the BTM was already tripped$N"
"$N"
"";
N: XIC(BTM01_Struct.UUT_Vent)ONS(BTM01_Struct.One_Shot.1)LES(BTM01_Transducer_IN,10.0)MOV(0,BTM01_Struct.Slope_vent_pressure);
N: XIC(BTM01_Struct.UUT_Vent)ONS(BTM01_Struct.One_Shot.2)GEQ(BTM01_Transducer_IN,10.0)MOV(BTM01_Transducer_IN,BTM01_Struct.Slope_vent_pressure);
RC: "Move the transucer reading to the slope register when the fill cycle begins";
N: XIC(BTM01_Struct.UUT_Fill)ONS(BTM01_Struct.One_Shot.3)MOV(BTM01_Transducer_IN,BTM01_Struct.Slope_fill_pressure);
RC: "While venting wait for both pressure switches to fault ";
N: XIC(BTM01_Struct.UUT_Vent)XIO(BTM01_Fault_A)XIO(BTM01_Fault_B)OTE(BTM01_Struct.UUT_Fault);
RC: "Start a 5 minutes timer when the vent valve is open";
N: XIC(BTM01_Struct.UUT_Vent)TON(BTM01_Struct.Vent_Timer,?,?);
RC: "When the vent timer is timing calculate the flow rate";
N: XIC(BTM01_Struct.Vent_Timer.TT)GRT(BTM01_Struct.Vent_Timer.ACC,0)DIV(BTM01_Struct.Slope_vent_pressure,BTM01_Struct.Vent_Timer.ACC,BTM01_Struct.Slope);
RC: "if the 5 minute timer completes$N"
"Set an alarm condition";
N: [XIC(BTM01_Struct.Vent_Timer.DN) ONS(BTM01_Struct.One_Shot.4) ,XIC(BTM01_Struct.Alarm_vent_time) XIO(BTM_Alarm_RESET) ]OTE(BTM01_Struct.Alarm_vent_time);
RC: "Record the pressure when both pressure switches have faulted";
N: XIC(BTM01_Struct.UUT_Fault)ONS(BTM01_Struct.One_Shot.5)MOV(BTM01_Transducer_IN,BTM01_Struct.Low_trip);
RC: "Unlatch the vent routine, latch the fill routine and check the flow rate after fault";
N: XIC(BTM01_Struct.UUT_Fault)ONS(BTM01_Struct.One_Shot.6)[OTU(BTM01_Struct.UUT_Vent) ,OTL(BTM01_Struct.UUT_Fill) ,OTE(BTM01_Struct.Slope_check_1) ];
RC: "When the BTM reaches the fill set point $N"
"check the flow rate";
N: GEQ(BTM01_Transducer_IN,BTM01_Fill_Setpoint)OTE(BTM01_Struct.Slope_check_2);
RC: "Stop filling if the BTM reaches the fill set point$N"
"OR there is an alarm";
N: [XIC(BTM01_Struct.Slope_check_2) ,XIC(BTM01_Struct.Alarm_sum) ]OTU(BTM01_Struct.UUT_Fill);
RC: "Start a 5 minutes timer when the fill valve is open";
N: XIC(BTM01_Struct.UUT_Fill)TON(BTM01_Struct.Fill_Timer,?,?);
RC: "When the vent timer is timing calculate the flow rate";
N: XIC(BTM01_Struct.Fill_Timer.TT)GRT(BTM01_Struct.Fill_Timer.ACC,0)DIV(BTM01_Struct.Slope_fill_pressure,BTM01_Struct.Fill_Timer.ACC,BTM01_Struct.Slope);
RC: "Set an alarm condition if the 5 minute timer completes";
N: [XIC(BTM01_Struct.Fill_Timer.DN) ONS(BTM01_Struct.One_Shot.7) ,XIC(BTM01_Struct.Alarm_fill_time) XIO(BTM_Alarm_RESET) ]OTE(BTM01_Struct.Alarm_fill_time);
RC: "The system is reset when pressure switches are above threshold settings while filling";
N: XIC(BTM01_Struct.UUT_Fill)XIC(BTM01_Fault_A)XIC(BTM01_Fault_B)OTE(BTM01_Struct.UUT_Reset);
RC: "When the system reaches reset record the reset pressure";
N: XIC(BTM01_Struct.UUT_Reset)ONS(BTM01_Struct.One_Shot.8)MOV(BTM01_Transducer_IN,BTM01_Struct.High_reset);
RC: "Set an alarm condition if the BTM exceeds 15 psi";
N: [GEQ(BTM01_Transducer_IN,BTM_MAX_PRESSURE) XIC(BTM01_Struct.UUT_Fill) ONS(BTM01_Struct.One_Shot.9) ,XIC(BTM01_Struct.Alarm_over_pressure) XIO(BTM_Alarm_RESET) ]OTE(BTM01_Struct.Alarm_over_pressure);
RC: "Set alarm condition if flow rate exceeds .004 psi/msec";
N: [[XIC(BTM01_Struct.Slope_check_1) ,XIC(BTM01_Struct.Slope_check_2) ] ONS(BTM01_Struct.One_Shot.10) GRT(BTM01_Struct.Slope,0.004) ,XIC(BTM01_Struct.Alarm_flow_rate) XIO(BTM_Alarm_RESET) ]OTE(BTM01_Struct.Alarm_flow_rate);
RC: "Reset slope register to zero on flow rate fault";
N: XIC(BTM01_Struct.Alarm_flow_rate)MOV(0,BTM01_Struct.Slope);
RC: "Set the alarm if an alarm condition occurs";
N: [XIC(BTM01_Struct.Alarm_vent_time) ,XIC(BTM01_Struct.Alarm_fill_time) ,XIC(BTM01_Struct.Alarm_flow_rate) ,XIC(BTM01_Struct.Alarm_over_pressure) ]OTE(BTM01_Struct.Alarm_sum);
RC: "Open valve one to fill";
N: XIC(BTM01_Struct.UUT_Fill)OTE(BTM01_Valve_1);
RC: "Open valve two to vent$N"
"";
N: XIC(BTM01_Struct.UUT_Vent)OTE(BTM01_Valve_2);
N: RET();
END_ROUTINE
ROUTINE BTM_TEST_02
RC: "$N"
"*******************************************************************************$'$N"
"BTM Test Sub-Routine$N"
"*******************************************************************************$'$N"
"$N"
"";
N: SBR()OTE(NOOP);
RC: "$N"
"$N"
"****************************************$N"
"$N"
"This routine runs the BTM Test$N"
"$N"
"****************************************";
N: XIC(Hardware_EN)XIC(BTM02_Test_Start)XIO(BTM02_Struct.Vent_Timer.TT)XIO(BTM02_Struct.Fill_Timer.TT)ONS(BTM02_Struct.One_Shot.0)OTL(BTM02_Struct.UUT_Vent);
N: [XIC(BTM02_Struct.Vent_Timer.TT) ,XIC(BTM02_Struct.Fill_Timer.TT) ]OTE(BTM_Alarm_UUT.1);
RC: "Move the transucer reading to the slope register when the vent cycle begins$N"
"Move zero to the slope register when the pressure is below 10 psi$N"
"The register is zeroed becase a flow rate alarm would occur if the BTM was already tripped$N"
"$N"
"";
N: XIC(BTM02_Struct.UUT_Vent)ONS(BTM02_Struct.One_Shot.1)LES(BTM02_Transducer_IN,10.0)MOV(0,BTM02_Struct.Slope_vent_pressure);
N: XIC(BTM02_Struct.UUT_Vent)ONS(BTM02_Struct.One_Shot.2)GEQ(BTM02_Transducer_IN,10.0)MOV(BTM02_Transducer_IN,BTM02_Struct.Slope_vent_pressure);
RC: "Move the transucer reading to the slope register when the fill cycle begins";
N: XIC(BTM02_Struct.UUT_Fill)ONS(BTM02_Struct.One_Shot.3)MOV(BTM02_Transducer_IN,BTM02_Struct.Slope_fill_pressure);
RC: "While venting wait for both pressure switches to fault ";
N: XIC(BTM02_Struct.UUT_Vent)XIO(BTM02_Fault_A)XIO(BTM02_Fault_B)OTE(BTM02_Struct.UUT_Fault);
RC: "Start a 5 minutes timer when the vent valve is open";
N: XIC(BTM02_Struct.UUT_Vent)TON(BTM02_Struct.Vent_Timer,?,?);
RC: "When the vent timer is timing calculate the flow rate";
N: XIC(BTM02_Struct.Vent_Timer.TT)GRT(BTM02_Struct.Vent_Timer.ACC,0)DIV(BTM02_Struct.Slope_vent_pressure,BTM02_Struct.Vent_Timer.ACC,BTM02_Struct.Slope);
RC: "if the 5 minute timer completes$N"
"Set an alarm condition";
N: [XIC(BTM02_Struct.Vent_Timer.DN) ONS(BTM02_Struct.One_Shot.4) ,XIC(BTM02_Struct.Alarm_vent_time) XIO(BTM_Alarm_RESET) ]OTE(BTM02_Struct.Alarm_vent_time);
RC: "Record the pressure when both pressure switches have faulted";
N: XIC(BTM02_Struct.UUT_Fault)ONS(BTM02_Struct.One_Shot.5)MOV(BTM02_Transducer_IN,BTM02_Struct.Low_trip);
RC: "Unlatch the vent routine, latch the fill routine and check the flow rate after fault";
N: XIC(BTM02_Struct.UUT_Fault)ONS(BTM02_Struct.One_Shot.6)[OTU(BTM02_Struct.UUT_Vent) ,OTL(BTM02_Struct.UUT_Fill) ,OTE(BTM02_Struct.Slope_check_1) ];
RC: "When the BTM reaches the fill set point $N"
"check the flow rate";
N: GEQ(BTM02_Transducer_IN,BTM02_Fill_Setpoint)OTE(BTM02_Struct.Slope_check_2);
RC: "Stop filling if the BTM reaches the fill set point$N"
"OR there is an alarm";
N: [XIC(BTM02_Struct.Slope_check_2) ,XIC(BTM02_Struct.Alarm_sum) ]OTU(BTM02_Struct.UUT_Fill);
RC: "Start a 5 minutes timer when the fill valve is open";
N: XIC(BTM02_Struct.UUT_Fill)TON(BTM02_Struct.Fill_Timer,?,?);
RC: "When the vent timer is timing calculate the flow rate";
N: XIC(BTM02_Struct.Fill_Timer.TT)GRT(BTM02_Struct.Fill_Timer.ACC,0)DIV(BTM02_Struct.Slope_fill_pressure,BTM02_Struct.Fill_Timer.ACC,BTM02_Struct.Slope);
RC: "Set an alarm condition if the 5 minute timer completes";
N: [XIC(BTM02_Struct.Fill_Timer.DN) ONS(BTM02_Struct.One_Shot.7) ,XIC(BTM02_Struct.Alarm_fill_time) XIO(BTM_Alarm_RESET) ]OTE(BTM02_Struct.Alarm_fill_time);
RC: "The system is reset when pressure switches are above threshold settings while filling";
N: XIC(BTM02_Struct.UUT_Fill)XIC(BTM02_Fault_A)XIC(BTM02_Fault_B)OTE(BTM02_Struct.UUT_Reset);
RC: "When the system reaches reset record the reset pressure";
N: XIC(BTM02_Struct.UUT_Reset)ONS(BTM02_Struct.One_Shot.8)MOV(BTM02_Transducer_IN,BTM02_Struct.High_reset);
RC: "Set an alarm condition if the BTM exceeds 15 psi";
N: [GEQ(BTM02_Transducer_IN,BTM_MAX_PRESSURE) XIC(BTM02_Struct.UUT_Fill) ONS(BTM02_Struct.One_Shot.9) ,XIC(BTM02_Struct.Alarm_over_pressure) XIO(BTM_Alarm_RESET) ]OTE(BTM02_Struct.Alarm_over_pressure);
RC: "Set alarm condition if flow rate exceeds .004 psi/msec";
N: [[XIC(BTM02_Struct.Slope_check_1) ,XIC(BTM02_Struct.Slope_check_2) ] ONS(BTM02_Struct.One_Shot.10) GRT(BTM02_Struct.Slope,0.004) ,XIC(BTM02_Struct.Alarm_flow_rate) XIO(BTM_Alarm_RESET) ]OTE(BTM02_Struct.Alarm_flow_rate);
RC: "Reset slope register to zero on flow rate fault";
N: XIC(BTM02_Struct.Alarm_flow_rate)MOV(0,BTM02_Struct.Slope);
RC: "Set the alarm if an alarm condition occurs";
N: [XIC(BTM02_Struct.Alarm_vent_time) ,XIC(BTM02_Struct.Alarm_fill_time) ,XIC(BTM02_Struct.Alarm_flow_rate) ,XIC(BTM02_Struct.Alarm_over_pressure) ]OTE(BTM02_Struct.Alarm_sum);
RC: "Open valve one to fill";
N: XIC(BTM02_Struct.UUT_Fill)OTE(BTM02_Valve_1);
RC: "Open valve two to vent$N"
"";
N: XIC(BTM02_Struct.UUT_Vent)OTE(BTM02_Valve_2);
N: RET();
END_ROUTINE
ROUTINE BTM_TEST_03
RC: "$N"
"*******************************************************************************$'$N"
"BTM Test Sub-Routine$N"
"*******************************************************************************$'$N"
"$N"
"";
N: SBR()OTE(NOOP);
RC: "$N"
"$N"
"****************************************$N"
"$N"
"This routine runs the BTM Test$N"
"$N"
"****************************************";
N: XIC(Hardware_EN)XIC(BTM03_Test_Start)XIO(BTM03_Struct.Vent_Timer.TT)XIO(BTM03_Struct.Fill_Timer.TT)ONS(BTM03_Struct.One_Shot.0)OTL(BTM03_Struct.UUT_Vent);
N: [XIC(BTM03_Struct.Vent_Timer.TT) ,XIC(BTM03_Struct.Fill_Timer.TT) ]OTE(BTM_Alarm_UUT.2);
RC: "Move the transucer reading to the slope register when the vent cycle begins$N"
"Move zero to the slope register when the pressure is below 10 psi$N"
"The register is zeroed becase a flow rate alarm would occur if the BTM was already tripped$N"
"$N"
"";
N: XIC(BTM03_Struct.UUT_Vent)ONS(BTM03_Struct.One_Shot.1)LES(BTM03_Transducer_IN,10.0)MOV(0,BTM03_Struct.Slope_vent_pressure);
N: XIC(BTM03_Struct.UUT_Vent)ONS(BTM03_Struct.One_Shot.2)GEQ(BTM03_Transducer_IN,10.0)MOV(BTM03_Transducer_IN,BTM03_Struct.Slope_vent_pressure);
RC: "Move the transucer reading to the slope register when the fill cycle begins";
N: XIC(BTM03_Struct.UUT_Fill)ONS(BTM03_Struct.One_Shot.3)MOV(BTM03_Transducer_IN,BTM03_Struct.Slope_fill_pressure);
RC: "While venting wait for both pressure switches to fault ";
N: XIC(BTM03_Struct.UUT_Vent)XIO(BTM03_Fault_A)XIO(BTM03_Fault_B)OTE(BTM03_Struct.UUT_Fault);
RC: "Start a 5 minutes timer when the vent valve is open";
N: XIC(BTM03_Struct.UUT_Vent)TON(BTM03_Struct.Vent_Timer,?,?);
RC: "When the vent timer is timing calculate the flow rate";
N: XIC(BTM03_Struct.Vent_Timer.TT)GRT(BTM03_Struct.Vent_Timer.ACC,0)DIV(BTM03_Struct.Slope_vent_pressure,BTM03_Struct.Vent_Timer.ACC,BTM03_Struct.Slope);
RC: "if the 5 minute timer completes$N"
"Set an alarm condition";
N: [XIC(BTM03_Struct.Vent_Timer.DN) ONS(BTM03_Struct.One_Shot.4) ,XIC(BTM03_Struct.Alarm_vent_time) XIO(BTM_Alarm_RESET) ]OTE(BTM03_Struct.Alarm_vent_time);
RC: "Record the pressure when both pressure switches have faulted";
N: XIC(BTM03_Struct.UUT_Fault)ONS(BTM03_Struct.One_Shot.5)MOV(BTM03_Transducer_IN,BTM03_Struct.Low_trip);
RC: "Unlatch the vent routine, latch the fill routine and check the flow rate after fault";
N: XIC(BTM03_Struct.UUT_Fault)ONS(BTM03_Struct.One_Shot.6)[OTU(BTM03_Struct.UUT_Vent) ,OTL(BTM03_Struct.UUT_Fill) ,OTE(BTM03_Struct.Slope_check_1) ];
RC: "When the BTM reaches the fill set point $N"
"check the flow rate";
N: GEQ(BTM03_Transducer_IN,BTM03_Fill_Setpoint)OTE(BTM03_Struct.Slope_check_2);
RC: "Stop filling if the BTM reaches the fill set point$N"
"OR there is an alarm";
N: [XIC(BTM03_Struct.Slope_check_2) ,XIC(BTM03_Struct.Alarm_sum) ]OTU(BTM03_Struct.UUT_Fill);
RC: "Start a 5 minutes timer when the fill valve is open";
N: XIC(BTM03_Struct.UUT_Fill)TON(BTM03_Struct.Fill_Timer,?,?);
RC: "When the vent timer is timing calculate the flow rate";
N: XIC(BTM03_Struct.Fill_Timer.TT)GRT(BTM03_Struct.Fill_Timer.ACC,0)DIV(BTM03_Struct.Slope_fill_pressure,BTM03_Struct.Fill_Timer.ACC,BTM03_Struct.Slope);
RC: "Set an alarm condition if the 5 minute timer completes";
N: [XIC(BTM03_Struct.Fill_Timer.DN) ONS(BTM03_Struct.One_Shot.7) ,XIC(BTM03_Struct.Alarm_fill_time) XIO(BTM_Alarm_RESET) ]OTE(BTM03_Struct.Alarm_fill_time);
RC: "The system is reset when pressure switches are above threshold settings while filling";
N: XIC(BTM03_Struct.UUT_Fill)XIC(BTM03_Fault_A)XIC(BTM03_Fault_B)OTE(BTM03_Struct.UUT_Reset);
RC: "When the system reaches reset record the reset pressure";
N: XIC(BTM03_Struct.UUT_Reset)ONS(BTM03_Struct.One_Shot.8)MOV(BTM03_Transducer_IN,BTM03_Struct.High_reset);
RC: "Set an alarm condition if the BTM exceeds 15 psi";
N: [GEQ(BTM03_Transducer_IN,BTM_MAX_PRESSURE) XIC(BTM03_Struct.UUT_Fill) ONS(BTM03_Struct.One_Shot.9) ,XIC(BTM03_Struct.Alarm_over_pressure) XIO(BTM_Alarm_RESET) ]OTE(BTM03_Struct.Alarm_over_pressure);
RC: "Set alarm condition if flow rate exceeds .004 psi/msec";
N: [[XIC(BTM03_Struct.Slope_check_1) ,XIC(BTM03_Struct.Slope_check_2) ] ONS(BTM03_Struct.One_Shot.10) GRT(BTM03_Struct.Slope,0.004) ,XIC(BTM03_Struct.Alarm_flow_rate) XIO(BTM_Alarm_RESET) ]OTE(BTM03_Struct.Alarm_flow_rate);
RC: "Reset slope register to zero on flow rate fault";
N: XIC(BTM03_Struct.Alarm_flow_rate)MOV(0,BTM03_Struct.Slope);
RC: "Set the alarm if an alarm condition occurs";
N: [XIC(BTM03_Struct.Alarm_vent_time) ,XIC(BTM03_Struct.Alarm_fill_time) ,XIC(BTM03_Struct.Alarm_flow_rate) ,XIC(BTM03_Struct.Alarm_over_pressure) ]OTE(BTM03_Struct.Alarm_sum);
RC: "Open valve one to fill";
N: XIC(BTM03_Struct.UUT_Fill)OTE(BTM03_Valve_1);
RC: "Open valve two to vent$N"
"";
N: XIC(BTM03_Struct.UUT_Vent)OTE(BTM03_Valve_2);
N: RET();
END_ROUTINE
ROUTINE BTM_TEST_04
RC: "$N"
"*******************************************************************************$'$N"
"BTM Test Sub-Routine$N"
"*******************************************************************************$'$N"
"$N"
"";
N: SBR()OTE(NOOP);
RC: "$N"
"$N"
"****************************************$N"
"$N"
"This routine runs the BTM Test$N"
"$N"
"****************************************";
N: XIC(Hardware_EN)XIC(BTM04_Test_Start)XIO(BTM04_Struct.Vent_Timer.TT)XIO(BTM04_Struct.Fill_Timer.TT)ONS(BTM04_Struct.One_Shot.0)OTL(BTM04_Struct.UUT_Vent);
N: [XIC(BTM04_Struct.Vent_Timer.TT) ,XIC(BTM04_Struct.Fill_Timer.TT) ]OTE(BTM_Alarm_UUT.3);
RC: "Move the transucer reading to the slope register when the vent cycle begins$N"
"Move zero to the slope register when the pressure is below 10 psi$N"
"The register is zeroed becase a flow rate alarm would occur if the BTM was already tripped$N"
"$N"
"";
N: XIC(BTM04_Struct.UUT_Vent)ONS(BTM04_Struct.One_Shot.1)LES(BTM04_Transducer_IN,10.0)MOV(0,BTM04_Struct.Slope_vent_pressure);
N: XIC(BTM04_Struct.UUT_Vent)ONS(BTM04_Struct.One_Shot.2)GEQ(BTM04_Transducer_IN,10.0)MOV(BTM04_Transducer_IN,BTM04_Struct.Slope_vent_pressure);
RC: "Move the transucer reading to the slope register when the fill cycle begins";
N: XIC(BTM04_Struct.UUT_Fill)ONS(BTM04_Struct.One_Shot.3)MOV(BTM04_Transducer_IN,BTM04_Struct.Slope_fill_pressure);
RC: "While venting wait for both pressure switches to fault ";
N: XIC(BTM04_Struct.UUT_Vent)XIO(BTM04_Fault_A)XIO(BTM04_Fault_B)OTE(BTM04_Struct.UUT_Fault);
RC: "Start a 5 minutes timer when the vent valve is open";
N: XIC(BTM04_Struct.UUT_Vent)TON(BTM04_Struct.Vent_Timer,?,?);
RC: "When the vent timer is timing calculate the flow rate";
N: XIC(BTM04_Struct.Vent_Timer.TT)GRT(BTM04_Struct.Vent_Timer.ACC,0)DIV(BTM04_Struct.Slope_vent_pressure,BTM04_Struct.Vent_Timer.ACC,BTM04_Struct.Slope);
RC: "if the 5 minute timer completes$N"
"Set an alarm condition";
N: [XIC(BTM04_Struct.Vent_Timer.DN) ONS(BTM04_Struct.One_Shot.4) ,XIC(BTM04_Struct.Alarm_vent_time) XIO(BTM_Alarm_RESET) ]OTE(BTM04_Struct.Alarm_vent_time);
RC: "Record the pressure when both pressure switches have faulted";
N: XIC(BTM04_Struct.UUT_Fault)ONS(BTM04_Struct.One_Shot.5)MOV(BTM04_Transducer_IN,BTM04_Struct.Low_trip);
RC: "Unlatch the vent routine, latch the fill routine and check the flow rate after fault";
N: XIC(BTM04_Struct.UUT_Fault)ONS(BTM04_Struct.One_Shot.6)[OTU(BTM04_Struct.UUT_Vent) ,OTL(BTM04_Struct.UUT_Fill) ,OTE(BTM04_Struct.Slope_check_1) ];
RC: "When the BTM reaches the fill set point $N"
"check the flow rate";
N: GEQ(BTM04_Transducer_IN,BTM04_Fill_Setpoint)OTE(BTM04_Struct.Slope_check_2);
RC: "Stop filling if the BTM reaches the fill set point$N"
"OR there is an alarm";
N: [XIC(BTM04_Struct.Slope_check_2) ,XIC(BTM04_Struct.Alarm_sum) ]OTU(BTM04_Struct.UUT_Fill);
RC: "Start a 5 minutes timer when the fill valve is open";
N: XIC(BTM04_Struct.UUT_Fill)TON(BTM04_Struct.Fill_Timer,?,?);
RC: "When the vent timer is timing calculate the flow rate";
N: XIC(BTM04_Struct.Fill_Timer.TT)GRT(BTM04_Struct.Fill_Timer.ACC,0)DIV(BTM04_Struct.Slope_fill_pressure,BTM04_Struct.Fill_Timer.ACC,BTM04_Struct.Slope);
RC: "Set an alarm condition if the 5 minute timer completes";
N: [XIC(BTM04_Struct.Fill_Timer.DN) ONS(BTM04_Struct.One_Shot.7) ,XIC(BTM04_Struct.Alarm_fill_time) XIO(BTM_Alarm_RESET) ]OTE(BTM04_Struct.Alarm_fill_time);
RC: "The system is reset when pressure switches are above threshold settings while filling";
N: XIC(BTM04_Struct.UUT_Fill)XIC(BTM04_Fault_A)XIC(BTM04_Fault_B)OTE(BTM04_Struct.UUT_Reset);
RC: "When the system reaches reset record the reset pressure";
N: XIC(BTM04_Struct.UUT_Reset)ONS(BTM04_Struct.One_Shot.8)MOV(BTM04_Transducer_IN,BTM04_Struct.High_reset);
RC: "Set an alarm condition if the BTM exceeds 15 psi";
N: [GEQ(BTM04_Transducer_IN,BTM_MAX_PRESSURE) XIC(BTM04_Struct.UUT_Fill) ONS(BTM04_Struct.One_Shot.9) ,XIC(BTM04_Struct.Alarm_over_pressure) XIO(BTM_Alarm_RESET) ]OTE(BTM04_Struct.Alarm_over_pressure);
RC: "Set alarm condition if flow rate exceeds .004 psi/msec";
N: [[XIC(BTM04_Struct.Slope_check_1) ,XIC(BTM04_Struct.Slope_check_2) ] ONS(BTM04_Struct.One_Shot.10) GRT(BTM04_Struct.Slope,0.004) ,XIC(BTM04_Struct.Alarm_flow_rate) XIO(BTM_Alarm_RESET) ]OTE(BTM04_Struct.Alarm_flow_rate);
RC: "Reset slope register to zero on flow rate fault";
N: XIC(BTM04_Struct.Alarm_flow_rate)MOV(0,BTM04_Struct.Slope);
RC: "Set the alarm if an alarm condition occurs";
N: [XIC(BTM04_Struct.Alarm_vent_time) ,XIC(BTM04_Struct.Alarm_fill_time) ,XIC(BTM04_Struct.Alarm_flow_rate) ,XIC(BTM04_Struct.Alarm_over_pressure) ]OTE(BTM04_Struct.Alarm_sum);
RC: "Open valve one to fill";
N: XIC(BTM04_Struct.UUT_Fill)OTE(BTM04_Valve_1);
RC: "Open valve two to vent$N"
"";
N: XIC(BTM04_Struct.UUT_Vent)OTE(BTM04_Valve_2);
N: RET();
END_ROUTINE
ROUTINE BTM_TEST_05
RC: "$N"
"*******************************************************************************$'$N"
"BTM Test Sub-Routine$N"
"*******************************************************************************$'$N"
"$N"
"";
N: SBR()OTE(NOOP);
RC: "$N"
"$N"
"****************************************$N"
"$N"
"This routine runs the BTM Test$N"
"$N"
"****************************************";
N: XIC(Hardware_EN)XIC(BTM05_Test_Start)XIO(BTM05_Struct.Vent_Timer.TT)XIO(BTM05_Struct.Fill_Timer.TT)ONS(BTM05_Struct.One_Shot.0)OTL(BTM05_Struct.UUT_Vent);
N: [XIC(BTM05_Struct.Vent_Timer.TT) ,XIC(BTM05_Struct.Fill_Timer.TT) ]OTE(BTM_Alarm_UUT.4);
RC: "Move the transucer reading to the slope register when the vent cycle begins$N"
"Move zero to the slope register when the pressure is below 10 psi$N"
"The register is zeroed becase a flow rate alarm would occur if the BTM was already tripped$N"
"$N"
"";
N: XIC(BTM05_Struct.UUT_Vent)ONS(BTM05_Struct.One_Shot.1)LES(BTM05_Transducer_IN,10.0)MOV(0,BTM05_Struct.Slope_vent_pressure);
N: XIC(BTM05_Struct.UUT_Vent)ONS(BTM05_Struct.One_Shot.2)GEQ(BTM05_Transducer_IN,10.0)MOV(BTM05_Transducer_IN,BTM05_Struct.Slope_vent_pressure);
RC: "Move the transucer reading to the slope register when the fill cycle begins";
N: XIC(BTM05_Struct.UUT_Fill)ONS(BTM05_Struct.One_Shot.3)MOV(BTM05_Transducer_IN,BTM05_Struct.Slope_fill_pressure);
RC: "While venting wait for both pressure switches to fault ";
N: XIC(BTM05_Struct.UUT_Vent)XIO(BTM05_Fault_A)XIO(BTM05_Fault_B)OTE(BTM05_Struct.UUT_Fault);
RC: "Start a 5 minutes timer when the vent valve is open";
N: XIC(BTM05_Struct.UUT_Vent)TON(BTM05_Struct.Vent_Timer,?,?);
RC: "When the vent timer is timing calculate the flow rate";
N: XIC(BTM05_Struct.Vent_Timer.TT)GRT(BTM05_Struct.Vent_Timer.ACC,0)DIV(BTM05_Struct.Slope_vent_pressure,BTM05_Struct.Vent_Timer.ACC,BTM05_Struct.Slope);
RC: "if the 5 minute timer completes$N"
"Set an alarm condition";
N: [XIC(BTM05_Struct.Vent_Timer.DN) ONS(BTM05_Struct.One_Shot.4) ,XIC(BTM05_Struct.Alarm_vent_time) XIO(BTM_Alarm_RESET) ]OTE(BTM05_Struct.Alarm_vent_time);
RC: "Record the pressure when both pressure switches have faulted";
N: XIC(BTM05_Struct.UUT_Fault)ONS(BTM05_Struct.One_Shot.5)MOV(BTM05_Transducer_IN,BTM05_Struct.Low_trip);
RC: "Unlatch the vent routine, latch the fill routine and check the flow rate after fault";
N: XIC(BTM05_Struct.UUT_Fault)ONS(BTM05_Struct.One_Shot.6)[OTU(BTM05_Struct.UUT_Vent) ,OTL(BTM05_Struct.UUT_Fill) ,OTE(BTM05_Struct.Slope_check_1) ];
RC: "When the BTM reaches the fill set point $N"
"check the flow rate";
N: GEQ(BTM05_Transducer_IN,BTM05_Fill_Setpoint)OTE(BTM05_Struct.Slope_check_2);
RC: "Stop filling if the BTM reaches the fill set point$N"
"OR there is an alarm";
N: [XIC(BTM05_Struct.Slope_check_2) ,XIC(BTM05_Struct.Alarm_sum) ]OTU(BTM05_Struct.UUT_Fill);
RC: "Start a 5 minutes timer when the fill valve is open";
N: XIC(BTM05_Struct.UUT_Fill)TON(BTM05_Struct.Fill_Timer,?,?);
RC: "When the vent timer is timing calculate the flow rate";
N: XIC(BTM05_Struct.Fill_Timer.TT)GRT(BTM05_Struct.Fill_Timer.ACC,0)DIV(BTM05_Struct.Slope_fill_pressure,BTM05_Struct.Fill_Timer.ACC,BTM05_Struct.Slope);
RC: "Set an alarm condition if the 5 minute timer completes";
N: [XIC(BTM05_Struct.Fill_Timer.DN) ONS(BTM05_Struct.One_Shot.7) ,XIC(BTM05_Struct.Alarm_fill_time) XIO(BTM_Alarm_RESET) ]OTE(BTM05_Struct.Alarm_fill_time);
RC: "The system is reset when pressure switches are above threshold settings while filling";
N: XIC(BTM05_Struct.UUT_Fill)XIC(BTM05_Fault_A)XIC(BTM05_Fault_B)OTE(BTM05_Struct.UUT_Reset);
RC: "When the system reaches reset record the reset pressure";
N: XIC(BTM05_Struct.UUT_Reset)ONS(BTM05_Struct.One_Shot.8)MOV(BTM05_Transducer_IN,BTM05_Struct.High_reset);
RC: "Set an alarm condition if the BTM exceeds 15 psi";
N: [GEQ(BTM05_Transducer_IN,BTM_MAX_PRESSURE) XIC(BTM05_Struct.UUT_Fill) ONS(BTM05_Struct.One_Shot.9) ,XIC(BTM05_Struct.Alarm_over_pressure) XIO(BTM_Alarm_RESET) ]OTE(BTM05_Struct.Alarm_over_pressure);
RC: "Set alarm condition if flow rate exceeds .004 psi/msec";
N: [[XIC(BTM05_Struct.Slope_check_1) ,XIC(BTM05_Struct.Slope_check_2) ] ONS(BTM05_Struct.One_Shot.10) GRT(BTM05_Struct.Slope,0.004) ,XIC(BTM05_Struct.Alarm_flow_rate) XIO(BTM_Alarm_RESET) ]OTE(BTM05_Struct.Alarm_flow_rate);
RC: "Reset slope register to zero on flow rate fault";
N: XIC(BTM05_Struct.Alarm_flow_rate)MOV(0,BTM05_Struct.Slope);
RC: "Set the alarm if an alarm condition occurs";
N: [XIC(BTM05_Struct.Alarm_vent_time) ,XIC(BTM05_Struct.Alarm_fill_time) ,XIC(BTM05_Struct.Alarm_flow_rate) ,XIC(BTM05_Struct.Alarm_over_pressure) ]OTE(BTM05_Struct.Alarm_sum);
RC: "Open valve one to fill";
N: XIC(BTM05_Struct.UUT_Fill)OTE(BTM05_Valve_1);
RC: "Open valve two to vent$N"
"";
N: XIC(BTM05_Struct.UUT_Vent)OTE(BTM05_Valve_2);
N: RET();
END_ROUTINE
ROUTINE BTM_TEST_06
RC: "$N"
"*******************************************************************************$'$N"
"BTM Test Sub-Routine$N"
"*******************************************************************************$'$N"
"$N"
"";
N: SBR()OTE(NOOP);
RC: "$N"
"$N"
"****************************************$N"
"$N"
"This routine runs the BTM Test$N"
"$N"
"****************************************";
N: XIC(Hardware_EN)XIC(BTM06_Test_Start)XIO(BTM06_Struct.Vent_Timer.TT)XIO(BTM06_Struct.Fill_Timer.TT)ONS(BTM06_Struct.One_Shot.0)OTL(BTM06_Struct.UUT_Vent);
N: [XIC(BTM06_Struct.Vent_Timer.TT) ,XIC(BTM06_Struct.Fill_Timer.TT) ]OTE(BTM_Alarm_UUT.5);
RC: "Move the transucer reading to the slope register when the vent cycle begins$N"
"Move zero to the slope register when the pressure is below 10 psi$N"
"The register is zeroed becase a flow rate alarm would occur if the BTM was already tripped$N"
"$N"
"";
N: XIC(BTM06_Struct.UUT_Vent)ONS(BTM06_Struct.One_Shot.1)LES(BTM06_Transducer_IN,10.0)MOV(0,BTM06_Struct.Slope_vent_pressure);
N: XIC(BTM06_Struct.UUT_Vent)ONS(BTM06_Struct.One_Shot.2)GEQ(BTM06_Transducer_IN,10.0)MOV(BTM06_Transducer_IN,BTM06_Struct.Slope_vent_pressure);
RC: "Move the transucer reading to the slope register when the fill cycle begins";
N: XIC(BTM06_Struct.UUT_Fill)ONS(BTM06_Struct.One_Shot.3)MOV(BTM06_Transducer_IN,BTM06_Struct.Slope_fill_pressure);
RC: "While venting wait for both pressure switches to fault ";
N: XIC(BTM06_Struct.UUT_Vent)XIO(BTM06_Fault_A)XIO(BTM06_Fault_B)OTE(BTM06_Struct.UUT_Fault);
RC: "Start a 5 minutes timer when the vent valve is open";
N: XIC(BTM06_Struct.UUT_Vent)TON(BTM06_Struct.Vent_Timer,?,?);
RC: "When the vent timer is timing calculate the flow rate";
N: XIC(BTM06_Struct.Vent_Timer.TT)GRT(BTM06_Struct.Vent_Timer.ACC,0)DIV(BTM06_Struct.Slope_vent_pressure,BTM06_Struct.Vent_Timer.ACC,BTM06_Struct.Slope);
RC: "if the 5 minute timer completes$N"
"Set an alarm condition";
N: [XIC(BTM06_Struct.Vent_Timer.DN) ONS(BTM06_Struct.One_Shot.4) ,XIC(BTM06_Struct.Alarm_vent_time) XIO(BTM_Alarm_RESET) ]OTE(BTM06_Struct.Alarm_vent_time);
RC: "Record the pressure when both pressure switches have faulted";
N: XIC(BTM06_Struct.UUT_Fault)ONS(BTM06_Struct.One_Shot.5)MOV(BTM06_Transducer_IN,BTM06_Struct.Low_trip);
RC: "Unlatch the vent routine, latch the fill routine and check the flow rate after fault";
N: XIC(BTM06_Struct.UUT_Fault)ONS(BTM06_Struct.One_Shot.6)[OTU(BTM06_Struct.UUT_Vent) ,OTL(BTM06_Struct.UUT_Fill) ,OTE(BTM06_Struct.Slope_check_1) ];
RC: "When the BTM reaches the fill set point $N"
"check the flow rate";
N: GEQ(BTM06_Transducer_IN,BTM06_Fill_Setpoint)OTE(BTM06_Struct.Slope_check_2);
RC: "Stop filling if the BTM reaches the fill set point$N"
"OR there is an alarm";
N: [XIC(BTM06_Struct.Slope_check_2) ,XIC(BTM06_Struct.Alarm_sum) ]OTU(BTM06_Struct.UUT_Fill);
RC: "Start a 5 minutes timer when the fill valve is open";
N: XIC(BTM06_Struct.UUT_Fill)TON(BTM06_Struct.Fill_Timer,?,?);
RC: "When the vent timer is timing calculate the flow rate";
N: XIC(BTM06_Struct.Fill_Timer.TT)GRT(BTM06_Struct.Fill_Timer.ACC,0)DIV(BTM06_Struct.Slope_fill_pressure,BTM06_Struct.Fill_Timer.ACC,BTM06_Struct.Slope);
RC: "Set an alarm condition if the 5 minute timer completes";
N: [XIC(BTM06_Struct.Fill_Timer.DN) ONS(BTM06_Struct.One_Shot.7) ,XIC(BTM06_Struct.Alarm_fill_time) XIO(BTM_Alarm_RESET) ]OTE(BTM06_Struct.Alarm_fill_time);
RC: "The system is reset when pressure switches are above threshold settings while filling";
N: XIC(BTM06_Struct.UUT_Fill)XIC(BTM06_Fault_A)XIC(BTM06_Fault_B)OTE(BTM06_Struct.UUT_Reset);
RC: "When the system reaches reset record the reset pressure";
N: XIC(BTM06_Struct.UUT_Reset)ONS(BTM06_Struct.One_Shot.8)MOV(BTM06_Transducer_IN,BTM06_Struct.High_reset);
RC: "Set an alarm condition if the BTM exceeds 15 psi";
N: [GEQ(BTM06_Transducer_IN,BTM_MAX_PRESSURE) XIC(BTM06_Struct.UUT_Fill) ONS(BTM06_Struct.One_Shot.9) ,XIC(BTM06_Struct.Alarm_over_pressure) XIO(BTM_Alarm_RESET) ]OTE(BTM06_Struct.Alarm_over_pressure);
RC: "Set alarm condition if flow rate exceeds .004 psi/msec";
N: [[XIC(BTM06_Struct.Slope_check_1) ,XIC(BTM06_Struct.Slope_check_2) ] ONS(BTM06_Struct.One_Shot.10) GRT(BTM06_Struct.Slope,0.004) ,XIC(BTM06_Struct.Alarm_flow_rate) XIO(BTM_Alarm_RESET) ]OTE(BTM06_Struct.Alarm_flow_rate);
RC: "Reset slope register to zero on flow rate fault";
N: XIC(BTM06_Struct.Alarm_flow_rate)MOV(0,BTM06_Struct.Slope);
RC: "Set the alarm if an alarm condition occurs";
N: [XIC(BTM06_Struct.Alarm_vent_time) ,XIC(BTM06_Struct.Alarm_fill_time) ,XIC(BTM06_Struct.Alarm_flow_rate) ,XIC(BTM06_Struct.Alarm_over_pressure) ]OTE(BTM06_Struct.Alarm_sum);
RC: "Open valve one to fill";
N: XIC(BTM06_Struct.UUT_Fill)OTE(BTM06_Valve_1);
RC: "Open valve two to vent$N"
"";
N: XIC(BTM06_Struct.UUT_Vent)OTE(BTM06_Valve_2);
N: RET();
END_ROUTINE
ROUTINE BTM_TEST_07
RC: "$N"
"*******************************************************************************$'$N"
"BTM Test Sub-Routine$N"
"*******************************************************************************$'$N"
"$N"
"";
N: SBR()OTE(NOOP);
RC: "$N"
"$N"
"****************************************$N"
"$N"
"This routine runs the BTM Test$N"
"$N"
"****************************************";
N: XIC(Hardware_EN)XIC(BTM07_Test_Start)XIO(BTM07_Struct.Vent_Timer.TT)XIO(BTM07_Struct.Fill_Timer.TT)ONS(BTM07_Struct.One_Shot.0)OTL(BTM07_Struct.UUT_Vent);
N: [XIC(BTM07_Struct.Vent_Timer.TT) ,XIC(BTM07_Struct.Fill_Timer.TT) ]OTE(BTM_Alarm_UUT.6);
RC: "Move the transucer reading to the slope register when the vent cycle begins$N"
"Move zero to the slope register when the pressure is below 10 psi$N"
"The register is zeroed becase a flow rate alarm would occur if the BTM was already tripped$N"
"$N"
"";
N: XIC(BTM07_Struct.UUT_Vent)ONS(BTM07_Struct.One_Shot.1)LES(BTM07_Transducer_IN,10.0)MOV(0,BTM07_Struct.Slope_vent_pressure);
N: XIC(BTM07_Struct.UUT_Vent)ONS(BTM07_Struct.One_Shot.2)GEQ(BTM07_Transducer_IN,10.0)MOV(BTM07_Transducer_IN,BTM07_Struct.Slope_vent_pressure);
RC: "Move the transucer reading to the slope register when the fill cycle begins";
N: XIC(BTM07_Struct.UUT_Fill)ONS(BTM07_Struct.One_Shot.3)MOV(BTM07_Transducer_IN,BTM07_Struct.Slope_fill_pressure);
RC: "While venting wait for both pressure switches to fault ";
N: XIC(BTM07_Struct.UUT_Vent)XIO(BTM07_Fault_A)XIO(BTM07_Fault_B)OTE(BTM07_Struct.UUT_Fault);
RC: "Start a 5 minutes timer when the vent valve is open";
N: XIC(BTM07_Struct.UUT_Vent)TON(BTM07_Struct.Vent_Timer,?,?);
RC: "When the vent timer is timing calculate the flow rate";
N: XIC(BTM07_Struct.Vent_Timer.TT)GRT(BTM07_Struct.Vent_Timer.ACC,0)DIV(BTM07_Struct.Slope_vent_pressure,BTM07_Struct.Vent_Timer.ACC,BTM07_Struct.Slope);
RC: "if the 5 minute timer completes$N"
"Set an alarm condition";
N: [XIC(BTM07_Struct.Vent_Timer.DN) ONS(BTM07_Struct.One_Shot.4) ,XIC(BTM07_Struct.Alarm_vent_time) XIO(BTM_Alarm_RESET) ]OTE(BTM07_Struct.Alarm_vent_time);
RC: "Record the pressure when both pressure switches have faulted";
N: XIC(BTM07_Struct.UUT_Fault)ONS(BTM07_Struct.One_Shot.5)MOV(BTM07_Transducer_IN,BTM07_Struct.Low_trip);
RC: "Unlatch the vent routine, latch the fill routine and check the flow rate after fault";
N: XIC(BTM07_Struct.UUT_Fault)ONS(BTM07_Struct.One_Shot.6)[OTU(BTM07_Struct.UUT_Vent) ,OTL(BTM07_Struct.UUT_Fill) ,OTE(BTM07_Struct.Slope_check_1) ];
RC: "When the BTM reaches the fill set point $N"
"check the flow rate";
N: GEQ(BTM07_Transducer_IN,BTM07_Fill_Setpoint)OTE(BTM07_Struct.Slope_check_2);
RC: "Stop filling if the BTM reaches the fill set point$N"
"OR there is an alarm";
N: [XIC(BTM07_Struct.Slope_check_2) ,XIC(BTM07_Struct.Alarm_sum) ]OTU(BTM07_Struct.UUT_Fill);
RC: "Start a 5 minutes timer when the fill valve is open";
N: XIC(BTM07_Struct.UUT_Fill)TON(BTM07_Struct.Fill_Timer,?,?);
RC: "When the vent timer is timing calculate the flow rate";
N: XIC(BTM07_Struct.Fill_Timer.TT)GRT(BTM07_Struct.Fill_Timer.ACC,0)DIV(BTM07_Struct.Slope_fill_pressure,BTM07_Struct.Fill_Timer.ACC,BTM07_Struct.Slope);
RC: "Set an alarm condition if the 5 minute timer completes";
N: [XIC(BTM07_Struct.Fill_Timer.DN) ONS(BTM07_Struct.One_Shot.7) ,XIC(BTM07_Struct.Alarm_fill_time) XIO(BTM_Alarm_RESET) ]OTE(BTM07_Struct.Alarm_fill_time);
RC: "The system is reset when pressure switches are above threshold settings while filling";
N: XIC(BTM07_Struct.UUT_Fill)XIC(BTM07_Fault_A)XIC(BTM07_Fault_B)OTE(BTM07_Struct.UUT_Reset);
RC: "When the system reaches reset record the reset pressure";
N: XIC(BTM07_Struct.UUT_Reset)ONS(BTM07_Struct.One_Shot.8)MOV(BTM07_Transducer_IN,BTM07_Struct.High_reset);
RC: "Set an alarm condition if the BTM exceeds 15 psi";
N: [GEQ(BTM07_Transducer_IN,BTM_MAX_PRESSURE) XIC(BTM07_Struct.UUT_Fill) ONS(BTM07_Struct.One_Shot.9) ,XIC(BTM07_Struct.Alarm_over_pressure) XIO(BTM_Alarm_RESET) ]OTE(BTM07_Struct.Alarm_over_pressure);
RC: "Set alarm condition if flow rate exceeds .004 psi/msec";
N: [[XIC(BTM07_Struct.Slope_check_1) ,XIC(BTM07_Struct.Slope_check_2) ] ONS(BTM07_Struct.One_Shot.10) GRT(BTM07_Struct.Slope,0.004) ,XIC(BTM07_Struct.Alarm_flow_rate) XIO(BTM_Alarm_RESET) ]OTE(BTM07_Struct.Alarm_flow_rate);
RC: "Reset slope register to zero on flow rate fault";
N: XIC(BTM07_Struct.Alarm_flow_rate)MOV(0,BTM07_Struct.Slope);
RC: "Set the alarm if an alarm condition occurs";
N: [XIC(BTM07_Struct.Alarm_vent_time) ,XIC(BTM07_Struct.Alarm_fill_time) ,XIC(BTM07_Struct.Alarm_flow_rate) ,XIC(BTM07_Struct.Alarm_over_pressure) ]OTE(BTM07_Struct.Alarm_sum);
RC: "Open valve one to fill";
N: XIC(BTM07_Struct.UUT_Fill)OTE(BTM07_Valve_1);
RC: "Open valve two to vent$N"
"";
N: XIC(BTM07_Struct.UUT_Vent)OTE(BTM07_Valve_2);
N: RET();
END_ROUTINE
ROUTINE BTM_TEST_08
RC: "$N"
"*******************************************************************************$'$N"
"BTM Test Sub-Routine$N"
"*******************************************************************************$'$N"
"$N"
"";
N: SBR()OTE(NOOP);
RC: "$N"
"$N"
"****************************************$N"
"$N"
"This routine runs the BTM Test$N"
"$N"
"****************************************";
N: XIC(Hardware_EN)XIC(BTM08_Test_Start)XIO(BTM08_Struct.Vent_Timer.TT)XIO(BTM08_Struct.Fill_Timer.TT)ONS(BTM08_Struct.One_Shot.0)OTL(BTM08_Struct.UUT_Vent);
N: [XIC(BTM08_Struct.Vent_Timer.TT) ,XIC(BTM08_Struct.Fill_Timer.TT) ]OTE(BTM_Alarm_UUT.7);
RC: "Move the transucer reading to the slope register when the vent cycle begins$N"
"Move zero to the slope register when the pressure is below 10 psi$N"
"The register is zeroed becase a flow rate alarm would occur if the BTM was already tripped$N"
"$N"
"";
N: XIC(BTM08_Struct.UUT_Vent)ONS(BTM08_Struct.One_Shot.1)LES(BTM08_Transducer_IN,10.0)MOV(0,BTM08_Struct.Slope_vent_pressure);
N: XIC(BTM08_Struct.UUT_Vent)ONS(BTM08_Struct.One_Shot.2)GEQ(BTM08_Transducer_IN,10.0)MOV(BTM08_Transducer_IN,BTM08_Struct.Slope_vent_pressure);
RC: "Move the transucer reading to the slope register when the fill cycle begins";
N: XIC(BTM08_Struct.UUT_Fill)ONS(BTM08_Struct.One_Shot.3)MOV(BTM08_Transducer_IN,BTM08_Struct.Slope_fill_pressure);
RC: "While venting wait for both pressure switches to fault ";
N: XIC(BTM08_Struct.UUT_Vent)XIO(BTM08_Fault_A)XIO(BTM08_Fault_B)OTE(BTM08_Struct.UUT_Fault);
RC: "Start a 5 minutes timer when the vent valve is open";
N: XIC(BTM08_Struct.UUT_Vent)TON(BTM08_Struct.Vent_Timer,?,?);
RC: "When the vent timer is timing calculate the flow rate";
N: XIC(BTM08_Struct.Vent_Timer.TT)GRT(BTM08_Struct.Vent_Timer.ACC,0)DIV(BTM08_Struct.Slope_vent_pressure,BTM08_Struct.Vent_Timer.ACC,BTM08_Struct.Slope);
RC: "if the 5 minute timer completes$N"
"Set an alarm condition";
N: [XIC(BTM08_Struct.Vent_Timer.DN) ONS(BTM08_Struct.One_Shot.4) ,XIC(BTM08_Struct.Alarm_vent_time) XIO(BTM_Alarm_RESET) ]OTE(BTM08_Struct.Alarm_vent_time);
RC: "Record the pressure when both pressure switches have faulted";
N: XIC(BTM08_Struct.UUT_Fault)ONS(BTM08_Struct.One_Shot.5)MOV(BTM08_Transducer_IN,BTM08_Struct.Low_trip);
RC: "Unlatch the vent routine, latch the fill routine and check the flow rate after fault";
N: XIC(BTM08_Struct.UUT_Fault)ONS(BTM08_Struct.One_Shot.6)[OTU(BTM08_Struct.UUT_Vent) ,OTL(BTM08_Struct.UUT_Fill) ,OTE(BTM08_Struct.Slope_check_1) ];
RC: "When the BTM reaches the fill set point $N"
"check the flow rate";
N: GEQ(BTM08_Transducer_IN,BTM08_Fill_Setpoint)OTE(BTM08_Struct.Slope_check_2);
RC: "Stop filling if the BTM reaches the fill set point$N"
"OR there is an alarm";
N: [XIC(BTM08_Struct.Slope_check_2) ,XIC(BTM08_Struct.Alarm_sum) ]OTU(BTM08_Struct.UUT_Fill);
RC: "Start a 5 minutes timer when the fill valve is open";
N: XIC(BTM08_Struct.UUT_Fill)TON(BTM08_Struct.Fill_Timer,?,?);
RC: "When the vent timer is timing calculate the flow rate";
N: XIC(BTM08_Struct.Fill_Timer.TT)GRT(BTM08_Struct.Fill_Timer.ACC,0)DIV(BTM08_Struct.Slope_fill_pressure,BTM08_Struct.Fill_Timer.ACC,BTM08_Struct.Slope);
RC: "Set an alarm condition if the 5 minute timer completes";
N: [XIC(BTM08_Struct.Fill_Timer.DN) ONS(BTM08_Struct.One_Shot.7) ,XIC(BTM08_Struct.Alarm_fill_time) XIO(BTM_Alarm_RESET) ]OTE(BTM08_Struct.Alarm_fill_time);
RC: "The system is reset when pressure switches are above threshold settings while filling";
N: XIC(BTM08_Struct.UUT_Fill)XIC(BTM08_Fault_A)XIC(BTM08_Fault_B)OTE(BTM08_Struct.UUT_Reset);
RC: "When the system reaches reset record the reset pressure";
N: XIC(BTM08_Struct.UUT_Reset)ONS(BTM08_Struct.One_Shot.8)MOV(BTM08_Transducer_IN,BTM08_Struct.High_reset);
RC: "Set an alarm condition if the BTM exceeds 15 psi";
N: [GEQ(BTM08_Transducer_IN,BTM_MAX_PRESSURE) XIC(BTM08_Struct.UUT_Fill) ONS(BTM08_Struct.One_Shot.9) ,XIC(BTM08_Struct.Alarm_over_pressure) XIO(BTM_Alarm_RESET) ]OTE(BTM08_Struct.Alarm_over_pressure);
RC: "Set alarm condition if flow rate exceeds .004 psi/msec";
N: [[XIC(BTM08_Struct.Slope_check_1) ,XIC(BTM08_Struct.Slope_check_2) ] ONS(BTM08_Struct.One_Shot.10) GRT(BTM08_Struct.Slope,0.004) ,XIC(BTM08_Struct.Alarm_flow_rate) XIO(BTM_Alarm_RESET) ]OTE(BTM08_Struct.Alarm_flow_rate);
RC: "Reset slope register to zero on flow rate fault";
N: XIC(BTM08_Struct.Alarm_flow_rate)MOV(0,BTM08_Struct.Slope);
RC: "Set the alarm if an alarm condition occurs";
N: [XIC(BTM08_Struct.Alarm_vent_time) ,XIC(BTM08_Struct.Alarm_fill_time) ,XIC(BTM08_Struct.Alarm_flow_rate) ,XIC(BTM08_Struct.Alarm_over_pressure) ]OTE(BTM08_Struct.Alarm_sum);
RC: "Open valve one to fill";
N: XIC(BTM08_Struct.UUT_Fill)OTE(BTM08_Valve_1);
RC: "Open valve two to vent$N"
"";
N: XIC(BTM08_Struct.UUT_Vent)OTE(BTM08_Valve_2);
N: RET();
END_ROUTINE
ROUTINE BTM_TEST_09
RC: "$N"
"*******************************************************************************$'$N"
"BTM Test Sub-Routine$N"
"*******************************************************************************$'$N"
"$N"
"";
N: SBR()OTE(NOOP);
RC: "$N"
"$N"
"****************************************$N"
"$N"
"This routine runs the BTM Test$N"
"$N"
"****************************************";
N: XIC(Hardware_EN)XIC(BTM09_Test_Start)XIO(BTM09_Struct.Vent_Timer.TT)XIO(BTM09_Struct.Fill_Timer.TT)ONS(BTM09_Struct.One_Shot.0)OTL(BTM09_Struct.UUT_Vent);
N: [XIC(BTM09_Struct.Vent_Timer.TT) ,XIC(BTM09_Struct.Fill_Timer.TT) ]OTE(BTM_Alarm_UUT.8);
RC: "Move the transucer reading to the slope register when the vent cycle begins$N"
"Move zero to the slope register when the pressure is below 10 psi$N"
"The register is zeroed becase a flow rate alarm would occur if the BTM was already tripped$N"
"$N"
"";
N: XIC(BTM09_Struct.UUT_Vent)ONS(BTM09_Struct.One_Shot.1)LES(BTM09_Transducer_IN,10.0)MOV(0,BTM09_Struct.Slope_vent_pressure);
N: XIC(BTM09_Struct.UUT_Vent)ONS(BTM09_Struct.One_Shot.2)GEQ(BTM09_Transducer_IN,10.0)MOV(BTM09_Transducer_IN,BTM09_Struct.Slope_vent_pressure);
RC: "Move the transucer reading to the slope register when the fill cycle begins";
N: XIC(BTM09_Struct.UUT_Fill)ONS(BTM09_Struct.One_Shot.3)MOV(BTM09_Transducer_IN,BTM09_Struct.Slope_fill_pressure);
RC: "While venting wait for both pressure switches to fault ";
N: XIC(BTM09_Struct.UUT_Vent)XIO(BTM09_Fault_A)XIO(BTM09_Fault_B)OTE(BTM09_Struct.UUT_Fault);
RC: "Start a 5 minutes timer when the vent valve is open";
N: XIC(BTM09_Struct.UUT_Vent)TON(BTM09_Struct.Vent_Timer,?,?);
RC: "When the vent timer is timing calculate the flow rate";
N: XIC(BTM09_Struct.Vent_Timer.TT)GRT(BTM09_Struct.Vent_Timer.ACC,0)DIV(BTM09_Struct.Slope_vent_pressure,BTM09_Struct.Vent_Timer.ACC,BTM09_Struct.Slope);
RC: "if the 5 minute timer completes$N"
"Set an alarm condition";
N: [XIC(BTM09_Struct.Vent_Timer.DN) ONS(BTM09_Struct.One_Shot.4) ,XIC(BTM09_Struct.Alarm_vent_time) XIO(BTM_Alarm_RESET) ]OTE(BTM09_Struct.Alarm_vent_time);
RC: "Record the pressure when both pressure switches have faulted";
N: XIC(BTM09_Struct.UUT_Fault)ONS(BTM09_Struct.One_Shot.5)MOV(BTM09_Transducer_IN,BTM09_Struct.Low_trip);
RC: "Unlatch the vent routine, latch the fill routine and check the flow rate after fault";
N: XIC(BTM09_Struct.UUT_Fault)ONS(BTM09_Struct.One_Shot.6)[OTU(BTM09_Struct.UUT_Vent) ,OTL(BTM09_Struct.UUT_Fill) ,OTE(BTM09_Struct.Slope_check_1) ];
RC: "When the BTM reaches the fill set point $N"
"check the flow rate";
N: GEQ(BTM09_Transducer_IN,BTM09_Fill_Setpoint)OTE(BTM09_Struct.Slope_check_2);
RC: "Stop filling if the BTM reaches the fill set point$N"
"OR there is an alarm";
N: [XIC(BTM09_Struct.Slope_check_2) ,XIC(BTM09_Struct.Alarm_sum) ]OTU(BTM09_Struct.UUT_Fill);
RC: "Start a 5 minutes timer when the fill valve is open";
N: XIC(BTM09_Struct.UUT_Fill)TON(BTM09_Struct.Fill_Timer,?,?);
RC: "When the vent timer is timing calculate the flow rate";
N: XIC(BTM09_Struct.Fill_Timer.TT)GRT(BTM09_Struct.Fill_Timer.ACC,0)DIV(BTM09_Struct.Slope_fill_pressure,BTM09_Struct.Fill_Timer.ACC,BTM09_Struct.Slope);
RC: "Set an alarm condition if the 5 minute timer completes";
N: [XIC(BTM09_Struct.Fill_Timer.DN) ONS(BTM09_Struct.One_Shot.7) ,XIC(BTM09_Struct.Alarm_fill_time) XIO(BTM_Alarm_RESET) ]OTE(BTM09_Struct.Alarm_fill_time);
RC: "The system is reset when pressure switches are above threshold settings while filling";
N: XIC(BTM09_Struct.UUT_Fill)XIC(BTM09_Fault_A)XIC(BTM09_Fault_B)OTE(BTM09_Struct.UUT_Reset);
RC: "When the system reaches reset record the reset pressure";
N: XIC(BTM09_Struct.UUT_Reset)ONS(BTM09_Struct.One_Shot.8)MOV(BTM09_Transducer_IN,BTM09_Struct.High_reset);
RC: "Set an alarm condition if the BTM exceeds 15 psi";
N: [GEQ(BTM09_Transducer_IN,BTM_MAX_PRESSURE) XIC(BTM09_Struct.UUT_Fill) ONS(BTM09_Struct.One_Shot.9) ,XIC(BTM09_Struct.Alarm_over_pressure) XIO(BTM_Alarm_RESET) ]OTE(BTM09_Struct.Alarm_over_pressure);
RC: "Set alarm condition if flow rate exceeds .004 psi/msec";
N: [[XIC(BTM09_Struct.Slope_check_1) ,XIC(BTM09_Struct.Slope_check_2) ] ONS(BTM09_Struct.One_Shot.10) GRT(BTM09_Struct.Slope,0.004) ,XIC(BTM09_Struct.Alarm_flow_rate) XIO(BTM_Alarm_RESET) ]OTE(BTM09_Struct.Alarm_flow_rate);
RC: "Reset slope register to zero on flow rate fault";
N: XIC(BTM09_Struct.Alarm_flow_rate)MOV(0,BTM09_Struct.Slope);
RC: "Set the alarm if an alarm condition occurs";
N: [XIC(BTM09_Struct.Alarm_vent_time) ,XIC(BTM09_Struct.Alarm_fill_time) ,XIC(BTM09_Struct.Alarm_flow_rate) ,XIC(BTM09_Struct.Alarm_over_pressure) ]OTE(BTM09_Struct.Alarm_sum);
RC: "Open valve one to fill";
N: XIC(BTM09_Struct.UUT_Fill)OTE(BTM09_Valve_1);
RC: "Open valve two to vent$N"
"";
N: XIC(BTM09_Struct.UUT_Vent)OTE(BTM09_Valve_2);
N: RET();
END_ROUTINE
ROUTINE BTM_TEST_10
RC: "$N"
"*******************************************************************************$'$N"
"BTM Test Sub-Routine$N"
"*******************************************************************************$'$N"
"$N"
"";
N: SBR()OTE(NOOP);
RC: "$N"
"$N"
"****************************************$N"
"$N"
"This routine runs the BTM Test$N"
"$N"
"****************************************";
N: XIC(Hardware_EN)XIC(BTM10_Test_Start)XIO(BTM10_Struct.Vent_Timer.TT)XIO(BTM10_Struct.Fill_Timer.TT)ONS(BTM10_Struct.One_Shot.0)OTL(BTM10_Struct.UUT_Vent);
N: [XIC(BTM10_Struct.Vent_Timer.TT) ,XIC(BTM10_Struct.Fill_Timer.TT) ]OTE(BTM_Alarm_UUT.9);
RC: "Move the transucer reading to the slope register when the vent cycle begins$N"
"Move zero to the slope register when the pressure is below 10 psi$N"
"The register is zeroed becase a flow rate alarm would occur if the BTM was already tripped$N"
"$N"
"";
N: XIC(BTM10_Struct.UUT_Vent)ONS(BTM10_Struct.One_Shot.1)LES(BTM10_Transducer_IN,10.0)MOV(0,BTM10_Struct.Slope_vent_pressure);
N: XIC(BTM10_Struct.UUT_Vent)ONS(BTM10_Struct.One_Shot.2)GEQ(BTM10_Transducer_IN,10.0)MOV(BTM10_Transducer_IN,BTM10_Struct.Slope_vent_pressure);
RC: "Move the transucer reading to the slope register when the fill cycle begins";
N: XIC(BTM10_Struct.UUT_Fill)ONS(BTM10_Struct.One_Shot.3)MOV(BTM10_Transducer_IN,BTM10_Struct.Slope_fill_pressure);
RC: "While venting wait for both pressure switches to fault ";
N: XIC(BTM10_Struct.UUT_Vent)XIO(BTM10_Fault_A)XIO(BTM10_Fault_B)OTE(BTM10_Struct.UUT_Fault);
RC: "Start a 5 minutes timer when the vent valve is open";
N: XIC(BTM10_Struct.UUT_Vent)TON(BTM10_Struct.Vent_Timer,?,?);
RC: "When the vent timer is timing calculate the flow rate";
N: XIC(BTM10_Struct.Vent_Timer.TT)GRT(BTM10_Struct.Vent_Timer.ACC,0)DIV(BTM10_Struct.Slope_vent_pressure,BTM10_Struct.Vent_Timer.ACC,BTM10_Struct.Slope);
RC: "if the 5 minute timer completes$N"
"Set an alarm condition";
N: [XIC(BTM10_Struct.Vent_Timer.DN) ONS(BTM10_Struct.One_Shot.4) ,XIC(BTM10_Struct.Alarm_vent_time) XIO(BTM_Alarm_RESET) ]OTE(BTM10_Struct.Alarm_vent_time);
RC: "Record the pressure when both pressure switches have faulted";
N: XIC(BTM10_Struct.UUT_Fault)ONS(BTM10_Struct.One_Shot.5)MOV(BTM10_Transducer_IN,BTM10_Struct.Low_trip);
RC: "Unlatch the vent routine, latch the fill routine and check the flow rate after fault";
N: XIC(BTM10_Struct.UUT_Fault)ONS(BTM10_Struct.One_Shot.6)[OTU(BTM10_Struct.UUT_Vent) ,OTL(BTM10_Struct.UUT_Fill) ,OTE(BTM10_Struct.Slope_check_1) ];
RC: "When the BTM reaches the fill set point $N"
"check the flow rate";
N: GEQ(BTM10_Transducer_IN,BTM10_Fill_Setpoint)OTE(BTM10_Struct.Slope_check_2);
RC: "Stop filling if the BTM reaches the fill set point$N"
"OR there is an alarm";
N: [XIC(BTM10_Struct.Slope_check_2) ,XIC(BTM10_Struct.Alarm_sum) ]OTU(BTM10_Struct.UUT_Fill);
RC: "Start a 5 minutes timer when the fill valve is open";
N: XIC(BTM10_Struct.UUT_Fill)TON(BTM10_Struct.Fill_Timer,?,?);
RC: "When the vent timer is timing calculate the flow rate";
N: XIC(BTM10_Struct.Fill_Timer.TT)GRT(BTM10_Struct.Fill_Timer.ACC,0)DIV(BTM10_Struct.Slope_fill_pressure,BTM10_Struct.Fill_Timer.ACC,BTM10_Struct.Slope);
RC: "Set an alarm condition if the 5 minute timer completes";
N: [XIC(BTM10_Struct.Fill_Timer.DN) ONS(BTM10_Struct.One_Shot.7) ,XIC(BTM10_Struct.Alarm_fill_time) XIO(BTM_Alarm_RESET) ]OTE(BTM10_Struct.Alarm_fill_time);
RC: "The system is reset when pressure switches are above threshold settings while filling";
N: XIC(BTM10_Struct.UUT_Fill)XIC(BTM10_Fault_A)XIC(BTM10_Fault_B)OTE(BTM10_Struct.UUT_Reset);
RC: "When the system reaches reset record the reset pressure";
N: XIC(BTM10_Struct.UUT_Reset)ONS(BTM10_Struct.One_Shot.8)MOV(BTM10_Transducer_IN,BTM10_Struct.High_reset);
RC: "Set an alarm condition if the BTM exceeds 15 psi";
N: [GEQ(BTM10_Transducer_IN,BTM_MAX_PRESSURE) XIC(BTM10_Struct.UUT_Fill) ONS(BTM10_Struct.One_Shot.9) ,XIC(BTM10_Struct.Alarm_over_pressure) XIO(BTM_Alarm_RESET) ]OTE(BTM10_Struct.Alarm_over_pressure);
RC: "Set alarm condition if flow rate exceeds .004 psi/msec";
N: [[XIC(BTM10_Struct.Slope_check_1) ,XIC(BTM10_Struct.Slope_check_2) ] ONS(BTM10_Struct.One_Shot.10) GRT(BTM10_Struct.Slope,0.004) ,XIC(BTM10_Struct.Alarm_flow_rate) XIO(BTM_Alarm_RESET) ]OTE(BTM10_Struct.Alarm_flow_rate);
RC: "Reset slope register to zero on flow rate fault";
N: XIC(BTM10_Struct.Alarm_flow_rate)MOV(0,BTM10_Struct.Slope);
RC: "Set the alarm if an alarm condition occurs";
N: [XIC(BTM10_Struct.Alarm_vent_time) ,XIC(BTM10_Struct.Alarm_fill_time) ,XIC(BTM10_Struct.Alarm_flow_rate) ,XIC(BTM10_Struct.Alarm_over_pressure) ]OTE(BTM10_Struct.Alarm_sum);
RC: "Open valve one to fill";
N: XIC(BTM10_Struct.UUT_Fill)OTE(BTM10_Valve_1);
RC: "Open valve two to vent$N"
"";
N: XIC(BTM10_Struct.UUT_Vent)OTE(BTM10_Valve_2);
N: RET();
END_ROUTINE
ROUTINE BTM_TEST_11
RC: "$N"
"*******************************************************************************$'$N"
"BTM Test Sub-Routine$N"
"*******************************************************************************$'$N"
"$N"
"";
N: SBR()OTE(NOOP);
RC: "$N"
"$N"
"****************************************$N"
"$N"
"This routine runs the BTM Test$N"
"$N"
"****************************************";
N: XIC(Hardware_EN)XIC(BTM11_Test_Start)XIO(BTM11_Struct.Vent_Timer.TT)XIO(BTM11_Struct.Fill_Timer.TT)ONS(BTM11_Struct.One_Shot.0)OTL(BTM11_Struct.UUT_Vent);
N: [XIC(BTM11_Struct.Vent_Timer.TT) ,XIC(BTM11_Struct.Fill_Timer.TT) ]OTE(BTM_Alarm_UUT.10);
RC: "Move the transucer reading to the slope register when the vent cycle begins$N"
"Move zero to the slope register when the pressure is below 10 psi$N"
"The register is zeroed becase a flow rate alarm would occur if the BTM was already tripped$N"
"$N"
"";
N: XIC(BTM11_Struct.UUT_Vent)ONS(BTM11_Struct.One_Shot.1)LES(BTM11_Transducer_IN,10.0)MOV(0,BTM11_Struct.Slope_vent_pressure);
N: XIC(BTM11_Struct.UUT_Vent)ONS(BTM11_Struct.One_Shot.2)GEQ(BTM11_Transducer_IN,10.0)MOV(BTM11_Transducer_IN,BTM11_Struct.Slope_vent_pressure);
RC: "Move the transucer reading to the slope register when the fill cycle begins";
N: XIC(BTM11_Struct.UUT_Fill)ONS(BTM11_Struct.One_Shot.3)MOV(BTM11_Transducer_IN,BTM11_Struct.Slope_fill_pressure);
RC: "While venting wait for both pressure switches to fault ";
N: XIC(BTM11_Struct.UUT_Vent)XIO(BTM11_Fault_A)XIO(BTM11_Fault_B)OTE(BTM11_Struct.UUT_Fault);
RC: "Start a 5 minutes timer when the vent valve is open";
N: XIC(BTM11_Struct.UUT_Vent)TON(BTM11_Struct.Vent_Timer,?,?);
RC: "When the vent timer is timing calculate the flow rate";
N: XIC(BTM11_Struct.Vent_Timer.TT)GRT(BTM11_Struct.Vent_Timer.ACC,0)DIV(BTM11_Struct.Slope_vent_pressure,BTM11_Struct.Vent_Timer.ACC,BTM11_Struct.Slope);
RC: "if the 5 minute timer completes$N"
"Set an alarm condition";
N: [XIC(BTM11_Struct.Vent_Timer.DN) ONS(BTM11_Struct.One_Shot.4) ,XIC(BTM11_Struct.Alarm_vent_time) XIO(BTM_Alarm_RESET) ]OTE(BTM11_Struct.Alarm_vent_time);
RC: "Record the pressure when both pressure switches have faulted";
N: XIC(BTM11_Struct.UUT_Fault)ONS(BTM11_Struct.One_Shot.5)MOV(BTM11_Transducer_IN,BTM11_Struct.Low_trip);
RC: "Unlatch the vent routine, latch the fill routine and check the flow rate after fault";
N: XIC(BTM11_Struct.UUT_Fault)ONS(BTM11_Struct.One_Shot.6)[OTU(BTM11_Struct.UUT_Vent) ,OTL(BTM11_Struct.UUT_Fill) ,OTE(BTM11_Struct.Slope_check_1) ];
RC: "When the BTM reaches the fill set point $N"
"check the flow rate";
N: GEQ(BTM11_Transducer_IN,BTM11_Fill_Setpoint)OTE(BTM11_Struct.Slope_check_2);
RC: "Stop filling if the BTM reaches the fill set point$N"
"OR there is an alarm";
N: [XIC(BTM11_Struct.Slope_check_2) ,XIC(BTM11_Struct.Alarm_sum) ]OTU(BTM11_Struct.UUT_Fill);
RC: "Start a 5 minutes timer when the fill valve is open";
N: XIC(BTM11_Struct.UUT_Fill)TON(BTM11_Struct.Fill_Timer,?,?);
RC: "When the vent timer is timing calculate the flow rate";
N: XIC(BTM11_Struct.Fill_Timer.TT)GRT(BTM11_Struct.Fill_Timer.ACC,0)DIV(BTM11_Struct.Slope_fill_pressure,BTM11_Struct.Fill_Timer.ACC,BTM11_Struct.Slope);
RC: "Set an alarm condition if the 5 minute timer completes";
N: [XIC(BTM11_Struct.Fill_Timer.DN) ONS(BTM11_Struct.One_Shot.7) ,XIC(BTM11_Struct.Alarm_fill_time) XIO(BTM_Alarm_RESET) ]OTE(BTM11_Struct.Alarm_fill_time);
RC: "The system is reset when pressure switches are above threshold settings while filling";
N: XIC(BTM11_Struct.UUT_Fill)XIC(BTM11_Fault_A)XIC(BTM11_Fault_B)OTE(BTM11_Struct.UUT_Reset);
RC: "When the system reaches reset record the reset pressure";
N: XIC(BTM11_Struct.UUT_Reset)ONS(BTM11_Struct.One_Shot.8)MOV(BTM11_Transducer_IN,BTM11_Struct.High_reset);
RC: "Set an alarm condition if the BTM exceeds 15 psi";
N: [GEQ(BTM11_Transducer_IN,BTM_MAX_PRESSURE) XIC(BTM11_Struct.UUT_Fill) ONS(BTM11_Struct.One_Shot.9) ,XIC(BTM11_Struct.Alarm_over_pressure) XIO(BTM_Alarm_RESET) ]OTE(BTM11_Struct.Alarm_over_pressure);
RC: "Set alarm condition if flow rate exceeds .004 psi/msec";
N: [[XIC(BTM11_Struct.Slope_check_1) ,XIC(BTM11_Struct.Slope_check_2) ] ONS(BTM11_Struct.One_Shot.10) GRT(BTM11_Struct.Slope,0.004) ,XIC(BTM11_Struct.Alarm_flow_rate) XIO(BTM_Alarm_RESET) ]OTE(BTM11_Struct.Alarm_flow_rate);
RC: "Reset slope register to zero on flow rate fault";
N: XIC(BTM11_Struct.Alarm_flow_rate)MOV(0,BTM11_Struct.Slope);
RC: "Set the alarm if an alarm condition occurs";
N: [XIC(BTM11_Struct.Alarm_vent_time) ,XIC(BTM11_Struct.Alarm_fill_time) ,XIC(BTM11_Struct.Alarm_flow_rate) ,XIC(BTM11_Struct.Alarm_over_pressure) ]OTE(BTM11_Struct.Alarm_sum);
RC: "Open valve one to fill";
N: [XIC(BTM11_Struct.UUT_Fill) ,XIC(BTM11_Struct.UUT_Vent) ]OTE(BTM11_Valve_1);
RC: "Open valve two to vent$N"
"";
N: XIC(BTM11_Struct.UUT_Fill)OTE(BTM11_Valve_2);
N: RET();
END_ROUTINE
ROUTINE BTM_TEST_12
RC: "$N"
"*******************************************************************************$'$N"
"BTM Test Sub-Routine$N"
"*******************************************************************************$'$N"
"$N"
"";
N: SBR()OTE(NOOP);
RC: "$N"
"$N"
"****************************************$N"
"$N"
"This routine runs the BTM Test$N"
"$N"
"****************************************";
N: XIC(Hardware_EN)XIC(BTM12_Test_Start)XIO(BTM12_Struct.Vent_Timer.TT)XIO(BTM12_Struct.Fill_Timer.TT)ONS(BTM12_Struct.One_Shot.0)OTL(BTM12_Struct.UUT_Vent);
N: [XIC(BTM12_Struct.Vent_Timer.TT) ,XIC(BTM12_Struct.Fill_Timer.TT) ]OTE(BTM_Alarm_UUT.11);
RC: "Move the transucer reading to the slope register when the vent cycle begins$N"
"Move zero to the slope register when the pressure is below 10 psi$N"
"The register is zeroed becase a flow rate alarm would occur if the BTM was already tripped$N"
"$N"
"";
N: XIC(BTM12_Struct.UUT_Vent)ONS(BTM12_Struct.One_Shot.1)LES(BTM12_Transducer_IN,10.0)MOV(0,BTM12_Struct.Slope_vent_pressure);
N: XIC(BTM12_Struct.UUT_Vent)ONS(BTM12_Struct.One_Shot.2)GEQ(BTM12_Transducer_IN,10.0)MOV(BTM12_Transducer_IN,BTM12_Struct.Slope_vent_pressure);
RC: "Move the transucer reading to the slope register when the fill cycle begins";
N: XIC(BTM12_Struct.UUT_Fill)ONS(BTM12_Struct.One_Shot.3)MOV(BTM12_Transducer_IN,BTM12_Struct.Slope_fill_pressure);
RC: "While venting wait for both pressure switches to fault ";
N: XIC(BTM12_Struct.UUT_Vent)XIO(BTM12_Fault_A)XIO(BTM12_Fault_B)OTE(BTM12_Struct.UUT_Fault);
RC: "Start a 5 minutes timer when the vent valve is open";
N: XIC(BTM12_Struct.UUT_Vent)TON(BTM12_Struct.Vent_Timer,?,?);
RC: "When the vent timer is timing calculate the flow rate";
N: XIC(BTM12_Struct.Vent_Timer.TT)GRT(BTM12_Struct.Vent_Timer.ACC,0)DIV(BTM12_Struct.Slope_vent_pressure,BTM12_Struct.Vent_Timer.ACC,BTM12_Struct.Slope);
RC: "if the 5 minute timer completes$N"
"Set an alarm condition";
N: [XIC(BTM12_Struct.Vent_Timer.DN) ONS(BTM12_Struct.One_Shot.4) ,XIC(BTM12_Struct.Alarm_vent_time) XIO(BTM_Alarm_RESET) ]OTE(BTM12_Struct.Alarm_vent_time);
RC: "Record the pressure when both pressure switches have faulted";
N: XIC(BTM12_Struct.UUT_Fault)ONS(BTM12_Struct.One_Shot.5)MOV(BTM12_Transducer_IN,BTM12_Struct.Low_trip);
RC: "Unlatch the vent routine, latch the fill routine and check the flow rate after fault";
N: XIC(BTM12_Struct.UUT_Fault)ONS(BTM12_Struct.One_Shot.6)[OTU(BTM12_Struct.UUT_Vent) ,OTL(BTM12_Struct.UUT_Fill) ,OTE(BTM12_Struct.Slope_check_1) ];
RC: "When the BTM reaches the fill set point $N"
"check the flow rate";
N: GEQ(BTM12_Transducer_IN,BTM12_Fill_Setpoint)OTE(BTM12_Struct.Slope_check_2);
RC: "Stop filling if the BTM reaches the fill set point$N"
"OR there is an alarm";
N: [XIC(BTM12_Struct.Slope_check_2) ,XIC(BTM12_Struct.Alarm_sum) ]OTU(BTM12_Struct.UUT_Fill);
RC: "Start a 5 minutes timer when the fill valve is open";
N: XIC(BTM12_Struct.UUT_Fill)TON(BTM12_Struct.Fill_Timer,?,?);
RC: "When the vent timer is timing calculate the flow rate";
N: XIC(BTM12_Struct.Fill_Timer.TT)GRT(BTM12_Struct.Fill_Timer.ACC,0)DIV(BTM12_Struct.Slope_fill_pressure,BTM12_Struct.Fill_Timer.ACC,BTM12_Struct.Slope);
RC: "Set an alarm condition if the 5 minute timer completes";
N: [XIC(BTM12_Struct.Fill_Timer.DN) ONS(BTM12_Struct.One_Shot.7) ,XIC(BTM12_Struct.Alarm_fill_time) XIO(BTM_Alarm_RESET) ]OTE(BTM12_Struct.Alarm_fill_time);
RC: "The system is reset when pressure switches are above threshold settings while filling";
N: XIC(BTM12_Struct.UUT_Fill)XIC(BTM12_Fault_A)XIC(BTM12_Fault_B)OTE(BTM12_Struct.UUT_Reset);
RC: "When the system reaches reset record the reset pressure";
N: XIC(BTM12_Struct.UUT_Reset)ONS(BTM12_Struct.One_Shot.8)MOV(BTM12_Transducer_IN,BTM12_Struct.High_reset);
RC: "Set an alarm condition if the BTM exceeds 15 psi";
N: [GEQ(BTM12_Transducer_IN,BTM_MAX_PRESSURE) XIC(BTM12_Struct.UUT_Fill) ONS(BTM12_Struct.One_Shot.9) ,XIC(BTM12_Struct.Alarm_over_pressure) XIO(BTM_Alarm_RESET) ]OTE(BTM12_Struct.Alarm_over_pressure);
RC: "Set alarm condition if flow rate exceeds .004 psi/msec";
N: [[XIC(BTM12_Struct.Slope_check_1) ,XIC(BTM12_Struct.Slope_check_2) ] ONS(BTM12_Struct.One_Shot.10) GRT(BTM12_Struct.Slope,0.004) ,XIC(BTM12_Struct.Alarm_flow_rate) XIO(BTM_Alarm_RESET) ]OTE(BTM12_Struct.Alarm_flow_rate);
RC: "Reset slope register to zero on flow rate fault";
N: XIC(BTM12_Struct.Alarm_flow_rate)MOV(0,BTM12_Struct.Slope);
RC: "Set the alarm if an alarm condition occurs";
N: [XIC(BTM12_Struct.Alarm_vent_time) ,XIC(BTM12_Struct.Alarm_fill_time) ,XIC(BTM12_Struct.Alarm_flow_rate) ,XIC(BTM12_Struct.Alarm_over_pressure) ]OTE(BTM12_Struct.Alarm_sum);
RC: "Open valve one to fill";
N: XIC(BTM12_Struct.UUT_Fill)OTE(BTM12_Valve_1);
RC: "Open valve two to vent$N"
"";
N: XIC(BTM12_Struct.UUT_Vent)OTE(BTM12_Valve_2);
N: RET();
END_ROUTINE
ROUTINE BTM_TEST_13
RC: "$N"
"*******************************************************************************$'$N"
"BTM Test Sub-Routine$N"
"*******************************************************************************$'$N"
"$N"
"";
N: SBR()OTE(NOOP);
RC: "$N"
"$N"
"****************************************$N"
"$N"
"This routine runs the BTM Test$N"
"$N"
"****************************************";
N: XIC(Hardware_EN)XIC(BTM13_Test_Start)XIO(BTM13_Struct.Vent_Timer.TT)XIO(BTM13_Struct.Fill_Timer.TT)ONS(BTM13_Struct.One_Shot.0)OTL(BTM13_Struct.UUT_Vent);
N: [XIC(BTM13_Struct.Vent_Timer.TT) ,XIC(BTM13_Struct.Fill_Timer.TT) ]OTE(BTM_Alarm_UUT.12);
RC: "Move the transucer reading to the slope register when the vent cycle begins$N"
"Move zero to the slope register when the pressure is below 10 psi$N"
"The register is zeroed becase a flow rate alarm would occur if the BTM was already tripped$N"
"$N"
"";
N: XIC(BTM13_Struct.UUT_Vent)ONS(BTM13_Struct.One_Shot.1)LES(BTM13_Transducer_IN,10.0)MOV(0,BTM13_Struct.Slope_vent_pressure);
N: XIC(BTM13_Struct.UUT_Vent)ONS(BTM13_Struct.One_Shot.2)GEQ(BTM13_Transducer_IN,10.0)MOV(BTM13_Transducer_IN,BTM13_Struct.Slope_vent_pressure);
RC: "Move the transucer reading to the slope register when the fill cycle begins";
N: XIC(BTM13_Struct.UUT_Fill)ONS(BTM13_Struct.One_Shot.3)MOV(BTM13_Transducer_IN,BTM13_Struct.Slope_fill_pressure);
RC: "While venting wait for both pressure switches to fault ";
N: XIC(BTM13_Struct.UUT_Vent)XIO(BTM13_Fault_A)XIO(BTM13_Fault_B)OTE(BTM13_Struct.UUT_Fault);
RC: "Start a 5 minutes timer when the vent valve is open";
N: XIC(BTM13_Struct.UUT_Vent)TON(BTM13_Struct.Vent_Timer,?,?);
RC: "When the vent timer is timing calculate the flow rate";
N: XIC(BTM13_Struct.Vent_Timer.TT)GRT(BTM13_Struct.Vent_Timer.ACC,0)DIV(BTM13_Struct.Slope_vent_pressure,BTM13_Struct.Vent_Timer.ACC,BTM13_Struct.Slope);
RC: "if the 5 minute timer completes$N"
"Set an alarm condition";
N: [XIC(BTM13_Struct.Vent_Timer.DN) ONS(BTM13_Struct.One_Shot.4) ,XIC(BTM13_Struct.Alarm_vent_time) XIO(BTM_Alarm_RESET) ]OTE(BTM13_Struct.Alarm_vent_time);
RC: "Record the pressure when both pressure switches have faulted";
N: XIC(BTM13_Struct.UUT_Fault)ONS(BTM13_Struct.One_Shot.5)MOV(BTM13_Transducer_IN,BTM13_Struct.Low_trip);
RC: "Unlatch the vent routine, latch the fill routine and check the flow rate after fault";
N: XIC(BTM13_Struct.UUT_Fault)ONS(BTM13_Struct.One_Shot.6)[OTU(BTM13_Struct.UUT_Vent) ,OTL(BTM13_Struct.UUT_Fill) ,OTE(BTM13_Struct.Slope_check_1) ];
RC: "When the BTM reaches the fill set point $N"
"check the flow rate";
N: GEQ(BTM13_Transducer_IN,BTM13_Fill_Setpoint)OTE(BTM13_Struct.Slope_check_2);
RC: "Stop filling if the BTM reaches the fill set point$N"
"OR there is an alarm";
N: [XIC(BTM13_Struct.Slope_check_2) ,XIC(BTM13_Struct.Alarm_sum) ]OTU(BTM13_Struct.UUT_Fill);
RC: "Start a 5 minutes timer when the fill valve is open";
N: XIC(BTM13_Struct.UUT_Fill)TON(BTM13_Struct.Fill_Timer,?,?);
RC: "When the vent timer is timing calculate the flow rate";
N: XIC(BTM13_Struct.Fill_Timer.TT)GRT(BTM13_Struct.Fill_Timer.ACC,0)DIV(BTM13_Struct.Slope_fill_pressure,BTM13_Struct.Fill_Timer.ACC,BTM13_Struct.Slope);
RC: "Set an alarm condition if the 5 minute timer completes";
N: [XIC(BTM13_Struct.Fill_Timer.DN) ONS(BTM13_Struct.One_Shot.7) ,XIC(BTM13_Struct.Alarm_fill_time) XIO(BTM_Alarm_RESET) ]OTE(BTM13_Struct.Alarm_fill_time);
RC: "The system is reset when pressure switches are above threshold settings while filling";
N: XIC(BTM13_Struct.UUT_Fill)XIC(BTM13_Fault_A)XIC(BTM13_Fault_B)OTE(BTM13_Struct.UUT_Reset);
RC: "When the system reaches reset record the reset pressure";
N: XIC(BTM13_Struct.UUT_Reset)ONS(BTM13_Struct.One_Shot.8)MOV(BTM13_Transducer_IN,BTM13_Struct.High_reset);
RC: "Set an alarm condition if the BTM exceeds 15 psi";
N: [GEQ(BTM13_Transducer_IN,BTM_MAX_PRESSURE) XIC(BTM13_Struct.UUT_Fill) ONS(BTM13_Struct.One_Shot.9) ,XIC(BTM13_Struct.Alarm_over_pressure) XIO(BTM_Alarm_RESET) ]OTE(BTM13_Struct.Alarm_over_pressure);
RC: "Set alarm condition if flow rate exceeds .004 psi/msec";
N: [[XIC(BTM13_Struct.Slope_check_1) ,XIC(BTM13_Struct.Slope_check_2) ] ONS(BTM13_Struct.One_Shot.10) GRT(BTM13_Struct.Slope,0.004) ,XIC(BTM13_Struct.Alarm_flow_rate) XIO(BTM_Alarm_RESET) ]OTE(BTM13_Struct.Alarm_flow_rate);
RC: "Reset slope register to zero on flow rate fault";
N: XIC(BTM13_Struct.Alarm_flow_rate)MOV(0,BTM13_Struct.Slope);
RC: "Set the alarm if an alarm condition occurs";
N: [XIC(BTM13_Struct.Alarm_vent_time) ,XIC(BTM13_Struct.Alarm_fill_time) ,XIC(BTM13_Struct.Alarm_flow_rate) ,XIC(BTM13_Struct.Alarm_over_pressure) ]OTE(BTM13_Struct.Alarm_sum);
RC: "Open valve one to fill";
N: XIC(BTM13_Struct.UUT_Fill)OTE(BTM13_Valve_1);
RC: "Open valve two to vent$N"
"";
N: XIC(BTM13_Struct.UUT_Vent)OTE(BTM13_Valve_2);
N: RET();
END_ROUTINE
ROUTINE BTM_TEST_14
RC: "$N"
"*******************************************************************************$'$N"
"BTM Test Sub-Routine$N"
"*******************************************************************************$'$N"
"$N"
"";
N: SBR()OTE(NOOP);
RC: "$N"
"$N"
"****************************************$N"
"$N"
"This routine runs the BTM Test$N"
"$N"
"****************************************";
N: XIC(Hardware_EN)XIC(BTM14_Test_Start)XIO(BTM14_Struct.Vent_Timer.TT)XIO(BTM14_Struct.Fill_Timer.TT)ONS(BTM14_Struct.One_Shot.0)OTL(BTM14_Struct.UUT_Vent);
N: [XIC(BTM14_Struct.Vent_Timer.TT) ,XIC(BTM14_Struct.Fill_Timer.TT) ]OTE(BTM_Alarm_UUT.13);
RC: "Move the transucer reading to the slope register when the vent cycle begins$N"
"Move zero to the slope register when the pressure is below 10 psi$N"
"The register is zeroed becase a flow rate alarm would occur if the BTM was already tripped$N"
"$N"
"";
N: XIC(BTM14_Struct.UUT_Vent)ONS(BTM14_Struct.One_Shot.1)LES(BTM14_Transducer_IN,10.0)MOV(0,BTM14_Struct.Slope_vent_pressure);
N: XIC(BTM14_Struct.UUT_Vent)ONS(BTM14_Struct.One_Shot.2)GEQ(BTM14_Transducer_IN,10.0)MOV(BTM14_Transducer_IN,BTM14_Struct.Slope_vent_pressure);
RC: "Move the transucer reading to the slope register when the fill cycle begins";
N: XIC(BTM14_Struct.UUT_Fill)ONS(BTM14_Struct.One_Shot.3)MOV(BTM14_Transducer_IN,BTM14_Struct.Slope_fill_pressure);
RC: "While venting wait for both pressure switches to fault ";
N: XIC(BTM14_Struct.UUT_Vent)XIO(BTM14_Fault_A)XIO(BTM14_Fault_B)OTE(BTM14_Struct.UUT_Fault);
RC: "Start a 5 minutes timer when the vent valve is open";
N: XIC(BTM14_Struct.UUT_Vent)TON(BTM14_Struct.Vent_Timer,?,?);
RC: "When the vent timer is timing calculate the flow rate";
N: XIC(BTM14_Struct.Vent_Timer.TT)GRT(BTM14_Struct.Vent_Timer.ACC,0)DIV(BTM14_Struct.Slope_vent_pressure,BTM14_Struct.Vent_Timer.ACC,BTM14_Struct.Slope);
RC: "if the 5 minute timer completes$N"
"Set an alarm condition";
N: [XIC(BTM14_Struct.Vent_Timer.DN) ONS(BTM14_Struct.One_Shot.4) ,XIC(BTM14_Struct.Alarm_vent_time) XIO(BTM_Alarm_RESET) ]OTE(BTM14_Struct.Alarm_vent_time);
RC: "Record the pressure when both pressure switches have faulted";
N: XIC(BTM14_Struct.UUT_Fault)ONS(BTM14_Struct.One_Shot.5)MOV(BTM14_Transducer_IN,BTM14_Struct.Low_trip);
RC: "Unlatch the vent routine, latch the fill routine and check the flow rate after fault";
N: XIC(BTM14_Struct.UUT_Fault)ONS(BTM14_Struct.One_Shot.6)[OTU(BTM14_Struct.UUT_Vent) ,OTL(BTM14_Struct.UUT_Fill) ,OTE(BTM14_Struct.Slope_check_1) ];
RC: "When the BTM reaches the fill set point $N"
"check the flow rate";
N: GEQ(BTM14_Transducer_IN,BTM14_Fill_Setpoint)OTE(BTM14_Struct.Slope_check_2);
RC: "Stop filling if the BTM reaches the fill set point$N"
"OR there is an alarm";
N: [XIC(BTM14_Struct.Slope_check_2) ,XIC(BTM14_Struct.Alarm_sum) ]OTU(BTM14_Struct.UUT_Fill);
RC: "Start a 5 minutes timer when the fill valve is open";
N: XIC(BTM14_Struct.UUT_Fill)TON(BTM14_Struct.Fill_Timer,?,?);
RC: "When the vent timer is timing calculate the flow rate";
N: XIC(BTM14_Struct.Fill_Timer.TT)GRT(BTM14_Struct.Fill_Timer.ACC,0)DIV(BTM14_Struct.Slope_fill_pressure,BTM14_Struct.Fill_Timer.ACC,BTM14_Struct.Slope);
RC: "Set an alarm condition if the 5 minute timer completes";
N: [XIC(BTM14_Struct.Fill_Timer.DN) ONS(BTM14_Struct.One_Shot.7) ,XIC(BTM14_Struct.Alarm_fill_time) XIO(BTM_Alarm_RESET) ]OTE(BTM14_Struct.Alarm_fill_time);
RC: "The system is reset when pressure switches are above threshold settings while filling";
N: XIC(BTM14_Struct.UUT_Fill)XIC(BTM14_Fault_A)XIC(BTM14_Fault_B)OTE(BTM14_Struct.UUT_Reset);
RC: "When the system reaches reset record the reset pressure";
N: XIC(BTM14_Struct.UUT_Reset)ONS(BTM14_Struct.One_Shot.8)MOV(BTM14_Transducer_IN,BTM14_Struct.High_reset);
RC: "Set an alarm condition if the BTM exceeds 15 psi";
N: [GEQ(BTM14_Transducer_IN,BTM_MAX_PRESSURE) XIC(BTM14_Struct.UUT_Fill) ONS(BTM14_Struct.One_Shot.9) ,XIC(BTM14_Struct.Alarm_over_pressure) XIO(BTM_Alarm_RESET) ]OTE(BTM14_Struct.Alarm_over_pressure);
RC: "Set alarm condition if flow rate exceeds .004 psi/msec";
N: [[XIC(BTM14_Struct.Slope_check_1) ,XIC(BTM14_Struct.Slope_check_2) ] ONS(BTM14_Struct.One_Shot.10) GRT(BTM14_Struct.Slope,0.004) ,XIC(BTM14_Struct.Alarm_flow_rate) XIO(BTM_Alarm_RESET) ]OTE(BTM14_Struct.Alarm_flow_rate);
RC: "Reset slope register to zero on flow rate fault";
N: XIC(BTM14_Struct.Alarm_flow_rate)MOV(0,BTM14_Struct.Slope);
RC: "Set the alarm if an alarm condition occurs";
N: [XIC(BTM14_Struct.Alarm_vent_time) ,XIC(BTM14_Struct.Alarm_fill_time) ,XIC(BTM14_Struct.Alarm_flow_rate) ,XIC(BTM14_Struct.Alarm_over_pressure) ]OTE(BTM14_Struct.Alarm_sum);
RC: "Open valve one to fill";
N: [XIC(BTM14_Struct.UUT_Fill) ,XIC(BTM14_Struct.UUT_Vent) ]OTE(BTM14_Valve_1);
RC: "Open valve two to vent$N"
"";
N: XIC(BTM14_Struct.UUT_Fill)OTE(BTM14_Valve_2);
N: RET();
END_ROUTINE
ROUTINE BTM_TEST_15
RC: "$N"
"*******************************************************************************$'$N"
"BTM Test Sub-Routine$N"
"*******************************************************************************$'$N"
"$N"
"";
N: SBR()OTE(NOOP);
RC: "$N"
"$N"
"****************************************$N"
"$N"
"This routine runs the BTM Test$N"
"$N"
"****************************************";
N: XIC(Hardware_EN)XIC(BTM15_Test_Start)XIO(BTM15_Struct.Vent_Timer.TT)XIO(BTM15_Struct.Fill_Timer.TT)ONS(BTM15_Struct.One_Shot.0)OTL(BTM15_Struct.UUT_Vent);
N: [XIC(BTM15_Struct.Vent_Timer.TT) ,XIC(BTM15_Struct.Fill_Timer.TT) ]OTE(BTM_Alarm_UUT.14);
RC: "Move the transucer reading to the slope register when the vent cycle begins$N"
"Move zero to the slope register when the pressure is below 10 psi$N"
"The register is zeroed becase a flow rate alarm would occur if the BTM was already tripped$N"
"$N"
"";
N: XIC(BTM15_Struct.UUT_Vent)ONS(BTM15_Struct.One_Shot.1)LES(BTM15_Transducer_IN,10.0)MOV(0,BTM15_Struct.Slope_vent_pressure);
N: XIC(BTM15_Struct.UUT_Vent)ONS(BTM15_Struct.One_Shot.2)GEQ(BTM15_Transducer_IN,10.0)MOV(BTM15_Transducer_IN,BTM15_Struct.Slope_vent_pressure);
RC: "Move the transucer reading to the slope register when the fill cycle begins";
N: XIC(BTM15_Struct.UUT_Fill)ONS(BTM15_Struct.One_Shot.3)MOV(BTM15_Transducer_IN,BTM15_Struct.Slope_fill_pressure);
RC: "While venting wait for both pressure switches to fault ";
N: XIC(BTM15_Struct.UUT_Vent)XIO(BTM15_Fault_A)XIO(BTM15_Fault_B)OTE(BTM15_Struct.UUT_Fault);
RC: "Start a 5 minutes timer when the vent valve is open";
N: XIC(BTM15_Struct.UUT_Vent)TON(BTM15_Struct.Vent_Timer,?,?);
RC: "When the vent timer is timing calculate the flow rate";
N: XIC(BTM15_Struct.Vent_Timer.TT)GRT(BTM15_Struct.Vent_Timer.ACC,0)DIV(BTM15_Struct.Slope_vent_pressure,BTM15_Struct.Vent_Timer.ACC,BTM15_Struct.Slope);
RC: "if the 5 minute timer completes$N"
"Set an alarm condition";
N: [XIC(BTM15_Struct.Vent_Timer.DN) ONS(BTM15_Struct.One_Shot.4) ,XIC(BTM15_Struct.Alarm_vent_time) XIO(BTM_Alarm_RESET) ]OTE(BTM15_Struct.Alarm_vent_time);
RC: "Record the pressure when both pressure switches have faulted";
N: XIC(BTM15_Struct.UUT_Fault)ONS(BTM15_Struct.One_Shot.5)MOV(BTM15_Transducer_IN,BTM15_Struct.Low_trip);
RC: "Unlatch the vent routine, latch the fill routine and check the flow rate after fault";
N: XIC(BTM15_Struct.UUT_Fault)ONS(BTM15_Struct.One_Shot.6)[OTU(BTM15_Struct.UUT_Vent) ,OTL(BTM15_Struct.UUT_Fill) ,OTE(BTM15_Struct.Slope_check_1) ];
RC: "When the BTM reaches the fill set point $N"
"check the flow rate";
N: GEQ(BTM15_Transducer_IN,BTM15_Fill_Setpoint)OTE(BTM15_Struct.Slope_check_2);
RC: "Stop filling if the BTM reaches the fill set point$N"
"OR there is an alarm";
N: [XIC(BTM15_Struct.Slope_check_2) ,XIC(BTM15_Struct.Alarm_sum) ]OTU(BTM15_Struct.UUT_Fill);
RC: "Start a 5 minutes timer when the fill valve is open";
N: XIC(BTM15_Struct.UUT_Fill)TON(BTM15_Struct.Fill_Timer,?,?);
RC: "When the vent timer is timing calculate the flow rate";
N: XIC(BTM15_Struct.Fill_Timer.TT)GRT(BTM15_Struct.Fill_Timer.ACC,0)DIV(BTM15_Struct.Slope_fill_pressure,BTM15_Struct.Fill_Timer.ACC,BTM15_Struct.Slope);
RC: "Set an alarm condition if the 5 minute timer completes";
N: [XIC(BTM15_Struct.Fill_Timer.DN) ONS(BTM15_Struct.One_Shot.7) ,XIC(BTM15_Struct.Alarm_fill_time) XIO(BTM_Alarm_RESET) ]OTE(BTM15_Struct.Alarm_fill_time);
RC: "The system is reset when pressure switches are above threshold settings while filling";
N: XIC(BTM15_Struct.UUT_Fill)XIC(BTM15_Fault_A)XIC(BTM15_Fault_B)OTE(BTM15_Struct.UUT_Reset);
RC: "When the system reaches reset record the reset pressure";
N: XIC(BTM15_Struct.UUT_Reset)ONS(BTM15_Struct.One_Shot.8)MOV(BTM15_Transducer_IN,BTM15_Struct.High_reset);
RC: "Set an alarm condition if the BTM exceeds 15 psi";
N: [GEQ(BTM15_Transducer_IN,BTM_MAX_PRESSURE) XIC(BTM15_Struct.UUT_Fill) ONS(BTM15_Struct.One_Shot.9) ,XIC(BTM15_Struct.Alarm_over_pressure) XIO(BTM_Alarm_RESET) ]OTE(BTM15_Struct.Alarm_over_pressure);
RC: "Set alarm condition if flow rate exceeds .004 psi/msec";
N: [[XIC(BTM15_Struct.Slope_check_1) ,XIC(BTM15_Struct.Slope_check_2) ] ONS(BTM15_Struct.One_Shot.10) GRT(BTM15_Struct.Slope,0.004) ,XIC(BTM15_Struct.Alarm_flow_rate) XIO(BTM_Alarm_RESET) ]OTE(BTM15_Struct.Alarm_flow_rate);
RC: "Reset slope register to zero on flow rate fault";
N: XIC(BTM15_Struct.Alarm_flow_rate)MOV(0,BTM15_Struct.Slope);
RC: "Set the alarm if an alarm condition occurs";
N: [XIC(BTM15_Struct.Alarm_vent_time) ,XIC(BTM15_Struct.Alarm_fill_time) ,XIC(BTM15_Struct.Alarm_flow_rate) ,XIC(BTM15_Struct.Alarm_over_pressure) ]OTE(BTM15_Struct.Alarm_sum);
RC: "Open valve one to fill";
N: XIC(BTM15_Struct.UUT_Fill)OTE(BTM15_Valve_1);
RC: "Open valve two to vent$N"
"";
N: XIC(BTM15_Struct.UUT_Vent)OTE(BTM15_Valve_2);
N: RET();
END_ROUTINE
ROUTINE BTM_TEST_16
RC: "$N"
"*******************************************************************************$'$N"
"BTM Test Sub-Routine$N"
"*******************************************************************************$'$N"
"$N"
"";
N: SBR()OTE(NOOP);
RC: "$N"
"$N"
"****************************************$N"
"$N"
"This routine runs the BTM Test$N"
"$N"
"****************************************";
N: XIC(Hardware_EN)XIC(BTM16_Test_Start)XIO(BTM16_Struct.Vent_Timer.TT)XIO(BTM16_Struct.Fill_Timer.TT)ONS(BTM16_Struct.One_Shot.0)OTL(BTM16_Struct.UUT_Vent);
N: [XIC(BTM16_Struct.Vent_Timer.TT) ,XIC(BTM16_Struct.Fill_Timer.TT) ]OTE(BTM_Alarm_UUT.15);
RC: "Move the transucer reading to the slope register when the vent cycle begins$N"
"Move zero to the slope register when the pressure is below 10 psi$N"
"The register is zeroed becase a flow rate alarm would occur if the BTM was already tripped$N"
"$N"
"";
N: XIC(BTM16_Struct.UUT_Vent)ONS(BTM16_Struct.One_Shot.1)LES(BTM16_Transducer_IN,10.0)MOV(0,BTM16_Struct.Slope_vent_pressure);
N: XIC(BTM16_Struct.UUT_Vent)ONS(BTM16_Struct.One_Shot.2)GEQ(BTM16_Transducer_IN,10.0)MOV(BTM16_Transducer_IN,BTM16_Struct.Slope_vent_pressure);
RC: "Move the transucer reading to the slope register when the fill cycle begins";
N: XIC(BTM16_Struct.UUT_Fill)ONS(BTM16_Struct.One_Shot.3)MOV(BTM16_Transducer_IN,BTM16_Struct.Slope_fill_pressure);
RC: "While venting wait for both pressure switches to fault ";
N: XIC(BTM16_Struct.UUT_Vent)XIO(BTM16_Fault_A)XIO(BTM16_Fault_B)OTE(BTM16_Struct.UUT_Fault);
RC: "Start a 5 minutes timer when the vent valve is open";
N: XIC(BTM16_Struct.UUT_Vent)TON(BTM16_Struct.Vent_Timer,?,?);
RC: "When the vent timer is timing calculate the flow rate";
N: XIC(BTM16_Struct.Vent_Timer.TT)GRT(BTM16_Struct.Vent_Timer.ACC,0)DIV(BTM16_Struct.Slope_vent_pressure,BTM16_Struct.Vent_Timer.ACC,BTM16_Struct.Slope);
RC: "if the 5 minute timer completes$N"
"Set an alarm condition";
N: [XIC(BTM16_Struct.Vent_Timer.DN) ONS(BTM16_Struct.One_Shot.4) ,XIC(BTM16_Struct.Alarm_vent_time) XIO(BTM_Alarm_RESET) ]OTE(BTM16_Struct.Alarm_vent_time);
RC: "Record the pressure when both pressure switches have faulted";
N: XIC(BTM16_Struct.UUT_Fault)ONS(BTM16_Struct.One_Shot.5)MOV(BTM16_Transducer_IN,BTM16_Struct.Low_trip);
RC: "Unlatch the vent routine, latch the fill routine and check the flow rate after fault";
N: XIC(BTM16_Struct.UUT_Fault)ONS(BTM16_Struct.One_Shot.6)[OTU(BTM16_Struct.UUT_Vent) ,OTL(BTM16_Struct.UUT_Fill) ,OTE(BTM16_Struct.Slope_check_1) ];
RC: "When the BTM reaches the fill set point $N"
"check the flow rate";
N: GEQ(BTM16_Transducer_IN,BTM16_Fill_Setpoint)OTE(BTM16_Struct.Slope_check_2);
RC: "Stop filling if the BTM reaches the fill set point$N"
"OR there is an alarm";
N: [XIC(BTM16_Struct.Slope_check_2) ,XIC(BTM16_Struct.Alarm_sum) ]OTU(BTM16_Struct.UUT_Fill);
RC: "Start a 5 minutes timer when the fill valve is open";
N: XIC(BTM16_Struct.UUT_Fill)TON(BTM16_Struct.Fill_Timer,?,?);
RC: "When the vent timer is timing calculate the flow rate";
N: XIC(BTM16_Struct.Fill_Timer.TT)GRT(BTM16_Struct.Fill_Timer.ACC,0)DIV(BTM16_Struct.Slope_fill_pressure,BTM16_Struct.Fill_Timer.ACC,BTM16_Struct.Slope);
RC: "Set an alarm condition if the 5 minute timer completes";
N: [XIC(BTM16_Struct.Fill_Timer.DN) ONS(BTM16_Struct.One_Shot.7) ,XIC(BTM16_Struct.Alarm_fill_time) XIO(BTM_Alarm_RESET) ]OTE(BTM16_Struct.Alarm_fill_time);
RC: "The system is reset when pressure switches are above threshold settings while filling";
N: XIC(BTM16_Struct.UUT_Fill)XIC(BTM16_Fault_A)XIC(BTM16_Fault_B)OTE(BTM16_Struct.UUT_Reset);
RC: "When the system reaches reset record the reset pressure";
N: XIC(BTM16_Struct.UUT_Reset)ONS(BTM16_Struct.One_Shot.8)MOV(BTM16_Transducer_IN,BTM16_Struct.High_reset);
RC: "Set an alarm condition if the BTM exceeds 15 psi";
N: [GEQ(BTM16_Transducer_IN,BTM_MAX_PRESSURE) XIC(BTM16_Struct.UUT_Fill) ONS(BTM16_Struct.One_Shot.9) ,XIC(BTM16_Struct.Alarm_over_pressure) XIO(BTM_Alarm_RESET) ]OTE(BTM16_Struct.Alarm_over_pressure);
RC: "Set alarm condition if flow rate exceeds .004 psi/msec";
N: [[XIC(BTM16_Struct.Slope_check_1) ,XIC(BTM16_Struct.Slope_check_2) ] ONS(BTM16_Struct.One_Shot.10) GRT(BTM16_Struct.Slope,0.004) ,XIC(BTM16_Struct.Alarm_flow_rate) XIO(BTM_Alarm_RESET) ]OTE(BTM16_Struct.Alarm_flow_rate);
RC: "Reset slope register to zero on flow rate fault";
N: XIC(BTM16_Struct.Alarm_flow_rate)MOV(0,BTM16_Struct.Slope);
RC: "Set the alarm if an alarm condition occurs";
N: [XIC(BTM16_Struct.Alarm_vent_time) ,XIC(BTM16_Struct.Alarm_fill_time) ,XIC(BTM16_Struct.Alarm_flow_rate) ,XIC(BTM16_Struct.Alarm_over_pressure) ]OTE(BTM16_Struct.Alarm_sum);
RC: "Open valve one to fill";
N: XIC(BTM16_Struct.UUT_Fill)OTE(BTM16_Valve_1);
RC: "Open valve two to vent$N"
"";
N: XIC(BTM16_Struct.UUT_Vent)OTE(BTM16_Valve_2);
N: RET();
END_ROUTINE
ROUTINE IOC_Status
RC: "**********************************************************************************$N"
"Data for IOC Status$N"
"$N"
"BTM-01$N"
"**********************************************************************************$N"
"$N"
"";
N: XIC(BTM01_Struct.Alarm_low_pressure)OTE(BTM_Alarm_low_pressure_start.0);
N: XIC(BTM01_Struct.Alarm_vent_time)OTE(BTM_Alarm_vent_time_fault.0);
N: XIC(BTM01_Struct.Alarm_fill_time)OTE(BTM_Alarm_fill_time_fault.0);
N: XIC(BTM01_Struct.Alarm_flow_rate)OTE(BTM_Alarm_flow_rate_fault.0);
N: XIC(BTM01_Struct.Alarm_over_pressure)OTE(BTM_Alarm_over_pressure.0);
N: XIC(BTM01_Fault_A)OTE(EPICS_STAT_BTM.0);
N: XIC(BTM01_Fault_B)OTE(EPICS_STAT_BTM.1);
N: MOV(BTM01_Transducer_IN,EPICS_ANA_05.Data_00);
N: MOV(BTM01_Struct.Low_trip,EPICS_ANA_01.Data_00);
N: MOV(BTM01_Struct.High_reset,EPICS_ANA_01.Data_01);
RC: "**********************************************************************************$N"
"Data for IOC Status$N"
"$N"
"BTM-02$N"
"**********************************************************************************$N"
"$N"
"";
N: XIC(BTM02_Struct.Alarm_low_pressure)OTE(BTM_Alarm_low_pressure_start.1);
N: XIC(BTM02_Struct.Alarm_vent_time)OTE(BTM_Alarm_vent_time_fault.1);
N: XIC(BTM02_Struct.Alarm_fill_time)OTE(BTM_Alarm_fill_time_fault.1);
N: XIC(BTM02_Struct.Alarm_flow_rate)OTE(BTM_Alarm_flow_rate_fault.1);
N: XIC(BTM02_Struct.Alarm_over_pressure)OTE(BTM_Alarm_over_pressure.1);
N: XIC(BTM02_Fault_A)OTE(PPS_UND_EPICS_1.Data_05.2);
N: XIC(BTM02_Fault_B)OTE(PPS_UND_EPICS_1.Data_05.3);
N: MOV(BTM02_Transducer_IN,EPICS_ANA_05.Data_01);
N: MOV(BTM02_Struct.Low_trip,EPICS_ANA_01.Data_02);
N: MOV(BTM02_Struct.High_reset,EPICS_ANA_01.Data_03);
RC: "**********************************************************************************$N"
"Data for IOC Status$N"
"$N"
"BTM-03$N"
"**********************************************************************************$N"
"$N"
"";
N: XIC(BTM03_Struct.Alarm_low_pressure)OTE(BTM_Alarm_low_pressure_start.2);
N: XIC(BTM03_Struct.Alarm_vent_time)OTE(BTM_Alarm_vent_time_fault.2);
N: XIC(BTM03_Struct.Alarm_fill_time)OTE(BTM_Alarm_fill_time_fault.2);
N: XIC(BTM03_Struct.Alarm_flow_rate)OTE(BTM_Alarm_flow_rate_fault.2);
N: XIC(BTM03_Struct.Alarm_over_pressure)OTE(BTM_Alarm_over_pressure.2);
N: XIC(BTM03_Fault_A)OTE(PPS_UND_EPICS_1.Data_05.4);
N: XIC(BTM03_Fault_B)OTE(PPS_UND_EPICS_1.Data_05.5);
N: MOV(BTM03_Transducer_IN,EPICS_ANA_05.Data_02);
N: MOV(BTM03_Struct.Low_trip,EPICS_ANA_01.Data_04);
N: MOV(BTM03_Struct.High_reset,EPICS_ANA_01.Data_05);
RC: "**********************************************************************************$N"
"Data for IOC Status$N"
"$N"
"BTM-04$N"
"**********************************************************************************$N"
"$N"
"";
N: XIC(BTM04_Struct.Alarm_low_pressure)OTE(BTM_Alarm_low_pressure_start.3);
N: XIC(BTM04_Struct.Alarm_vent_time)OTE(BTM_Alarm_vent_time_fault.3);
N: XIC(BTM04_Struct.Alarm_fill_time)OTE(BTM_Alarm_fill_time_fault.3);
N: XIC(BTM04_Struct.Alarm_flow_rate)OTE(BTM_Alarm_flow_rate_fault.3);
N: XIC(BTM04_Struct.Alarm_over_pressure)OTE(BTM_Alarm_over_pressure.3);
N: XIC(BTM04_Fault_A)OTE(PPS_UND_EPICS_1.Data_05.6);
N: XIC(BTM04_Fault_B)OTE(PPS_UND_EPICS_1.Data_05.7);
N: MOV(BTM04_Transducer_IN,EPICS_ANA_05.Data_03);
N: MOV(BTM04_Struct.Low_trip,EPICS_ANA_01.Data_06);
N: MOV(BTM04_Struct.High_reset,EPICS_ANA_01.Data_07);
RC: "**********************************************************************************$N"
"Data for IOC Status$N"
"$N"
"BTM-05$N"
"**********************************************************************************$N"
"$N"
"";
N: XIC(BTM05_Struct.Alarm_low_pressure)OTE(BTM_Alarm_low_pressure_start.4);
N: XIC(BTM05_Struct.Alarm_vent_time)OTE(BTM_Alarm_vent_time_fault.4);
N: XIC(BTM05_Struct.Alarm_fill_time)OTE(BTM_Alarm_fill_time_fault.4);
N: XIC(BTM05_Struct.Alarm_flow_rate)OTE(BTM_Alarm_flow_rate_fault.4);
N: XIC(BTM05_Struct.Alarm_over_pressure)OTE(BTM_Alarm_over_pressure.4);
N: XIC(BTM05_Fault_A)OTE(PPS_UND_EPICS_1.Data_05.8);
N: XIC(BTM05_Fault_B)OTE(PPS_UND_EPICS_1.Data_05.9);
N: MOV(BTM05_Transducer_IN,EPICS_ANA_05.Data_04);
N: MOV(BTM05_Struct.Low_trip,EPICS_ANA_02.Data_00);
N: MOV(BTM05_Struct.High_reset,EPICS_ANA_02.Data_01);
RC: "**********************************************************************************$N"
"Data for IOC Status$N"
"$N"
"BTM-06$N"
"**********************************************************************************$N"
"$N"
"";
N: XIC(BTM06_Struct.Alarm_low_pressure)OTE(BTM_Alarm_low_pressure_start.5);
N: XIC(BTM06_Struct.Alarm_vent_time)OTE(BTM_Alarm_vent_time_fault.5);
N: XIC(BTM06_Struct.Alarm_fill_time)OTE(BTM_Alarm_fill_time_fault.5);
N: XIC(BTM06_Struct.Alarm_flow_rate)OTE(BTM_Alarm_flow_rate_fault.5);
N: XIC(BTM06_Struct.Alarm_over_pressure)OTE(BTM_Alarm_over_pressure.5);
N: XIC(BTM06_Fault_A)OTE(PPS_UND_EPICS_1.Data_05.10);
N: XIC(BTM06_Fault_B)OTE(PPS_UND_EPICS_1.Data_05.11);
N: MOV(BTM06_Transducer_IN,EPICS_ANA_05.Data_05);
N: MOV(BTM06_Struct.Low_trip,EPICS_ANA_02.Data_02);
N: MOV(BTM06_Struct.High_reset,EPICS_ANA_02.Data_03);
RC: "**********************************************************************************$N"
"Data for IOC Status$N"
"$N"
"BTM-07$N"
"**********************************************************************************$N"
"$N"
"";
N: XIC(BTM07_Struct.Alarm_low_pressure)OTE(BTM_Alarm_low_pressure_start.6);
N: XIC(BTM07_Struct.Alarm_vent_time)OTE(BTM_Alarm_vent_time_fault.6);
N: XIC(BTM07_Struct.Alarm_fill_time)OTE(BTM_Alarm_fill_time_fault.6);
N: XIC(BTM07_Struct.Alarm_flow_rate)OTE(BTM_Alarm_flow_rate_fault.6);
N: XIC(BTM07_Struct.Alarm_over_pressure)OTE(BTM_Alarm_over_pressure.6);
N: XIC(BTM07_Fault_A)OTE(PPS_UND_EPICS_1.Data_05.12);
N: XIC(BTM07_Fault_B)OTE(PPS_UND_EPICS_1.Data_05.13);
N: MOV(BTM07_Transducer_IN,EPICS_ANA_05.Data_06);
N: MOV(BTM07_Struct.Low_trip,EPICS_ANA_02.Data_04);
N: MOV(BTM07_Struct.High_reset,EPICS_ANA_02.Data_05);
RC: "**********************************************************************************$N"
"Data for IOC Status$N"
"$N"
"BTM-08$N"
"**********************************************************************************$N"
"$N"
"";
N: XIC(BTM08_Struct.Alarm_low_pressure)OTE(BTM_Alarm_low_pressure_start.7);
N: XIC(BTM08_Struct.Alarm_vent_time)OTE(BTM_Alarm_vent_time_fault.7);
N: XIC(BTM08_Struct.Alarm_fill_time)OTE(BTM_Alarm_fill_time_fault.7);
N: XIC(BTM08_Struct.Alarm_flow_rate)OTE(BTM_Alarm_flow_rate_fault.7);
N: XIC(BTM08_Struct.Alarm_over_pressure)OTE(BTM_Alarm_over_pressure.7);
N: XIC(BTM08_Fault_A)OTE(PPS_UND_EPICS_1.Data_05.14);
N: XIC(BTM08_Fault_B)OTE(PPS_UND_EPICS_1.Data_05.15);
N: MOV(BTM08_Transducer_IN,EPICS_ANA_05.Data_07);
N: MOV(BTM08_Struct.Low_trip,EPICS_ANA_02.Data_06);
N: MOV(BTM08_Struct.High_reset,EPICS_ANA_02.Data_07);
RC: "**********************************************************************************$N"
"Data for IOC Status$N"
"$N"
"BTM-09$N"
"**********************************************************************************$N"
"$N"
"";
N: XIC(BTM09_Struct.Alarm_low_pressure)OTE(BTM_Alarm_low_pressure_start.8);
N: XIC(BTM09_Struct.Alarm_vent_time)OTE(BTM_Alarm_vent_time_fault.8);
N: XIC(BTM09_Struct.Alarm_fill_time)OTE(BTM_Alarm_fill_time_fault.8);
N: XIC(BTM09_Struct.Alarm_flow_rate)OTE(BTM_Alarm_flow_rate_fault.8);
N: XIC(BTM09_Struct.Alarm_over_pressure)OTE(BTM_Alarm_over_pressure.8);
N: XIC(BTM09_Fault_A)OTE(PPS_UND_EPICS_1.Data_05.16);
N: XIC(BTM09_Fault_B)OTE(PPS_UND_EPICS_1.Data_05.17);
N: MOV(BTM09_Transducer_IN,EPICS_ANA_06.Data_00);
N: MOV(BTM09_Struct.Low_trip,EPICS_ANA_03.Data_00);
N: MOV(BTM09_Struct.High_reset,EPICS_ANA_03.Data_01);
RC: "**********************************************************************************$N"
"Data for IOC Status$N"
"$N"
"BTM-10$N"
"**********************************************************************************$N"
"$N"
"";
N: XIC(BTM10_Struct.Alarm_low_pressure)OTE(BTM_Alarm_low_pressure_start.9);
N: XIC(BTM10_Struct.Alarm_vent_time)OTE(BTM_Alarm_vent_time_fault.9);
N: XIC(BTM10_Struct.Alarm_fill_time)OTE(BTM_Alarm_fill_time_fault.9);
N: XIC(BTM10_Struct.Alarm_flow_rate)OTE(BTM_Alarm_flow_rate_fault.9);
N: XIC(BTM10_Struct.Alarm_over_pressure)OTE(BTM_Alarm_over_pressure.9);
N: XIC(BTM10_Fault_A)OTE(PPS_UND_EPICS_1.Data_05.18);
N: XIC(BTM10_Fault_B)OTE(PPS_UND_EPICS_1.Data_05.19);
N: MOV(BTM10_Transducer_IN,EPICS_ANA_06.Data_01);
N: MOV(BTM10_Struct.Low_trip,EPICS_ANA_03.Data_02);
N: MOV(BTM10_Struct.High_reset,EPICS_ANA_03.Data_03);
RC: "**********************************************************************************$N"
"Data for IOC Status$N"
"$N"
"BTM-11$N"
"**********************************************************************************$N"
"$N"
"";
N: XIC(BTM11_Struct.Alarm_low_pressure)OTE(BTM_Alarm_low_pressure_start.10);
N: XIC(BTM11_Struct.Alarm_vent_time)OTE(BTM_Alarm_vent_time_fault.10);
N: XIC(BTM11_Struct.Alarm_fill_time)OTE(BTM_Alarm_fill_time_fault.10);
N: XIC(BTM11_Struct.Alarm_flow_rate)OTE(BTM_Alarm_flow_rate_fault.10);
N: XIC(BTM11_Struct.Alarm_over_pressure)OTE(BTM_Alarm_over_pressure.10);
N: XIC(BTM11_Fault_A)OTE(PPS_UND_EPICS_1.Data_05.20);
N: XIC(BTM11_Fault_B)OTE(PPS_UND_EPICS_1.Data_05.21);
N: MOV(BTM11_Transducer_IN,EPICS_ANA_06.Data_02);
N: MOV(BTM11_Struct.Low_trip,EPICS_ANA_03.Data_04);
N: MOV(BTM11_Struct.High_reset,EPICS_ANA_03.Data_05);
RC: "**********************************************************************************$N"
"Data for IOC Status$N"
"$N"
"BTM-12$N"
"**********************************************************************************$N"
"$N"
"";
N: XIC(BTM12_Struct.Alarm_low_pressure)OTE(BTM_Alarm_low_pressure_start.11);
N: XIC(BTM12_Struct.Alarm_vent_time)OTE(BTM_Alarm_vent_time_fault.11);
N: XIC(BTM12_Struct.Alarm_fill_time)OTE(BTM_Alarm_fill_time_fault.11);
N: XIC(BTM12_Struct.Alarm_flow_rate)OTE(BTM_Alarm_flow_rate_fault.11);
N: XIC(BTM12_Struct.Alarm_over_pressure)OTE(BTM_Alarm_over_pressure.11);
N: XIC(BTM12_Fault_A)OTE(PPS_UND_EPICS_1.Data_05.22);
N: XIC(BTM12_Fault_B)OTE(PPS_UND_EPICS_1.Data_05.23);
N: MOV(BTM12_Transducer_IN,EPICS_ANA_06.Data_03);
N: MOV(BTM12_Struct.Low_trip,EPICS_ANA_03.Data_06);
N: MOV(BTM12_Struct.High_reset,EPICS_ANA_03.Data_07);
RC: "**********************************************************************************$N"
"Data for IOC Status$N"
"$N"
"BTM-13$N"
"**********************************************************************************$N"
"$N"
"";
N: XIC(BTM13_Struct.Alarm_low_pressure)OTE(BTM_Alarm_low_pressure_start.12);
N: XIC(BTM13_Struct.Alarm_vent_time)OTE(BTM_Alarm_vent_time_fault.12);
N: XIC(BTM13_Struct.Alarm_fill_time)OTE(BTM_Alarm_fill_time_fault.12);
N: XIC(BTM13_Struct.Alarm_flow_rate)OTE(BTM_Alarm_flow_rate_fault.12);
N: XIC(BTM13_Struct.Alarm_over_pressure)OTE(BTM_Alarm_over_pressure.12);
N: XIC(BTM13_Fault_A)OTE(PPS_UND_EPICS_1.Data_05.24);
N: XIC(BTM13_Fault_B)OTE(PPS_UND_EPICS_1.Data_05.25);
N: MOV(BTM13_Transducer_IN,EPICS_ANA_06.Data_04);
N: MOV(BTM13_Struct.Low_trip,EPICS_ANA_04.Data_00);
N: MOV(BTM13_Struct.High_reset,EPICS_ANA_04.Data_01);
RC: "**********************************************************************************$N"
"Data for IOC Status$N"
"$N"
"BTM-14$N"
"**********************************************************************************$N"
"$N"
"";
N: XIC(BTM14_Struct.Alarm_low_pressure)OTE(BTM_Alarm_low_pressure_start.13);
N: XIC(BTM14_Struct.Alarm_vent_time)OTE(BTM_Alarm_vent_time_fault.13);
N: XIC(BTM14_Struct.Alarm_fill_time)OTE(BTM_Alarm_fill_time_fault.13);
N: XIC(BTM14_Struct.Alarm_flow_rate)OTE(BTM_Alarm_flow_rate_fault.13);
N: XIC(BTM14_Struct.Alarm_over_pressure)OTE(BTM_Alarm_over_pressure.13);
N: XIC(BTM14_Fault_A)OTE(PPS_UND_EPICS_1.Data_05.26);
N: XIC(BTM14_Fault_B)OTE(PPS_UND_EPICS_1.Data_05.27);
N: MOV(BTM14_Transducer_IN,EPICS_ANA_06.Data_05);
N: MOV(BTM14_Struct.Low_trip,EPICS_ANA_04.Data_02);
N: MOV(BTM14_Struct.High_reset,EPICS_ANA_04.Data_03);
RC: "**********************************************************************************$N"
"Data for IOC Status$N"
"$N"
"BTM-15$N"
"**********************************************************************************$N"
"$N"
"";
N: XIC(BTM15_Struct.Alarm_low_pressure)OTE(BTM_Alarm_low_pressure_start.14);
N: XIC(BTM15_Struct.Alarm_vent_time)OTE(BTM_Alarm_vent_time_fault.14);
N: XIC(BTM15_Struct.Alarm_fill_time)OTE(BTM_Alarm_fill_time_fault.14);
N: XIC(BTM15_Struct.Alarm_flow_rate)OTE(BTM_Alarm_flow_rate_fault.14);
N: XIC(BTM15_Struct.Alarm_over_pressure)OTE(BTM_Alarm_over_pressure.14);
N: XIC(BTM15_Fault_A)OTE(PPS_UND_EPICS_1.Data_05.28);
N: XIC(BTM15_Fault_B)OTE(PPS_UND_EPICS_1.Data_05.29);
N: MOV(BTM15_Transducer_IN,EPICS_ANA_06.Data_06);
N: MOV(BTM15_Struct.Low_trip,EPICS_ANA_04.Data_04);
N: MOV(BTM15_Struct.High_reset,EPICS_ANA_04.Data_05);
RC: "**********************************************************************************$N"
"Data for IOC Status$N"
"$N"
"BTM-16$N"
"**********************************************************************************$N"
"$N"
"";
N: XIC(BTM16_Struct.Alarm_low_pressure)OTE(BTM_Alarm_low_pressure_start.15);
N: XIC(BTM16_Struct.Alarm_vent_time)OTE(BTM_Alarm_vent_time_fault.15);
N: XIC(BTM16_Struct.Alarm_fill_time)OTE(BTM_Alarm_fill_time_fault.15);
N: XIC(BTM16_Struct.Alarm_flow_rate)OTE(BTM_Alarm_flow_rate_fault.15);
N: XIC(BTM16_Struct.Alarm_over_pressure)OTE(BTM_Alarm_over_pressure.15);
N: XIC(BTM16_Fault_A)OTE(PPS_UND_EPICS_1.Data_05.30);
N: XIC(BTM16_Fault_B)OTE(PPS_UND_EPICS_1.Data_05.31);
N: MOV(BTM16_Transducer_IN,EPICS_ANA_06.Data_07);
N: MOV(BTM16_Struct.Low_trip,EPICS_ANA_04.Data_06);
N: MOV(BTM16_Struct.High_reset,EPICS_ANA_04.Data_07);
END_ROUTINE
ROUTINE MainTest
RC: "$N"
"$N"
"**********************************************************************************$N"
"testMode Program$N"
"$N"
"This is the Main routine for the BTM Test Mode program$N"
"BTM data is trasfered to EPICS through the IOC_Status sub-routine$N"
"**********************************************************************************$N"
"$N"
"";
N: JSR(IOC_Status,0);
N: MOV(14.5,BTM_FillSetPoint);
N: MOV(15.0,BTM_MAX_PRESSURE);
N: XIC(Test_Mode)JSR(BTM_TEST_01,0);
N: XIC(Test_Mode)JSR(BTM_TEST_02,0);
N: XIC(Test_Mode)JSR(BTM_TEST_03,0);
N: XIC(Test_Mode)JSR(BTM_TEST_04,0);
N: XIC(Test_Mode)JSR(BTM_TEST_05,0);
N: XIC(Test_Mode)JSR(BTM_TEST_06,0);
N: XIC(Test_Mode)JSR(BTM_TEST_07,0);
N: XIC(Test_Mode)JSR(BTM_TEST_08,0);
N: XIC(Test_Mode)JSR(BTM_TEST_09,0);
N: XIC(Test_Mode)JSR(BTM_TEST_10,0);
N: XIC(Test_Mode)JSR(BTM_TEST_11,0);
N: XIC(Test_Mode)JSR(BTM_TEST_12,0);
N: XIC(Test_Mode)JSR(BTM_TEST_13,0);
N: XIC(Test_Mode)JSR(BTM_TEST_14,0);
N: XIC(Test_Mode)JSR(BTM_TEST_15,0);
N: XIC(Test_Mode)JSR(BTM_TEST_16,0);
END_ROUTINE
END_PROGRAM
TASK MainTask (Type := CONTINUOUS,
Rate := 10,
Priority := 10,
Watchdog := 500,
DisableUpdateOutputs := No,
InhibitTask := No)
MainProgram;
plcAdminProgram;
testMode;
END_TASK
CONFIG ASCII(XONXOFFEnable := 0,
DeleteMode := 0,
EchoMode := 0,
TerminationChars := 65293,
AppendChars := 2573,
BufferSize := 82) END_CONFIG
CONFIG ControllerDevice END_CONFIG
CONFIG CST(SystemTimeMasterID := 0) END_CONFIG
CONFIG DF1(DuplicateDetection := 1,
ErrorDetection := BCC Error,
EmbeddedResponseEnable := 0,
DF1Mode := Pt to Pt,
ACKTimeout := 50,
NAKReceiveLimit := 3,
ENQTransmitLimit := 3,
TransmitRetries := 3,
StationAddress := 0,
ReplyMessageWait := 5,
PollingMode := 1,
MasterMessageTransmit := 0,
NormalPollNodeFile := ,
NormalPollGroupSize := 0,
PriorityPollNodeFile := ,
ActiveStationFile := ,
SlavePollTimeout := 3000,
EOTSuppression := 0,
MaxStationAddress := 31,
TokenHoldFactor := 1) END_CONFIG
CONFIG ExtendedDevice END_CONFIG
CONFIG FaultLog END_CONFIG
CONFIG FileManager END_CONFIG
CONFIG ICP END_CONFIG
CONFIG PCCC END_CONFIG
CONFIG Redundancy END_CONFIG
CONFIG SerialPort(BaudRate := 19200,
Parity := No Parity,
DataBits := 8 Bits of Data,
StopBits := 1 Stop Bit,
ComDriverId := DF1,
PendingComDriverId := DF1,
RTSOffDelay := 0,
RTSSendDelay := 0,
ControlLine := No Handshake,
PendingControlLine := No Handshake,
RemoteModeChangeFlag := 0,
PendingRemoteModeChangeFlag := 0,
ModeChangeAttentionChar := 27,
PendingModeChangeAttentionChar := 27,
SystemModeCharacter := 83,
PendingSystemModeCharacter := 83,
UserModeCharacter := 85,
PendingUserModeCharacter := 85) END_CONFIG
CONFIG UserMemory END_CONFIG
CONFIG WallClockTime(LocalTimeAdjustment := 0,
TimeZone := 0) END_CONFIG
END_CONTROLLER