示例#1
0
        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
                    {
                    }
                }
            }
        }
示例#2
0
        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));
        }