private async Task OnExecuteOneQuery() { if (DeviceContext.DataProviderContainer.DataProvider.IsSuccess) { IModbusMemorySettings modbusMemorySettings = _modbusMemorySettingsViewModel.GetModbusMemorySettings(); if (modbusMemorySettings.IsDiscretOption) { IQueryResult <bool[]> queryResult = await DeviceContext.DataProviderContainer.DataProvider.Item.ReadCoilStatusAsync( (ushort)modbusMemorySettings.BaseAdress, ApplicationGlobalNames.QueriesNames.MODBUS_MEMORY_QUERY_KEY, (ushort)(modbusMemorySettings.NumberOfPoints * 16)); UpdateEntities(queryResult); } else { IQueryResult <ushort[]> queryResult = await DeviceContext.DataProviderContainer.DataProvider.Item.ReadHoldingResgistersAsync( (ushort)modbusMemorySettings.BaseAdress, (ushort)modbusMemorySettings.NumberOfPoints, ApplicationGlobalNames.QueriesNames.MODBUS_MEMORY_QUERY_KEY); UpdateEntities(queryResult); } } }
private void OnModbusMemorySettingsChanged(IModbusMemorySettings modbusMemorySettings) { bool isQueriesWasStartedBefore = false; if (IsQueriesStarted) { isQueriesWasStartedBefore = true; IsQueriesStarted = false; } if (ModbusMemoryEntityViewModels.Count != modbusMemorySettings.NumberOfPoints) { ModbusMemoryEntityViewModels.Clear(); } foreach (IModbusMemoryEntityViewModel modbusMemoryEntityViewModel in ModbusMemoryEntityViewModels) { modbusMemoryEntityViewModel.SetViewSetOption(modbusMemorySettings.IsDiscretOption); } //всякие условия вокруг - оптимизация вывода, чтобы не перерисовывать все каждый раз for (int i = 0; i < modbusMemorySettings.NumberOfPoints; i++) { if (_modbusConversionParametersViewModels.Count < i + 1) { _modbusConversionParametersViewModels.Add( _container.Resolve <IModbusConversionParametersViewModel>()); } if (ModbusMemoryEntityViewModels.Count <= i) { ModbusMemoryEntityViewModel modbusMemoryEntityViewModel = new ModbusMemoryEntityViewModel(_memoryBitViewModelGettingFunc, _modbusMemoryEntityGettingFunc, _modbusConversionParametersViewModels[i]); modbusMemoryEntityViewModel.SetViewSetOption(modbusMemorySettings.IsDiscretOption); modbusMemoryEntityViewModel.SetAddress(modbusMemorySettings.BaseAdress + i); ModbusMemoryEntityViewModels.Add(modbusMemoryEntityViewModel); } else { ModbusMemoryEntityViewModels[i].SetViewSetOption(modbusMemorySettings.IsDiscretOption); ModbusMemoryEntityViewModels[i].SetAddress(modbusMemorySettings.BaseAdress + i); } } if (isQueriesWasStartedBefore) { IsQueriesStarted = true; } else { ModbusMemoryEntityViewModels.ForEach((model => model.SetError())); } }
public ModbusMemorySettingsViewModel(IModbusMemorySettings modbusMemorySettings) { this._modbusMemorySettings = modbusMemorySettings; this.NumberOfPointsCollection = new ObservableCollection <int>() { 8, 16, 24, 32 }; this.NumberOfPoints = this.NumberOfPointsCollection[1]; this.AddressStepDownCommand = new RelayCommand(this.OnAddressStepDownExecute); this.AddressStepUpCommand = new RelayCommand(this.OnAddressStepUpExecute); this.IsDiscretTabSelected = false; }