private async Task CheckDevices() { if (_isInterrogationStopped) { return; } if (_devicesContainerService?.Creators != null) { foreach (IDeviceCreator creator in _devicesContainerService.Creators) { try { if (creator?.ConnectionState?.DefaultComPortConfiguration == null) { continue; } _modbusRtuConnection.ComPortConfiguration = creator.ConnectionState.DefaultComPortConfiguration; _modbusRtuConnection.SlaveId = SlaveId; System.Collections.Generic.List <string> ports = _modbusRtuConnection.GetAvailablePorts(); var device = creator.Create(); foreach (string port in ports) { _modbusRtuConnection.PortName = port; _comConnectionManager.SetComPortConfigurationByName( _modbusRtuConnection.ComPortConfiguration, port); if ((await _modbusRtuConnection.TryOpenConnectionAsync(null)).IsSuccess) { try { var res = await this._connectionService.CheckConnection(creator.ConnectionState, new DeviceContext(null, null, "test", new ConnectionContainer(this._modbusRtuConnection), device.DeviceSharedResources)); bool isMatches = res.IsSuccess; if (isMatches) { IDeviceDefinitionViewModel deviceDefinitionViewModel = _deviceDefinitionCreator(); creator.AvailableConnection = _modbusRtuConnection.Clone() as IDeviceConnection; deviceDefinitionViewModel.Model = creator; deviceDefinitionViewModel.ConnectionDescription = _modbusRtuConnection.PortName; DeviceDefinitionViewModels.Add(deviceDefinitionViewModel); } } finally { await Task.Run(() => { _modbusRtuConnection.CloseConnection(); }); } } } } finally { } } } }
private async void OnInterrogateExecute() { IsDevicesNotFound = false; RaisePropertyChanged(nameof(IsDevicesNotFound)); IsInterrogationNotInProcess = false; (AddDeviceCommand as RelayCommand <object>)?.RaiseCanExecuteChanged(); RaisePropertyChanged(nameof(IsInterrogationNotInProcess)); DeviceDefinitionViewModels.Clear(); await CheckDevices(); IsInterrogationNotInProcess = true; _isInterrogationStopped = false; (StopInterrogationCommand as RelayCommand)?.RaiseCanExecuteChanged(); (AddDeviceCommand as RelayCommand <object>)?.RaiseCanExecuteChanged(); IsDevicesNotFound = DeviceDefinitionViewModels.Count == 0; RaisePropertyChanged(nameof(IsDevicesNotFound)); RaisePropertyChanged(nameof(IsInterrogationNotInProcess)); }