【博图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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

破罐子不摔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值