ネイティブ ファンクション ブロックでのカスタム配列定義:実践ガイド
この投稿の理由
実は、ネイティブ ファンクション ブロックを開発していたとき、カスタム構造体の配列を使用することが不可能であることに気づきました。つまり、PLCnextの公式GitHubにはこのタイプのチュートリアルがないのは残念です。C#チュートリアルを使ってネイティブ ファンクション ブロックでカスタム配列を作成しようとすると、正常にコンパイルできない、またはPLCnext Engineerで配列値を設定しても反応しないことがわかります。この例はたまたまデータベースに関連しています。
デモの説明
- 以下の例では、PLCncliツールチェーンを使用してネイティブ ファンクション ブロックでユーザー定義配列インターフェースを作成します
- 配列は21要素で構成され、各要素は構造体です。構造体には2つのIecString80と1つの列挙型が含まれます(以下の図を参照)
https://github.com/Leeable/UserDefineArray_NativeFB/tree/Master
要件
- ツールチェーンのバージョンが23.0以上であることを確認してください。この例ではデモ用に23.6ツールチェーンを使用します。
- ネイティブ ファンクション ブロックの確立の基本プロセスに精通していること。
- ToolChainアドイン プラグインを備えたVisual Studio 2019または2022
$ plcncli --version
plcncli 23.6.0.1450 (23.6.0.1450)
ステップ1
- Visual Studioを使用して新しいプロジェクトを作成し、「共有ネイティブ ファンクション ブロック」プロジェクト タイプを選択し、プロジェクト名を「ArrayTest」とします。
- 次に、Visual StudioのArrayTestプロジェクト内で、「ArrayCplus」という名前の新しいネイティブ ファンクション ブロックを作成します。
ステップ2
- 以下のコードをArrayCplus.csにコピーします
- ソースコードを直接ここに含めると、& や > などの表示問題が発生するため(例:& が & にエンコードされる)、リンクを提供します。
ArrayCplus.cs
ステップ3
ArrayTestCppフォルダでターミナルを開き、以下を入力します。
$ plcncli generate code
コード生成後、srcディレクトリ内のArrayTest-cli32.hおよびArrayTest-cli64.hファイルを見つけ、#errorが示されている箇所を探します。
コメントを削除してコードを改善する必要があります。InArrayFB-cli.cppに移動して実装を修正します。
IntArrayFB-cli.cpp
ステップ4
ArrayCplus.cppに以下のコードを入力します。文字列を含むコンテンツは、Init領域ではなくProcess領域で初期化する必要があります。Init領域で初期化すると機能せず、Engineerを通じてsNameとsAttributeに値を書き込めなくなります。
ArrayCplus-cli.cpp
ステップ5
ArrayTestCppフォルダでターミナルを開き、以下を入力します。
$ plcncli build all
$ plcncli deploy
ステップ6
PLCnext Engineerを開き、ArrayTest.pcwlxをロードし、ArrayTestという名前の変数arrを追加します。
これで動作します
質問
- この方法は実践で機能しますが、IecStringまたはユーザー定義文字列を含むコンテンツをvoid PInvoke ArrayTest::ArrayCplus::Process()で初期化する必要があるのはなぜですか?void PInvoke ArrayTest::ArrayCplus::Init()にコードを置くと機能しません。
- GitHubにはネイティブ ファンクション ブロックのユーザー定義配列に関するチュートリアルが明確にありません。誰か補足して改善できませんか?(C#のユーザー定義配列の方法はネイティブ ファンクション ブロックでは機能しません)
- 最後に、IecString、ユーザー定義文字列、IecStringEx*のいずれであっても、文字列を含む場合、ネイティブ ファンクション ブロックとして使用するとき、C#コードではなぜ【InOut】の形式でなければならないのか、これも困惑しています。
注記:
Makers Blogは、Phoenix Contactによってテストまたはレビューされていないコミュニティ メンバーのアプリケーションとユーザー ストーリーを紹介しています。自己責任でご利用ください。
産業技術
- 平削り盤(プレーナー)とは:定義、構成部品、種類を徹底解説
- 耐久性のある電子機器エンクロージャの最適製造方法選定ガイド
- 初心者向け電気工学必読書トップ6
- 直列・並列コンデンサの理解:静電容量の加算と減算
- 半導体革命:物質科学からデバイス物理まで体系的に理解する入門ガイド
- 空港設備安全監査をマスターする:ステップバイステップガイド
- オーバーエンジニアリングを防ぐ:金属部品から先進プラスチックへの転換
- 最適化荒加工で劇的効果:高速化と工具寿命延長の6つの実証済み戦略
- メタライゼーション(金属化)徹底解説:メリット・プロセス・用途
- 産業セールス加速のために排除すべき4つのバイヤーペインポイント
- 理想的なCNC材料選定のための必須要因