public override void BuildFormula() { Formula = new FormulaBuilder(); if ((DatabaseType == DatabaseType.Gk && GKBase.IsLogicOnKau) || (DatabaseType == DatabaseType.Kau && !GKBase.IsLogicOnKau)) { Formula.Add(FormulaOperationType.END); return; } MPT.LinkToDescriptor(GlobalPim); Formula.AddGetBit(GKStateBit.On, GlobalPim); Formula.Add(FormulaOperationType.BR, 2, 1); Formula.Add(FormulaOperationType.EXIT); var mirrorParents = MPT.GetMirrorParents(); Formula.AddMirrorLogic(MPT, mirrorParents); if (MPT.MptLogic.StopClausesGroup.GetObjects().Count > 0) { Formula.AddClauseFormula(MPT.MptLogic.StopClausesGroup); if (MPT.MptLogic.OnClausesGroup.GetObjects().Count > 0) Formula.Add(FormulaOperationType.DUP); Formula.AddPutBit(GKStateBit.Stop_InManual, MPT); } if (MPT.MptLogic.OnClausesGroup.GetObjects().Count > 0) { if (MPT.MptLogic.StopClausesGroup.GetObjects().Count > 0) Formula.Add(FormulaOperationType.COM); Formula.AddClauseFormula(MPT.MptLogic.OnClausesGroup); if (MPT.MptLogic.StopClausesGroup.GetObjects().Count > 0) Formula.Add(FormulaOperationType.AND); Formula.AddPutBit(GKStateBit.TurnOn_InAutomatic, MPT); if (MPT.MptLogic.UseOffCounterLogic) { Formula.AddClauseFormula(MPT.MptLogic.OnClausesGroup); Formula.Add(FormulaOperationType.COM); Formula.AddPutBit(GKStateBit.TurnOff_InAutomatic, MPT); } } if (!MPT.MptLogic.UseOffCounterLogic && MPT.MptLogic.OffClausesGroup.GetObjects().Count > 0) { Formula.AddClauseFormula(MPT.MptLogic.OffClausesGroup); Formula.AddPutBit(GKStateBit.TurnOff_InAutomatic, MPT); } SetRegime(GKMPTDeviceType.HandStart, GKStateBit.TurnOn_InManual); SetRegime(GKMPTDeviceType.HandStop, GKStateBit.TurnOff_InManual); SetRegime(GKMPTDeviceType.HandAutomaticOn, GKStateBit.SetRegime_Automatic); SetRegime(GKMPTDeviceType.HandAutomaticOff, GKStateBit.SetRegime_Manual); Formula.Add(FormulaOperationType.END); }
public override void BuildFormula() { Formula = new FormulaBuilder(); if ((DatabaseType == DatabaseType.Gk && GKBase.IsLogicOnKau) || (DatabaseType == DatabaseType.Kau && !GKBase.IsLogicOnKau)) { Formula.Add(FormulaOperationType.END); return; } PumpStation.LinkToDescriptor(GlobalPim); Formula.AddGetBit(GKStateBit.On, GlobalPim); Formula.Add(FormulaOperationType.BR, 2, 1); Formula.Add(FormulaOperationType.EXIT); var mirrorParents = PumpStation.GetMirrorParents(); Formula.AddMirrorLogic(PumpStation, mirrorParents); var hasAutomaticOffLogic = PumpStation.AutomaticOffLogic.OnClausesGroup.Clauses.Count + PumpStation.AutomaticOffLogic.OnClausesGroup.ClauseGroups.Count > 0; var hasStartLogic = PumpStation.StartLogic.OnClausesGroup.Clauses.Count + PumpStation.StartLogic.OnClausesGroup.ClauseGroups.Count > 0; var hasStopLogic = PumpStation.StopLogic.OnClausesGroup.Clauses.Count + PumpStation.StopLogic.OnClausesGroup.ClauseGroups.Count > 0; if (hasAutomaticOffLogic) { Formula.AddClauseFormula(PumpStation.AutomaticOffLogic.OnClausesGroup); Formula.AddPutBit(GKStateBit.SetRegime_Manual, PumpStation); } if (hasStartLogic) { Formula.AddClauseFormula(PumpStation.StartLogic.OnClausesGroup); if (hasStopLogic) { Formula.AddClauseFormula(PumpStation.StopLogic.OnClausesGroup); Formula.Add(FormulaOperationType.COM); Formula.Add(FormulaOperationType.AND); } Formula.AddPutBit(GKStateBit.TurnOn_InAutomatic, PumpStation); } if (hasStopLogic) { Formula.AddClauseFormula(PumpStation.StopLogic.OnClausesGroup); Formula.AddPutBit(GKStateBit.TurnOff_InAutomatic, PumpStation); } Formula.Add(FormulaOperationType.END); }
public override void BuildFormula() { Formula = new FormulaBuilder(); if ((DatabaseType == DatabaseType.Gk && GKBase.IsLogicOnKau) || (DatabaseType == DatabaseType.Kau && !GKBase.IsLogicOnKau)) { Formula.Add(FormulaOperationType.END); return; } var mirrorParents = GuardZone.GetMirrorParents(); Formula.AddMirrorLogic(GuardZone, mirrorParents); AddGuardDevicesLogic(SetAlarmDevices, GKStateBit.Fire1); AddGuardDevicesLogic(ResetGuardDevices, GKStateBit.TurnOff_InAutomatic); AddGuardDevicesLogic(SetGuardDevices, GKStateBit.TurnOn_InAutomatic); Formula.Add(FormulaOperationType.END); }
public override void BuildFormula() { Formula = new FormulaBuilder(); if ((DatabaseType == DatabaseType.Gk && GKBase.IsLogicOnKau) || (DatabaseType == DatabaseType.Kau && !GKBase.IsLogicOnKau)) { Formula.Add(FormulaOperationType.END); return; } var mirrorParents = Direction.GetMirrorParents(); Formula.AddMirrorLogic(Direction, mirrorParents); if (Direction.Logic.StopClausesGroup.GetObjects().Count > 0) { Formula.AddClauseFormula(Direction.Logic.StopClausesGroup); if (Direction.Logic.OnClausesGroup.GetObjects().Count > 0) Formula.Add(FormulaOperationType.DUP); Formula.AddPutBit(GKStateBit.Stop_InManual, Direction); } if (Direction.Logic.OnClausesGroup.Clauses.Count + Direction.Logic.OnClausesGroup.ClauseGroups.Count > 0) { if (Direction.Logic.StopClausesGroup.GetObjects().Count > 0) Formula.Add(FormulaOperationType.COM); Formula.AddClauseFormula(Direction.Logic.OnClausesGroup); if (Direction.Logic.StopClausesGroup.GetObjects().Count > 0) Formula.Add(FormulaOperationType.AND); Formula.AddPutBit(GKStateBit.TurnOn_InAutomatic, Direction); if (Direction.Logic.UseOffCounterLogic) { Formula.AddClauseFormula(Direction.Logic.OnClausesGroup); Formula.Add(FormulaOperationType.COM); Formula.AddPutBit(GKStateBit.TurnOff_InAutomatic, Direction); } } if (!Direction.Logic.UseOffCounterLogic && Direction.Logic.OffClausesGroup.GetObjects().Count > 0) { Formula.AddClauseFormula(Direction.Logic.OffClausesGroup); Formula.AddPutBit(GKStateBit.TurnOff_InAutomatic, Direction); } Formula.Add(FormulaOperationType.END); }
public override void BuildFormula() { Formula = new FormulaBuilder(); if ((DatabaseType == DatabaseType.Gk && Zone.IsLogicOnKau) || (DatabaseType == DatabaseType.Kau && !Zone.IsLogicOnKau)) { Formula.Add(FormulaOperationType.END); return; } var mirrorParents = Zone.GetMirrorParents(); Formula.AddMirrorLogic(Zone, mirrorParents); var fire1Count = AddDeviceFire1(); AddDeviceFire2(); Formula.Add(FormulaOperationType.CONST, 0, (ushort)Zone.Fire2Count, comment:"Количество устройств для формирования Пожар2"); Formula.Add(FormulaOperationType.MUL); Formula.Add(FormulaOperationType.ADD); Formula.Add(FormulaOperationType.DUP); Formula.Add(FormulaOperationType.CONST, 0, (ushort)Zone.Fire2Count, comment: "Количество устройств для формирования Пожар2"); Formula.Add(FormulaOperationType.GE); Formula.AddGetBit(GKStateBit.Fire2, Zone); Formula.Add(FormulaOperationType.OR); Formula.AddPutBit(GKStateBit.Fire2, Zone); Formula.Add(FormulaOperationType.DUP); Formula.Add(FormulaOperationType.CONST, 0, (ushort)Zone.Fire1Count, comment: "Количество устройств для формирования Пожар1"); Formula.Add(FormulaOperationType.GE); Formula.AddGetBit(GKStateBit.Fire1, Zone); Formula.Add(FormulaOperationType.OR); Formula.AddPutBit(GKStateBit.Fire1, Zone); Formula.Add(FormulaOperationType.CONST, 0, 1, comment: "Количество устройств для формирования Внимание"); Formula.Add(FormulaOperationType.GE); Formula.AddPutBit(GKStateBit.Attention, Zone); Formula.Add(FormulaOperationType.END); }
public override void BuildFormula() { Formula = new FormulaBuilder(); if ((DatabaseType == DatabaseType.Gk && GKBase.IsLogicOnKau) || (DatabaseType == DatabaseType.Kau && !GKBase.IsLogicOnKau)) { Formula.Add(FormulaOperationType.END); return; } var mirrorParents = Device.GetMirrorParents(); Formula.AddMirrorLogic(Device, mirrorParents); if (CreateMPTLogic()) return; if (Device.Driver.HasLogic) { var hasOn1 = Device.Logic.OnClausesGroup.IsNotEmpty(); var hasOn2 = Device.Logic.On2ClausesGroup.IsNotEmpty(); if (hasOn1 && ! hasOn2) { Formula.AddClauseFormula(Device.Logic.OnClausesGroup); Formula.Add(FormulaOperationType.CONST, 0, 0); Formula.Add(FormulaOperationType.CONST, 0, 0); Formula.Add(FormulaOperationType.CONST, 0, 0); Formula.Add(FormulaOperationType.CONST, 0, 0); Formula.Add(FormulaOperationType.CONST, 0, 0); Formula.AddPutBit(31, Device); Formula.AddPutBit(30, Device); Formula.AddPutBit(29, Device); Formula.AddPutBit(28, Device); Formula.AddPutBit(27, Device); if (Device.Logic.UseOffCounterLogic) Formula.AddStandardTurning(Device); else Formula.AddPutBit(GKStateBit.TurnOn_InAutomatic, Device); } if (!hasOn1 && hasOn2) { Formula.AddClauseFormula(Device.Logic.On2ClausesGroup); Formula.Add(FormulaOperationType.CONST, 0, 1); Formula.Add(FormulaOperationType.CONST, 0, 1); Formula.Add(FormulaOperationType.CONST, 0, 1); Formula.Add(FormulaOperationType.CONST, 0, 1); Formula.Add(FormulaOperationType.CONST, 0, 1); Formula.AddPutBit(31, Device); Formula.AddPutBit(30, Device); Formula.AddPutBit(29, Device); Formula.AddPutBit(28, Device); Formula.AddPutBit(27, Device); if (Device.Logic.UseOffCounterLogic) Formula.AddStandardTurning(Device); else Formula.AddPutBit(GKStateBit.TurnOn_InAutomatic, Device); } if (hasOn1 && hasOn2) { Formula.AddClauseFormula(Device.Logic.OnClausesGroup); Formula.AddClauseFormula(Device.Logic.On2ClausesGroup); Formula.Add(FormulaOperationType.DUP); Formula.Add(FormulaOperationType.DUP); Formula.Add(FormulaOperationType.DUP); Formula.Add(FormulaOperationType.DUP); Formula.Add(FormulaOperationType.DUP); Formula.AddPutBit(31, Device); Formula.AddPutBit(30, Device); Formula.AddPutBit(29, Device); Formula.AddPutBit(28, Device); Formula.AddPutBit(27, Device); Formula.Add(FormulaOperationType.OR); if (Device.Logic.UseOffCounterLogic) Formula.AddStandardTurning(Device); else Formula.AddPutBit(GKStateBit.TurnOn_InAutomatic, Device); } if (!Device.Logic.UseOffCounterLogic && Device.Logic.OffClausesGroup.IsNotEmpty()) { Formula.AddClauseFormula(Device.Logic.OffClausesGroup); Formula.AddPutBit(GKStateBit.TurnOff_InAutomatic, Device); } if (Device.Logic.OnNowClausesGroup.IsNotEmpty()) { Formula.AddClauseFormula(Device.Logic.OnNowClausesGroup); Formula.AddPutBit(GKStateBit.TurnOnNow_InAutomatic, Device); } if (Device.Logic.OffNowClausesGroup.IsNotEmpty()) { Formula.AddClauseFormula(Device.Logic.OffNowClausesGroup); Formula.AddPutBit(GKStateBit.TurnOffNow_InAutomatic, Device); } if (Device.Logic.StopClausesGroup.IsNotEmpty()) { Formula.AddClauseFormula(Device.Logic.StopClausesGroup); Formula.AddPutBit(GKStateBit.Stop_InManual, Device); } SetICLogic(); } if ((Device.DriverType == GKDriverType.RSR2_GuardDetector || Device.DriverType == GKDriverType.RSR2_GuardDetectorSound || Device.DriverType == GKDriverType.RSR2_HandGuardDetector) && Device.GuardZones != null && Device.GuardZones.Count > 0) { Formula.AddGetBit(GKStateBit.On, Device.GuardZones.FirstOrDefault()); Formula.AddPutBit(GKStateBit.TurnOn_InAutomatic, Device); Formula.AddGetBit(GKStateBit.Off, Device.GuardZones.FirstOrDefault()); Formula.AddPutBit(GKStateBit.TurnOff_InAutomatic, Device); } if (Device.DriverType == GKDriverType.RSR2_MAP4 && Device.Zones.Count > 0) { int count = 0; foreach (var zone in Device.Zones) { Formula.AddGetBit(GKStateBit.Fire1, zone); if (count > 0) Formula.Add(FormulaOperationType.OR); Formula.AddGetBit(GKStateBit.Fire2, zone); Formula.Add(FormulaOperationType.OR); Formula.AddGetBit(GKStateBit.Attention, zone); Formula.Add(FormulaOperationType.OR); count++; Device.LinkToDescriptor(zone); } Formula.AddPutBit(GKStateBit.Reset, Device); } if (Device.Door != null && (Device.Door.LockDeviceUID == Device.UID || Device.Door.LockDeviceExitUID == Device.UID)) { switch (Device.Door.DoorType) { case GKDoorType.AirlockBooth: case GKDoorType.Turnstile: var device = Device.Door.LockDeviceUID == Device.UID ? Device.Door.ExitDevice : Device.Door.EnterDevice; var button = Device.Door.LockDeviceUID == Device.UID ? Device.Door.EnterButton : Device.Door.ExitButton; if (device != null) { Formula.AddGetBit(GKStateBit.Attention, device); if (button != null) { Formula.Add(FormulaOperationType.BR, 2, 8); Formula.AddGetBit(GKStateBit.Fire1, button); } Formula.Add(FormulaOperationType.BR, 2, 6); } Formula.AddGetBit(GKStateBit.On, Device.Door); Formula.AddPutBit(GKStateBit.TurnOn_InAutomatic, Device); Formula.AddGetBit(GKStateBit.TurningOff, Device.Door); Formula.AddGetBit(GKStateBit.Off, Device.Door); Formula.Add(FormulaOperationType.OR); Formula.AddPutBit(GKStateBit.TurnOff_InAutomatic, Device); break; case GKDoorType.Barrier: if (Device.Door.LockDeviceUID == Device.UID) { Formula.AddGetBit(GKStateBit.On, Device.Door); Formula.AddPutBit(GKStateBit.TurnOn_InAutomatic, Device); Formula.AddGetBit(GKStateBit.Off, Device.Door); Formula.AddPutBit(GKStateBit.TurnOff_InAutomatic, Device); } else { Formula.AddGetBit(GKStateBit.Fire1, Device.Door.LockControlDevice); Formula.AddGetBit(GKStateBit.Fire1, Device.Door.LockControlDeviceExit); Formula.Add(FormulaOperationType.OR); Formula.Add(FormulaOperationType.COM); Formula.AddGetBit(GKStateBit.Off, Device.Door); Formula.Add(FormulaOperationType.AND); Formula.AddPutBit(GKStateBit.TurnOn_InAutomatic, Device); Formula.AddGetBit(GKStateBit.On, Device.Door); Formula.AddPutBit(GKStateBit.TurnOff_InAutomatic, Device); } break; default: Formula.AddGetBit(GKStateBit.On, Device.Door); Formula.AddPutBit(GKStateBit.TurnOn_InAutomatic, Device); Formula.AddGetBit(GKStateBit.TurningOff, Device.Door); Formula.AddGetBit(GKStateBit.Off, Device.Door); Formula.Add(FormulaOperationType.OR); Formula.AddPutBit(GKStateBit.TurnOff_InAutomatic, Device); break; } Formula.Add(FormulaOperationType.END); } }