예제 #1
0
        /// <summary>
        /// Подготовка данных для расчета погрешности.
        /// </summary>
        /// <param name="address">Адрес устройства.</param>
        /// <param name="selectedChannelsList">Выбранные каналы.</param>
        /// <param name="value">Значение.</param>
        public void ErrorCalculationPrepare(byte address, List <int> selectedChannelsList, double value, TA2007TestMode testMode)
        {
            short data = (short)(address << 12);

            Init();
            _testMode = testMode;
            _errorCalculationValue = value;

            _selectedChannelsList = selectedChannelsList;

            for (int i = 0; i < _selectedChannelsList.Count; i++)
            {
                _channels[_selectedChannelsList[i] - 1] = (short)(_channels[_selectedChannelsList[i] - 1] | data);
                _txA.Add((byte)(_channels[_selectedChannelsList[i] - 1] >> 8));
                _txB.Add((byte)_channels[_selectedChannelsList[i] - 1]);
            }
        }
예제 #2
0
        /// <summary>
        /// Подготовка данных для проверки функционирования каналов.
        /// </summary>
        /// <param name="address">Адрес устройства.</param>
        /// <param name="isPhasing">Флаг фазировки.</param>
        /// <param name="selectedChannelsList">Выбранные каналы.</param>
        public void FunctionCheckPrepare(byte address, bool isPhasing, List <int> selectedChannelsList = null)
        {
            Random          rnd            = new Random();
            SortedSet <int> phasingIndices = new SortedSet <int>();

            _testMode = TA2007TestMode.FunctionCheck;

            short data = isPhasing? (short)(address << 12 | Constants.PHASING) : (short)(address << 12);

            Init();

            if (selectedChannelsList == null)
            {
                _selectedChannelsList = null;

                for (int i = 0; i < _channels.Length; i++)
                {
                    _channels[i] = (short)(_channels[i] | data);
                }

                // Добавляем фазировку случайное кол-во раз в случайные каналы.
                if (!isPhasing)
                {
                    var phasingCount = rnd.Next(0, 32);

                    for (int i = 0; i < phasingCount; i++)
                    {
                        phasingIndices.Add(rnd.Next(0, 32));
                    }

                    foreach (var item in phasingIndices)
                    {
                        _channels[item] = (short)(_channels[item] | Constants.PHASING);
                    }
                }

                for (int i = 0; i < _channels.Length; i++)
                {
                    _txA.Add((byte)(_channels[i] >> 8));
                    _txB.Add((byte)_channels[i]);
                }
            }
            else
            {
                _selectedChannelsList = selectedChannelsList;

                for (int i = 0; i < _selectedChannelsList.Count; i++)
                {
                    _channels[_selectedChannelsList[i] - 1] = (short)(_channels[_selectedChannelsList[i] - 1] | data);
                }

                //// Добавляем фазировку случайное кол-во раз в случайные каналы.
                if (!isPhasing)
                {
                    var phasingCount = rnd.Next(1, _selectedChannelsList.Count + 1);

                    for (int i = 0; i < phasingCount; i++)
                    {
                        phasingIndices.Add(_selectedChannelsList[rnd.Next(_selectedChannelsList.Count)] - 1);
                    }

                    foreach (var item in phasingIndices)
                    {
                        _channels[item] = (short)(_channels[item] | Constants.PHASING);
                    }
                }

                for (int i = 0; i < _selectedChannelsList.Count; i++)
                {
                    _txA.Add((byte)(_channels[_selectedChannelsList[i] - 1] >> 8));
                    _txB.Add((byte)_channels[_selectedChannelsList[i] - 1]);
                }
            }
        }