public void RunSequence(string outFile, List<int> ns, List<double> ps, List<double> alphas, int repeatCount)
        {
            var m = new Measurements();
            var sw = new Stopwatch();

            foreach (var alpha in alphas)
            {
                foreach (var n in ns)
                {
                    for (var x = 0; x < repeatCount; x++)
                    {
                        WriteLine(alpha + "a      " + 0 + "p       " + n);                       
                        // create or reset stuff
                        var sgt = new DataStructures.SGTree<int>(alpha);
                        var SGTNodes = new List<DataStructures.SGTNode<int>>(n);
                        
                        for(var i = 1; i < n; i++)
                        {
                            SGTNodes.Add(new DataStructures.SGTNode<int>(i));
                        }
                        sw.Reset();
                        sw.Start();
                        sgt.insertFirst(0);                        
                        sw.Stop();
                        m.Add(n, 0, alpha, sw.ElapsedTicks);
                    }                    
                }
            }

            m.WriteToFile(outFile);
        }
示例#2
0
 /// <summary>
 /// Creates an instance of <see cref="MeasurementUserControl"/> class.
 /// </summary>
 /// <param name="deviceID">ID of the device to filter measurements.</param>
 public MeasurementUserControl(int deviceID)
 {
     InitializeComponent();
     m_dataContext = new Measurements(deviceID, 17);
     m_dataContext.PropertyChanged += new PropertyChangedEventHandler(ViewModel_PropertyChanged);
     this.DataContext = m_dataContext;
 }
        public void ComputeDistance_CoordinateCoordinate_CallsIDistanceCalculatorWithCorrectParameters()
        {
            Coordinate c1 = new Coordinate(10.1, 20.1);
            Coordinate c2 = new Coordinate(10.2, 20.2);
            Mock<IDimensionsCalculator> calculatorM = new Mock<IDimensionsCalculator>();

            Measurements target = new Measurements(calculatorM.Object);
            double distance = target.ComputeDistance(c1, c2);

            calculatorM.Verify(calc => calc.CalculateDistance(c1, c2), Times.Once());
        }
        public void ComputeArea_IPolygon_ReturnsAreaOfSimplePolygonCalculatedByIDimensionsCalculator()
        {
            Polygon polygon = new Polygon(new CoordinateList());
            Random generator = new Random();
            double expectedArea = generator.Next(100);

            Mock<IDimensionsCalculator> calculatorM = new Mock<IDimensionsCalculator>();
            calculatorM.Setup(calc => calc.CalculateArea(polygon.ExteriorRing)).Returns(expectedArea);
            Measurements target = new Measurements(calculatorM.Object);

            double area = target.ComputeArea(polygon);

            Assert.Equal(expectedArea, area);
        }
示例#5
0
        /// <summary>
        /// Метод добавления в коллекцию измерений
        /// </summary>
        /// <param name="Cur">Ток</param>
        public void AddInCollection(double Cur)
        {
            TextBlockMessageFromServer = "  Статус: " + "Идет измерение...";
            //Годность
            bool   valid;
            Device b    = SelectedDeviceInComboBox as Device;
            var    Umin = context.GetUmin(b);
            var    Umax = context.GetUmax(b);
            var    Unom = context.GetUnom(b);
            //Отклонение от номинального значения
            var    Deviat = Math.Abs(Umax - Umin) / 2;
            double Uizm   = 0;

            //Добавление в коллекцию Oscs и определение наибольшего напряжения
            for (int q = 0; q < 1000; q++)
            {
                double temp = 0;
                temp = masVoltageFromServer[q];
                if (temp > Uizm)
                {
                    Uizm = temp;
                }

                Oscs.Add(new Osc()
                {
                    U = masVoltageFromServer[q], T = masVoltageFromServer[q + 1000]
                });
            }
            //Вызов метода построения осциллограмм
            LoadData(CounterAmountMeasurement);
            //Обновить график
            PlotModel.InvalidatePlot(true);
            //Вывод измеренного напряжения
            TextBlockOfVoltage = Uizm.ToString() + " B";
            valid = (Math.Abs(Unom - Uizm) <= Deviat);
            //Создание нового экземпляра измерения
            var measure = new Measurement {
                device = b, NumberSupressor = Convert.ToInt32(TextBoxNumberOfSupressor), Date = DateTime.Now, Fio = TextBlockOfSurnameInMainWindow, Voltage = Uizm, Valid = valid, Current = Cur
            };

            //Добавление в коллекцию
            Measurements.Add(measure);
            //В БД
            context.AddMeasurementsInDb(measure);
            //Сохранение изменений
            context.SaveDb();
        }
示例#6
0
        private static void SampleFour()
        {
            var data = new HistoricalWeatherData();

            data["Chicago", new DateTime(1970, 6, 6)] = new Measurements
            {
                HiTemp      = 75,
                LoTemp      = 58,
                AirPressure = 30.2
            };

            var item = data["Chicago", new DateTime(1970, 6, 6)];

            Console.WriteLine(item.HiTemp);
            item = data["Chicago", new DateTime(1970, 6, 6, 12, 30, 2)];
            Console.WriteLine(item.LoTemp);

            data["Chicago", new DateTime(1970, 6, 6)] = new Measurements
            {
                HiTemp      = 85,
                LoTemp      = 38,
                AirPressure = 30.2
            };

            item = data["Chicago", new DateTime(1970, 6, 6)];
            Console.WriteLine(item.HiTemp);
            item = data["Chicago", new DateTime(1970, 6, 6, 12, 30, 2)];
            Console.WriteLine(item.LoTemp);

            try
            {
                item = data["New York", new DateTime(1980, 5, 12)];
                Console.WriteLine("Didn't get expected exception");
            }
            catch (ArgumentOutOfRangeException)
            {
            }

            try
            {
                item = data["Chicago", new DateTime(1980, 5, 12)];
                Console.WriteLine("Didn't get expected exception");
            }
            catch (ArgumentOutOfRangeException)
            {
            }
        }
        public static string MeasureMedian(List<int> ns,  int numberMin, int numberMax, int repeatCount)
        {
            var random = new Random(DateTime.Now.Millisecond);
            var sw = new Stopwatch();
            var measurements = new Measurements(ns.Count);

            foreach (var n in ns)
            {
                var currentMeasurement = measurements.Add(n);
                for (var i = 0; i < repeatCount; i++)
                {
                    var l1 = new List<int>(n);
                    var middle = n/2;

                    for(var x = 0; x < n; x++)
                        l1.Add(random.Next(numberMin, numberMax));

                    var l2 = new List<int>(l1);
                    var l3 = new List<int>(l1);
                    
                    sw.Start();
                    var mom = l1.Mom(middle, Comparer<int>.Default);
                    sw.Stop();                    
                    var t1 = sw.Elapsed.Ticks;
                    sw.Reset();

                    sw.Start();
                    var momRandom = l2.MomRandom(middle, Comparer<int>.Default);
                    sw.Stop();
                    var t2 = sw.Elapsed.Ticks;
                    sw.Reset();
                    
                    sw.Start();
                    var quickSelect = l3.QuickSelect(middle, Comparer<int>.Default);
                    sw.Stop();
                    var t3 = sw.Elapsed.Ticks;
                    sw.Reset();

                    currentMeasurement.sum(t1, t2, t3);
                }
            }

            measurements.UpdateStats();

            return measurements.ToString();
        }
示例#8
0
        public bool IsIngedientAvailable(Ingredient i, ProductDetails p, int numberOfPersons = 1)
        {
            if (numberOfPersons < 1)
            {
                numberOfPersons = 1;
            }

            bool productHasSameMeasurementClass = p.ProductQuantities.Any(pq => Measurements.GetMeasurementClassForEUnitQuantityType(pq.MeasurementType) == Measurements.GetMeasurementClassForEUnitQuantityType(i.UnitQuantityType));

            if (!productHasSameMeasurementClass || p.MeasurementAmounts == null)
            {
                return(false);
            }
            var totalAmountOfProduct = p.MeasurementAmounts.GetTotalAmount(i.UnitQuantityType);

            return(totalAmountOfProduct >= i.UnitQuantity * numberOfPersons);
        }
        public void ComputeArea_IMultiPolygon_ReturnsSumOfPolygonAreas()
        {
            Random generator = new Random();

            Polygon polygon = new Polygon(new CoordinateList());
            double polygonArea = generator.Next(100);
            MultiPolygon multipolygon = new MultiPolygon(new Polygon[] { polygon, polygon });

            Mock<IDimensionsCalculator> calculatorM = new Mock<IDimensionsCalculator>();
            calculatorM.Setup(calc => calc.CalculateArea(polygon.ExteriorRing)).Returns(() => polygonArea);

            Measurements target = new Measurements(calculatorM.Object);

            double area = target.ComputeArea(multipolygon);

            Assert.Equal(2 * polygonArea, area);
        }
示例#10
0
        public void CalculateGravity(Planet planet1, Planet planet2, GameTime gameTime)
        {
            Vector2 distanceVector = Measurements.GetDistanceVector(planet1, planet2);

            float distanceSqared = distanceVector.LengthSquared();

            if (distanceSqared == 0)
                return;

            float acceleration = GravityConstantKilometerTonns * GameGlobals.SimulationSpeedMuliplicator / distanceSqared * (float)gameTime.ElapsedGameTime.TotalSeconds;

            distanceVector.Normalize();
            distanceVector *= acceleration;

            planet1.Direction += distanceVector * planet2.Mass;
            planet2.Direction -= distanceVector * planet1.Mass;
        }
        private static void TestItems(out Installation installation1, out Installation installation2,
                                      out Measurements measurements1, out Measurements measurements2, out Address address1,
                                      out Address address2)
        {
            var value1 = new Value("PM1", 13.61);
            var value2 = new Value("PM25", 19.76);
            var value3 = new Value("PM10", 29.29);
            var value4 = new Value("PM25", 30.30);

            address1 = new Address("Poland", "Kraków", "Mikołajska");
            address2 = new Address("Poland", "Warszawa", "Some random street");

            measurements1 = new Measurements(new Current(
                                                 "2020-04-08T07:31:50.230Z", "2020-04-08T08:31:50.230Z",
                                                 new List <Value> {
                value1, value2
            },
                                                 new List <Index>
            {
                new Index("AIRLY_CAQI", 37.52, "LOW", "Air is quite good.",
                          "Don't miss this day! The clean air calls!", "#D1CF1E")
            },
                                                 new List <Standard> {
                new Standard("WHO", "PM25", 25.0, 79.05)
            }));

            measurements2 = new Measurements(new Current(
                                                 "2020-04-08T07:31:50.230Z", "2020-04-08T08:31:50.230Z",
                                                 new List <Value> {
                value3, value4
            },
                                                 new List <Index>
            {
                new Index("AIRLY_CAQI", 37.52, "LOW", "Air is quite good.",
                          "Don't miss this day! The clean air calls!", "#D1CF1E")
            },
                                                 new List <Standard> {
                new Standard("WHO", "PM25", 25.0, 79.05)
            }));

            installation1 = new Installation(8077, new Location(50.062006, 19.940984),
                                             address1);

            installation2 = new Installation(8078, new Location(59.062006, 29.940984),
                                             address2);
        }
    public void TestB()
    {
        Map map = new Map();

        map.Init(3, 3);
        map.cells [1, 1] = 1;        //all the rest are zero.
        Measurement  m  = new Measurement(1, 0, -1);
        Measurements ma = new Measurements();

        ma.Init(1);
        ma.m.Add(m);
        List <Vector2> moves = new List <Vector2>();

        moves.Add(Vector2.zero);

        Test(map, ma, moves, 1, 2);
    }
示例#13
0
        public void Run(string outFile, List <int> ns, List <double> ps, List <double> alphas, int repeatCount)
        {
            var m      = new Measurements();
            var random = new Random(DateTime.Now.Millisecond);
            var sw     = new Stopwatch();

            foreach (var alpha in alphas)
            {
                foreach (var p in ps)
                {
                    foreach (var n in ns)
                    {
                        for (var x = 0; x < repeatCount; x++)
                        {
                            WriteLine(alpha + "a      " + p + "p       " + n);
                            // create or reset stuff
                            var sgt      = new DataStructures.SGTree <int>(alpha);
                            var SGTNodes = new List <DataStructures.SGTNode <int> >(n);
                            sw.Reset();
                            sw.Start();
                            var prev = sgt.insertFirst(0);
                            SGTNodes.Add(prev);
                            for (var i = 0; i < n; i++)
                            {
                                // sequential probability
                                if (random.Next(0, 100) / 100.0 < p)
                                {
                                    prev = sgt.insertAfter(prev, i);
                                    SGTNodes.Add(prev);
                                }
                                else
                                {
                                    var at = random.Next(0, i);
                                    prev = sgt.insertAfter(SGTNodes[at], i);
                                    SGTNodes.Add(prev);
                                }
                            }
                            sw.Stop();
                            m.Add(n, p, alpha, sw.ElapsedTicks);
                        }
                    }
                }
            }

            m.WriteToFile(outFile);
        }
        public void Run(string outFile, List<int> ns, List<double> ps, List<double> alphas, int repeatCount)
        {
            var m = new Measurements();
            var random = new Random(DateTime.Now.Millisecond);
            var sw = new Stopwatch();

            foreach (var alpha in alphas)
            {
                foreach(var p in ps)
                {
                    foreach (var n in ns) 
                    {
                        for(var x = 0; x < repeatCount; x++)
                        {
                            WriteLine(alpha + "a      " + p + "p       " + n);
                            // create or reset stuff
                            var sgt = new DataStructures.SGTree<int>(alpha);
                            var SGTNodes = new List<DataStructures.SGTNode<int>>(n);
                            sw.Reset();
                            sw.Start();
                            var prev = sgt.insertFirst(0);
                            SGTNodes.Add(prev);
                            for (var i = 0; i < n; i++)
                            {
                                // sequential probability 
                                if (random.Next(0, 100) / 100.0 < p)
                                {
                                    prev = sgt.insertAfter(prev, i); 
                                    SGTNodes.Add(prev);
                                }
                                else
                                {
                                    var at = random.Next(0, i);
                                    prev = sgt.insertAfter(SGTNodes[at], i);
                                    SGTNodes.Add(prev);
                                }
                            }                            
                            sw.Stop();
                            m.Add(n, p, alpha, sw.ElapsedTicks);                            
                        }                        
                    }
                }
            }

            m.WriteToFile(outFile);
        }
示例#15
0
        public ReconstitutedColdKitViewModel(DataStoreItem item) : base(item)
        {
            InsertQCAnalysisCommand = new RelayCommand(CreatQCAnalysis);
            AddQCMeasurementCommand = new RelayCommand(AddQCMeasurement);
            if ((Item as ReconstitutedColdKit).QCAnalysis != null)
            {
                QCExists = true;
            }

            if ((Item as ReconstitutedColdKit).QCAnalysis != null)
            {
                foreach (RadiochemicalPurityMeasurement m in ((Item as ReconstitutedColdKit).QCAnalysis.Measurements))
                {
                    Measurements.Add(m);
                }
            }
        }
示例#16
0
        public void Draw(CommandLink ctrl, PushButtonState state, PaintEventArgs e)
        {
            var m = new Measurements(ctrl, state, e.Graphics);

            e.Graphics.Clear(ctrl.Parent.BackColor);
            var gp = new GraphicsPath();

            gp.AddRoundedRectPath(m.client, new Size(rndRectRadius, rndRectRadius));
            e.Graphics.FillPath(m.dp.Fill, gp);
            e.Graphics.DrawPath(m.dp.Line, gp);
            e.Graphics.DrawImage(m.img, m.imgRect);
            TextRenderer.DrawText(e.Graphics, ctrl.Text, largeFont, m.txtRect, m.dp.Text, m.tff);
            if (m.noteRect.Size != SizeF.Empty)
            {
                TextRenderer.DrawText(e.Graphics, ctrl.NoteText, smallFont, m.noteRect, m.dp.Text, m.tff);
            }
        }
示例#17
0
        private void LoadDataFiles()
        {
            if (!Directory.Exists(SourceFolder))
            {
                throw new DirectoryNotFoundException($"Directory not found: {SourceFolder}");
            }

            var files = Directory.GetFiles(SourceFolder);

            foreach (var file in files)
            {
                var measurement = new Measurement();
                measurement.Init(file);

                Measurements.Add(measurement);
            }
        }
        public async Task download_for_some_installations_when_some_data_is_out_of_date()
        {
            // Arrange
            const short numberOfDays = 1;

            var downloadedData  = new Measurements();
            var installationIds = new List <short>();

            var startDate = DateTime.UtcNow.AddHours(-(2 * _minNumberOfMeasurements));

            for (int i = 0; i < _installationIds.Count; i++)
            {
                _context.AddMeasurementsToDatabase(
                    _installationIds[i], startDate, numberOfDays, _minNumberOfMeasurements);

                if (i % 2 == 0)
                {
                    _context.AddMeasurementsToDatabase(
                        _installationIds[i],
                        startDate.AddHours(_minNumberOfMeasurements),
                        numberOfDays,
                        _minNumberOfMeasurements);
                }
                else
                {
                    _downloaderMock.Setup(x => x.DownloadAirQualityData(_installationIds[i]))
                    .ReturnsAsync(downloadedData);
                }
            }

            var programController = new ProgramController(
                unitOfWork: _unitOfWork,
                installationIds: _installationIds,
                airlyMeasurementsDownloader: _downloaderMock.Object,
                minNumberOfMeasurements: _minNumberOfMeasurements);

            // Act
            var newMeasurementsList
                = await programController.DownloadAllAirQualityData();

            // Assert
            _downloaderMock.Verify(
                x => x.DownloadAirQualityData(It.IsAny <short>()),
                Times.Exactly((int)Math.Ceiling((double)_installationIds.Count / 2)));
        }
示例#19
0
        public async Task <IActionResult> UpdateCustomer([FromBody] Measurements measurements)
        {
            try
            {
                if (measurements != null && measurements.UserId != Guid.Empty && measurements.UserId != null)
                {
                    var customerProfile = await MeasurementsHandler.UpsertMeasurements(measurements);

                    return(Ok(customerProfile));
                }
                return(StatusCode(404));
            }
            catch (Exception ex)
            {
                Logger.LogError(ex.ToString());
                return(StatusCode(505, ex.Message));
            }
        }
        public void ComputeLength_LineString_RetursSumOfSegmentsLengths()
        {
            Random generator      = new Random();
            double segment1Length = generator.Next(100);
            double segment2Length = generator.Next(100);
            double sum            = segment1Length + segment2Length;

            LineString linestring = new LineString(new Coordinate[] { new Coordinate(10.1, 20.1), new Coordinate(10.2, 20.2), new Coordinate(10.3, 20.3) });
            Mock <IDimensionsCalculator> calculatorM = new Mock <IDimensionsCalculator>();

            calculatorM.Setup(calc => calc.CalculateDistance(linestring.Coordinates[0], linestring.Coordinates[1])).Returns(segment1Length);
            calculatorM.Setup(calc => calc.CalculateDistance(linestring.Coordinates[1], linestring.Coordinates[2])).Returns(segment2Length);

            Measurements target = new Measurements(calculatorM.Object);
            double       length = target.ComputeLength(linestring);

            Assert.Equal(sum, length);
        }
        public void ComputeArea_IMultiPolygon_ReturnsSumOfPolygonAreas()
        {
            Random generator = new Random();

            Polygon      polygon      = new Polygon(new CoordinateList());
            double       polygonArea  = generator.Next(100);
            MultiPolygon multipolygon = new MultiPolygon(new Polygon[] { polygon, polygon });

            Mock <IDimensionsCalculator> calculatorM = new Mock <IDimensionsCalculator>();

            calculatorM.Setup(calc => calc.CalculateArea(polygon.ExteriorRing)).Returns(() => polygonArea);

            Measurements target = new Measurements(calculatorM.Object);

            double area = target.ComputeArea(multipolygon);

            Assert.Equal(2 * polygonArea, area);
        }
示例#22
0
        protected override Measurements MeasureOverride(Size availableSize)
        {
            elementMap.Clear();
            var ms = new Measurements();

            foreach (var element in Elements)
            {
                var elementMs = element.Measure(availableSize);

                foreach (var measurement in elementMs)
                {
                    measurement.Flexible    = Flexible;
                    elementMap[measurement] = element;
                    ms.Add(measurement);
                }

                if (elementMs.Count > 0)
                {
                    elementMs[^ 1].PagebreakPenalty = double.PositiveInfinity;
示例#23
0
        public void clearAllTables()
        {
            Groups.RemoveRange(Groups);
            AnswersByPhone.RemoveRange(AnswersByPhone);
            //Rooms.RemoveRange(Rooms);
            //Teachers.RemoveRange(Teachers);
            MeasureInstructionsData.RemoveRange(MeasureInstructionsData);
            OneMeasuresEvalData.RemoveRange(OneMeasuresEvalData);
            OneMeasuresByGroupId.RemoveRange(OneMeasuresByGroupId);
            MeasurementsByGroupId.RemoveRange(MeasurementsByGroupId);
            Measurements.RemoveRange(Measurements);
            ActiveExperiments.RemoveRange(ActiveExperiments);
            Experiments.RemoveRange(Experiments);
            Activities.RemoveRange(Activities);
            ActivityLogs.RemoveRange(ActivityLogs);
            //Students.RemoveRange(Students);

            SaveChanges();
        }
示例#24
0
        public PagedResult <KeyValuePair <DateTime, IList <ReadingViewModel> > > GetReadingsPaged(ReadingsQuery query)
        {
            var datesPaged = Readings.Where(r => r.Measurement.Id == query.MeasurementId &&
                                            (query.FromTime == null || r.ReadingTime >= query.FromTime) &&
                                            (query.ToTime == null || r.ReadingTime <= query.ToTime) &&
                                            (query.NewerThan == null || r.ReadingTime > query.NewerThan))
                             .OrderByIf(r => r.ReadingTime, () => query.Ascending)
                             .Select(r => r.ReadingTime)
                             .Distinct()
                             .GetPaged(query.Page, query.PageSize);
            var dates = datesPaged.Results;

            // Make sure readings get SensorRole and Calculator loaded automatically
            // It's practically caching them for grouping query
            var measurement = Measurements.Include(m => m.SensorRoles)
                              .Include(m => m.Calculators)
                              .FirstOrDefault(m => m.Id == query.MeasurementId);

            var grouped = Readings.Where(r =>
                                         (r.Measurement.Id == query.MeasurementId) &&
                                         (dates == null || dates.Contains(r.ReadingTime))
                                         )
                          .OrderByIf(r => r.ReadingTime, () => query.Ascending)
                          .ToList()
                          .AsQueryable()
                          .ProjectTo <ReadingViewModel>()
                          .GroupBy(r => r.ReadingTime)
                          .Select(g => new KeyValuePair <DateTime, IList <ReadingViewModel> > (
                                      g.Key,
                                      g.OrderBy(r => r.Name).ToList()
                                      ))
                          .ToList();

            var result = new PagedResult <KeyValuePair <DateTime, IList <ReadingViewModel> > >();

            result.CurrentPage = datesPaged.CurrentPage;
            result.PageCount   = datesPaged.PageCount;
            result.PageSize    = datesPaged.PageSize;
            result.RowCount    = datesPaged.RowCount;
            result.Results     = grouped;

            return(result);
        }
        public void _020_HandlesLessThenMinimum()
        {
            var m    = new Measurements(10);
            var mock = new Mock <EcoFriendly>(MockBehavior.Strict, null, m, null)
            {
                CallBase = true
            };

            mock.SetupGet(p => p.MinimumDataPoints).Returns(10);
            mock.Setup(p => p.Get()).CallBase();
            m.BufferSeconds = mock.Object.MinimumDataPoints;

            for (int i = 0; i < mock.Object.MinimumDataPoints - 1; i++)
            {
                m.AddData(10, 0, 0, 10, 0, 0);
            }

            mock.Object.Get().Should().Be((-1, -1, -1), "there are no or not enough samples");
        }
示例#26
0
        public MainPage(string pathForFiles)
        {
            InitializeComponent();

            MasterBehavior = MasterBehavior.Popover;

            easeMeasurements = new EaseMeasurements();
            easeMeasurements.RetrieveMeasurments();

            measurements = new Measurements(easeMeasurements);
            measurements.RetrieveMeasurments();

            PatternPage page = new PatternPage(pathForFiles, measurements)
            {
                BindingContext = ((MenuPage)Master).MenuItems[0]
            };

            menuPages.Add(MenuItemType.Pattern, new NavigationPage(page));
            Detail = menuPages[MenuItemType.Pattern];
        }
示例#27
0
        public void TestFindMeasurementById(int id)
        {
            Measurements m = measurementDao.FindMeasurementById(id);

            if (m != null)
            {
                Console.WriteLine($"FindMeasurementById({id}) -> Station: {m.Station,5} " +
                                  $"| Airtemperature: {m.Airtemperature,-10} | " +
                                  $"Airpressure: {m.Airpressure,5} | " +
                                  $"Rainfall: {m.Rainfall,-10} | " +
                                  $"Humidity: {m.Humidity,-10} | " +
                                  $"WindSpeed: {m.WindSpeed,5} | " +
                                  $"WindDirection: {m.WindDirection,-10} | " +
                                  $"Timestamp: {m.Timestamp,-10}");
            }
            else
            {
                Console.WriteLine($"FindAllMeasurementsById({id}) -> null");
            }
        }
示例#28
0
            public Page(int startingIndex, int length)
            {
                this.startingIndex = startingIndex;
                this.length        = length;
                lastAccess         = DateTime.Now;

                // This stays as random stuff:
                var generator = new Random();

                for (int i = 0; i < length; i++)
                {
                    var m = new Measurements
                    {
                        HiTemp      = generator.Next(50, 95),
                        LoTemp      = generator.Next(12, 49),
                        AirPressure = 28.0 + generator.NextDouble() * 4
                    };
                    pageData.Add(m);
                }
            }
        public void _030_Test2()
        {
            var m = new Measurements(10);
            ChargingStateMachine state = new();
            var mock = new Mock <EcoFriendly>(MockBehavior.Strict, null, m, state)
            {
                CallBase = true
            };

            mock.SetupGet(p => p.MinimumDataPoints).Returns(10);
            mock.Setup(p => p.Get()).CallBase();
            m.BufferSeconds = mock.Object.MinimumDataPoints;

            for (int i = 0; i < mock.Object.MinimumDataPoints; i++)
            {
                m.AddData(-12.0, 0.62, 0.40, 0, 0, 0);
            }

            mock.Object.Get().Should().Be((10.83f, 0, 0));
        }
示例#30
0
            protected void doFit(Measurements hi, Measurements med, Measurements low)
            {
                double[] voltageX = { Vhi.setting, Vmed.setting, Vlow.setting };
                double[] voltageY = { Vhi.average, Vmed.average, Vlow.average };
                Tuple <double, double> fitParams = Fit.Line(voltageX, voltageY);

                gain    = fitParams.Item2;
                offset  = fitParams.Item1;
                gainInt = (UInt16)(fitParams.Item2 * 32768);
                // offsetInt is a 12-bit 2's compliment integer.
                // The sign needs to be reversed for it to be applied correctly.
                if (offset >= 0)
                {
                    offsetInt = (UInt16)(fitParams.Item1 * 50);
                }
                else
                {
                    offsetInt = (UInt16)(4096 - fitParams.Item1 * 50);
                }
            }
示例#31
0
        public void ComputeArea_IPolygon_ReturnsAreaOfPolygonWithoutHolesCalculatedByIDimensionsCalculator()
        {
            Random generator = new Random();

            Polygon polygon = new Polygon(new CoordinateList());
            polygon.InteriorRings.Add(new CoordinateList());

            double exteriorArea = generator.Next(100) + 10;
            double interiorArea = generator.Next(10);

            Mock<IDimensionsCalculator> calculatorM = new Mock<IDimensionsCalculator>();
            calculatorM.Setup(calc => calc.CalculateArea(polygon.ExteriorRing)).Returns(exteriorArea);
            calculatorM.Setup(calc => calc.CalculateArea(polygon.InteriorRings[0])).Returns(interiorArea);

            Measurements target = new Measurements(calculatorM.Object);

            double area = target.ComputeArea(polygon);

            Assert.Equal(exteriorArea - interiorArea, area);
        }
        public void ShouldReturnVmItems2()
        {
            var value1 = new Value("PM1", 13.61);
            var value2 = new Value("PM25", 19.76);

            var measurements1 = new Measurements(new Current(
                                                     "2020-04-08T07:31:50.230Z", "2020-04-08T08:31:50.230Z",
                                                     new List <Value> {
                value1, value2
            },
                                                     new List <Index>
            {
                new Index("AIRLY_CAQI", 37.52, "LOW", "Air is quite good.",
                          "Don't miss this day! The clean air calls!", "#D1CF1E")
            },
                                                     new List <Standard> {
                new Standard("WHO", "PM25", 25.0, 79.05)
            }));
            var address1 = new Address("Poland", "Kraków", "Mikołajska");

            var installation1 = new Installation(8077, new Location(50.062006, 19.940984),
                                                 address1);

            HomeModel.FetchVmItems.Apply(i => (measurements1, installation1))
            .Apply(location => new List <Installation> {
                installation1
            })
                (new Location(50.062006, 19.940984))
            .Match(error => Assert.Fail("Should not return error"), tuple =>
            {
                var(errors, measurementVmItems) = tuple;
                //then
                Assert.IsEmpty(errors);
                Assert.AreEqual(1, measurementVmItems.Count);
                Assert.AreEqual(installation1, measurementVmItems.First().Installation);
                Assert.AreEqual(measurements1, measurementVmItems.First().Measurements);
                Assert.AreEqual(address1.city, measurementVmItems.First().City);
                Assert.AreEqual(address1.country, measurementVmItems.First().Country);
                Assert.AreEqual(address1.street, measurementVmItems.First().Street);
            });
        }
示例#33
0
        public void Run()
        {
            var filter = new UKF(1, 1);

            n = 1;
            q = 0.05;
            r = 0.3;
            N = 100;

            Q = Matrix.Build.Diagonal(n, n, q * q); //covariance of process
            NotifyChanged("Q");
            R = Matrix.Build.Dense(1, 1, r * r);    //covariance of measurement
            f = new FEquation();                    //nonlinear state equations
            h = new HEquation();                    //measurement equation
            x = q * Matrix.Build.Random(1, 1);      //s + q * Matrix.Build.Random(1, 1); //initial state with noise
            P = Matrix.Build.Diagonal(n, n, 1);     //initial state covariance


            var xV = Matrix.Build.Dense(n, N, 0); //Estimate
            var zV = Matrix.Build.Dense(1, N, 0); //measurement


            for (int k = 1; k < N; k++)
            {
                Matrix <double> z = ProcessBuilder.SineWave(k, r);
                //measurments

                Matrix <double>[] x_and_P = filter.Update(f, x, P, h, z, Q, R);                //ukf
                x = x_and_P[0];
                P = x_and_P[1];

                Measurements.Add(new Measurement()
                {
                    Value = z[0, 0], Time = TimeSpan.FromSeconds(k)
                });
                Estimates.Add(new Measurement()
                {
                    Value = x_and_P[0][0, 0], Time = TimeSpan.FromSeconds(k), Variance = x_and_P[1][0, 0]
                });
            }
        }
示例#34
0
        private static void ObserverThread()
        {
            try
            {
                var device = new USBM();

                if (!device.OpenDevice())
                {
                    throw new Exception("Could not open device.");
                }

                while (true)
                {
                    var volts = device.GetMeasuredValue();

                    if (volts == 0.0f)
                    {
                        throw new Exception("Value read from device was zero. This indicates the device may not be working. Restarting to try to recover.");
                    }

                    var ppmPerVolt = 197.5f; // Experimentally determined - looks perfectly linear.
                    var ppm        = (int)(volts * ppmPerVolt);

                    Measurements.Inc();
                    Volts.Set(volts);
                    Ppm.Set(ppm);

                    Console.WriteLine($"{volts:#00.000} V\t\t{ppm} PPM");

                    Thread.Sleep(TimeSpan.FromSeconds(1));
                }
            }
            catch (Exception ex)
            {
                // Oh no! This is fatal error.
                Console.WriteLine(ex.ToString());
                Console.WriteLine("Will restart after sleeping for a while.");
                Thread.Sleep(TimeSpan.FromSeconds(30));
                Process.GetCurrentProcess().Kill();
            }
        }
        /// <summary>
        /// Проверить, подходит ли данное устройство для места учёта и управления - покрывает ли оно
        /// те измерения и управляющиее воздействия, которые необходимы на месте учёта.
        /// На данный момент сделано допущение, что устройство покрывает более или столько же измерений,
        /// или управляющих воздействий, сколько требуется на месте учёта и управления.
        /// </summary>
        /// <param name="mcz">Место учёта и управления.</param>
        /// <returns>True, если подходит.</returns>
        public bool IsSuitableForMCZ(MeasurementAndControlZone mcz)
        {
            try
            {
                var measurementsResult = mcz.Measurements != null && mcz.Measurements.Any()
                    ? Measurements != null && Measurements.Any() && mcz.Measurements.All(m => Measurements.Contains(m)) // Устройство подхдит, если содержит все измерения места
                    : true;                                                                                             // Если нет измерений на месте, то устройство автоматически подходит

                var controlsResult = mcz.Controls != null && mcz.Controls.Any()
                    ? Controls != null && Controls.Any() && mcz.Controls.All(c => Controls.Contains(c)) // Устройство подхдит, если поддерживает все управляющие воздействия места
                    : true;                                                                             // Если воздействий на месте не требуется, то устройство автоматически подходит

                return(measurementsResult && controlsResult);
            }
            catch (Exception ex)
            {
                Console.WriteLine("IsSuitableForMCZ failed! {0}", ex.Message);

                return(false);
            }
        }
示例#36
0
        public void Measure()
        {
            var boxSize = Variable(PageVariables.BoxSize);

            // In order to add the measurements in the correct order
            // we save them temporarily in an array
            Measurement[] measurements = new Measurement[Elements.Count];

            Parallel.ForEach(Elements, (e, _, i) =>
            {
                e.Document      = this;
                measurements[i] = e.Measure(boxSize);
            });

            Measurements.AddRange(measurements);

            foreach (var element in PageItems)
            {
                element.Document = this;
            }
        }
        public void ShouldDeserializeMeasurement()
        {
            var json = Responses.MeasurementsJsonResponseShorter;

            var result   = TestUtilities.GetValueFromEither(Network.DeserializeMeasurements(json));
            var expected = new Measurements(new Current(
                                                "2020-04-08T07:31:50.230Z", "2020-04-08T08:31:50.230Z",
                                                new List <Value> {
                new Value("PM1", 13.61), new Value("PM25", 19.76)
            },
                                                new List <Index>
            {
                new Index("AIRLY_CAQI", 37.52, "LOW", "Air is quite good.",
                          "Don't miss this day! The clean air calls!", "#D1CF1E")
            },
                                                new List <Standard> {
                new Standard("WHO", "PM25", 25.0, 79.05)
            }));

            Assert.AreEqual(expected, result);
        }
示例#38
0
        public void Measure()
        {
            PageSize   = Variables["page"]["size"].GetValue <Size>();
            PageMargin = Variables["page"]["margin"].GetValue <Thickness>();

            PageBoxSize = new Size(PageSize.Width - PageMargin.Width, PageSize.Height - PageMargin.Height);

            foreach (var element in Elements.AsParallel())
            {
                element.Document = this;
                var elementSize = PageBoxSize;
                elementSize.Height -= element.Margin.Height;
                elementSize.Width  -= element.Margin.Width;
                Measurements.AddInternal(element.Measure(elementSize));
            }

            foreach (var element in PageItems)
            {
                element.Document = this;
            }
        }
示例#39
0
        public void ComputeDistance_PointMultiLineString_ReturnsNaNIfPointIsEmpty()
        {
            Point point = new Point(Coordinate.Empty);
            LineString linestring = new LineString(new Coordinate[] { new Coordinate(10.1, 20.1), new Coordinate(10.2, 20.2), new Coordinate(10.3, 20.3) });
            MultiLineString multilinestring = new MultiLineString(new LineString[] { linestring, linestring });

            Mock<IDimensionsCalculator> calculatorM = new Mock<IDimensionsCalculator>();

            Measurements target = new Measurements(calculatorM.Object);
            double distance = target.ComputeDistance(point, multilinestring);

            Assert.True(double.IsNaN(distance));
        }
示例#40
0
        public void ComputeDistance_PointPoint_ReturnsNaNIfPoint2IsEmpty()
        {
            Point p1 = new Point(new Coordinate(10.1, 20.1));
            Point p2 = new Point(Coordinate.Empty);
            Mock<IDimensionsCalculator> calculatorM = new Mock<IDimensionsCalculator>();

            Measurements target = new Measurements(calculatorM.Object);
            double distance = target.ComputeDistance(p1, p2);

            Assert.True(double.IsNaN(distance));
        }
示例#41
0
        public void ComputeDistance_PointPoint_CallsIDistanceCalculatorWithCorrectParameters()
        {
            Point p1 = new Point(new Coordinate(10.1, 20.1));
            Point p2 = new Point(new Coordinate(10.2, 20.2));
            Mock<IDimensionsCalculator> calculatorM = new Mock<IDimensionsCalculator>();

            Measurements target = new Measurements(calculatorM.Object);
            double distance = target.ComputeDistance(p1, p2);

            calculatorM.Verify(calc => calc.CalculateDistance(p1.Position, p2.Position), Times.Once());
        }
        //-------------------------------------------------------------------------------------------------//
        protected override bool ExecuteStarting()
        {
            const string STRLOG_MethodName = "ExecuteStarting";

            Logfile.WriteCalled(this.logLevel, STRLOG_ClassName, STRLOG_MethodName);

            bool success = false;
            string logMessage;

            //
            // Get the time now to determine how long execution actually takes
            //
            DateTime startDateTime = DateTime.Now;

            //
            // Calculate execution completion time
            //
            int executionTimeRemaining = 0;
            executionTimeRemaining += this.executionTimes.start;
            executionTimeRemaining += this.executionTimes.run;
            executionTimeRemaining += this.executionTimes.stop;
            executionTimeRemaining += this.executionTimes.finalise;
            this.executionCompletionTime = DateTime.Now + TimeSpan.FromSeconds(executionTimeRemaining);
            Logfile.Write(
                String.Format(STRLOG_ExecutionTimeRemaining_arg, executionTimeRemaining));

            //
            // Create the data structure for storing the measurements
            //
            this.measurements = new Measurements();

            //
            // Initialise state machine
            //
            this.lastError = null;
            int increaseSyncFieldCount = 0;
            double currentSpeed = 0;
            int measurementCount = 0;
            Measurement[] measurementArray = new Measurement[this.configParameters.simpleMovingAverage + 1];
            int synchronismRetries = 3;
            States state = States.CheckStatus;

            //
            // State machine loop
            //
            while (state != States.Done)
            {
                bool status = false;
                double value = 0;
                string units = String.Empty;

                Trace.WriteLine("state: " + state.ToString());

                switch (state)
                {
                    case States.CheckStatus:
                        //
                        // Check machine status before continuing
                        //
                        if ((success = this.CheckStatus()) == true)
                        {
                            state = States.EnableDCDrive;
                        }
                        else
                        {
                            // this.lastError already updated
                        }
                        break;

                    case States.EnableDCDrive:
                        //
                        // Enable the DC drive
                        //
                        if ((success = this.plc.EnableDCDrive(true)) == true)
                        {
                            state = States.StartDCDrive;
                        }
                        else
                        {
                            this.lastError = this.plc.LastError;
                        }
                        break;

                    case States.StartDCDrive:
                        //
                        // Start the DC drive
                        //
                        int speed = this.configParameters.speed;
                        if ((success = this.dcDrive.StartSpeedMode(speed)) == true)
                        {
                            currentSpeed = this.dcDrive.SpeedSetpoint;
                            state = States.CheckDCDriveStatus;
                        }
                        else
                        {
                            this.lastError = this.dcDrive.LastError;
                        }
                        break;

                    case States.CheckDCDriveStatus:
                        //
                        // Check the DC drive status
                        //
                        if ((success = this.plc.GetDCDriveStatus(ref status)) == true && status == true)
                        {
                            state = States.EnableSyncField;
                        }
                        else
                        {
                            this.lastError = this.plc.LastError;
                        }
                        break;

                    case States.EnableSyncField:
                        //
                        // Enable the sync field
                        //
                        if ((success = this.plc.EnableSyncField(true)) == true)
                        {
                            state = States.IncreaseSyncField;
                        }
                        else
                        {
                            this.lastError = this.plc.LastError;
                        }
                        break;

                    case States.IncreaseSyncField:
                        //
                        // Check if maximum sync field incease count has been reached - should not happen
                        //
                        if ((success = (++increaseSyncFieldCount < this.configParameters.maxSyncFieldIncreases)) == true)
                        {
                            //
                            // Increase the sync. machine field by one increment
                            //
                            if ((success = (this.plc.IncreaseSyncField(ref status) == true && status == true)) == true)
                            {
                                state = States.CheckSyncFieldCurrent;
                            }
                            else
                            {
                                this.lastError = STRLOG_UnableToIncreaseFieldCurrent + this.plc.LastError;
                            }
                        }
                        else
                        {
                            this.lastError = STRERR_MaxSyncFieldIncreasesReached + increaseSyncFieldCount.ToString();
                        }
                        break;

                    case States.CheckSyncFieldCurrent:
                        //
                        // Get the sync field current
                        //
                        if ((success = this.plc.GetSyncFieldCurrent(ref value, ref units)) == true)
                        {
                            Logfile.Write(String.Format(STRLOG_FieldCurrentValueUnits_Fmt, value, units));

                            //
                            // Check if the maximum field current has been reached
                            //
                            if ((success = (value < this.configParameters.maxFieldCurrent)) == true)
                            {
                                state = States.TakeMeasurementsForVoltages;
                            }
                            else
                            {
                                //
                                // Maximum field current has been reached
                                //
                                this.lastError = STRERR_MaxFieldCurrentReached + value.ToString();
                            }
                        }
                        else
                        {
                            this.lastError = this.plc.LastError;
                        }
                        break;

                    case States.TakeMeasurementsForVoltages:
                        //
                        // Take measurements, only need one
                        //
                        if ((success = this.TakeMeasurements(state, ref measurementArray[0])) == true)
                        {
                            state = States.CheckSyncMainsVoltages;
                        }
                        else
                        {
                            // this.lastError already updated
                        }
                        break;

                    case States.CheckSyncMainsVoltages:
                        //
                        // Check if the sync voltage is at or above the mains voltage
                        //
                        if (measurementArray[0].syncVoltage < measurementArray[0].mainsVoltage)
                        {
                            //
                            // Required sync voltage not reached yet
                            //
                            state = States.IncreaseSyncField;
                        }
                        else
                        {
                            //
                            // Required sync voltage has been reached, all done here
                            //
                            logMessage = STRLOG_SyncVoltageAboveMainsVoltage;
                            Logfile.Write(logMessage);
                            Trace.WriteLine(logMessage);

                            state = States.EnableSyncCheck;
                        }
                        break;

                    case States.EnableSyncCheck:
                        //
                        // Enable the sync check
                        //
                        if ((success = this.plc.EnableSyncCheck(true)) == true)
                        {
                            state = States.TakeMeasurementsForSynchronism;
                        }
                        else
                        {
                            this.lastError = this.plc.LastError;
                        }
                        break;

                    case States.TakeMeasurementsForSynchronism:
                        //
                        // Take measurements
                        //
                        if ((success = this.TakeMeasurements(state, ref measurementArray[measurementCount])) == true)
                        {
                            //
                            // Check if the synchronism window is open
                            //
                            if (measurementArray[measurementCount].syncMainsPhase > this.configParameters.phaseSynchronismLow &&
                                measurementArray[measurementCount].syncMainsPhase < this.configParameters.phaseSynchronismHigh)
                            {
                                //
                                // Try to synchronise to mains
                                //
                                measurementCount = 0;
                                state = States.TrySynchronism;
                            }
                            else
                            {
                                //
                                // Check if there are enough measurements to get an average phase change
                                //
                                if (++measurementCount >= this.configParameters.simpleMovingAverage + 1)
                                {
                                    measurementCount = 0;
                                    state = States.CheckSpeedForSynchronism;
                                }
                                else
                                {
                                    //
                                    // Wait before taking measurements again
                                    //
                                    this.WaitDelay(1);
                                }
                            }
                        }
                        else
                        {
                            // this.lastError already updated
                        }
                        break;

                    case States.CheckSpeedForSynchronism:
                        //
                        // Calculate the average phase change from the measurements
                        //
                        double syncMainsPhaseChange = 0;
                        for (int i = 0; i < this.configParameters.simpleMovingAverage; i++)
                        {
                            double currentPhase = measurementArray[i + 1].syncMainsPhase;
                            double previousPhase = measurementArray[i].syncMainsPhase;
                            double phaseDifference = PhaseDifference(previousPhase, currentPhase);
                            syncMainsPhaseChange += phaseDifference;
                            //Trace.WriteLine(string.Format("i: {0} - curr: {1:f01} - prev: {2:f01} - diff: {3:f01}", i, currentPhase, previousPhase, phaseDifference));
                        }
                        syncMainsPhaseChange /= this.configParameters.simpleMovingAverage;
                        Trace.WriteLine("syncMainsPhaseChange: " + syncMainsPhaseChange.ToString("f0"));

                        //
                        // Compare the average phase change with the limits and adjust the speed if necessary
                        //
                        if (syncMainsPhaseChange < this.configParameters.phaseChangeLimitLow)
                        {
                            //
                            // Phase change is too low, need to increase the speed
                            //
                            currentSpeed += 0.5;
                        }
                        else if (syncMainsPhaseChange > this.configParameters.phaseChangeLimitHigh)
                        {
                            //
                            // Phase change is too high, need to decrease the speed
                            //
                            currentSpeed -= 0.5;
                        }
                        else
                        {
                            //
                            // No change in speed required
                            //
                            state = States.TakeMeasurementsForSynchronism;
                            break;
                        }

                        //
                        // Check if the current speed is out of range
                        //
                        if ((success = currentSpeed <= this.configParameters.speed + this.configParameters.speedTrimHigh) == false)
                        {
                            this.lastError = STRERR_MaxSpeedTrimReached + currentSpeed.ToString();
                        }
                        else if ((success = currentSpeed >= this.configParameters.speed - this.configParameters.speedTrimLow) == false)
                        {
                            this.lastError = STRERR_MinSpeedTrimReached + currentSpeed.ToString();
                        }
                        else
                        {
                            //
                            // Change the DC drive speed
                            //
                            if ((success = this.dcDrive.ChangeSpeed(currentSpeed)) == true)
                            {
                                state = States.TakeMeasurementsForSynchronism;
                            }
                            else
                            {
                                this.lastError = this.dcDrive.LastError;
                            }
                        }
                        break;

                    case States.TrySynchronism:
                        //
                        // Get synchronism status
                        //
                        if ((success = this.plc.GetSynchronismStatus(ref status)) == true)
                        {
                            if (status == true)
                            {
                                //
                                // We are now in synchronism, attempt to close the contactor
                                //
                                if ((success = this.plc.CloseContactorA(ref status)) == true)
                                {
                                    if (status == true)
                                    {
                                        //
                                        // Synchronism successful
                                        //
                                        state = States.InSynchronism;
                                    }
                                    else
                                    {
                                        //
                                        // Retry synchronism
                                        //
                                        if (--synchronismRetries > 0)
                                        {
                                            state = States.TakeMeasurementsForSynchronism;
                                        }
                                        else
                                        {
                                            this.lastError = STRERR_SynchronismFailed;
                                            success = false;
                                        }
                                    }
                                }
                                else
                                {
                                    this.lastError = this.plc.LastError;
                                }
                            }
                            else
                            {
                                //
                                // Not in synchronism yet - wait a very short time before taking measurements
                                //
                                Thread.Sleep(200);
                                state = States.TakeMeasurementsForSynchronism;
                            }
                        }
                        else
                        {
                            this.lastError = this.plc.LastError;
                        }
                        break;

                    case States.InSynchronism:
                        //
                        // We are now in synchronism - set the torque limits
                        //
                        if ((success = this.dcDrive.SetMaxTorqueLimit(DCDrive.DEFAULT_Motor1TorqueMaxLimit_Synchronism)) == true)
                        {
                            if ((success = this.dcDrive.SetMinTorqueLimit(DCDrive.DEFAULT_Motor1TorqueMinLimit_Synchronism)) == true)
                            {
                                //
                                // Load up the machine by making it drive harder
                                //
                                if ((success = this.dcDrive.ChangeSpeed(this.configParameters.speedSynchronism, false)) == true)
                                {
                                    this.WaitDelay(5);
                                    state = States.Done;
                                }
                                else
                                {
                                    this.lastError = this.dcDrive.LastError;
                                }
                            }
                            else
                            {
                                this.lastError = this.dcDrive.LastError;
                            }
                        }
                        else
                        {
                            this.lastError = this.dcDrive.LastError;
                        }
                        break;
                }

                //
                // Check if any errors occurred
                //
                if (success == false)
                {
                    if (this.lastError != null)
                    {
                        Logfile.WriteError(this.lastError);
                    }
                    state = States.Done;
                }
            }

            //
            // Determine how long execution actually took
            //
            TimeSpan timeSpan = DateTime.Now - startDateTime;
            double totalTime = timeSpan.TotalSeconds;
            logMessage = String.Format(STRLOG_ExecuteTime_Fmt, totalTime);
            Trace.WriteLine(logMessage);

            logMessage += Logfile.STRLOG_Spacer + STRLOG_Success + success.ToString();

            Logfile.WriteCompleted(this.logLevel, STRLOG_ClassName, STRLOG_MethodName, logMessage);

            return success;
        }
        //-------------------------------------------------------------------------------------------------//
        public DriverMachine_Sync(XmlNode xmlNodeEquipmentConfig, Specification specification)
            : base(xmlNodeEquipmentConfig, specification)
        {
            const string STRLOG_MethodName = "DriverMachine_Sync";

            Logfile.WriteCalled(null, STRLOG_MethodName);

            //
            // Initialise local variables
            //
            this.measurements = null;

            try
            {
                //
                // Get parameters for this driver
                //
                XmlNode xmlNodeConfiguration = XmlUtilities.GetXmlNode(xmlNodeEquipmentConfig, Consts.STRXML_configuration, false);
                XmlNode xmlNodeSynchronisation = XmlUtilities.GetXmlNode(xmlNodeConfiguration, Consts.STRXML_synchronisation, false);

                //
                // Execution time
                //
                XmlNode xmlNode = XmlUtilities.GetXmlNode(xmlNodeSynchronisation, Consts.STRXML_executionTimes);
                this.executionTimes.initialise = XmlUtilities.GetIntValue(xmlNode, Consts.STRXML_initialise);
                this.executionTimes.start = XmlUtilities.GetIntValue(xmlNode, Consts.STRXML_start);
                this.executionTimes.run = XmlUtilities.GetIntValue(xmlNode, Consts.STRXML_run);
                this.executionTimes.stop = XmlUtilities.GetIntValue(xmlNode, Consts.STRXML_stop);
                this.executionTimes.finalise = XmlUtilities.GetIntValue(xmlNode, Consts.STRXML_finalise);
                Logfile.Write(String.Format(STRLOG_ExecuteTimes_Fmt, this.executionTimes.initialise,
                    this.executionTimes.start, this.executionTimes.run,
                    this.executionTimes.stop, this.executionTimes.finalise
                    ));

                //
                // Speed and speed trim
                //
                this.configParameters.speed = XmlUtilities.GetIntValue(xmlNodeSynchronisation, Consts.STRXML_speed);
                xmlNode = XmlUtilities.GetXmlNode(xmlNodeSynchronisation, Consts.STRXML_speedTrim);
                this.configParameters.speedTrimLow = XmlUtilities.GetIntValue(xmlNode, Consts.STRXML_low);
                this.configParameters.speedTrimHigh = XmlUtilities.GetIntValue(xmlNode, Consts.STRXML_high);
                Logfile.Write(STRLOG_Speed + this.configParameters.speed.ToString() +
                    Logfile.STRLOG_Spacer + STRLOG_SpeedTrimLow + this.configParameters.speedTrimLow.ToString() +
                    Logfile.STRLOG_Spacer + STRLOG_SpeedTrimHigh + this.configParameters.speedTrimHigh.ToString());

                //
                // Maximum field current, sync field increases and measurements
                //
                this.configParameters.maxFieldCurrent = XmlUtilities.GetRealValue(xmlNodeSynchronisation, Consts.STRXML_maxFieldCurrent);
                this.configParameters.maxSyncFieldIncreases = XmlUtilities.GetIntValue(xmlNodeSynchronisation, Consts.STRXML_maxSyncFieldIncreases);
                this.configParameters.maxMeasurements = XmlUtilities.GetIntValue(xmlNodeSynchronisation, Consts.STRXML_maxMeasurements);
                Logfile.Write(STRLOG_MaxFieldCurrent + this.configParameters.maxFieldCurrent.ToString() +
                    Logfile.STRLOG_Spacer + STRLOG_MaxSyncFieldIncreases + this.configParameters.maxSyncFieldIncreases.ToString() +
                    Logfile.STRLOG_Spacer + STRLOG_MaxMeasurements + this.configParameters.maxMeasurements.ToString());

                //
                // Speed adjustment for phase change between measurements
                //
                this.configParameters.simpleMovingAverage = XmlUtilities.GetIntValue(xmlNodeSynchronisation, Consts.STRXML_simpleMovingAverage);
                xmlNode = XmlUtilities.GetXmlNode(xmlNodeSynchronisation, Consts.STRXML_phaseChangeLimit);
                this.configParameters.phaseChangeLimitLow = XmlUtilities.GetIntValue(xmlNode, Consts.STRXML_low);
                this.configParameters.phaseChangeLimitHigh = XmlUtilities.GetIntValue(xmlNode, Consts.STRXML_high);
                Logfile.Write(STRLOG_SimpleMovingAverage + this.configParameters.simpleMovingAverage.ToString() +
                    Logfile.STRLOG_Spacer + STRLOG_PhaseChangeLimitLow + this.configParameters.phaseChangeLimitLow.ToString() +
                    Logfile.STRLOG_Spacer + STRLOG_PhaseChangeLimitHigh + this.configParameters.phaseChangeLimitHigh.ToString());

                //
                // Phase window to try synchronism
                //
                xmlNode = XmlUtilities.GetXmlNode(xmlNodeSynchronisation, Consts.STRXML_phaseSynchronism);
                this.configParameters.phaseSynchronismLow = XmlUtilities.GetIntValue(xmlNode, Consts.STRXML_low);
                this.configParameters.phaseSynchronismHigh = XmlUtilities.GetIntValue(xmlNode, Consts.STRXML_high);
                Logfile.Write(STRLOG_PhaseSynchronismLow + this.configParameters.phaseSynchronismLow.ToString() +
                    Logfile.STRLOG_Spacer + STRLOG_PhaseSynchronismHigh + this.configParameters.phaseSynchronismHigh.ToString());

                //
                // Speed for synchronism
                //
                this.configParameters.speedSynchronism = XmlUtilities.GetIntValue(xmlNodeSynchronisation, Consts.STRXML_speedSynchronism);
                Logfile.Write(STRLOG_SpeedSynchronism + this.configParameters.speedSynchronism.ToString());

                //
                // Torque range
                //
                xmlNode = XmlUtilities.GetXmlNode(xmlNodeSynchronisation, Consts.STRXML_torque);
                this.configParameters.torqueMin = XmlUtilities.GetIntValue(xmlNode, Consts.STRXML_min);
                this.configParameters.torqueMax = XmlUtilities.GetIntValue(xmlNode, Consts.STRXML_max);
                this.configParameters.torqueStep = XmlUtilities.GetIntValue(xmlNode, Consts.STRXML_step);
                Logfile.Write(STRLOG_MinTorque + this.configParameters.torqueMin.ToString() +
                    Logfile.STRLOG_Spacer + STRLOG_MaxTorque + this.configParameters.torqueMax.ToString() +
                    Logfile.STRLOG_Spacer + STRLOG_TorqueStep + this.configParameters.torqueStep.ToString());

                //
                // Power factor to increase or decrease sync field
                //
                xmlNode = XmlUtilities.GetXmlNode(xmlNodeSynchronisation, Consts.STRXML_powerFactor);
                this.configParameters.powerFactorLow = XmlUtilities.GetRealValue(xmlNode, Consts.STRXML_low);
                this.configParameters.powerFactorHigh = XmlUtilities.GetRealValue(xmlNode, Consts.STRXML_high);
                Logfile.Write(STRLOG_PowerFactorLow + this.configParameters.powerFactorLow.ToString() +
                    Logfile.STRLOG_Spacer + STRLOG_PowerFactorHigh + this.configParameters.powerFactorHigh.ToString());

                //
                // Load the XML measurements template and check that all required XML nodes exist
                //
                this.xmlNodeMeasurementsTemplate = XmlUtilities.GetXmlNode(xmlNodeSynchronisation, Consts.STRXML_measurements);

                //
                // Check that all required XML nodes exist
                //
                XmlUtilities.GetXmlValue(this.xmlNodeMeasurementsTemplate, Consts.STRXML_count, true);

                //
                // Field current
                //
                XmlUtilities.GetXmlValue(this.xmlNodeMeasurementsTemplate, Consts.STRXML_fieldCurrent, true);
                XmlNode xmlNodeParam = XmlUtilities.GetXmlNode(this.xmlNodeMeasurementsTemplate, Consts.STRXML_fieldCurrent);
                XmlUtilities.GetXmlValue(xmlNodeParam, Consts.STRXMLPARAM_units, true);
                XmlUtilities.GetXmlValue(xmlNodeParam, Consts.STRXMLPARAM_format, false);

                //
                // Sync voltage
                //
                XmlUtilities.GetXmlValue(this.xmlNodeMeasurementsTemplate, Consts.STRXML_syncVoltage, true);
                xmlNodeParam = XmlUtilities.GetXmlNode(this.xmlNodeMeasurementsTemplate, Consts.STRXML_syncVoltage);
                XmlUtilities.GetXmlValue(xmlNodeParam, Consts.STRXMLPARAM_units, true);
                XmlUtilities.GetXmlValue(xmlNodeParam, Consts.STRXMLPARAM_format, false);

                //
                // Sync frequency
                //
                XmlUtilities.GetXmlValue(this.xmlNodeMeasurementsTemplate, Consts.STRXML_syncFrequency, true);
                xmlNodeParam = XmlUtilities.GetXmlNode(this.xmlNodeMeasurementsTemplate, Consts.STRXML_syncFrequency);
                XmlUtilities.GetXmlValue(xmlNodeParam, Consts.STRXMLPARAM_units, true);
                XmlUtilities.GetXmlValue(xmlNodeParam, Consts.STRXMLPARAM_format, false);

                //
                // Torque set point
                //
                XmlUtilities.GetXmlValue(this.xmlNodeMeasurementsTemplate, Consts.STRXML_torqueSetpoint, true);
                xmlNodeParam = XmlUtilities.GetXmlNode(this.xmlNodeMeasurementsTemplate, Consts.STRXML_torqueSetpoint);
                XmlUtilities.GetXmlValue(xmlNodeParam, Consts.STRXMLPARAM_units, true);
                XmlUtilities.GetXmlValue(xmlNodeParam, Consts.STRXMLPARAM_format, false);

                //
                // Power factor
                //
                XmlUtilities.GetXmlValue(this.xmlNodeMeasurementsTemplate, Consts.STRXML_powerFactor, true);

                //
                // Real power
                //
                XmlUtilities.GetXmlValue(this.xmlNodeMeasurementsTemplate, Consts.STRXML_realPower, true);
                xmlNodeParam = XmlUtilities.GetXmlNode(this.xmlNodeMeasurementsTemplate, Consts.STRXML_realPower);
                XmlUtilities.GetXmlValue(xmlNodeParam, Consts.STRXMLPARAM_units, true);
                XmlUtilities.GetXmlValue(xmlNodeParam, Consts.STRXMLPARAM_format, false);

                //
                // Reactive power
                //
                XmlUtilities.GetXmlValue(this.xmlNodeMeasurementsTemplate, Consts.STRXML_reactivePower, true);
                xmlNodeParam = XmlUtilities.GetXmlNode(this.xmlNodeMeasurementsTemplate, Consts.STRXML_reactivePower);
                XmlUtilities.GetXmlValue(xmlNodeParam, Consts.STRXMLPARAM_units, true);
                XmlUtilities.GetXmlValue(xmlNodeParam, Consts.STRXMLPARAM_format, false);

                //
                // Phase current
                //
                XmlUtilities.GetXmlValue(this.xmlNodeMeasurementsTemplate, Consts.STRXML_phaseCurrent, true);
                xmlNodeParam = XmlUtilities.GetXmlNode(this.xmlNodeMeasurementsTemplate, Consts.STRXML_phaseCurrent);
                XmlUtilities.GetXmlValue(xmlNodeParam, Consts.STRXMLPARAM_units, true);
                XmlUtilities.GetXmlValue(xmlNodeParam, Consts.STRXMLPARAM_format, false);
            }
            catch (Exception ex)
            {
                //
                // Log the message and throw the exception back to the caller
                //
                Logfile.WriteError(ex.Message);
                throw;
            }

            Logfile.WriteCompleted(null, STRLOG_MethodName);
        }
        //-------------------------------------------------------------------------------------------------//
        protected override bool ExecuteRunning()
        {
            const string STRLOG_MethodName = "ExecuteRunning";

            Logfile.WriteCalled(this.logLevel, STRLOG_ClassName, STRLOG_MethodName);

            bool success = false;
            string logMessage;

            //
            // Get the time now to determine how long execution actually takes
            //
            DateTime startDateTime = DateTime.Now;

            //
            // Calculate execution completion time
            //
            int executionTimeRemaining = 0;
            executionTimeRemaining += this.executionTimes.run;
            executionTimeRemaining += this.executionTimes.stop;
            executionTimeRemaining += this.executionTimes.finalise;
            this.executionCompletionTime = DateTime.Now + TimeSpan.FromSeconds(executionTimeRemaining);
            Logfile.Write(
                String.Format(STRLOG_ExecutionTimeRemaining_arg, executionTimeRemaining));

            //
            // Create the data structure for storing the measurements
            //
            this.measurements = new Measurements();

            //
            // Initialise state machine
            //
            this.lastError = null;
            int torque = this.configParameters.torqueMin;
            int measurementCount = 0;
            Measurement[] measurementArray = new Measurement[this.configParameters.simpleMovingAverage];
            Measurement measurementAverage = new Measurement();
            States state = States.CheckStatus;

            //
            // State machine loop
            //
            while (state != States.Done)
            {
                bool status = false;
                string units = String.Empty;

                Trace.WriteLine("state: " + state.ToString());

                switch (state)
                {
                    case States.CheckStatus:
                        //
                        // Check machine status before continuing
                        //
                        if ((success = this.CheckStatus()) == true)
                        {
                            state = States.TakeMeasurementsForIncreasedSyncField;
                        }
                        else
                        {
                            // this.lastError already updated
                        }
                        break;

                    case States.TakeMeasurementsForIncreasedTorque:
                    case States.TakeMeasurementsForIncreasedSyncField:
                    case States.TakeMeasurementsForDecreasedTorque:
                    case States.TakeMeasurementsForDecreasedSyncField:
                        //
                        // Wait before taking measurements
                        //
                        this.WaitDelay(1);

                        //
                        // Take measurements
                        //
                        if ((success = this.TakeMeasurements(state, ref measurementArray[measurementCount])) == true)
                        {
                            //
                            // Check if there are enough measurements to get an average of the power factor
                            //
                            if (++measurementCount >= this.configParameters.simpleMovingAverage)
                            {
                                //
                                // Average the measurements
                                //
                                measurementAverage = new Measurement();

                                for (int i = 0; i < this.configParameters.simpleMovingAverage; i++)
                                {
                                    measurementAverage.fieldCurrent += measurementArray[i].fieldCurrent;
                                    measurementAverage.syncVoltage += measurementArray[i].syncVoltage;
                                    measurementAverage.syncFrequency += measurementArray[i].syncFrequency;
                                    measurementAverage.torqueSetpoint += measurementArray[i].torqueSetpoint;
                                    measurementAverage.realPower += measurementArray[i].realPower;
                                    measurementAverage.reactivePower += measurementArray[i].reactivePower;
                                    measurementAverage.phaseCurrent += measurementArray[i].phaseCurrent;
                                    if (measurementArray[i].powerFactor < 0)
                                    {
                                        measurementArray[i].powerFactor += 2;
                                    }
                                    measurementAverage.powerFactor += measurementArray[i].powerFactor;
                                }
                                measurementAverage.fieldCurrent /= this.configParameters.simpleMovingAverage;
                                measurementAverage.syncVoltage /= this.configParameters.simpleMovingAverage;
                                measurementAverage.syncFrequency /= this.configParameters.simpleMovingAverage;
                                measurementAverage.torqueSetpoint /= this.configParameters.simpleMovingAverage;
                                measurementAverage.powerFactor /= this.configParameters.simpleMovingAverage;
                                measurementAverage.realPower /= this.configParameters.simpleMovingAverage;
                                measurementAverage.reactivePower /= this.configParameters.simpleMovingAverage;
                                measurementAverage.phaseCurrent /= this.configParameters.simpleMovingAverage;

                                //
                                // Add the averaged measurement to the list
                                //
                                this.measurements.valueList.Add(measurementAverage);
                                measurementCount = 0;

                                //
                                // Determine next state
                                //
                                switch (state)
                                {
                                    case States.TakeMeasurementsForIncreasedTorque:
                                        state = States.CheckPowerFactorForIncreasedTorque;
                                        break;

                                    case States.TakeMeasurementsForIncreasedSyncField:
                                        state = States.IncreaseTorque;
                                        break;

                                    case States.TakeMeasurementsForDecreasedTorque:
                                        state = (torque > this.configParameters.torqueMin) ? States.CheckPowerFactorForDecreasedTorque : States.Done;
                                        break;

                                    case States.TakeMeasurementsForDecreasedSyncField:
                                        state = States.DecreaseTorque;
                                        break;
                                }
                            }
                            else
                            {
                                //
                                // Take another measurement
                                //
                            }
                        }
                        else
                        {
                            // this.lastError already updated
                        }
                        break;

                    case States.IncreaseTorque:
                        //
                        // Check if the desired maximum torque has been reached
                        //
                        if (torque < this.configParameters.torqueMax)
                        {
                            //
                            // Increase the torque by one step
                            //
                            torque += this.configParameters.torqueStep;
                            logMessage = STRLOG_TorqueSetpoint + torque.ToString();
                            Logfile.Write(logMessage);
                            Trace.WriteLine(logMessage);

                            //
                            // Change the DC drive torque maximum limit setpoint
                            //
                            if ((success = (this.dcDrive.SetMaxTorqueLimit(torque))) == true)
                            {
                                //
                                // Wait for increased torque to settle
                                //
                                this.WaitDelay(3);

                                state = States.TakeMeasurementsForIncreasedTorque;
                            }
                            else
                            {
                                this.lastError = this.dcDrive.LastError;
                            }
                        }
                        else
                        {
                            //
                            // Maximum torque has been reached, all done here
                            //
                            Logfile.Write(STRLOG_MaxTorqueReached + this.configParameters.torqueMax.ToString());
                            state = States.DecreaseTorque;
                        }
                        break;

                    case States.CheckPowerFactorForIncreasedTorque:
                        //
                        // Check if the average power factor is too high
                        //
                        Trace.WriteLine(string.Format("Average PowerFactor: {0:f03}", measurementAverage.powerFactor));
                        if (measurementAverage.powerFactor > this.configParameters.powerFactorHigh)
                        {
                            //
                            // Need to increase the field current to decrease the power factor
                            //
                            state = States.IncreaseSyncFieldForIncreasedTorque;
                        }
                        else
                        {
                            state = States.IncreaseTorque;
                        }
                        break;

                    case States.IncreaseSyncFieldForIncreasedTorque:
                        //
                        // Increase the sync. machine field by one increment
                        //
                        if ((success = (this.plc.IncreaseSyncField(ref status) == true && status == true)) == true)
                        {
                            //
                            // Wait for increased sync field to settle
                            //
                            this.WaitDelay(3);

                            state = States.TakeMeasurementsForIncreasedSyncField;
                        }
                        else
                        {
                            //
                            // Unable to increase field current because of machine limitations, not an error
                            //
                            logMessage = STRLOG_UnableToIncreaseFieldCurrent;
                            Logfile.Write(logMessage);
                            Trace.WriteLine(logMessage);

                            success = true;

                            state = States.IncreaseTorque;
                        }
                        break;

                    case States.DecreaseTorque:
                        //
                        // Check if the desired minimum torque has been reached
                        //
                        if (torque > this.configParameters.torqueMin)
                        {
                            //
                            // Decrease the torque by one step
                            //
                            torque -= this.configParameters.torqueStep;
                            logMessage = STRLOG_TorqueSetpoint + torque.ToString();
                            Logfile.Write(logMessage);
                            Trace.WriteLine(logMessage);

                            //
                            // Change the DC drive torque maximum limit setpoint
                            //
                            if ((success = (this.dcDrive.SetMaxTorqueLimit(torque))) == true)
                            {
                                state = States.TakeMeasurementsForDecreasedTorque;
                            }
                            else
                            {
                                this.lastError = this.dcDrive.LastError;
                            }
                        }
                        else
                        {
                            //
                            // Minimum torque has been reached, all done here
                            //
                            Logfile.Write(STRLOG_MinTorqueReached + this.configParameters.torqueMax.ToString());
                            state = States.Done;
                        }
                        break;

                    case States.CheckPowerFactorForDecreasedTorque:
                        //
                        // Check if the average power factor is too high
                        //
                        Trace.WriteLine(string.Format("Average PowerFactor: {0:f03}", measurementAverage.powerFactor));
                        if (measurementAverage.powerFactor < this.configParameters.powerFactorLow)
                        {
                            //
                            // Need to decrease the field current to increase the power factor
                            //
                            state = States.DecreaseSyncFieldForDecreasedTorque;
                        }
                        else
                        {
                            state = States.DecreaseTorque;
                        }
                        break;

                    case States.DecreaseSyncFieldForDecreasedTorque:
                        //
                        // Decrease the sync. machine field by one increment
                        //
                        if ((success = (this.plc.DecreaseSyncField(ref status) == true && status == true)) == true)
                        {
                            state = States.TakeMeasurementsForDecreasedSyncField;
                        }
                        else
                        {
                            this.lastError = STRLOG_UnableToDecreaseFieldCurrent + this.plc.LastError;
                        }
                        break;
                }

                //
                // Check if any errors occurred
                //
                if (success == false)
                {
                    if (this.lastError != null)
                    {
                        Logfile.WriteError(this.lastError);
                    }
                    state = States.Done;
                }
            }

            //
            // Determine how long execution actually took
            //
            TimeSpan timeSpan = DateTime.Now - startDateTime;
            double totalTime = timeSpan.TotalSeconds;
            logMessage = String.Format(STRLOG_ExecuteTime_Fmt, totalTime);
            Trace.WriteLine(logMessage);

            logMessage += Logfile.STRLOG_Spacer + STRLOG_Success + success.ToString();

            Logfile.WriteCompleted(this.logLevel, STRLOG_ClassName, STRLOG_MethodName, logMessage);

            return success;
        }
 // Creates and sets the data context once the user control has loaded.
 private void MeasurementPager_Loaded(object sender, RoutedEventArgs e)
 {
     if (!DesignerProperties.GetIsInDesignMode(this))
     {
         m_dataContext = new Measurements(false);
         m_dataContext.PropertyChanged += ViewModel_PropertyChanged;
         m_dataContext.FilterExpression = FilterExpression;
         m_dataContext.ItemsPerPage = ItemsPerPage;
         m_dataContext.Load();
         RootPanel.DataContext = m_dataContext;
     }
 }
        //-------------------------------------------------------------------------------------------------//
        public DriverMachine_SCVF(XmlNode xmlNodeEquipmentConfig, Specification specification)
            : base(xmlNodeEquipmentConfig, specification)
        {
            const string STRLOG_MethodName = "DriverMachine_SCVF";

            Logfile.WriteCalled(null, STRLOG_MethodName);

            //
            // Initialise local variables
            //
            this.measurements = null;

            try
            {
                //
                // Get parameters for this driver
                //
                XmlNode xmlNodeConfiguration = XmlUtilities.GetXmlNode(xmlNodeEquipmentConfig, Consts.STRXML_configuration, false);
                XmlNode xmlNodeShortCircuitVaryField = XmlUtilities.GetXmlNode(xmlNodeConfiguration, Consts.STRXML_shortCircuitVaryField, false);

                //
                // Execution times
                //
                XmlNode xmlNode = XmlUtilities.GetXmlNode(xmlNodeShortCircuitVaryField, Consts.STRXML_executionTimes);
                this.executionTimes.initialise = XmlUtilities.GetIntValue(xmlNode, Consts.STRXML_initialise);
                this.executionTimes.start = XmlUtilities.GetIntValue(xmlNode, Consts.STRXML_start);
                this.executionTimes.run = XmlUtilities.GetIntValue(xmlNode, Consts.STRXML_run);
                this.executionTimes.stop = XmlUtilities.GetIntValue(xmlNode, Consts.STRXML_stop);
                this.executionTimes.finalise = XmlUtilities.GetIntValue(xmlNode, Consts.STRXML_finalise);
                Logfile.Write(String.Format(STRLOG_ExecuteTimes_Fmt, this.executionTimes.initialise,
                    this.executionTimes.start, this.executionTimes.run,
                    this.executionTimes.stop, this.executionTimes.finalise
                    ));

                //
                // Speed
                //
                this.configParameters.speed = XmlUtilities.GetIntValue(xmlNodeShortCircuitVaryField, Consts.STRXML_speed);
                Logfile.Write(STRLOG_Speed + this.configParameters.speed.ToString());

                //
                // Maximum field current, sync field increases and stator current
                //
                this.configParameters.maxFieldCurrent = XmlUtilities.GetRealValue(xmlNodeShortCircuitVaryField, Consts.STRXML_maxFieldCurrent);
                this.configParameters.maxSyncFieldIncreases = XmlUtilities.GetIntValue(xmlNodeShortCircuitVaryField, Consts.STRXML_maxSyncFieldIncreases);
                this.configParameters.maxStatorCurrent = XmlUtilities.GetRealValue(xmlNodeShortCircuitVaryField, Consts.STRXML_maxStatorCurrent);
                Logfile.Write(STRLOG_MaxFieldCurrent + this.configParameters.maxFieldCurrent.ToString() +
                    Logfile.STRLOG_Spacer + STRLOG_MaxSyncFieldIncreases + this.configParameters.maxSyncFieldIncreases.ToString() +
                    Logfile.STRLOG_Spacer + STRLOG_MaxStatorCurrent + this.configParameters.maxStatorCurrent.ToString());

                //
                // Load the XML measurements template and check that all required XML nodes exist
                //
                this.xmlNodeMeasurementsTemplate = XmlUtilities.GetXmlNode(xmlNodeShortCircuitVaryField, Consts.STRXML_measurements);

                //
                // Check that all required XML nodes exist
                //
                XmlUtilities.GetXmlValue(this.xmlNodeMeasurementsTemplate, Consts.STRXML_count, true);

                //
                // Field current
                //
                XmlUtilities.GetXmlValue(this.xmlNodeMeasurementsTemplate, Consts.STRXML_fieldCurrent, true);
                XmlNode xmlNodeParam = XmlUtilities.GetXmlNode(this.xmlNodeMeasurementsTemplate, Consts.STRXML_fieldCurrent);
                XmlUtilities.GetXmlValue(xmlNodeParam, Consts.STRXMLPARAM_units, true);
                XmlUtilities.GetXmlValue(xmlNodeParam, Consts.STRXMLPARAM_format, false);

                //
                // Speed
                //
                XmlUtilities.GetXmlValue(this.xmlNodeMeasurementsTemplate, Consts.STRXML_speed, true);
                xmlNodeParam = XmlUtilities.GetXmlNode(this.xmlNodeMeasurementsTemplate, Consts.STRXML_speed);
                XmlUtilities.GetXmlValue(xmlNodeParam, Consts.STRXMLPARAM_units, true);
                XmlUtilities.GetXmlValue(xmlNodeParam, Consts.STRXMLPARAM_format, false);

                //
                // Stator current
                //
                XmlUtilities.GetXmlValue(this.xmlNodeMeasurementsTemplate, Consts.STRXML_statorCurrent, true);
                xmlNodeParam = XmlUtilities.GetXmlNode(this.xmlNodeMeasurementsTemplate, Consts.STRXML_statorCurrent);
                XmlUtilities.GetXmlValue(xmlNodeParam, Consts.STRXMLPARAM_units, true);
                XmlUtilities.GetXmlValue(xmlNodeParam, Consts.STRXMLPARAM_format, false);
            }
            catch (Exception ex)
            {
                //
                // Log the message and throw the exception back to the caller
                //
                Logfile.WriteError(ex.Message);
                throw;
            }

            Logfile.WriteCompleted(null, STRLOG_MethodName);
        }
        //private void BtnExport_Click(object sender, EventArgs e)
        //{
        //    Settings.Default.Save();
        //    if (m_meta == null)
        //    {
        //        MessageBox.Show("Please download the metadata first.");
        //        return;
        //    }
        //    if (m_selectedMeasurements == null || m_selectedMeasurements.Count == 0)
        //    {
        //        MessageBox.Show("There are no measurements to extract");
        //        return;
        //    }
        //    DateTime startTime = dateStartTime.Value;
        //    DateTime stopTime = dateStopTime.Value;
        //    if (startTime > stopTime)
        //    {
        //        MessageBox.Show("Start and Stop times are invalid");
        //        return;
        //    }
        //    TimeSpan interval = Resolutions.GetInterval((string)cmbResolution.SelectedItem);


        //    HistorianClientOptions clientOptions = new HistorianClientOptions();
        //    clientOptions.DefaultDatabase = Settings.Default.HistorianInstanceName;
        //    clientOptions.NetworkPort = Settings.Default.HistorianStreamingPort;
        //    clientOptions.ServerNameOrIp = Settings.Default.ServerIP;
        //    using (HistorianClient client = new HistorianClient(clientOptions))
        //    {
        //        KeySeekFilterBase<HistorianKey> timeFilter;
        //        if (interval.Ticks != 0)
        //            timeFilter = TimestampFilter.CreateFromIntervalData<HistorianKey>(startTime, stopTime, interval, new TimeSpan(TimeSpan.TicksPerMillisecond));
        //        else
        //            timeFilter = TimestampFilter.CreateFromRange<HistorianKey>(startTime, stopTime);

        //        var points = m_selectedMeasurements.Select((x) => (ulong)x.PointID).ToArray();
        //        var pointFilter = PointIDFilter.CreateFromList<HistorianKey>(points);

        //        var database = client.GetDefaultDatabase();
        //        var frames = database.GetFrames(timeFilter, pointFilter).RoundToTolerance(1);
        //        using (var csvStream = new StreamWriter("C:\\temp\\file.csv"))
        //        {
        //            //csvStream.AutoFlush = false;
        //            csvStream.Write("Timestamp,");
        //            foreach (var signal in m_selectedMeasurements)
        //            {
        //                csvStream.Write(signal.Description);
        //                csvStream.Write(',');
        //            }
        //            csvStream.WriteLine();

        //            foreach (var frame in frames)
        //            {
        //                csvStream.Write(frame.Key.ToString("MM/dd/yyyy hh:mm:ss.fffffff"));
        //                csvStream.Write(',');

        //                foreach (var signal in m_selectedMeasurements)
        //                {
        //                    HistorianValueStruct value;
        //                    if (frame.Value.Points.TryGetValue((ulong)signal.PointID, out value))
        //                    {
        //                        csvStream.Write(value.AsSingle);
        //                    }
        //                    csvStream.Write(',');
        //                }
        //                csvStream.WriteLine();
        //            }
        //            csvStream.Flush();
        //        }
        //        database.Disconnect();
        //    }


        //}

        //private void BtnExport_Click(object sender, EventArgs e)
        //{
        //    Settings.Default.Save();
        //    if (m_meta == null)
        //    {
        //        MessageBox.Show("Please download the metadata first.");
        //        return;
        //    }
        //    if (m_selectedMeasurements == null || m_selectedMeasurements.Count == 0)
        //    {
        //        MessageBox.Show("There are no measurements to extract");
        //        return;
        //    }
        //    DateTime startTime = dateStartTime.Value;
        //    DateTime stopTime = dateStopTime.Value;
        //    if (startTime > stopTime)
        //    {
        //        MessageBox.Show("Start and Stop times are invalid");
        //        return;
        //    }
        //    TimeSpan interval = Resolutions.GetInterval((string)cmbResolution.SelectedItem);


        //    HistorianClientOptions clientOptions = new HistorianClientOptions();
        //    clientOptions.DefaultDatabase = Settings.Default.HistorianInstanceName;
        //    clientOptions.NetworkPort = Settings.Default.HistorianStreamingPort;
        //    clientOptions.ServerNameOrIp = Settings.Default.ServerIP;
        //    using (HistorianClient client = new HistorianClient(clientOptions))
        //    {
        //        KeySeekFilterBase<HistorianKey> timeFilter;
        //        if (interval.Ticks != 0)
        //            timeFilter = TimestampFilter.CreateFromIntervalData<HistorianKey>(startTime, stopTime, interval, new TimeSpan(TimeSpan.TicksPerMillisecond));
        //        else
        //            timeFilter = TimestampFilter.CreateFromRange<HistorianKey>(startTime, stopTime);

        //        var points = m_selectedMeasurements.Select((x) => (ulong)x.PointID).ToArray();
        //        var pointFilter = PointIDFilter.CreateFromList<HistorianKey>(points);

        //        var database = client.GetDefaultDatabase();

        //        using (var frameReader = database.GetPointStream(timeFilter, pointFilter).GetFrameReader())
        //        using (var csvStream = new StreamWriter("C:\\temp\\file.csv"))
        //        {
        //            var ultraStream = new UltraStreamWriter(csvStream);
        //            //csvStream.AutoFlush = false;
        //            csvStream.Write("Timestamp,");
        //            foreach (var signal in m_selectedMeasurements)
        //            {
        //                csvStream.Write(signal.Description);
        //                csvStream.Write(',');
        //            }
        //            csvStream.WriteLine();

        //            while (frameReader.Read())
        //            {
        //                csvStream.Write(frameReader.FrameTime.ToString("MM/dd/yyyy hh:mm:ss.fffffff"));
        //                csvStream.Write(',');

        //                foreach (var signal in m_selectedMeasurements)
        //                {
        //                    HistorianValueStruct value;
        //                    if (frameReader.Frame.TryGetValue((ulong)signal.PointID, out value))
        //                    {
        //                        ultraStream.Write(value.AsSingle);
        //                        //csvStream.Write(value.AsSingle);
        //                    }
        //                    //csvStream.Write(',');
        //                    ultraStream.Write(',');
        //                }
        //                ultraStream.Flush();
        //                csvStream.WriteLine();
        //            }

        //            csvStream.Flush();
        //        }
        //        database.Disconnect();
        //    }
        //}

        //private void BtnExport_Click(object sender, EventArgs e)
        //{
        //    Settings.Default.Save();
        //    if (m_meta == null)
        //    {
        //        MessageBox.Show("Please download the metadata first.");
        //        return;
        //    }
        //    if (m_selectedMeasurements == null || m_selectedMeasurements.Count == 0)
        //    {
        //        MessageBox.Show("There are no measurements to extract");
        //        return;
        //    }
        //    DateTime startTime = dateStartTime.Value;
        //    DateTime stopTime = dateStopTime.Value;
        //    if (startTime > stopTime)
        //    {
        //        MessageBox.Show("Start and Stop times are invalid");
        //        return;
        //    }
        //    TimeSpan interval = Resolutions.GetInterval((string)cmbResolution.SelectedItem);


        //    HistorianClientOptions clientOptions = new HistorianClientOptions();
        //    clientOptions.DefaultDatabase = Settings.Default.HistorianInstanceName;
        //    clientOptions.NetworkPort = Settings.Default.HistorianStreamingPort;
        //    clientOptions.ServerNameOrIp = Settings.Default.ServerIP;
        //    using (HistorianClient client = new HistorianClient(clientOptions))
        //    {
        //        m_readIndex = 0;
        //        m_fillMeasurements.Clear();
        //        m_measurementsInOrder.Clear();
        //        foreach (var signal in m_selectedMeasurements)
        //        {
        //            var m = new Measurements();
        //            m_fillMeasurements.Add((ulong)signal.PointID, m);
        //            m_measurementsInOrder.Add(m);
        //        }

        //        KeySeekFilterBase<HistorianKey> timeFilter;
        //        if (interval.Ticks != 0)
        //            timeFilter = TimestampFilter.CreateFromIntervalData<HistorianKey>(startTime, stopTime, interval, new TimeSpan(TimeSpan.TicksPerMillisecond));
        //        else
        //            timeFilter = TimestampFilter.CreateFromRange<HistorianKey>(startTime, stopTime);

        //        var points = m_selectedMeasurements.Select((x) => (ulong)x.PointID).ToArray();
        //        var pointFilter = PointIDFilter.CreateFromList<HistorianKey>(points);

        //        var database = client.GetDefaultDatabase();

        //        using (var fillAdapter = database.GetPointStream(timeFilter, pointFilter).GetFillAdapter())
        //        using (var csvStream = new StreamWriter("C:\\temp\\file.csv"))
        //        {
        //            var ultraStream = new UltraStreamWriter(csvStream);
        //            //csvStream.AutoFlush = false;
        //            csvStream.Write("Timestamp,");
        //            foreach (var signal in m_selectedMeasurements)
        //            {
        //                csvStream.Write(signal.Description);
        //                csvStream.Write(',');
        //            }
        //            csvStream.WriteLine();

        //            m_readIndex++;
        //            while (fillAdapter.Fill(FillData))
        //            {
        //                csvStream.Write(fillAdapter.FrameTime.ToString("MM/dd/yyyy hh:mm:ss.fffffff"));
        //                csvStream.Write(',');

        //                foreach (var signal in m_measurementsInOrder)
        //                {
        //                    if (signal.ReadNumber == m_readIndex)
        //                    {
        //                        ultraStream.Write(signal.Value);
        //                    }
        //                    ultraStream.Write(',');
        //                }
        //                ultraStream.Flush();
        //                csvStream.WriteLine();
        //                m_readIndex++;

        //            }

        //            csvStream.Flush();
        //        }
        //        database.Disconnect();
        //    }
        //}

        private void BtnExport_Click(object sender, EventArgs e)
        {
            Settings.Default.Save();
            if (m_meta == null)
            {
                MessageBox.Show("Please download the metadata first.");
                return;
            }
            if (m_selectedMeasurements == null || m_selectedMeasurements.Count == 0)
            {
                MessageBox.Show("There are no measurements to extract");
                return;
            }
            DateTime startTime = dateStartTime.Value;
            DateTime stopTime = dateStopTime.Value;
            if (startTime > stopTime)
            {
                MessageBox.Show("Start and Stop times are invalid");
                return;
            }

            BtnExport.Tag = BtnExport.Text;
            BtnExport.Text = "Exporting...";
            BtnExport.Enabled = false;
            Cursor.Current = Cursors.WaitCursor;
            Application.DoEvents();

            TimeSpan interval = Resolutions.GetInterval((string)cmbResolution.SelectedItem);
            Thread workerThread = new Thread(start =>
            {
                long processingStartTime = DateTime.UtcNow.Ticks;

                using (HistorianClient client = new HistorianClient(TxtServerIP.Text,int.Parse(TxtHistorianPort.Text)))
                {
                    m_readIndex = 0;
                    m_fillMeasurements.Clear();
                    m_measurementsInOrder.Clear();

                    foreach (var signal in m_selectedMeasurements)
                    {
                        var m = new Measurements();
                        m_fillMeasurements.Add((ulong)signal.PointID, m);
                        m_measurementsInOrder.Add(m);
                    }

                    SeekFilterBase<HistorianKey> timeFilter;
                    if (interval.Ticks != 0)
                        timeFilter = TimestampSeekFilter.CreateFromIntervalData<HistorianKey>(startTime, stopTime, interval, new TimeSpan(TimeSpan.TicksPerMillisecond));
                    else
                        timeFilter = TimestampSeekFilter.CreateFromRange<HistorianKey>(startTime, stopTime);

                    var points = m_selectedMeasurements.Select((x) => (ulong)x.PointID).ToArray();
                    var pointFilter = PointIdMatchFilter.CreateFromList<HistorianKey, HistorianValue>(points);

                    using (var database = client.GetDatabase<HistorianKey, HistorianValue>(TxtHistorianInstance.Text))
                    {
                        string fileName = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory), "Export.csv");

                        using (var fillAdapter = database.GetPointStream(timeFilter, pointFilter).GetFillAdapter())
                        using (var csvStream = new StreamWriter(fileName))
                        {
                            var ultraStream = new UltraStreamWriter(csvStream);
                            //csvStream.AutoFlush = false;
                            csvStream.Write("Timestamp,");
                            foreach (var signal in m_selectedMeasurements)
                            {
                                csvStream.Write(signal.Description);
                                csvStream.Write(',');
                            }
                            csvStream.WriteLine();

                            m_readIndex++;
                            while (fillAdapter.Fill(FillData))
                            {
                                csvStream.Write(fillAdapter.FrameTime.ToString("MM/dd/yyyy hh:mm:ss.fffffff"));
                                csvStream.Write(',');

                                foreach (var signal in m_measurementsInOrder)
                                {
                                    if (signal.ReadNumber == m_readIndex)
                                    {
                                        ultraStream.Write(signal.Value);
                                    }
                                    ultraStream.Write(',');
                                }
                                ultraStream.Flush();
                                csvStream.WriteLine();
                                m_readIndex++;
                            }

                            csvStream.Flush();
                        }
                    }
                }

                Ticks runtime = DateTime.UtcNow.Ticks - processingStartTime;

                BeginInvoke(new Action<Ticks>(r => MessageBox.Show(r.ToElapsedTimeString(2), "Processing Time", MessageBoxButtons.OK, MessageBoxIcon.Information)), runtime);
                BeginInvoke(new Action(RestoreExportButton));
            });


            workerThread.Start();
        }
示例#48
0
        public void Constructor_SetsCalculatorObject()
        {
            Mock<IDimensionsCalculator> calculatorM = new Mock<IDimensionsCalculator>();

            Measurements target = new Measurements(calculatorM.Object);

            Assert.Same(calculatorM.Object, target.DimensionsCalculator);
        }
示例#49
0
        //-------------------------------------------------------------------------------------------------//
        public bool TakeMeasurement(ref Measurements measurement)
        {
            const string STRLOG_MethodName = "TakeMeasurement";

            Logfile.WriteCalled(STRLOG_ClassName, STRLOG_MethodName);

            this.lastError = null;
            bool success = false;

            try
            {
                // Wait before taking the measurement
                acDrive.WaitDelay(this.measurementDelay);

                //
                // Take the measurement
                //
                measurement.voltageMut = this.powerMeter.ReadVoltagePhaseToPhaseMut();
                measurement.currentMut = this.powerMeter.ReadCurrentThreePhaseMut();
                measurement.powerFactorMut = this.powerMeter.ReadPowerFactorAverageMut();
                measurement.voltageVsd = this.powerMeter.ReadVoltagePhaseToPhaseVsd();
                measurement.currentVsd = this.powerMeter.ReadCurrentThreePhaseVsd();
                measurement.powerFactorVsd = this.powerMeter.ReadPowerFactorAverageVsd();
                measurement.speed = this.acDrive.ReadDriveSpeed();
                measurement.torque = this.acDrive.ReadDriveTorque();

                success = true;
            }
            catch (Exception ex)
            {
                this.lastError = ex.Message;
                Logfile.WriteError(ex.Message);
            }

            string logMessage = STRLOG_Success + success.ToString();

            Logfile.WriteCompleted(STRLOG_ClassName, STRLOG_MethodName, logMessage);

            return success;
        }
示例#50
0
        public void ComputeLength_MultiLineString_RetursSumOfLineStringsLengths()
        {
            Random generator = new Random();
            double segment1Length = generator.Next(100);
            double segment2Length = generator.Next(100);
            double sum = 2 * (segment1Length + segment2Length);

            LineString linestring = new LineString(new Coordinate[] { new Coordinate(10.1, 20.1), new Coordinate(10.2, 20.2), new Coordinate(10.3, 20.3) });
            MultiLineString multilinestring = new MultiLineString(new LineString[] { linestring, linestring });

            Mock<IDimensionsCalculator> calculatorM = new Mock<IDimensionsCalculator>();
            calculatorM.Setup(calc => calc.CalculateDistance(linestring.Coordinates[0], linestring.Coordinates[1])).Returns(segment1Length);
            calculatorM.Setup(calc => calc.CalculateDistance(linestring.Coordinates[1], linestring.Coordinates[2])).Returns(segment2Length);

            Measurements target = new Measurements(calculatorM.Object);
            double length = target.ComputeLength(multilinestring);

            Assert.Equal(sum, length);
        }
示例#51
0
        public void ComputeLength_MultiLineString_RetursZeroForMultiLineStringWithoutMembers()
        {
            MultiLineString multilinestring = new MultiLineString();

            Mock<IDimensionsCalculator> calculatorM = new Mock<IDimensionsCalculator>();
            Measurements target = new Measurements(calculatorM.Object);

            double length = target.ComputeLength(multilinestring);

            Assert.Equal(0, length);
        }
示例#52
0
        public async Task<Measurements> GetMeasurementsAsync(string databaseName, ShowMeasurements command = null)
        {
            ThrowIfDisposed();

            Ensure.That(databaseName, nameof(databaseName)).IsNotNullOrWhiteSpace();

            var result = new Measurements();

            var json = await GetMeasurementsJsonAsync(databaseName, command).ForAwait();
            var data = Requester.JsonSerializer.Deserialize<InfluxDbResponse>(json);
            if (data?.Results == null || !data.Results.Any())
                return result;

            foreach (var serie in data.Results.SelectMany(r => r.Series))
                result.AddRange(serie.Values.Select(value => value.First.ToObject<string>()).ToArray());

            return result;
        }
        //-------------------------------------------------------------------------------------------------//
        protected override bool ExecuteRunning()
        {
            const string STRLOG_MethodName = "ExecuteRunning";

            Logfile.WriteCalled(this.logLevel, STRLOG_ClassName, STRLOG_MethodName);

            bool success = false;
            string logMessage;

            //
            // Get the time now to determine how long execution actually takes
            //
            DateTime startDateTime = DateTime.Now;

            //
            // Calculate execution completion time
            //
            int executionTimeRemaining = 0;
            executionTimeRemaining += this.executionTimes.run;
            executionTimeRemaining += this.executionTimes.stop;
            executionTimeRemaining += this.executionTimes.finalise;
            this.executionCompletionTime = DateTime.Now + TimeSpan.FromSeconds(executionTimeRemaining);
            Logfile.Write(
                String.Format(STRLOG_ExecutionTimeRemaining_arg, executionTimeRemaining));

            //
            // Create the data structure for storing the measurements
            //
            this.measurements = new Measurements();

            //
            // Initialise state machine
            //
            int increaseSyncFieldCount = 0;
            States state = States.CheckStatus;

            //
            // State machine loop
            //
            while (state != States.Done)
            {
                bool status = false;
                double value = 0;
                string units = String.Empty;

                Trace.WriteLine("state: " + state.ToString());

                switch (state)
                {
                    case States.CheckStatus:
                        //
                        // Check machine status before continuing
                        //
                        if ((success = this.CheckStatus()) == true)
                        {
                            state = States.IncreaseSyncField;
                        }
                        else
                        {
                            // this.lastError already updated
                        }
                        break;

                    case States.IncreaseSyncField:
                        //
                        // Increase the sync. machine field by one increment
                        //
                        if ((success = this.plc.IncreaseSyncField(ref status)) == true)
                        {
                            //
                            // Check if the sync field current was increased successfully
                            //
                            if (status == false)
                            {
                                //
                                // Unable to increase field current any further, this is not an error
                                //
                                logMessage = STRLOG_UnableToIncreaseFieldCurrent;
                                Logfile.Write(logMessage);
                                Trace.WriteLine(logMessage);
                            }
                            else
                            {
                                state = States.CheckStatorCurrent;
                            }
                        }
                        else
                        {
                            this.lastError = this.plc.LastError;
                        }
                        break;

                    case States.CheckStatorCurrent:
                        //
                        // Get stator phase current and store
                        //
                        if ((success = this.plc.PowerMeter.GetPhaseCurrent(ref value, ref units)) == true)
                        {
                            logMessage = String.Format(STRLOG_StatorCurrentValueUnits_Fmt, value, units);
                            Logfile.Write(logMessage);
                            Trace.WriteLine(logMessage);
                        }

                        //
                        // Check if the maximum stator current has been reached
                        //
                        if (value < this.configParameters.maxStatorCurrent)
                        {
                            state = States.CheckSyncFieldCurrent;
                        }
                        else
                        {
                            //
                            // Maximum stator current has been reached, all done here
                            //
                            logMessage = STRLOG_MaxStatorCurrentReached + this.configParameters.maxStatorCurrent.ToString();
                            Logfile.Write(logMessage);
                            Trace.WriteLine(logMessage);
                            state = States.Done;
                        }
                        break;

                    case States.CheckSyncFieldCurrent:
                        //
                        // Get the sync field current
                        //
                        if ((success = this.plc.GetSyncFieldCurrent(ref value, ref units)) == true)
                        {
                            Logfile.Write(String.Format(STRLOG_FieldCurrentValueUnits_Fmt, value, units));

                            //
                            // Check if the maximum field current has been reached
                            //
                            if (value < this.configParameters.maxFieldCurrent)
                            {
                                state = States.CheckMaxSyncFieldCount;
                            }
                            else
                            {
                                //
                                // Maximum field current has been reached, all done here
                                //
                                logMessage = STRLOG_MaxFieldCurrentReached + this.configParameters.maxFieldCurrent.ToString();
                                Logfile.Write(logMessage);
                                Trace.WriteLine(logMessage);
                                state = States.Done;
                            }
                        }
                        else
                        {
                            this.lastError = this.plc.LastError;
                        }
                        break;

                    case States.CheckMaxSyncFieldCount:
                        //
                        // Check if maximum sync field incease count has been reached - should not happen
                        //
                        if ((success = (increaseSyncFieldCount++ < this.configParameters.maxSyncFieldIncreases)) == true)
                        {
                            Trace.WriteLine("increaseSyncFieldCount: " + increaseSyncFieldCount.ToString());
                            state = States.TakeMeasurements;
                        }
                        else
                        {
                            this.lastError = STRERR_MaxSyncFieldIncreasesReached + increaseSyncFieldCount.ToString();
                        }
                        break;

                    case States.TakeMeasurements:
                        //
                        // Wait a moment before taking the measurements
                        //
                        this.WaitDelay(1);

                        //
                        // Take measurements
                        //
                        if ((success = this.TakeMeasurements()) == true)
                        {
                            state = States.CheckStatus;
                        }
                        else
                        {
                            // this.lastError already updated
                        }
                        break;
                }

                //
                // Check if any errors occurred
                //
                if (success == false)
                {
                    if (this.lastError != null)
                    {
                        Logfile.WriteError(this.lastError);
                    }
                    state = States.Done;
                }
            }

            //
            // Determine how long execution actually took
            //
            TimeSpan timeSpan = DateTime.Now - startDateTime;
            double totalTime = timeSpan.TotalSeconds;
            logMessage = String.Format(STRLOG_ExecuteTime_Fmt, totalTime);
            Trace.WriteLine(logMessage);

            logMessage += Logfile.STRLOG_Spacer + STRLOG_Success + success.ToString();

            Logfile.WriteCompleted(this.logLevel, STRLOG_ClassName, STRLOG_MethodName, logMessage);

            return success;
        }
        // Creates and sets the data context once the user control has loaded.
        private void MeasurementPager_Loaded(object sender, RoutedEventArgs e)
        {
            if (!DesignerProperties.GetIsInDesignMode(this))
            {
                m_dataContext = new Measurements(false);
                m_dataContext.PropertyChanged += ViewModel_PropertyChanged;
                m_dataContext.FilterExpression = FilterExpression;
                m_dataContext.ItemsPerPage = ItemsPerPage;
                m_dataContext.SearchCategories = AdvancedSearch.Categories;
                m_dataContext.LoadSettings();
                m_dataContext.Load();
                RootPanel.DataContext = m_dataContext;

                Application.Current.Exit += Application_Exit;
            }
        }
        //-------------------------------------------------------------------------------------------------//
        protected override bool ExecuteRunning()
        {
            const string STRLOG_MethodName = "ExecuteRunning";

            Logfile.WriteCalled(this.logLevel, STRLOG_ClassName, STRLOG_MethodName);

            bool success = false;
            string logMessage;

            //
            // Get the time now to determine how long execution actually takes
            //
            DateTime startDateTime = DateTime.Now;

            //
            // Calculate execution completion time
            //
            int executionTimeRemaining = 0;
            executionTimeRemaining += this.executionTimes.run;
            executionTimeRemaining += this.executionTimes.stop;
            executionTimeRemaining += this.executionTimes.finalise;
            this.executionCompletionTime = DateTime.Now + TimeSpan.FromSeconds(executionTimeRemaining);
            Logfile.Write(
                String.Format(STRLOG_ExecutionTimeRemaining_arg, executionTimeRemaining));

            //
            // Create the data structure for storing the measurements
            //
            this.measurements = new Measurements();

            //
            // Initialise state machine
            //
            int speed = this.configParameters.speedMin;
            States state = States.CheckStatus;

            //
            // State machine loop
            //
            while (state != States.Done)
            {
                Trace.WriteLine("state: " + state.ToString());

                switch (state)
                {
                    case States.CheckStatus:
                        //
                        // Check machine status before continuing
                        //
                        if ((success = this.CheckStatus()) == true)
                        {
                            state = States.TakeMeasurements;
                        }
                        else
                        {
                            // this.lastError already updated
                        }
                        break;

                    case States.TakeMeasurements:
                        //
                        // Wait a moment before taking the measurements
                        //
                        this.WaitDelay(1);

                        //
                        // Take measurements
                        //
                        if ((success = this.TakeMeasurements()) == true)
                        {
                            state = States.IncreaseSpeed;
                        }
                        else
                        {
                            // this.lastError already updated
                        }
                        break;

                    case States.IncreaseSpeed:
                        //
                        // Check if the desired maximum speed has been reached
                        //
                        if (speed < this.configParameters.speedMax)
                        {
                            //
                            // Increase the speed by one step
                            //
                            speed += this.configParameters.speedStep;
                            logMessage = STRLOG_Speed + speed.ToString();
                            Logfile.Write(logMessage);
                            Trace.WriteLine(logMessage);

                            //
                            // Change the DC drive speed
                            //
                            if ((success = this.dcDrive.ChangeSpeed(speed)) == true)
                            {
                                state = States.CheckStatus;
                            }
                            else
                            {
                                this.lastError = this.dcDrive.LastError;
                            }
                        }
                        else
                        {
                            //
                            // Maximum speed has been reached, all done here
                            //
                            Logfile.Write(STRLOG_MaxSpeedReached + this.configParameters.speedMax.ToString());
                            state = States.Done;
                        }
                        break;
                }

                //
                // Check if any errors occurred
                //
                if (success == false)
                {
                    if (this.lastError != null)
                    {
                        Logfile.WriteError(this.lastError);
                    }
                    state = States.Done;
                }
            }

            //
            // Determine how long execution actually took
            //
            TimeSpan timeSpan = DateTime.Now - startDateTime;
            double totalTime = timeSpan.TotalSeconds;
            logMessage = String.Format(STRLOG_ExecuteTime_Fmt, totalTime);
            Trace.WriteLine(logMessage);

            logMessage += Logfile.STRLOG_Spacer + STRLOG_Success + success.ToString();

            Logfile.WriteCompleted(this.logLevel, STRLOG_ClassName, STRLOG_MethodName, logMessage);

            return success;
        }
示例#56
0
        //-------------------------------------------------------------------------------------------------//
        public bool TakeMeasurement(ref Measurements measurement)
        {
            const string STRLOG_MethodName = "TakeMeasurement";

            Logfile.WriteCalled(this.logLevel, STRLOG_ClassName, STRLOG_MethodName);

            this.lastError = null;
            bool success = false;

            try
            {
                // Wait before taking the measurement
                dcDriveMut.WaitDelay(this.measurementDelay);

                //
                // Take the measurement
                //
                measurement.speed = dcDriveMut.ReadDriveSpeed();
                measurement.voltage = dcDriveMut.ReadArmatureVoltage();
                measurement.fieldCurrent = dcDriveMut.ReadFieldCurrent();
                measurement.load = dcDriveMut.ReadTorque();

                success = true;
            }
            catch (Exception ex)
            {
                this.lastError = ex.Message;
                Logfile.WriteError(ex.Message);
            }

            string logMessage = STRLOG_Success + success.ToString() +
                Logfile.STRLOG_Spacer + STRLOG_Speed + measurement.speed.ToString() + STRLOG_Rpm +
                Logfile.STRLOG_Spacer + STRLOG_Voltage + measurement.voltage + STRLOG_Volts +
                Logfile.STRLOG_Spacer + STRLOG_FieldCurrent + measurement.fieldCurrent.ToString() + STRLOG_Amps;

            Logfile.WriteCompleted(this.logLevel, STRLOG_ClassName, STRLOG_MethodName, logMessage);

            return success;
        }
示例#57
0
        public void ComputeLength_LineString_RetursZeroForLineStringWithoutPoints()
        {
            LineString linestring = new LineString();

            Mock<IDimensionsCalculator> calculatorM = new Mock<IDimensionsCalculator>();
            Measurements target = new Measurements(calculatorM.Object);

            double length = target.ComputeLength(linestring);

            Assert.Equal(0, length);
        }
示例#58
0
        public void ComputeDistance_PointLineString_ReturnsNaNIfLineStringIsEmpty()
        {
            Point point = new Point(new Coordinate(10.1, 20.1));
            LineString linestring = new LineString();

            Mock<IDimensionsCalculator> calculatorM = new Mock<IDimensionsCalculator>();

            Measurements target = new Measurements(calculatorM.Object);
            double distance = target.ComputeDistance(point, linestring);

            Assert.True(double.IsNaN(distance));
        }