Beckhoff#Using Automation interface

この記事はBeckhoff TwinCATのAutomation interfaceを使用しTwinCAT IDEから自動プロジェクトを作成してみます。BeckhoffのInfoSysにはある程度の説明がありますが、こちらの記事は少し補完のイメージです。よろしくお願いします。

TwinCAT Automation Interface?

TwinCAT Automation InterfaceというのはTwinCAT UserがAPIを経由してプログラムの自動作成やツール操作することが可能で、その機能を使用するにはCOM-Capableプログラム言語(例えばC++/.NETなど)やDynamic Script 言語(Windows PowerShell/IronPython/VBScriptなど)から実装できます。今回の記事でテストしてる限り、PLCプロジェクト作成、Profinet ControllerとDevices追加、GVLのImportまで実装しました。

従来の手法では大体Manualでプロジェクトを作成するんですね。そのやり方は場合により間違いやすいし、時間がかかります。

TwinCAT Automation Interfaceを使用することによって、TwinCATプロジェクトのHardware-ConfigurationやプログラムのImportは自動作成になり、そして異なるアプリケーションでも対応できます。

System Requirment

注意するのはAutomaton InterfaceのエンジニアPCと実際のIPC TwinCAT RuntimeのVersionです。IPC TwinCAT のVersionは必ずエンジニアPCのVersionと同じくもしくは高いものが必要です。

そしてAutomation interfaceのScriptは32Bit/64Bit Platformsにも実行できますが、コンパイラは必ず32 Bit Modeとしてコンパイル・実行してください。

TwinCAT Version

TwinCATのVersionは3.1 Build 4020.0以上が必要です。

Programming Language

C#とVisual Basic .NETがおすすめらしいです。

Create Console Apps

Visual Studio を起動します。

Create a new projectで新規プロジェクトを作成します。

Console Application C# を追加します。

プロジェクト名を設定すればOkです。

Installation

実際Automation interfaceを使用する前は、まだ少々の下準備が必要です。

.NET packages

まずはVSの.NET PaskagesをDonwloadしインストールしてください。

nugetpackages

自分がVS2019を使用していますので必要ありませんが、2017前のVersionを使ってるであればnuget Packagesをインストールしてください。

https://www.nuget.org/downloads

envdte packages

envdate Packagesをインストールします。Dependencies>Manage NuGet Packagesをクリックします。

Browse>EnvDTEを検索しPackageインストールしてください。

Okで進みます。

ライセンスに同意します。

Done!

Add Reference

TwinCAT Type libraryのReference をC# Projectに追加します。

Beckhoff TwinCAT XAE Base 3.3 Type LibraryをCheck入れて、Okします。

Check your dte Version

Visual Studio DTE objectを使用するにはそのDTEのVersionを先に確認しましょう。Registry Editor>HKEY_CLASSES_ROOT>VisualStudo.DTE.16.0があります。

つまり、私のPC Versionは16.0になります。

Implementation-1 Create the TwinCAT Project

まずはC# を使用しTwinCATのAutomation interfaceからTwinCATプロジェクトを作成してみましょう。

program

using System;
using System.IO;
using TCatSysManagerLib;

namespace ConsoleApp2
{
    class Program
    {
        static string getTheCurrentDataTime()
        {
            DateTime dt = DateTime.Now;
            return dt.ToString(“yyyy/MM/dd HH:mm:ss”);
        }
        static void Main(string[] args)
        {
            //Init
            String MyStandardPLCProjectTemplates = “Standard PLC Template.plcproj”;
            String PLCName = “MyPLC”;
            String path = @”C:\Users\chungw\Downloads\Myp”;
            int S210Telegram30 = 5;
            int S210Telegram3 = 7;

            //Creating the Visutal Studio DTE
            Console.WriteLine(“{0}:Getting VisualStudio DTE ID…”, getTheCurrentDataTime());
            Type t = System.Type.GetTypeFromProgID(“VisualStudio.DTE.16.0”);
            Console.WriteLine(“{0}:VisualStudio DTE ID is read!”, getTheCurrentDataTime());

            //Create the Instance
            Console.WriteLine(“{0}:Creating the Instance..”, getTheCurrentDataTime());
            EnvDTE.DTE dte = (EnvDTE.DTE)System.Activator.CreateInstance(t);

            dte.SuppressUI = false;
            dte.MainWindow.Visible = true;
            Console.WriteLine(“{0}:Start to Create Folder..”, getTheCurrentDataTime());

            DirectoryInfo di = new DirectoryInfo(path);
            di.Create();
            dte.Solution.Create(path, “MySolution1”);
            dte.Solution.SaveAs(@”C:\Users\chungw\Downloads\Myp\Solution1.sln”);

            //Add Solution
            string template = @”C:\TwinCAT\3.1\Components\Base\PrjTemplate\TwinCAT Project.tsproj”;
            ITcSysManager sysManager = (ITcSysManager)dte.Solution.AddFromTemplate(template, @”C:\Users\chungw\Downloads\Myp\Solution1″, “MyProject”).Object;
        }
    }
}

Result

Visual Studioが起動され、TwinCATプロジェクトが作成されました。

ITcSysManager 

ITcSysManagerはTwinCAT Automation Interfaceの中で一番メインのInterfaceであり、そのInterfaceはTwinCATの基本操作を提供しています。

こちらのCodeでDTE Interfaceを使用し新しいVisual Studio プロジェクトを作成できます。

ITcSysManager sysManager = (ITcSysManager)dte.Solution.AddFromTemplate(template, @”C:\Users\chungw\Downloads\Myp\Solution1″, “MyProject”).Object;

Implementation-2 Add PLC Project

次はVisual StudioをTwinCAT Projectで作成するだけではなくStandard PLC Projectも追加していきます。

program

using System;
using System.IO;
using TCatSysManagerLib;

namespace ConsoleApp2
{
    class Program
    {
        static string getTheCurrentDataTime()
        {
            DateTime dt = DateTime.Now;
            return dt.ToString(“yyyy/MM/dd HH:mm:ss”);
        }
        static void Main(string[] args)
        {
            //Init
            String MyStandardPLCProjectTemplates = “Standard PLC Template.plcproj”;
            String PLCName = “MyPLC”;
            String path = @”C:\Users\chungw\Downloads\Myp”;
            int S210Telegram30 = 5;
            int S210Telegram3 = 7;

            //Creating the Visutal Studio DTE
            Console.WriteLine(“{0}:Getting VisualStudio DTE ID…”, getTheCurrentDataTime());
            Type t = System.Type.GetTypeFromProgID(“VisualStudio.DTE.16.0”);
            Console.WriteLine(“{0}:VisualStudio DTE ID is read!”, getTheCurrentDataTime());

            //Create the Instance
            Console.WriteLine(“{0}:Creating the Instance..”, getTheCurrentDataTime());
            EnvDTE.DTE dte = (EnvDTE.DTE)System.Activator.CreateInstance(t);

            dte.SuppressUI = false;
            dte.MainWindow.Visible = true;
            Console.WriteLine(“{0}:Start to Create Folder..”, getTheCurrentDataTime());

            DirectoryInfo di = new DirectoryInfo(path);
            di.Create();
            dte.Solution.Create(path, “MySolution1”);
            dte.Solution.SaveAs(@”C:\Users\chungw\Downloads\Myp\Solution1.sln”);

            //Add Solution
            string template = @”C:\TwinCAT\3.1\Components\Base\PrjTemplate\TwinCAT Project.tsproj”;
            ITcSysManager sysManager = (ITcSysManager)dte.Solution.AddFromTemplate(template, @”C:\Users\chungw\Downloads\Myp\Solution1″, “MyProject”).Object;

            //PLC
            Console.WriteLine(“{0}:TwinCAT is started.”, getTheCurrentDataTime());
            ITcSmTreeItem plc = sysManager.LookupTreeItem(“TIPC”);
            Console.WriteLine(“{0}:Creating PLC…”, getTheCurrentDataTime());
            ITcSmTreeItem newp = plc.CreateChild(PLCName, 0, “”, MyStandardPLCProjectTemplates);

            //Get PLC Project
            ITcSmTreeItem plcProject = sysManager.LookupTreeItem(“TIPC^MyPLC^MyPLC Project”);
            ITcPlcIECProject importExport = (ITcPlcIECProject)plcProject;
         
            importExport.PlcOpenImport(@”C:\Users\chungw\Downloads\Myp\GVL_1.xml”, (int)PLCIMPORTOPTIONS.PLCIMPORTOPTIONS_NONE);


        }
    }
}

Result

Visual StudioにTwinCAT ProjectだけなくStandard PLCプロジェクトまで追加しました。

.

そしてGVL_1というGlobal Variables ListもProject内にAddしました。

こちらのCodeでDTE Interfaceを使用し新しいTwinCAT PLCプロジェクトを作成できます。

その中にTemplateという変数がありますね。

//PLCConsole.WriteLine(“{0}:TwinCAT is started.”, getTheCurrentDataTime());ITcSmTreeItem plc = sysManager.LookupTreeItem(“TIPC”);Console.WriteLine(“{0}:Creating PLC…”, getTheCurrentDataTime());ITcSmTreeItem newp = plc.CreateChild(PLCName, 0, “”, MyStandardPLCProjectTemplates);

私はいま同じDirectoryにPlc Templates Folderがあります。

中にはEmpty PLCやStandard PLCのTemplateがありますね。

実際そのFolderはTwinCAT/3.1/Componentes/Plc/PlcTemplate/Plc Templates/の中にあるFileと同じです。

これらのTemplateは私達がいままでPLCプロジェクトを作成するとき、PLC Projectの種類が選べますね。実際は同じものです。

ITcSmTreeItem

今回の実装ではそのITcSmTreeItemをしています。イメージしづらいかもしれませんが、こちらのInterfaceから該当するItemのElementをLookIpTreeItemのMethodから取得できます。

こちらのCodeでTwinCAT プロジェクト内にある”PLC Object”を取得できます。

ITcSmTreeItem plc = sysManager.LookupTreeItem(“TIPC”)

次はTemplateを使用しPLCのObject下にPLCプロジェクトを作成します。

ITcSmTreeItem newp = plc.CreateChild(PLCName, 0, “”, MyStandardPLCProjectTemplates);

最後は作成したPLC Project Objectを取得します。

ITcSmTreeItem plcProject = sysManager.LookupTreeItem(“TIPC^MyPLC^MyPLC Project”);

そのPathはなんですか?と思いませんか。

“TIPC^MyPLC^MyPLC Project”

実際PLC プロジェクトのPropertiesにはPathNameという項目があり、TwinCAT Projectには各Objectにも自分の”絶対PATH”があります。そしてPATH間には^で分けます。

なので、こちらのPathがアクセスしてるのは

“TIPC^MyPLC^MyPLC Project”

MyPLC>MyPLC Projectのことになります。

ITcPlcIECProject 

今回のImplementationではそのObjectを使用しTwinCAT PLCプロジェクトのデータをPlcOpen XML Standard FormatとしてImport/Exportやライブラリーなどの操作できます。

いままでTwinCAT IDEで4つの操作ができます。

それはImport PLCopenXML・Export PLCopenXML・Save as Library・Save as library and installです。

ですが、TwinCAT Automation InterfaceにはImport PLCopenXML・Export PLCopenXML・Save as Libraryだけになります。

今回の実装では同じDirectoryにあるGVL_1.xml FileをPLC ProjectにImportします。

ITcPlcIECProject importExport = (ITcPlcIECProject)plcProject;
importExport.PlcOpenImport(@”C:\Users\chungw\Downloads\Myp\GVL_1.xml”, (int)PLCIMPORTOPTIONS.PLCIMPORTOPTIONS_NONE);

Implementation-3 import library

今度はPLC projectに必要なLibrary Import操作を説明します。

program

using System;
using System.IO;
using TCatSysManagerLib;

namespace ConsoleApp2
{
    class Program
    {
        static string getTheCurrentDataTime()
        {
            DateTime dt = DateTime.Now;
            return dt.ToString(“yyyy/MM/dd HH:mm:ss”);
        }
        static void Main(string[] args)
        {
            //Init
            String MyStandardPLCProjectTemplates = “Standard PLC Template.plcproj”;
            String PLCName = “MyPLC”;
            String path = @”C:\Users\chungw\Downloads\Myp”;
            int S210Telegram30 = 5;
            int S210Telegram3 = 7;

            //Creating the Visutal Studio DTE
            Console.WriteLine(“{0}:Getting VisualStudio DTE ID…”, getTheCurrentDataTime());
            Type t = System.Type.GetTypeFromProgID(“VisualStudio.DTE.16.0”);
            Console.WriteLine(“{0}:VisualStudio DTE ID is read!”, getTheCurrentDataTime());

            //Create the Instance
            Console.WriteLine(“{0}:Creating the Instance..”, getTheCurrentDataTime());
            EnvDTE.DTE dte = (EnvDTE.DTE)System.Activator.CreateInstance(t);

            dte.SuppressUI = false;
            dte.MainWindow.Visible = true;
            Console.WriteLine(“{0}:Start to Create Folder..”, getTheCurrentDataTime());

            DirectoryInfo di = new DirectoryInfo(path);
            di.Create();
            dte.Solution.Create(path, “MySolution1”);
            dte.Solution.SaveAs(@”C:\Users\chungw\Downloads\Myp\Solution1.sln”);

            //Add Solution
            string template = @”C:\TwinCAT\3.1\Components\Base\PrjTemplate\TwinCAT Project.tsproj”;
            ITcSysManager sysManager = (ITcSysManager)dte.Solution.AddFromTemplate(template, @”C:\Users\chungw\Downloads\Myp\Solution1″, “MyProject”).Object;

            //PLC
            Console.WriteLine(“{0}:TwinCAT is started.”, getTheCurrentDataTime());
            ITcSmTreeItem plc = sysManager.LookupTreeItem(“TIPC”);
            Console.WriteLine(“{0}:Creating PLC…”, getTheCurrentDataTime());
            ITcSmTreeItem newp = plc.CreateChild(PLCName, 0, “”, MyStandardPLCProjectTemplates);

            //Get PLC Project
            ITcSmTreeItem plcProject = sysManager.LookupTreeItem(“TIPC^MyPLC^MyPLC Project”);
            ITcPlcIECProject importExport = (ITcPlcIECProject)plcProject;
            //ITcSmTreeItem GVL = plcProject.CreateChild(“GVL_1”, 615, null, null);
            importExport.PlcOpenImport(@”C:\Users\chungw\Downloads\Myp\GVL_1.xml”, (int)PLCIMPORTOPTIONS.PLCIMPORTOPTIONS_NONE);

            //Reference Library
            ITcSmTreeItem references = sysManager.LookupTreeItem(“TIPC^MyPLC^MyPLC Project^References”);
            ITcPlcLibraryManager libManager = (ITcPlcLibraryManager)references;
            libManager.AddLibrary(“Tc2_MC2”, “*”, “Beckhoff Automation GmbH”);
            libManager.AddLibrary(“Tc2_MC2_Drive”, “*”, “Beckhoff Automation GmbH”);


        }
    }
}

Result

MyPLC ProjectのReferenceにTc2_MC2とTc2_MC2_Drive ライブラリーがImportしました。

ITcPlcLibraryManager

ITcPlcLibraryManagerを使用することによりTwinCAT システム内のPLC Libraryにアクセスできます。

ITcPlcLibraryManager::AddLibraryでLibraryをPLC プロジェクトに追加します。そのライブラリを追加するとき必要なパラメータはName、Version、Companyです。

今回のExampleはTc2_MC2、Versionは*、CompanyはBeckhoff Automation GmbHになります。

ITcSmTreeItem references = sysManager.LookupTreeItem(“TIPC^MyPLC^MyPLC Project^References”);
libManager.AddLibrary(“Tc2_MC2”, “*”, “Beckhoff Automation GmbH”);
libManager.AddLibrary(“Tc2_MC2_Drive”, “*”, “Beckhoff Automation GmbH”);

Implementation-4 Create Profinet IO Controller

次はTwinCAT ProjectにProfinet Controllerを追加します。

Program

using System;
using System.IO;
using TCatSysManagerLib;

namespace ConsoleApp2
{
    class Program
    {
        static string getTheCurrentDataTime()
        {
            DateTime dt = DateTime.Now;
            return dt.ToString(“yyyy/MM/dd HH:mm:ss”);
        }
        static void Main(string[] args)
        {
            //Init
            String MyStandardPLCProjectTemplates = “Standard PLC Template.plcproj”;
            String PLCName = “MyPLC”;
            String path = @”C:\Users\chungw\Downloads\Myp”;
            int S210Telegram30 = 5;
            int S210Telegram3 = 7;

            //Creating the Visutal Studio DTE
            Console.WriteLine(“{0}:Getting VisualStudio DTE ID…”, getTheCurrentDataTime());
            Type t = System.Type.GetTypeFromProgID(“VisualStudio.DTE.16.0”);
            Console.WriteLine(“{0}:VisualStudio DTE ID is read!”, getTheCurrentDataTime());

            //Create the Instance
            Console.WriteLine(“{0}:Creating the Instance..”, getTheCurrentDataTime());
            EnvDTE.DTE dte = (EnvDTE.DTE)System.Activator.CreateInstance(t);

            dte.SuppressUI = false;
            dte.MainWindow.Visible = true;
            Console.WriteLine(“{0}:Start to Create Folder..”, getTheCurrentDataTime());

            DirectoryInfo di = new DirectoryInfo(path);
            di.Create();
            dte.Solution.Create(path, “MySolution1”);
            dte.Solution.SaveAs(@”C:\Users\chungw\Downloads\Myp\Solution1.sln”);

            //Add Solution
            string template = @”C:\TwinCAT\3.1\Components\Base\PrjTemplate\TwinCAT Project.tsproj”;
            ITcSysManager sysManager = (ITcSysManager)dte.Solution.AddFromTemplate(template, @”C:\Users\chungw\Downloads\Myp\Solution1″, “MyProject”).Object;

            //PLC
            Console.WriteLine(“{0}:TwinCAT is started.”, getTheCurrentDataTime());
            ITcSmTreeItem plc = sysManager.LookupTreeItem(“TIPC”);
            Console.WriteLine(“{0}:Creating PLC…”, getTheCurrentDataTime());
            ITcSmTreeItem newp = plc.CreateChild(PLCName, 0, “”, MyStandardPLCProjectTemplates);

            //Get PLC Project
            ITcSmTreeItem plcProject = sysManager.LookupTreeItem(“TIPC^MyPLC^MyPLC Project”);
            ITcPlcIECProject importExport = (ITcPlcIECProject)plcProject;
            //ITcSmTreeItem GVL = plcProject.CreateChild(“GVL_1”, 615, null, null);
            importExport.PlcOpenImport(@”C:\Users\chungw\Downloads\Myp\GVL_1.xml”, (int)PLCIMPORTOPTIONS.PLCIMPORTOPTIONS_NONE);

            //Reference Library
            ITcSmTreeItem references = sysManager.LookupTreeItem(“TIPC^MyPLC^MyPLC Project^References”);
            ITcPlcLibraryManager libManager = (ITcPlcLibraryManager)references;
            libManager.AddLibrary(“Tc2_MC2”, “*”, “Beckhoff Automation GmbH”);
            libManager.AddLibrary(“Tc2_MC2_Drive”, “*”, “Beckhoff Automation GmbH”);

            //Create the Profinet IO Controllers
            Console.WriteLine(“{0}:Createing the Profinet IO Controller..”, getTheCurrentDataTime());
            ITcSmTreeItem io = sysManager.LookupTreeItem(“TIID”);
            ITcSmTreeItem ProfinetController = io.CreateChild(“PNIO Controller”, 113, null, null);
            ProfinetController.ConsumeXml(“<TreeItem><DevicePnControllerDef><IpSettings><IP>#x0103a8c0</IP></IpSettings></DevicePnControllerDef></TreeItem>”);
            ProfinetController.ConsumeXml(“<TreeItem><DevicePnControllerDef><IpSettings><Subnet>#x00ffffff</Subnet></IpSettings></DevicePnControllerDef></TreeItem>”);

        }
    }
}

Result

I/O ConfigurationにPNIO Controllerが追加されました。

TwinCATの部品はほぼ全部がXMLとしてExportできますので、Exportが必要な部品を選び>Extension>Selected Items>Export XML Descriptionします。

 LoopupTreeItem(“TIID”)を使用するとTwinCAT Projectの”I/O” Objectを取得できます。一回そのI/O Objectが取得できれば、CreateChildからProfinet ControllerだけではなくEtherCAT Masterなども追加できます。

ITcSmTreeItem io = sysManager.LookupTreeItem(“TIID”);
ITcSmTreeItem ProfinetController = io.CreateChild(“PNIO Controller”, 113, null, null);

113という数字はProfinet Controller(RT)に該当します。

先程のExampleでConsumeXml MethodからI/O Configuration内のObject Propertyを変更できます。最初にXMLをExportしたことを覚えていますか?実はそのExportされたXML Fileから変更できるパラメータを確認できます。

例えば今回のExmapleでは<TreeItem><DevicePnControllerDef><IpSettings><IP>#x0103a8c0</IP></IpSettings></DevicePnControllerDef></TreeItem>と<TreeItem><DevicePnControllerDef><IpSettings><Subnet>#x00ffffff</Subnet></IpSettings></DevicePnControllerDef></TreeItem>のようなパラメータをConsumeXml Methodに渡していますね。

ProfinetController.ConsumeXml(“<TreeItem><DevicePnControllerDef><IpSettings><IP>#x0103a8c0</IP></IpSettings></DevicePnControllerDef></TreeItem>”);
            ProfinetController.ConsumeXml(“<TreeItem><DevicePnControllerDef><IpSettings><Subnet>#x00ffffff</Subnet></IpSettings></DevicePnControllerDef></TreeItem>”);

Expot のXMLからみますと、例えばいまTwinCAT Project内Profinet Controller名は”PNIO Controller”です。

<IpSettings><IP>#x0103a8c0</IP></IpSettings>は実際ControllerのIPを変更するような操作です。#x0103a8c0は10進数になると01/03/168/192のようなIPアドレスにEncodeできます。

Implementation-5 Add S210

最後はImplementation-4で追加したProfinet Controllerの下にProfinet Devices S210をさらに追加していきます。

program

using System;
using System.IO;
using TCatSysManagerLib;

namespace ConsoleApp2
{
    class Program
    {
        static string getTheCurrentDataTime()
        {
            DateTime dt = DateTime.Now;
            return dt.ToString(“yyyy/MM/dd HH:mm:ss”);
        }
        static void Main(string[] args)
        {
            //Init
            String MyStandardPLCProjectTemplates = “Standard PLC Template.plcproj”;
            String PLCName = “MyPLC”;
            String path = @”C:\Users\chungw\Downloads\Myp”;
            int S210Telegram30 = 5;
            int S210Telegram3 = 7;

            //Creating the Visutal Studio DTE
            Console.WriteLine(“{0}:Getting VisualStudio DTE ID…”, getTheCurrentDataTime());
            Type t = System.Type.GetTypeFromProgID(“VisualStudio.DTE.16.0”);
            Console.WriteLine(“{0}:VisualStudio DTE ID is read!”, getTheCurrentDataTime());

            //Create the Instance
            Console.WriteLine(“{0}:Creating the Instance..”, getTheCurrentDataTime());
            EnvDTE.DTE dte = (EnvDTE.DTE)System.Activator.CreateInstance(t);

            dte.SuppressUI = false;
            dte.MainWindow.Visible = true;
            Console.WriteLine(“{0}:Start to Create Folder..”, getTheCurrentDataTime());

            DirectoryInfo di = new DirectoryInfo(path);
            di.Create();
            dte.Solution.Create(path, “MySolution1”);
            dte.Solution.SaveAs(@”C:\Users\chungw\Downloads\Myp\Solution1.sln”);

            //Add Solution
            string template = @”C:\TwinCAT\3.1\Components\Base\PrjTemplate\TwinCAT Project.tsproj”;
            ITcSysManager sysManager = (ITcSysManager)dte.Solution.AddFromTemplate(template, @”C:\Users\chungw\Downloads\Myp\Solution1″, “MyProject”).Object;

            //PLC
            Console.WriteLine(“{0}:TwinCAT is started.”, getTheCurrentDataTime());
            ITcSmTreeItem plc = sysManager.LookupTreeItem(“TIPC”);
            Console.WriteLine(“{0}:Creating PLC…”, getTheCurrentDataTime());
            ITcSmTreeItem newp = plc.CreateChild(PLCName, 0, “”, MyStandardPLCProjectTemplates);

            //Get PLC Project
            ITcSmTreeItem plcProject = sysManager.LookupTreeItem(“TIPC^MyPLC^MyPLC Project”);
            ITcPlcIECProject importExport = (ITcPlcIECProject)plcProject;
            //ITcSmTreeItem GVL = plcProject.CreateChild(“GVL_1”, 615, null, null);
            importExport.PlcOpenImport(@”C:\Users\chungw\Downloads\Myp\GVL_1.xml”, (int)PLCIMPORTOPTIONS.PLCIMPORTOPTIONS_NONE);

            //Reference Library
            ITcSmTreeItem references = sysManager.LookupTreeItem(“TIPC^MyPLC^MyPLC Project^References”);
            ITcPlcLibraryManager libManager = (ITcPlcLibraryManager)references;
            libManager.AddLibrary(“Tc2_MC2”, “*”, “Beckhoff Automation GmbH”);
            libManager.AddLibrary(“Tc2_MC2_Drive”, “*”, “Beckhoff Automation GmbH”);

            //Create the Profinet IO Controllers
            Console.WriteLine(“{0}:Createing the Profinet IO Controller..”, getTheCurrentDataTime());
            ITcSmTreeItem io = sysManager.LookupTreeItem(“TIID”);
            ITcSmTreeItem ProfinetController = io.CreateChild(“PNIO Controller”, 113, null, null);
            ProfinetController.ConsumeXml(“<TreeItem><DevicePnControllerDef><IpSettings><IP>#x0103a8c0</IP></IpSettings></DevicePnControllerDef></TreeItem>”);
            ProfinetController.ConsumeXml(“<TreeItem><DevicePnControllerDef><IpSettings><Subnet>#x00ffffff</Subnet></IpSettings></DevicePnControllerDef></TreeItem>”);

            //Create S210
            Console.WriteLine(“{0}:Createing the Profinet IO Devices of S210..”, getTheCurrentDataTime());
            ITcSmTreeItem S210_1 = ProfinetController.CreateChild(“PNDevices_1_S210″, 97, null, @”C:\TwinCAT\3.1\Config\Io\Profinet\GSDML-V2.25-Siemens-Sinamics_S210-20220506.xml#0x0002020C”);
            //Change the Box Name
            Console.WriteLine(“{0}:Changing the Box Name..”, getTheCurrentDataTime());
            S210_1.ConsumeXml(“<TreeItem><ItemName>box1234</ItemName></TreeItem>”);
            //Change the IP
            Console.WriteLine(“{0}:Changing the IP..”, getTheCurrentDataTime());
            S210_1.ConsumeXml(“<TreeItem><PnIoBoxDef><IpSettings><IP>#x0a03a8c0</IP></IpSettings></PnIoBoxDef></TreeItem>”);
            S210_1.ConsumeXml(“<TreeItem><PnIoBoxDef><IpSettings><Gateway>#x0103a8c0</Gateway></IpSettings></PnIoBoxDef></TreeItem>”);
            ITcSmTreeItem S210_1API = S210_1.get_Child(1);
            ITcSmTreeItem sub = S210_1API.get_Child(2);
            Console.WriteLine(“{0}:inserting the Telegram..”, getTheCurrentDataTime());
            ITcSmTreeItem sub2 = sub.CreateChild(“ProfiSAFE_Telegram30”, S210Telegram30, null, null);
            ITcSmTreeItem sub3 = sub.CreateChild(“StandardTelegram3”, S210Telegram3, null, null);
        }
    }
}

Result

Done!PNIO Controllerの下にbox1234というProfinet Devices が追加されました。

そしてTelegram30、Standard3もインストールされています。

ExampleではCreateChild Methodを使用することでProfinet Controllerの下にS210を追加しました。

//Create S210
Console.WriteLine(“{0}:Createing the Profinet IO Devices of S210..”, getTheCurrentDataTime());
ITcSmTreeItem S210_1 = ProfinetController.CreateChild(“PNDevices_1_S210”, 97, null, @”C:\TwinCAT\3.1\Config\Io\Profinet\GSDML-V2.25-Siemens-Sinamics_S210-20220506.xml#0x0002020C”);

パラメータにはGSDMLのPathに

GSDML-V2.25-Siemens-Sinamics_S210-20220506.xml#0x0002020C がありますね。

#0x0002020Cというのは該当するProfinet DevicesのVersionを指定します。

#0x0002020CはV5.1になります。

こちらのChildはProfinet devicesのAPI Objectです。

ITcSmTreeItem S210_1API = S210_1.get_Child(1);

更にこちらのChildはTerm2(Drive)になります。

ITcSmTreeItem sub = S210_1API.get_Child(2);

最後はProfiSAFE Telegram30とStandard Telegram3が追加しました。

ITcSmTreeItem sub2 = sub.CreateChild(“ProfiSAFE_Telegram30”, S210Telegram30, null, null);
ITcSmTreeItem sub3 = sub.CreateChild(“StandardTelegram3”, S210Telegram3, null, null);
Footer_Basic

Please Support some devices for my blog

Amazon Gift List

Find ME

Twitter:@3threes2
Email:soup01threes*gmail.com (* to @)
YoutubeChannel:https://www.youtube.com/channel/UCQ3CHGAIXZAbeOC_9mjQiWQ

シェアする

  • このエントリーをはてなブックマークに追加

フォローする