/// <summary>
 /// Sets the FRCDigitalIOSignal at dioIndex. Should only be used to override robot IO.
 /// </summary>
 /// <param name="robot">FRCRobot object that is connected to the robot.</param>
 /// <param name="dioIndex">The index of the digital out signal to set.</param>
 public void SetDigitalOutSignal(FRCRobot robot, long dioIndex, bool dioValue)
 {
     try
     {
         FRCDigitalIOType   dioType   = (FRCDigitalIOType)robot.IOTypes[FREIOTypeConstants.frDOutType];
         FRCDigitalIOSignal dioSignal = (FRCDigitalIOSignal)dioType.Signals[dioIndex];
         dioSignal.Value = dioValue;
     }
     catch (Exception e) { }
 }
        /// <summary>
        /// Получение списка сигналов и передача в список Signals
        /// </summary>
        /// <param name="robot">экземпляр подключения к роботу</param>
        /// <param name="ioTypeConstant">константа типа сигналов</param>
        /// <returns>возвращаемое значение-текущая задача</returns>
        private async Task GetSignalsIO(FRCRobot robot, FREIOTypeConstants ioTypeConstant)
        {
            Task task = new Task(() =>
            {
                Application.Current.Dispatcher.BeginInvoke(new Action(() =>
                {
                    try
                    {
                        if (robot.IsConnected)
                        {
                            Signals.Clear();
                            switch (ioTypeConstant)
                            {
                            //DIN DOUT
                            case FREIOTypeConstants.frDOutType:
                            case FREIOTypeConstants.frDInType:
                                FRCDigitalIOType dioTypeIn = (FRCDigitalIOType)robot.IOTypes[ioTypeConstant];
                                foreach (FRCDigitalIOSignal item in dioTypeIn.Signals)
                                {
                                    Signals.Add(new IOSignals {
                                        NumberIO = item.LogicalNum, Status = item.Value,
                                        Comment  = item.Comment, TypeConstants = ioTypeConstant
                                    });
                                }

                                break;

                            //UI UO
                            case FREIOTypeConstants.frUOPInType:
                            case FREIOTypeConstants.frUOPOutType:
                                FRCUOPIOType TypeUO = (FRCUOPIOType)robot.IOTypes[ioTypeConstant];
                                foreach (FRCUOPIOSignal item in TypeUO.Signals)
                                {
                                    Signals.Add(new IOSignals {
                                        NumberIO = item.LogicalNum, Status = item.Value,
                                        Comment  = item.Comment, TypeConstants = ioTypeConstant
                                    });
                                }
                                break;

                            //SI SO
                            case FREIOTypeConstants.frSOPInType:
                            case FREIOTypeConstants.frSOPOutType:
                                FRCSOPIOType TypeSO = (FRCSOPIOType)robot.IOTypes[ioTypeConstant];
                                foreach (FRCSOPIOSignal item in TypeSO.Signals)
                                {
                                    Signals.Add(new IOSignals {
                                        NumberIO = item.LogicalNum, Status = item.Value, Comment = item.Comment, TypeConstants = ioTypeConstant
                                    });
                                }
                                break;

                            //FLAG
                            case FREIOTypeConstants.frFlagType:
                                FRCFlagType TypeFlag = (FRCFlagType)robot.IOTypes[ioTypeConstant];
                                foreach (FRCFlagSignal item in TypeFlag.Signals)
                                {
                                    Signals.Add(new IOSignals {
                                        NumberIO = item.LogicalNum, Status = item.Value, Comment = item.Comment, TypeConstants = ioTypeConstant
                                    });
                                }
                                break;

                            //RO RI
                            case FREIOTypeConstants.frRDOutType:
                            case FREIOTypeConstants.frRDInType:
                                FRCRobotIOType TypeRI = (FRCRobotIOType)robot.IOTypes[ioTypeConstant];
                                foreach (FRCRobotIOSignal item in TypeRI.Signals)
                                {
                                    Signals.Add(new IOSignals {
                                        NumberIO = item.LogicalNum, Status = item.Value, Comment = item.Comment, TypeConstants = ioTypeConstant
                                    });
                                }
                                break;
                            }
                        }
                    }
                    catch (Exception e)
                    {
                        MessageBox.Show(e.Message, "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error);
                    }
                }));
            }, TaskCreationOptions.LongRunning);

            task.Start();
            await task;
        }