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); }
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; } }
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)); } }
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; }
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; }