(********************************************* 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