【博图TIA-Api】自动填充程序账号密码打开项目

思路

  • 调用TIA的Api接口
  • 实现方式为C#的“Windows 窗体应用(.NET Framework),(默认PC已经装了Visual Studio)
  • 作为打开方式打开,即不直接用TIA打开项目,而是调用接口打开项目
  • 西门子子接口使用文档(中文的) 点击链接进入

前期准备

安装TIA Portal Openness

此软件一般在安装TIA时会自动安装,可以打开TIA进行确认。

请添加图片描述
请添加图片描述

TIA Portal Openness组用户设置

必须把操作用户加入到TIA Portal Openness组,不然没有权限使用。

改了之后用户必须重新登陆才生效,建议直接重启,或者注销也行。

【计算机管理】-【本地用户和组】-【组】-【Siemens TIA Openness】-添加本机用户

请添加图片描述

请添加图片描述

C#项目添加引用(Dll文件)

博图在安装过程中,默认整合了TIA版本及其低版本的所有引用。

具体路径为C:\Program Files\Siemens\Automation\Portal V16\PublicAPI

​​请添加图片描述

只要选择这两个文件即可

​​请添加图片描述

打开Visual Studio,添加引用,最终效果如图。

请添加图片描述

部分准备

新建项目

直接选择窗体应用新建即可。

请添加图片描述

获取文件路径

如果作为打开方式,必须获取打开文件的路径才行。

首先打开主程序

请添加图片描述

修改程序,设置主程序的输入参数为字符串,其实就是获取文件路径。

请添加图片描述

获取到路径之后,如果是文件,就把路径传到我们新建的页面里面。(注意if的打开窗口里面有一个带了args[0]的参数)

不是文件也可以打开页面,判断可以放到页面里面也可以直接放主程序,我这里是在页面中。

        static void Main(string[] agrs)
        {

            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            if (agrs.Length >= 1)//表示有文件或命令行
            {
                //看看是不是文件
                if (System.IO.File.Exists(agrs[0]))
                {
					//传递路径到页面中
                    Application.Run(new FirstPage(agrs[0]));
                }
                else MessageBox.Show("无效的文件!");
            }
            else
            {
                Application.Run(new FirstPage());//没有文件,正常打开。
            }
            //Application.Run(new FirstPage());
        }

代码添加Using

打开项目的页面

请添加图片描述

调用TIA的库,建议直接把整个复制进去,免得少了又得加。

请添加图片描述

#region 引用Siemens
using Siemens.Engineering;
using Siemens.Engineering.HW;
using Siemens.Engineering.HW.Features;
using Siemens.Engineering.HW.Utilities;
using Siemens.Engineering.SW;
using Siemens.Engineering.SW.Blocks;
using Siemens.Engineering.SW.TechnologicalObjects;
using Siemens.Engineering.SW.TechnologicalObjects.Motion;
using Siemens.Engineering.SW.ExternalSources;
using Siemens.Engineering.SW.Tags;
using Siemens.Engineering.SW.Types;
using Siemens.Engineering.Hmi;
using Siemens.Engineering.Hmi.Tag;
using Siemens.Engineering.Hmi.Screen;
using Siemens.Engineering.Hmi.Cycle;
using Siemens.Engineering.Hmi.Communication;
using Siemens.Engineering.Hmi.Globalization;
using Siemens.Engineering.Hmi.TextGraphicList;
using Siemens.Engineering.Hmi.RuntimeScripting;
using Siemens.Engineering.Online;
using Siemens.Engineering.Compiler;
using Siemens.Engineering.Library;
using Siemens.Engineering.Library.Types;
using Siemens.Engineering.Library.MasterCopies;
using Siemens.Engineering.Compare;
using System.Security;
using System.Security.Cryptography;
using System.Management;
using System.Net;
#endregion

页面主程序修改

首先必须接受项目主程序传递过来的文件路径,这里新建了一个变量用来保存。

请添加图片描述

由于我们这个当打开方式使用,没必要实际弹出窗体,故直接隐藏,并且不出现在下方任务栏。

PS:如果自己调试过程中就不要隐藏窗体,先屏蔽该指令。一旦出错后台会挂好多进程,而你不去任务管理器看根本不知道。

配置账号和密码

既然让程序自动填充密码,必须的它知道密码。

请添加图片描述

        #region  账户密码-函数
        // 打开受 UMAC 保护的项目,提前备好账户名和密码
        public static void MyUmacDelegate(UmacCredentials umacCredentials)
        {
            //密码设置为保密文本类型,使用完后销毁内存
            SecureString password = new SecureString();
            //定义密码
            string strPassWord = "此处填密码";
            char[] pChar = strPassWord.ToCharArray();
            foreach (char c in pChar)
            {
                password.AppendChar(c);
            }
            umacCredentials.Type = UmacUserType.Project;
            //定义账户
            umacCredentials.Name = "此处填账户";
            umacCredentials.SetPassword(password);
        }
        #endregion

打开项目函数

调用接口,然后打开项目时附带我们之前设置的账号和密码

请添加图片描述

        #region 打开项目-函数
        public static void StratOpenProject(string args)
        {
            //有用户界面的情况下打开
            // using (TiaPortal tiaPortal = new TiaPortal(TiaPortalMode.WithUserInterface))
            //无用户界面情况下在打开,相当于一个后台进程
            // using (TiaPortal tiaPortal = new TiaPortal(TiaPortalMode.WithoutUserInterface))
            using (TiaPortal tiaPortal = new TiaPortal(TiaPortalMode.WithUserInterface))
            {
                //打开项目
                Siemens.Engineering.Project project = tiaPortal.Projects.Open(new FileInfo(args), MyUmacDelegate);
            }

        }
        #endregion

主流程

注意这个流程位于窗口的加载事件之下

请添加图片描述

流程详细

  1. 判断有无文件路径,没有退出
  2. 判断是不是我们要打开的文件类型(.ap16)
  3. 启动计时器
  4. 正常打开项目,自动填充账号密码,打开后自动退出
  5. 超时自动关闭程序

1.判断有无文件路径,没有退出

            //判断有无文件路径--手动无法运行
            if (Path == "")
            {
                MessageBox.Show("应用只能作为打开方式打开项目,无法直接打开!");
                System.Environment.Exit(0);
                return;
            }

2.判断是不是我们要打开的文件类型(.ap16)

            //判断是不是博图V16的文件,不是提示后退出程序
            string FileType = Path.Substring(Path.Length - 5, 5);

            if (FileType==".ap16")
            {
                ;
            }
            else
            {
                MessageBox.Show("文件类型错误,文件后缀必须是*.ap16!");
                System.Environment.Exit(0);
            }

3.启动计时器

            //启动定时器
            OverTime.Enabled= true;
            OverTime.Start();

4.正常打开项目,自动填充账号密码,打开后自动退出

            //打开TIA项目
			StratOpenProject(Path);
			//退出程序
            System.Environment.Exit(0);

5.超时自动关闭

        #region 超时关闭
        //超时则自动关闭程序,暂定1分钟
        private void OverTime_Tick(object sender, EventArgs e)
        {
            TimeCount = TimeCount + 1;
            if (TimeCount>=60)
            {
                OverTime.Enabled = false;
                OverTime.Stop();
                System.Environment.Exit(0);
            }
        }
        #endregion

请添加图片描述

使用

编译程序导出的exe,在打开方式里选择生成的exe即可。

请添加图片描述

源代码

主程序

using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace TIA16Start
{
    internal static class Program
    {
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main(string[] agrs)
        {

            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            if (agrs.Length >= 1)//表示有文件或命令行
            {
                //看看是不是文件
                if (System.IO.File.Exists(agrs[0]))
                {
                    Application.Run(new FirstPage(agrs[0]));
                }
                else MessageBox.Show("无效的文件!");
            }
            else
            {
                Application.Run(new FirstPage());//没有文件,正常打开。
            }
            //Application.Run(new FirstPage());
        }


    }
}

页面程序,多余的Using可去掉,不影响运行。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Security.Cryptography; //引用Md5转换功能
#region 引用Siemens
using Siemens.Engineering;
using Siemens.Engineering.HW;
using Siemens.Engineering.HW.Features;
using Siemens.Engineering.HW.Utilities;
using Siemens.Engineering.SW;
using Siemens.Engineering.SW.Blocks;
using Siemens.Engineering.SW.TechnologicalObjects;
using Siemens.Engineering.SW.TechnologicalObjects.Motion;
using Siemens.Engineering.SW.ExternalSources;
using Siemens.Engineering.SW.Tags;
using Siemens.Engineering.SW.Types;
using Siemens.Engineering.Hmi;
using Siemens.Engineering.Hmi.Tag;
using Siemens.Engineering.Hmi.Screen;
using Siemens.Engineering.Hmi.Cycle;
using Siemens.Engineering.Hmi.Communication;
using Siemens.Engineering.Hmi.Globalization;
using Siemens.Engineering.Hmi.TextGraphicList;
using Siemens.Engineering.Hmi.RuntimeScripting;
using Siemens.Engineering.Online;
using Siemens.Engineering.Compiler;
using Siemens.Engineering.Library;
using Siemens.Engineering.Library.Types;
using Siemens.Engineering.Library.MasterCopies;
using Siemens.Engineering.Compare;
using System.Security;
using System.Security.Cryptography;
using System.Management;
using System.Net;
#endregion


namespace TIA16Start
{
    public partial class FirstPage : Form
    {

        public FirstPage(string path = "")
        {

            InitializeComponent();
            //隐藏窗体
            this.Hide();
            this.ShowInTaskbar = false;

            //传递路径
            if (path != "")
            {
                Path = path;
                //MessageBox.Show(Path);
            }
        }

        #region 定义变量

        string Path = "";
        int TimeCount = 0;

        #endregion

        #region  账户密码-函数
        // 打开受 ​UMAC​ 保护的项目,提前备好账户名和密码
        public static void MyUmacDelegate(UmacCredentials umacCredentials)
        {
            //密码设置为保密文本类型,使用完后销毁内存
            SecureString password = new SecureString();
            //定义密码
            string strPassWord = "123456";
            char[] pChar = strPassWord.ToCharArray();
            foreach (char c in pChar)
            {
                password.AppendChar(c);
            }
            umacCredentials.Type = UmacUserType.Project;
            //定义账户
            umacCredentials.Name = "abcde";
            umacCredentials.SetPassword(password);
        }
        #endregion


        #region 打开项目-函数
        public static void StratOpenProject(string args)
        {
            //有用户界面的情况下打开
            // using (TiaPortal tiaPortal = new TiaPortal(TiaPortalMode.WithUserInterface))
            //无用户界面情况下在打开,相当于一个后台进程
            // using (TiaPortal tiaPortal = new TiaPortal(TiaPortalMode.WithoutUserInterface))
            using (TiaPortal tiaPortal = new TiaPortal(TiaPortalMode.WithUserInterface))
            {
                //打开项目
                Siemens.Engineering.Project project = tiaPortal.Projects.Open(new FileInfo(args), MyUmacDelegate);
            }

        }
        #endregion

        #region 窗体启动博图
        private void FirstPage_Load(object sender, EventArgs e)
        {

            //启动定时器
            OverTime.Enabled= true;
            OverTime.Start();

            //判断有无文件路径--手动无法运行
            if (Path == "")
            {
                MessageBox.Show("应用只能作为打开方式打开项目,无法直接打开!");
                System.Environment.Exit(0);
                return;
            }

            //判断是不是博图V16的文件,不是提示后退出程序
            string FileType = Path.Substring(Path.Length - 5, 5);

            if (FileType==".ap16")
            {
                ;
            }
            else
            {
                MessageBox.Show("文件类型错误,文件后缀必须是*.ap16!");
                System.Environment.Exit(0);
            }
            StratOpenProject(Path);
            System.Environment.Exit(0);
        }
        #endregion

        #region 超时关闭
        //超时则自动关闭程序,暂定1分钟
        private void OverTime_Tick(object sender, EventArgs e)
        {
            TimeCount = TimeCount + 1;
            if (TimeCount>=60)
            {
                OverTime.Enabled = false;
                OverTime.Stop();
                System.Environment.Exit(0);
            }
        }
        #endregion
    }
}

  • 22
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值