예제 #1
0
        /// <summary>
        /// Сохранить конфигурацию в файл
        /// </summary>
        public bool SaveConfiguration()
        {
            // Вывод на экран количество элементов каждой коллекции
            bool res = false;

            if (!String.IsNullOrEmpty(_cfgFileName))
            {
                Console.WriteLine("MillConfigUnit = 1");
                Console.WriteLine("SubscriptionsUnits = 1");
                Console.WriteLine($"ListDataBlockUnits = {ListDataBlockUnits.GetItemsCount()}");
                Console.WriteLine($"ListSignalUnits = {ListSignalUnits.GetItemsCount()}");
                Console.WriteLine($"ListThreadUnits = {ListThreadUnits.GetItemsCount()}");
                Console.WriteLine($"ListRollgangUnits = {ListRollgangUnits.GetItemsCount()}");
                Console.WriteLine($"ListLabelUnits = {ListLabelUnits.GetItemsCount()}");
                Console.WriteLine($"ListSensorUnits = {ListSensorUnits.GetItemsCount()}");
                Console.WriteLine($"ListStopperUnits = {ListStopperUnits.GetItemsCount()}");
                Console.WriteLine($"ListLinearDisplacementUnits = {ListLinearDisplacementUnits.GetItemsCount()}");
                Console.WriteLine($"ListDeleterUnits = {ListDeleterUnits.GetItemsCount()}");
                Console.WriteLine($"ListCagesUnits = {ListCagesUnits.GetItemsCount()}");
                Console.WriteLine($"ListIngotParametersUnits = {ListIngotParametersUnits.GetItemsCount()}");
                Console.WriteLine($"ListConnectionStringUnits = {ListConnectionStringUnits.GetItemsCount()}");
                Console.WriteLine($"ListAggregateUnits = {ListAggregateUnits.GetItemsCount()}");
                Console.WriteLine($"ListTechnicalUnits = {ListTechnicalUnits.GetItemsCount()}");

                res = true;
            }

            return(res);
        }
예제 #2
0
        /// <summary>
        /// Получить количество всех найденных элементов конфигурации
        /// </summary>
        /// <returns>Количество найденных элементов</returns>
        public int GetElementsCount()
        {
            int res = 0;

            res += string.IsNullOrEmpty(MillConfigUnit.Name) ? 0 : 1;
            res += SubscriptionsUnit.Threads > 0 ? 1 : 0;
            res += ListDataBlockUnits.GetItemsCount();
            res += ListSignalUnits.GetItemsCount();
            res += ListThreadUnits.GetItemsCount();
            res += ListRollgangUnits.GetItemsCount();
            res += ListLabelUnits.GetItemsCount();
            res += ListSensorUnits.GetItemsCount();
            res += ListStopperUnits.GetItemsCount();
            res += ListLinearDisplacementUnits.GetItemsCount();
            res += ListDeleterUnits.GetItemsCount();
            res += ListCagesUnits.GetItemsCount();
            res += ListIngotParametersUnits.GetItemsCount();
            res += ListConnectionStringUnits.GetItemsCount();
            res += ListAggregateUnits.GetItemsCount();
            res += ListTechnicalUnits.GetItemsCount();

            return(res);
        }
예제 #3
0
        /// <summary>
        /// Удалить нить производства
        /// </summary>
        /// <param name="name">Наименование нити</param>
        /// <param name="cascade">Удалить также все элементы нити</param>
        /// <returns></returns>
        public void DeleteProductionThreadByNumber(int threadNumber)
        {
            foreach (ThreadUnit thread in ListThreadUnits)
            {
                if (thread.ThreadNumber == threadNumber)
                {
                    // Обходим список объектов, которые могут находиться на нити.
                    // и удаляем объекты, принадлежащие удаляемой нити

                    // Обходим список объектов Рольганг
                    for (int i = 0; i < ListRollgangUnits.GetItemsCount(); i++)
                    {
                        RollgangUnit rollgang = ListRollgangUnits[i];
                        if (rollgang.ThreadNumber == threadNumber)
                        {
                            ListRollgangUnits.RemoveItem(i);
                        }
                    }

                    // Обходим список объектов Метка
                    for (int i = 0; i < ListLabelUnits.GetItemsCount(); i++)
                    {
                        LabelUnit label = ListLabelUnits[i];
                        if (label.ThreadNumber == threadNumber)
                        {
                            ListLabelUnits.RemoveItem(i);
                        }
                    }

                    // Обходим список объектов Датчик
                    for (int i = 0; i < ListSensorUnits.GetItemsCount(); i++)
                    {
                        SensorUnit sensor = ListSensorUnits[i];
                        if (sensor.ThreadNumber == threadNumber)
                        {
                            ListSensorUnits.RemoveItem(i);
                        }
                    }

                    // Обходим список объектов Упор
                    for (int i = 0; i < ListStopperUnits.GetItemsCount(); i++)
                    {
                        StopperUnit stopper = ListStopperUnits[i];
                        if (stopper.ThreadNumber == threadNumber)
                        {
                            ListStopperUnits.RemoveItem(i);
                        }
                    }

                    // Обходим список объектов АгрегатЛинейногоПеремещения
                    for (int i = 0; i < ListLinearDisplacementUnits.GetItemsCount(); i++)
                    {
                        LinearDisplacementUnit linear = ListLinearDisplacementUnits[i];
                        if (linear.ThreadNumber == threadNumber)
                        {
                            ListLinearDisplacementUnits.RemoveItem(i);
                        }
                    }

                    // Обходим список объектов УдалениеЗастрявших
                    for (int i = 0; i < ListDeleterUnits.GetItemsCount(); i++)
                    {
                        DeleterUnit deleter = ListDeleterUnits[i];
                        if (deleter.ThreadNumber == threadNumber)
                        {
                            ListDeleterUnits.RemoveItem(i);
                        }
                    }

                    // Обходим список объектов Клеть
                    for (int i = 0; i < ListCagesUnits.GetItemsCount(); i++)
                    {
                        CageUnit cage = ListCagesUnits[i];
                        if (cage.ThreadNumber == threadNumber)
                        {
                            ListCagesUnits.RemoveItem(i);
                        }
                    }

                    // Обходим список объектов ТехУзел
                    for (int i = 0; i < ListTechnicalUnits.GetItemsCount(); i++)
                    {
                        TechnicalUnit tech = ListTechnicalUnits[i];
                        if (tech.ThreadNumber == threadNumber)
                        {
                            ListTechnicalUnits.RemoveItem(i);
                        }
                    }
                }
            }
        }
예제 #4
0
        /// <summary>
        /// Удалить линию производства по имени
        /// </summary>
        /// <param name="name">Имя линии производства</param>
        /// <returns></returns>
        public void DeleteProductionThreadByName(string name)
        {
            int threadNumber = 0;

            FillProductionThreads();

            // Находим номер удаляемой нити
            foreach (ThreadUnit thread in ListThreadUnits)
            {
                if (thread.Name == name)
                {
                    threadNumber = thread.ThreadNumber;
                    break;
                }
            }

            foreach (ProductionThread productionThread in _listProductionThreads)
            {
                if (productionThread.Name == name)
                {
                    // Обходим список объектов, которые могут находиться на нити.
                    // и удаляем объекты, принадлежащие удаляемой нити

                    // Обходим список объектов Рольганг
                    for (int i = 0; i < ListRollgangUnits.GetItemsCount(); i++)
                    {
                        if (ListRollgangUnits[i].ThreadNumber == threadNumber)
                        {
                            ListRollgangUnits.RemoveItem(i);
                        }
                    }

                    // Обходим список объектов Метка
                    for (int i = 0; i < ListLabelUnits.GetItemsCount(); i++)
                    {
                        if (ListLabelUnits[i].ThreadNumber == threadNumber)
                        {
                            ListLabelUnits.RemoveItem(i);
                        }
                    }

                    // Обходим список объектов Датчик
                    for (int i = 0; i < ListSensorUnits.GetItemsCount(); i++)
                    {
                        if (ListSensorUnits[i].ThreadNumber == threadNumber)
                        {
                            ListSensorUnits.RemoveItem(i);
                        }
                    }

                    // Обходим список объектов Упор
                    for (int i = 0; i < ListStopperUnits.GetItemsCount(); i++)
                    {
                        if (ListStopperUnits[i].ThreadNumber == threadNumber)
                        {
                            ListStopperUnits.RemoveItem(i);
                        }
                    }

                    // Обходим список объектов АгрегатЛинейногоПеремещения
                    for (int i = 0; i < ListLinearDisplacementUnits.GetItemsCount(); i++)
                    {
                        if (ListLinearDisplacementUnits[i].ThreadNumber == threadNumber)
                        {
                            ListLinearDisplacementUnits.RemoveItem(i);
                        }
                    }

                    // Обходим список объектов УдалениеЗастрявших
                    for (int i = 0; i < ListDeleterUnits.GetItemsCount(); i++)
                    {
                        if (ListDeleterUnits[i].ThreadNumber == threadNumber)
                        {
                            ListDeleterUnits.RemoveItem(i);
                        }
                    }

                    // Обходим список объектов Клеть
                    for (int i = 0; i < ListCagesUnits.GetItemsCount(); i++)
                    {
                        if (ListCagesUnits[i].ThreadNumber == threadNumber)
                        {
                            ListCagesUnits.RemoveItem(i);
                        }
                    }

                    // Обходим список объектов ТехУзел
                    for (int i = 0; i < ListTechnicalUnits.GetItemsCount(); i++)
                    {
                        if (ListTechnicalUnits[i].ThreadNumber == threadNumber)
                        {
                            ListTechnicalUnits.RemoveItem(i);
                        }
                    }

                    // Обходим список объектов Производственная линия
                    for (int i = 0; i < ListThreadUnits.GetItemsCount(); i++)
                    {
                        if (ListThreadUnits[i].ThreadNumber == threadNumber)
                        {
                            ListThreadUnits.RemoveItem(i);
                        }
                    }

                    FillProductionThreads();
                }
            }
        }
예제 #5
0
        /// <summary>
        /// Заполнить производственные линии объектами из конфигурационного файла
        /// </summary>
        public void FillProductionThreads()
        {
            // Обходим список нитей и для каждой нити обходим списки объектов,
            // которые могут находиться на нити.

            for (int t = 0; t < ListThreadUnits.GetItemsCount(); t++)
            {
                ThreadUnit       thread           = ListThreadUnits[t];
                ProductionThread productionThread = new ProductionThread();

                // Обходим список объектов Рольганг
                for (int i = 0; i < ListRollgangUnits.GetItemsCount(); i++)
                {
                    RollgangUnit rollgang = ListRollgangUnits[i];
                    if (rollgang.ThreadNumber == thread.ThreadNumber)
                    {
                        productionThread.ListRollgangUnits.Add(rollgang);
                    }
                }

                // Обходим список объектов Метка
                for (int i = 0; i < ListLabelUnits.GetItemsCount(); i++)
                {
                    LabelUnit label = ListLabelUnits[i];
                    if (label.ThreadNumber == thread.ThreadNumber)
                    {
                        productionThread.ListLabelUnits.Add(label);
                    }
                }

                // Обходим список объектов Датчик
                for (int i = 0; i < ListSensorUnits.GetItemsCount(); i++)
                {
                    SensorUnit sensor = ListSensorUnits[i];
                    if (sensor.ThreadNumber == thread.ThreadNumber)
                    {
                        productionThread.ListSensorUnits.Add(sensor);
                    }
                }

                // Обходим список объектов Упор
                for (int i = 0; i < ListStopperUnits.GetItemsCount(); i++)
                {
                    StopperUnit stopper = ListStopperUnits[i];
                    if (stopper.ThreadNumber == thread.ThreadNumber)
                    {
                        productionThread.ListStopperUnits.Add(stopper);
                    }
                }

                // Обходим список объектов АгрегатЛинейногоПеремещения
                for (int i = 0; i < ListLinearDisplacementUnits.GetItemsCount(); i++)
                {
                    LinearDisplacementUnit linear = ListLinearDisplacementUnits[i];
                    if (linear.ThreadNumber == thread.ThreadNumber)
                    {
                        productionThread.ListLinearDisplacementUnits.Add(linear);
                    }
                }

                // Обходим список объектов УдалениеЗастрявших
                for (int i = 0; i < ListDeleterUnits.GetItemsCount(); i++)
                {
                    DeleterUnit deleter = ListDeleterUnits[i];
                    if (deleter.ThreadNumber == thread.ThreadNumber)
                    {
                        productionThread.ListDeleterUnits.Add(deleter);
                    }
                }

                // Обходим список объектов Клеть
                for (int i = 0; i < ListCagesUnits.GetItemsCount(); i++)
                {
                    CageUnit cage = ListCagesUnits[i];
                    if (cage.ThreadNumber == thread.ThreadNumber)
                    {
                        productionThread.ListCagesUnits.Add(cage);
                    }
                }

                // Обходим список объектов ТехУзел
                for (int i = 0; i < ListTechnicalUnits.GetItemsCount(); i++)
                {
                    TechnicalUnit tech = ListTechnicalUnits[i];
                    if (tech.ThreadNumber == thread.ThreadNumber)
                    {
                        productionThread.ListTechnicalUnits.Add(tech);
                    }
                }

                productionThread.Uid          = thread.Uid;
                productionThread.Name         = thread.Name;
                productionThread.ThreadNumber = thread.ThreadNumber;
                productionThread.Direction    = thread.Direction;
                productionThread.StartPos     = thread.StartPos;
                productionThread.FinishPos    = thread.FinishPos;
                productionThread.StopOnEnds   = thread.StopOnEnds;
                productionThread.PrevThread   = thread.PrevThread;
                productionThread.NextThread   = thread.NextThread;

                _listProductionThreads.Add(productionThread);
            }
        }
예제 #6
0
        /// <summary>
        /// Разбор конфигурационного файла на объекты
        /// </summary>
        /// <exception cref="NullReferenceException">Неверный формат конфигурационного файла</exception>
        public void Parse()
        {
            if (String.IsNullOrEmpty(_cfgFileName))
            {
                return;
            }

            List <ConfigurationUnit>  objectsList = new List <ConfigurationUnit>();
            Stack <ConfigurationUnit> subobjects  = new Stack <ConfigurationUnit>();
            bool              openedMainObject    = false;
            int               subObjectsCount     = 0;
            bool              closedSubObject     = true;
            string            line;
            ConfigurationUnit currConfigurationUnit = null;

            // Открываем файл конфигурации для чтения и читаем его построчно
            StreamReader reader = new StreamReader(_cfgFileName, System.Text.Encoding.Default);

            while ((line = reader.ReadLine()) != null)
            {
                line = line.Replace("\t", " ").Trim();

                if (line == "" || line.StartsWith("//") || line == "(")
                {
                    continue;
                }

                if (line.Contains("=") && currConfigurationUnit != null)
                {
                    // Разбираем параметры объекта по первому вхождению символа '='
                    int    separator = line.IndexOf('=');
                    string key       = line.Substring(0, separator);
                    string val       = line.Substring(separator + 1);
                    currConfigurationUnit.Parameters[key] = val;
                }
                else
                {
                    // Определяем тип операции с объектом
                    if (line == ")")
                    {
                        if (openedMainObject)
                        {
                            // Закрывем объект
                            if (subObjectsCount > 0)
                            {
                                // Закрываем подобъект
                                if (subObjectsCount > 1)
                                {
                                    // Забираем очередной подобъект из стека
                                    ConfigurationUnit topLevel = subobjects.Pop();
                                    topLevel.SubObjects.Add(currConfigurationUnit);
                                    currConfigurationUnit = topLevel;
                                    subObjectsCount--;
                                }
                                else
                                {
                                    // В стеке нет подобъектов, последний подобъект в переменной currObject
                                    ConfigurationUnit topLevel = objectsList[objectsList.Count - 1];
                                    objectsList.Remove(topLevel);
                                    topLevel.SubObjects.Add(currConfigurationUnit);
                                    currConfigurationUnit = topLevel;
                                    subObjectsCount--;
                                    closedSubObject = true;
                                }
                            }
                            else
                            {
                                // Закрываем главный объект
                                if (!closedSubObject)
                                {
                                    ConfigurationUnit sub = subobjects.Pop();
                                    currConfigurationUnit?.SubObjects.Add(sub);
                                    closedSubObject = true;
                                }
                                objectsList.Add(currConfigurationUnit);
                                currConfigurationUnit = null;
                                openedMainObject      = false;
                            }
                        }
                        else
                        {
                            // Нет созданных объектов
                            throw new NullReferenceException("Ошибка при разборе конфигурационного файла");
                        }
                    }
                    else
                    {
                        // Открываем объект
                        if (openedMainObject)
                        {
                            if (subObjectsCount == 0)
                            {
                                // Это главный объект, и подобъектов пока нет
                                // Сохраняем главный объект и создаем подобъект
                                objectsList.Add(currConfigurationUnit);
                                currConfigurationUnit = new ConfigurationUnit();
                                ConfigurationUnitType type = GetObjectType(line);
                                currConfigurationUnit.Name = line;
                                currConfigurationUnit.Type = type;
                                closedSubObject            = false;
                                subObjectsCount++;
                            }
                            else
                            {
                                // Это подобъект, сохроаняем его в стеке и создаем новый подобъект
                                subobjects.Push(currConfigurationUnit);
                                currConfigurationUnit = new ConfigurationUnit();
                                ConfigurationUnitType type = GetObjectType(line);
                                currConfigurationUnit.Name = line;
                                currConfigurationUnit.Type = type;
                                subObjectsCount++;
                                closedSubObject = false;
                            }
                        }
                        else
                        {
                            // Это главный объект
                            currConfigurationUnit = new ConfigurationUnit();
                            ConfigurationUnitType type = GetObjectType(line);
                            currConfigurationUnit.Name = line;
                            currConfigurationUnit.Type = type;
                            openedMainObject           = true;
                        }
                    }
                }
            }

            reader.Close();

            foreach (ConfigurationUnit item in objectsList)
            {
                switch (item.Type)
                {
                case ConfigurationUnitType.MillConfig:
                    MillConfigUnit = new MillConfigUnit(item);
                    break;

                case ConfigurationUnitType.Subscription:
                    SubscriptionsUnit = new SubscriptionsUnit(item);
                    break;

                case ConfigurationUnitType.DataBlock:
                    ListDataBlockUnits.Add(new DataBlockUnit(item));
                    break;

                case ConfigurationUnitType.Signal:
                    ListSignalUnits.Add(new SignalUnit(item));
                    break;

                case ConfigurationUnitType.Thread:
                    ListThreadUnits.Add(new ThreadUnit(item));
                    break;

                case ConfigurationUnitType.Rollgang:
                    ListRollgangUnits.Add(new RollgangUnit(item));
                    break;

                case ConfigurationUnitType.Label:
                    ListLabelUnits.Add(new LabelUnit(item));
                    break;

                case ConfigurationUnitType.Sensor:
                    ListSensorUnits.Add(new SensorUnit(item));
                    break;

                case ConfigurationUnitType.Stopper:
                    ListStopperUnits.Add(new StopperUnit(item));
                    break;

                case ConfigurationUnitType.LinearMoving:
                    ListLinearDisplacementUnits.Add(new LinearDisplacementUnit(item));
                    break;

                case ConfigurationUnitType.Deleter:
                    ListDeleterUnits.Add(new DeleterUnit(item));
                    break;

                case ConfigurationUnitType.Cage:
                    ListCagesUnits.Add(new CageUnit(item));
                    break;

                case ConfigurationUnitType.IngotParams:
                    ListIngotParametersUnits.Add(new IngotParametersUnit(item));
                    break;

                case ConfigurationUnitType.Connection:
                    ListConnectionStringUnits.Add(new ConnectionStringUnit(item));
                    break;

                case ConfigurationUnitType.Aggregate:
                    ListAggregateUnits.Add(new AggregateUnit(item));
                    break;

                case ConfigurationUnitType.TechnicalUnit:
                    ListTechnicalUnits.Add(new TechnicalUnit(item));
                    break;
                }
            }
        }