前回はPLCNextでC++プログラムを作成するための下準備をしました。今回はどうやってPLCNext EngineeringにImportするかを説明します。よろしくおねがいします。
ではその前に、WindowsにインストールしたPLCnext CLIとPLCnext Technology SDKは一体なんなのかすこし見ていきましょう。
PLCnext CLI
PLCnext CLI はCommand Line Interface以下の役割があります。
- Metaデータ生成
- C++ Header Files生成
- PLCnext Engineer ライブラリ生成
これらの機能は簡単なコマンドで実装されますが、また今度説明したいと思います。
*ちなみにCLIはCommand Line Interfaceです。(前回もCommand LineからSDKをインストールしたこと覚えていますか?)
plcncli install sdk -p “C:\sdk\pxc-glibc-x86_64-mingw32-axcf2152-image-mingw-cortexa9t2hf-neon-axcf2152-toolchain-2021.0.tar.xz” -d C:\SDKs\AXF2152\2121.0\ |
PLCnext Technology SDK
SDKはPLCNEXTでC++ プログラムを作成するのに必要なToolchainsとライブラリが揃えています。そのSDKはPLCnext CLI ツール経由でインストールされ、EclipseのAdd-inとなっています。
*ちなみにCLIはSoftware development kitです。
Reference Link
New Project
EclipseIDを起動します。
File>New>Projectで新規プロジェクトを作成。
PLCnext Technology>PLCnext Projectを選択>Nextします。
PLCnext C++ Projectを選び>Nextします。
Component Name/Program name/Project namespaceを入力しNextします。
Support Targetsの画面が出てきます。
自分がAXCF2152.2021.0.2 LTSしか入れていないので。それを選び>Addします。
TargetがAXCF2152になり>Finishします。
しばらく待ちます…
それでOKです!
Project Structure
プロジェクトが作成されたら以下のStructeになります。
Library | LibraryBase class | それはDownloadできる最小のUnitです。(.soに変換します)一つのライブラリに複数のComponents Instanceが生成できます。 |
Component | ComponentBase class | PLCnext Technology platformの関数群です。 |
Program | ProgramBase class | PLCnext Technologyで実行するリアルタイムプログラム、IN/OUT portsは振り分ける。 |
実際プロジェクトを開くComponent・Programの部品もすでにありますね。
Templateもついています。
Build port
.hppを開きます。
これからPortを定義します。
Commentにも説明していますが、ここでもう一度簡単に紹介しますね。
まずExampleとしてmyIntVariableを定義します。
注意するのはnameはo_i16だと書いてるので実際PLCNEXT Engineerからみると変数の名前はmyIntVariableではなくo_i16です。
What is Port?
.hppの中にあるC++ Header FileはPortの定義が含まれています。定義されあPortはPublic classとして生成され、PLCNEXT Enginneringにも使えるようになります。
そのPortはAttrbuteによって詳しい定義ができます。
Attribute | Description |
Input | IN Portとして定義します。 |
Output | OUT Portとして定義します。 |
Retain | Retain属性があり、Warm/hot Restartでも保持します。 |
Opc | Opc Clientからアクセス可能。 |
Ehmi | PLCnext Engineer HMIからアクセス可能。(2022-05-28時点で実装してない) |
Proficloud | Proficloudからアクセス可能。 |
Redundant | 二重化属性、RFC 4072RなどおRCPUのみ |
How to define?
以下は定義のExampleです。
Attributeは複数ある場合、| で分けます。PLCnext CLIはAttrbutesに沿ってMetadataを生成します。もし変数はAttrbutes含まれていないなら、プログラム内部だけの使用になります。
public: //#port //#attributes(Input|…) //#name(…) int16 myInPort; |
Save
もちろんSaveを忘れずに。
Build
Buildします。
Errorがないか確認しましょう。
PLCNext Side
C++のアプリケーション用意が終わりましたので、次はPLCNEXT Enginnering側ですね。
Import library
まずPLCNext Engineeringを起動します。
右側にあるCOMPONENTS>Librariesで右クリック>Add User Libraryします。
先C++ Project内のBin FolderにあるPCWLX Filesを選び>Openします。
Import成功しました。
次はPLCNext Components & Programs>MyPLCNextProject>MyPLCNextComponentにMyPLCNextProgramがありますね。
Call in ESM
MyPLCNextProgramをReal Timeで実行したいのでESMの中にそのMyPLCNextProgramを呼び出すように追加します。
これでOK。
次はGDS Port ListのTabを開いてみます。
そのo_i16は先Attrbuteで定義したOUT Portですね!
Implement in MAIN Program
最後はMainでそのC++ のアプリケーションのOutput Portと繋がります。
変数を追加し、In Portを定義します。
これでOK。
最後はC++アプリケーションのOut portをそのIN PortとつながればOKです。
Test
PLCにプロジェクトをDownloadし、ちゃんと実行されましたね!