Action Commands#
若要對多台攝影機在完全同一時間執行動作,請改用 Scheduled Action Commands 功能。
若您想透過pylon Viewer 發送或排程動作指令,請使用「動作指令」(pylon Viewer )功能。
使用功能#
為何要使用動作指令#
您可以使用動作指令來執行以下任務:
- 使用多台攝影機同步擷取影像
- 同步重置多台攝影機的幀計數器
運作原理#
動作指令是廣播協定訊息,您可以將其傳送至 GigE 網路中的多個裝置。
每則動作協定訊息均包含以下資訊:
若攝影機位於指定的網路區段內,且協定資訊與攝影機中的動作指令設定相符,則攝影機將執行相應的動作。
資訊
有關 action 指令參數及其實作的更多資訊,請參閱以下文件:
- GigE Vision 規格,第 2.0 版,第 14.3 節
- pylon API 文件中的Grab_UsingActionCommand (C++)程式碼範例
動作裝置金鑰#
您自選的 32 位元數值,用於授權在攝影機上執行動作指令。若攝影機上的動作裝置金鑰與通訊協定訊息中的動作裝置金鑰完全一致,攝影機便會執行對應的動作。
行動小組關鍵詞#
您自選的 32 位元數值,用於定義應執行某項動作的一組裝置。若攝影機上的動作群組金鑰與通訊協定訊息中的動作群組金鑰完全相同,攝影機便會執行對應的動作。
動作群組遮罩#
您可自選的 32 位元數值,用於從某個攝影機群組中篩選出其下的子群組。屬於該子群組的攝影機會同時執行某項動作。
篩選是透過對動作指令的群組遮罩號碼與攝影機的群組遮罩號碼進行邏輯位元與(AND)運算來實現的。若這兩組二進位數中至少有一個共同位元設為 1(即與運算的結果不為零),則對應的攝影機即屬於該子群組。
範例:假設在一條組裝線上安裝了一組共六台攝影機。為了對特定子群組執行操作,已為這些攝影機指派以下群組遮罩編號(範例值):
| 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」指令所指定之網路區段中的攝影機群組(本例中為:群組 1)。要定義群組,請使用「action group」關鍵字。
- 在同步拍攝影像的相機群組中的子群組(本例中為子群組 1、2 和 3)。要定義這些子群組,請使用動作群組遮罩。
使用動作指令#
設定攝影機#
要設定攝影機,使其能夠接收並處理動作指令:
資訊
若您想設定 Scheduled Action Commands 。
- 請確保符合以下要求:
- 您要為其設定動作指令的所有攝影機,均已安裝並設定於同一網路區段中。
- 所有相機以及您用於配置和傳送動作指令的 Baslerpylon API 均支援「動作指令」功能。
- 開啟與其中一台您想透過動作指令進行控制的攝影機的連線。
- 將相機中的
ActionDeviceKey將此參數設定為您自選的 32 位元數值。該金鑰在網路區段中的所有攝影機之間必須是唯一的。 - 請設定以下參數:
- 視您欲將動作指令應用於哪項任務而定,請將對應的攝影機來源設定為
Action1.
範例 1: 若要使用動作指令來擷取影像,請將TriggerSource參數設為Action1.
範例 2: 若要使用動作指令來重置計數器,請將CounterResetSource參數設為Action1. - 請對所有攝影機重複執行步驟 2 至 4。
資訊
您也可以設定多個來源至 Action1. 這使您能夠在接收到任何動作指令時,同時執行多項任務。
發出動作指令#
若要發出動作指令,請呼叫 IssueActionCommand 應用程式中的方法。
範例:

如需更多資訊,請參閱pylon API 文件。
設定動作訊號(僅限 Ace 2 Pro)#
Basler ace 2 Pro 攝影機支援兩組動作訊號,而非僅有一組。這讓您可以定義兩種類型的指令,並利用這些指令在攝影機上執行不同的動作。
例如,您可以將相機設定為使用指令 1 觸發影像擷取,並使用指令 2 啟動計時器。
為此,除了 Action1 攝影機來源, Action2 已有攝影機來源。此外,該 ActionSelector 該參數可設定為 1 或 2。
要設定這兩個動作訊號:
- 請確保符合以下要求:
- 您要為其設定動作指令的所有攝影機,均已安裝並設定於同一網路區段中。
- 所有相機以及您用於配置和傳送動作指令的 Baslerpylon API 均支援「動作指令」功能。
- 開啟您想要透過動作指令來控制的其中一台攝影機。
- 將相機中的
ActionDeviceKey將此參數設定為您自選的 32 位元數值。該金鑰在網路區段中的所有攝影機之間必須是唯一的。 - 設定 first 動作訊號:
- 將相機中的
ActionSelector將參數設為 1。 - 請設定以下參數:
- 視您想將第一個動作指令用於哪項任務而定,請將對應的攝影機來源設定為
Action1.
範例: 若要使用動作指令來擷取影像,請將TriggerSource參數設為Action1.
- 將相機中的
- 設定 第二 動作訊號:
- 將相機中的
ActionSelector將參數設為 2。 - 將相機中的
ActionGroupKey參數或ActionGroupMask參數或兩者皆為 a 不同的 比您在第 4 步中輸入的數值還要大。 - 視您要將第二個動作指令用於哪項任務而定,請將對應的攝影機來源設定為
Action2.
範例: 若要使用動作指令來啟動計時器,請設定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) 將計數器 1 增加 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++ 版本。