コード例 #1
0
        /// <summary>
        /// Экспорт базы каналов, поток.
        /// </summary>
        /// <param name="param">Параметр потока</param>
        private void SaveAsXMLThread(object param)
        {
            var data = param as DataForSaveAsXML;

            Logs.Show();
            Logs.DisableButtons();
            Logs.Clear();
            Logs.SetProgress(0);

            try
            {
                Logs.SetProgress(1);
                XMLReporter.SaveAsXML(data.pathToFile, data.rewrite,
                                      data.cdbxTagView, data.cdbxNewNames);
                Logs.SetProgress(50);
                Logs.AddMessage("Done.");
            }
            catch (System.Exception ex)
            {
                Logs.AddMessage("Exception - " + ex);
            }
            finally
            {
                if (Logs.IsNull() == false)
                {
                    Logs.EnableButtons();
                    Logs.SetProgress(100);
                }
            }
        }
コード例 #2
0
        /// <summary>
        /// Экспорт технологических объектов в Excel.
        /// </summary>
        /// <param name="path">Путь к директории сохранения</param>
        /// <param name="projectName">Имя проекта</param>
        private void ExportToExcel(object param)
        {
            var par = param as string;

            Logs.Show();

            Logs.DisableButtons();
            Logs.Clear();
            Logs.SetProgress(0);

            try
            {
                Logs.SetProgress(1);
                ExcelRepoter.ExportTechDevs(par);
                Logs.AddMessage("Done.");
            }

            catch (System.Exception ex)
            {
                Logs.AddMessage("Exception - " + ex);
            }
            finally
            {
                if (Logs.IsNull() == false)
                {
                    Logs.EnableButtons();
                    Logs.SetProgress(100);
                }
            }
        }
コード例 #3
0
        /// <summary>
        /// Обновление подписей к клеммам модулей IO
        /// в соответствии с актуальным названием устройств.
        /// </summary>
        public void UpdateModulesBinding()
        {
            var errors = "";

            try
            {
                Logs.Clear();
                Logs.Show();
                Logs.AddMessage("Выполняется синхронизация..");
                errors = ModulesBindingUpdater.GetInstance().Execute();
                Logs.Clear();
            }
            catch (System.Exception ex)
            {
                Logs.AddMessage("Exception - " + ex);
            }
            finally
            {
                if (errors != "")
                {
                    Logs.AddMessage(errors);
                }

                if (Logs.IsNull() == false)
                {
                    Logs.AddMessage("Синхронизация завершена. ");
                    Logs.SetProgress(100);
                    Logs.EnableButtons();
                }
            }
        }
コード例 #4
0
        /// <summary>
        /// Проверка имени проекта
        /// </summary>
        /// <param name="name">Имя проекта</param>
        public void CheckProjectName(ref string name)
        {
            const int MaxProjectNameLength = 70;

            if (name.Length > MaxProjectNameLength)
            {
                string errorMessage = $"Некорректно задано имя проекта - " +
                                      $"длина не должна превышать {MaxProjectNameLength} символов. ";
                Logs.AddMessage(errorMessage);
                name = name.Substring(0, MaxProjectNameLength);
            }

            const string RegexPattern =
                "(?<plant>[A-Z]+[1-9]{1})\\-(?<project>[а-яА-Я1-9\\-]+$)";
            Match match = Regex.Match(name, RegexPattern);

            if (!match.Success)
            {
                string errorMessage = "Некорректно задано имя проекта - " +
                                      "рекомендуется для имени площадки использовать " +
                                      "английский, а для проекта - русский, вместо пробелов - " +
                                      "знак минус (прим., LOC1-Название-проекта). ";
                Logs.AddMessage(errorMessage);
                name = GetModifyingCurrentProjectName();
            }
        }
コード例 #5
0
ファイル: DeviceReader.cs プロジェクト: radtek/EasyEPLANner
        /// <summary>
        /// Чтение устройств
        /// </summary>
        private void ReadDevices()
        {
            foreach (var function in deviceFunctions)
            {
                bool skip = NeedToSkip(function);
                if (skip == true)
                {
                    continue;
                }

                string name              = GetName(function);
                string description       = GetDescription(function);
                string subType           = GetSubType(function);
                string parameters        = GetParameters(function);
                string properties        = GetProperties(function);
                string runtimeParameters = GetRuntimeParameters(function);
                int    deviceLocation    = GetDeviceLocation(function);
                string articleName       = GetArticleName(function);

                string error;
                deviceManager.AddDeviceAndEFunction(name, description,
                                                    subType, parameters, runtimeParameters, properties,
                                                    deviceLocation, function, out error, articleName);

                if (error != "")
                {
                    Logs.AddMessage(error);
                }
            }

            deviceManager.Sort();
        }
コード例 #6
0
        /// <summary>
        /// Проверка конфигурации.
        /// </summary>
        /// <param name="silentMode">Тихий режим (без окна логов)</param>
        public void Check(bool silentMode = false)
        {
            configurationChecker.Check();

            string errors = configurationChecker.Errors;

            if (errors != "" && silentMode == false)
            {
                Logs.AddMessage(errors);
            }
        }
コード例 #7
0
        /// <summary>
        /// Получить информацию о модуле ввода-вывода
        /// </summary>
        /// <param name="function">Функция</param>
        /// <param name="type">Тип модуля ввода-вывода</param>
        /// <returns></returns>
        private IO.IOModuleInfo GetIOModuleInfo(Function function, string type)
        {
            bool isStub;
            var  moduleInfo = IO.IOModuleInfo.GetModuleInfo(type, out isStub);

            if (isStub && type != "")
            {
                Logs.AddMessage($"Неизвестный " +
                                $"модуль \"{function.VisibleName}\" - \"{type}\".");
            }

            return(moduleInfo);
        }
コード例 #8
0
        /// <summary>
        /// Чтение конфигурации узлов и модулей ввода-вывода.
        ///
        /// Считывание информации о модулях из проекта.
        /// Информацию получаем на основе листа с шиной модулей ввода\вывода
        /// IO. У изделий должны быть заполнены соответствующие свойства,
        /// они должны соответствующим образом именоваться.
        /// Алгоритм:
        /// 1. С помощью фильтра выбираем функциональные объекты  в пределах
        /// открытого проекта со следующими ограничениями: категория PLCBox,
        /// главная функция, производитель изделия WAGO/ Phoenix.
        /// 2. Обрабатываем функциональные объекты со следующим именем:
        /// -Аxxx, где А - признак элемента IO, xxx - номер.
        /// Также учитываем контроллер Phoenix Contact с ОУ "А1", если он есть.
        /// 3. Вначале обрабатываем элементы с номером, кратным 100 - это узел
        /// IO. Добавляем их в список узлов IO. Тип узла получаем из
        /// изделия.
        /// 4. Обрабатываем остальные элементы - модули IO. Помещаем их в
        /// списки согласно порядковому номеру (вставляем при этом пустые
        /// элементы, если длина списка короче номера нового добавляемого
        /// модуля).
        /// </summary>
        public void Read()
        {
            PrepareForReading();
            ReadNodes();

            if (isContainsNodes == false)
            {
                Logs.AddMessage($"Не найден ни один узловой модуль " +
                                $"(A100, A200, ...).");
                return;
            }

            ReadModules(isContainsNodes);
        }
コード例 #9
0
        /// <summary>
        /// Получить IP-адрес из функции.
        /// </summary>
        /// <param name="function">Функция для поиска</param>
        /// <returns></returns>
        private string GetIPAdressFromFunction(Function function)
        {
            var ipAddress = "";

            if (!function.Properties.FUNC_PLCGROUP_STARTADDRESS.IsEmpty)
            {
                ipAddress = function.Properties.FUNC_PLCGROUP_STARTADDRESS;
            }
            else
            {
                Logs.AddMessage($"У узла \"" +
                                $"{function.VisibleName}\" не задан IP-адрес.");
            }

            return(ipAddress);
        }
コード例 #10
0
        /// <summary>
        /// Чтение узлов ввода-вывода.
        /// </summary>
        private void ReadNodes()
        {
            foreach (var function in functionsForSearching)
            {
                bool needToSkip = NeedSkipNode(function);
                if (needToSkip == true)
                {
                    continue;
                }

                isContainsNodes = true;
                var    match      = IONameRegex.Match(function.VisibleName);
                int    nodeNumber = Convert.ToInt32(match.Groups["n"].Value);
                string name       = $"A{nodeNumber}";
                string ipAdress   = GetIPAdressFromFunction(function);
                string type       = GetNodeTypeFromFunction(function);

                if (type != "")
                {
                    if (isContainsA1 == true)
                    {
                        if (nodeNumber == numberA1)
                        {
                            IOManager.AddNode(numberA1, type, ipAdress, name);
                        }
                        else
                        {
                            IOManager.AddNode(nodeNumber / 100 + numberA1, type,
                                              ipAdress, name);
                        }
                    }
                    else
                    {
                        IOManager.AddNode(nodeNumber / 100, type, ipAdress,
                                          name);
                    }
                }
                else
                {
                    Logs.AddMessage($"У модуля \"" +
                                    $"{function.VisibleName}\" не задан параметр изделия" +
                                    $" (номер типа изделия).");
                }
            }
        }
コード例 #11
0
        /// <summary>
        /// Получить тип модуля ввода-вывода из функции.
        /// </summary>
        /// <param name="function">Функция для проверки</param>
        /// <returns></returns>
        private string GetModuleTypeFromFunction(Function function)
        {
            var type = "";

            if (!function.Articles[0].Properties[Eplan.EplApi.DataModel
                                                 .Properties.Article.ARTICLE_TYPENR].IsEmpty)
            {
                type = function.Articles[0].Properties[Eplan.EplApi
                                                       .DataModel.Properties.Article.ARTICLE_TYPENR]
                       .ToString().Trim();
            }
            else
            {
                Logs.AddMessage($"У модуля \"" +
                                $"{function.VisibleName}\" не задан параметр изделия" +
                                $" (номер типа изделия).");
            }

            return(type);
        }
コード例 #12
0
        /// <summary>
        /// Нужно ли пропустить функцию.
        /// </summary>
        /// <param name="function">Функция для проверки</param>
        /// <returns></returns>
        private bool NeedSkipFunction(Function function)
        {
            var skip  = false;
            var match = IONameRegex.Match(function.VisibleName);

            if (match.Success == false ||
                !function.Properties.FUNC_SUPPLEMENTARYFIELD[1].IsEmpty)
            {
                skip = true;
                return(skip);
            }

            if (function.Articles.GetLength(0) == 0)
            {
                Logs.AddMessage($"У модуля \"" +
                                $"{function.VisibleName}\" не задано изделие.");
                skip = true;
                return(skip);
            }

            return(skip);
        }
コード例 #13
0
        /// <summary>
        /// Сохранить описание проекта
        /// </summary>
        /// <param name="param">Параметры</param>
        public static void Save(object param)
        {
            var par = param as ParametersForSave;

            if (!par.silentMode)
            {
                Logs.Show();
                Logs.DisableButtons();
                Logs.SetProgress(0);
            }

            try
            {
                try
                {
                    if (!Directory.Exists(par.path))
                    {
                        Directory.CreateDirectory(par.path);
                    }
                }
                catch (DriveNotFoundException)
                {
                    if (!par.silentMode)
                    {
                        Logs.AddMessage("Ошибка подключения к диску с " +
                                        "проектами. Подключите диск!");
                        Logs.SetProgress(100);
                    }
                    return;
                }

                SaveIOFile(par);

                if (par.silentMode == false)
                {
                    Logs.SetProgress(50);
                }

                SaveTechObjectsFile(par);
                SaveTechDevicesFile(par);
                SaveRestrictionsFile(par);
                SaveMainFile(par);
                SaveModbusFile(par);
                SaveProfibusFile(par);
                SavePrgFile(par);
                SaveSharedFile(par);

                if (par.silentMode == false)
                {
                    if (!Logs.IsEmpty())
                    {
                        Logs.AddMessage("Done.");
                        Logs.ShowLastLine();
                    }
                    else
                    {
                        Logs.Hide();
                    }
                }
            }
            catch (Exception ex)
            {
                if (par.silentMode == false)
                {
                    Logs.AddMessage("Exception - " + ex);
                    Logs.AddMessage("");
                    Logs.AddMessage("");
                    Logs.ShowLastLine();
                }
            }
            finally
            {
                if (!par.silentMode && Logs.IsNull() == false)
                {
                    Logs.EnableButtons();
                    Logs.SetProgress(100);
                }
            }
        }
コード例 #14
0
ファイル: XMLReporter.cs プロジェクト: radtek/EasyEPLANner
        /// <summary>
        /// Расчет идентификаторов для базы каналов
        /// </summary>
        private static void CalculateIdentificatorsForChannelBase(
            TreeNode subtype, XmlElement elm, XmlNamespaceManager nsmgr,
            string baseId, List <string> subTypesId, XmlDocument xmlDoc)
        {
            const int maxTagsCount = 65535;
            string    xpath        = "//subtypes:subtype[subtypes:sdrvname='" +
                                     subtype.Text + "']";
            var subElm = elm.SelectSingleNode(xpath, nsmgr) as XmlElement;

            if (subElm != null)
            {
                nsmgr.AddNamespace("channels", "http://brestmilk.by/channels/");
                var channelsElm = subElm.ChildNodes[9] as XmlElement;
                var channelsId  = new List <long>();
                foreach (TreeNode channel in subtype.Nodes)
                {
                    string xpathChan = xpath +
                                       "//channels:channel[channels:descr='" + channel.Text +
                                       "']";

                    if (channelsElm.SelectSingleNode(xpathChan, nsmgr) == null)
                    {
                        // Нахождение адреса канала среди свободных
                        if (channelsId.Count == 0)
                        {
                            long beginId = long
                                           .Parse((long.Parse(baseId).ToString("X2") +
                                                   long.Parse(subElm.ChildNodes[0].InnerText)
                                                   .ToString("X2") + "0000"),
                                                  System.Globalization.NumberStyles.HexNumber);
                            for (int i = 0; i < maxTagsCount; i++)
                            {
                                channelsId.Add(beginId + i);
                            }

                            foreach (XmlElement channId in channelsElm
                                     .ChildNodes)
                            {
                                long id = long.Parse(
                                    channId.FirstChild.InnerText);
                                if (channelsId.Contains(id))
                                {
                                    channelsId.Remove(id);
                                }
                            }
                        }

                        long channelId = channelsId[0];
                        channelsId.RemoveAt(0);
                        AddChannel(xmlDoc, channel, channelsElm, channelId);
                    }
                }
            }
            else
            {
                if (subTypesId.Count > 0)
                {
                    long subtypeId = long.Parse(subTypesId[0]);
                    subTypesId.RemoveAt(0);
                    XmlElement newSubtype = AddSubType(xmlDoc, elm, subtype,
                                                       subtypeId);
                    string hex = long.Parse(baseId).ToString("X2") +
                                 subtypeId.ToString("X2");
                    for (int i = 0; i < subtype.Nodes.Count; i++)
                    {
                        long channelId = long.Parse((hex + i.ToString("X4")),
                                                    System.Globalization.NumberStyles.HexNumber);
                        AddChannel(xmlDoc, subtype.Nodes[i], newSubtype,
                                   channelId);
                    }
                }
                else
                {
                    Logs.AddMessage("Превышено количество подтипов " +
                                    "в базе каналов.");
                    return;
                }
            }
        }
コード例 #15
0
        /// <summary>
        /// Чтение модулей ввода-вывода
        /// </summary>
        /// <param name="isContainsNodes">Прочитаны или нет узлы</param>
        private void ReadModules(bool isContainsNodes)
        {
            foreach (var function in functionsForSearching)
            {
                bool needSkipModule = NeedSkipModule(function);
                if (needSkipModule == true)
                {
                    continue;
                }

                var match             = IONameRegex.Match(function.VisibleName);
                int moduleNumber      = Convert.ToInt32(match.Groups["n"].Value);
                int shortModuleNumber = moduleNumber % 100;
                int shortNodeNumber;
                if (isContainsA1 == true)
                {
                    shortNodeNumber = moduleNumber / 100;
                }
                else
                {
                    shortNodeNumber = moduleNumber / 100 - numberA1;
                }

                string    type = GetModuleTypeFromFunction(function);
                IO.IONode node = IOManager[shortNodeNumber];
                if (IOManager[shortNodeNumber] != null)
                {
                    IO.IOModuleInfo moduleInfo = GetIOModuleInfo(function,
                                                                 type);

                    int inOffset;
                    int outOffset;
                    GetInAndOutOffset(shortNodeNumber, moduleInfo,
                                      out inOffset, out outOffset);

                    IO.IOModule nodeModule = new IO.IOModule(inOffset,
                                                             outOffset, moduleInfo, moduleNumber, function);

                    node.DI_count += moduleInfo.DICount;
                    node.DO_count += moduleInfo.DOCount;
                    node.AI_count += moduleInfo.AICount;
                    node.AO_count += moduleInfo.AOCount;

                    bool moduleNotExist = node[shortModuleNumber - 1] == null;
                    if (moduleNotExist)
                    {
                        node.SetModule(nodeModule, shortModuleNumber);
                    }
                    else
                    {
                        Logs.AddMessage($"Главная функция модуля " +
                                        $"ввода-вывода \'{function.VisibleName}\' " +
                                        $"определяется дважды, проверьте расстановку " +
                                        $"главных функций на модулях. ");
                    }
                }
                else
                {
                    Logs.AddMessage($"Для" +
                                    $" \"{function.VisibleName}\" - \"{type}\", " +
                                    $"не найден узел номер {++shortNodeNumber}.");
                }
            }
        }
コード例 #16
0
        /// <summary>
        /// Установить привязку устройства.
        /// </summary>
        /// <param name="description">Описание устройства</param>
        /// <param name="actionMatch">Действие канала</param>
        /// <param name="module">Модуль ввода-вывода</param>
        /// <param name="node">Узел ввода-вывода</param>
        /// <param name="clampFunction">Функция клеммы</param>
        /// <param name="comment">Комментарий к устройству</param>
        private void SetBind(string description, Match actionMatch,
                             IO.IOModule module, IO.IONode node, Function clampFunction,
                             string comment)
        {
            int clamp = Convert.ToInt32(clampFunction.Properties
                                        .FUNC_ADDITIONALIDENTIFYINGNAMEPART.ToString());

            var descriptionMatches = Regex.Matches(description,
                                                   DeviceManager.BINDING_DEVICES_DESCRIPTION_PATTERN);
            int devicesCount = descriptionMatches.Count;

            if (devicesCount < 1 && !description.Equals(CommonConst.Reserve))
            {
                Logs.AddMessage($"\"{module.Function.VisibleName}:{clamp}\"" +
                                $" - неверное имя привязанного устройства - " +
                                $"\"{description}\".");
            }

            foreach (Match descriptionMatch in descriptionMatches)
            {
                string deviceName = descriptionMatch.Groups["name"].Value;
                var    device     = deviceManager.GetDevice(deviceName);

                var clampComment = "";
                if (actionMatch.Success)
                {
                    clampComment = actionMatch.Value;
                    if (clampComment.Contains(
                            CommonConst.NewLineWithCarriageReturn))
                    {
                        clampComment = clampComment.Replace(
                            CommonConst.NewLineWithCarriageReturn, "");
                    }
                }

                var    error       = "";
                string channelName = "IO-Link";
                int    logicalPort = Array
                                     .IndexOf(module.Info.ChannelClamps, clamp) + 1;
                int moduleOffset = module.InOffset;

                if (devicesCount == 1 &&
                    module.Info.AddressSpaceType ==
                    IO.IOModuleInfo.ADDRESS_SPACE_TYPE.AOAIDODI)
                {
                    if (device.Channels.Count == 1)
                    {
                        List <IODevice.IOChannel> chanels =
                            device.Channels;
                        channelName = ApiHelper
                                      .GetChannelNameForIOLinkModuleFromString(
                            chanels.First().Name);
                    }
                    else
                    {
                        channelName = ApiHelper
                                      .GetChannelNameForIOLinkModuleFromString(comment);
                    }
                }

                DeviceManager.GetInstance().AddDeviceChannel(device,
                                                             module.Info.AddressSpaceType, node.N - 1,
                                                             module.PhysicalNumber % 100, clamp, clampComment,
                                                             out error, module.PhysicalNumber, logicalPort,
                                                             moduleOffset, channelName);

                if (error != "")
                {
                    error = string.Format("\"{0}:{1}\" : {2}",
                                          module.Function.VisibleName, clamp, error);
                    Logs.AddMessage(error);
                }
            }
        }
コード例 #17
0
ファイル: XMLReporter.cs プロジェクト: radtek/EasyEPLANner
        /// <summary>
        /// Формирование общей структуры базы каналов
        /// </summary>
        private static XmlElement WriteCommonXMLPart(XmlDocument xmlDoc)
        {
            string     nsDriver     = "http://brestmilk.by/driver/";
            string     prefixDriver = "driver";
            XmlElement firstLevel   = xmlDoc.CreateElement(prefixDriver, "inf", nsDriver);

            firstLevel.InnerText = "BASE F11F3DCC-09F8-4D04-BCB7-81D5D7C48C78";
            xmlDoc.DocumentElement.AppendChild(firstLevel);
            firstLevel           = xmlDoc.CreateElement(prefixDriver, "dbbuild", nsDriver);
            firstLevel.InnerText = "4";
            xmlDoc.DocumentElement.AppendChild(firstLevel);
            firstLevel = xmlDoc.CreateElement(prefixDriver, prefixDriver, nsDriver);
            xmlDoc.DocumentElement.AppendChild(firstLevel);

            XmlElement secondLevel = xmlDoc.CreateElement(prefixDriver, "id", nsDriver);

            secondLevel.InnerText = "1";
            firstLevel.AppendChild(secondLevel);
            secondLevel           = xmlDoc.CreateElement(prefixDriver, "tid", nsDriver);
            secondLevel.InnerText = "0";
            firstLevel.AppendChild(secondLevel);
            secondLevel           = xmlDoc.CreateElement(prefixDriver, "dllname", nsDriver);
            secondLevel.InnerText = "PAC_easy_drv_LZ.dll";
            firstLevel.AppendChild(secondLevel);
            secondLevel           = xmlDoc.CreateElement(prefixDriver, "access", nsDriver);
            secondLevel.InnerText = "2";
            firstLevel.AppendChild(secondLevel);
            secondLevel           = xmlDoc.CreateElement(prefixDriver, "maxsubtypescount", nsDriver);
            secondLevel.InnerText = "10";
            firstLevel.AppendChild(secondLevel);
            secondLevel           = xmlDoc.CreateElement(prefixDriver, "enabled", nsDriver);
            secondLevel.InnerText = "-1";
            firstLevel.AppendChild(secondLevel);
            secondLevel           = xmlDoc.CreateElement(prefixDriver, "descr", nsDriver);
            secondLevel.InnerText = "Система PLC-X1";
            firstLevel.AppendChild(secondLevel);
            secondLevel           = xmlDoc.CreateElement(prefixDriver, "drvname", nsDriver);
            secondLevel.InnerText = Path.GetFileNameWithoutExtension(xmlDoc.BaseURI);
            firstLevel.AppendChild(secondLevel);
            secondLevel           = xmlDoc.CreateElement(prefixDriver, "defname", nsDriver);
            secondLevel.InnerText = "Opc Driver";
            firstLevel.AppendChild(secondLevel);
            secondLevel           = xmlDoc.CreateElement(prefixDriver, "defdescr", nsDriver);
            secondLevel.InnerText = "Универсальный драйвер для протоколов Modbus и SNMP";
            firstLevel.AppendChild(secondLevel);
            secondLevel = xmlDoc.CreateElement(prefixDriver, "communication", nsDriver);
            secondLevel.SetAttribute(
                "xmlns:communication", "http://brestmilk.by/communication/");
            firstLevel.AppendChild(secondLevel);

            string     nsParam    = "http://brestmilk.by/parameters/";
            string     pefixParam = "parameters";
            XmlElement thirdLevel = xmlDoc.CreateElement(
                "communication", pefixParam, "http://brestmilk.by/communication/");

            thirdLevel.SetAttribute("xmlns:parameters", nsParam);
            secondLevel.AppendChild(thirdLevel);

            XmlElement forthLevel = xmlDoc.CreateElement(
                pefixParam, "parameter", nsParam);

            thirdLevel.AppendChild(forthLevel);
            XmlElement fifthLevel =
                xmlDoc.CreateElement(pefixParam, "name", nsParam);

            fifthLevel.InnerText = "TYPE";
            forthLevel.AppendChild(fifthLevel);
            fifthLevel           = xmlDoc.CreateElement(pefixParam, "value", nsParam);
            fifthLevel.InnerText = "COM";
            forthLevel.AppendChild(fifthLevel);

            forthLevel = xmlDoc.CreateElement(pefixParam, "parameter", nsParam);
            thirdLevel.AppendChild(forthLevel);
            fifthLevel           = xmlDoc.CreateElement(pefixParam, "name", nsParam);
            fifthLevel.InnerText = "PORTNAME";
            forthLevel.AppendChild(fifthLevel);
            fifthLevel           = xmlDoc.CreateElement(pefixParam, "value", nsParam);
            fifthLevel.InnerText = "COM4";
            forthLevel.AppendChild(fifthLevel);

            forthLevel = xmlDoc.CreateElement(pefixParam, "parameter", nsParam);
            thirdLevel.AppendChild(forthLevel);
            fifthLevel           = xmlDoc.CreateElement(pefixParam, "name", nsParam);
            fifthLevel.InnerText = "SPEED";
            forthLevel.AppendChild(fifthLevel);
            fifthLevel           = xmlDoc.CreateElement(pefixParam, "value", nsParam);
            fifthLevel.InnerText = "12";
            forthLevel.AppendChild(fifthLevel);

            forthLevel = xmlDoc.CreateElement(pefixParam, "parameter", nsParam);
            thirdLevel.AppendChild(forthLevel);
            fifthLevel           = xmlDoc.CreateElement(pefixParam, "name", nsParam);
            fifthLevel.InnerText = "PARITY";
            forthLevel.AppendChild(fifthLevel);
            fifthLevel           = xmlDoc.CreateElement(pefixParam, "value", nsParam);
            fifthLevel.InnerText = "0";
            forthLevel.AppendChild(fifthLevel);

            forthLevel = xmlDoc.CreateElement(pefixParam, "parameter", nsParam);
            thirdLevel.AppendChild(forthLevel);
            fifthLevel           = xmlDoc.CreateElement(pefixParam, "name", nsParam);
            fifthLevel.InnerText = "DATABITS";
            forthLevel.AppendChild(fifthLevel);
            fifthLevel           = xmlDoc.CreateElement(pefixParam, "value", nsParam);
            fifthLevel.InnerText = "4";
            forthLevel.AppendChild(fifthLevel);

            forthLevel = xmlDoc.CreateElement(pefixParam, "parameter", nsParam);
            thirdLevel.AppendChild(forthLevel);
            fifthLevel           = xmlDoc.CreateElement(pefixParam, "name", nsParam);
            fifthLevel.InnerText = "STOPBITS";
            forthLevel.AppendChild(fifthLevel);
            fifthLevel           = xmlDoc.CreateElement(pefixParam, "value", nsParam);
            fifthLevel.InnerText = "0";
            forthLevel.AppendChild(fifthLevel);

            secondLevel = xmlDoc.CreateElement(prefixDriver, "init_parameters",
                                               nsDriver);
            secondLevel.SetAttribute("xmlns:parameters", nsParam);
            firstLevel.AppendChild(secondLevel);

            thirdLevel = xmlDoc.CreateElement(pefixParam, "parameter", nsParam);
            secondLevel.AppendChild(thirdLevel);
            fifthLevel           = xmlDoc.CreateElement(pefixParam, "name", nsParam);
            fifthLevel.InnerText = "IP";
            thirdLevel.AppendChild(fifthLevel);
            fifthLevel           = xmlDoc.CreateElement(pefixParam, "value", nsParam);
            fifthLevel.InnerText = "IP127.0.0.1";
            thirdLevel.AppendChild(fifthLevel);

            thirdLevel = xmlDoc.CreateElement(pefixParam, "parameter", nsParam);
            secondLevel.AppendChild(thirdLevel);
            fifthLevel           = xmlDoc.CreateElement(pefixParam, "name", nsParam);
            fifthLevel.InnerText = "PLC_NAME";
            thirdLevel.AppendChild(fifthLevel);
            fifthLevel = xmlDoc.CreateElement(pefixParam, "value", nsParam);
            if (string.IsNullOrEmpty(EProjectManager.GetInstance().GetCurrentProjectName()))
            {
                Logs.AddMessage("Не задано PLC_NAME.");
                fifthLevel.InnerText = "PLC_NAME";
            }
            else
            {
                string projectName = EProjectManager.GetInstance().GetCurrentProjectName();
                EProjectManager.GetInstance().CheckProjectName(ref projectName);
                fifthLevel.InnerText = projectName;
            }

            thirdLevel.AppendChild(fifthLevel);

            thirdLevel = xmlDoc.CreateElement(pefixParam, "parameter", nsParam);
            secondLevel.AppendChild(thirdLevel);
            fifthLevel           = xmlDoc.CreateElement(pefixParam, "name", nsParam);
            fifthLevel.InnerText = "PORT";
            thirdLevel.AppendChild(fifthLevel);
            fifthLevel           = xmlDoc.CreateElement(pefixParam, "value", nsParam);
            fifthLevel.InnerText = "10000";
            thirdLevel.AppendChild(fifthLevel);

            thirdLevel = xmlDoc.CreateElement(pefixParam, "parameter", nsParam);
            secondLevel.AppendChild(thirdLevel);
            fifthLevel           = xmlDoc.CreateElement(pefixParam, "name", nsParam);
            fifthLevel.InnerText = "Kontroller";
            thirdLevel.AppendChild(fifthLevel);
            fifthLevel           = xmlDoc.CreateElement(pefixParam, "value", nsParam);
            fifthLevel.InnerText = "LINUX";
            thirdLevel.AppendChild(fifthLevel);

            secondLevel = xmlDoc.CreateElement(
                prefixDriver, "common_parameters", nsDriver);
            secondLevel.SetAttribute("xmlns:parameters", nsParam);
            firstLevel.AppendChild(secondLevel);

            secondLevel = xmlDoc.CreateElement(
                prefixDriver, "final_parameters", nsDriver);
            secondLevel.SetAttribute("xmlns:parameters", nsParam);
            firstLevel.AppendChild(secondLevel);

            secondLevel = xmlDoc.CreateElement(prefixDriver, "subtypes", nsDriver);
            secondLevel.SetAttribute("xmlns:subtypes",
                                     "http://brestmilk.by/subtypes/");
            firstLevel.AppendChild(secondLevel);
            return(secondLevel);
        }
コード例 #18
0
        /// <summary>
        /// Сохранить привязку объектов к объектам в prg.lua
        /// </summary>
        /// <param name="attachedObjects">Словарь привязанных объектов</param>
        /// <returns></returns>
        private static string SaveObjectsBindingToPrgLua(
            Dictionary <int, string> attachedObjects)
        {
            var res  = "";
            var temp = "";

            string previouslyObjectName = "";
            bool   isDigit = false;

            foreach (var val in attachedObjects)
            {
                var techObj      = techObjectManager.GetTObject(val.Key);
                var attachedObjs = val.Value.Split(' ');
                foreach (string value in attachedObjs)
                {
                    isDigit = int.TryParse(value, out _);
                    if (isDigit)
                    {
                        var attachedTechObject = techObjectManager.GetTObject(
                            Convert.ToInt32(value));
                        if (attachedTechObject == null)
                        {
                            string objName = techObj.Name + techObj.TechNumber
                                             .ToString();
                            string msg = $"Для объекта {objName} не найден " +
                                         $"привязанный агрегат под номером {value}.\n";
                            Logs.AddMessage(msg);
                            continue;
                        }

                        var attachedTechObjectType = attachedTechObject
                                                     .NameEplanForFile.ToLower();
                        var attachedTechObjNameForFile =
                            attachedTechObjectType +
                            attachedTechObject.TechNumber;
                        var techObjNameForFile = "prg." +
                                                 techObj.NameEplanForFile.ToLower() +
                                                 techObj.TechNumber;

                        if (previouslyObjectName != techObj.NameEplanForFile
                            .ToLower() && previouslyObjectName != "")
                        {
                            temp += "\n";
                        }

                        temp += techObjNameForFile + "." +
                                attachedTechObject.BaseTechObject.BindingName +
                                " = prg." + attachedTechObjNameForFile + "\n";

                        previouslyObjectName = techObj.NameEplanForFile
                                               .ToLower();
                    }
                    else
                    {
                        string msg = $"В объекте \"{techObj.EditText[0]} " +
                                     $"{techObj.TechNumber}\" ошибка заполнения поля " +
                                     $"\"Привязанные устройства\"\n";
                        Logs.AddMessage(msg);
                    }
                }
            }

            if (temp != "")
            {
                res += "\n" + temp + "\n";
            }
            return(res);
        }