跳至內容
測試伺服器
開發伺服器

Action Commands#

透過 Action Commands camera feature,您可以使用單一廣播協定訊息,在大約同一時間對多部 GigE 相機執行動作。

如果您想要在完全相同的時間對多部相機執行動作,請改用 Scheduled Action Commands 功能。

如果您想使用 pylon Viewer 傳送或排程 action commands,請使用 Action Commands (pylon Viewer) 功能。

使用功能#

為什麼要使用 Action Commands#

您可以使用 action commands 來執行下列工作(例如):

  • 使用多部相機同步擷取影像
  • 同步重設多部相機上的 frame counter

運作原理#

Action commands 是您可以傳送到 GigE 網路中多個裝置的廣播協定訊息。

每個動作協定訊息都包含下列資訊:

如果相機位於指定的網路區段內,且協定資訊與相機中的 action command 設定相符,相機就會執行對應的動作。

資訊

如需有關 action command 參數及其實作的詳細資訊,請參閱下列文件:

Action Device Key#

您自行選擇的 32 位元數字,用於授權在相機上執行 action command。如果相機上的 action device key 與協定訊息中的 action device key 相同,相機就會執行對應的動作。

Action Group Key#

您自行選擇的 32 位元數字,用於定義應在其上執行動作的裝置群組。如果相機上的 action group key 與協定訊息中的 action group key 相同,相機就會執行對應的動作。

Action Group Mask#

您自行選擇的 32 位元數字,用於篩選出屬於某個相機群組的子群組相機。屬於子群組的相機會在同一時間執行動作。

篩選過程是透過對 action command 的群組遮罩數字與相機的群組遮罩數字執行邏輯位元 AND 運算來完成。如果這兩個二進位數字至少有一個共同的位元設為 1(亦即 AND 運算的結果不為零),則對應的相機即屬於該子群組。

範例:假設一條組裝線上安裝了六部相機。為了在特定的子群組上執行動作,已指派下列群組遮罩數字給相機(範例數值):

Camera 群組遮罩數字(二進位) 群組遮罩數字(十六進位)
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」。

範例設定#

以下範例設定將讓您對動作命令的基本概念有初步的了解。

為了分析馬匹的運動,賽道旁平行安裝了一組相機。

動作命令範例設定

當馬匹經過時,四台相機(子群組 1)會同步執行動作(在此範例中為影像擷取)。

隨著馬匹前進,接下來的四台相機(子群組 2)會同步擷取影像。各子群組依序以這種方式持續進行,直到馬匹到達賽道終端。產生的影像可以在後續步驟中進行組合與分析。

在這個範例應用情境中,必須定義下列事項:

  • 用於授權執行同步影像擷取的唯一裝置金鑰。必須在每台相機上設定裝置金鑰,且該金鑰必須與動作命令協定訊息的裝置金鑰相同。若要定義裝置金鑰,請使用 action device key。
  • 網路區段中由動作命令尋址的相機群組(在此範例中為群組 1)。若要定義群組,請使用 action group key。
  • 相機群組中同步擷取影像的子群組(在此範例中為子群組 1、2 和 3)。若要定義子群組,請使用 action group mask。

使用 Action Commands#

設定相機#

若要設定相機使其能夠接收並處理動作命令:

資訊

如果您要在相機上設定 Scheduled Action Commands,也適用相同的程序。

  1. 請確保符合下列要求:
    • 您要在其上設定動作命令的所有相機,都必須安裝並設定在相同的網路區段中。
    • 所有相機以及您用來設定和傳送動作命令的 Basler pylon API 皆支援動作命令功能。
  2. 開啟要使用動作命令控制其中一台相機的連線。
  3. 將相機中的 ActionDeviceKey 參數設為您選擇的 32 位元數字。該金鑰在網路區段的所有相機中必須是唯一的。
  4. 設定下列參數:
  5. 根據您要將動作命令用於哪一項任務,將對應的相機來源設定為 Action1.
    範例 1: 如果您想使用動作命令來擷取影像,請將 TriggerSource 參數設為 Action1.
    範例 2: 如果您想使用動作命令來重設 Counter,請將 CounterResetSource 參數設為 Action1.
  6. 在所有相機上重複步驟 2 至 4。

資訊

您也可以將多個來源設定為 Action1。這可讓您在收到動作命令時同時執行多個工作。

發送 Action Command#

若要發出動作命令,請在應用程式中呼叫 IssueActionCommand 方法。

範例:

IssueActionCommand 範例

如需詳細資訊,請參閱 pylon API Documentation。

設定 Action Signals(僅限 ace 2 PRO)#

Basler ace 2 PRO 相機支援兩個動作訊號,而非一個。這可讓您定義兩種類型的命令,並使用它們在相機上執行不同的動作。

例如,您可以將相機設定為透過命令 1 觸發影像擷取,並透過命令 2 啟動 Timer。

為此,除了 Action1 相機來源外, Action2 相機來源也可供使用。此外, ActionSelector 參數可以設定為 1 或 2。

若要設定這兩個動作訊號:

  1. 請確保符合下列要求:
    • 您要在其上設定動作命令的所有相機,都必須安裝並設定在相同的網路區段中。
    • 所有相機以及您用來設定和傳送動作命令的 Basler pylon API 皆支援動作命令功能。
  2. 開啟您想要使用動作命令控制的其中一台相機。
  3. 將相機中的 ActionDeviceKey 參數設為您選擇的 32 位元數字。該金鑰在網路區段的所有相機中必須是唯一的。
  4. 設定 first 動作訊號:
    1. 將相機中的 ActionSelector 參數設為 1。
    2. 設定下列參數:
    3. 根據您要將第一個動作命令用於哪一項工作,將對應的相機來源設定為 Action1.
      範例: 如果您想使用動作命令來擷取影像,請將 TriggerSource 參數設為 Action1.
  5. 設定 second 動作訊號:
    1. 將相機中的 ActionSelector 參數設為 2。
    2. 將相機中的 ActionGroupKey 參數或 ActionGroupMask 參數或兩者設為 不同的 大於您在步驟 4 中輸入的值。
    3. 根據您要將第二個動作指令用於哪項任務,將對應的相機來源設定為 Action2.
      範例: 如果您想使用動作指令來啟動 Timer,請將 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) 來增加 Counter 1,以及 IssueActionCommand(4711, 2, 0xFFFFFFFF) 來重設 Counter 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++ 版本。