void SetFormulaBytes() { Formula = new FormulaBuilder(); if (DatabaseType == DatabaseType.Gk) { if (Device.Driver.HasLogic) { if (Device.DeviceLogic.Clauses.Count > 0) { Formula.AddClauseFormula(Device.DeviceLogic.Clauses); AddMro2MFormula(); if (Device.DeviceLogic.OffClauses == null || Device.DeviceLogic.OffClauses.Count == 0) { Formula.AddStandardTurning(Device); } else { Formula.AddGetBit(XStateBit.Norm, Device); Formula.Add(FormulaOperationType.AND, comment: "Смешивание с битом Дежурный Устройства"); Formula.AddPutBit(XStateBit.TurnOn_InAutomatic, Device); } } if (Device.DeviceLogic.OffClauses.Count > 0) { Formula.AddClauseFormula(Device.DeviceLogic.OffClauses); Formula.AddGetBit(XStateBit.Norm, Device); Formula.Add(FormulaOperationType.AND, comment: "Смешивание с битом Дежурный Устройства"); Formula.AddPutBit(XStateBit.TurnOff_InAutomatic, Device); } } } Formula.Add(FormulaOperationType.END); FormulaBytes = Formula.GetBytes(); }
void SetFormulaBytes() { Formula = new FormulaBuilder(); var fire1Count = AddDeviceFire1(); AddDeviceFire2(); Formula.Add(FormulaOperationType.CONST, 0, (ushort)Zone.Fire2Count, "Количество устройств для формирования Пожар2"); Formula.Add(FormulaOperationType.MUL); Formula.Add(FormulaOperationType.ADD); Formula.Add(FormulaOperationType.DUP); Formula.Add(FormulaOperationType.CONST, 0, (ushort)Zone.Fire2Count, "Количество устройств для формирования Пожар2"); Formula.Add(FormulaOperationType.GE); Formula.AddGetBit(XStateBit.Fire2, Zone); Formula.Add(FormulaOperationType.OR); Formula.AddPutBit(XStateBit.Fire2, Zone); Formula.Add(FormulaOperationType.DUP); Formula.Add(FormulaOperationType.CONST, 0, (ushort)Zone.Fire1Count, "Количество устройств для формирования Пожар1"); Formula.Add(FormulaOperationType.GE); Formula.AddGetBit(XStateBit.Fire1, Zone); Formula.Add(FormulaOperationType.OR); Formula.AddPutBit(XStateBit.Fire1, Zone); Formula.Add(FormulaOperationType.CONST, 0, 1, "Количество устройств для формирования Внимание"); Formula.Add(FormulaOperationType.GE); Formula.AddPutBit(XStateBit.Attention, Zone); Formula.Add(FormulaOperationType.END); FormulaBytes = Formula.GetBytes(); }
void SetFormulaBytes() { Formula = new FormulaBuilder(); Formula.AddGetBit(XStateBit.On, MainDelay); Formula.AddGetBit(XStateBit.Norm, PumpStation); Formula.Add(FormulaOperationType.AND); if (PumpStation.AutomaticOffLogic.Clauses.Count > 0) { Formula.AddClauseFormula(PumpStation.AutomaticOffLogic.Clauses); Formula.Add(FormulaOperationType.AND); } Formula.AddPutBit(XStateBit.SetRegime_Manual, PumpStation); if (PumpStation.StartLogic.Clauses.Count > 0) Formula.AddClauseFormula(PumpStation.StartLogic.Clauses); if (PumpStation.StopLogic.Clauses.Count > 0) { Formula.AddClauseFormula(PumpStation.StopLogic.Clauses); Formula.Add(FormulaOperationType.DUP); Formula.AddGetBit(XStateBit.Norm, PumpStation); Formula.Add(FormulaOperationType.AND, comment: "Смешивание с битом Дежурный НС"); Formula.AddPutBit(XStateBit.TurnOff_InAutomatic, PumpStation); Formula.Add(FormulaOperationType.COM); Formula.Add(FormulaOperationType.AND); } Formula.AddGetBit(XStateBit.Norm, PumpStation); Formula.Add(FormulaOperationType.AND, comment: "Смешивание с битом Дежурный НС"); Formula.AddPutBit(XStateBit.TurnOn_InAutomatic, PumpStation); Formula.Add(FormulaOperationType.END); FormulaBytes = Formula.GetBytes(); }
void CreateMainDelay() { MainDelay.Name = "Тушение " + PumpStation.PresentationName; MainDelay.DelayTime = (ushort)(PumpStation.Hold - 5); MainDelay.SetTime = 5; MainDelay.DelayRegime = DelayRegime.Off; var delayDescriptor = new DelayDescriptor(MainDelay); GkDatabase.Descriptors.Add(delayDescriptor); UpdateConfigurationHelper.LinkXBases(PumpStation, MainDelay); UpdateConfigurationHelper.LinkXBases(MainDelay, PumpStation); var formula = new FormulaBuilder(); formula.AddGetBit(XStateBit.On, PumpStation); formula.AddGetBit(XStateBit.Norm, PumpStation); formula.Add(FormulaOperationType.AND); formula.Add(FormulaOperationType.DUP); formula.AddGetBit(XStateBit.TurningOn, MainDelay); formula.AddGetBit(XStateBit.On, MainDelay); formula.Add(FormulaOperationType.OR); formula.Add(FormulaOperationType.COM); formula.Add(FormulaOperationType.AND); formula.AddPutBit(XStateBit.TurnOn_InAutomatic, MainDelay); formula.Add(FormulaOperationType.COM); formula.AddPutBit(XStateBit.TurnOff_InAutomatic, MainDelay); formula.Add(FormulaOperationType.END); delayDescriptor.Formula = formula; delayDescriptor.FormulaBytes = formula.GetBytes(); }
void SetFormulaBytes() { Formula = new FormulaBuilder(); if (Direction.InputZones.Count > 0 || Direction.InputDevices.Count > 0) { var inputObjectsCount = 0; foreach (var directionZone in Direction.DirectionZones) { Formula.AddGetBitOff(directionZone.StateBit, directionZone.Zone); if (inputObjectsCount > 0) { Formula.Add(FormulaOperationType.OR); } inputObjectsCount++; } foreach (var directionDevice in Direction.DirectionDevices) { Formula.AddGetBitOff(directionDevice.StateBit, directionDevice.Device); if (inputObjectsCount > 0) { Formula.Add(FormulaOperationType.OR); } inputObjectsCount++; } Formula.Add(FormulaOperationType.DUP); Formula.AddGetBit(XStateBit.Norm, Direction); Formula.Add(FormulaOperationType.AND, comment: "Смешивание с битом Дежурный Направления"); Formula.AddPutBit(XStateBit.TurnOn_InAutomatic, Direction); Formula.Add(FormulaOperationType.COM, comment: "Условие Выключения"); Formula.AddGetBit(XStateBit.Norm, Direction); Formula.Add(FormulaOperationType.AND, comment: "Смешивание с битом Дежурный Направления"); Formula.AddPutBit(XStateBit.TurnOff_InAutomatic, Direction); } Formula.Add(FormulaOperationType.END); FormulaBytes = Formula.GetBytes(); }
void SetFormulaBytes() { Formula = new FormulaBuilder(); Formula.Add(FormulaOperationType.END); FormulaBytes = Formula.GetBytes(); }
void CreatePim() { Pim = new XPim() { Name = PumpStation.PresentationName }; Pim.UID = GuidHelper.CreateOn(PumpStation.UID); GkDatabase.AddPim(Pim); var pimDescriptor = new PimDescriptor(Pim); GkDatabase.Descriptors.Add(pimDescriptor); var formula = new FormulaBuilder(); var inputDevices = new List<XBase>(); inputDevices.AddRange(PumpStation.InputDevices); foreach (var nsDevice in PumpStation.NSDevices) { if (!inputDevices.Contains(nsDevice)) inputDevices.Add(nsDevice); } foreach (var inputDevice in inputDevices) { UpdateConfigurationHelper.LinkXBases(Pim, inputDevice); } for (int i = 0; i < inputDevices.Count; i++) { var nsDevice = inputDevices[i]; formula.AddGetBit(XStateBit.Failure, nsDevice); if (i > 0) { formula.Add(FormulaOperationType.OR); } } formula.AddPutBit(XStateBit.Failure, Pim); formula.Add(FormulaOperationType.END); pimDescriptor.Formula = formula; pimDescriptor.FormulaBytes = formula.GetBytes(); }
void SetJokeyPumpLogic() { if (JNPumpDevice != null) { var jnDescriptor = GkDatabase.Descriptors.FirstOrDefault(x => x.Device != null && x.Device.UID == JNPumpDevice.UID); if (jnDescriptor != null) { var formula = new FormulaBuilder(); formula.AddGetBit(XStateBit.On, PumpStation); formula.AddGetBit(XStateBit.Norm, JNPumpDevice); formula.Add(FormulaOperationType.AND, comment: "Смешивание с битом Дежурный ЖН"); //formula.AddGetBit(XStateBit.ForbidStart_InAutomatic, JNPumpDevice); formula.Add(FormulaOperationType.END); jnDescriptor.Formula = formula; jnDescriptor.FormulaBytes = formula.GetBytes(); } UpdateConfigurationHelper.LinkXBases(jnDescriptor.XBase, PumpStation); } }
void SetFirePumpDevicesLogic() { for (int i = 0; i < FirePumpDevices.Count; i++) { var pumpDevice = FirePumpDevices[i]; var pumpDescriptor = GkDatabase.Descriptors.FirstOrDefault(x => x.Device != null && x.Device.UID == pumpDevice.UID); if (pumpDescriptor != null) { var formula = new FormulaBuilder(); AddCountFirePumpDevicesFormula(formula); if (i > 0) { var pumpDelay = PumpDelays.FirstOrDefault(x => x.Device.UID == pumpDevice.UID); formula.AddGetBit(XStateBit.On, pumpDelay.Delay); formula.Add(FormulaOperationType.AND); } if (pumpDevice.NSLogic.Clauses.Count > 0) { formula.AddClauseFormula(pumpDevice.NSLogic.Clauses); formula.Add(FormulaOperationType.AND); } formula.AddGetBit(XStateBit.On, pumpDevice); formula.AddGetBit(XStateBit.TurningOn, pumpDevice); formula.Add(FormulaOperationType.OR); formula.AddGetBit(XStateBit.Failure, pumpDevice); formula.Add(FormulaOperationType.OR); formula.Add(FormulaOperationType.COM); formula.Add(FormulaOperationType.AND, comment: "Запрет на включение, если насос включен и не включается"); formula.AddGetBit(XStateBit.On, PumpStation); formula.Add(FormulaOperationType.AND); formula.AddGetBit(XStateBit.Norm, pumpDevice); formula.Add(FormulaOperationType.AND); formula.AddPutBit(XStateBit.TurnOn_InAutomatic, pumpDevice); formula.AddGetBit(XStateBit.Off, PumpStation); formula.AddGetBit(XStateBit.Norm, pumpDevice); formula.Add(FormulaOperationType.AND); formula.AddPutBit(XStateBit.TurnOff_InAutomatic, pumpDevice); formula.Add(FormulaOperationType.END); pumpDescriptor.Formula = formula; pumpDescriptor.FormulaBytes = formula.GetBytes(); } } }
void CreateDelaysLogic() { for (int i = 0; i < PumpDelays.Count; i++) { var pumpDelay = PumpDelays[i]; var delayDescriptor = GkDatabase.Descriptors.FirstOrDefault(x => x.Delay != null && x.Delay.UID == pumpDelay.Delay.UID); var formula = new FormulaBuilder(); AddCountFirePumpDevicesFormula(formula); if (i > 0) { var prevDelay = PumpDelays[i - 1]; formula.AddGetBit(XStateBit.On, prevDelay.Delay); formula.Add(FormulaOperationType.AND); } formula.AddGetBit(XStateBit.On, PumpStation); formula.Add(FormulaOperationType.AND); formula.AddGetBit(XStateBit.Norm, pumpDelay.Delay); formula.Add(FormulaOperationType.AND, comment: "Смешивание с битом Дежурный Задержки"); formula.AddPutBit(XStateBit.TurnOn_InAutomatic, pumpDelay.Delay); formula.AddGetBit(XStateBit.Off, PumpStation); formula.AddGetBit(XStateBit.Norm, pumpDelay.Delay); formula.Add(FormulaOperationType.AND, comment: "Смешивание с битом Дежурный Задержки"); formula.AddPutBit(XStateBit.TurnOff_InAutomatic, pumpDelay.Delay); formula.Add(FormulaOperationType.END); delayDescriptor.Formula = formula; delayDescriptor.FormulaBytes = formula.GetBytes(); } }