Action Commands#
如果您想要在完全相同的時間對多部相機執行動作,請改用 Scheduled Action Commands 功能。
如果您想使用 pylon Viewer 傳送或排程 action commands,請使用 Action Commands (pylon Viewer) 功能。
使用功能#
為什麼要使用 Action Commands#
您可以使用 action commands 來執行下列工作(例如):
- 使用多部相機同步擷取影像
- 同步重設多部相機上的 frame counter
運作原理#
Action commands 是您可以傳送到 GigE 網路中多個裝置的廣播協定訊息。
每個動作協定訊息都包含下列資訊:
- Action device key
- Action group key
- Action group mask
- Broadcast address(選用,預設值:255.255.255.255)
如果相機位於指定的網路區段內,且協定資訊與相機中的 action command 設定相符,相機就會執行對應的動作。
資訊
如需有關 action command 參數及其實作的詳細資訊,請參閱下列文件:
- GigE Vision Specification, version 2.0,第 14.3 節
- pylon API 說明文件中的 Grab_UsingActionCommand (C++) 程式碼範例
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,也適用相同的程序。
- 請確保符合下列要求:
- 您要在其上設定動作命令的所有相機,都必須安裝並設定在相同的網路區段中。
- 所有相機以及您用來設定和傳送動作命令的 Basler pylon API 皆支援動作命令功能。
- 開啟要使用動作命令控制其中一台相機的連線。
- 將相機中的
ActionDeviceKey參數設為您選擇的 32 位元數字。該金鑰在網路區段的所有相機中必須是唯一的。 - 設定下列參數:
- 根據您要將動作命令用於哪一項任務,將對應的相機來源設定為
Action1.
範例 1: 如果您想使用動作命令來擷取影像,請將TriggerSource參數設為Action1.
範例 2: 如果您想使用動作命令來重設 Counter,請將CounterResetSource參數設為Action1. - 在所有相機上重複步驟 2 至 4。
資訊
您也可以將多個來源設定為 Action1。這可讓您在收到動作命令時同時執行多個工作。
發送 Action Command#
若要發出動作命令,請在應用程式中呼叫 IssueActionCommand 方法。
範例:

如需詳細資訊,請參閱 pylon API Documentation。
設定 Action Signals(僅限 ace 2 PRO)#
Basler ace 2 PRO 相機支援兩個動作訊號,而非一個。這可讓您定義兩種類型的命令,並使用它們在相機上執行不同的動作。
例如,您可以將相機設定為透過命令 1 觸發影像擷取,並透過命令 2 啟動 Timer。
為此,除了 Action1 相機來源外, Action2 相機來源也可供使用。此外, ActionSelector 參數可以設定為 1 或 2。
若要設定這兩個動作訊號:
- 請確保符合下列要求:
- 您要在其上設定動作命令的所有相機,都必須安裝並設定在相同的網路區段中。
- 所有相機以及您用來設定和傳送動作命令的 Basler pylon API 皆支援動作命令功能。
- 開啟您想要使用動作命令控制的其中一台相機。
- 將相機中的
ActionDeviceKey參數設為您選擇的 32 位元數字。該金鑰在網路區段的所有相機中必須是唯一的。 - 設定 first 動作訊號:
- 將相機中的
ActionSelector參數設為 1。 - 設定下列參數:
- 根據您要將第一個動作命令用於哪一項工作,將對應的相機來源設定為
Action1.
範例: 如果您想使用動作命令來擷取影像,請將TriggerSource參數設為Action1.
- 將相機中的
- 設定 second 動作訊號:
- 將相機中的
ActionSelector參數設為 2。 - 將相機中的
ActionGroupKey參數或ActionGroupMask參數或兩者設為 不同的 大於您在步驟 4 中輸入的值。 - 根據您要將第二個動作指令用於哪項任務,將對應的相機來源設定為
Action2.
範例: 如果您想使用動作指令來啟動 Timer,請將TimerTriggerSource參數設為Action2.
- 將相機中的
- 在所有相機上重複步驟 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++ 版本。