예제 #1
0
		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();
		}
예제 #2
0
		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();
		}
예제 #3
0
        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();
        }
예제 #4
0
		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();
		}
예제 #5
0
		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();
		}
예제 #6
0
		void SetFormulaBytes()
		{
			Formula = new FormulaBuilder();
			Formula.Add(FormulaOperationType.END);
			FormulaBytes = Formula.GetBytes();
		}
예제 #7
0
		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();
		}
예제 #8
0
		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);
			}
		}
예제 #9
0
		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();
				}
			}
		}
예제 #10
0
		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();
			}
		}