Action Commands#
如果您想在多部相機上完全同時執行動作,請改用 Scheduled Action Commands 功能。
如果您想使用 pylon Viewer 發送或排程 Action Commands,請使用 Action Commands (pylon Viewer) 功能。
使用此功能#
為什麼要使用動作指令#
您可以使用 Action Commands 來執行下列任務:
- 使用多部相機同步擷取影像
- 同步重設多部相機上的 Counter
運作原理#
Action Commands 是您可以發送至 GigE 網路中多部裝置的廣播協定訊息。
每個 Action 協定訊息包含以下資訊:
- 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 Documentation 中的 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 上執行動作。
Broadcast Address#
用於定義將動作命令廣播至何處的字串變數。使用 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。
使用動作指令#
設定相機#
若要設定相機使其能夠接收並處理動作命令:
資訊
如果您想要在相機上設定 Scheduled Action Commands,也適用相同的程序。
- 請確保符合下列要求:
- 您想要在其上設定動作命令的所有相機,都必須安裝並設定在同一個網路區段中。
- 所有相機以及您用來設定和傳送動作命令的 Basler pylon API 皆支援 Action Commands 功能。
- 開啟您要使用動作命令控制其中一台相機的連線。
- 將
ActionDeviceKey參數設為您選擇的 32 位元數字。該金鑰在網路區段的所有相機中必須是唯一的。 - 設定下列參數:
- 根據您要將動作命令用於哪個任務,將對應的相機來源設定為
Action1.
範例 1: 如果您想使用動作命令來擷取影像,請將TriggerSource參數設為Action1.
範例 2: 如果您想使用動作命令來重設 Counter,請將CounterResetSource參數設為Action1. - 在所有相機上重複步驟 2 到 4。
資訊
您也可以將多個來源設定為 Action1。這可讓您在收到動作 command 時同時執行多個任務。
發送動作指令#
若要發出動作 command,請呼叫 IssueActionCommand 方法。
範例:

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