CCAOI / Trier.HIS 程式互動導覽

這份頁面現在改成探索式文件。你可以點架構節點看動態解說、切換啟動/執行/編輯流程,還可以搜尋關鍵檔案卡片並直接跳到詳細段落。

.NET 6 + WPF Prism 模組導航 目前主流程是 Trier.HIS

可點擊架構圖

左邊點節點,右邊看這個元件的責任、關聯檔案、先看哪裡,以及它在整條鏈上的位置。

Trier.App宿主

建立主視窗、註冊導航、啟動 PLC/Scanner,決定掛哪些模組。

StaionHISModule模組入口

初始化 ToolManager、配方與工站資料,是真正有載入的業務模組。

RecipeMgr + StationMgr資料核心

決定目前載入哪份配方、哪個 VisionData.Trier、有哪些工站與工具鏈。

StationToolUpCamera檢測工站

把掃圖、相機、軸、光源、演算法群組組成真正可執行的站別。

ToolScanner2DNew + ToolGroupAlg工具鏈

上游取圖,下游跑演算法,可編輯也可序列化。

HomeViewModel控制台

負責 Start/Pause/Stop、狀態輪詢、檢測結果整合與首頁顯示。

StationConfig / StationTools編輯 UI

站別工具樹、ToolView 導航、參數儲存與演算法編輯入口。

流程切換

同一套程式,從不同切面看會有完全不同的理解。這裡把它拆成啟動、執行、編輯三種模式。

1. Trier.App 啟動註冊 Prism 導航、建立 MainWindow、啟動 PLC 背景服務與 Scanner 初始化。
2. 載入 StaionHISModule主程式真正把 HIS 模組掛進來,而不是載入 CCAOI 模組。
3. 初始化配方與工站InitializeRecipe() 依 CurrentRecipe 載入配方,必要時建立預設資料。
4. 預載站別相關 ViewModelStationConfigViewModel、StationToolsViewModel、AlgorithmEditingViewModel 被先建立。
5. 首頁與站別頁可用導航中的 Home、StationConfigView 會接上 Trier.HIS 的頁面。
1. 首頁按 StartHomeViewModel.OnStart() 清統計、處理 Debug 模式、重設條碼與 MarkTool 狀態。
2. Machine.AutoStart()從 UI 層進入機台層,真正開始驅動工站。
3. StationProcessRun()工站清空舊資料、條碼映射與舊影像,然後跑 RunOnce()。
4. 工具鏈執行先 ToolScanner2DNew 取圖,再交給 ToolGroupAlg 內的演算法鏈。
5. 結果回首頁InspectionMgr 統計 OK/NG、缺陷圖、條碼、模板圖,並同步 PLC Defect 訊號。
1. 進入 StationConfigView外層頁面建立工具列與 StationToolViewRegion。
2. 載入 StationToolsView左側生成工站/工具樹,右側保留工具設定區。
3. StationToolsViewModel 建樹從 StationMgr 取站別、遞迴展開 ToolGroup 與 Tool。
4. ToolManager 導航點節點時找對應 ToolView,導到 StationConfigViewRegion。
5. SaveAsync()最後由 StationConfigViewModel 呼叫 StationMgr.Save2() 存回配方。

現有工具與算法總覽

這一區把目前專案裡已經存在、而且和 AOI 主流程有關的工具與算法模組一起攤開。你可以把它理解成三層:`Trier.HIS` 負責工站與流程,`Trier.Tools` 負責可編輯工具,`Framework.*` 提供底層算法能力。

第一層:Trier.HIS 負責站別、首頁、掃描工站與工具鏈容器。核心包括 `ToolScanner2DNew`、`Tool2DScan`、`ToolGroupAlg`、`StationToolUpCamera`。
第二層:Trier.Tools 真正的 AOI 工具庫,現在已看到的重點工具有 `ToolCoatingDetection`、`ToolThicknessDetection`、`ToolBarcodeRecognition`、`ToolMarkTool`、`ToolCAD`、`ToolThresholdSegmentation`、`ToolDataBuffer`。
第三層:Framework.HAlgorithmExtension / Framework.CvAlgorithmExtension 提供較底層的算法能力,例如 `ShapeMatch`、`NCCMatchManager`、`FeatureMatch`、`OnnxLoader`、`OnnxAnomalyDetection`、`OnnxClassification`。

快速分類

掃描取像:ToolScanner2DNew / Tool2DScan 鍍膠缺陷:ToolCoatingDetection 厚度檢測:ToolThicknessDetection 條碼識別:ToolBarcodeRecognition Mark 對位:ToolMarkTool CAD 對照:ToolCAD 一般分割:ToolThresholdSegmentation 模板匹配:Shape / NCC Match AI 推論:OnnxLoader 系列

核心工具地圖

這裡列的是目前從程式碼中能直接確認、而且最可能出現在實際配方裡的工具。這不是所有工具,但已經涵蓋 AOI 主線上最重要的一批。

掃描與上游輸入:ToolScanner2DNew / Tool2DScan

`ToolScanner2DNew` 是 `Trier.HIS` 這層的掃描工具包裝器,內部真正執行行為的是 `Tool2DScan`。它負責產生 `OutImages`,作為後續演算法工具的影像來源。

Trier.Project/Trier.HIS/Tools/Actions/Scanner2DNew/ToolScanner2DNew.cs
鍍膠缺陷:ToolCoatingDetection

這是 AOI 檢測裡目前最重的一支工具之一。它會讀 ROI、模板 GUID、Barcode 關聯、面積/比例/缺陷數等判定邏輯,產出 `InspectionItem`。它也明確和 `MarkToolRuntimeState`、配方模板、Barcode 變數串接。

Trier.Tools/ImageProcess/Coating/ToolCoatingDetection.cs
厚度檢測:ToolThicknessDetection

厚度工具除了基本 ROI 檢測,還帶了預測模型、校正模型與內插 fallback 邏輯,表示它不只是閾值判斷,而是帶有一定程度的數值建模。

Trier.Tools/ImageProcess/ThicknessDetection/ToolThicknessDetection.cs
Barcode:ToolBarcodeRecognition

Barcode 工具會把多個 ROI 的識別結果輸出成 `BarcodeContent_0`, `BarcodeContent_1` 等變數,後面的 Coating / Thickness 工具會去站內找這些變數來關聯多連板的 ROI 與條碼。

Trier.Tools/ImageProcess/Barcode/ToolBarcodeRecognition.cs
Mark 對位:ToolMarkTool

MarkTool 主要處理定位、校正矩陣與關鍵點精修。它會輸出 `Matrix` 給後續工具,並且透過 `MarkToolRuntimeState` 影響後面 Coating、Thickness、Barcode 等工具是否要中止或跳過。

Trier.Tools/ImageProcess/MarkTool/ToolMarkTool.cs
CAD / Threshold 與其他泛用工具

`ToolCAD` 處理 CAD / CSV 對照、元件資訊與座標轉換。`ToolThresholdSegmentation` 則是比較通用的區域分割/判定工具。這些工具在站別編輯時可以作為演算法鏈的一部分被組進 `ToolGroupAlg`。

Trier.Tools/ImageProcess/CAD/ToolCAD.cs
Trier.Tools/ImageProcess/ThresholdSegmentation/ToolThresholdSegmentation.cs
底層模板匹配與 AI 能力

較底層的能力主要在 `Framework.HAlgorithmExtension` 與 `Framework.CvAlgorithmExtension`。目前已看到 `ShapeMatch`、`NCCMatchManager`、`FeatureMatch`、`OnnxLoader` 以及對應的 anomaly / classification / segmentation 支援,表示系統底層其實已經同時具備傳統視覺與 AI 推論基礎。

Framework.HAlgorithmExtension/TemplateMatch/ShapeMatch.cs
Framework.HAlgorithmExtension/TemplateMatch/NCCMatches/NCCMatchManager.cs
Framework.CvAlgorithmExtension/AI/OnnxLoader.cs

可能的配方 Pipeline

這不是單純列工具名稱,而是把目前從程式碼可推估的典型資料流串起來。點任一步,可以看它吃什麼、產什麼、下游是誰。

1. 掃描取像ToolScanner2DNew

站別先取圖,產生 `OutImages` 與主輸入影像。

2. Mark 對位ToolMarkTool

定位校正、輸出 `Matrix`,必要時阻斷後續工具。

3. BarcodeToolBarcodeRecognition

產生 `BarcodeContent_X`,給多 ROI 工具關聯板號。

4. AOI 檢測Coating / Thickness

真正輸出 `InspectionItem` 的主檢測段。

5. 輔助工具CAD / Threshold

提供座標對照、一般分割或補充判定。

6. 結果彙整InspectionMgr / Home

統計 OK/NG、顯示缺陷圖與同步 PLC 狀態。

1. 掃描取像

由工站內的 `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 協調、退板/流程控制
    實務上怎麼用這張表
    • 如果某個工具沒有結果,先往左看它需要哪些上游輸入,而不是只盯著這支工具本身。
    • 如果 `Coating` 或 `Thickness` 結果怪,先檢查前面是不是少了 `Mark` 或 `Barcode`。
    • 如果首頁沒顯示結果,不代表工具沒跑,也可能是 `InspectionMgr` 沒被正確收集。
    • 如果你未來要設計新配方,通常會先決定:掃描 -> 校正 -> 條碼 -> 主檢測 -> 結果整合 這五段要不要都用。

    檔案索引與搜尋

    用關鍵字找 Home、Station、Tool、Recipe、PLC,快速找到你現在該讀的檔案。

    Trier.App/App.xaml.cs

    主程式入口。先看模組載入與啟動流程。

    Trier.Project/Trier.HIS/StaionHISModule.cs

    目前真正的業務模組入口。

    Trier.Project/Trier.HIS/ViewModels/HomeViewModel.cs

    首頁控制台與結果整合中心。

    Trier.Project/Trier.HIS/Station/StationToolUpCamera.cs

    真正的工站執行骨架。

    Trier.Project/Trier.HIS/Tools/Actions/GroupAlg/ToolGroupALg.cs

    演算法鏈容器。

    Trier.Project/Trier.HIS/Tools/Actions/Scanner2DNew/ToolScanner2DNew.cs

    掃描工具包裝器,負責把影像送進後續算法鏈。

    Trier.Tools / Framework.* 算法與工具庫

    鍍膠、厚度、條碼、Mark、CAD、Threshold、NCC、Shape、ONNX AI。

    Trier.Project/Trier.HIS/ViewModels/StationConfigViewModel.cs / StationToolsViewModel.cs

    站別編輯與工具樹導航核心。

    Trier.Project/Trier.CCAOI/*

    有結構,但目前不是主流程。

    你現在最該記住的事

    目前真正被主程式使用的是 Trier.HIS。

    也就是說,你從主畫面點 Home 或 StationConfigView,實際上走到的是 HIS 的頁面與 ViewModel,不是 Trier.CCAOI 的頁面。

    想看啟動:App.xaml.cs + StaionHISModule.cs 想看檢測:HomeViewModel + StationToolUpCamera 想看編輯:StationConfigViewModel + StationToolsViewModel 想接 CCAOI:先改模組載入

    詳細段落

    App.xaml.cs:主程式宿主,不是 AOI 本體

    這支是整個應用的啟動器。它做的是系統層工作,而不是配方或演算法層工作。

    Trier.App/App.xaml.cs
    • 註冊 Prism 導航與對話框。
    • 建立 MainWindow。
    • 載入 StaionHISModule、ToolsModule、HardwareViewModule。
    • 啟動 PLC 背景服務與 Scanner 初始化。
    • 讀 MachineConfig.xml,處理光源 SN 同步。
    StaionHISModule.cs:目前主業務模組入口

    這支的價值在於它把配方、工站、工具 UI 整個打通。

    Trier.Project/Trier.HIS/StaionHISModule.cs
    • 初始化 ToolManager 與 NCCMatchManager。
    • 依目前配方名載入或建立配方。
    • StationMgr.Load(...) 失敗時會回退到預設 VisionData.Trier。
    • 預先 resolve 幾個重要 ViewModel。
    HomeViewModel.cs:控制台、結果整合、硬體監視

    它很大,但定位其實清楚:控制工站、監看狀態、整理結果回畫面。

    Trier.Project/Trier.HIS/ViewModels/HomeViewModel.cs
    • OnStart():清空統計、處理 Debug 模式、呼叫 Machine.AutoStart()。
    • OnPause():透過 PauseOrContinue() 控制暫停與續跑。
    • OnStop():清畫面、清 InspectionMgr、通知 PLC Defect = false。
    • 輪詢 Scanner / PLC 狀態,更新首頁狀態燈。
    StationToolUpCamera.cs:真正檢測工站骨架

    要看檢測怎麼跑,這支比首頁更關鍵。

    Trier.Project/Trier.HIS/Station/StationToolUpCamera.cs
    • 工站內含軸、2D 相機、3D 相機、光源與掃圖工具。
    • 建構子會加 ToolScanner2DNew 與 ToolGroupAlg。
    • StationProcessRun() 會清舊資料、跑 RunOnce()、同步影像並輸出 mtp。
    ToolGroupAlg.cs:演算法鏈容器

    ToolGroupAlg 本質是可編輯、可序列化的工具群組,而且會記住自己的上游來源工具。

    Trier.Project/Trier.HIS/Tools/Actions/GroupAlg/ToolGroupALg.cs
    • 繼承自 ToolGroup。
    • 承接上游 ToolScanner2DNew 的輸入。
    • 會被序列化進配方資料。
    現有工具與算法:目前已確認存在的 AOI 能力

    目前從程式碼可以直接確認的算法與工具,不只是單一缺陷判定,而是一整套 AOI 工具庫。

    Trier.Project/Trier.HIS/Tools/Actions/Scanner2DNew/ToolScanner2DNew.cs
    Trier.Tools/ImageProcess/Coating/ToolCoatingDetection.cs
    Trier.Tools/ImageProcess/ThicknessDetection/ToolThicknessDetection.cs
    Trier.Tools/ImageProcess/Barcode/ToolBarcodeRecognition.cs
    Trier.Tools/ImageProcess/MarkTool/ToolMarkTool.cs
    Trier.Tools/ImageProcess/CAD/ToolCAD.cs
    Trier.Tools/ImageProcess/ThresholdSegmentation/ToolThresholdSegmentation.cs
    Framework.HAlgorithmExtension/TemplateMatch/ShapeMatch.cs
    Framework.HAlgorithmExtension/TemplateMatch/NCCMatches/NCCMatchManager.cs
    Framework.CvAlgorithmExtension/AI/OnnxLoader.cs
    • 掃描層:`ToolScanner2DNew` 對外提供掃描輸出,內部委派給 `Tool2DScan`。
    • AOI 缺陷層:`ToolCoatingDetection` 與 `ToolThicknessDetection` 是目前最完整的主力檢測工具。
    • 輔助資訊層:`ToolBarcodeRecognition` 負責多 ROI 條碼輸出,會被後面檢測工具引用。
    • 對位校正層:`ToolMarkTool` 輸出矩陣與定位結果,並影響下游工具是否中止。
    • 工程輔助層:`ToolCAD` 與 `ToolThresholdSegmentation` 提供 CAD 對照與通用分割能力。
    • 底層算法層:`ShapeMatch`、`NCCMatchManager`、`OnnxLoader` 代表 Halcon 模板匹配與 ONNX AI 推論基礎設施已存在。
    StationConfigViewModel / StationToolsViewModel:站別編輯入口

    這兩支一起看才完整。前者管外層工具列與儲存,後者管左側工站/工具樹與 ToolView 導航。

    Trier.Project/Trier.HIS/ViewModels/StationConfigViewModel.cs
    Trier.Project/Trier.HIS/ViewModels/StationToolsViewModel.cs
    • StationConfigViewModel.SaveAsync() 最後保存整個工站資料。
    • StationToolsViewModel 從 StationMgr 建樹,並透過 ToolManager 導航工具畫面。
    Trier.CCAOI:有結構,但目前不是主流程

    Trier.CCAOI 並不是不存在,而是目前還沒正式接上主程式。它有自己的 Module、Station、Tool 與 View,但整體仍偏骨架。

    Trier.Project/Trier.CCAOI/
    • 有 StaionCCAOIModule、StationAOI、ToolCCAOI。
    • 但 Trier.App 目前沒載入 StaionCCAOIModule。
    • 所以現在畫面上的 Home 與 StationConfigView 不會走到這個模組。