【博图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

相关文章

Knife4j+Axios+Redis前后端分离架构下的 API 管理与会话方案(最新推荐)

《Knife4j+Axios+Redis前后端分离架构下的API管理与会话方案(最新推荐)》本文主要介绍了Swagger与Knife4j的配置要点、前后端对接方法以及分布式Session实现原理,... 目录一、Swagger 与 Knife4j 的深度理解及配置要点Knife4j 配置关键要点1.Spri

SpringBoot+Docker+Graylog 如何让错误自动报警

《SpringBoot+Docker+Graylog如何让错误自动报警》SpringBoot默认使用SLF4J与Logback,支持多日志级别和配置方式,可输出到控制台、文件及远程服务器,集成ELK... 目录01 Spring Boot 默认日志框架解析02 Spring Boot 日志级别详解03 Sp

IDEA中新建/切换Git分支的实现步骤

《IDEA中新建/切换Git分支的实现步骤》本文主要介绍了IDEA中新建/切换Git分支的实现步骤,通过菜单创建新分支并选择是否切换,创建后在Git详情或右键Checkout中切换分支,感兴趣的可以了... 前提:项目已被Git托管1、点击上方栏Git->NewBrancjsh...2、输入新的分支的

Java easyExcel实现导入多sheet的Excel

《JavaeasyExcel实现导入多sheet的Excel》这篇文章主要为大家详细介绍了如何使用JavaeasyExcel实现导入多sheet的Excel,文中的示例代码讲解详细,感兴趣的小伙伴可... 目录1.官网2.Excel样式3.代码1.官网easyExcel官网2.Excel样式3.代码

浏览器插件cursor实现自动注册、续杯的详细过程

《浏览器插件cursor实现自动注册、续杯的详细过程》Cursor简易注册助手脚本通过自动化邮箱填写和验证码获取流程,大大简化了Cursor的注册过程,它不仅提高了注册效率,还通过友好的用户界面和详细... 目录前言功能概述使用方法安装脚本使用流程邮箱输入页面验证码页面实战演示技术实现核心功能实现1. 随机

Java Web实现类似Excel表格锁定功能实战教程

《JavaWeb实现类似Excel表格锁定功能实战教程》本文将详细介绍通过创建特定div元素并利用CSS布局和JavaScript事件监听来实现类似Excel的锁定行和列效果的方法,感兴趣的朋友跟随... 目录1. 模拟Excel表格锁定功能2. 创建3个div元素实现表格锁定2.1 div元素布局设计2.

HTML5实现的移动端购物车自动结算功能示例代码

《HTML5实现的移动端购物车自动结算功能示例代码》本文介绍HTML5实现移动端购物车自动结算,通过WebStorage、事件监听、DOM操作等技术,确保实时更新与数据同步,优化性能及无障碍性,提升用... 目录1. 移动端购物车自动结算概述2. 数据存储与状态保存机制2.1 浏览器端的数据存储方式2.1.

HTML5 getUserMedia API网页录音实现指南示例小结

《HTML5getUserMediaAPI网页录音实现指南示例小结》本教程将指导你如何利用这一API,结合WebAudioAPI,实现网页录音功能,从获取音频流到处理和保存录音,整个过程将逐步... 目录1. html5 getUserMedia API简介1.1 API概念与历史1.2 功能与优势1.3

一文详解MySQL如何设置自动备份任务

《一文详解MySQL如何设置自动备份任务》设置自动备份任务可以确保你的数据库定期备份,防止数据丢失,下面我们就来详细介绍一下如何使用Bash脚本和Cron任务在Linux系统上设置MySQL数据库的自... 目录1. 编写备份脚本1.1 创建并编辑备份脚本1.2 给予脚本执行权限2. 设置 Cron 任务2

苹果macOS 26 Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色

《苹果macOS26Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色》在整体系统设计方面,macOS26采用了全新的玻璃质感视觉风格,应用于Dock栏、应用图标以及桌面小部件等多个界面... 科技媒体 MACRumors 昨日(6 月 13 日)发布博文,报道称在 macOS 26 Tahoe 中