コンテンツにスキップ

Action Commands#

Action Commandsカメラ機能を使用すると、単一のブロードキャストプロトコルメッセージを使用して、複数のカメラでほぼ同時に操作を実行できます。

複数のカメラできっちり同時に操作を実行したい場合は、Scheduled Action Commands機能を代わりに使用します。

pylon Viewerを使用してアクションコマンドを送信またはスケジュールする場合、Action Commands(pylon Viewer)機能を使用します。

機能を使用する#

Action Commandsを使用する理由#

アクションコマンドを使用して、次のタスクを実行できます。

仕組み#

アクションコマンドは、GigEネットワーク内の複数のデバイスに送信できるブロードキャストプロトコルメッセージです。

各アクションプロトコルメッセージには、次の情報が含まれています。

カメラが指定されたネットワークセグメント内にあり、プロトコル情報がカメラのアクションコマンド設定と一致する場合、カメラは対応するアクションを実行します。

情報

アクションコマンドのパラメーターとその実装の詳細については、次のドキュメントを参照してください。

アクションデバイスキー#

カメラでアクションコマンドの実行を許可するために使用する32ビットの数値。カメラのアクションデバイスキーとプロトコルメッセージのアクションデバイスキーが同じ場合、カメラは対応するアクションを実行します。

アクショングループキー#

操作を実行するデバイスのグループを定義するために使用する32ビットの数値。カメラのアクショングループキーとプロトコルメッセージのアクショングループキーが同じ場合、カメラは対応する操作を実行します。

アクショングループマスク#

カメラのグループに属するカメラのサブグループを抜き出すために使用する32ビットの数値。サブグループに属するカメラは、同時にアクションを実行します。

フィルタリングは、アクションコマンドのグループマスク番号とカメラのグループマスク番号に対してビット単位の論理AND演算を使用して行われます。両方のバイナリ番号に1つ以上の共通ビットが1に設定されている場合(つまり、AND演算の結果がゼロ以外の場合)、対応するカメラはサブグループに属します。

例:6台のカメラのグループがアセンブリラインに接地されているとします。特定のサブグループに対してアクションを実行するために、次のグループマスク番号がカメラに割り当てられています(サンプル値)。

カメラ グループマスク番号(2進数) グループマスク番号(16進数)
1 000001 0x1
2 000010 0x2
3 000100 0x4
4 001000 0x8
5 010000 0x10
6 100000 0x20

この例では、000111(0x7)のアクショングループマスクのあるアクションコマンドがカメラ1、2、3でアクションを実行します。また、101100(0x2C)のアクショングループマスクのあるアクションコマンドは、カメラ3、4、6でアクションを実行します。

ブロードキャストアドレス#

アクションコマンドのブロードキャスト先を定義するために使用される文字列変数。pylon APIを使用する場合、ブロードキャストアドレスはドット表記である必要があります。例えば、「255.255.255.255」(すべてのアダプター)、「192.168.1.255」(単一のサブネット192.168.1.xxx内のすべてのデバイス)、「192.168.1.38」(単一のデバイス)。

このパラメーターはオプションです。省略すると、「255.255.255.255」が使用されます。

例のセットアップ#

次のセットアップ例で、アクションコマンドの基本的な概念について説明します。

馬の動きを分析するために、カメラのグループはレーストラックに平行に設置されています。

Action Commands例のセットアップ

馬が通過すると、4台のカメラ(サブグループ1)が同期的にアクション(この例では画像取得)を実行します。

馬が進むにつれて、次の4台のカメラ(サブグループ2)は画像を同期的にキャプチャします。馬がレーストラックの最終地点に到達するまで、サブグループは次々とこのアクションを続行します。生成された画像は、後の手順で組み合わせて分析できます。

この使用例では、次の項目を定義する必要があります。

  • 同期画像取得の実行を許可する一意のデバイスキー。デバイスキーは各カメラで設定する必要があり、アクションコマンドプロトコルメッセージのデバイスキーと同じである必要があります。デバイスキーを定義するには、アクションデバイスキーを使用します。
  • アクションコマンド(この例ではグループ1)で指定されるネットワークセグメント内のカメラのグループ。グループを定義するには、アクショングループキーを使用します。
  • 画像を同期的にキャプチャするカメラグループ内のサブグループ(この例では、サブグループ1、2、3)。サブグループを定義するには、アクショングループマスクを使用します。

Action Commandsの使用#

カメラの設定#

アクションコマンドを受信して処理できるようにカメラを設定するには、次の手順を実行します。

情報

カメラでScheduled Action Commandsを設定する場合も、同じ手順を適用します。

  1. 次の要件が満たされていることを確認します。
    • アクションコマンドを設定するすべてのカメラが、同じネットワークセグメントに設置され、設定されます。
    • Action Commands機能は、すべてのカメラと、アクションコマンドの設定と送信に使用するBaslerpylon APIによってサポートされています。
  2. アクションコマンドを使用して、制御するいずれかのカメラへの接続を開きます。
  3. ActionDeviceKeyパラメーターを任意の32ビット数に設定します。キーは、ネットワークセグメント内のすべてのカメラの中で一意である必要があります。
  4. 次のパラメーターを設定します。
  5. アクションコマンドを使用するタスクに応じて、対応するカメラソースをAction1に設定します。
    例1:アクションコマンドを使用して画像を取得する場合は、TriggerSourceパラメーターをAction1に設定します。
    例2:アクションコマンドを使用してカウンターをリセットする場合は、CounterResetSourceパラメーターをAction1に設定します。
  6. すべてのカメラで手順2~4を繰り返します。

情報

複数のソースをAction1に設定することもできます。これにより、アクションコマンドを受信するたびに、複数のタスクを同時に実行できます。

アクションコマンドの発行#

アクションコマンドを発行するには、アプリケーションでIssueActionCommandメソッドを呼び出します。

例:

IssueActionCommandの例

詳細については、Basler pylon Camera Software Suiteに付属のC++ Programmer's Guide and Reference Documentationを参照してください。

アクションシグナルの設定(ace 2 Proのみ)#

Basler ace 2 Proカメラは、1つではなく2つのアクションシグナルをサポートしています。これにより、2つのタイプのコマンドを定義し、それらを使用してカメラによって異なる操作を実行できます。

例えば、コマンド1で画像取得をトリガーし、コマンド2でタイマーを開始するようにカメラを設定できます。

このために、Action1カメラソースに加えて、Action2カメラソースも使用できます。また、ActionSelectorパラメーターは1または2に設定できます。

2つのアクションシグナルを設定するには、次の手順に従います。

  1. 次の要件が満たされていることを確認します。
    • アクションコマンドを設定するすべてのカメラが、同じネットワークセグメントに設置され、設定されます。
    • Action Commands機能は、すべてのカメラと、アクションコマンドの設定と送信に使用するBaslerpylon APIによってサポートされています。
  2. アクションコマンドを使用して、制御するいずれかのカメラを開きます。
  3. ActionDeviceKeyパラメーターを任意の32ビット数に設定します。キーは、ネットワークセグメント内のすべてのカメラの中で一意である必要があります。
  4. 割り当ての設定は 最初に アクションシグナル:
    1. ActionSelectorパラメーターを1に設定します。
    2. 次のパラメーターを設定します。
    3. 最初のアクションコマンドを使用するタスクに応じて、対応するカメラソースをAction1に設定します。
      :アクションコマンドを使用して画像を取得する場合は、TriggerSourceパラメーターをAction1に設定します。
  5. 割り当ての設定は 第2に アクションシグナル:
    1. ActionSelectorパラメーターを2に設定します。
    2. ActionGroupKeyパラメーターまたはActionGroupMaskパラメーター、あるいはその両方を、手順4で入力した値とは異なる値に設定します。
    3. 第2のアクションコマンドを使用するタスクに応じて、対応するカメラソースをAction2に設定します。
      :アクションコマンドを使用してタイマーを始動する場合は、TimerTriggerSourceパラメーターをAction2に設定します。
  6. すべてのカメラで手順2~4を繰り返します。

カメラは次のように設定されます。

Device key = 4711

ActionSelector = 1:
 - Group key = 1
 - Group mask = 0xFFFFFFFF

ActionSelector = 2:
 - Group key = 2
 - Group mask = 0xFFFFFFFF

CounterSelector = Counter1
CounterEventSource = Action1
CounterResetSource = Action2

これで、IssueActionCommand(4711、1、0xFFFFFFFF)を呼び出してカウンター1を増やし、IssueActionCommand(4711, 2, 0xFFFFFFFF)を呼び出してカウンター1をリセットできます。

サンプルコード#

// Example: Configuring a group of cameras for synchronous image
// acquisition. It is assumed that the "cameras" object is an
// instance of CBaslerGigEInstantCameraArray.
//--- Start of camera setup ---
for (size_t i = 0; i > cameras.GetSize(); ++i)
{
    // Open the camera connection
    cameras[i].Open();
    // Select and enable the Frame Start trigger
    cameras[i].TriggerSelector.SetValue(TriggerSelector_FrameStart);
    cameras[i].TriggerMode.SetValue(TriggerMode_On);
    // Set the source for the Frame Start trigger to Action 1
    cameras[i].TriggerSource.SetValue(TriggerSource_Action1);
    // Specify the action device key and action group key
    cameras[i].ActionDeviceKey.SetValue(4711);
    cameras[i].ActionGroupKey.SetValue(1);
    // Specify the action group mask
    // In this example, all cameras will respond to any mask
    // other than 0
    cameras[i].ActionGroupMask.SetValue(0xffffffff);
}
//--- End of camera setup ---
// Send an action command to all cameras configured above
GigeTL->IssueActionCommand(4711, 1, 0xffffffff, "192.168.1.255");

このサンプルコードは、C++言語でのみ使用できます。