參數化#
關鍵詞
Link 是兩個 modules 之間的連接。Link properties 描述該連接上的資料格式,例如每個像素的位元數或最大影像尺寸。您只能在設計階段的 VisualApplets 中設定它們。Module parameters 是 operator 本身的設定,例如閾值或相機格式。如果您輸入的值無法套用,通常是因為 link properties 限制了 module 所能接受的範圍。
靜態 (Static) 參數僅能在 PC 上的 VisualApplets 中變更(設計階段)。動態 (Dynamic) 參數也可以在執行階段 (runtime)(當主機軟體與擷取卡上的 applet 通訊時)進行變更。您在 VisualApplets 中為動態參數設定的值即為執行階段的預設值。VisualApplets 中的模擬並非執行階段。
Link Properties 與 Module Parameters#
VisualApplets 使用兩種設定:
Link properties 是在 links 上設定,並定義例如最大影像寬度和高度、Bit Width、Parallelism、影像協定、Color Format 和核心大小。Link properties 會約束連接至該 link 的 operators。如果 module parameter 與 link properties 發生衝突,VisualApplets 會直接調整該值或回報錯誤。Link properties 永遠是靜態的:您只能在設計階段的 VisualApplets 中變更它們。Link properties 會在管線中傳遞,並影響所有下游 operators,直到某個 operator 改變它們為止。
Module parameters 定義 operator 行為,例如操作模式、影像位置或興趣區域的尺寸。它們可以是靜態或動態的。您僅在設計階段變更靜態參數。動態參數也可以在執行階段從主機軟體進行變更。相較於動態參數,靜態參數通常使用較少的 FPGA 資源。當您需要在 applet 執行時切換相機格式或處理設定時,動態參數非常有用。Module parameters 通常受到 link properties 的限制。如果您無法設定某個值且 VisualApplets 自動修正了它,請檢查所連接 links 上的 link properties。許多 operators 也會在其輸出端定義 link properties,因此設計一側的變更可以傳遞到另一側。
的 Module Properties 與 Link Properties CxpCamera Operator:

關於 links 背後的正式規則,請參閱使用者手冊中的 Rules of Links。關於 VisualApplets GUI 中的編輯工作流程,請參閱使用者手冊中的 Parameterization。
Link Properties#
modules 之間的每個 link 都是由其 link properties 所定義。所有 links 都具有相同的屬性集。Link properties 永遠是靜態的:您只能在設計階段的 VisualApplets 中變更它們。您可以透過按兩下 link,或以滑鼠右鍵按一下 link 並選取 Properties 來開啟 link properties。
以下 link properties 定義了影像資料在連接上的傳輸方式:
-
BitWidth: 鏈路上每個像素的位元數。對於彩色鏈路,位元寬度涵蓋所有色彩成分的總和。攝影師通常會設定初始位元寬度。對於具有ImageProtocol=VALT_SIGNAL,Bit Width 始終為 1 bit。- 某些運算子允許您直接在連結上設定輸出
BitWidth,例如CastBitWidth,CONST,或ModuloCount。其他運算子則從輸入連結屬性或模組參數BitWidth自動推導輸出。例如,ShiftLeft將參數Shift的值加到輸入 Bit Width,而MULT則使用輸入 Bit Width 的總和。諸如Coordinate_X進行明確的生命週期管理即呼叫Coordinate_Y等運算子會計算輸出BitWidthfromMaxImageWidth進行明確的生命週期管理即呼叫MaxImageHeight。對於具有自動輸出的運算子BitWidth, Operator 參考手冊 會在 auto 表格中顯示 Supported Link Format ,且您通常無法在連結上編輯該值。當運算子更改輸出BitWidth時,VisualApplets 會將新值傳播到下游連結,直到另一個運算子再次更改它為止。
- 某些運算子允許您直接在連結上設定輸出
-
Arithmetic:定義用於連結的 Arithmetic。Arithmetic 可以是Signed或Unsigned.- 如果設定為
Signed,則使用二補數 Arithmetic。符號位元包含在設定的 Bit Width 中。 - 對於影像協定
VALT_SIGNAL,無論設定的 Bit Width 為何,Arithmetic 始終為Unsigned。
- 如果設定為
-
Parallelism:在一個 Base Design Clock 週期內,兩個模組之間並行傳輸的像素數量。如需詳細資訊,請參閱 Parallelism 教學主題。 -
KernelColumns進行明確的生命週期管理即呼叫KernelRows:濾波運算子每個時脈週期所需的相鄰像素數量。對於影像協定VALT_SIGNAL,兩個值始終為 1。如需詳細資訊,請參閱 使用 Kernel 教學主題。 -
ImageProtocol:定義連結上資料流的結構。提供以下影像協定:VALT_IMAGE2D: 二維影像,帶有行結尾與影格結尾標記,例如來自面陣相機的影像。VALT_LINE1D: 一維線條資料,例如來自線陣相機的資料。VALT_PIXEL0D: 不含影像尺寸資訊的連續像素串流。VALT_SIGNAL: 在每個時脈週期都有效的單位元訊號,例如在觸發邏輯中。
影像協定可以在設計內部變更。例如,
SplitImage可以將 1D 影像串流切割成指定高度的 2D 影像。如需詳細資訊,請參閱 影像協定、影像尺寸與資料結構 使用者手冊中的 -
ColorFormat進行明確的生命週期管理即呼叫ColorFlavor: 這些屬性描述了像素資料的表示方式,例如灰階或 RGB。部分運算子僅支援特定的 Color Format。在某些平台上,CoaXPress 相機運算子僅接受灰階格式。若要產生彩色輸出,請使用諸如MergeComponents等運算子。諸如MergeComponents,ParallelUp以及CastBitWidth等運算子可以變更與顏色相關的連線屬性。 -
MaxImageWidth進行明確的生命週期管理即呼叫MaxImageHeight: 連線所能承載的最大影像尺寸。連線上的影像不得超過這些數值,但可以較小。這些屬性適用於緩衝行或完整影像的運算子,例如ImageFifo,LineBuffer,或ColMax。請將其設定為至少與處理路徑中的最大影像一樣大。數值如果太小,會導致設計規則檢查 (DRC) 錯誤。較大的數值會消耗更多 FPGA 資源。相機運算子或諸如SetDimension等運算子通常會設定這些屬性。MaxImageHeight沒有作用,當ImageProtocol設為VALT_LINE1D,VALT_PIXEL0D,或VALT_SIGNAL.
資訊
您選擇的最大影像尺寸與 Parallelism 越高,設計所消耗的 FPGA 資源就越多。Basler 建議您僅將這些數值設定為應用程式所需的程度。
每個運算子都會定義其允許的輸出連線屬性以及哪些數值是固定的。連線上的某些屬性已停用,因為上游運算子不允許編輯它們。Operator Reference 記錄了每個運算子允許的連線格式。
Link Properties 的傳遞#
連線屬性由運算子定義。您可以直接在運算子的輸出連線上變更某些屬性。其他屬性則是固定的,或是衍生自模組參數或輸入連線屬性。當您變更連線屬性時,VisualApplets 會將該變更傳播到後續的模組和連線。
變更數值後,請按一下屬性對話方塊中的 Apply。如果變更被接受,設計窗格中的受影響連線會變成綠色。綠色表示 VisualApplets 已傳播並驗證了更新的連線屬性。這並非整個設計的「全部有效」交通號誌標記。

連線屬性會在模組中傳播,直到運算子變更它為止。如果下游連線不允許編輯屬性,則上游運算子或能夠變更該屬性的中繼運算子就是設定它的地方。例如, ImageBuffer 運算子不會變更 Bit Width。您必須在相機輸出連線上設定 Bit Width,或插入諸如 ConvertPixelFormat 或 ShiftLeft 等會變更 Bit Width 的運算子。
連線屬性變更也可能會與模組參數發生衝突。在這種情況下,VisualApplets 會將模組和受影響的參數標記為紅色:

執行 Design Rules Check Level 1 並閱讀 DRC 記錄檔以找出錯誤。常見的原因包括超出以下範圍的興趣區域 (ROI): MaxImageWidth 或 MaxImageHeight,或是參數值超出連結 Bit Width 所允許的範圍:

Module Parameters#
每個運算子 (Operator) 的模組參數 (Module parameters) 各不相同。它們能控制運算子處理資料的方式。模組參數可以是靜態的或動態的。您只能在設計階段於 VisualApplets 中設定靜態參數。動態參數也可以在執行階段透過主機軟體的 microDisplay X、Framegrabber SDK 或 pylon 進行變更。在 Module Properties 對話方塊中,Parameter Type 欄位會顯示參數是靜態的還是動態的:

編輯參數後,請按一下 Module Properties 對話方塊中的 Apply。如果新值不在允許的範圍內,VisualApplets 將會捨棄該值。某些參數會被停用而無法編輯。參數是否啟用取決於其他參數設定,或是輸入或輸出連結格式。如需特定運算子模組屬性的詳細資訊,請查看您所使用運算子的Operator Reference。
如需在範例設計中設定連結與模組參數的操作導引,請參閱使用者手冊中的Hardware Applet: From Idea to Application。
尺寸參數#
許多運算子(例如 LineBuffer, FrameBufferMultiRoi以及 SelectROI)會透過參數定義興趣區域 (ROI) XLength, YLength, XOffset以及 YOffset。興趣區域必須符合連接連結上的最大影像尺寸。如果 XLength + XOffset 超過 MaxImageWidth,或 YLength + YOffset 超過 MaxImageHeight,DRC 會回報錯誤,且參數會標示為紅色。
在以下螢幕擷取畫面中, SelectROI 運算子透過 XLength 進行明確的生命週期管理即呼叫 YLength 參數定義 ROI:

Infinite Sources 與 InfiniteSource 參數#
諸如相機模組等運算子無法透過流程控制來停止。它們的行為類似 infinite sources,且只能連接至接受無限來源的 M 型運算子,或是將無限來源屬性向下傳遞的 O 型與 P 型運算子。
緩衝區運算子會將無限資料流轉換為可控制、可停止的資料流。當緩衝區接收來自不可停止來源的資料時,請設定其 InfiniteSource 參數設為 ENABLED。當輸入已經是可停止的資料流時,請設定 InfiniteSource 設為 DISABLED.
執行 Design Rules Check 搭配 InfiniteSource 設為 DISABLED 《追尋無盡之源》之後:

執行 Design Rules Check 搭配 InfiniteSource 設為 ENABLED 《追尋無盡之源》之後:

有關無限資料源的更多詳細資訊,請參閱「可中斷與不可中斷資料流」教學主題。
Overflow operator#
當 Overflow 運算子位於 同步 當非可停止的資料源持續傳送影像資料,而下游處理程序卻處於封鎖狀態時,library 會處理溢位情況。它本身不會緩衝資料。Basler 建議您將其與緩衝區運算子搭配使用。此運算子與 Arithmetic 溢位 (請參閱 位元 Arithmetic 教學課程主題)或 Overflow 狀態參數 緩衝區運算子上的(請參閱 Memory 元素 教學課程主題)。
當您放置 Overflow 在無限資料源與記憶體運算子(例如 LineBuffer)之間時,請設定 InfiniteSource 記憶體運算子上的 DISABLED中。 Overflow 運算子已經處理來自非可停止串流的溢位。在此拓撲中啟用 InfiniteSource 記憶體模組是不正確的,並會觸發 DRC 錯誤。

使用 DRC 驗證您的設計#
在變更會影響影像大小、Bit Width 或興趣區的連結屬性或模組參數後,請執行 Analysis → Design Rules Check Level 1。Level 1 會回報 DRC 記錄檔中的形式錯誤,並反白顯示受影響的模組與連結。
Design Rules Check Level 2 執行擴充檢查並估算 FPGA 資源。在建置之前,請修正所有 Level 1 錯誤。Level 2 也會檢查無限資料源連線與 InfiniteSource 設定。
請閱讀 DRC 記錄檔以及反白顯示的模組與連結。如需完整的工作流程,請參閱 從空白設計到執行中的 Applet 教學課程主題。

疑難排解 Link 與參數衝突#
模組參數與連結屬性並非獨立的設定。它們直接相互依賴,並互相限制允許的值範圍。輸入與輸出連線上的連結屬性定義了運算子必須處理的資料格式。模組參數定義了運算子如何在該格式內處理資料。當您變更連結屬性時,VisualApplets 會將該變更傳播到後續的模組與連結。如果模組參數不再符合更新後的連結屬性,VisualApplets 會以紅色標示該模組或參數。反之亦然:模組參數可以定義或變更輸出連結屬性,因此先前有效的數值在連結變更後可能會變成不合法。因此,參數是啟用、停用還是受限於特定範圍,取決於連結屬性、其他模組參數或兩者。對於每個運算子,Operator Reference 皆記錄了這些相依性。關於傳播行為以及連結變更的三種可能結果,請參閱使用者手冊中的 運算子參數與連結屬性的傳播與相依性。
當連結變更後參數數值無法生效或模組變成紅色時,請依下列順序解決衝突:檢查模組參數之前的連結屬性。連結屬性定義了模組參數允許的值範圍。模組參數必須符合該範圍。許多運算子也會定義或變更輸出連結屬性,因此設計一側的變更可能會影響另一側。請閱讀 DRC 記錄檔、按一下錯誤訊息以反白顯示受影響的模組或連結,並參閱 Operator Reference 以取得允許的連結格式與參數相依性。連結上或 Module Properties 對話方塊中的紅色反白顯示表示形式錯誤,您必須在模擬或建置之前修正此錯誤。
典型的衝突發生在您嘗試設定 Value 參數的 CONST 運算子(例如設為 500),但 VisualApplets 自動校正了該輸入。向外傳送的連結具有 Bit Width 為 8 bits,這只允許 0 到 255 之間的數值。若要解決此衝突,請增加 link Bit Width 在輸出 link 上,然後再次設定 module 參數:

在其他運算子上也會出現類似的依賴關係。在 SelectBitField上,有效範圍 BitOffset 參數取決於輸入和輸出 link Bit Widths。對於灰階影像, BitOffset 必須在 0 到 input BitWidth 減去 output BitWidth:

在 ModuloCount 運算子, Divisor 參數受到輸出 link 的限制 Bit Width 數值範圍為 1 到 2^n,其中 n 為輸出 Bit Width:

興趣區域 (Region-of-interest) 參數,例如 XLength 進行明確的生命週期管理即呼叫 YLength 必須符合 MaxImageWidth 進行明確的生命週期管理即呼叫 MaxImageHeight 在連接的 link 上。衝突亦可能涉及 Parallelism、Color Format 與影像協定。例如, XLength 必須始終為 Parallelism 的倍數,這在 Module Properties 對話方塊中顯示為 Step Size:

關鍵詞
Basler 建議在處理參數時遵循以下實務做法:
- 當您需要執行階段彈性(例如針對閾值)時,請使用動態參數。執行階段是指主機軟體與擷取卡上的 applet 進行通訊,而非 VisualApplets 中的模擬。
- 每次變更 link properties 或 module parameters 後,請檢查下游 link 上傳遞的 link properties。
- 為下游軟體規劃 bit-width 調整,例如在 DMA 之前將 12-bit 相機資料擴展為每像素 16 bits。
- 當無法設定數值時,請在變更 module parameters 之前檢查所連接 link 上的 link properties。
- 定期執行 DRC 以便及早發現連結與模組之間的衝突。
相關主題#
- Parameterization(使用者手冊)— 在 GUI 中編輯 link 屬性和 module 參數
- Example: Applet Parameterization in Basics and Examples(使用者手冊)— 參數化操作實例
- Rules of Links(使用者手冊)— 正式 link 規則
- Parallelism 教學主題 —
Parallelismlink 屬性 - 使用 Kernel 教學主題 —
KernelColumns進行明確的生命週期管理即呼叫KernelRows - 位元 Arithmetic 教學主題 —
BitWidth與 Arithmetic 溢位 - 可停止與不可停止的資料串流 教學主題 —
InfiniteSource - Operator Types and Synchronization 教學主題 — operator 類型與 link 格式
- From Empty Design to Running Applet 教學主題 — 在設計階段設定參數