【问题标题】:How to deploy twincat 3 project to PLC programmatically如何以编程方式将 twincat 3 项目部署到 PLC
【发布时间】:2019-07-11 15:07:11
【问题描述】:

我正在寻找一种通过 C# 激活配置和更新引导项目的方法。 我的 Twincat 3 项目已编译,所有必要的文件都在 /_Boot 文件夹中。 下一步是在我的 PLC 上加载并执行项目的 C# 程序(实际上是单元测试)。

到目前为止,我已经通读了 Beckhoff 信息系统,但找不到任何提示。

【问题讨论】:

    标签: c# twincat


    【解决方案1】:

    您需要 Twincat 自动化接口 API 才能激活您的配置并启动 PLC。

    官方文档中的一个例子:

            using System;
            using System.Collections.Generic;
            using System.Linq;
            using System.Text;
            using EnvDTE100;
            using System.IO;
            using TCatSysManagerLib;
    
            namespace ActivatePreviousConfiguration{
    
                class Program
                {
    
                    static void Main(string[] args)
                    {
                        Type t = System.Type.GetTypeFromProgID("VisualStudio.DTE.10.0");
                        EnvDTE.DTE dte = (EnvDTE.DTE)System.Activator.CreateInstance(t);
                        dte.SuppressUI = false;
                        dte.MainWindow.Visible = true;
                        EnvDTE.Solution sol = dte.Solution;
                        sol.Open(@"C:\Temp\SolutionFolder\MySolution1\MySolution1.sln");
    
                        EnvDTE.Project pro = sol.Projects.Item(1);
                        ITcSysManager sysMan = pro.Object;
                        sysMan.ActivateConfiguration();
                        sysMan.StartRestartTwinCAT();
                    }
                }
            }
    

    还有许多您可以使用此 api 执行其他操作,例如为您的 PLC 生成代码..

    您可以在此处找到文档:

    Automation Interface pdf

    【讨论】:

    • 感谢您的回答。但在我的上下文(单元测试)中,我只有 /_Boot(压缩,作为资源)中的编译输出可用。
    • 让我理解一下,你没有要测试上传的项目源码吗?
    • 我不是在测试 PLC 项目,而是在测试一个与 PLC 对话的 C# 项目。所以不,我没有可用的 twincat 解决方案,只有它的编译输出
    【解决方案2】:

    如果您只有 _Boot 文件夹可供使用,您只需将 _Boot\TwinCAT RT(x64)\Plc 的内容复制到目标引导文件夹 C:\TwinCAT\3.1\Boot\Plc 并启动 PLC通过 ADS 命令。

    PLC 将使用替换后的编译项目启动。

    以下是官方 ADS 文档中用于启动 plc 的示例:

    static void Main(string[] args)
    {
        //Create a new instance of class TcAdsClient
        TcAdsClient tcClient = new TcAdsClient();
    
        try
        {
            // Connect to local PLC - Runtime 1 - TwinCAT2 Port=801, TwinCAT3 Port=851
            tcClient.Connect(851);
    
            Console.WriteLine(" PLC Run\t[R]");
            Console.WriteLine(" PLC Stop\t[S]");
            Console.WriteLine("\r\nPlease choose \"Run\" or \"Stop\" and confirm with enter..");
            string sInput = Console.ReadLine().ToLower();
    
            //Process user input and apply chosen state
            do{
                switch (sInput)
                {
                    case "r": tcClient.WriteControl(new StateInfo(AdsState.Run, tcClient.ReadState().DeviceState)); break;
                    case "s": tcClient.WriteControl(new StateInfo(AdsState.Stop, tcClient.ReadState().DeviceState)); break;
                    default: Console.WriteLine("Please choose \"Run\" or \"Stop\" and confirm with enter.."); sInput = Console.ReadLine().ToLower(); break;
                }
            } while (sInput != "r" && sInput != "s");
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
            Console.ReadKey();
        }
        finally
        {
            tcClient.Dispose();
        }
    }
    

    【讨论】:

    • 好的,谢谢。这与我们现在使用 twincat 2 的过程基本相同,我通过 net 命令复制 .wpb 文件。我想没有办法让 SysManager 进行复制?
    • Twincat 3 中的 SysManager 与 Visual Studio 相结合,如果没有 Twincat 解决方案,您将无法使用自动化接口 API。唯一的方法是例如使用 c# File.Copy 方法将引导文件复制到目标引导文件夹。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-07-05
    • 2011-06-16
    • 1970-01-01
    • 1970-01-01
    • 2013-08-03
    • 2015-07-03
    • 1970-01-01
    相关资源
    最近更新 更多