Пример #1
0
        public void TestTiming()
        {
            // Generate an Ensemble
            DataSet.Ensemble ensemble = EnsembleHelper.GenerateEnsemble(30);

            Stopwatch watch = new Stopwatch();

            // Test Serialize()
            watch = new Stopwatch();
            watch.Start();
            for (int x = 0; x < 1000; x++)
            {
                string encoded = Newtonsoft.Json.JsonConvert.SerializeObject(ensemble.AncillaryData);
            }
            watch.Stop();
            long resultSerialize = watch.ElapsedMilliseconds;

            // Test Deserialize()
            string encodedd = Newtonsoft.Json.JsonConvert.SerializeObject(ensemble.AncillaryData);

            watch = new Stopwatch();
            watch.Start();
            for (int x = 0; x < 1000; x++)
            {
                DataSet.AncillaryDataSet decoded = Newtonsoft.Json.JsonConvert.DeserializeObject <DataSet.AncillaryDataSet>(encodedd);
            }
            watch.Stop();
            long resultDeserialize = watch.ElapsedMilliseconds;

            Debug.WriteLine(String.Format("Serialize:{0}  Deserialize:{1}", resultSerialize, resultDeserialize));

            Debug.WriteLine("Complete");
        }
Пример #2
0
        public void TestJson()
        {
            // Generate an Ensemble
            DataSet.Ensemble ensemble = EnsembleHelper.GenerateEnsemble(30);

            // Modify the data
            ensemble.AncillaryData.FirstBinRange   = 1.2f;
            ensemble.AncillaryData.BinSize         = 2.3f;
            ensemble.AncillaryData.FirstPingTime   = 3.4f;
            ensemble.AncillaryData.LastPingTime    = 4.5f;
            ensemble.AncillaryData.Heading         = 5.6f;
            ensemble.AncillaryData.Pitch           = 6.7f;
            ensemble.AncillaryData.Roll            = 7.8f;
            ensemble.AncillaryData.WaterTemp       = 8.9f;
            ensemble.AncillaryData.SystemTemp      = 9.10f;
            ensemble.AncillaryData.Salinity        = 10.11f;
            ensemble.AncillaryData.Pressure        = 11.12f;
            ensemble.AncillaryData.TransducerDepth = 12.13f;
            ensemble.AncillaryData.SpeedOfSound    = 13.14f;

            string encoded = Newtonsoft.Json.JsonConvert.SerializeObject(ensemble.AncillaryData);                                      // Serialize object to JSON

            DataSet.AncillaryDataSet decoded = Newtonsoft.Json.JsonConvert.DeserializeObject <DataSet.AncillaryDataSet>(encoded);      // Deserialize the JSON

            // Verify the values are the same
            Assert.AreEqual(1.2f, decoded.FirstBinRange, "First Bin Range is incorrect.");
            Assert.AreEqual(2.3f, decoded.BinSize, "BinSize is incorrect.");
            Assert.AreEqual(3.4f, decoded.FirstPingTime, "FirstPingTime is incorrect.");
            Assert.AreEqual(4.5f, decoded.LastPingTime, "LastPingTime is incorrect.");
            Assert.AreEqual(5.6f, decoded.Heading, "Heading is incorrect.");
            Assert.AreEqual(6.7f, decoded.Pitch, "Pitch is incorrect.");
            Assert.AreEqual(7.8f, decoded.Roll, "Roll is incorrect.");
            Assert.AreEqual(8.9f, decoded.WaterTemp, "WaterTemp is incorrect.");
            Assert.AreEqual(9.10f, decoded.SystemTemp, "SystemTemp is incorrect.");
            Assert.AreEqual(10.11f, decoded.Salinity, "Salinity is incorrect.");
            Assert.AreEqual(11.12f, decoded.Pressure, "Pressure is incorrect.");
            Assert.AreEqual(12.13f, decoded.TransducerDepth, "TransducerDepth is incorrect.");
            Assert.AreEqual(13.14f, decoded.SpeedOfSound, "SpeedOfSound is incorrect.");
        }
Пример #3
0
        public void DecodePd0Test()
        {
            Pd0FixedLeader fl = new Pd0FixedLeader();
            Pd0VariableLeader vl = new Pd0VariableLeader();

            fl.DepthCellLength = 23 * 100;
            vl.Heading = 223.3f;
            vl.Pitch = 123.45f;
            vl.Roll = 445.69f;
            vl.Temperature = 78.9f;
            vl.Pressure = 11;
            vl.DepthOfTransducer = 23 * 10;

            DataSet.AncillaryDataSet anc = new DataSet.AncillaryDataSet();
            anc.DecodePd0Ensemble(fl, vl);

            Assert.AreEqual(23, anc.BinSize, "Bin size is incorrect.");
            Assert.AreEqual(223.3f, anc.Heading, "Heading is incorrect.");
            Assert.AreEqual(123.45f, anc.Pitch, "Pitch is incorrect.");
            Assert.AreEqual(445.69f, anc.Roll, "Roll is incorrect.");
            Assert.AreEqual(78.9f, anc.WaterTemp, "Water Temp is incorrect.");
            Assert.AreEqual(110000, anc.Pressure, "Pressure is incorrect.");
            Assert.AreEqual(23, anc.TransducerDepth, "Transducer Depth is incorrect.");
        }
Пример #4
0
        public void DecodePd0Test()
        {
            Pd0FixedLeader    fl = new Pd0FixedLeader();
            Pd0VariableLeader vl = new Pd0VariableLeader();

            fl.DepthCellLength   = 23 * 100;
            vl.Heading           = 223.3f;
            vl.Pitch             = 123.45f;
            vl.Roll              = 445.69f;
            vl.Temperature       = 78.9f;
            vl.Pressure          = 11;
            vl.DepthOfTransducer = 23 * 10;

            DataSet.AncillaryDataSet anc = new DataSet.AncillaryDataSet();
            anc.DecodePd0Ensemble(fl, vl);

            Assert.AreEqual(23, anc.BinSize, "Bin size is incorrect.");
            Assert.AreEqual(223.3f, anc.Heading, "Heading is incorrect.");
            Assert.AreEqual(123.45f, anc.Pitch, "Pitch is incorrect.");
            Assert.AreEqual(445.69f, anc.Roll, "Roll is incorrect.");
            Assert.AreEqual(78.9f, anc.WaterTemp, "Water Temp is incorrect.");
            Assert.AreEqual(110000, anc.Pressure, "Pressure is incorrect.");
            Assert.AreEqual(23, anc.TransducerDepth, "Transducer Depth is incorrect.");
        }
Пример #5
0
        /// <summary>
        /// Convert the RTI Ancillary and Ensemble data set to the PD0 Fixed Leader data type.
        /// </summary>
        /// <param name="ens">RTI Ensemble data set.</param>
        /// <param name="anc">RTI Ancillary data set.</param>
        /// <param name="sysSetup">SystemSetup data set.</param>
        /// <param name="xform">Coordinate Transform.</param>
        public void DecodeRtiEnsemble(DataSet.EnsembleDataSet ens, DataSet.AncillaryDataSet anc, DataSet.SystemSetupDataSet sysSetup, PD0.CoordinateTransforms xform)
        {
            // Ensure the values were given, or create default values
            if (ens == null)
            {
                ens = new DataSet.EnsembleDataSet();
            }
            if (anc == null)
            {
                anc = new DataSet.AncillaryDataSet();
            }
            if (sysSetup == null)
            {
                sysSetup = new DataSet.SystemSetupDataSet();
            }

            CpuFirmwareVersion = (byte)ens.SysFirmware.FirmwareMinor;                           // Firmware Major
            CpuFirmwareRevision = (byte)ens.SysFirmware.FirmwareRevision;                          // Firmware Minor

            switch(ens.SubsystemConfig.SubSystem.GetSystemFrequency())
            {
                case Subsystem.SystemFrequency.Freq_75kHz:
                    SetSystemFrequency(SystemFrequency.Freq_75kHz);                             // 75 kHz
                    Set30DegreeBeamAngle();                                                     // 30 Degree Beam Angle
                    SetBeamConfiguration(BeamConfigs.BeamConfig_4_Beam_Janus);                  // 4 Beam Janus
                    SetConvex();                                                                // Set Convex
                    SetSensorConfig1();                                                         // Set Sensor Config 1
                    SetHeadAttached();                                                          // Set Head Attached
                    break;
                case Subsystem.SystemFrequency.Freq_150kHz:
                    SetSystemFrequency(SystemFrequency.Freq_150kHz);                            // 150 kHz
                    Set30DegreeBeamAngle();                                                     // 20 Degree Beam Angle
                    SetBeamConfiguration(BeamConfigs.BeamConfig_4_Beam_Janus);                  // 4 Beam Janus
                    SetConvex();                                                                // Set Convex
                    SetSensorConfig1();                                                         // Set Sensor Config 1
                    SetHeadAttached();                                                          // Set Head Attached
                    break;
                case Subsystem.SystemFrequency.Freq_300kHz:
                    SetSystemFrequency(SystemFrequency.Freq_300kHz);                            // 300 kHz
                    Set20DegreeBeamAngle();                                                     // 20 Degree Beam Angle
                    SetBeamConfiguration(BeamConfigs.BeamConfig_4_Beam_Janus);                  // 4 Beam Janus
                    SetConvex();                                                                // Set Convex
                    SetSensorConfig1();                                                         // Set Sensor Config 1
                    SetHeadAttached();                                                          // Set Head Attached
                    break;
                case Subsystem.SystemFrequency.Freq_600kHz:
                    SetSystemFrequency(SystemFrequency.Freq_600kHz);                            // 600 kHz
                    Set20DegreeBeamAngle();                                                     // 20 Degree Beam Angle
                    SetBeamConfiguration(BeamConfigs.BeamConfig_4_Beam_Janus);                  // 4 Beam Janus
                    SetConvex();                                                                // Set Convex
                    SetSensorConfig1();                                                         // Set Sensor Config 1
                    SetHeadAttached();                                                          // Set Head Attached
                    break;
                case Subsystem.SystemFrequency.Freq_1200kHz:
                    SetSystemFrequency(SystemFrequency.Freq_1200kHz);                           // 1200 kHz
                    Set20DegreeBeamAngle();                                                     // 20 Degree Beam Angle
                    SetBeamConfiguration(BeamConfigs.BeamConfig_4_Beam_Janus);                  // 4 Beam Janus
                    SetConvex();                                                                // Set Convex
                    SetSensorConfig1();                                                         // Set Sensor Config 1
                    SetHeadAttached();                                                          // Set Head Attached
                    break;
                case Subsystem.SystemFrequency.Freq_2000kHz:
                    SetSystemFrequency(SystemFrequency.Freq_2400kHz);                           // 2400 kHz
                    Set20DegreeBeamAngle();                                                     // 20 Degree Beam Angle
                    SetBeamConfiguration(BeamConfigs.BeamConfig_4_Beam_Janus);                  // 4 Beam Janus
                    SetConvex();                                                                // Set Convex
                    SetSensorConfig1();                                                         // Set Sensor Config 1
                    SetHeadAttached();                                                          // Set Head Attached
                    break;
                case Subsystem.SystemFrequency.Freq_38kHz:
                default:
                    break;
            }

            if (anc.Roll < 90 && anc.Roll > -90)
            {
                SetBeamsUpward();                                                               // Set Beams Upward
            }
            else
            {
                SetBeamsDownward();                                                             // Set Beams Downward
            }

            RealSimFlag = false;
            LagLength = 0;                                                                      // Lag Length
            NumberOfBeams = (byte)ens.NumBeams;                                                 // Number of Beams
            NumberOfCells = (byte)ens.NumBins;                                                  // Number of bins
            PingsPerEnsemble = (ushort)ens.ActualPingCount;                                     // Pings per ensemble
            DepthCellLength = (ushort)Math.Round(anc.BinSize * 100);                            // Depth Cell length
            BlankAfterTransmit = 0;                                                             // Blank - CWPBL - Do not have enough info
            ProfilingMode = 0;                                                                  // Signal Processing Mode - CWPBB - Do not have enough info
            LowCorrThresh = 0;                                                                  // Low Correlation Threshold - CWPCT - Do not have enough info
            NumCodeRepeats = (byte)sysSetup.WpRepeatN;                                          // Number of Code Repeats
            PercentGoodMinimum = 0;                                                             // Percent Good Minimum - Do not have enough info
            ErrorVelMaximum = 0;                                                                // Error Velocity Maximum - Do not have enough info
            TimeBetweenPingMinutes = 0;                                                         // Time Between Pings Minutes - CWPTBP - Do not have enough info
            TimeBetweenPingSeconds = 0;                                                         // Time Between Pings Seconds - CWPTBP - Do not have enough info
            TimeBetweenPingHundredths = 0;                                                      // Time Between Pings Hundredths -CWPTBP - Do not have enough info

            SetCoordinateTransform(xform);                                                      // Set Coordinate Transform

            HeadingAlignment = 0;                                                               // Heading alignment
            HeadingBias = 0;                                                                    // Heading Bias
            SensorSource = 0x5d;                                                                // Sensor Source
            SensorsAvailable = 0x5d;                                                            // Sensors Available
            Bin1Distance = (ushort)Math.Round(anc.FirstBinRange * 100);                         // Bin 1 distance
            XmitPulseLength = 0;                                                                // Transmit Pulse Length - Do not have enough info
            ReferenceLayerAverageStartCell = 0;                                                 // Reference Layer Average Start Cell - Do not have enough info
            ReferenceLayerAverageEndCell = 0;                                                   // Reference Layer Average End Cell - Do not have enough info
            FalseTargetThresh = 0;                                                              // False Target Threshold
            Spare_40 = 0xFE;                                                                    // Spare
            TransmitLagDistance = 0;                                                            // Lag Distance - CWPLL - Do not have enough info
            CpuBoardSerialNumber = ens.SysSerialNumber.ToString();                              // CPU Board Serial Number
            SystemBandwidth = 12;                                                               // System Bandwidth
            SystemPower = 0;                                                                    // System Power
            BaseFrequencyIndex = 0;                                                             // Base Frequency Index
            BeamAngle = 0;                                                                      // Beam Angle
        }