public void AddStandardTurning(XBase xBase) { Add(FormulaOperationType.DUP); AddGetBit(XStateBit.Norm, xBase); Add(FormulaOperationType.AND, comment: "Смешивание с битом Дежурный Устройства"); AddPutBit(XStateBit.TurnOn_InAutomatic, xBase); Add(FormulaOperationType.COM); AddGetBit(XStateBit.Norm, xBase); Add(FormulaOperationType.AND, comment: "Смешивание с битом Дежурный Устройства"); AddPutBit(XStateBit.TurnOff_InAutomatic, xBase); }
public void AddGetBitOff(XStateBit stateBit, XBase xBase) { Add(FormulaOperationType.GETBIT, (byte)stateBit, xBase.GKDescriptorNo); Add(FormulaOperationType.GETBIT, (byte)XStateBit.Ignore, xBase.GKDescriptorNo); Add(FormulaOperationType.COM); Add(FormulaOperationType.AND); }
public static void SendControlCommandMRO(XBase xBase, byte code, byte code2) { var bytes = new List<byte>(); var databaseNo = xBase.GKDescriptorNo; bytes.AddRange(BytesHelper.ShortToBytes(databaseNo)); bytes.Add(code); bytes.Add(code2); if (xBase.GkDatabaseParent != null) { WatcherManager.Send(OnCompleted, xBase.GkDatabaseParent, 3, 13, 0, bytes); } }
public void Parse(List<byte> bytes, XBase xBase) { XBase = xBase; ushort controllerAddress = BytesHelper.SubstructShort(bytes, 2); AddressOnController = BytesHelper.SubstructShort(bytes, 4); PhysicalAddress = BytesHelper.SubstructShort(bytes, 6); Description = BytesHelper.BytesToStringDescription(bytes); int serialNo = BytesHelper.SubstructInt(bytes, 40); int state = BytesHelper.SubstructInt(bytes, 44); TypeNo = BytesHelper.SubstructShort(bytes, 0); StateBits = XStatesHelper.StatesFromInt(state); ParseAdditionalParameters(bytes, xBase); CheckConnectionLost(xBase); }
public static void SendControlCommand(XBase xBase, byte code, string description) { var bytes = new List<byte>(); var databaseNo = xBase.GKDescriptorNo; bytes.AddRange(BytesHelper.ShortToBytes(databaseNo)); bytes.Add(code); if (xBase.GkDatabaseParent != null) { WatcherManager.Send(new Action<SendResult>(sendResult => { if (sendResult.HasError) { GKProcessorManager.AddGKMessage(EventName.Ошибка_при_выполнении_команды, description, xBase, null); } }), xBase.GkDatabaseParent, 3, 13, 0, bytes); } }
public static OperationResult<List<XProperty>> GetSingleParameter(XBase xBase) { try { var commonDatabase = GetCommonDatabase(xBase); if (commonDatabase != null) { var descriptor = commonDatabase.Descriptors.FirstOrDefault(x => x.XBase.BaseUID == xBase.BaseUID); if (descriptor != null) { var result = GetDeviceParameters(commonDatabase, descriptor); return result; } } } catch (Exception e) { Logger.Error(e, "ParametersHelper.GetSingleParameter"); } return new OperationResult<List<XProperty>>("Непредвиденная ошибка"); }
public static string SetSingleParameter(XBase xBase, List<byte> parameterBytes) { try { var commonDatabase = GetCommonDatabase(xBase); if (commonDatabase != null) { var descriptor = commonDatabase.Descriptors.FirstOrDefault(x => x.XBase.BaseUID == xBase.BaseUID); if (descriptor != null) { var result = SetDeviceParameters(commonDatabase, descriptor, parameterBytes); if (result != null) { return "Ошибка"; } } } } catch (Exception e) { Logger.Error(e, "ParametersHelper.SetSingleParameter"); } return null; }
public static void GKStop(XBase xBase, string userName) { Watcher.SendControlCommand(xBase, XStateBit.Stop_InManual, "Остановка пуска"); AddGKMessage(EventName.Команда_оператора, EventDescription.Остановка_пуска, xBase, userName); }
public static void AddGKMessage(EventName message, EventDescription description, XBase xBase, string userName, bool isAdministrator = false) { AddGKMessage(message, description.ToDescription(), xBase, userName, isAdministrator); }
public static void GKTurnOn(XBase xBase, string userName) { Watcher.SendControlCommand(xBase, XStateBit.TurnOn_InManual, "Включить"); AddGKMessage(EventName.Команда_оператора, EventDescription.Включить, xBase, userName); }
public static void GKTurnOffNow(XBase xBase, string userName) { Watcher.SendControlCommand(xBase, XStateBit.TurnOffNow_InManual, "Выключить немедленно"); AddGKMessage(EventName.Команда_оператора, EventDescription.Выключить_немедленно, xBase, userName); }
public static void GKSetManualRegime(XBase xBase, string userName) { Watcher.SendControlCommand(xBase, XStateBit.SetRegime_Manual, "Перевод в ручной режим"); AddGKMessage(EventName.Команда_оператора, EventDescription.Перевод_в_ручной_режим, xBase, userName); }
public static void GKSetIgnoreRegime(XBase xBase, string userName) { Watcher.SendControlCommand(xBase, XStateBit.SetRegime_Off, "Перевод в отключенный режим"); AddGKMessage(EventName.Команда_оператора, EventDescription.Перевод_в_отключенный_режим, xBase, userName); }
static void AddInputOutputObject(List<XBase> objects, XBase newObject) { if (!objects.Contains(newObject)) objects.Add(newObject); }
void CheckServiceRequired(XBase xBase, JournalItem journalItem) { if (journalItem.Name == "Запыленность" || journalItem.Name == "Запыленность устранена") { if (xBase is XDevice) { var device = xBase as XDevice; if (journalItem.Name == "Запыленность") device.BaseState.IsService = true; if (journalItem.Name == "Запыленность устранена") device.BaseState.IsService = false; } } }
public void AddPutBit(XStateBit stateBit, XBase xBase) { Add(FormulaOperationType.PUTBIT, (byte)stateBit, xBase.GKDescriptorNo); }
void CheckConnectionLost(XBase xBase) { if (xBase is XDevice) { var connectionLostParameter = additionalShortParameters[9]; var connectionLostCount = connectionLostParameter / 256; XDevice xDevice = xBase as XDevice; XDevice connectionLostParent = xDevice.KAUParent; if (xDevice.Driver.IsKauOrRSR2Kau) { connectionLostParent = xDevice.GKParent; connectionLostCount = connectionLostParameter % 256; } if (connectionLostParent != null) { var property = connectionLostParent.Properties.FirstOrDefault(x => x.Name == "ConnectionLostCount"); if (property != null) { if (connectionLostCount >= property.Value) { AdditionalStates = new List<XAdditionalState>() { new XAdditionalState() { StateClass = XStateClass.Failure, Name = "Потеря связи" } }; } } } } }
public void GKStop(XBase xBase) { if (IsGKAsAService) { SafeOperationCall(() => { FiresecService.GKStop(xBase.BaseUID, xBase.ObjectType); }, "GKStop"); } else { GKProcessorManager.GKStop(xBase, FiresecManager.CurrentUser.Name); } }
public OperationResult<List<XProperty>> GKGetSingleParameter(XBase xBase) { if (IsGKAsAService) { return SafeOperationCall<List<XProperty>>(() => { return FiresecService.GKGetSingleParameter(xBase.BaseUID); }, "GetSingleParameter"); } else { return GKProcessorManager.GKGetSingleParameter(xBase); } }
public OperationResult<bool> GKSetSingleParameter(XBase xBase, List<byte> parameterBytes) { if (IsGKAsAService) { return SafeOperationCall<bool>(() => { return FiresecService.GKSetSingleParameter(xBase.BaseUID, parameterBytes); }, "SetSingleParameter"); } else { return GKProcessorManager.GKSetSingleParameter(xBase, parameterBytes); } }
public static void AddGKMessage(EventName message, string description, XBase xBase, string userName, bool isAdministrator = false) { Guid uid = Guid.Empty; var journalItemType = JournalItemType.System; if (xBase != null) { if (xBase is XDevice) { uid = (xBase as XDevice).UID; journalItemType = JournalItemType.Device; } if (xBase is XZone) { uid = (xBase as XZone).UID; journalItemType = JournalItemType.Zone; } if (xBase is XDirection) { uid = (xBase as XDirection).UID; journalItemType = JournalItemType.Direction; } if (xBase is XDelay) { uid = (xBase as XDelay).UID; journalItemType = JournalItemType.Delay; } if (xBase is XPim) { uid = (xBase as XPim).UID; journalItemType = JournalItemType.Pim; } } var journalItem = new JournalItem() { SystemDateTime = DateTime.Now, DeviceDateTime = DateTime.Now, JournalItemType = journalItemType, StateClass = EventNamesHelper.GetStateClass(message), Name = message.ToDescription(), Description = description, ObjectUID = uid, ObjectStateClass = XStateClass.Norm, UserName = userName, SubsystemType = XSubsystemType.System }; if (xBase != null) { journalItem.ObjectName = xBase.PresentationName; journalItem.GKObjectNo = (ushort)xBase.GKDescriptorNo; } GKDBHelper.Add(journalItem); OnNewJournalItem(journalItem, isAdministrator); var gkCallbackResult = new GKCallbackResult(); gkCallbackResult.JournalItems.Add(journalItem); OnGKCallbackResult(gkCallbackResult); }
void ParseAdditionalParameters(List<byte> bytes, XBase xBase) { AdditionalStates = new List<XAdditionalState>(); for (int i = 0; i < 10; i++) { var additionalShortParameter = BytesHelper.SubstructShort(bytes, bytes.Count - 20 + i * 2); additionalShortParameters.Add(additionalShortParameter); } var driver = XManager.DriversConfiguration.XDrivers.FirstOrDefault(x => x.DriverTypeNo == TypeNo); if (driver != null) { var driverType = driver.DriverType; if (driverType == XDriverType.GK && XBase.GKDescriptorNo > 1) driverType = XDriverType.KAU; switch (driverType) { case XDriverType.KAU: case XDriverType.RSR2_KAU: var bitArray = new BitArray(new int[1] { additionalShortParameters[0] }); if (bitArray[0]) AddAdditionalState(XStateClass.Failure, "Питание 1"); if (bitArray[1]) AddAdditionalState(XStateClass.Failure, "Питание 2"); if (bitArray[2]) AddAdditionalState(XStateClass.Failure, "Отказ АЛС 1 или 2"); if (bitArray[3]) AddAdditionalState(XStateClass.Failure, "Отказ АЛС 3 или 4"); if (bitArray[4]) AddAdditionalState(XStateClass.Failure, "Отказ АЛС 5 или 6"); if (bitArray[5]) AddAdditionalState(XStateClass.Failure, "Отказ АЛС 7 или 8"); if (bitArray[6]) AddAdditionalState(XStateClass.Failure, "Вскрытие корпуса"); if (bitArray[8]) AddAdditionalState(XStateClass.Failure, "КЗ АЛС 1"); if (bitArray[9]) AddAdditionalState(XStateClass.Failure, "КЗ АЛС 2"); if (bitArray[10]) AddAdditionalState(XStateClass.Failure, "КЗ АЛС 3"); if (bitArray[11]) AddAdditionalState(XStateClass.Failure, "КЗ АЛС 4"); if (bitArray[12]) AddAdditionalState(XStateClass.Failure, "КЗ АЛС 5"); if (bitArray[13]) AddAdditionalState(XStateClass.Failure, "КЗ АЛС 6"); if (bitArray[14]) AddAdditionalState(XStateClass.Failure, "КЗ АЛС 7"); if (bitArray[15]) AddAdditionalState(XStateClass.Failure, "КЗ АЛС 8"); break; case XDriverType.GK: bitArray = new BitArray(new int[1] { additionalShortParameters[0] }); if (bitArray[0]) AddAdditionalState(XStateClass.Failure, "Питание 1"); if (bitArray[1]) AddAdditionalState(XStateClass.Failure, "Питание 2"); if (bitArray[2]) AddAdditionalState(XStateClass.Failure, "ОЛС"); if (bitArray[3]) AddAdditionalState(XStateClass.Failure, "РЛС"); if (bitArray[6]) AddAdditionalState(XStateClass.Failure, "Вскрытие корпуса"); break; case XDriverType.RSR2_Bush: var bushType = 1; if (XBase is XDevice) { XDevice device = XBase as XDevice; var property = device.Properties.FirstOrDefault(x => x.Name == "Type"); if (property != null) { bushType = property.Value; } } var sensorBitArray = new BitArray(new int[1] { additionalShortParameters[4] % 256 }); var breakBitArray = new BitArray(new int[1] { additionalShortParameters[5] % 256 }); var kzBitArray = new BitArray(new int[1] { additionalShortParameters[6] % 256 }); if (sensorBitArray[0]) AddAdditionalState(XStateClass.Info, "Низкий уровень"); if (sensorBitArray[1]) AddAdditionalState(XStateClass.Info, "Высокий уровень"); if (sensorBitArray[2]) AddAdditionalState(XStateClass.Failure, "Аварийный уровень"); if (bushType == 1) { if (breakBitArray[0] && !kzBitArray[0]) AddAdditionalState(XStateClass.Failure, "Обрыв Низкий уровень"); if (breakBitArray[1] && !kzBitArray[1]) AddAdditionalState(XStateClass.Failure, "Обрыв Высокий уровень"); if (breakBitArray[2] && !kzBitArray[2]) AddAdditionalState(XStateClass.Failure, "Обрыв Аварийный уровень"); if (kzBitArray[0]) AddAdditionalState(XStateClass.Failure, "КЗ Низкий уровень"); if (kzBitArray[1]) AddAdditionalState(XStateClass.Failure, "КЗ Высокий уровень"); if (kzBitArray[2]) AddAdditionalState(XStateClass.Failure, "КЗ Аварийный уровень"); } if (bushType == 2) { if (breakBitArray[0] && !kzBitArray[0]) AddAdditionalState(XStateClass.Failure, "Обрыв Давление низкое"); if (breakBitArray[1] && !kzBitArray[1]) AddAdditionalState(XStateClass.Failure, "Обрыв Давление на выходе"); if (breakBitArray[2] && !kzBitArray[2]) AddAdditionalState(XStateClass.Failure, "Таймаут по давлению"); if (kzBitArray[0]) AddAdditionalState(XStateClass.Failure, "КЗ Давление низкое"); if (kzBitArray[1]) AddAdditionalState(XStateClass.Failure, "КЗ Давление на выходе"); } if (bushType == 3) { if (breakBitArray[0] && !kzBitArray[0]) AddAdditionalState(XStateClass.Failure, "Обрыв ДУ ПУСК"); if (breakBitArray[1] && !kzBitArray[1]) AddAdditionalState(XStateClass.Failure, "Обрыв ДУ ПУСК"); if (kzBitArray[0]) AddAdditionalState(XStateClass.Failure, "КЗ ДУ ПУСК"); if (kzBitArray[1]) AddAdditionalState(XStateClass.Failure, "КЗ ДУ СТОП"); } var failureBitArray = new BitArray(new int[1] { additionalShortParameters[5] / 256 }); if (failureBitArray[0]) AddAdditionalState(XStateClass.Failure, "Вскрытие"); if (failureBitArray[1]) AddAdditionalState(XStateClass.Failure, "Неисправность контакта"); if (failureBitArray[3]) AddAdditionalState(XStateClass.Failure, "Питание силовое"); if (failureBitArray[6]) AddAdditionalState(XStateClass.Failure, "Неисправность одной или обеих фаз(контроль нагрузки)"); if (failureBitArray[7]) AddAdditionalState(XStateClass.Failure, "Несовместимость сигналов"); failureBitArray = new BitArray(new int[1] { additionalShortParameters[5] % 256 }); if (failureBitArray[7]) AddAdditionalState(XStateClass.Failure, "Питание контроллера"); break; case XDriverType.SmokeDetector: case XDriverType.HeatDetector: case XDriverType.CombinedDetector: bitArray = new BitArray(new int[1] { additionalShortParameters[1] }); if (bitArray[1]) AddAdditionalState(XStateClass.Failure, "Оптический канал или фотоусилитель"); if (bitArray[2]) AddAdditionalState(XStateClass.Failure, "Температурный канал"); break; case XDriverType.RM_1: bitArray = new BitArray(new int[1] { additionalShortParameters[1] }); if (bitArray[0]) AddAdditionalState(XStateClass.Failure, "Контакт не переключается"); if (bitArray[1]) AddAdditionalState(XStateClass.Failure, "Напряжение запуска реле ниже нормы"); if (bitArray[5]) AddAdditionalState(XStateClass.Failure, "КЗ выхода"); if (bitArray[6]) AddAdditionalState(XStateClass.Failure, "Обрыв выхода"); if (bitArray[7]) AddAdditionalState(XStateClass.Failure, "Напряжение питания устройства не в норме"); break; case XDriverType.AMP_1: case XDriverType.AM_1: case XDriverType.AM1_T: bitArray = new BitArray(new int[1] { additionalShortParameters[0] }); if (bitArray[1]) AddAdditionalState(XStateClass.Failure, "КЗ ШС"); if (bitArray[2]) AddAdditionalState(XStateClass.Failure, "Обрыв ШС"); if (bitArray[7]) AddAdditionalState(XStateClass.Failure, "Вскрытие корпуса"); break; case XDriverType.MDU: bitArray = new BitArray(new int[1] { additionalShortParameters[1] }); if (bitArray[0]) AddAdditionalState(XStateClass.Failure, "Блокировка пуска"); if (bitArray[1]) AddAdditionalState(XStateClass.Failure, "Низкое напряжение питания привода"); if (bitArray[2]) AddAdditionalState(XStateClass.Failure, "Обрыв кнопки НОРМА"); if (bitArray[3]) AddAdditionalState(XStateClass.Failure, "КЗ кнопка НОРМА"); if (bitArray[4]) AddAdditionalState(XStateClass.Failure, "Обрыв кнопка ЗАЩИТА"); if (bitArray[5]) AddAdditionalState(XStateClass.Failure, "КЗ кнопки ЗАЩИТА"); if (bitArray[6]) AddAdditionalState(XStateClass.Failure, "Обрыв концевого выключателя ОТКРЫТО"); if (bitArray[7]) AddAdditionalState(XStateClass.Failure, "Обрыв концевого выключателя ЗАКРЫТО"); if (bitArray[8 + 0]) AddAdditionalState(XStateClass.Failure, "Обрыв цепи 2 ДВИГАТЕЛЯ"); if (bitArray[8 + 1]) AddAdditionalState(XStateClass.Failure, "Обрыв цепи 1 ДВИГАТЕЛЯ"); if (bitArray[8 + 2]) AddAdditionalState(XStateClass.Failure, "Замкнуты/разомкнуты оба концевика"); if (bitArray[8 + 3]) AddAdditionalState(XStateClass.Failure, "Превышение времени хода"); break; case XDriverType.MRO_2: bitArray = new BitArray(new int[1] { additionalShortParameters[1] }); if (bitArray[0]) AddAdditionalState(XStateClass.Failure, "Обрыв кнопки ПУСК"); if (bitArray[3]) AddAdditionalState(XStateClass.Failure, "КЗ или обрыв выходной линии"); if (bitArray[5]) AddAdditionalState(XStateClass.Failure, "Напряжение питания устройства не в норме"); if (bitArray[6]) AddAdditionalState(XStateClass.Failure, "Обрыв кнопки СТОП"); if (bitArray[8 + 0]) AddAdditionalState(XStateClass.Failure, "Отсутствуют или испорчены сообщения для воспроизведения"); if (bitArray[8 + 1]) AddAdditionalState(XStateClass.Failure, "КЗ кнопки ПУСК"); if (bitArray[8 + 2]) AddAdditionalState(XStateClass.Failure, "КЗ кнопки СТОП"); break; case XDriverType.MPT: bitArray = new BitArray(new int[1] { additionalShortParameters[0] }); if (bitArray[2]) AddAdditionalState(XStateClass.Failure, "Напряжение питания ШС ниже нормы"); if (bitArray[3]) AddAdditionalState(XStateClass.Failure, "Ошибка памяти"); if (bitArray[5]) AddAdditionalState(XStateClass.Failure, "КЗ ШС"); if (bitArray[6]) AddAdditionalState(XStateClass.Failure, "Обрыв ШС"); if (bitArray[7]) AddAdditionalState(XStateClass.Failure, "Напряжение питания устройства не в норме"); bitArray = new BitArray(new int[1] { additionalShortParameters[1] }); if (bitArray[0]) AddAdditionalState(XStateClass.Failure, "КЗ выхода 1"); if (bitArray[1]) AddAdditionalState(XStateClass.Failure, "КЗ выхода 2"); if (bitArray[2]) AddAdditionalState(XStateClass.Failure, "КЗ выхода 3"); if (bitArray[3]) AddAdditionalState(XStateClass.Failure, "КЗ выхода 4"); if (bitArray[4]) AddAdditionalState(XStateClass.Failure, "КЗ выхода 5"); bitArray = new BitArray(new int[1] { additionalShortParameters[2] }); if (bitArray[0]) AddAdditionalState(XStateClass.Failure, "Обрыв выхода 1"); if (bitArray[1]) AddAdditionalState(XStateClass.Failure, "Обрыв выхода 2"); if (bitArray[2]) AddAdditionalState(XStateClass.Failure, "Обрыв выхода 3"); if (bitArray[3]) AddAdditionalState(XStateClass.Failure, "Обрыв выхода 4"); if (bitArray[4]) AddAdditionalState(XStateClass.Failure, "Обрыв выхода 5"); break; case XDriverType.FirePump: case XDriverType.JockeyPump: case XDriverType.DrainagePump: //bitArray = new BitArray(new int[1] { additionalShortParameters[0] }); // if (bitArray[8 + 0]) // AddAdditionalState(XStateClass.Failure, "Обрыв цепи питания двигателя"); var pumpType = 0; if (xBase is XDevice) { XDevice device = xBase as XDevice; if (device != null && device.Driver.IsPump) { var pumpTypeProperty = device.Properties.FirstOrDefault(x => x.Name == "PumpType"); if (pumpTypeProperty != null) { pumpType = pumpTypeProperty.Value; } } } bitArray = new BitArray(new int[1] { additionalShortParameters[3] }); if (bitArray[1]) AddAdditionalState(XStateClass.Failure, JournalStringsHelper.GetPumpFailureMessage("Обрыв входа 1", pumpType)); if (bitArray[2]) AddAdditionalState(XStateClass.Failure, JournalStringsHelper.GetPumpFailureMessage("КЗ входа 1", pumpType)); if (bitArray[4]) AddAdditionalState(XStateClass.Failure, JournalStringsHelper.GetPumpFailureMessage("Обрыв входа 2", pumpType)); if (bitArray[5]) AddAdditionalState(XStateClass.Failure, JournalStringsHelper.GetPumpFailureMessage("КЗ входа 2", pumpType)); if (bitArray[7]) AddAdditionalState(XStateClass.Failure, JournalStringsHelper.GetPumpFailureMessage("Обрыв входа 3", pumpType)); if (bitArray[8 + 0]) AddAdditionalState(XStateClass.Failure, JournalStringsHelper.GetPumpFailureMessage("КЗ входа 3", pumpType)); //if (bitArray[8 + 2]) // AddAdditionalState(XStateClass.Failure, StringHelper.GetPumpFailureMessage("Обрыв входа 4", addressOnShleif)); //if (bitArray[8 + 3]) // AddAdditionalState(XStateClass.Failure, StringHelper.GetPumpFailureMessage("КЗ входа 4", addressOnShleif)); bitArray = new BitArray(new int[1] { additionalShortParameters[4] }); if (!bitArray[3]) AddAdditionalState(XStateClass.Failure, "Вскрытие корпуса"); if (!bitArray[8 + 0]) AddAdditionalState(XStateClass.Failure, "Не задан тип"); if (!bitArray[8 + 2]) AddAdditionalState(XStateClass.Failure, "Отказ ПН"); if (!bitArray[8 + 3]) AddAdditionalState(XStateClass.Failure, "Отказ ШУН"); break; case XDriverType.Valve: //bitArray = new BitArray(new int[1] { additionalShortParameters[0] }); //if (bitArray[7]) // AddAdditionalState(XStateClass.Failure, "Обрыв цепи питания двигателя"); bitArray = new BitArray(new int[1] { additionalShortParameters[3] }); if (bitArray[1]) AddAdditionalState(XStateClass.Failure, "Обрыв концевого выключателя ОТКРЫТО"); if (bitArray[2]) AddAdditionalState(XStateClass.Failure, "КЗ концевого выключателя ОТКРЫТО"); if (bitArray[4]) AddAdditionalState(XStateClass.Failure, "Обрыв муфтового выключателя ОТКРЫТО"); if (bitArray[5]) AddAdditionalState(XStateClass.Failure, "КЗ муфтового выключателя ОТКРЫТО"); if (bitArray[7]) AddAdditionalState(XStateClass.Failure, "Обрыв концевого выключателя ЗАКРЫТО"); if (bitArray[8 + 0]) AddAdditionalState(XStateClass.Failure, "КЗ концевого выключателя ЗАКРЫТО"); if (bitArray[8 + 2]) AddAdditionalState(XStateClass.Failure, "Обрыв муфтового выключателя ЗАКРЫТО"); if (bitArray[8 + 3]) AddAdditionalState(XStateClass.Failure, "КЗ муфтового выключателя ЗАКРЫТО"); if (bitArray[8 + 4]) AddAdditionalState(XStateClass.Failure, "Обрыв кнопки Открыть УЗЗ/Закрыть УЗЗ"); if (bitArray[8 + 5]) AddAdditionalState(XStateClass.Failure, "КЗ кнопки Открыть УЗЗ/Закрыть УЗЗ"); if (bitArray[8 + 6]) AddAdditionalState(XStateClass.Failure, "Обрыв кнопки СТОП УЗЗ"); if (bitArray[8 + 7]) AddAdditionalState(XStateClass.Failure, "КЗ кнопки СТОП УЗЗ"); bitArray = new BitArray(new int[1] { additionalShortParameters[4] }); if (!bitArray[3]) AddAdditionalState(XStateClass.Failure, "Вскрытие корпуса"); if (!bitArray[5]) AddAdditionalState(XStateClass.Failure, "Превышение времени хода"); if (!bitArray[6]) AddAdditionalState(XStateClass.Failure, "КВ/МВ"); if (!bitArray[8 + 1]) AddAdditionalState(XStateClass.Failure, "Не задан режим"); if (!bitArray[8 + 3]) AddAdditionalState(XStateClass.Failure, "Отказ ШУЗ"); break; case XDriverType.Battery: bitArray = new BitArray(new int[1] { additionalShortParameters[0] / 256 }); if (bitArray[1]) AddAdditionalState(XStateClass.Failure, "Отсутствие сетевого напряжения"); bitArray = new BitArray(new int[1] { additionalShortParameters[0] % 256 }); if (!bitArray[0] && bitArray[1]) AddAdditionalState(XStateClass.Failure, "КЗ Выхода 1"); if (bitArray[0] && !bitArray[1]) AddAdditionalState(XStateClass.Failure, "Перегрузка Выхода 1"); if (bitArray[0] && bitArray[1]) AddAdditionalState(XStateClass.Failure, "Напряжение Выхода 1 выше нормы"); if (!bitArray[2] && bitArray[3]) AddAdditionalState(XStateClass.Failure, "КЗ Выхода 2"); if (bitArray[2] && !bitArray[3]) AddAdditionalState(XStateClass.Failure, "Перегрузка Выхода 2"); if (bitArray[2] && bitArray[3]) AddAdditionalState(XStateClass.Failure, "Напряжение Выхода 2 выше нормы"); if (!bitArray[4] && bitArray[5]) AddAdditionalState(XStateClass.Failure, "АКБ 1 Разряд"); if (bitArray[4] && !bitArray[5]) AddAdditionalState(XStateClass.Failure, "АКБ 1 Глубокий Разряд"); if (bitArray[4] && bitArray[5]) AddAdditionalState(XStateClass.Failure, "АКБ 1 Отсутствие"); if (!bitArray[6] && bitArray[7]) AddAdditionalState(XStateClass.Failure, "АКБ 2 Разряд"); if (bitArray[6] && !bitArray[7]) AddAdditionalState(XStateClass.Failure, "АКБ 2 Глубокий Разряд"); if (bitArray[6] && bitArray[7]) AddAdditionalState(XStateClass.Failure, "АКБ 2 Отсутствие"); break; } switch (driverType) { case XDriverType.RSR2_MVK8: case XDriverType.RSR2_RM_1: case XDriverType.RSR2_Bush: OnDelay = additionalShortParameters[0]; HoldDelay = additionalShortParameters[1]; OffDelay = additionalShortParameters[2]; break; } } else { if (TypeNo == 0x101 || TypeNo == 0x106) { OnDelay = additionalShortParameters[0]; HoldDelay = additionalShortParameters[1]; } } }
public static OperationResult<bool> GKSetSingleParameter(XBase xBase, List<byte> parameterBytes) { var error = ParametersHelper.SetSingleParameter(xBase, parameterBytes); return new OperationResult<bool>() { HasError = error != null, Error = error, Result = true }; }
public static void SendControlCommand(XBase xBase, XStateBit stateBit, string description) { var code = 0x80 + (int)stateBit; SendControlCommand(xBase, (byte)code, description); }
public void AddArgumentPutBit(byte bit, XBase xBase) { Add(FormulaOperationType.PUTBIT, (byte)bit, xBase.GKDescriptorNo); }
public static OperationResult<List<XProperty>> GKGetSingleParameter(XBase xBase) { return ParametersHelper.GetSingleParameter(xBase); }
public static void LinkXBases(XBase inputXBase, XBase outputXBase) { AddInputOutputObject(inputXBase.InputXBases, outputXBase); AddInputOutputObject(outputXBase.OutputXBases, inputXBase); }
public static void GKReset(XBase xBase, string userName) { Watcher.SendControlCommand(xBase, XStateBit.Reset, "Сброс"); AddGKMessage(EventName.Команда_оператора, EventDescription.Сброс, xBase, userName); }
static void LinkDeviceLogic(XBase xBase, List<XClause> clauses) { foreach (var clause in clauses) { foreach (var zone in clause.Zones) { LinkXBases(xBase, zone); } foreach (var clauseDevice in clause.Devices) { LinkXBases(xBase, clauseDevice); } foreach (var direction in clause.Directions) { LinkXBases(xBase, direction); } } }
public static void GKSetAutomaticRegime(XBase xBase, string userName) { Watcher.SendControlCommand(xBase, XStateBit.SetRegime_Automatic, "Перевод в автоматический режим"); AddGKMessage(EventName.Команда_оператора, EventDescription.Перевод_в_автоматический_режим, xBase, userName); }