參數化#
關鍵詞
Link 是兩個 module 之間的連接。Link properties 描述該連接上的資料格式,例如每個像素的位元數或最大影像尺寸。您只能在設計階段於 VisualApplets 中設定它們。Module parameters 是 module 上的設定,例如閾值或相機格式。如果您輸入的值無法生效,通常是因為 link properties 限制了 module 所能接受的範圍。
靜態參數 僅能在 PC 上的「VisualApplets 」中進行變更(設計階段)。動態參數則可在執行階段進行變更,此時主機軟體會與幀擷取卡上的小程式進行通訊。您在「VisualApplets 」中為動態參數設定的值,將作為執行階段的預設值。在「VisualApplets 」中進行的模擬並非執行階段操作。
連結屬性與模組參數#
VisualApplets 使用兩種設定:
鏈結屬性設定於鏈結上,並定義例如影像的最大寬度與高度、位元寬度、並行度、影像協定、色彩格式及核心大小等。鏈結屬性會對連接至該鏈結的運算子施加限制。若模組參數與鏈結屬性發生衝突,VisualApplets 會直接調整該值,或回報錯誤。 鏈路屬性始終是靜態的:您只能在設計階段透過「VisualApplets 」進行變更。鏈路屬性會沿著處理管線傳遞,並影響所有下游運算子,直到有運算子變更這些屬性為止。
模組參數用以定義操作員的行為,例如運作模式、影像位置或感興趣區域的大小。這些參數可分為靜態與動態兩類。靜態參數僅能在設計階段進行變更;動態參數則可於執行階段透過主機軟體進行調整。 靜態參數通常比動態參數佔用較少的 FPGA 資源。當您需要在應用程式執行期間切換攝影機格式或處理設定時,動態參數便派上用場。模組參數通常受連結屬性的限制。若您無法設定某個值,且VisualApplets 會自動修正該值,請檢查相關連結的屬性設定。許多運算子也會在其輸出端定義連結屬性,因此設計中任一側的變更都可能傳遞到另一側。
Link Properties 與 Module Parameters CxpCamera 運算子:

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

Link properties 會透過 module 進行傳遞,直到運算子變更它們為止。如果下游 link 不允許編輯某個 property,則應在上游運算子或能夠變更該 property 的中間運算子處進行設定。例如, ImageBuffer 運算子不會更改鏈結 Bit Width。您必須在相機輸出鏈結上設定 Bit Width,或插入諸如 ConvertPixelFormat 或 ShiftLeft 等更改 Bit Width 的運算子。
連結 Property 變更也可能會與模組參數產生衝突。在這種情況下,VisualApplets 會將該模組和受影響的參數標記為 紅色:

執行 設計規則檢查層級 1 並讀取 DRC 日誌以尋找錯誤。常見原因包括超出以下範圍的 Region of Interest: MaxImageWidth 或 MaxImageHeight,或超出鏈結 Bit Width 允許範圍的參數值:

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

編輯參數後,請在 Module Properties 對話方塊中按一下 Apply。如果新值不在允許的範圍內,VisualApplets 將會捨棄該值。某些參數會被停用而無法編輯。參數是否啟用取決於其他參數設定,或是輸入/輸出 link 格式。如需特定運算子之 module parameters 的詳細資訊,請查看您所使用運算子的 Operator Reference。
如需在範例設計中設定連結與模組參數的操作導覽,請參閱使用者手冊中的 Hardware Applet: From Idea to Application。
尺寸參數#
許多運算子(例如 LineBuffer, FrameBufferMultiRoi的狀態,以及 SelectROI)透過參數定義興趣區 (ROI) XLength, YLength, XOffset的狀態,以及 YOffset。Region of Interest 必須符合所連接連結上的最大影像尺寸。如果 XLength + XOffset 超過 MaxImageWidth或 YLength + YOffset 超過 MaxImageHeight,DRC 會回報錯誤,並且參數會被標記為紅色。
在以下螢幕截圖中, SelectROI 運算子透過 XLength 和 YLength 參數來定義 Region of Interest:

無限來源與 InfiniteSource 參數#
諸如相機模組等運算子無法透過流量控制來停止。它們表現為 infinite source,且只能連接至接受 infinite source 的 M 型運算子,或將 infinite source Property 向下傳播的 O 型和 P 型運算子。
緩衝區運算子會將無限串流轉換為可控制、可停止的串流。當緩衝區從不可停止的來源接收資料時,請設定其 InfiniteSource 參數設為 ENABLED。當輸入已經是可停止的串流時,請設定 InfiniteSource 設定為 DISABLED.
設計規則檢查與 InfiniteSource 設為 DISABLED 在 Infinite Source 之後:

設計規則檢查與 InfiniteSource 設為 ENABLED 在 Infinite Source 之後:

如需關於無限來源的更多詳細資訊,請參閱 Stoppable and Non-Stoppable Data Streams 教學主題。
溢出運算子#
影像 Overflow 中的 operator 同步化 library 會在非停止來源持續傳送影像資料而下游處理遭到封鎖時,處理溢位狀況。它本身不會緩衝資料。Basler 建議您將其與 buffer operator 搭配使用。此 operator 與 arithmetic 溢位 (請參閱 位元 Arithmetic 教學主題) 或 Overflow status parameter 位於 buffer operators 上 (請參閱 Memory 元素 教學主題)。
當您放置 Overflow 於無限來源與記憶體 operator (例如 LineBuffer中,請設定 InfiniteSource 在記憶體 operator 上 DISABLED。Vignetting Correction Overflow operator 已經處理來自非停止串流的溢位。在此拓撲中對記憶體模組啟用 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 log 以及反白顯示的模組與連結。如需完整的工作流程,請參閱 From Empty Design to Running Applet 教學主題。

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

類似的相依性也會出現在其他運算子中。在 SelectBitField上, BitOffset 參數的有效範圍取決於輸入與輸出連接 Bit Width。對於灰階影像, BitOffset 必須在 0 到輸入 BitWidth 減去輸出 BitWidth:

在 ModuloCount 運算子中, Divisor 參數受到輸出連接 Bit Width 的限制,值介於 1 到 2^n 之間(其中 n 為輸出 Bit Width:

諸如 XLength 和 YLength 等興趣區域 (ROI) 參數必須符合 MaxImageWidth 和 MaxImageHeight 所連接連接上的規範。衝突亦可能涉及 Parallelism、Color Format 與影像協定。例如, XLength 必須始終是 Parallelism 的倍數,這在 Module Properties 對話方塊中顯示為 Step Size:

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