【博图TIA-Api】通过Excel自动新建文件夹和导入FB块

2024-03-03 02:04

本文主要是介绍【博图TIA-Api】通过Excel自动新建文件夹和导入FB块,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【博图TIA-Api】通过Excel自动新建文件夹和导入FB块

  • 说明
  • 思路
  • 准备
    • 获取Excel表格内文件名和FB块名等信息
    • 新建文件夹部分
      • 筛分获取的文件夹数据,去掉重复内容
      • 创建文件夹
    • 导入FB块
      • 导出FB块的xml文件
      • 查找需要放置的文件夹
      • 导入块

说明

续上一篇文章,这次是根据Excel表格在程序内新建文件夹和导入FB块。

思路

  • 调用TIA的Api接口
  • 实现方式为C#的“Windows 窗体应用(.NET Framework),(默认PC已经装了Visual Studio)
  • 文件夹名和FB块名存在Excel文件中,导入时需要选择文档
  • 西门子子接口使用文档(中文的) 点击链接进入
  • 注意如果文件夹已经存在就不能新建。
  • FB块如果存在可以覆盖,方便快速修改。

准备

该文章已提过的准备事项就不再重复,只提及未重复的。链接: 【博图TIA-Api】通过Excel自动快速导入IO变量

获取Excel表格内文件名和FB块名等信息

上述链接可查看。

新建文件夹部分

筛分获取的文件夹数据,去掉重复内容

注意这里并不是去除程序内的重复文件夹,只是对Excel文件内读取的文件名去重。

public static void CreatNewFileGroup(string filepath, PlcSoftware plcsoftware, bool enabled)
{if (!enabled){return;}string[] result = new string[300];int i;int j = 1;bool Mid;string[,] strings = new string[1000, 15];strings = ManualImport.ManualReadExcelFile(filepath);//筛选出所有组名for (i = 1; strings[i, 1] != null; i++){Mid = false;//有重复的就不加入数组foreach (string strmid in result){if (strmid == strings[i, 1]){Mid = true;break;}}//没重复的添加进数组if (!Mid){result[j] = strings[i, 1];j++;}Mid = true;}//调用文件夹新建程序for (i = 1; result[i] != null; i++){ManualImport.CreateBlockGroup(plcsoftware, result[i]);}
}

创建文件夹

注意由于PLC内文件夹可能会有很多层级,我这里默认是三个层级,如果层级更多可以按照这样写。[]

在这里插入图片描述

public static void CreateBlockGroup(PlcSoftware plcsoftware, string FileName)
{//测试用string[] strings = new string[20];int i, j;PlcBlockGroup userblock1, userblock2, userblock3, userblock4;PlcBlockGroup finallyblock;PlcBlockSystemGroup systemGroup = plcsoftware.BlockGroup;//测试用于查看块组名字--程序块#region 已屏蔽//string NameBlock =systemGroup.Name;#endregion//获取程序块下三个大文件夹,第0个是程序块文件夹最下面的一个,也就是需要的#region 获取 根目录i = 0;j = 0;foreach (PlcBlockGroup blockgroup in systemGroup.Groups){strings[i] = blockgroup.Name;if (strings[i] == "根目录名"){j = i;}i = i + 1;}userblock1 = systemGroup.Groups[j];#endregion#region 获取 层级一i = 0;j = 0;foreach (PlcBlockGroup blockgroup in userblock1.Groups){strings[i] = blockgroup.Name;if (strings[i] == "层级一名"){j = i;}i = i + 1;}userblock2 = userblock1.Groups[j];#endregion#region 获取 层级二i = 0;j = 0;foreach (PlcBlockGroup blockgroup in userblock2.Groups){strings[i] = blockgroup.Name;if (strings[i] == "层级二名"){j = i;}i = i + 1;}userblock3 = userblock2.Groups[j];#endregion#region 获取 层级三i = 0;j = 0;foreach (PlcBlockGroup blockgroup in userblock3.Groups){strings[i] = blockgroup.Name;if (strings[i] == "层级三名"){j = i;}i = i + 1;}userblock4 = userblock3.Groups[j];#endregionfinallyblock = userblock4;//确保文件夹不重复j = 0;foreach (PlcBlockGroup blockgroup in finallyblock.Groups){strings[i] = blockgroup.Name;if (strings[i] == FileName){//代表文件夹已经存在j = 100;}i = i + 1;}if (j == 100){return;}else{PlcBlockUserGroupComposition groupComposition = finallyblock.Groups;//新建文件夹名PlcBlockUserGroup myCreatedGroup = groupComposition.Create(FileName);}}

导入FB块

导出FB块的xml文件

注意一般这个功能适合哪些重复的FB块导入,比如说一些标准块。

导出FB块的xml文件可以从版本控制接口导出。
在这里插入图片描述
在这里插入图片描述

查找需要放置的文件夹

这里就以之前的三个层级位置举例。
这里需要返回需要的文件夹变量PlcBlockGroup

 public static PlcBlockGroup FindMovementFB(string BlockGroupName, PlcSoftware plcsoftware){string[] strings = new string[20];int i, j;PlcBlockGroup userblock1, userblock2, userblock3, userblock4, userblock5;PlcBlockGroup finallyblock;PlcBlockSystemGroup systemGroup = plcsoftware.BlockGroup;//测试用于查看块组名字--程序块#region 已屏蔽//string NameBlock =systemGroup.Name;#endregion//获取程序块下三个大文件夹,第0个是程序块文件夹最下面的一个,也就是需要的OEM#region 获取 根目录i = 0;j = 0;foreach (PlcBlockGroup blockgroup in systemGroup.Groups){strings[i] = blockgroup.Name;if (strings[i] == "根目录名"){j = i;}i = i + 1;}userblock1 = systemGroup.Groups[j];#endregion#region 获取 层级一i = 0;j = 0;foreach (PlcBlockGroup blockgroup in userblock1.Groups){strings[i] = blockgroup.Name;if (strings[i] == "层级一名"){j = i;}i = i + 1;}userblock2 = userblock1.Groups[j];#endregion#region 获取 层级二i = 0;j = 0;foreach (PlcBlockGroup blockgroup in userblock2.Groups){strings[i] = blockgroup.Name;if (strings[i] == "层级二名"){j = i;}i = i + 1;}userblock3 = userblock2.Groups[j];#endregion#region 获取 层级三i = 0;j = 0;foreach (PlcBlockGroup blockgroup in userblock3.Groups){strings[i] = blockgroup.Name;if (strings[i] == "层级三名"){j = i;}i = i + 1;}userblock4 = userblock3.Groups[j];#endregioni = 0;j = 0;foreach (PlcBlockGroup blockgroup in userblock4.Groups){strings[i] = blockgroup.Name;if (strings[i] == BlockGroupName){j = i;}i = i + 1;if (i >= 30){break;}}userblock5 = userblock4.Groups[j];#region 获取需要放置的文件夹#endregionfinallyblock = userblock5;//返回需要的PlcBlockGroupreturn finallyblock;}

导入块

这里的xml文件默认放在改程序的根目录。

public static void InputMovementFB(string filepath, string Xmlpath, PlcSoftware plcsoftware, bool enabled)
{if (!enabled){return;}string[] result = new string[300];int i;int j = 1;bool Mid;string[,] strings = new string[1000, 18];//读取Excel表格内容strings = ManualImport.ManualReadExcelFile(filepath);XmlDocument xmlDoc = new XmlDocument();//加载xml文件,文件xmlDoc.Load(Xmlpath);bool mid1, mid2, mid3;for (i = 1; strings[i, 1] != null; i++){#region 修改FB块名字//查找要修改的节点XmlNode Name = xmlDoc.SelectSingleNode("Document/SW.Blocks.FB/AttributeList");//取出所有的子节点XmlNodeList xnl = Name.ChildNodes;mid1 = false;mid2 = false;//取出PLC变量表名字foreach (XmlNode xmlNode in xnl){//将节点转换一下类型XmlElement xmlElement = (XmlElement)xmlNode;//判断该子节点是否是要查找的节点if (xmlElement.Name == "Name"){//设置新值xmlElement.InnerText = "NO" + strings[i,2]+"MB"+ strings[i,5]+"_"+ strings[i,3];mid1 = true;}//判断该子节点是否是要查找的节点if (xmlElement.Name == "Number"){                        //设置新值xmlElement.InnerText = Convert.ToString(600+(Convert.ToInt32(strings[i, 2])-1)*20+Convert.ToInt32(strings[i, 5]));mid2 = true;}if (mid1 && mid2){break;}}#endregion//保存修改的Xml文件内容xmlDoc.Save(Xmlpath);FindMovementFB(strings[i, 1], plcsoftware).Blocks.Import(new FileInfo(Xmlpath), ImportOptions.Override); ;}}

注意这里修改的xml文件位置在此处

在这里插入图片描述

这篇关于【博图TIA-Api】通过Excel自动新建文件夹和导入FB块的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/768116

相关文章

如何使用 Python 读取 Excel 数据

《如何使用Python读取Excel数据》:本文主要介绍使用Python读取Excel数据的详细教程,通过pandas和openpyxl,你可以轻松读取Excel文件,并进行各种数据处理操... 目录使用 python 读取 Excel 数据的详细教程1. 安装必要的依赖2. 读取 Excel 文件3. 读

C#实现将Excel表格转换为图片(JPG/ PNG)

《C#实现将Excel表格转换为图片(JPG/PNG)》Excel表格可能会因为不同设备或字体缺失等问题,导致格式错乱或数据显示异常,转换为图片后,能确保数据的排版等保持一致,下面我们看看如何使用C... 目录通过C# 转换Excel工作表到图片通过C# 转换指定单元格区域到图片知识扩展C# 将 Excel

IDEA自动生成注释模板的配置教程

《IDEA自动生成注释模板的配置教程》本文介绍了如何在IntelliJIDEA中配置类和方法的注释模板,包括自动生成项目名称、包名、日期和时间等内容,以及如何定制参数和返回值的注释格式,需要的朋友可以... 目录项目场景配置方法类注释模板定义类开头的注释步骤类注释效果方法注释模板定义方法开头的注释步骤方法注

pytorch自动求梯度autograd的实现

《pytorch自动求梯度autograd的实现》autograd是一个自动微分引擎,它可以自动计算张量的梯度,本文主要介绍了pytorch自动求梯度autograd的实现,具有一定的参考价值,感兴趣... autograd是pytorch构建神经网络的核心。在 PyTorch 中,结合以下代码例子,当你

Python如何自动生成环境依赖包requirements

《Python如何自动生成环境依赖包requirements》:本文主要介绍Python如何自动生成环境依赖包requirements问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录生成当前 python 环境 安装的所有依赖包1、命令2、常见问题只生成当前 项目 的所有依赖包1、

springboot项目中常用的工具类和api详解

《springboot项目中常用的工具类和api详解》在SpringBoot项目中,开发者通常会依赖一些工具类和API来简化开发、提高效率,以下是一些常用的工具类及其典型应用场景,涵盖Spring原生... 目录1. Spring Framework 自带工具类(1) StringUtils(2) Coll

使用Python将JSON,XML和YAML数据写入Excel文件

《使用Python将JSON,XML和YAML数据写入Excel文件》JSON、XML和YAML作为主流结构化数据格式,因其层次化表达能力和跨平台兼容性,已成为系统间数据交换的通用载体,本文将介绍如何... 目录如何使用python写入数据到Excel工作表用Python导入jsON数据到Excel工作表用

Spring Boot项目中结合MyBatis实现MySQL的自动主从切换功能

《SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能》:本文主要介绍SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能,本文分步骤给大家介绍的... 目录原理解析1. mysql主从复制(Master-Slave Replication)2. 读写分离3.

微信公众号脚本-获取热搜自动新建草稿并发布文章

《微信公众号脚本-获取热搜自动新建草稿并发布文章》本来想写一个自动化发布微信公众号的小绿书的脚本,但是微信公众号官网没有小绿书的接口,那就写一个获取热搜微信普通文章的脚本吧,:本文主要介绍微信公众... 目录介绍思路前期准备环境要求获取接口token获取热搜获取热搜数据下载热搜图片给图片加上标题文字上传图片

java中使用POI生成Excel并导出过程

《java中使用POI生成Excel并导出过程》:本文主要介绍java中使用POI生成Excel并导出过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录需求说明及实现方式需求完成通用代码版本1版本2结果展示type参数为atype参数为b总结注:本文章中代码均为