PLCロジックを設計する
概要
「エミュレーションについての主要な概念」トピックで見たように、エミュレーションによるシミュレーションプロジェクトを構築する基本的な処理は次のとおりです。
このトピックでは、処理フローでPLCロジックを作成するフェーズについてより詳しく学習します。
このトピックを読む前に、FlexSimでコンベヤオブジェクトを使用する方法についてはコンベヤに関する章を参照してください。また、このトピックで説明する原則の実践を積むには、エミュレーションチュートリアルも完了してください。
エミュレーションプロジェクトを開始する前に
エミュレーションプロジェクトを開始する前に、将来のシステムで使用するプロトコルの種類を理解しておくことをお勧めします。これらの設定は後で変更できますが、処理フローでPLCロジックを設計する前にシステムで使用するプロトコルの種類を知ることができます。
FlexSimが現在サポートしているプロトコルは、次のとおりです。
- OPC DA
- Modbus TCP/IPv4
- Modbux TCP/IPv6
- Modbus RTU
使用しているプロトコルのタイプがわかると、ブール値、文字列、数値などの使用できる論理入力の種類を理解することもできます。これらを最終的なPLCプログラマーに話すと役立ちます。
変数を追加する
エミュレーションプロジェクトの設定の最初のステップは、処理フローに変数を追加することです。変数はさまざまな値や参照オブジェクト、ノードを格納したり、別のクラスの機能を担ったりできる特殊なタイプの処理フロー共有アセットです。エミュレーションでは、変数をサーバー接続、センサー(PLC入力)、コントロール(PLC出力)として使用できます。これらの変数タイプの違いの詳細については、「エミュレーションについての主要な概念 - 主な用語」を参照してください。
センサー(PLC入力)を追加する
処理フローにセンサー変数を追加する場合、センサーは3Dモデルから値を入力してその値をサーバーに書き込むことに留意してください。センサーを設定する場合、どのシミュレーションモデルのイベントがサーバー上のセンサーの値を変更するのかを決める必要があります。可能な値の範囲は、使用しているサーバーのタイプと利用可能なセンサー入力のタイプによって変わります。
処理フローにセンサーを追加するには:
- 処理フローを開きアクティブにして、処理フローに[変数]([共有アセット]の下)を追加します。
- [クイックプロパティ]で[変数または値]ボックスの横にある矢印をクリックしてメニューを開きます。[内部エミュレーション変数]、[センサー(PLC入力)]の順にポイントして、このプロジェクトで使用するサーバーのタイプを選択します。
- [関連オブジェクト]ボックスを使用して、この変数を3Dモデルのオブジェクトに結び付けることができます。[サンプラー]ボタン を使用してオブジェクトをサンプリングするか、メニューからオブジェクトを選択できます。
- [イベントを書き込む]グループの下で、[追加]ボタン をクリックしてメニューを開きます。メニューは状況依存型です。メニューには、そのタイプのオブジェクトに使用できるイベントが表示されます。値を割り当てるイベントを選択します。
- 新しいイベントの[値]ボックスに、このイベントに適した値を入力します。この値はサーバーに書き込まれる値です。
- 必要に応じて、前の2つのステップを繰り返します。
または、エミュレーションツールでセンサーを設定して、処理フローの変数をツールのセンサーにリンクすることもできます。詳細については、「エミュレーションツールを使用する」を参照してください。
コントロール(PLC出力)を追加する
処理フローにコントロール変数を追加する場合は、コントロールが3Dモデルに値を出力することに留意してください。コントロールはサーバーから値を読み取るだけで、書き込むことはできません。コントロールを設定する場合、コントロールがサーバーから特定の値を受信したときにどのようなアクションを取るのかを決定する必要があります。可能な値の範囲は、使用しているサーバーのタイプと利用可能なコントロール出力設定のタイプによって変わります。
処理フローにコントロールを追加するには:
- 処理フローを開きアクティブにして、処理フローに[変数]([共有アセット]の下)を追加します。
- [クイックプロパティ]で[変数または値]ボックスの横にある矢印をクリックしてメニューを開きます。[内部エミュレーション変数]、[コントロール(PLC出力)]の順にポイントして、このプロジェクトで使用するサーバーのタイプを選択します。
- [関連オブジェクト]ボックスを使用して、この変数を3Dモデルのオブジェクトに結び付けることができます。[サンプラー]ボタン を使用してオブジェクトをサンプリングするか、メニューからオブジェクトを選択できます。
- [アクション]グループの下にある[追加]ボタン をクリックして、新しいアクションを追加します。
- 新しいアクションの[値]ボックスに、このアクションに適した値を入力します。この値は、サーバーから読み取られる値です。
- [アクション]ボックスの横にある[追加]ボタン をクリックして、ピックリストオプションのメニューを開きます。3Dオブジェクトが取るアクションに適したピックリストを選択します。その後、そのピックリストオプションに関連するプロパティを設定します。
- 必要に応じて、前の3つのステップを繰り返します。
または、エミュレーションツールでコントロールを設定して、処理フロー変数をツールのセンサーにリンクすることもできます。詳細については、「エミュレーションツールを使用する」を参照してください。
サーバー接続を追加する
サーバー接続を追加する場合、留意すべき重要なことはサーバーが非アクティブかアクティブかということです。違いの詳細については、「エミュレーションについての主要な概念 - アクティブな接続と非アクティブな接続」を参照してください。
サーバー接続を設定するには:
- 処理フローを開きアクティブにして、[変数]共有アセット([共有アセット]の下)を処理フローに追加します。
- [クイックプロパティ]で[変数または値]ボックスの横にある矢印をクリックしてメニューを開きます。[内部エミュレーション変数]をポイントして、このプロジェクトで使用するサーバーのタイプを選択します。
- デフォルトでは、新しく作成した接続は非アクティブになります。これは、[アクティブ]ボックスに[
0
]が表示されている状態です。 - センサーまたはコントロールの横にある[感嘆符]ボタン をクリックしてサンプリングモードに入り、新しく作成した接続にセンサーまたはコントロール変数を接続します。
- 作成したばかりのサーバー接続変数をクリックし、サンプリングします。これで、変数がサーバーに接続されます。
- サーバーに追加のセンサーまたはコントロール変数を接続するには、前のステップを繰り返します。
または、エミュレーションツールでサーバー接続を設定することもできます。詳細については、「エミュレーションツールを使用する」を参照してください。
処理フローでPLCロジックを構築する
処理フローでPLCロジックを構築する方法は、多くの点において任意の処理フローでロジックを構築するのと同じです。エミュレーションチュートリアルに、エミュレーションプロジェクトで構築できるロジックの例をいくつか示します。
構築時に、いくつかの追加アクティビティを使用してセンサーおよびコントロールからの読み取りや書き込みを実行できます。
- 変数を設定 - このアクティビティを使用すると、トークンが処理フローでこのアクティビティに到達するときのエミュレーション変数の値を設定できます。変更するエミュレーション変数のいずれかにこのアクティビティを接続できます。エミュレーション変数を設定すべき値を示します。
- 変数を取得 - [変数を設定]アクティビティと同様に機能しますが、このアクティビティを使用すると、トークンが処理フローでこのアクティビティに到達するときのエミュレーション変数の値を取得できます。
エミュレーションツールを使用する
代わりにエミュレーションツールを使用して、接続、センサー、コントロールを設定できます。
エミュレーションツールを開く
ツールボックスからエミュレーションツールを開くことができます。エミュレーションツールは、[接続]サブメニューの下にあります。
接続を追加する
[接続]タブを使用して接続を追加します。接続に使用できるオプションは、処理フローで接続変数に使用できるオプションと同じです。
変数を追加する
次に、[変数]タブを使用してセンサーとコントロールを追加します。ここでも、使用可能なオプションには処理フロー変数にあるものと同じプロパティが反映されます。
エミュレーションツールに処理フロー変数をリンクする
エミュレーションツールに処理フロー変数をリンクするには:
- 接続と変数がエミュレーションツールで設定されていることを確認します。
- 処理フローを開きアクティブにして、[変数]共有アセット([共有アセット]の下)を処理フローに追加します。
- [クイックプロパティ]で[変数または値]ボックスの横にある矢印をクリックしてメニューを開きます。[エミュレーション変数]、エミュレーションツールで設定したサーバーのタイプの順にポイントして、エミュレーションツールからリンクする変数を選択します。
または、[変数または値]ボックスの横にある[サンプラー]ボタン を使用して、ツールボックスのエミュレーションツールまたはエミュレーションツールウィンドウの接続や変数をクリックすることもできます。
エミュレーションプロジェクトでの処理フローインスタンス
必要に応じて、処理フローの機能を使用してエミュレーションプロジェクトでインスタンスを作成できます。処理フローインスタンスは、同一ロジックを使用する3Dモデルに2つ以上のオブジェクトがあり、ロジックが同じで変数が異なる同一のPLCサーバーをそれぞれが使用する場合に理想的です。
たとえば、ラベラーまたは包装機があり、それに専用のPLCが必要だとします。ただし、システム全体でこれらの種類のマシンが50台あり、同一ロジックを実行します。このラベラー用に固定リソースオブジェクトを作成し、固定リソースの処理フローを使用してPLCロジックをエミュレートできます。次に、この固定リソースオブジェクトのコピーを3Dモデルに追加します。モデルが実行されると、各固定リソースが処理フローの独自インスタンス(コピー)を実行します。
処理フローインスタンスを処理する際に考慮すべきいくつかの点については、次のセクションで説明します。
グローバル変数とローカル変数
固定リソースの処理フローでエミュレーション変数を使用している場合、[タイプ]プロパティを[グローバル]または[ローカル]に設定するためのオプションがあります。
- グローバル - 変数タイプをグローバルに設定すると、処理フローのすべてのインスタンスが同じサーバーに接続するか(接続の場合)、またはサーバー上の同じ変数を参照します(センサーとコントロールの場合)。
- ローカル - 変数タイプをローカルに設定すると、処理フローの各インスタンスが専用サーバーを使用するか(接続の場合)、またはサーバー上の一意の変数を参照します(センサーとコントロールの場合)。
一意の接続を作成する
このセクションではOPC DA接続のプロパティを参照しますが、前提は他のプロトコルでも同じです。
各インスタンスが新しい接続を作成するように接続タイプを[ローカル]に設定している場合、各インスタンスのアドレスとサーバーを定義する必要があります。すべてのサーバーが同じコンピュータ上で実行されている場合、[アドレス]はすべての接続で同じままになります。この場合、[サーバー]プロパティを動的に作成します。コードcurrent.ServerName
を使用して、オブジェクトのラベル値を取得できます。
サーバーが異なるコンピュータ上で実行されている場合、[アドレス]プロパティを動的に作成して、インスタンスごとに異なるアドレスを定義する必要があります。これは、[サーバー]を動的に作成するのと同じ方法で実行できます。
一意のセンサーおよびコントロール変数を作成する
このセクションではOPC DAタグのプロパティを参照しますが、前提は他のプロトコルでも同じです。
PLCロジックを有効にする段階になったら、固定リソースの各インスタンスに一意のタグIDを割り当てできるようにする必要があります。
- タグインスタンス指定子を設定 - 変数でこのプロパティを使用すると、タグIDの定義に使用される一意のグループや名前を設定できます。このプロパティを動的に作成して各インスタンスに適合できるようにするには、コード
current.name
を使用してオブジェクトの名前を取得します。その後、使用するグループに基づいて各オブジェクトに名前を付けます。別の方法としては、GroupNameなどの同じラベルを持つように各オブジェクトを設定して、各オブジェクトに一意の値を付与できます。その後、タグインスタンス指定子で、コードcurrent.GroupName
を使用して各オブジェクトのラベル値を取得します。 - タグIDを設定 - タグインスタンス指定子を設定すると、[タグID]プロパティで参照できます。コード
%s
を使用して、タグインスタンス指定子を動的に参照できます。テキストを追加して、変数に特定のタグIDを定義します。たとえば、%s.PhotoEyes.A13
やPhotoEyes.%sA13
詳細については、「処理フローインスタンス」を参照してください。