跳至內容

參數化#

本主題說明您可以在「VisualApplets 」設計中設定哪些類型的參數、VisualApplets 如何區分連線屬 性與模組參數、連線屬性如何在管線中傳播,以及如何解決兩者之間的衝突。閱讀完本主題後,您將了解應在連線上設定哪些屬性、應在運算子上設定哪些參數,靜態與動態模組參數有何差異,以及如何在不違反設計規則的情況下,將設計調整為符合特定相機格式的規格。

關鍵術語

連結是兩個模組之間的連接。連結屬性描述該連接上的資料格式,例如每像素位元數或最大影像尺寸。您僅能在設計階段於「VisualApplets 」中設定這些屬性。模組參數則是運算子本身的設定,例如閾值或相機格式。若您輸入的數值無法生效,通常是因為連結屬性限制了模組可接受的範圍。

靜態參數 僅能在 PC 上的「VisualApplets 」中(設計階段)進行變更。動態參數則可在執行階段進行變更,即主機軟體與幀擷取卡上的小程式進行通訊時。您在「VisualApplets 」中為動態參數設定的值,將作為執行階段的預設值。在「VisualApplets 」中進行的模擬並非執行階段操作。

VisualApplets 使用兩種設定:

鏈結屬性設定於鏈結上,並定義例如影像的最大寬度與高度、位元寬度、並行度、影像協定、色彩格式及核心大小等。鏈結屬性會對連接至該鏈結的運算子施加限制。若模組參數與鏈結屬性發生衝突,VisualApplets 會直接調整該值,或回報錯誤。 鏈路屬性始終是靜態的:您僅能在設計階段透過「VisualApplets 」進行變更。鏈路屬性會沿著處理管線傳播,並影響所有下游運算子,直到有運算子變更這些屬性為止。

模組參數用以定義操作器的行為,例如運作模式、影像位置或感興趣區域的大小。這些參數可分為靜態與動態兩類。靜態參數僅能在設計階段進行變更;動態參數則可透過主機軟體在執行階段進行變更。 靜態參數通常比動態參數佔用較少的 FPGA 資源。當您需要在應用程式執行期間切換攝影機格式或處理設定時,動態參數便十分實用。模組參數通常受連結屬性的限制。若您無法設定某個值,而VisualApplets 會自動修正該值,請檢查已連接連結上的連結屬性。許多運算子也會在其輸出端定義連結屬性,因此設計一方的變更可能會傳遞到另一方。

的模組屬性與連結屬性 CxpCamera 操作員:

連結與運算子的屬性

有關連結的正式規則,請參閱《使用者手冊》中的「連結規則」。關於VisualApplets 圖形使用者介面(GUI)中的編輯工作流程,請參閱《使用者手冊》中的「參數化」。

模組之間的每個連結皆由其連結屬性所定義。所有連結皆具有相同的屬性集。連結屬性始終為靜態:您只能在設計階段透過「VisualApplets 」來變更這些屬性。您可以雙擊連結,或右鍵點擊連結並選擇「屬性」,來開啟連結屬性。

以下連結屬性定義了影像資料在連線中如何傳輸:

  • BitWidth: 鏈路上每個像素的位元數。對於彩色鏈路,位元寬度涵蓋所有色彩成分的總和。攝影師通常會設定初始位元寬度。對於具有 ImageProtocol = VALT_SIGNAL, 位元寬度始終為 1 位元。

    • 某些運算子允許您設定輸出 BitWidth 直接點擊連結,例如 CastBitWidth, CONST,或 ModuloCount. 其他人則推導出輸出結果 BitWidth 自動從輸入連結的屬性或模組參數中取得。例如, ShiftLeft 加上參數的值 Shift 與輸入位元寬度,以及 MULT 使用輸入位元寬度的總和。例如以下運算子: Coordinate_X 進行明確的生命週期管理即呼叫 Coordinate_Y 計算輸出結果 BitWidth from MaxImageWidth 進行明確的生命週期管理即呼叫 MaxImageHeight. 針對具備自動輸出功能的運算子 BitWidth, Operator 參考手冊 顯示 auto 在 Supported Link Format 表格,而且通常無法在連結上編輯該值。當操作員變更輸出時 BitWidth, `VisualApplets ` 會將新值傳遞至下游連結,直到另一個運算子再次更改該值為止。
  • Arithmetic: 定義連結所使用的運算方式。運算方式可以是 Signed 或 Unsigned.

    • 若設定為 Signed, 採用二進位補碼運算。符號位元包含在設定的位元寬度中。
    • 關於影像協定 VALT_SIGNAL,這個計算結果總是 Unsigned,無論設定的位元寬度為何。
  • Parallelism: 在一個基本設計時鐘週期內,兩個模組之間並行傳輸的像素數量。如需更多資訊,請參閱 Parallelism 教學主題。

  • KernelColumns 進行明確的生命週期管理即呼叫 KernelRows: 濾波運算子在每個時脈週期內所需的鄰接像素數量。針對影像通訊協定 VALT_SIGNAL, 這兩項值始終為 1。如需更多資訊,請參閱 使用 Kernel 教學主題。

  • ImageProtocol: 定義鏈路上資料流的結構。可用的影像協定如下:

    • VALT_IMAGE2D: 帶有行尾標記與幀尾標記的二維影像,例如來自面掃描相機的影像。
    • VALT_LINE1D: 一維線狀資料,例如來自線掃描相機的資料。
    • VALT_PIXEL0D: 一股不包含影像尺寸資訊的連續像素流。
    • VALT_SIGNAL: 在每個時脈週期均為有效的單位元訊號,例如在觸發邏輯中。

    在設計中,影像協定可能會有所變更。例如, SplitImage 可將一維影像串流分割為具有指定高度的二維影像。如需更多資訊,請參閱 影像協定、影像尺寸與資料結構 在《使用者手冊》中。

  • ColorFormat 進行明確的生命週期管理即呼叫 ColorFlavor: 這些屬性描述了像素資料的呈現方式,例如灰階或 RGB。某些運算子僅支援特定的色彩格式。在某些平台上,CoaXPress 攝影機運算子僅接受灰階格式。若要產生彩色輸出,請使用諸如 MergeComponents. 諸如以下這類運算子: MergeComponents, ParallelUp以及 CastBitWidth 可以變更與顏色相關的連結屬性。

  • MaxImageWidth 進行明確的生命週期管理即呼叫 MaxImageHeight: 該連結所能承載的圖片最大尺寸。連結上的圖片不得超過這些數值,但可以小於這些數值。這些屬性適用於會緩衝行或完整圖片的運算子,例如 ImageFifo, LineBuffer,或 ColMax. 請將其設定為至少與處理路徑中最大的影像尺寸相同。若數值過小,將導致設計規則檢查 (DRC) 錯誤。較大的數值會消耗更多 FPGA 資源。攝影師或操作人員,例如 SetDimension 經常設定這些屬性。 MaxImageHeight 當……時,此舉無效 ImageProtocol 設為 VALT_LINE1D, VALT_PIXEL0D,或 VALT_SIGNAL.

資訊

您選擇的最大影像尺寸和並行度越高,設計所消耗的 FPGA 資源就越多。Basler 建議您僅將這些數值設定為應用程式所需的最高值。

各營運商會定義其允許哪些輸出鏈結屬性,以及哪些值為固定值。某些鏈結上的屬性之所以被停用,是因為上游營運商不允許編輯這些屬性。《營運商參考手冊》記載了各營運商所允許的鏈結格式。

連結的屬性由運算子定義。您可以直接在運算子的輸出連結上變更某些屬性。其餘屬性則為固定值,或由模組參數或輸入連結的屬性推導而來。當您變更連結屬性時,VisualApplets 會將此變更傳遞至後續的模組與連結。

修改值後,請在「屬性」對話方塊中按一下「套用」。若變更獲得接受,設計窗格中受影響的連結會轉為綠色。綠色表示「VisualApplets 」已將更新的連結屬性傳播並驗證完成。這並非代表整個設計已通過「全部有效」的交通燈標記。

VisualApplets 設計中的「綠色連結」

連結屬性會沿著模組傳遞,直到有操作員進行變更為止。如果下游連結不允許編輯某個屬性,則應由上游操作員或能夠變更該屬性的中間操作員來設定該屬性。例如,一個 ImageBuffer 此運算子不會改變鏈路的位元寬度。您必須在攝影機輸出鏈路上設定位元寬度,或插入一個如 ConvertPixelFormat 或 ShiftLeft 這會改變位元寬度。

連結屬性的變更也可能與模組參數產生衝突。在此情況下,VisualApplets 會將該模組及受影響的參數標示為紅色:

採用綠色連結與紅色模組的設計

執行 設計規則檢查第 1 級 並閱讀 DRC 日誌以找出錯誤。常見原因包括目標區域超出 MaxImageWidth 或 MaxImageHeight,或參數值超出連結位元寬度所允許的範圍:

由連結屬性所導致的設計錯誤

模組參數#

每個運算子的模組參數各不相同。這些參數控制運算子處理資料的方式。模組參數可分為靜態參數與動態參數。靜態參數僅能在設計階段透過「VisualApplets 」進行設定。動態參數則可於執行階段透過主機軟體,利用「microDisplay X 」、「Framegrabber SDK 」或 pylon 進行變更。在「Module Properties」對話方塊中,「Parameter Type」欄位會顯示該參數是靜態還是動態:

模組屬性:參數類型

編輯完參數後,請在「模組屬性」對話方塊中按下「套用」。若新值超出允許範圍,VisualApplets 會捨棄該值。部分參數處於停用狀態,無法進行編輯。參數是否啟用,取決於其他參數設定,或取決於輸入或輸出連結的格式。若要了解特定運算子的模組屬性詳情,請查閱您所使用運算子的《運算子參考手冊》。

如需了解如何在範例設計中設定連結與模組參數的逐步操作指南,請參閱《使用者手冊》中的「硬體小程式:從構想到應用」。

尺寸參數#

許多營運商,例如 LineBuffer, FrameBufferMultiRoi以及 SelectROI, 透過參數定義一個感興趣區域 (ROI) XLength, YLength, XOffset以及 YOffset. 感興趣區域必須符合已連接連結上的最大影像尺寸。如果 XLength + XOffset 超過 MaxImageWidth,或 YLength + YOffset 超過 MaxImageHeight, DRC 會報告錯誤,且相關參數會標示為紅色。

在下方的螢幕截圖中,該 SelectROI 該運算子透過 XLength 進行明確的生命週期管理即呼叫 YLength 參數:

使用 SelectROI 運算子選取 ROI

無限來源與 InfiniteSource 參數#

相機模組等運算子無法透過流量控制加以停止。它們的行為類似於無限來源,因此只能連接至接受無限來源的 M 型運算子,或是能將無限來源特性傳遞至下游的 O 型及 P 型運算子。

緩衝區運算子會將無限資料流轉換為可控且可暫停的資料流。當緩衝區從無法暫停的來源接收資料時,請將其 InfiniteSource 參數設為 ENABLED. 當輸入已是可中斷的流時,請設定 InfiniteSource 設為 DISABLED.

使用 進行設計規則檢查 InfiniteSource 設為 DISABLED 《追尋無盡之源》之後:

將「無限來源」設為「停用」的 LineBuffer 運算子

使用 進行設計規則檢查 InfiniteSource 設為 ENABLED 《追尋無盡之源》之後:

將「無限來源」設定為「啟用」的 LineBuffer 運算子

有關無限資料源的更多詳細資訊,請參閱「可中斷與不可中斷資料流」教學主題。

溢出運算子#

當 Overflow 運算子位於 同步 當不可停止的來源在下游處理被阻塞時仍持續傳送影像資料,此函式庫會處理溢出情況。它本身不會緩衝資料。Basler 建議您將其與緩衝運算子搭配使用。此運算子與 算術溢出 (參見 位元 Arithmetic 教學主題)或該 Overflow 狀態參數 關於緩衝區運算子(參見 Memory 元素 教學主題)。

當您放置 Overflow 位於一個無限來源與一個記憶體運算子之間,例如 LineBuffer, 設定 InfiniteSource 在記憶體運算子上 DISABLED. 該 Overflow 該運算子已能處理來自無法停止的資料流所產生的溢出。啟用 InfiniteSource 在此拓撲中,記憶體模組的配置不正確,並會觸發 DRC 錯誤。

在無限來源的情況下使用溢出運算子

使用 DRC 驗證您的設計#

在變更會影響圖像尺寸、位寬或感興趣區域的連結屬性或模組參數後,請執行「分析」→「設計規則檢查第 1 級」。第 1 級檢查會將形式錯誤記錄在 DRC 日誌中,並標示受影響的模組與連結。

設計規則檢查第 2 級 執行深入檢查並估算 FPGA 資源。在編譯之前,請先修正所有第 1 級錯誤。第 2 級檢查還會檢查無限源連接以及 InfiniteSource 設定。

請一併閱讀DRC 日誌,並參閱其中標示的模組與連結。如需完整的作業流程,請參閱「從空白設計到可執行的 Applet」教學主題。

設計規則檢查成功

模組參數與連結屬性並非獨立的設定。它們彼此直接相關,並相互限制其允許的數值範圍。輸入與輸出連接上的連結屬性,定義了操作員必須處理的資料格式。 模組參數則定義操作員應如何處理該格式內的資料。當您變更連結屬性時,VisualApplets 會將此變更傳遞至後續的模組與連結。若模組參數不再符合更新後的連結屬性,VisualApplets 會將該模組或參數標記為紅色。反之亦然:模組參數可定義或變更輸出連結屬性,因此先前有效的值,在連結變更後可能變得無效。 因此,參數是否啟用、停用,或受限於特定範圍,取決於連結屬性、其他模組參數,或兩者兼有。《運算子參考手冊》針對每個運算子皆記錄了這些依存關係。關於傳播行為以及連結變更的三種可能結果,請參閱《使用者手冊》中的「運算子參數與連結屬性的傳播與依存關係」。

當參數值無法生效,或連結變更後模組變為紅色時,請依照以下順序解決衝突:先檢查連結屬性,再檢查模組參數。連結屬性定義了模組參數的允許值範圍,模組參數必須落在該範圍內。許多操作員也會定義或變更輸出連結屬性,因此設計中任一側的變更都可能影響另一側。 請閱讀 DRC 日誌,點擊錯誤訊息以突出顯示受影響的模組或連結,並參閱《操作員參考手冊》以了解允許的連結格式和參數依賴關係。連結上或「模組屬性」對話方塊中的紅色標示表示存在形式錯誤,您必須在進行模擬或建置前修正此錯誤。

當您嘗試設定 Value a 的參數 CONST 運算子,例如輸入 500,但VisualApplets 會自動更正該輸入內容。該外鏈的 Bit Width 為 8 位元,僅允許 0 至 255 之間的數值。要解決此衝突,請增加連結 Bit Width 在傳出連結上,然後再次設定模組參數:

CONST:Bit Width 連結屬性與值模組屬性之間的依賴關係

在其他運算子上也會出現類似的依賴關係。在 SelectBitField, 該數值的有效範圍為 BitOffset 該參數取決於輸入與輸出鏈路 Bit Widths. 對於灰階影像, BitOffset 必須介於 0 到 input 之間 BitWidth 負輸出 BitWidth:

SelectBitField:輸入與輸出連結的依賴關係Bit Width 以及 BitOffset 模組屬性

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

ModuloCount:輸出連結Bit Width 的依賴關係與除數模組屬性

感興趣區域的參數,例如 XLength 進行明確的生命週期管理即呼叫 YLength 必須符合 MaxImageWidth 進行明確的生命週期管理即呼叫 MaxImageHeight 在相連的連結上。衝突也可能涉及並行處理、色彩格式和影像協定。例如, XLength 必須始終為並行度的倍數,此數值在「模組屬性」對話方塊中顯示為 步長:

維度參數的依賴關係

關鍵術語

Basler 建議在處理參數時遵循以下做法:

  • 當您需要執行時彈性時(例如閾值設定),請使用動態參數。此處的「執行時」指的是主機軟體與幀擷取卡上的小程式進行通訊,而非在VisualApplets 中的模擬情境。
  • 每次變更連結屬性或模組參數後,請檢查下游連結上已傳播的連結屬性。
  • 針對下游軟體規劃位元寬度的調整,例如在 DMA 之前,將 12 位元的相機資料擴展為每像素 16 位元。
  • 當無法設定某個值時,請在變更模組參數之前,先檢查已連接連結的連結屬性。
  • 請定期執行 DRC,以便及早發現連結與模組之間的衝突。