Пример #1
0
        /// <summary>
        /// Read the flow sensor
        /// </summary>
        /// <remarks>
        /// Engineering Notes: This step is to check if the reading of flow sensor is reasonable.
        /// With the pump closed and all valves closed, the flow should be lower than a certain level.
        /// Failure on this indicates the reading of flow rate is not correct.
        /// </remarks>
        /// <param name="details">The string to hold details.</param>
        private void TestFlowSensor( DetailsBuilder details )
        {
            Pump.CloseAllValves( true );
            Pump.Stop();
            Thread.Sleep( 500 ); // Give the valves a chance to finish closing

            // Read the flow rate.
            ushort rawFlowCount = Pump.GetRawFlow();
            ushort flowVolts = Pump.ConvertRawFlowToVolts( rawFlowCount );
            ushort vacuumCounts = Pump.GetRawVacuum();
            double vacuumInches = Pump.ConvertRawVacuumToInches( vacuumCounts );
            int flowRate = Pump.CalculateFlowRate( flowVolts, vacuumCounts );

            // Test flow reading
            string flowString = BuildFlowString( rawFlowCount, flowRate, flowVolts );
            _gdpList.Add( new GeneralDiagnosticProperty( "DIAGNOSTIC_FLOW", rawFlowCount.ToString() ) );
            _gdpList.Add( new GeneralDiagnosticProperty( "DIAGNOSTIC_FLOW_VOLTS", flowVolts.ToString() ) );
            _gdpList.Add( new GeneralDiagnosticProperty( "DIAGNOSTIC_FLOW_RATE", flowRate.ToString() ) );
            _gdpList.Add( new GeneralDiagnosticProperty( "DIAGNOSTIC_FLOW_VACUUM", vacuumCounts.ToString() ) );
            _gdpList.Add( new GeneralDiagnosticProperty( "DIAGNOSTIC_FLOW_VACUUM_INCHES", vacuumInches.ToString() ) );

            // Flow value should be in the range of 0 (0mV) to 186 (600 mV), inclusive.
            // INS-3067, 6/26/2013, JMP - changer criteria from 43/128 to 0/186.
            ReportDiagnostic( details, DiagnosticResources.FLOW, flowString, ( ( rawFlowCount < 0 ) || ( rawFlowCount > 186 ) ) );
        }
Пример #2
0
        /// <summary>
        /// Check the vacuum sensor.
        /// </summary>
        /// <remarks>
        /// Engineering Notes: This step is to check if the reading of vacuum sensor is reasonable.
        /// After the initialization, the vacuum (negative pressure) should be close to zero.
        /// Failure on this test indicates possible issues on vacuum sensor, or A2D converter,
        /// or some tubing is blocked by something.
        /// </remarks>
        /// <param name="details">The string to hold details.</param>
        private void TestVacuumSensor(DetailsBuilder details)
        {
            Pump.CloseAllValves( true );

            Thread.Sleep(500); // Give the valves a chance to finish closing

            Pump.OpenValve(1, false); // Open solenoid 1
            Thread.Sleep(500); // Pause at least 500ms.

            // Read the vacuum pressure
            ushort vacuumCount = Pump.GetRawVacuum();
            int vacuumVoltage = CountToVoltage(vacuumCount);

            // Test vacuum readings
            // Vacuum count value should be in the range of 62 (200mV) to 128 (410 mV), inclusive.
            // The normal vacuum count is 77.

            // Report results
            string vacuumString = BuildCountAndUnitString(vacuumCount, vacuumVoltage, DiagnosticResources.MILLIVOLTS);
            _gdpList.Add(new GeneralDiagnosticProperty("DIAGNOSTIC_VACUUM", vacuumCount.ToString()));
            ReportDiagnostic(details, DiagnosticResources.VACUUM, vacuumString, ((vacuumCount < 62) || (vacuumCount > 128)));
        }
Пример #3
0
        /// <summary>
        /// Check if pump works properly.
        /// </summary>
        /// <remarks>
        /// Engineering Notes: This step is to check if pump works properly.
        /// Run pump at two different control voltages, check the flow rate difference between these two cases.
        /// </remarks>
        /// <param name="details">The string to hold details.</param>
        private void TestPump(DetailsBuilder details)
        {
            // Find a port without a gas cylinder connected. 
            // If all ports are connected, skip this test.
            DockingStation ds = Controller.GetDockingStation();

            // First, see if port one is unconnected or is providing FRESH AIR
            // Note: we are trying ports in the order of 3-2-1 so as to avoid pulling air through the filter, if possible.
            int testPort = -1;
            GasEndPoint gasEndPoint = null;
            for ( int solenoid = Configuration.DockingStation.NumGasPorts; solenoid >= 1 && testPort <= 0; solenoid-- )
            {
                gasEndPoint = ds.GasEndPoints.Find(m => m.Position == solenoid);
                if (gasEndPoint == null || gasEndPoint.Cylinder.IsFreshAir)
                    testPort = solenoid;
            }

            if (testPort <= 0)
            {
                Log.Debug("TestPump:  could not find open solenoid; this test will be skipped.");
                return;
            }

            // Open solenoid valve determined to be unconnected
            Pump.CloseAllValves( true );
            Thread.Sleep(500); // Give the valves a chance to finish closing
            Pump.OpenValve(testPort, false);

            // Start pump with pump voltage of 80
            Pump.Start(80);

            // Wait 3 seconds
            Thread.Sleep(3000);

            // Read flow 1
            ushort flowCount1 = Pump.GetRawFlow();
            ushort flowVolts1 = Pump.ConvertRawFlowToVolts( flowCount1 );
            ushort vacuumCounts1 = Pump.GetRawVacuum();

            int flowRate1 = Pump.CalculateFlowRate( flowVolts1, vacuumCounts1 );
            string flowString1 = BuildFlowString(flowCount1, flowRate1, flowVolts1);

            // Increase pump voltage to 240
            Pump.SetNewPumpVoltage(240);

            // Wait 3 seconds
            Thread.Sleep(3000);

            // Check Pump Error status
            int pumpErrorState = Pump.GetPumpErrorState();

            // Fail if state is 1
            _gdpList.Add(new GeneralDiagnosticProperty("DIAGNOSTIC_PUMP_ERROR_STATUS", pumpErrorState.ToString()));
            ReportDiagnostic(details, DiagnosticResources.PUMP_ERROR_STATUS, pumpErrorState.ToString(), (pumpErrorState == 1));

            // Read flow 2
            ushort flowCount2 = Pump.GetRawFlow();
            ushort flowVolts2 = Pump.ConvertRawFlowToVolts( flowCount2 );
            ushort vacuumCounts2 = Pump.GetRawVacuum();
            int flowRate2 = Pump.CalculateFlowRate( flowVolts2, vacuumCounts2 );
            string flowString2 = BuildFlowString(flowCount2, flowRate2, flowVolts2);

            // Fail if f2 - f1 < 100 OR f2 - f1 > 450
            _gdpList.Add(new GeneralDiagnosticProperty("DIAGNOSTIC_PUMP_F1", flowCount1.ToString()));
            _gdpList.Add(new GeneralDiagnosticProperty("DIAGNOSTIC_PUMP_F2", flowCount2.ToString()));
            ReportDiagnostic(details, DiagnosticResources.PUMP, flowString1, flowString2, ( flowCount2 - flowCount1 < 100 ) || ( flowCount2 - flowCount1 > 450 ) );

            // Stop the pump and close the port used for this test
            Pump.CloseValve(testPort);
            Thread.Sleep(500);
        }
Пример #4
0
        /// <summary>
        /// Check for leaks.
        /// </summary>
        /// <remarks>
        /// This is to check if the components in the closed gas delivery system work properly including
        /// tubing, 3 solenoid valves, manifolds, check valves, vacuum sensor, flow sensor and pump.
        /// The pump failure to operate could also cause this test to fail.
        /// If a leakage is found, flow check will be meaningless.
        /// </remarks>
        /// <param name="details">The details to fill in.</param>
        private void TestForLeak(DetailsBuilder details)
        {
            Pump.CloseAllValves( true );

            Thread.Sleep( 500 ); // Give the valves a chance to finish closing

            int pumpVoltage = 80; // initial voltage for leak test
            bool leakCheck1Failed = true;
            ushort vac1Raw;
            double vac1Inches;
            string vac1String;
            const int maxPumpVoltage = 120;
            const ushort rawInches40 = 360;
            const int inches40 = 40;
            const int pumpVoltageIncrement = 10;
            //const ushort rawInches55 = 466;
            //const int inches55 = 55;

            Pump.Start( pumpVoltage ); // start pump with initial voltage

            //Suresh 19-JUNE-2012 INS-3067
            do
            {
                // After changing pump voltage, always wait 1 second before reading  
                // vacuum sensor to give the sensor time to adjust to the change.
                Thread.Sleep( 1000 );

                // Take vacuum reading (vac1)
                vac1Raw = Pump.GetRawVacuum();
                vac1Inches = Pump.ConvertRawVacuumToInches( vac1Raw );
                vac1String = BuildCountAndUnitString( vac1Raw, vac1Inches, 1, "\"" );

                Log.Debug( string.Format( "Vacuum: {0}, Pump voltage: {1}", vac1String, pumpVoltage ) );

                // Check vacuum reading against target pressure.  Pass after we reach or exceed target.
                if ( vac1Raw >= rawInches40 )
                {
                    // Pass if vac1 >= 40 inches of water
                    leakCheck1Failed = false;
                    Log.Debug( string.Format( "Leak Check 1 PASSED. (vacuum exeeds {0}\")", inches40 ) );
                    break;
                }

                if ( pumpVoltage + pumpVoltageIncrement >= maxPumpVoltage )// if the pump voltage crests above 120 
                {
                    Log.Debug( string.Format( "Leak Check 1 FAILED (pump voltage exeeds {0} but vacuum under {1}\")", maxPumpVoltage, inches40 ) );
                    break;
                }

                pumpVoltage += pumpVoltageIncrement;

                Pump.SetNewPumpVoltage( (byte)pumpVoltage ); // set the new voltage to pump

            } while ( true );

            _gdpList.Add( new GeneralDiagnosticProperty( "DIAGNOSTIC_LEAK_CHECK_VAC1", vac1Raw.ToString() ) );
            _gdpList.Add( new GeneralDiagnosticProperty( "DIAGNOSTIC_LEAK_CHECK_VAC1_INCHES", vac1Inches.ToString() ) );
            _gdpList.Add( new GeneralDiagnosticProperty( "DIAGNOSTIC_LEAK_CHECK_VAC1_PASSED", (!leakCheck1Failed).ToString() ) );
            _gdpList.Add( new GeneralDiagnosticProperty( "DIAGNOSTIC_LEAK_CHECK_VAC1_PUMP_VOLTAGE", pumpVoltage.ToString() ) );
            ReportDiagnostic( details, DiagnosticResources.LEAK_CHECK_1, vac1String, leakCheck1Failed );

            int vacuumError = Pump.GetVacuumErrorState(); // Check status of Vacuum Error by calling GetVacuumErrState()

            _gdpList.Add( new GeneralDiagnosticProperty( "DIAGNOSTIC_LEAK_CHECK_VAC_ERROR", vacuumError.ToString() ) );
            //Pass no matter what the state is [Vacuum Error Status]. The purpose is to keep the data structure of the report same as previous version. 
            ReportDiagnostic( details, DiagnosticResources.VACUUM_ERROR_STATUS, vacuumError.ToString(), false );

            // Stop pump
            Pump.Stop();

            //Open Solenoid #1 for 1 second to relieve the pressure
            Pump.OpenValve( 1, false );
            Thread.Sleep( 1000 ); // 1 sec
            Pump.CloseValve( 1 ); 
        }