C++ での単純および複雑なデータ型の使用
皆さん、こんにちは
このブログ投稿では、C++ と PLCnext Engineer の単純なデータ型と複雑なデータ型を調べます。これには、単純な演習と複雑な演習の 2 つの異なる部分が含まれます。
このチュートリアルは、C++ と PLCnext Engineer の使用経験があることを前提としています。
開始
まず、ジョブに適したツール、C++ エディタ、PLCnext Engineer ソフトウェア、およびこれを実行するフエニックス コンタクト PLC が必要です。これらは私が使用した資料です:
- ファームウェア バージョン 2021.0.3 の AXC F 2152
- PLCnext Engineer バージョン 2021.0.2
- Visual Studio 2019 コミュニティ バージョン 16.9.4
私は個人的に C++ エディターとして Visual Studio を選択しましたが、Eclipse も使用できます。チュートリアルへのリンクは次の場所にあります:
- ビジュアル スタジオ
- エクリプス
PLCnext Engineer については、当社のウェブサイトで見つけることができます。
簡単なエクササイズ
この最初の例では、正しい番号が PLC から送信されたかどうかを確認する小さなアプリケーションを作成します。まず、新しい C++ プロジェクトを作成します。次に、ヘッダー ファイルに進みます。名前は [NameOfTheProject].hpp のようになります。[nameOfTheProject]component.hpp という名前のファイルもありますが、これらは使用しません。ヘッダー ファイルに入ると、目の前にコードの壁が表示されますが、単純であることを心配する必要はありません。まず、IN と OUT のポートを定義します。これらは次のように定義できますが、これは単純なデータ型のみに適用されることに注意してください:
<サンプル>//#ポート
サンプル>
//#attributes(入力)
//#name(入力テスト)
int64 入力テスト =0;
<サンプル>//#ポート
//#attributes(出力)
//#name(出力テスト)
int64 OutputTest =0;
次に、実際のコーディングを行う次のファイルに移動します。これは [NameOfTheProject].cpp という名前にする必要があり、あまり多くは含まれません。すぐに変更します。 If または switch ケースを使用して数値をチェックするコードを追加しましょう。それはあなた次第です。これで if 構造を使用しました:
void PLMProjectReadInputProgram::Execute()void PLMProjectReadInputProgram::Execute(){
<サンプル> if (InputTest ==1) {
OutputTest =15;}
<サンプル> if (InputTest ==2) {
OutputTest =150;}
<サンプル> if (InputTest ==3) {
OutputTest =1500;}
<サンプル> if (InputTest ==4) {
OutputTest =15000;}
<サンプル>}サンプル>
PLCnext エンジニアに向かう前に、この C++ プロジェクトを PLC が理解できるようにライブラリにする必要があります。これは、画面上部のビルドをクリックするだけで実行できます。これは少しの間実行され、ライブラリが完了すると通知されます。この手順が不明な場合は、上記のチュートリアルを確認することを強くお勧めします。

「ローカル」フォルダーのプログラミングの下にあるコンポーネント タブでメイン プログラムに移動し、メイン画面内の変数を選択して、PLC 内の変数を表示します。ここで、名前とデータ型と用途を選択できます。 PLCnext エンジニアのデータ型は、C++ プログラムと同じである必要があります。さまざまな型へのリンクとそれらの等号はここにあります。使用法は、変数がローカルであるか、外部プログラムまたは変数からデータを送受信するために使用できるかを定義します。

これを行った後、新しいライブラリを追加した後、変数の接続を開始します。これは次のように行うことができます:
作成したライブラリは、プロジェクトの bin フォルダ内にあります。これを PLCnext エンジニアのライブラリ フォルダにコピーします。場所は次のようになります:
C:\Users\Public\Documents\PLCnext Engineer\Libraries
その後、PLCnext エンジニアに戻り、ライブラリをプログラムに追加します。コンポーネント タブに移動し、ライブラリ ボックスを開き、ライブラリを右クリックします。次に、[ユーザー ライブラリの追加] をクリックすると、前に移動したライブラリ フォルダーに移動します。使用するライブラリを選択して続行してください。

これが完了したら、次のように実行されるタスクにプログラムを追加する必要があります。プラントエリア内の画面左側にある PLCnext をダブルクリックします。真ん中が開くはずです。次に、[タスクとイベント] タブに移動し、MainInstance の後に新しいプログラムを追加します。これは、プログラム タイプを選択するか、[PLCnext Components &Programs] の下のコンポーネント領域からドラッグするという 2 つの方法で実行できます。

次に、[タスクとイベント] タブの横にある [ポート リスト] タブに変数が表示されます。これを開くと、C++ と PLCnext からのすべての変数が表示されます。次のようになります:

すべてを正しく行った場合、PLC の OUT ポートを C++ プログラムの IN ポートに接続できるはずです。その逆も可能で、次のようになります。これでうまくいかない場合は、データ型をチェックしてみてください。

変数にダミー値を追加するには、コンポーネント タブでメイン プログラムに移動し、メイン画面内のコードを選択してコードを表示し、独自の値を追加します。変数を数値に設定するだけです。この場合は 1 です。

プロジェクトを plc にデプロイすると、C++ コードからの応答として 15 が返されます。以前の「Ports List」で変数を確認できます。
複雑なエクササイズ
この例では、PLC との間で構造体の配列を送受信する小さなアプリケーションを作成します。まず、新しい C++ プロジェクトを作成します。次に、ヘッダー ファイルに進みます。名前は [NameOfTheProject].hpp のようになります。[nameOfTheProject]component.hpp という名前のファイルもありますが、これらは使用しません。ヘッダー ファイルに入ると、目の前にコードの壁が表示されますが、単純であることを心配する必要はありません。まず、車の構造体を作成するこの例の構造体を作成する必要があります。これは次のように行われます:
public:// typedefs
サンプル> <サンプル> struct StrCar{
サンプル>
StaticString<80> sbrand;
サンプル> <サンプル> int16 iHorsepower;
サンプル> <サンプル> int16 iYear;
サンプル> <サンプル> boolean xInsured;
サンプル> <サンプル> };サンプル>
!重要! C++ と PLCnext エンジニアの名前と型は同じである必要があります!データ型はここにあります。
次に、ポートを定義します。1 つの IN と 1 つの OUT です。これらはデータのリストになるため、そのようになります。また、「車」のリストにすることも重要です。これは次のように行われます:
<サンプル>//#ポート
サンプル>
//#attributes(入力)
サンプル>
//#name(CarIn)
サンプル>
StrCar CarToC[2];
<サンプル>//#ポート
サンプル>
//#attributes(出力)
サンプル>
//#name(CarOut)
サンプル>
StrCar CarFromC[2];
次に、実際のコーディングを行う次のファイルに移動します。これは [NameOfTheProject].cpp という名前にする必要があり、あまり多くは含まれません。すぐに変更します。ここでは、1 号車と 2 号車の値を変更します。
//自動車リストの最初のメンバーを PLC からの自動車と等しく設定する
サンプル>
CarFromC[0].sbrand =CarToC[1].sbrand;
サンプル>
CarFromC[0].iHorsepower =CarToC[1].iHorsepower;
サンプル>
CarFromC[0].iYear =CarToC[1].iYear;
サンプル>
CarFromC[0].xInsured =CarToC[1].xInsured;
// 2 番目のメンバーにダミー値を追加します
サンプル>
CarFromC[1].sbrand =CarToC[0].sbrand;
サンプル>
CarFromC[1].iHorsepower =CarToC[0].iHorsepower;
サンプル>
CarFromC[1].iYear =CarToC[0].iYear;
サンプル>
CarFromC[1].xInsured =CarToC[0].xInsured;
PLCnext エンジニアに向かう前に、この C++ プロジェクトを PLC が理解できるようにライブラリにする必要があります。これは、画面上部のビルドをクリックするだけで実行できます。これは少しの間実行され、ライブラリが完了すると通知されます。この手順が不明な場合は、上記のチュートリアルを確認することを強くお勧めします。

PLCnext エンジニアで変数を作成する前に、独自のデータ型を作成する必要があります。この場合は構造体の車と車のリストです。これにはデータ型ファイルが必要で、ここで見つけて作成できます:

このファイルをまだ開いていない場合は、開いてから、次のように独自の構造体の作成を開始できます。
TYPE
StrCar:
STRUCT
<サンプル> sBrand:STRING;
サンプル> <サンプル> iHorsepower:INT;
サンプル> <サンプル> iYear:int;
サンプル>
xInsured:BOOL;
<サンプル> END_STRUCTサンプル> <サンプル> サンプル>
<サンプル>END_TYPEサンプル>
!重要! C++ と PLCnext エンジニアの名前と型は同じである必要があります!データ型はここにあります。
構造体を作成した後、このタイプの配列を作成する必要があります。これは、現在のファイルと同じファイルで次のように行われます。
TYPE
carList:ARRAY[0..1] OF StrCar;
<サンプル>END_TYPEサンプル>
「carList」タイプの変数を作成するには、「プログラミング」の下のコンポーネントタブでメインプログラムに移動し、「プログラム」フォルダー内で、メイン画面内の変数を選択して、PLC 内の変数を表示します。ここで、名前とデータ型と用途を選択できます。データ型としてカスタムメイドのものを選択してください:

これを行った後、新しいライブラリを追加した後、変数の接続を開始します。これは次のように行うことができます:
作成したライブラリは、プロジェクトの bin フォルダ内にあります。これを PLCnext エンジニアのライブラリ フォルダにコピーします。場所は次のようになります:
C:\Users\Public\Documents\PLCnext Engineer\Libraries
その後、PLCnext エンジニアに戻り、ライブラリをプログラムに追加します。コンポーネント タブに移動し、ライブラリ ボックスを開き、ライブラリを右クリックします。次に、[ユーザー ライブラリの追加] をクリックすると、前に移動したライブラリ フォルダーに移動します。使用するライブラリを選択して続行してください。

これが完了したら、次のように実行されるタスクにプログラムを追加する必要があります。プラントエリア内の画面左側にある PLCnext をダブルクリックします。真ん中が開くはずです。次に、[タスクとイベント] タブに移動し、MainInstance の後に新しいプログラムを追加します。これは、プログラム タイプを選択するか、[PLCnext Components &Programs] の下のコンポーネント領域からドラッグするという 2 つの方法で実行できます。

次に、[タスクとイベント] タブの横にある [ポート リスト] タブに変数が表示されます。これを開くと、C++ と PLCnext からのすべての変数が表示されます。このように見えるはずです。

すべてを正しく行った場合、PLC の OUT ポートを C++ プログラムの IN ポートに接続できるはずです。その逆も可能で、次のようになります。これが機能しない場合は、変数のデータ型と名前を確認してください。

変数にダミー値を追加するには、コンポーネント タブでメイン プログラムに移動し、メイン画面内のコードを選択してコードを表示し、独自の値を追加します。いくつかの車の仕様に合わせて変数を設定するだけです。これらはランダムに選択できますが、データ型を一致させる必要があります。 (選択した内容に応じて、文字列を使用した場所に文字列を使用するなど)
CarToC[0].sBrand :='アウディ';
サンプル>
CarToC[0].iHorsepower :=200;
サンプル>
CarToC[0].iYear :=2020;
サンプル>
CarToC[0].xInsured :=TRUE;
CarToC[1].sBrand :='マツダ';
サンプル>
CarToC[1].iHorsepower :=120;
サンプル>
CarToC[1].iYear :=2001;
サンプル>
CarToC[1].xInsured :=FALSE;
この例を展開すると、送信リストは受信リストで交換されます。以前の「Ports List」で変数を確認できます。
産業技術