この記事は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); |