Exemplo n.º 1
0
        public EditSensorViewModel(SensorDBItem sensor, ProbeDBItem probe)
        {
            if (sensor == null)
                throw new ArgumentNullException("sensor", "sensor is null.");
            if (probe == null)
                throw new ArgumentNullException("probe", "probe is null.");

            _probe = probe;
            _sensor = sensor;
            _availableIndexes = CalculateIndexes();
            SensorID = _sensor.SensorId == -1 ? _availableIndexes.FirstOrDefault() : _sensor.SensorId;
            SensorIndex = _sensor.SensorIndex;
            Name = sensor.Name;
            ActualPosition = sensor.ActualPosition;
            _view = new EditSensor();
            _view.DataContext = this;
            Ok = new Command((x) => OkAction(), (x) => true);
            Cancel = new Command((x) => CancelAction(), (x) => true);
        }
Exemplo n.º 2
0
 private void AddSensorAction()
 {
     var s = new SensorDBItem();
     var vm = new EditSensorViewModel(s, CurrentProbe);
     vm.Show();
     if (vm.Result == EditNodeResult.Ok)
     {
         CurrentProbe.Sensors.Add(s);
         CurrentSensor = s;
     }
 }
Exemplo n.º 3
0
 private void AttachToHistoryCollection(SensorDBItem value)
 {
     History.Clear();
     if (_CurrentSensor != null)
         _CurrentSensor.History.CollectionChanged -= OnHistoryChanged;
     if (value != null)
     {
         value.History.CollectionChanged += OnHistoryChanged;
         foreach (var item in value.History.OrderBy(i => i.TimeStamp))
             History.Add(new SensorDBHistoryViewModel(value, item));
     }
 }
Exemplo n.º 4
0
        private void FillTestDB()
        {
            var r1 = new RoadDBItem { Наименование = "Ростов-Краснодар" };

            var p1 = new ProbeDBItem { ИмяЗонда = "Зонд 1" };
            p1.Sensors.Add(new SensorDBItem { SensorId = 331, SensorIndex = 1, Name = "т.б.", ActualPosition = -120 });

            var s2 = new SensorDBItem { SensorId = 332, SensorIndex = 2, Name = "гр.", ActualPosition = -32 };
            s2.History.Add(new SensorDBHistory { Sensor1Value = 9578, Sensor2Value = 7562, Temperature = 23, Position = 897.32d, TimeStamp = DateTime.Now.AddMonths(-1) });
            s2.History.Add(new SensorDBHistory { Sensor1Value = 10780, Sensor2Value = 9578, Temperature = 12, Position = 898.32d, TimeStamp = DateTime.Now.AddMonths(-2) });
            s2.History.Add(new SensorDBHistory { Sensor1Value = 13890, Sensor2Value = 11234, Temperature = 17, Position = 899.32d, TimeStamp = DateTime.Now.AddMonths(-3) });
            p1.Sensors.Add(s2);

            r1.Probes.Add(p1);
            r1.Probes.Add(new ProbeDBItem { ИмяЗонда = "Зонд 2" });

            var r2 = new RoadDBItem { Наименование = "Ростов-Таганрог" };
            r2.Probes.Add(new ProbeDBItem { ИмяЗонда = "Зонд 1" });
            r2.Probes.Add(new ProbeDBItem { ИмяЗонда = "Зонд 2" });
            r2.Probes.Add(new ProbeDBItem { ИмяЗонда = "Зонд 3" });
            r2.Probes.Add(new ProbeDBItem { ИмяЗонда = "Зонд 4" });

            _DataBaseManager.DataBase.Roads.Add(r1);
            _DataBaseManager.DataBase.Roads.Add(r2);           
        }
        public SensorDBHistoryViewModel(SensorDBItem sensor, SensorDBHistory sensorHistory)
        {
            if (sensor == null)
                throw new ArgumentNullException("sensor", "sensor is null.");
            if (sensorHistory == null)
                throw new ArgumentNullException("sensorHistory", "sensorHistory is null.");

            _sensor = sensor;
            _sensorHistory = sensorHistory;
        }
Exemplo n.º 6
0
        public bool AskSensor(SensorDBItem sensor)
        {
            if (string.IsNullOrEmpty(SelectedPort))
            {
                SynchronisationHelper.ShowMessage("Порт не выбран", "Ошибка", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Exclamation);
                return false;
            }

            SynchronisationHelper.ShowMessage("Запрос может занять несколько секунд.", "Внимание!", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Information);

            try
            {
                using (SerialPort port = new SerialPort(SelectedPort, 38400))
                {
                    port.Open();

                    PowerOn(port);

                    for (int i = 1; i <= RETRY; i++) //Запрос адреса
                    {
                        SendCommand((byte)(ModIndexToBt(sensor.SensorIndex) + ADDRESS), port);
                        int? address = ReadBytes(port);
                        if (!address.HasValue)  //Опрос завершился ошибкой - идем на перееопрос
                        {
                            if (i != RETRY) continue;
                            else   //Датчик не ответил
                            {
                                PowerOff(port);
                                SynchronisationHelper.ShowMessage("Датчик не отвечает", "Ошибка", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Error);
                                return false;
                            }
                        }


                        if (address.Value != sensor.SensorId) //Адрес не совпал поругались и прервали опрос
                        {
                            PowerOff(port);
                            SynchronisationHelper.ShowMessage("Индекс датчика не соотвествует выбранному", "Ошибка", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Error);
                            return false;
                        }
                        else
                            break;  //Адрес совпал выходим из опроса
                    }
                    System.Threading.Thread.Sleep(200); //Задержка
                    int? sens1 = 0;
                    for (int i = 0; i <= RETRY; i++) //Опрос первого датчика
                    {
                        SendCommand((byte)(ModIndexToBt(sensor.SensorIndex) + SENSOR1), port);
                        sens1 = ReadBytes(port);
                        if (sens1.HasValue)
                            break;

                        if (i == RETRY)
                        {
                            PowerOff(port);
                            SynchronisationHelper.ShowMessage("Датчик не ответил на запросы первого показания", "Ошибка", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Error);
                            return false;
                        }
                    }
                    System.Threading.Thread.Sleep(200); //Задержка
                    int? sens2 = 0;
                    for (int i = 0; i <= RETRY; i++) //Опрос первого датчика
                    {
                        SendCommand((byte)(ModIndexToBt(sensor.SensorIndex) + SENSOR2), port);
                        sens2 = ReadBytes(port);
                        if (sens2.HasValue)
                            break;

                        if (i == RETRY)
                        {
                            PowerOff(port);
                            SynchronisationHelper.ShowMessage("Датчик не ответил на запросы второго показания", "Ошибка", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Error);
                            return false;
                        }
                    }
                    System.Threading.Thread.Sleep(2500); //Задержка
                    int? temp = 0;
                    for (int i = 0; i <= RETRY; i++) //Опрос первого температуры
                    {
                        SendCommand((byte)(ModIndexToBt(sensor.SensorIndex) + TEMP), port);
                        temp = ReadBytes(port);
                        if (temp.HasValue)
                        {
                            temp = GetTemperature(temp.Value) / 16;
                            break;
                        }

                        if (i == RETRY)
                        {
                            PowerOff(port);
                            SynchronisationHelper.ShowMessage("Датчик не ответил на запросы температуры", "Ошибка", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Error);
                            return false;
                        }
                    }

                    var sdbh = new SensorDBHistory { Sensor1Value = sens1.Value, Sensor2Value = sens2.Value, Temperature = temp.Value, TimeStamp = DateTime.Now };
                    sensor.History.Add(sdbh);

                    PowerOff(port);
                }
            }
            catch (Exception err)
            {
                SynchronisationHelper.ShowMessage(err.Message, "Ошибка", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Error);
            }
            return false;
        }