예제 #1
0
        /// <summary>
        /// Событие таймера при котором меняется фаза поиска (погасить контрол/включить контрол)
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private static void OnTimedEvent(object sender, EventArgs e)
        {
            _searchPhase = !_searchPhase;
            if (string.IsNullOrEmpty(_contolInSearchGuid))
            {
                return;
            }
            var hardware = ControlProcessorHardware.GenerateByGuid(_contolInSearchGuid);

            if (hardware.ModuleType == HardwareModuleType.BinaryOutput)
            {
                var ev = new LampEvent
                {
                    Hardware = hardware,
                    IsOn     = _searchPhase
                };
                PostOutgoingSearchEvent(ev);
            }
            if (hardware.ModuleType == HardwareModuleType.Indicator)
            {
                var ev = new IndicatorEvent
                {
                    Hardware      = hardware,
                    IndicatorText = _searchPhase ? "-------" : "       "
                };
                PostOutgoingSearchEvent(ev);
            }
        }
예제 #2
0
        /// <summary>
        /// Прекратить поиск
        /// </summary>
        public static void StopComponentSearch()
        {
            if (string.IsNullOrEmpty(_contolInSearchGuid))
            {
                return;
            }
            ControlEventBase ev = null;

            if (SoftDumpCache.ContainsKey(_contolInSearchGuid))
            {
                ev = SoftDumpCache[_contolInSearchGuid];
            }
            if (ev == null)
            {
                var hardware = ControlProcessorHardware.GenerateByGuid(_contolInSearchGuid);
                if (hardware.ModuleType == HardwareModuleType.BinaryOutput)
                {
                    ev = new LampEvent
                    {
                        Hardware = hardware,
                        IsOn     = false
                    };
                }
                if (hardware.ModuleType == HardwareModuleType.Indicator || hardware.ModuleType == HardwareModuleType.LedMatrixIndicator)
                {
                    ev = new IndicatorEvent
                    {
                        Hardware      = hardware,
                        IndicatorText = "       "
                    };
                }
            }
            PostOutgoingSearchEvent(ev);
            _contolInSearchGuid = string.Empty;
        }
예제 #3
0
        public IEnumerable <ControlEventBase> GetClearEvent()
        {
            if (string.IsNullOrEmpty(Connections[0].GetAssignedHardware()))
            {
                return(new ControlEventBase[0]);
            }
            var ev = new IndicatorEvent
            {
                Hardware      = ControlProcessorHardware.GenerateByGuid(Connections[0].GetAssignedHardware()),
                IndicatorText = "       ",
            };

            // Требуется для того, чтобы при изменении, например, числа цифр в индикаторе не оставались гореть цифры
            _previousIndicatorText = string.Empty;
            return(new List <ControlEventBase> {
                ev
            });
        }
예제 #4
0
        public IEnumerable <ControlEventBase> GetNewEvent()
        {
            if (string.IsNullOrEmpty(Connections[0].GetAssignedHardware()))
            {
                return(null);
            }
            var text = AccessDescriptor.GetIndicatorText();

            if (text == _previousIndicatorText)
            {
                return(null);
            }
            _previousIndicatorText = text;
            var ev = new IndicatorEvent
            {
                Hardware      = ControlProcessorHardware.GenerateByGuid(Connections[0].GetAssignedHardware()),
                IndicatorText = text,
            };

            return(new List <ControlEventBase> {
                ev
            });
        }
예제 #5
0
        public void ArccCheckIndicatorEventWithCuttedText()
        {
            const string testMotherboardId = "TestMotherboard";
            var          arccProcessor     = new ArccHardwareDataProcessor(testMotherboardId);
            // Коды для текста. Код - значение
            // 00 - "0"
            // 01 - "1"
            // 02 - "2"
            // 03 - "3"
            // 04 - "4"
            // 05 - "5"
            // 06 - "6"
            // 07 - "7"
            // 08 - "8"
            // 09 - "9"
            // 10 - "0."
            // 11 - "1."
            // 12 - "2."
            // 13 - "3."
            // 14 - "4."
            // 15 - "5."
            // 16 - "6."
            // 17 - "7."
            // 18 - "8."
            // 19 - "9."
            // 20 - " "
            // 21 - "F"
            // 22 - "D"
            // 23 - "C"
            // 24 - "-" - зажжённый средний сегмент
            // 25 - "_" - зажжённый нижний сегмент
            // 26 - "¯" - зажжённый верхний сегмент
            // 27 - "I"
            // 28 - "r"
            // 29 - "o"
            // 30 - "."
            // 31 - "E"

            // Длина пакета модуля индикаторов - 10 байт
            // Текст для вывода "56"
            var testOutputDataForIndicatorModule = new byte[]
            {
                5,  // 5 - признак группы плат индикаторов
                3,  // ID платы
                1,  // команда. 1 - вывести текст
                20, // " " (текст)
                20, // " " (текст)
                20, // " " (текст)
                20, // " " (текст)
                20, // " " (текст)
                5,  // "5" (текст)
                6   // "6" (текст)
            };
            var ev = new IndicatorEvent
            {
                Hardware = new ControlProcessorHardware
                {
                    MotherBoardId = testMotherboardId,
                    ModuleType    = HardwareModuleType.Indicator,
                    ModuleId      = 3,
                    BlockId       = 0,
                    ControlId     = 0
                },
                IndicatorText = "56" // Максимальная длина текста - 7 символов
            };
            var byteArray = arccProcessor.ConvertEventToByteArrayForHardware(ev);

            Assert.IsTrue(byteArray.SequenceEqual(testOutputDataForIndicatorModule));
        }