Operator Library: Hardware Platform
This operator represents the image data interface between a CXP dual-tap camera and VisualApplets. You can use the operator for single channel, dual channel or quad channel CXP interfaces. You select the type of interface with the parameter ConnectionCount. The operator outputs raw image data for each tap port, no matter which format the camera delivers. You then need to convert this image data into the format sent by the camera. To convert the image data, use appropriate operators for aggregating and casting raw byte values to pixel values. Certain situations during operation may be communicated via the event system as described below. Additionally, the operator has various parameters signaling the status of the connection to the camera.
| 適用於硬體平台 |
|---|
| imaFlex CXP-12 Penta |
| imaFlex CXP-12 Quad |
CXP Standard Multi-Tap Definition
Usually, the image pixels are scanned sequentially from the top left to the bottom right. However, with the steadily growing number of pixels on modern image sensors, this approach does not produce acceptable frame rates. To tackle this issue, sensor manufacturers help themselves by scanning multiple pixels at the same time. The CXP standard accommodates this technique by introducing the concept of taps. A tap can be seen as a scanning device, which reads the image pixels sequentially. The way an image is scanned is defined as the Tap Geometry, which the host reads from the device.
![]() |
Taps Apply to Vertical Scanning Only |
|---|---|
|
Taps apply to vertical scanning only. Horizontal scanning is fixed from left to right. |
It is recommended in the CXP standard, that a frame grabber host supports the three tap formats 1X-1Y, 1X-1Y2, and 1X-2YE. The tap format 1X-1Y represents the default characteristic scanning the image pixel by pixel from top left to bottom right, while the other formats represent two tap geometries, that are depicted in the following figure:

Although data from each tap is formed into
separate streams, it is important to note that there is no fixed mapping between the
stream-ID and the tap. However, it is safe to assume, that this mapping remains constant
during acquisition. The TapG code, and thus, the required information to
find this mapping, is provided in the CXP image header, which can be read on the
optional MetaDataTap0/1 ports.
| Tap Format | TapG Code |
|---|---|
| 1X-1Y | 0x0000 |
| 1X-1Y2, tap 1 | 0x0004 |
| 1X-1Y2, tap 2 | 0x1004 |
| 1X-2YE, tap 1 | 0x0041 |
| 1X-2YE, tap 2 | 0x1041 |
![]() |
翻轉影像下半部並非此 Operator 的職責 |
|---|---|
|
在 1X-2YE 輸出端(tap)格式的情況下,翻轉影像下半部並非此 CxpCameraMultiTap Operator 的職責。使用者應用程式需要使用額外的 VisualApplets operator 重新格式化輸出端(tap)(1)。 |
在 VisualApplets 中進行實例化
此 operator在其輸出端(tap)上提供影像資料。此輸出始終存在。單輸出端(single tap)為 1,雙輸出端(dual-tap)相機則需要設定為 2。除了這些標準輸出連接埠之外,您還可以針對每個輸出端(tap)專門設定一個選用的 MetaData 輸出,用於 CXP 標頭(header)中繼資料,也就是說,對於雙輸出端(dual-tap)應用,您可以定義最多 2 個 MetaDataTap 連接埠。在 operator 實例化期間會出現以下彈出對話方塊,並且可以設定為下列排列組合:

圖 423。在此設定中,operator 將兩個相機輸出端(taps)作為 2 個獨立的串流在其 Tap0 與 Tap1 連接埠上提供。operator 同時也提供 Tap0 連接埠的中繼資訊。這對於對稱相機輸出端(tap)設定可能很有意義,其中 CXP 標頭(header)除了 TapG Code 欄位之外,對兩個輸出端(taps)而言在大多數部分都是相同的。
選用的 MetaDataTap 連接埠
兩個中繼資料連接埠的格式完全相同。 它在 VisualApplets 中以 32 位元輸出提供,如以下圖片所示:

每個 CXP 個別畫面(frame)都提供對應的無錯誤影像標頭(header)。若影像標頭(header)不正確,則不會將任何影像串流資料載入 VisualApplets 管線(pipeline)中。壓縮的影像標頭(header)由 6 個 word 組成。最後一個位元組用於附加資訊,僅供內部使用。特別的是,HeaderError 位元用於通知影像標頭(header)本身是否有錯誤。
| 影像標頭(Image Header) | 描述 |
|---|---|
| StreamId | CXP 串流的 ID |
| Tag | 16 位元來源影像索引。每傳輸一個影像就會遞增,在 0xFFFF 時會環繞歸零 (wraps around to 0)。包含與相同影像相關資料的每個串流(在多輸出端(multi-tap)串流的情況下)都應使用相同的數字。 |
| XSize | 代表影像寬度(以像素為單位)的 24 位元值。 |
| XOff | 代表影像相對於完整裝置影像最左側像素之水平偏移量(以像素為單位)的 24 位元值。 |
| YSize | 代表影像高度(以像素為單位)的 24 位元值。對於線掃描影像,此值會設為 0。CameraScanMode 參數一律會顯示從此值讀取的相機類型。如果 Tap0/Tap1 Img Protocol 設為 VALT_LINE1D,則處理時會忽略 YSize,且運算子會將所有輸入資料輸出為無止盡的資料行串流。如果影像協定設為 VALT_IMAGE2D,YSize=0 也會導致無止盡的資料行串流。 |
| YOff | 代表影像相對於完整裝置影像最頂端資料行之垂直偏移量(以像素為單位)的 24 位元值。對於線掃描影像,此值會設為 0。 |
| DSizeL | 代表每行影像之資料字組數的 24 位元值。 |
| PixelF | 代表 Pixel Format 的 16 位元值。 |
| TapG | 代表抽頭幾何形狀的 16 位元值。 |
| Flags | 影像旗標。 |
| x-Mirror | (尚未使用)。描述輸入影像是否經過 x 鏡射。 |
| y-Mirror | (尚未使用)。描述輸入影像是否經過 y 鏡射。 |
| HeaderError |
1:影像標頭發生錯誤,且該張畫面宣告遺失。運算子輸出資料串流中不存在對應的影像資料。 0:影像標頭正確,且運算子輸出資料串流中存在對應的影像資料。 |
![]() |
影像協定:面陣與線掃描相機 |
|---|---|
|
影像協定對相機運算子輸出有兩種不同的影響:
CameraScanMode 參數一律顯示從 CXP 標頭讀取的相機類型。如果 Tap0/Tap1 Img Protocol 設定為 VALT_LINE1D,則在處理時會忽略 YSize,且運算子會將所有送達的資料輸出為無盡的資料行串流。如果影像協定設定為 VALT_IMAGE2D,YSize=0 也會導致無盡的資料行串流,進而產生超出 Tap0/Tap1 Max Img Height 的影像。尺寸過大的影像可能會在設計中接續於 CxpCamera 運算子之後的運算子中造成未定義的行為。為避免發生此情況,建議將送達的資料行串流分割為多個影像,例如使用 SplitImage 運算子。 |
![]() |
修改影像寬度與影像高度 |
|---|---|
|
透過輸出連線的最大影像寬度與高度 Property,您可以將寬度和高度調整為相機特定的設定。不過,連接埠 Tap0/Tap1 上的最大影像寬度 必須能被其連接埠的 parallelism 整除。因此,請確保最大影像寬度能被連接埠 Tap0 和 Tap1 的 parallelism 整除! |
裝置資源使用量
根據參數 ConnectionCount 的選擇,運算子會使用一個或多個類型為 CameraPort 的資源。對於事件 system,會使用類型為 EventPort 的資源。如果 ConnectionCount 設定為 X4(四通道),將會開啟下列資源對話方塊:

錯誤處理與事件系統
當運算子偵測到接收到的重建影格大於或小於相機在 CXP 影像標頭中所宣告的大小時計,安全機制便會啟動。隨後,運算子會截斷超出範圍的像素與資料行,使後續的處理管線一律能看到影像標頭中所定義的影格大小。如果接收到的影格尺寸小於影像標頭中所指定的尺寸,運算子將會以未定義的資料填滿接收到的影格,以達到影像標頭中所定義的指定影格尺寸。填滿較小的影格可能會導致後續的影格遺失。隨後,系統會透過事件將此遺失情況回報給執行階段軟體(Framegrabber SDK)(請參閱下列段落)。尺寸不符也會觸發事件。
For a set of very critical errors, the operator will forward asynchronous events to the host runtime software (Framegrabber SDK). The event name in the Framegrabber API is <hierarchical operator name>\CxpStreamStatus, e.g. Device1\Process0\Camera\CxpStreamStatus. The event payload is provided as four 16-bit data words. The event format is defined as follows:

-
word [0]:
-
bits [0:15]:發生事件所在的 CXP 影像標籤。
-
-
word [1]:
-
bits [8:15]:發生事件所在的串流 ID。
-
bits [0:7]:保留,視為不關心 (don't care)。
-
-
word [2]:
-
bit [0]:發生 CRC 錯誤。
-
bit [1]:在影像標頭中偵測到串流標記錯誤。
-
bit [2]:偵測到影像標頭中有無法修正的錯誤。
-
bit [3]:偵測到影格尺寸錯誤,亦即 CXP 影像標頭中定義的影像大小與從傳輸封包重建的影格大小不符。當相機在影像標頭中放入一項資訊,但傳輸的資料量卻與標頭中宣告的不同時,就會發生此情況。
-
bits [4:15]:保留,視為不關心 (don't care)。
-
-
word [3]:
-
bit [0]:事件類型,0 = Corrupted Entity,1 = Lost Entity。
-
Corrupted Entity 表示錯誤發生於影格內部,且該影格已經載入至 VisualApplets 管線中。
-
Lost Entity 表示錯誤發生在影格轉發至後續運算子之前,且該影格已被相機運算子捨棄。
-
當觀察到受損實體 (Corrupted Entity) 時,運算子將會根據 CXP 影像標頭定義來填滿影格,以便後續的運算子不會造成未定義的行為。在此填滿期間,可能會到達新影格,進而導致該影格遺失。當相機根據影格標籤傳送帶有間隙的資料時,也會引發遺失實體 (Lost Entity) 事件。
-
-
bit [1]:發生類型為 Corrupted Entity 的事件遺失。這表示先前類型為 Corrupted Entity 的事件已經遺失。當執行階段軟體未對事件做出反應且內部事件佇列已滿時,就會發生此情況。
-
bit [2]:發生類型為 Lost Entity 的事件遺失。這表示先前類型為 Lost Entity 的事件已遺失。當執行階段軟體未對事件做出反應且內部事件佇列已滿時,就會發生這種情況。
-
bits [3:15]:遺失的 Lost Entity 事件數量。
-
事件分為兩種類型:損壞實體的事件與遺失實體的事件。字 3 的 bit 0 描述發生了哪種事件。如果事件緩衝區已滿,可能會發生事件遺失的情況。當標記損壞實體的事件遺失時,將會設定字 3 的 bit 1。當標記遺失實體的事件遺失時,將會設定字 3 的 bit 2,並且 bit 3 至 15 將提供指示遺失影格的遺失事件數量。如果設定了 bit 2 但 Counter 為 0,則表示發生了 Counter 溢位。
每個事件都會觸發軟體中斷。為了減少事件數量,可能會將具有相同影格標記的多個事件合併在一起。在這種情況下,某些錯誤旗標會被組合。如果事件遺失,遺失事件之前的事件將包含有關遺失事件的資訊,且無法與具有相同影格標記的其他事件進行合併。
由於 CRC 錯誤而引起的事件會回報一個影格標記,該標記可能與發生 CRC 錯誤的影格不完全相關。影格標記可能是前一個影格或後續影格的標記。這種情況僅在相機傳送包含 2 個或多個影格之間過渡的 CXP 封包時才會發生。CRC 計算在封包結束時完成,但串流資料是即時重建的。這意味著可能會發生以下情況:在運算子已經傳送前一個影格之後,才偵測到 CRC 錯誤。在正常情況下,如果相機封包不包含進行中影格結尾與下一個影格開頭的資料,則 CRC 錯誤期間的影格標記將始終正確。對於所有其他情況,只要完整的影格串流資料小於 8k 的最大封包大小,在 1 個封包內可能只有 1 個影格重疊。在這種情況下,軟體應用程式應將帶有影格標記 - 1 的前一個影格以及帶有影格標記 + 1 的後續影格也視為可能損壞。
![]() |
區分不同 Tap 的錯誤事件 |
|---|---|
|
錯誤處理與事件系統對兩個 CXP tap 串流都是共用的。使用 stream-ID 欄位將接收到的事件與適當的 tap 進行關聯。通常,Tap 0 會獲得較低的 stream-ID(通常為 0)。Tap 1 將獲得大於 Tap 0 的 stream-ID。 |
| Property | Value |
|---|---|
| Operator Type | M |
| 輸出連結 | Tap0/Tap1,影像資料輸出 MetaDataTap0/MetaDataTap1,選用的後設資料輸出 |
| ConnectionCount | ||||
|---|---|---|---|---|
| Type | Static Write parameter | |||
| Default | X1 | |||
| Range | {X1, X2, X4} | |||
|
參數 ConnectionCount 定義聚合至 CXP 連結的 CXP 通道數。所使用連接埠的索引由 CameraPort 類型的資源處理。連接埠資源的數量與連線數相符(例如 X2:兩個 CameraPort 資源項目)。 當您實體化一個以上的 CxpCamera 運算子(例如用於雙相機 Applet)時,如果使用了多個具有相同索引的資源,或者消耗的 CameraPort 資源數量超過最大值 4,可能會發生資源衝突。在這種情況下,設計規則檢查會回報錯誤。
|
||||
| ResetStatus | ||||
|---|---|---|---|---|
| Type | 動態寫入參數 | |||
| Default | 關閉 | |||
| Range | {Off, On} | |||
|
參數 ResetStatus 會重設相機統計資料,也就是錯誤 Counter。
|
||||
| UsedConnections | ||||
|---|---|---|---|---|
| Type | 動態讀取參數 | |||
| Default | ||||
| Range | {1,2,4} | |||
|
參數 UsedConnections 顯示了由識別軟體在執行階段所配置的 CXP 通道數量。
|
||||
| PacketTagErrorCount | ||||
|---|---|---|---|---|
| Type | 動態讀取參數 | |||
| Default | ||||
| Range | [0 : 8191] | |||
|
參數 PacketTagErrorCount 顯示有多少接收到的封籤不符合 CXP 標準所預期的標籤。具體來說,當後續資料流封包標籤列舉中出現間隙(gap)時,此值會向上計數。該參數為 13 位元寬,其中位元 [11:0] 代表實際的 Counter 值,而位元 [12] 代表 Counter 溢位(overflow)。當設定溢位位元時,該 Counter 值應視為無關緊要(don't care)。
|
||||
| ImageTagErrorCount | ||||
|---|---|---|---|---|
| Type | 動態讀取參數 | |||
| Default | ||||
| Range | [0 : 8191] | |||
|
該參數用於計算影像標頭標籤、根據 CXP 標準預期的標籤以及接收到的標籤之間發生了多少次不匹配。該參數為 13 位元寬,其中位元 [11:0] 代表實際的 Counter 值,而位元 [12] 代表 Counter 溢位。當設定溢位位元時,該 Counter 值應視為無關緊要。
|
||||
| StreamIdErrorCount | ||||
|---|---|---|---|---|
| Type | 動態讀取參數 | |||
| Default | ||||
| Range | [0 : 8191] | |||
|
該參數用於計算封包中的接收串流 ID 值與影像標頭中指定的串流 ID 值不匹配的頻率。該參數為 13 位元寬,其中位元 [11:0] 代表實際的 Counter 值,而位元 [12] 代表 Counter 溢位。當設定溢位位元時,該 Counter 值應視為無關緊要。
|
||||
| CorrectedErrorCount | |
|---|---|
| Type | 動態讀取參數 |
| Default | |
| Range | [0 : 8191] |
|
該參數用於計算影像標頭或行標記中已檢測並修正的錯誤數量。該參數為 13 位元寬,其中位元 [11:0] 代表實際的 Counter 值,而位元 [12] 代表 Counter 溢位。當設定溢位位元時,該 Counter 值應視為無關緊要。 |
|
| UncorrectedErrorCount | ||||
|---|---|---|---|---|
| Type | 動態讀取參數 | |||
| Default | ||||
| Range | [0 : 8191] | |||
|
該參數用於計算影像標頭或行標記中因同一位元組內有多個位元錯誤而無法修正的已檢測錯誤數量。該參數為 13 位元寬,其中位元 [11:0] 代表實際的 Counter 值,而位元 [12] 代表 Counter 溢位。當設定溢位位元時,該 Counter 值應視為無關緊要。
|
||||
| PacketBufferOverflowCount | ||||
|---|---|---|---|---|
| Type | 動態讀取參數 | |||
| Default | ||||
| Range | [0 : 8191] | |||
|
該參數用於計算在聚合模式下的通道繫結中封包緩衝區溢位發生的頻率。此參數僅適用於 ConnectionCount = X2 或 X4。該參數為 13 位元寬,其中位元 [11:0] 代表實際的 Counter 值,而位元 [12] 代表 Counter 溢位。當設定溢位位元時,該 Counter 值應視為無關緊要。
|
||||
| PacketBufferOverflowSource | ||||
|---|---|---|---|---|
| Type | 動態讀取參數 | |||
| Default | ||||
| Range | [0x0 : 0xf] | |||
|
該參數實作了一個位元遮罩,用於查詢封包緩衝區溢位發生在 4 個潛在 CXP 通道中的哪一個。參數寬度取決於 ConnectionCount 參數。在 X1 模式下,參數寬度為 1 位元;在 X2 模式下,參數寬度為 2 位元;在 X4 模式下,參數寬度為 4 位元。順序為:LSB = 最低 CXP 通道編號,MSB = 由操作員配置的最高 CXP 通道編號。
|
||||
| CameraScanMode | |
|---|---|
| Type | 動態讀取參數 |
| Default | |
| Range | {area,line} |
|
接收到的影像標頭包含相關資訊,可用以判斷資料串流是適用於面陣掃描 (YSize > 0) 還是線陣掃描 (YSize = 0) 應用程式。此參數顯示最後一個有效接收到的串流影像標頭資訊。 讀取此參數時僅針對 Tap0 串流,並假設 Tap1 串流處於完全相同的模式。這表示此參數適用於整個相機的面陣掃描或線陣掃描,因此兩個 Tap 的參數完全相同,並非具體針對某個 Tap。 |
|
| MarkerErrorCount | ||||
|---|---|---|---|---|
| Type | 動態讀取參數 | |||
| Default | ||||
| Range | [0 : 8191] | |||
|
此參數用於計算 CXP 串流標記與標頭或線標記之間的順序錯誤發生頻率。此參數為 13 位元寬,其中位元 [11:0] 代表實際的 Counter 值,而位元 [12] 代表 Counter 溢位。當設定溢位位元時,應將 Counter 值視為不影響 (don't care)。
|
||||
| UnexpectedStartupData | ||||
|---|---|---|---|---|
| Type | 動態讀取參數 | |||
| Default | ||||
| Range | {false, true} | |||
|
此參數用於偵測錯誤情況,即運算子重設後的第一個資料值非預期值(亦即先前未收到影像標頭)。這種情況可能是由於相機、擷取卡韌體實作有誤,或探索程序的軟體控制錯誤所造成。此外,相機硬體缺陷理論上也可能導致此情況。
|
||||
| FrameLostCount | ||||
|---|---|---|---|---|
| Type | 動態讀取參數 | |||
| Default | ||||
| Range | [0 : 33554431] | |||
|
此參數用於計算在擷取過程中遺失且未傳送至 VisualApplets 管線的影格。當偵測到影像標頭發生錯誤或某個影格與另一個影格重疊時,就會遺失影格。此參數為 25 位元寬,其中位元 [23:0] 代表實際的 Counter 值,而位元 [24] 代表 Counter 溢位。當設定溢位位元時,應將 Counter 值視為不影響 (don't care)。
|
||||
| FrameCorruptedCount | ||||
|---|---|---|---|---|
| Type | 動態讀取參數 | |||
| Default | ||||
| Range | [0 : 33554431] | |||
|
此參數用於計算擷取過程中損毀的影格。損毀的影格是指包含錯誤像素並傳送至 VisualApplets 管線的影格。此參數為 25 位元寬,其中位元 [23:0] 代表實際的 Counter 值,而位元 [24] 代表 Counter 溢位。當設定溢位位元時,應將 Counter 值視為不影響 (don't care)。
|
||||
以下範例展示了 CxpCameraMultiTap 運算子的使用方式:

![[備註]](../common/images/admon/note.png)





![[重要]](../common/images/admon/important.png)

上一頁

