Trier.App/App.xaml.cs
主程式入口。先看模組載入與啟動流程。
這份頁面現在改成探索式文件。你可以點架構節點看動態解說、切換啟動/執行/編輯流程,還可以搜尋關鍵檔案卡片並直接跳到詳細段落。
左邊點節點,右邊看這個元件的責任、關聯檔案、先看哪裡,以及它在整條鏈上的位置。
建立主視窗、註冊導航、啟動 PLC/Scanner,決定掛哪些模組。
初始化 ToolManager、配方與工站資料,是真正有載入的業務模組。
決定目前載入哪份配方、哪個 VisionData.Trier、有哪些工站與工具鏈。
把掃圖、相機、軸、光源、演算法群組組成真正可執行的站別。
上游取圖,下游跑演算法,可編輯也可序列化。
負責 Start/Pause/Stop、狀態輪詢、檢測結果整合與首頁顯示。
站別工具樹、ToolView 導航、參數儲存與演算法編輯入口。
同一套程式,從不同切面看會有完全不同的理解。這裡把它拆成啟動、執行、編輯三種模式。
這一區把目前專案裡已經存在、而且和 AOI 主流程有關的工具與算法模組一起攤開。你可以把它理解成三層:`Trier.HIS` 負責工站與流程,`Trier.Tools` 負責可編輯工具,`Framework.*` 提供底層算法能力。
這裡列的是目前從程式碼中能直接確認、而且最可能出現在實際配方裡的工具。這不是所有工具,但已經涵蓋 AOI 主線上最重要的一批。
`ToolScanner2DNew` 是 `Trier.HIS` 這層的掃描工具包裝器,內部真正執行行為的是 `Tool2DScan`。它負責產生 `OutImages`,作為後續演算法工具的影像來源。
這是 AOI 檢測裡目前最重的一支工具之一。它會讀 ROI、模板 GUID、Barcode 關聯、面積/比例/缺陷數等判定邏輯,產出 `InspectionItem`。它也明確和 `MarkToolRuntimeState`、配方模板、Barcode 變數串接。
厚度工具除了基本 ROI 檢測,還帶了預測模型、校正模型與內插 fallback 邏輯,表示它不只是閾值判斷,而是帶有一定程度的數值建模。
Barcode 工具會把多個 ROI 的識別結果輸出成 `BarcodeContent_0`, `BarcodeContent_1` 等變數,後面的 Coating / Thickness 工具會去站內找這些變數來關聯多連板的 ROI 與條碼。
MarkTool 主要處理定位、校正矩陣與關鍵點精修。它會輸出 `Matrix` 給後續工具,並且透過 `MarkToolRuntimeState` 影響後面 Coating、Thickness、Barcode 等工具是否要中止或跳過。
`ToolCAD` 處理 CAD / CSV 對照、元件資訊與座標轉換。`ToolThresholdSegmentation` 則是比較通用的區域分割/判定工具。這些工具在站別編輯時可以作為演算法鏈的一部分被組進 `ToolGroupAlg`。
較底層的能力主要在 `Framework.HAlgorithmExtension` 與 `Framework.CvAlgorithmExtension`。目前已看到 `ShapeMatch`、`NCCMatchManager`、`FeatureMatch`、`OnnxLoader` 以及對應的 anomaly / classification / segmentation 支援,表示系統底層其實已經同時具備傳統視覺與 AI 推論基礎。
這不是單純列工具名稱,而是把目前從程式碼可推估的典型資料流串起來。點任一步,可以看它吃什麼、產什麼、下游是誰。
站別先取圖,產生 `OutImages` 與主輸入影像。
定位校正、輸出 `Matrix`,必要時阻斷後續工具。
產生 `BarcodeContent_X`,給多 ROI 工具關聯板號。
真正輸出 `InspectionItem` 的主檢測段。
提供座標對照、一般分割或補充判定。
統計 OK/NG、顯示缺陷圖與同步 PLC 狀態。
由工站內的 `ToolScanner2DNew` 先建立影像輸入,後面的工具基本上都依賴這個結果。
掃描器設定、站別參數、設備狀態。
`OutImages`、最新影像、下游工具可讀取的 `Image`。
Mark、Barcode、Coating、Thickness 等工具都會從這裡拿圖。
說明
這一區專門回答「工具怎麼接」這個問題。不是只看功能名稱,而是看每個工具通常吃什麼、吐什麼、依賴誰、下游誰會讀它。
| 工具 | 主要輸入 | 主要輸出 | 依賴 / 風險點 | 典型下游 |
|---|---|---|---|---|
| ToolScanner2DNew | 掃描器設定、站別參數、設備狀態 | `OutImages`、最新 `Image` | 如果這步沒有成功,後面幾乎所有視覺工具都沒有影像可用 | Mark、Barcode、Coating、Thickness、Threshold |
| ToolMarkTool | 掃描影像、Mark ROI、模板/對位參數 | `Matrix`、定位點、`MarkToolRuntimeState` | 若 Mark Critical NG,後續工具會直接 Failure 或跳過 | Barcode、Coating、Thickness、其他需要校正矩陣的工具 |
| ToolBarcodeRecognition | 影像、Barcode ROI、可能的 Matrix | `BarcodeContent`、`BarcodeContent_0..n`、對應 InspectionItem | 多連板時非常關鍵;若沒有輸出 `BarcodeContent_X`,後面 ROI 只能標成 NA | Coating、Thickness、首頁條碼顯示 |
| ToolCoatingDetection | `Image`、ROI、模板 GUID、`BarcodeContent_X`、Mark 狀態 | Coating 類型的 `InspectionItem`、缺陷區域、數值結果 | 會檢查 `MarkToolRuntimeState`;也會依 ROI 的 `BarcodeIndex` 去找對應條碼 | Station.InspectionMgr、首頁缺陷清單、統計與 mtp 輸出 |
| ToolThicknessDetection | `Image`、ROI、校正模型、可能的 `BarcodeContent_X`、Mark 狀態 | Thickness 類型的 `InspectionItem`、厚度數值、覆蓋率與圖像結果 | 除了影像與 ROI,還會依賴校正模型與預測模式;Mark 失敗也會被阻斷 | Station.InspectionMgr、首頁統計、厚度顯示與 mtp 輸出 |
| ToolCAD | CSV/CAD 檔、座標轉換參數、可能的影像 | 元件資訊、座標對照、元件資料快取 | 比較偏工程/輔助工具,不一定每條配方都在主檢測路徑上 | 其他定位、元件對照或編輯場景 |
| ToolThresholdSegmentation | `Image`、ROI、閾值與比較參數 | Threshold 類型 `InspectionItem`、區域與面積/百分比結果 | 屬於通用型工具,常被用來做前置或補充判斷 | Station.InspectionMgr、工具鏈中的後續判定 |
| HomeViewModel / InspectionMgr | 各工具建立的 `InspectionItem`、影像、條碼、站別結果 | 首頁 OK/NG 統計、缺陷顯示、PLC Defect 狀態 | 它不是工具,但它是所有工具結果真正被看見與被使用的地方 | 使用者 UI、PLC 協調、退板/流程控制 |
用關鍵字找 Home、Station、Tool、Recipe、PLC,快速找到你現在該讀的檔案。
主程式入口。先看模組載入與啟動流程。
目前真正的業務模組入口。
首頁控制台與結果整合中心。
真正的工站執行骨架。
演算法鏈容器。
掃描工具包裝器,負責把影像送進後續算法鏈。
鍍膠、厚度、條碼、Mark、CAD、Threshold、NCC、Shape、ONNX AI。
站別編輯與工具樹導航核心。
有結構,但目前不是主流程。
也就是說,你從主畫面點 Home 或 StationConfigView,實際上走到的是 HIS 的頁面與 ViewModel,不是 Trier.CCAOI 的頁面。
這支是整個應用的啟動器。它做的是系統層工作,而不是配方或演算法層工作。
這支的價值在於它把配方、工站、工具 UI 整個打通。
它很大,但定位其實清楚:控制工站、監看狀態、整理結果回畫面。
要看檢測怎麼跑,這支比首頁更關鍵。
ToolGroupAlg 本質是可編輯、可序列化的工具群組,而且會記住自己的上游來源工具。
目前從程式碼可以直接確認的算法與工具,不只是單一缺陷判定,而是一整套 AOI 工具庫。
這兩支一起看才完整。前者管外層工具列與儲存,後者管左側工站/工具樹與 ToolView 導航。
Trier.CCAOI 並不是不存在,而是目前還沒正式接上主程式。它有自己的 Module、Station、Tool 與 View,但整體仍偏骨架。