internal void LoadControlerFolderViaOpennessDlls(TIAOpennessControllerFolder parent, Siemens.Engineering.HW.ControllerTarget controller)
        {
            var fld = new TIAOpennessProgramFolder(this, parent)
            {
                TiaPortalItem = controller.ProgramblockFolder,
                Name          = controller.ProgramblockFolder.Name,
                Parent        = parent,
            };

            parent.ProgramFolder = fld;
            parent.SubItems.Add(fld);
            LoadSubProgramBlocksFoldersViaOpennessDlls(fld, controller.ProgramblockFolder);


            var fld2 = new TIAOpennessPlcDatatypeFolder(this, parent)
            {
                TiaPortalItem = controller.ControllerDatatypeFolder,
                Name          = "PLC data types",
                Parent        = parent,
            };

            parent.PlcDatatypeFolder = fld2;
            parent.SubItems.Add(fld2);
            LoadSubPlcDatatypeFoldersViaOpennessDlls(fld2, controller.ControllerDatatypeFolder);
        }
示例#2
0
        //internal void LoadSubDevicesViaOpennessDlls(TIAOpennessProjectFolder parent, Siemens.Engineering.HW.IHardwareObject device)
        //{
        //    foreach (var e in device.DeviceItems)
        //    {
        //        var fld = new TIAOpennessProjectFolder(this)
        //        {
        //            TiaPortalItem = e,
        //            Name = e.Name,
        //            Parent = parent,
        //        };
        //        var d = e as Siemens.Engineering.HW.DeviceItem;
        //        //d.Elements.ToList()

        //        parent.SubItems.Add(fld);
        //        LoadSubDevicesViaOpennessDlls(fld, e);
        //    }
        //}

        internal void LoadControlerFolderViaOpennessDlls(TIAOpennessControllerFolder parent, PlcSoftware software)
        {
            var fld = new TIAOpennessProgramFolder(this, parent, software.BlockGroup.Blocks)
            {
                //TiaPortalItem = controller.ProgramblockFolder,
                Name   = "software",
                Parent = parent,
            };

            parent.ProgramFolder = fld;
            parent.SubItems.Add(fld);
            LoadSubProgramBlocksFoldersViaOpennessDlls(fld, software.BlockGroup);


            var fld2 = new TIAOpennessPlcDatatypeFolder(this, parent, null)
            {
                //TiaPortalItem = controller.ControllerDatatypeFolder,
                Name   = "data types",
                Parent = parent,
            };

            parent.PlcDatatypeFolder = fld2;
            parent.SubItems.Add(fld2);
            LoadSubPlcDatatypeFoldersViaOpennessDlls(fld2, software.TypeGroup);
        }
示例#3
0
 public TIAOpennessPlcDatatypeFolder(Step7ProjectV11 Project, TIAOpennessControllerFolder ControllerFolder)
     : base(Project)
 {
     this.ControllerFolder = ControllerFolder;
     this.Project          = Project;
     this.TiaProject       = Project;
 }
示例#4
0
 public TIAOpennessProgramFolder(Step7ProjectV13 Project, TIAOpennessControllerFolder ControllerFolder)
     : base(Project)
 {
     this.ControllerFolder = ControllerFolder;
     this.Project          = Project;
     this.TiaProject       = Project;
 }
示例#5
0
 public TIAOpennessProgramFolder(Step7ProjectV15 Project, TIAOpennessControllerFolder ControllerFolder, PlcBlockComposition blocks)
     : base(Project)
 {
     this.ControllerFolder = ControllerFolder;
     this.Project          = Project;
     this.TiaProject       = Project;
     this.blocks           = blocks;
 }
示例#6
0
 public TIAOpennessPlcDatatypeFolder(Step7ProjectV15 Project, TIAOpennessControllerFolder ControllerFolder, PlcTypeComposition composition)
     : base(Project)
 {
     this.ControllerFolder = ControllerFolder;
     this.Project          = Project;
     this.TiaProject       = Project;
     this.composition      = composition;
 }
示例#7
0
        internal static Block ParseTiaDbUdtXml(string xml, ProjectBlockInfo projectBlockInfo, TIAOpennessControllerFolder controllerFolder, ParseType parseType)
        {
            XElement xelement  = XElement.Parse(xml);
            var      structure = xelement.Elements().FirstOrDefault(x => x.Name.LocalName.StartsWith("SW."));

            var sections = structure.Element("AttributeList").Element("Interface").Elements().First();

            var block = new TIADataBlock();

            block.Name = projectBlockInfo.Name;

            if (projectBlockInfo is TIAOpennessProjectBlockInfo)
            {
                block.BlockNumber = ((TIAOpennessProjectBlockInfo)projectBlockInfo).BlockNumber;
            }

            if (parseType == ParseType.DataType)
            {
                block.BlockType = DataTypes.PLCBlockType.UDT;
            }
            else if (parseType == ParseType.Programm)
            {
                block.BlockType = DataTypes.PLCBlockType.DB;
            }

            var parameterRoot = ParseTiaDbUdtSections(sections, block, controllerFolder);

            block.BlockType = DataTypes.PLCBlockType.DB;
            block.Structure = parameterRoot;

            return(block);
        }
示例#8
0
        internal void LoadViaOpennessDlls()
        {
            for (int i = 0; i < 10; i++)
            {
                try
                {
                    if (tiaPortal != null)
                    {
                        tiaPortal.Dispose();
                        tiaPortal = null;
                    }
                    tiaPortal   = new Siemens.Engineering.TiaPortal(Siemens.Engineering.TiaPortalMode.WithoutUserInterface);
                    tiapProject = tiaPortal.Projects.Open(new FileInfo(ProjectFile));
                }
                catch (Siemens.Engineering.EngineeringSecurityException ex)
                {
                    throw;
                }
                catch (Exception ex)
                {
                    if (i == 9)
                    {
                        throw;
                    }
                }
                if (tiapProject != null)
                {
                    break;
                }
            }


            var main = new TIAOpennessProjectFolder(this)
            {
                Name = "Main"
            };

            ProjectStructure = main;

            //var frm = new sliver.Windows.Forms.StateBrowserForm();
            //frm.ObjectToBrowse = tiapProject;
            //frm.Show();

            foreach (var d in tiapProject.Devices)
            {
                if (d.TypeIdentifier != null && d.TypeIdentifier.EndsWith(".S71500"))
                {
                    foreach (DeviceItem deviceItem in d.DeviceItems)
                    {
                        var target = ((IEngineeringServiceProvider)deviceItem).GetService <SoftwareContainer>();
                        if (target != null && target.Software is PlcSoftware)
                        {
                            var software = (PlcSoftware)target.Software;
                            var fld      = new TIAOpennessControllerFolder(this, software)
                            {
                                Name = software.Name,
                                //TiaPortalItem = software,
                                //Comment = d.Comment != null ? d.Comment.GetText(CultureInfo.CurrentCulture) : null
                            };
                            main.SubItems.Add(fld);

                            LoadControlerFolderViaOpennessDlls(fld, software);
                        }
                    }

                    //var controller = d.DeviceItems.OfType<Siemens.Engineering.HW.ControllerTarget>().FirstOrDefault();
                    //if (controller == null)
                    //{
                    //    var fld = new TIAOpennessProjectFolder(this)
                    //    {
                    //        Name = d.Name,
                    //        TiaPortalItem = d,
                    //        Comment = d.Comment != null ? d.Comment.GetText(CultureInfo.CurrentCulture) : null
                    //    };
                    //    main.SubItems.Add(fld);

                    //    //LoadSubDevicesViaOpennessDlls(fld, d);
                    //}
                    //else
                    //{
                    //    var fld = new TIAOpennessControllerFolder(this)
                    //    {
                    //        Name = d.Name,
                    //        TiaPortalItem = d,
                    //        Comment = d.Comment != null ? d.Comment.GetText(CultureInfo.CurrentCulture) : null
                    //    };
                    //    main.SubItems.Add(fld);

                    //    //LoadControlerFolderViaOpennessDlls(fld, controller);
                    //}
                }
            }
        }
 public TIAVarTabFolder(Step7ProjectV15_1 Project, TIAOpennessControllerFolder ControllerFolder) : base(Project)
 {
     this.ControllerFolder = ControllerFolder;
     this.Project          = Project;
     this.TiaProject       = Project;
 }
示例#10
0
        internal void LoadViaOpennessDlls()
        {
            for (int i = 0; i < 10; i++)
            {
                try
                {
                    if (tiaPortal != null)
                    {
                        tiaPortal.Dispose();
                        tiaPortal = null;
                    }
                    tiaPortal   = new Siemens.Engineering.TiaPortal(Siemens.Engineering.TiaPortalMode.WithoutUserInterface);
                    tiapProject = tiaPortal.Projects.Open(ProjectFile);
                }
                catch (Siemens.Engineering.EngineeringSecurityException ex)
                {
                    throw;
                }
                catch (Exception ex)
                {
                    if (i == 9)
                    {
                        throw;
                    }
                }
                if (tiapProject != null)
                {
                    break;
                }
            }


            var main = new TIAOpennessProjectFolder(this)
            {
                Name = "Main"
            };

            ProjectStructure = main;

            //var frm = new sliver.Windows.Forms.StateBrowserForm();
            //frm.ObjectToBrowse = tiapProject;
            //frm.Show();

            foreach (var d in tiapProject.Devices)
            {
                if (d.Subtype.EndsWith(".Device") && !d.Subtype.StartsWith("GSD.") && !d.Subtype.StartsWith("ET200eco.")) //d.Subtype.StartsWith("S7300") || d.Subtype.StartsWith("S7400") || d.Subtype.StartsWith("S71200") || d.Subtype.StartsWith("S71500"))
                {
                    var controller = d.DeviceItems.OfType <Siemens.Engineering.HW.ControllerTarget>().FirstOrDefault();
                    if (controller == null)
                    {
                        var fld = new TIAOpennessProjectFolder(this)
                        {
                            Name          = d.Name,
                            TiaPortalItem = d,
                            Comment       = d.Comment != null?d.Comment.GetText(CultureInfo.CurrentCulture) : null
                        };
                        main.SubItems.Add(fld);

                        LoadSubDevicesViaOpennessDlls(fld, d);
                    }
                    else
                    {
                        var fld = new TIAOpennessControllerFolder(this)
                        {
                            Name          = d.Name,
                            TiaPortalItem = d,
                            Comment       = d.Comment != null?d.Comment.GetText(CultureInfo.CurrentCulture) : null
                        };
                        main.SubItems.Add(fld);

                        LoadControlerFolderViaOpennessDlls(fld, controller);
                    }
                }
            }
        }
 public TIAOpennessProgramFolder(Step7ProjectV11 Project, TIAOpennessControllerFolder ControllerFolder)
     : base(Project)
 {
     this.ControllerFolder = ControllerFolder;
     this.Project = Project;
     this.TiaProject = Project;
 }
示例#12
0
        internal static TIADataRow ParseTiaDbUdtSections(XElement sections, TIADataBlock block, TIAOpennessControllerFolder controllerFolder)
        {
            var parameterRoot = new TIADataRow("ROOTNODE", S7DataRowType.STRUCT, block);
            var parameterIN   = new TIADataRow("IN", S7DataRowType.STRUCT, block);

            parameterIN.Parent = parameterRoot;
            var parameterOUT = new TIADataRow("OUT", S7DataRowType.STRUCT, block);

            parameterOUT.Parent = parameterRoot;
            var parameterINOUT = new TIADataRow("IN_OUT", S7DataRowType.STRUCT, block);

            parameterINOUT.Parent = parameterRoot;
            var parameterSTAT = new TIADataRow("STATIC", S7DataRowType.STRUCT, block);

            parameterSTAT.Parent = parameterRoot;
            var parameterTEMP = new TIADataRow("TEMP", S7DataRowType.STRUCT, block);

            parameterTEMP.Parent = parameterRoot;

            foreach (var xElement in sections.Elements())
            {
                TIADataRow useRow = parameterRoot;
                //var sectionName = xElement.Attribute("Name").Value;
                //if (sectionName == "None" || sectionName == "Static")
                //{
                //    useRow = parameterSTAT;
                //    parameterRoot.Add(useRow);
                //}
                //else if (sectionName == "In")
                //{
                //    useRow = parameterIN;
                //    parameterRoot.Add(useRow);
                //}

                parseChildren(useRow, xElement, controllerFolder);
            }

            return(parameterRoot);
        }
        internal static void parseChildren(TIADataRow parentRow, XElement parentElement, TIAOpennessControllerFolder controllerFolder)
        {
            foreach (var xElement in parentElement.Elements())
            {
                if (xElement.Name.LocalName == "Comment")
                {
                    var text = xElement.Elements().FirstOrDefault(x => x.Attribute("Lang").Value == "de-DE");
                    if (text == null)
                        text = xElement.Elements().FirstOrDefault();
                    if (text != null)
                        parentRow.Comment = text.Value;
                }
                else if (xElement.Name.LocalName == "StartValue")
                {
                    parentRow.StartValue = xElement.Value;
                }
                else if (xElement.Name.LocalName == "Sections")
                {
                    var row = ParseTiaDbUdtSections(xElement, (TIADataBlock) parentRow.CurrentBlock, controllerFolder);
                    parentRow.AddRange(row.Children);
                }
                else if (xElement.Name.LocalName == "Member")
                {
                    var name = xElement.Attribute("Name").Value;
                    var datatype = xElement.Attribute("Datatype").Value;

                    var row = new TIADataRow(name, S7DataRowType.STRUCT, (TIABlock) parentRow.PlcBlock);
                    row.Parent = parentRow;

                    if (datatype.Contains("Array["))
                    {
                        List<int> arrayStart = new List<int>();
                        List<int> arrayStop = new List<int>();

                        int pos1 = datatype.IndexOf("[");
                        int pos2 = datatype.IndexOf("]", pos1);
                        string[] arrays = datatype.Substring(pos1 + 1, pos2 - pos1 - 1).Split(',');

                        foreach (string array in arrays)
                        {
                            string[] akar = array.Split(new string[] {".."}, StringSplitOptions.RemoveEmptyEntries);
                            arrayStart.Add(Convert.ToInt32(akar[0].Trim()));
                            arrayStop.Add(Convert.ToInt32(akar[1].Trim()));
                        }

                        row.ArrayStart = arrayStart;
                        row.ArrayStop = arrayStop;
                        row.IsArray = true;
                        datatype = datatype.Substring(pos2 + 5);
                    }

                    parentRow.Add(row);

                    parseChildren(row, xElement, controllerFolder);

                    if (datatype.StartsWith("\""))
                    {
                        var udt =
                            controllerFolder.PlcDatatypeFolder.GetBlock(datatype.Substring(1, datatype.Length - 2));
                        if (udt != null)
                        {
                            var tiaUdt = udt as TIADataBlock;
                            row.AddRange(((TIADataRow) tiaUdt.Structure).DeepCopy().Children);

                            row.DataTypeBlock = udt;
                        }
                        row.DataType = S7DataRowType.UDT;
                    }
                    else if (datatype == "Struct")
                    {

                    }
                    else if (datatype.StartsWith("String["))
                    {
                        row.DataType = S7DataRowType.STRING;
                        row.StringSize = int.Parse(datatype.Substring(7, datatype.Length - 8));
                    }
                    else
                    {
                        switch (datatype.ToLower())
                        {
                            case "byte":
                                row.DataType = S7DataRowType.BYTE;
                                break;
                            case "bool":
                                row.DataType = S7DataRowType.BOOL;
                                break;
                            case "int":
                                row.DataType = S7DataRowType.INT;
                                break;
                            case "uint":
                                row.DataType = S7DataRowType.DWORD;
                                break;
                            case "dint":
                                row.DataType = S7DataRowType.DINT;
                                break;
                            case "word":
                                row.DataType = S7DataRowType.WORD;
                                break;
                            case "dword":
                                row.DataType = S7DataRowType.DWORD;
                                break;
                            case "char":
                                row.DataType = S7DataRowType.CHAR;
                                break;
                            case "any":
                                row.DataType = S7DataRowType.ANY;
                                break;
                            case "date":
                                row.DataType = S7DataRowType.DATE;
                                break;
                            case "date_and_time":
                                row.DataType = S7DataRowType.DATE_AND_TIME;
                                break;
                            case "real":
                                row.DataType = S7DataRowType.REAL;
                                break;
                            case "s5time":
                                row.DataType = S7DataRowType.S5TIME;
                                break;
                            case "time_of_day":
                                row.DataType = S7DataRowType.TIME_OF_DAY;
                                break;
                            case "time":
                                row.DataType = S7DataRowType.TIME;
                                break;
                            default:
                                row.DataType = S7DataRowType.UNKNOWN;
                                Console.WriteLine("unkown Datatype: " + datatype);
                                break;
                        }
                    }
                }
                else
                {
                    Console.WriteLine("unkown XML Element");
                }
            }
        }
        internal static TIADataRow ParseTiaDbUdtSections(XElement sections, TIADataBlock block, TIAOpennessControllerFolder controllerFolder)
        {
            var parameterRoot = new TIADataRow("ROOTNODE", S7DataRowType.STRUCT, block);
            var parameterIN = new TIADataRow("IN", S7DataRowType.STRUCT, block);
            parameterIN.Parent = parameterRoot;
            var parameterOUT = new TIADataRow("OUT", S7DataRowType.STRUCT, block);
            parameterOUT.Parent = parameterRoot;
            var parameterINOUT = new TIADataRow("IN_OUT", S7DataRowType.STRUCT, block);
            parameterINOUT.Parent = parameterRoot;
            var parameterSTAT = new TIADataRow("STATIC", S7DataRowType.STRUCT, block);
            parameterSTAT.Parent = parameterRoot;
            var parameterTEMP = new TIADataRow("TEMP", S7DataRowType.STRUCT, block);
            parameterTEMP.Parent = parameterRoot;

            foreach (var xElement in sections.Elements())
            {
                TIADataRow useRow = parameterRoot;
                //var sectionName = xElement.Attribute("Name").Value;
                //if (sectionName == "None" || sectionName == "Static")
                //{
                //    useRow = parameterSTAT;
                //    parameterRoot.Add(useRow);
                //}
                //else if (sectionName == "In")
                //{
                //    useRow = parameterIN;
                //    parameterRoot.Add(useRow);
                //}

                parseChildren(useRow, xElement, controllerFolder);
            }

            return parameterRoot;
        }
        internal static Block ParseTiaDbUdtXml(string xml, ProjectBlockInfo projectBlockInfo, TIAOpennessControllerFolder controllerFolder, ParseType parseType)
        {
            XElement xelement = XElement.Parse(xml);
            var structure = xelement.Elements().FirstOrDefault(x => x.Name.LocalName.StartsWith("SW."));

            var sections = structure.Element("AttributeList").Element("Interface").Elements().First();

            var block = new TIADataBlock();
            block.Name = projectBlockInfo.Name;

            if (projectBlockInfo is TIAOpennessProjectBlockInfo)
                block.BlockNumber = ((TIAOpennessProjectBlockInfo) projectBlockInfo).BlockNumber;

            if (parseType == ParseType.DataType)
                block.BlockType = DataTypes.PLCBlockType.UDT;
            else if (parseType == ParseType.Programm)
                block.BlockType = DataTypes.PLCBlockType.DB;
            
            var parameterRoot = ParseTiaDbUdtSections(sections, block, controllerFolder);

            block.BlockType = DataTypes.PLCBlockType.DB;
            block.Structure = parameterRoot;
            
            return block;
        }
        internal void LoadControlerFolderViaOpennessDlls(TIAOpennessControllerFolder parent, ControllerTarget controller)
        {
            var fld = new TIAOpennessProgramFolder(this, parent)
            {
                TiaPortalItem = controller.ProgramblockFolder,
                Name = controller.ProgramblockFolder.Name,
                Parent = parent,
            };
            parent.ProgramFolder = fld;
            parent.SubItems.Add(fld);
            LoadSubProgramBlocksFoldersViaOpennessDlls(fld, controller.ProgramblockFolder);


            var fld2 = new TIAOpennessPlcDatatypeFolder(this, parent)
            {
                TiaPortalItem = controller.ControllerDatatypeFolder,
                Name = "PLC data types",
                Parent = parent,
            };
            parent.PlcDatatypeFolder = fld2;
            parent.SubItems.Add(fld2);
            LoadSubPlcDatatypeFoldersViaOpennessDlls(fld2, controller.ControllerDatatypeFolder);
        }
        internal void LoadViaOpennessDlls()
        {
            for (int i = 0; i < 10; i++)
            {
                try
                {
                    if (tiaPortal != null)
                    {
                        tiaPortal.Dispose();
                        tiaPortal = null;
                    }
                    tiaPortal = new TiaPortal(TiaPortalMode.WithoutUserInterface);
                    tiapProject = tiaPortal.Projects.Open(ProjectFile);
                }
                catch (Siemens.Engineering.EngineeringSecurityException ex)
                {
                    throw;
                }
                catch (Exception ex)
                {
                    if (i == 9)
                        throw;
                }
                if (tiapProject != null)
                    break;
            }


            var main = new TIAOpennessProjectFolder(this) { Name = "Main" };
            ProjectStructure = main;
            
            //var frm = new sliver.Windows.Forms.StateBrowserForm();
            //frm.ObjectToBrowse = tiapProject;
            //frm.Show();

            foreach (var d in tiapProject.Devices)
            {
                Console.WriteLine(d.Subtype);                
                if (d.Subtype.EndsWith(".Device") && !d.Subtype.StartsWith("GSD.") && !d.Subtype.StartsWith("ET200eco.")) //d.Subtype.StartsWith("S7300") || d.Subtype.StartsWith("S7400") || d.Subtype.StartsWith("S71200") || d.Subtype.StartsWith("S71500"))
                {
                    

                    var controller = d.DeviceItems.OfType<ControllerTarget>().FirstOrDefault();
                    if (controller == null)
                    {
                        var fld = new TIAOpennessProjectFolder(this)
                        {
                            Name = d.Name,
                            TiaPortalItem = d,
                            Comment = d.Comment != null ? d.Comment.GetText(CultureInfo.CurrentCulture) : null
                        };
                        main.SubItems.Add(fld);

                        LoadSubDevicesViaOpennessDlls(fld, d);
                    }
                    else
                    {
                        var fld = new TIAOpennessControllerFolder(this)
                        {
                            Name = d.Name,
                            TiaPortalItem = d,
                            Comment = d.Comment != null ? d.Comment.GetText(CultureInfo.CurrentCulture) : null
                        };
                        main.SubItems.Add(fld);

                        LoadControlerFolderViaOpennessDlls(fld, controller);
                    }
                }
            }
        }
示例#18
0
        internal static void parseChildren(TIADataRow parentRow, XElement parentElement, TIAOpennessControllerFolder controllerFolder)
        {
            foreach (var xElement in parentElement.Elements())
            {
                if (xElement.Name.LocalName == "Comment")
                {
                    var text = xElement.Elements().FirstOrDefault(x => x.Attribute("Lang").Value == "de-DE");
                    if (text == null)
                    {
                        text = xElement.Elements().FirstOrDefault();
                    }
                    if (text != null)
                    {
                        parentRow.Comment = text.Value;
                    }
                }
                else if (xElement.Name.LocalName == "StartValue")
                {
                    parentRow.StartValue = xElement.Value;
                }
                else if (xElement.Name.LocalName == "Sections")
                {
                    var row = ParseTiaDbUdtSections(xElement, (TIADataBlock)parentRow.CurrentBlock, controllerFolder);
                    parentRow.AddRange(row.Children);
                }
                else if (xElement.Name.LocalName == "Member")
                {
                    var name     = xElement.Attribute("Name").Value;
                    var datatype = xElement.Attribute("Datatype").Value;

                    var row = new TIADataRow(name, S7DataRowType.STRUCT, (TIABlock)parentRow.PlcBlock);
                    row.Parent = parentRow;

                    if (datatype.Contains("Array["))
                    {
                        List <int> arrayStart = new List <int>();
                        List <int> arrayStop  = new List <int>();

                        int      pos1   = datatype.IndexOf("[");
                        int      pos2   = datatype.IndexOf("]", pos1);
                        string[] arrays = datatype.Substring(pos1 + 1, pos2 - pos1 - 1).Split(',');

                        foreach (string array in arrays)
                        {
                            string[] akar  = array.Split(new string[] { ".." }, StringSplitOptions.RemoveEmptyEntries);
                            int      start = 0;
                            if (akar[0].StartsWith("\""))
                            {
                                start = (int)controllerFolder.VarTabFolder.FindConstant(akar[0].Substring(1, akar[0].Length - 2)).Value;
                            }
                            else
                            {
                                start = Convert.ToInt32(akar[0].Trim());
                            }

                            int stop = 0;
                            if (akar[1].StartsWith("\""))
                            {
                                stop = (int)controllerFolder.VarTabFolder.FindConstant(akar[1].Substring(1, akar[1].Length - 2)).Value;
                            }
                            else
                            {
                                stop = Convert.ToInt32(akar[1].Trim());
                            }

                            arrayStart.Add(start);
                            arrayStop.Add(stop);
                        }

                        row.ArrayStart = arrayStart;
                        row.ArrayStop  = arrayStop;
                        row.IsArray    = true;
                        datatype       = datatype.Substring(pos2 + 5);
                    }

                    parentRow.Add(row);

                    parseChildren(row, xElement, controllerFolder);

                    if (datatype.StartsWith("\""))
                    {
                        var udt =
                            controllerFolder.PlcDatatypeFolder.GetBlock(datatype.Substring(1, datatype.Length - 2));
                        if (udt != null)
                        {
                            var tiaUdt = udt as TIADataBlock;
                            row.AddRange(((TIADataRow)tiaUdt.Structure).DeepCopy().Children);

                            row.DataTypeBlock = udt;
                        }
                        row.DataType = S7DataRowType.UDT;
                    }
                    else if (datatype == "Struct")
                    {
                    }
                    else if (datatype.StartsWith("String["))
                    {
                        row.DataType   = S7DataRowType.STRING;
                        row.StringSize = int.Parse(datatype.Substring(7, datatype.Length - 8));
                    }
                    else
                    {
                        switch (datatype.ToLower())
                        {
                        case "byte":
                            row.DataType = S7DataRowType.BYTE;
                            break;

                        case "bool":
                            row.DataType = S7DataRowType.BOOL;
                            break;

                        case "int":
                            row.DataType = S7DataRowType.INT;
                            break;

                        case "uint":
                            row.DataType = S7DataRowType.WORD;
                            break;

                        case "dint":
                            row.DataType = S7DataRowType.DINT;
                            break;

                        case "udint":
                            row.DataType = S7DataRowType.DWORD;
                            break;

                        case "word":
                            row.DataType = S7DataRowType.WORD;
                            break;

                        case "dword":
                            row.DataType = S7DataRowType.DWORD;
                            break;

                        case "char":
                            row.DataType = S7DataRowType.CHAR;
                            break;

                        case "any":
                            row.DataType = S7DataRowType.ANY;
                            break;

                        case "date":
                            row.DataType = S7DataRowType.DATE;
                            break;

                        case "date_and_time":
                            row.DataType = S7DataRowType.DATE_AND_TIME;
                            break;

                        case "real":
                            row.DataType = S7DataRowType.REAL;
                            break;

                        case "s5time":
                            row.DataType = S7DataRowType.S5TIME;
                            break;

                        case "time_of_day":
                            row.DataType = S7DataRowType.TIME_OF_DAY;
                            break;

                        case "time":
                            row.DataType = S7DataRowType.TIME;
                            break;

                        default:
                            row.DataType = S7DataRowType.UNKNOWN;

                            var udt = controllerFolder.PlcDatatypeFolder.GetBlock(datatype);
                            if (udt != null)
                            {
                                var tiaUdt = udt as TIADataBlock;
                                row.AddRange(((TIADataRow)tiaUdt.Structure).DeepCopy().Children);

                                row.DataTypeBlock = udt;
                                row.DataType      = S7DataRowType.UDT;
                            }

                            //Console.WriteLine("unkown Datatype: " + datatype);
                            break;
                        }
                    }
                }
                else if (xElement.Name.LocalName == "AttributeList")
                {
                }
                else if (xElement.Name.LocalName == "Subelement") //todo -> startwerte von arrays von UDTs
                {
                }
                else
                {
                    //Console.WriteLine("unkown XML Element");
                }
            }
        }
        internal void LoadViaOpennessDlls()
        {
            var main = new TIAOpennessProjectFolder(this)
            {
                Name = "Main"
            };

            ProjectStructure = main;

            //var frm = new sliver.Windows.Forms.StateBrowserForm();
            //frm.ObjectToBrowse = tiapProject;
            //frm.Show();

            foreach (var d in tiapProject.Devices)
            {
                if (d.TypeIdentifier != null && d.TypeIdentifier.EndsWith(".S71500"))
                {
                    foreach (DeviceItem deviceItem in d.DeviceItems)
                    {
                        var target = ((IEngineeringServiceProvider)deviceItem).GetService <SoftwareContainer>();
                        if (target != null && target.Software is PlcSoftware)
                        {
                            var software = (PlcSoftware)target.Software;
                            var fld      = new TIAOpennessControllerFolder(this, software)
                            {
                                Name = software.Name,
                                //TiaPortalItem = software,
                                //Comment = d.Comment != null ? d.Comment.GetText(CultureInfo.CurrentCulture) : null
                            };
                            main.SubItems.Add(fld);

                            LoadControlerFolderViaOpennessDlls(fld, software);
                        }
                    }

                    //var controller = d.DeviceItems.OfType<Siemens.Engineering.HW.ControllerTarget>().FirstOrDefault();
                    //if (controller == null)
                    //{
                    //    var fld = new TIAOpennessProjectFolder(this)
                    //    {
                    //        Name = d.Name,
                    //        TiaPortalItem = d,
                    //        Comment = d.Comment != null ? d.Comment.GetText(CultureInfo.CurrentCulture) : null
                    //    };
                    //    main.SubItems.Add(fld);

                    //    //LoadSubDevicesViaOpennessDlls(fld, d);
                    //}
                    //else
                    //{
                    //    var fld = new TIAOpennessControllerFolder(this)
                    //    {
                    //        Name = d.Name,
                    //        TiaPortalItem = d,
                    //        Comment = d.Comment != null ? d.Comment.GetText(CultureInfo.CurrentCulture) : null
                    //    };
                    //    main.SubItems.Add(fld);

                    //    //LoadControlerFolderViaOpennessDlls(fld, controller);
                    //}
                }
            }
        }