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; }