今回の記事はCommunity上で公開されたTwinCATのOpen Source Library TcOpenについて紹介と導入方法を説明し、そもそもOpen Sourceとはなにかなどのコンセプトも含めて書きました。Beckhoff TwinCAT3はVisual Studio と統一したおかけ、.NET のプロジェクトとTwinCATを連結することができ、より可能性が広がります。これからはTcOpenの面白い機能を不定期で発信します。
ではOpen Sourceの世界へ、ようこそ!
Opensource?
Opensourceというのは、ソフトウェアのソースコードを公開し、誰でも自由に閲覧、使用、改変、配布することを許可するライセンスのことを指します。
その考え方は、ソフトウェアを開発する際のプログラマやユーザーの自由、コラボレーション、透明性、信頼性、安全性などの価値を追求し、ソースコードを公開することで、他の開発者がそのコードを参照し、改善することができます。
また、多くの人がソフトウェアを開発や自由に共有することで、イノベーションが促進され、開発コストが減るのではないかと思います。
オープンソースのライセンスは、自由に改変や配布をすることができるように許可されているため、多くの人がプロジェクトに参加しやすく、そのプロジェクトが成長しやすくなります。
Advantage
Opensourceを使用するには以下のメリットがあります。
- 自由な利用・改変が可能:オープンソースソフトウェアは誰でも自由に利用、改変、再配布ができ、自分のアプリケーションに合わせてカスタマイズしたり、改造したりすることができます。
- コスト削減:オープンソースソフトウェアは、ライセンス料が必要なプロプライエタリソフトウェアと比べて、通常はコストが低く抑えられます。
- 品質向上:オープンソースソフトウェアは、コミュニティによって開発・改善が行われます。多くの開発者がコードを見ることができるため、バグや欠陥がより早く発見され、修正される可能性が高くなります。
- 柔軟性:オープンソースソフトウェアは、自由にカスタマイズできるため、特定のベンダーに依存することなく、様々な環境で使用することができます。また、オープンなAPIを提供する場合、他のシステムとの連携も容易に行えるため、柔軟性が高まります。
Disadvantage
もちろん、Opensourceにもいいことだけではありません。そのオープンソースにはいくつかのデメリットがあります。
- サポートが保証されていない:オープンソースのプロジェクトは、誰でも参加できるため、プロジェクトの開発者が責任を負っているわけではありません。そのため、オープンソースのソフトウェアを使用する場合、サポートが保証されていない可能性があり、つまり自己責任です。
- 安全性の問題:オープンソースのソフトウェアは、誰でもアクセスできるため、悪意のある人がそのソフトウェアを改ざんすることができます。それに、オープンソースのソフトウェアには、まだ発見されていないセキュリティ上の脆弱性が存在する可能性があり、つまり自己責任です。
- ドキュメンテーションが不足:オープンソースのプロジェクトは、誰でも参加できるため、開発者によって異なるドキュメンテーションが提供される可能性があります。そのため、プロジェクトのドキュメンテーションが不十分な場合、そのプロジェクトを使用することが難しくなる可能性があります、つまり自己責任です。
- 品質の問題:オープンソースのソフトウェアは、多くの人が貢献しているため、品質が均一でない場合があります。そのため、使用するソフトウェアによっては、品質に問題がある可能性があり、つまり自己責任です。
- ライセンスの問題:オープンソースのソフトウェアには、使用に制限があるライセンスがあります。そのため、ライセンスに違反する可能性がある場合、そのソフトウェアを使用することができないことがあり、つまりライセンスのチェックも自己責任です。
PLCとOpensource?
オープンソースの考え方は、プログラムの共有や改善、進化を促進するためのものであり、一般的にソフトウェア開発に適用されます。そのPLCプログラムもソフトウェアの一種であり、オープンソースに合う場合があります。
でも、PLCプログラムは産業用途で使用されることが多く、安全性や信頼性が強く求められることがあります。そのため、オープンソースであっても、特定の産業用途に適した安全基準やプロトコルに準拠した開発が必要かもしれません。
また、オープンソースの利用にはライセンスに関する規約があり、これらの規約に従って使用する必要があります。PLCプログラムにもライセンスの問題があるかもしれないので、適切に管理する必要があります。
いまのところでPLCプログラムをオープンソースとして公開することは現実的ではありませんが、以下のようなケースでオープンソースとして運用できるかもしれません。
- 教育目的である場合:PLCプログラムを教育目的で使用する場合、オープンソースのライセンスを使用することができます。
- 標準化されたライブラリである場合:標準化されたライブラリとして公開されたPLCプログラムは、オープンソースライセンスを使用することができます。
TcOpen?
TcOpenは、オートメーションのプロフェッショナル向けのTwinCAT 3コードを提供し、
従来のPLCプログラミングのいくつかの問題点(調整、組成、コンポーネント化、IT技術への接続など)に対処できるFrameworkまで成長しました。
産業自動化のソフトウェア開発は、従来のソフトウェアとは違う形で発展しましたが、TcOpenは、開発者が低付加価値の作業から高付加価値の作業にシフトできるように、いまのソフトウェア開発プラクティスの形でPLCに導入します。
Opensourceは、世界中からアイデアを持ち込んで多くの人が構築できる堅牢な基盤を提供します。TcOpenは、IEC 61131-3 ST(ST)で定義され、CoDeSysおよびTwinCAT3で実装されたOOP拡張を活用するオブジェクト指向のフレームワークです。
https://github.com/TcOpenGroup/TcOpen
注意!
TcOpenは現在開発中であり、まだ安定版がリリースされていないことです。開発チームは、最初のリリースが2022年に公開され、目指すのは小さいなな機能を頻繁に追加しながら、継続的なプロジェクトを開発することであることを目指しています。TcOpenは現時点でさまざまな企業や個人に使用されています。
Prerequisites
Visual Studio 2019
Community Edition v16.8.3以上
https://visualstudio.microsoft.com/vs/older-downloads/
TwinCAT 3.1 eXtended Automation Engineering (XAE)
TwinCAT 3.1 4024.17+以上
https://www.beckhoff.com/english.asp?download/tc3-downloads.htm
.NET Framework 4.8 developer pack
.NET6 developer pack (6.0.5)
https://dotnet.microsoft.com/en-us/download/dotnet/6.0
Inxton Vortex Builder extension
https://marketplace.visualstudio.com/items?itemName=Inxton.InxtonVortexBuilderExtensionPre
Import TcOpen Library
Create TwinCAT Project
Visual Studioを起動し>Create a new Projectで新規プロジェクトを作成します。
TwinCAT XAEを選び>Nextで進みます。
Project 名を入力し、Createで進みます。
Add PLC
次はPLCプロジェクトを追加します。PLC>Add New Itemします。
Standard PLC ProjectのTemplateを選択し、PLCプロジェクトを作成しましょう。
これでPLCプロジェクトが作成されました。注意するのはTcOpenPLCProject名前のところはあとの導入手順も使えますので、覚えておきましょう。
Add New Project
Solutionから新しいプロジェクトを追加します。Solution>右クリック>Add>New Projectします。
C# のConsole Appを選び>Nextします。
名前は先程作成したPLCプロジェクト名+ConnectorのFormatになります。
つまり、TcOpenPLCProjectConnectorになります。
Done!それでプロジェクトが作成されました。
Manage NuGet Packages
TcOpen Packagesを導入します。C# Projectを右クリック>Manage NuGet Packagesします。
Packages Sourcesを設定を設定するため、右側にある歯車をクリックします。
Add New Packages Sources
NuGet Package Manaer>Package Sourcesから+ボタンをクリックし新しいPackagesソースを追加します。
Name:わかりやすい名前に設定します。
Source:https://api.nuget.org/v3/index.json
Browse and Install TcOpen
先ほどNuGet Packagesの画面に戻り、歯車から先程設定したPackageを選びます。
Include prereleaseのCheckboxを入れ、TcOpen.Groupを検索しInstallしてください。
OKで進みます。
Error .NETFrameWork,Version=4.7.2?
最初は.NETFrameWork,Version=4.7.2のエラーが出てきました。うん、色々調べたらどうやら私が作ったC#の.NETFrameWork,Versionが4.7.2が問題だそうです。
Create again
もう一度プロジェクトを作成し、Framworkを4.8を設定してください。
Done!今回はライセンス同意画面までが出てきました。同意して進みます。
Output WindowsのところにPackagesがインストールされているとわかります。
TcOpen.Groupが緑のCheck-markがついていればOKです。
Managa Extensions
TcOpen.GroupのFrameworkを使用するにはInxton-Vortex Toolsをインストールする必要があります。Extensions>Manage Extensionsをクリックします。
しばらく待ちます…
Inxtonを検索し、Inxton − Vortex Builder extensionをDownloadしてください。
Download終わったらVisual Studio を一回閉じてください。
Restart Visual Studio
Visual Studio は自動的にExtensionsをインストールします。
Modifyで進みます。
しばらく待ちます…
Done!
Inxton Vortex Builder extensionにもしっかりインストールされました。
Activate Inxton-Vortex Tools
次はVisual StudioでInxton-Vortex Toolsを有効にします。Visual Studio の上にある部分を右クリックし>Inxton-Vortex Tools有効にしてください。
Done!Inxton-Vortex Tools関連のツールも表示されました。
Build the TcOpen Library
次はTcOpenのライセンスをビルドしTwinCAT PLC Projectに取り込む必要があります。
赤枠のボタンをクリックしLibraryをビルドします。
またビルド始めます…
TcOpen.GroupのLibraryをTwinCAT 外部LibraryとしてImportされるので、ビルド途中でLibraryの情報入力画面が出てきます。
このように簡単な情報を入力しGeneralのMinimize Id Changes in TwinCAT FilesのCheckboxを入れます。
プロジェクトがReloadされ、Okで進みます。
Error
またエラーが出ましたね。今回はThe attribute “xmlns” in element <ItemGroup> is unrecognizedのビルドエラーです。
The attribute “xmlns” in element <ItemGroup> is unrecognized. plc1Connector C:\Users\root\Source\Repos\TwinCAT Project1\plc1Connector\plc1Connector.csproj 396 |
Download Packages
Visual Studio のInstall Fileを起動し、Individual componentsから.NET 5.0 Runtimeをインストールしてください。
Create Project Again
もう一度C# ProjectをSolutionに追加し、今度はC# のClass Library(.NET Standard or .NET Core)を選択してください。
Result
先程と同じ操作したらTcOpen.Groupのライセンスが無事にビルドされました!
Implmentation1
最初の実装は簡単、しかも誰もできるのは大事です。TcOpen LibrayをTwinCATを使ってみましょう。
Add
まず新規Function Blockを作成します。今回の例はSimpleContentという名前です。
Extends
先程作成したFunction BlockにTcoCore.TcoContextをEXTENDS Keywordを使用し拡張します。
MAIN
次はMAIN POUにSimpleContent Function Blockを宣言します。
プロジェクトをコンパイルしたらエラーが出てきます。MainというABSTRACT Method が実装されてないと言われます。
Add ABSTRCT Method
では、Main Methodを追加します。SimpleContentを右クリック>Add>Methodします。
Method名は先とErrorと同じABSTRACT Method名”Main”にします。
Main Methodが追加されました。
Main Methodの中身にもTcOpen Libraryから自動生成されたコメントもついています。
簡単なプログラムを組みます。THIS^.はTcoCore.TcoContextの_startCycleCount Propertyにアクセスし、現在のCycle Countを取得します。そのPropertyはPLC RuntimeがCycle終わる度に加算されるのでMOD 100=0の条件は、つまり100回のCycleを一回超えると条件が成立します。
そして条件が成立するとLogger.Pushを呼び出してLoggingしたいテキストメッセージとそのメッセージのカタログと一緒にMemoryに保存します。
最後はMAIN PROGRAMにRun() Methodを実行すればSimpleContent Function Blockが稼働します。
Result
_plcCarretが加算し続ければ、SimpleContentのFunction Blockが動いてるとわかります。
_logger._bufferの配列に記録されたLoggingメッセージ・テキスト・カタログなどの情報が格納されています。
Implmentation2
次は.NET プロジェクトとTwinCAT プロジェクトを接続してみます。
ReBuild your project
まずExtensionsからInxton-Vortex ToolsのRebuildをクリックしC# プロジェクトも再ビルドします。
Check Path
環境関数にTc3Targetを追加します。Variable名はTc3TargetでValueはAMS NetIDです。
そのAMS NetIDの確認方法を説明します。TwinCAT RuntimeのICONがありますね。
右クリック>Router>Change AMS NetIdします。
AMS Net IDが表示され、Tc3Targetの値をそのIdに合わせて設定してください。
Program
次はC# プロジェクトを開きます。
中にTcOpen libraryとTwinCAT3 Runtimeを接続しMAIN._SimpleContent._loggerにあるStartLoggingMessage Methodを呼び出してMessageをLoggingします。
using System; using Serilog; namespace plc1Connector { class Program { static void Main(string[] args) { var plc = new plc1.plc1TwinController(Vortex.Adapters.Connector.Tc3.Adapter.Tc3ConnectorAdapter.Create( Environment.GetEnvironmentVariable(“Tc3Target”), 851, true)); plc.Connector.BuildAndStart(); TcOpen.Inxton.TcoAppDomain.Current.Builder.SetUpLogger(new TcOpen.Inxton.Logging.SerilogAdapter()); plc.MAIN._SimpleContent._logger.StartLoggingMessages(TcoCore.eMessageCategory.All, 10); } } } |
Play
plc1Connectorをクリックしアプリケーション起動します。
Result
Done!C# ProjectとTwinCATが接続に成功しました。
Implmentation3
次はConsoleからLogging Messageが表示されるようにし、Enterボタンをクリックしないと終了しないようにします。
Program
この2Lineを追加するだけです。
Console.WriteLine(“Press enter to exit..”);
Console.ReadLine();
using System; using Serilog; namespace plc1Connector { class Program { static void Main(string[] args) { var plc = new plc1.plc1TwinController(Vortex.Adapters.Connector.Tc3.Adapter.Tc3ConnectorAdapter.Create( Environment.GetEnvironmentVariable(“Tc3Target”), 851, true)); plc.Connector.BuildAndStart(); TcOpen.Inxton.TcoAppDomain.Current.Builder.SetUpLogger(new TcOpen.Inxton.Logging.SerilogAdapter()); plc.MAIN._SimpleContent._logger.StartLoggingMessages(TcoCore.eMessageCategory.All, 10); Console.WriteLine(“Press enter to exit..”); Console.ReadLine(); } } } |
Result
ConsoleはLoggingメッセージが表示できるようになりました。
Implmentation4
最後はLogging MessageをNodepadにも表示できるようにします。
Install packages
Package ManagerからSerilog.Sinks.Notepadをインストールします。
Program
このLineでLoggingにNodepadを書き込むようにします。
TcOpen.Inxton.TcoAppDomain.Current.Builder.SetUpLogger(new TcOpen.Inxton.Logging.SerilogAdapter(new Serilog.LoggerConfiguration().WriteTo.Console().WriteTo.Notepad()));
using System; using Serilog; namespace plc1Connector { class Program { static void Main(string[] args) { var plc = new plc1.plc1TwinController(Vortex.Adapters.Connector.Tc3.Adapter.Tc3ConnectorAdapter.Create( Environment.GetEnvironmentVariable(“Tc3Target”), 851, true)); plc.Connector.BuildAndStart(); TcOpen.Inxton.TcoAppDomain.Current.Builder.SetUpLogger(new TcOpen.Inxton.Logging.SerilogAdapter( new Serilog.LoggerConfiguration().WriteTo.Console().WriteTo.Notepad() )); plc.MAIN._SimpleContent._logger.StartLoggingMessages(TcoCore.eMessageCategory.All, 10); Console.WriteLine(“Press enter to exit..”); Console.ReadLine(); } } } |
Result
Done!