Пример #1
0
        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);
                }
            }
        }
Пример #2
0
        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;
 }