【博图TIA-Api】通过Excel自动快速导入IO文本列表
说明
续上一篇文章的IO变量,这次是根据Excel表格导入程序内的文本列表。
其实方法都差不多,不只是IO变量注释的文本列表,其他文本列表也是同样方法。
思路
- 调用TIA的Api接口
- 实现方式为C#的“Windows 窗体应用(.NET Framework),(默认PC已经装了Visual Studio)
- IO变量存在Excel文件中,导入时需要选择文档
- 西门子子接口使用文档(中文的) 点击链接进入
准备
该文章已提过的准备事项就不再重复,只提及未重复的。链接: 【博图TIA-Api】通过Excel自动快速导入IO变量
获取当前Device的HMI(返回HmiTarget)
从Device获取HmiTarget,只有获取了HmiTarget的类型,才能获取程序里的一切内容
导入HMI文本列表
该xml文件一旦导入就是导入文本列表
#region 导入HMI文本
//Imports a single TextList
public static void ImportSingleTextList(HmiTarget hmitarget, string path)
{
TextListComposition textListComposition = hmitarget.TextLists;
//IList<TextList> importedTextLists
textListComposition.Import(new FileInfo(path), ImportOptions.Override);
}
#endregion
导出HMI的文本列表为XML文件
之前PLC程序的xml文件可以通过【版本控制接口】导出,但是HMI的文本列表却只能用调用接口导出。
输入一个HMI目标,反正导出一次后就有文件了,程序没写成通用的。输出路径我直接写了一个固定路径
public static void ExportTextLists(HmiTarget hmitarget)
{
TextListComposition text = hmitarget.TextLists;
foreach (TextList textList in text)
{
FileInfo info = new FileInfo(string.Format(@"D:\Export\{0}.xml", textList.Name));
textList.Export(info, ExportOptions.WithDefaults);
}
}
#endregion
关键注意:导出的是HMI所有的文本列表
输入输出注释说明
文本列表分为3个。一个是显示总的地址,一个是所有输入的注释,一个是所有输出的注释。
总输入输出XML文件分析
打开总输入输出的xml文件
文本添加的规律和IO变量差不多
具体调用代码,这些都是对Xml文件的操作
#region IO导入文本新建节点_ID=1的情况
public static void IOxmlCreatXelmentID_1(string str, XmlDocument xmlDoc, XmlElement rootElement, string strings)
{
XmlElement xe1 = xmlDoc.CreateElement("MultilingualTextItem");
xe1.SetAttribute("ID", str);//设置该节点ID属性
xe1.SetAttribute("CompositionName", "Items");//设置该节点CompositionName属性
rootElement.AppendChild(xe1);
XmlElement xe1_2 = xmlDoc.CreateElement("AttributeList");
xe1.AppendChild(xe1_2);
XmlElement xe1_2_1 = xmlDoc.CreateElement("Culture");
xe1_2_1.InnerText = strings;
xe1_2.AppendChild(xe1_2_1);
XmlNode createNode = xmlDoc.CreateNode(XmlNodeType.Element, "Text", "");
xe1_2.AppendChild(createNode);
}
#endregion
#region IO导入文本新建节点_ID=1之外的情况_IO总显示
public static void IOxmlCreatXelmentID_1_Other_ALLIO(int Number, XmlDocument xmlDoc, XmlElement rootElement, int IO, string FilePath)
{
XmlElement xe1 = xmlDoc.CreateElement("Hmi.TextGraphicList.TextListEntry");
xe1.SetAttribute("ID", DecimalToHex(Number));//设置该节点ID属性
xe1.SetAttribute("CompositionName", "Entries");//设置该节点CompositionName属性
rootElement.AppendChild(xe1);
XmlElement xe1_2 = xmlDoc.CreateElement("AttributeList");
xe1.AppendChild(xe1_2);
XmlElement xe1_2_1 = xmlDoc.CreateElement("DefaultEntry");
xe1_2_1.InnerText = "false";
xe1_2.AppendChild(xe1_2_1);
XmlElement xe1_2_2 = xmlDoc.CreateElement("EntryType");
xe1_2_2.InnerText = "SingleValue";
xe1_2.AppendChild(xe1_2_2);
XmlElement xe1_2_3 = xmlDoc.CreateElement("From");
xe1_2_3.InnerText = IO.ToString();
xe1_2.AppendChild(xe1_2_3);
XmlElement xe1_2_4 = xmlDoc.CreateElement("To");
xe1_2_4.InnerText = IO.ToString();
xe1_2.AppendChild(xe1_2_4);
XmlElement xe1_3 = xmlDoc.CreateElement("ObjectList");
xe1.AppendChild(xe1_3);
XmlElement xe1_3_1 = xmlDoc.CreateElement("MultilingualText");
xe1_3_1.SetAttribute("ID", DecimalToHex(Number + 1));//设置该节点ID属性
xe1_3_1.SetAttribute("CompositionName", "Text");//设置该节点CompositionName属性
xe1_3.AppendChild(xe1_3_1);
XmlElement xe1_3_1_1 = xmlDoc.CreateElement("ObjectList");
xe1_3_1.AppendChild(xe1_3_1_1);
XmlElement xe1_3_1_1_1 = xmlDoc.CreateElement("MultilingualTextItem");
xe1_3_1_1_1.SetAttribute("ID", DecimalToHex(Number + 2));//设置该节点ID属性
xe1_3_1_1_1.SetAttribute("CompositionName", "Items");//设置该节点CompositionName属性
xe1_3_1_1.AppendChild(xe1_3_1_1_1);
XmlElement xe1_3_1_1_1_1 = xmlDoc.CreateElement("AttributeList");
xe1_3_1_1_1.AppendChild(xe1_3_1_1_1_1);
XmlElement xe1_3_1_1_1_1_1 = xmlDoc.CreateElement("Culture");
xe1_3_1_1_1_1_1.InnerText = "zh-CN";
xe1_3_1_1_1_1.AppendChild(xe1_3_1_1_1_1_1);
XmlElement xe1_3_1_1_1_1_2 = xmlDoc.CreateElement("Text");
xe1_3_1_1_1_1_2.InnerXml = "<body><p>" + "IW" + IO.ToString() + "/QW" + IO.ToString() + "</p></body>";
xe1_3_1_1_1_1.AppendChild(xe1_3_1_1_1_1_2);
XmlElement xe1_3_1_1_2 = xmlDoc.CreateElement("MultilingualTextItem");
xe1_3_1_1_2.SetAttribute("ID", DecimalToHex(Number + 3));//设置该节点ID属性
xe1_3_1_1_2.SetAttribute("CompositionName", "Items");//设置该节点CompositionName属性
xe1_3_1_1.AppendChild(xe1_3_1_1_2);
XmlElement xe1_3_1_1_2_1 = xmlDoc.CreateElement("AttributeList");
xe1_3_1_1_2.AppendChild(xe1_3_1_1_2_1);
XmlElement xe1_3_1_1_2_1_1 = xmlDoc.CreateElement("Culture");
xe1_3_1_1_2_1_1.InnerText = "en-GB";
xe1_3_1_1_2_1.AppendChild(xe1_3_1_1_2_1_1);
XmlElement xe1_3_1_1_2_1_2 = xmlDoc.CreateElement("Text");
xe1_3_1_1_2_1_2.InnerXml = "<body><p>" + "IW" + IO.ToString() + "/QW" + IO.ToString() + "</p></body>";
xe1_3_1_1_2_1.AppendChild(xe1_3_1_1_2_1_2);
XmlElement xe1_3_1_1_3 = xmlDoc.CreateElement("MultilingualTextItem");
xe1_3_1_1_3.SetAttribute("ID", DecimalToHex(Number + 4));//设置该节点ID属性
xe1_3_1_1_3.SetAttribute("CompositionName", "Items");//设置该节点CompositionName属性
xe1_3_1_1.AppendChild(xe1_3_1_1_3);
XmlElement xe1_3_1_1_3_2 = xmlDoc.CreateElement("AttributeList");
xe1_3_1_1_3.AppendChild(xe1_3_1_1_3_2);
XmlElement xe1_3_1_1_3_2_1 = xmlDoc.CreateElement("Culture");
xe1_3_1_1_3_2_1.InnerText = "de-DE";
xe1_3_1_1_3_2.AppendChild(xe1_3_1_1_3_2_1);
XmlElement xe1_3_1_1_3_2_2 = xmlDoc.CreateElement("Text");
xe1_3_1_1_3_2_2.InnerXml = "<body><p></p></body>";
xe1_3_1_1_3_2.AppendChild(xe1_3_1_1_3_2_2);
XmlElement xe1_3_1_1_4 = xmlDoc.CreateElement("MultilingualTextItem");
xe1_3_1_1_4.SetAttribute