/// <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; }
/// <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); } }
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 }); }
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 }); }
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); }
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()); }
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); }