Beispiel #1
0
        /// <summary>
        /// Создание новой операции.
        /// </summary>
        /// <param name="name">Имя операции.</param>
        /// <param name="getN">Функция получения номера операции.</param>
        /// <param name="newOwner">Владелец операции (Менеджер операций)
        /// </param>
        public Mode(string name, GetN getN, ModesManager newOwner)
        {
            this.name  = name;
            this.getN  = getN;
            this.owner = newOwner;

            restrictionMngr = new RestrictionManager();

            stepsMngr = new List <State>();

            var lastState   = State.StateType.STATES_CNT;
            var secondState = State.StateType.PAUSE;

            stepsMngr.Add(new State(State.StateType.RUN, this, true));
            for (var state = secondState; state < lastState; state++)
            {
                stepsMngr.Add(new State(state, this));
            }

            operPar = new OperationParams();

            // Экземпляр класса базовой операции
            baseOperation = new BaseOperation(this);

            SetItems();
        }
 public void ChangeCrossRestriction(ModesManager oldModesMngr = null)
 {
     for (int i = 0; i < modes.Count; i++)
     {
         if ((oldModesMngr != null) &&
             (i < oldModesMngr.Modes.Count))
         {
             modes[i].ChangeCrossRestriction(oldModesMngr.Modes[i]);
         }
         else
         {
             modes[i].ChangeCrossRestriction();
         }
     }
     if (oldModesMngr != null)
     {
         if (oldModesMngr.Modes.Count > modes.Count)
         {
             for (int i = modes.Count; i < oldModesMngr.Modes.Count;
                  i++)
             {
                 int tobjNum = TechObjectManager.GetInstance()
                               .GetTechObjectN(owner);
                 TechObjectManager.GetInstance()
                 .ChangeModeNum(tobjNum, i + 1, -1);
             }
         }
     }
 }
Beispiel #3
0
        public Mode Clone(GetN getN, ModesManager newOwner, string name = "")
        {
            Mode clone = (Mode)MemberwiseClone();

            clone.getN          = getN;
            clone.owner         = newOwner;
            clone.baseOperation = baseOperation.Clone(clone);

            if (name != "")
            {
                clone.name = name;
            }

            clone.stepsMngr = new List <State>();
            for (int idx = 0; idx < stepsMngr.Count; idx++)
            {
                clone.stepsMngr.Add(stepsMngr[idx].Clone());
            }

            clone.operPar = operPar.Clone(clone);

            clone.restrictionMngr = restrictionMngr.Clone();
            clone.SetItems();

            return(clone);
        }
        /// <summary>
        /// Создание технологического объекта.
        /// </summary>
        /// <param name="name">Имя.</param>
        /// <param name="getN">Функция получения порядкового локального номера.
        /// </param>
        /// <param name="technologicalNumber">Технологический номер.</param>
        /// <param name="nameEplan">ОУ объекта в Eplan'е.</param>
        /// <param name="cooperParamNumber">Время совместного перехода шагов
        /// (параметр).</param>
        /// <param name="attachedObjects">Привязанные объекты</param>
        /// <param name="baseTechObject">Базовый технологический объект</param>
        /// <param name="NameBC">Имя объекта Monitor</param>
        /// <param name="techType">Номер типа</param>
        public TechObject(string name, GetN getLocalNum,
                          int technologicalNumber, int techType, string nameEplan,
                          int cooperParamNumber, string NameBC, string attachedObjects,
                          BaseTechObject baseTechObject)
        {
            this.name        = name;
            this.getLocalNum = getLocalNum;

            this.techNumber = new TechObjectN(this, technologicalNumber);
            this.techType   = new ObjectProperty("Тип", techType);
            this.nameBC     = new ObjectProperty("Имя объекта Monitor",
                                                 NameBC);
            this.nameEplan         = new NameInEplan(nameEplan, this);
            this.cooperParamNumber = new ObjectProperty(
                "Время совместного перехода шагов (параметр)",
                cooperParamNumber);

            this.attachedObjects = new AttachedToObjects(attachedObjects,
                                                         this);

            modes = new ModesManager(this);

            paramsManager        = new ParamsManager();
            paramsManager.Parent = this;

            equipment = new Equipment(this);

            InitBaseTechObject(baseTechObject);
            SetItems();
        }
        /// <summary>
        /// Проверка операций технологического объекта
        /// </summary>
        /// <returns>Строка с ошибками</returns>
        public string Check()
        {
            var  errors         = string.Empty;
            var  objName        = DisplayText[0];
            bool setBaseTechObj = BaseTechObject != null ? true : false;

            if (setBaseTechObj == false)
            {
                string msg = string.Format("Неопознанный объект - " +
                                           "\"{0}\"\n", objName);
                errors += msg;
            }
            else
            {
                errors += Equipment.Check();
                errors += attachedObjects.Check();
            }

            ModesManager modesManager = ModesManager;
            List <Mode>  modes        = modesManager.Modes;

            foreach (var mode in modes)
            {
                errors += mode.Check();
            }

            errors += GetParamsManager().Check(objName);

            return(errors);
        }
Beispiel #6
0
        /// <summary>
        /// Проверка действий в шаге
        /// </summary>
        /// <returns>Строка с ошибками</returns>
        public string Check()
        {
            var        errors          = string.Empty;
            List <int> devicesInAction = new List <int>();

            foreach (Action a in actions)
            {
                if (a.GetType().Name == "Action" &&
                    (a.DisplayText[0].Contains("Включать") ||
                     a.DisplayText[0].Contains("Выключать")))
                {
                    devicesInAction.AddRange(a.DeviceIndex);
                }
            }

            List <int> FindEqual = devicesInAction.GroupBy(x => x)
                                   .SelectMany(y => y.Skip(1)).Distinct().ToList();

            foreach (int i in FindEqual)
            {
                State           state        = Owner;
                Mode            mode         = state.Owner;
                ModesManager    modesManager = mode.Owner;
                TechObject      techObject   = modesManager.Owner;
                Device.IODevice device       = Device.DeviceManager.GetInstance()
                                               .GetDeviceByIndex(i);
                string msg = $"Неправильно заданы устройства в шаге " +
                             $"\"{GetStepName()}\", операции \"{mode.Name}\"," +
                             $"технологического объекта " +
                             $"\"{techObject.DisplayText[0]}\"\n";
                errors += msg;
            }

            return(errors);
        }
Beispiel #7
0
        /// <summary>
        /// Создание технологического объекта.
        /// </summary>
        /// <param name="name">Имя.</param>
        /// <param name="getN">Функция получения порядкового номера.</param>
        /// <param name="technologicalNumber">Технологический номер.</param>
        /// <param name="nameEplan">ОУ объекта в Eplan'е.</param>
        /// <param name="cooperParamNumber">Время совместного перехода шагов (параметр).</param>
        public TechObject(string name, GetN getN, int technologicalNumber,
                          int techType, string nameEplan, int cooperParamNumber,
                          string NameBC, string attachedObjects)
        {
            this.name = name;
            this.getN = getN;

            this.techNumber = new TechObjectN(this, technologicalNumber);
            this.techType   = new Editor.ObjectProperty("Тип", techType);
            this.nameBC     = new Editor.ObjectProperty("Имя объекта Monitor",
                                                        NameBC);
            this.nameEplan         = new NameInEplan(nameEplan, this);
            this.cooperParamNumber = new Editor.ObjectProperty(
                "Время совместного перехода шагов (параметр)",
                cooperParamNumber);

            this.s88Level        = new ObjS88Level(0, this);
            this.attachedObjects = new AttachedToObjects(attachedObjects,
                                                         this);

            // Экземпляр класса базового агрегата
            baseTechObject = new BaseTechObject(this);

            modes             = new ModesManager(this);
            parameters        = new Params();
            parameters.Parent = this;

            equipment = new Equipment(this);

            SetItems();
        }
Beispiel #8
0
        /// <summary>
        /// Установка параметров в операции
        /// </summary>
        /// <param name="modesNumbersWithParam">Список операций, в который
        /// надо добавить этот параметр</param>
        private void SetOperationParameters(List <int> modesNumbersWithParam)
        {
            ITreeViewItem parameter         = Parent;
            ITreeViewItem parameters        = parameter.Parent;
            ITreeViewItem parametersManager = parameters.Parent;
            ITreeViewItem techObject        = parametersManager.Parent;
            ModesManager  modesManager      = (techObject as TechObject).ModesManager;
            List <Mode>   modes             = modesManager.Modes;

            if (modes.Count < modesNumbersWithParam.Max())
            {
                throw new Exception();
            }

            foreach (var mode in modes)
            {
                var  modeParams        = mode.GetOperationParams();
                bool isModeForAddParam = modesNumbersWithParam
                                         .Contains(mode.GetModeNumber());
                if (isModeForAddParam)
                {
                    modeParams.AddParam(parameter as Param);
                }
                else
                {
                    modeParams.DeleteParam(parameter as Param);
                }
            }
        }
Beispiel #9
0
        /// <summary>
        /// Автоматическая настройка технологического объекта на основе его
        /// базового объекта.
        /// </summary>
        public void SetUpFromBaseTechObject()
        {
            if (BaseTechObject == null)
            {
                return;
            }

            ModesManager.SetUpFromBaseTechObject(BaseTechObject);
        }
Beispiel #10
0
 /// <summary>
 /// Сброс базового объекта
 /// </summary>
 public void ResetBaseTechObject()
 {
     ModesManager.ClearBaseOperations();
     systemParams.Clear();
     equipment.Clear();
     attachedObjects.SetNewValue(string.Empty);
     baseTechObject = null;
     CompareEplanNames();
 }
Beispiel #11
0
        /// <summary>
        /// Автоматическая настройка технологического объекта на основе его
        /// базового объекта.
        /// </summary>
        public void SetUpFromBaseTechObject()
        {
            if (BaseTechObject == null)
            {
                return;
            }

            systemParams.SetUpFromBaseTechObject(BaseTechObject.SystemParams);
            ModesManager.SetUpFromBaseTechObject(BaseTechObject);
        }
Beispiel #12
0
        /// <summary>
        /// Автоматическая настройка технологического объекта на основе его
        /// базового объекта.
        /// </summary>
        public void SetUpFromBaseTechObject()
        {
            if (BaseTechObject == null)
            {
                return;
            }

            nameBC.SetNewValue(BaseTechObject.MonitorName);
            systemParams.SetUpFromBaseTechObject(BaseTechObject.SystemParams);
            ModesManager.SetUpFromBaseTechObject(BaseTechObject);
            paramsManager.SetUpFromBaseTechObject(BaseTechObject.Parameters);
        }
Beispiel #13
0
        public ModesManager Clone(TechObject owner)
        {
            ModesManager clone = (ModesManager)MemberwiseClone();

            clone.modes = new List <Mode>();
            foreach (Mode mode in modes)
            {
                clone.modes.Add(mode.Clone(clone.GetModeN, clone));
            }

            return(clone);
        }
Beispiel #14
0
        /// <summary>
        /// Проверить операции объекта
        /// </summary>
        /// <returns></returns>
        private string CheckModes()
        {
            string       errors       = string.Empty;
            ModesManager modesManager = ModesManager;
            List <Mode>  modes        = modesManager.Modes;

            foreach (var mode in modes)
            {
                errors += mode.Check();
            }

            return(errors);
        }
Beispiel #15
0
        /// <summary>
        /// Проверка действий в шаге
        /// </summary>
        /// <returns>Строка с ошибками</returns>
        public string Check()
        {
            var errors = string.Empty;

            State        state        = Owner;
            Mode         mode         = state.Owner;
            ModesManager modesManager = mode.Owner;
            TechObject   techObject   = modesManager.Owner;
            string       techObjName  = techObject.DisplayText[0];
            string       modeName     = mode.Name;

            errors += CheckOpenAndCloseActions(techObjName, modeName);
            errors += CheckInOutGroupActions(techObjName, modeName);
            return(errors);
        }
Beispiel #16
0
        /// <summary>
        /// Создание технологического объекта.
        /// </summary>
        /// <param name="name">Имя.</param>
        /// <param name="getN">Функция получения порядкового локального номера.
        /// </param>
        /// <param name="technologicalNumber">Технологический номер.</param>
        /// <param name="nameEplan">ОУ объекта в Eplan'е.</param>
        /// <param name="cooperParamNumber">Время совместного перехода шагов
        /// (параметр).</param>
        /// <param name="attachedObjects">Привязанные объекты</param>
        /// <param name="baseTechObject">Базовый технологический объект</param>
        /// <param name="NameBC">Имя объекта Monitor</param>
        /// <param name="techType">Номер типа</param>
        public TechObject(string name, GetN getLocalNum,
                          int technologicalNumber, int techType, string nameEplan,
                          int cooperParamNumber, string NameBC, string attachedObjects,
                          BaseTechObject baseTechObject)
        {
            this.name        = name;
            this.getLocalNum = getLocalNum;

            this.techNumber = new TechObjectN(this, technologicalNumber);
            this.techType   = new ObjectProperty("Тип", techType);
            this.nameBC     = new ObjectProperty("Имя объекта Monitor",
                                                 NameBC);
            this.nameEplan         = new NameInEplan(nameEplan, this);
            this.cooperParamNumber = new ObjectProperty(
                "Время совместного перехода шагов (параметр)",
                cooperParamNumber, -1);

            var allowedObjects = new List <BaseTechObjectManager.ObjectType>()
            {
                BaseTechObjectManager.ObjectType.Aggregate
            };
            string attachObjectsName    = "Привязанные агрегаты";
            string attachObjectsLuaName = "attached_objects";

            this.attachedObjects = new AttachedObjects(attachedObjects,
                                                       this, new AttachedObjectStrategy.AttachedWithInitStrategy(
                                                           attachObjectsName, attachObjectsLuaName, allowedObjects));

            modes = new ModesManager(this);

            paramsManager        = new ParamsManager();
            paramsManager.Parent = this;

            string sysParName   = "Системные параметры";
            string sysParLuName = "system_parameters";

            systemParams        = new SystemParams(sysParName, sysParLuName);
            systemParams.Parent = this;

            equipment = new Equipment(this);

            InitBaseTechObject(baseTechObject);
            SetItems();
        }
Beispiel #17
0
        /// <summary>
        /// Создание новой операции.
        /// </summary>
        /// <param name="name">Имя операции.</param>
        /// <param name="getN">Функция получения номера операции.</param>
        /// <param name="newOwner">Владелец операции (Менеджер операций)
        /// </param>
        public Mode(string name, GetN getN, ModesManager newOwner)
        {
            this.name  = name;
            this.getN  = getN;
            this.owner = newOwner;

            restrictionMngr = new RestrictionManager();

            stepsMngr = new List <State>();

            stepsMngr.Add(new State(StateStr[(int)StateName.RUN], true, this,
                                    true));
            for (StateName i = StateName.PAUSE; i < StateName.STATES_CNT; i++)
            {
                stepsMngr.Add(new State(StateStr[(int)i], true, this));
            }

            operPar = new OperationParams();

            // Экземпляр класса базовой операции
            baseOperation = new BaseOperation(this);

            SetItems();
        }
Beispiel #18
0
 /// <summary>
 /// Изменение менеджера операций объекта-владельца операций.
 /// </summary>
 /// <param name="newOwner">Новый менеджер операций.</param>
 /// <returns></returns>
 public void ChangeOwner(ModesManager newOwner)
 {
     owner = newOwner;
 }