Exemplo n.º 1
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;
        }
Exemplo n.º 2
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);
            }
        }
Exemplo n.º 3
0
        public IEnumerable <ControlEventBase> GetNewEvent()
        {
            if (string.IsNullOrEmpty(Connections[0].GetAssignedHardware()))
            {
                return(null);
            }

            var ad         = Profile.AccessDescriptor.GetAccessDesciptorById(AssignedAccessDescriptorId);
            var lineState  = ((DescriptorBinaryOutput)ad).GetLineState();
            var powerState = ad.IsPowerOn();

            if (lineState == _previousState && powerState == _previousPowerState)
            {
                return(null);
            }
            _previousState      = lineState;
            _previousPowerState = powerState;
            var ev = new LampEvent
            {
                Hardware = ControlProcessorHardware.GenerateByGuid(Connections[0].GetAssignedHardware()),
                IsOn     = _previousPowerState && _previousState
            };

            return(new List <ControlEventBase> {
                ev
            });
        }
Exemplo n.º 4
0
        public IEnumerable <ControlEventBase> GetNewEvent()
        {
            if (string.IsNullOrEmpty(Connections[0].GetAssignedHardware()))
            {
                return(null);
            }

            var ad       = Profile.AccessDescriptor.GetAccessDesciptorById(AssignedAccessDescriptorId);
            var position = ((DescriptorIndicator)ad).GetIndicatorValue();

            if (position == null || position == _previousPosition)
            {
                return(null);
            }
            _previousPosition = position;
            var ev = new SteppingMotorEvent
            {
                Hardware = ControlProcessorHardware.GenerateByGuid(Connections[0].GetAssignedHardware()),
                Position = (short)CalculateStepperPosition((short)position)
            };

            return(new List <ControlEventBase> {
                ev
            });
        }
Exemplo n.º 5
0
        public IEnumerable <ControlEventBase> GetClearEvent()
        {
            if (string.IsNullOrEmpty(Connections[0].GetAssignedHardware()))
            {
                return(new ControlEventBase[0]);
            }
            var ev = new LampEvent
            {
                Hardware = ControlProcessorHardware.GenerateByGuid(Connections[0].GetAssignedHardware()),
                IsOn     = false
            };

            // Требуется для того, чтобы при изменении, например, числа цифр в индикаторе не оставались гореть цифры
            _previousState = false;
            return(new List <ControlEventBase> {
                ev
            });
        }
        public IEnumerable <ControlEventBase> GetClearEvent()
        {
            if (string.IsNullOrEmpty(Connections[0].GetAssignedHardware()))
            {
                return(new ControlEventBase[0]);
            }
            var eventArray = new List <ControlEventBase>();

            var digitsNumber          = ((DescriptorIndicator)AccessDescriptor).GetNumberOfDigits();
            var elementInDigitCounter = 0;
            var digitsCounter         = 0;
            var hw               = ControlProcessorHardware.GenerateByGuid(Connections[0].GetAssignedHardware());
            var currentBlockId   = hw.BlockId;
            var currentControlId = hw.ControlId;

            while (digitsCounter < digitsNumber)
            {
                var hardware = ControlProcessorHardware.GenerateByGuid(Connections[0].GetAssignedHardware());
                if (currentControlId == 16)
                {
                    currentBlockId++;
                    currentControlId = 0;
                }

                hardware.ControlId = currentControlId;
                hardware.BlockId   = currentBlockId;
                var ev = new LampEvent
                {
                    Hardware = hardware,
                    IsOn     = false
                };
                eventArray.Add(ev);
                currentControlId++;
                elementInDigitCounter++;
                if (elementInDigitCounter == 8)
                {
                    elementInDigitCounter = 0;
                    digitsCounter++;
                }
            }
            // Требуется для того, чтобы при изменении, например, числа цифр в индикаторе не оставались гореть цифры
            _previousIndicatorText = "";
            return(eventArray);
        }
Exemplo n.º 7
0
        public ControlProcessorHardware[] GetAllAssignedHardwares()
        {
            var modulesString = new List <string>();
            var modules       = new List <ControlProcessorHardware>();

            foreach (var controlProcessor in _storage.Values)
            {
                var a = controlProcessor.GetUsedHardwareList().Distinct();
                foreach (var assignment in a)
                {
                    if (string.IsNullOrEmpty(assignment))
                    {
                        continue;
                    }

                    var cph = ControlProcessorHardware.GenerateByGuid(assignment);
                    if (cph == null)
                    {
                        continue;
                    }

                    if (cph.ModuleType != HardwareModuleType.Button)
                    {
                        continue;
                    }

                    var module = cph.MotherBoardId + "|" + cph.ModuleType + "|" + cph.ModuleId;

                    if (modulesString.Contains(module))
                    {
                        continue;
                    }

                    modules.Add(cph);
                    modulesString.Add(module);
                }
            }
            return(modules.ToArray());
        }
Exemplo n.º 8
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
            });
        }
        private IEnumerable <ControlEventBase> LetterToControlEvents(uint digitNumber, char symbol, bool addPoint)
        {
            var eventArray     = new List <LampEvent>();
            var symbolSegments = _symbolLightedSegments[symbol];

            foreach (var i in _segmentToPinMapping)
            {
                var ev = new LampEvent
                {
                    Hardware = ControlProcessorHardware.GenerateByGuid(Connections[0].GetAssignedHardware()),
                    IsOn     = symbolSegments.Contains(i.Key) || (addPoint && i.Key == 'P')
                };
                // Note: Только для железа, где блок состоит из 16 пинов (F3)
                uint addToBlock     = 0;
                uint addToControlId = 0;
                if (ev.Hardware.ControlId == 0)
                {
                    // 12 34 56 78 - номер символа
                    // 00 11 22 33 - добавить к блоку

                    // Если нечётное
                    if (digitNumber % 2 == 1)
                    {
                        addToBlock     = (digitNumber + 1) / 2 - 1;
                        addToControlId = 0;
                    }
                    else
                    {
                        addToBlock     = digitNumber / 2 - 1;
                        addToControlId = 8;
                    }
                }
                if (ev.Hardware.ControlId == 8)
                {
                    // 1 23 45 67
                    // 0 11 22 33

                    // Если нечётное
                    if (digitNumber % 2 == 1)
                    {
                        addToBlock     = (digitNumber + 1) / 2 - 1;
                        addToControlId = 8;
                    }
                    else
                    {
                        addToBlock     = digitNumber / 2;
                        addToControlId = 0;
                    }
                }
                ev.Hardware.BlockId  += addToBlock;
                ev.Hardware.ControlId = (uint)(addToControlId + i.Value);
                //if (ev.Hardware.ControlId >= 8)
                //    ev.Hardware.ControlId = 15 - (ev.Hardware.ControlId - 8);
                // Если вышли за пределы блоков - не сохраняем  событие
                var capacity = HardwareManager.GetCapacity(ev.Hardware, DeviceSubType.Block);
                if (capacity.Names.Length == 0 || capacity.DeviceSubtypeIsNotSuitableForCurrentHardware || ev.Hardware.BlockId > capacity.Names.Select(int.Parse).Max())
                {
                    continue;
                }
                eventArray.Add(ev);
            }
            return(eventArray);
        }