本專案實作了一套跨語言的工業檢測解決方案,包含 Python 端的數據生成模擬器 與 C# .NET 端的實時監控看板。系統透過共享資料庫架構實作異質系統間的數據對接,並針對獨立發布環境進行了深度優化。
系統採用 SQLite 作為輕量化中間層,實作 Python 生成端與 C# 監控端之解耦:
- WAL 模式應用:啟用
Write-Ahead Logging模式,確保 Python 端在高頻率寫入時,C# 端仍能進行非阻塞式讀取,解決多進程存取衝突。 - 路徑動態定標:兩端程式均實作動態路徑獲取邏輯(
AppDomain.CurrentDomain.BaseDirectory與sys.executable),確保在獨立發布環境下資料庫路徑的絕對一致性。
監控端捨棄傳統的 ADO.NET 繁瑣寫法,採用 Dapper 微型 ORM:
- 物件映射 (Object Mapping):實作
InspectionLog模型,將資料庫資料列自動映射為 C# 類別實例,簡化開發邏輯。 - 統計聚合查詢:透過 SQL 預處理(如
SUM(CASE ...))實作良率統計,將計算壓力置於資料庫端,降低 UI 執行緒運算負擔。
實作高頻率輪詢(Polling)看板,呈現系統生產數據:
- 狀態指紋識別:透過比對資料庫最新
Id變動,實作DataGridView的智慧刷新,避免不必要的資料重啟動導致的 UI 閃爍與效能損耗。 - 雙緩衝優化 (Double Buffering):針對大批量數據展示開啟雙緩衝技術,解決視窗縮放與數據滾動時的渲染殘影。
針對部署環境進行深度優化,確保跨平台運作的穩定性:
- 自包含封裝 [Self-contained]:整合 .NET 執行環境至單一執行檔,移除對目標電腦 .NET 環境的依賴。
- 原生庫提取 [Native DLL Extraction]:解決 SQLite 原生組件在單一檔案發布模式下無法載入的問題(
Dll was not found),實作自動解壓載入邏輯。
| 功能模組 | 技術實現 | 說明 |
|---|---|---|
| 數據生成器 (Simulator) | Python / SQLite3 |
模擬工業相機檢測邏輯,定時產出分類結果與信心度數值。 |
| 數據存取層 (DAO) | C# / Dapper |
封裝 using 連線區塊,確保資料庫連線生命週期之確定性釋放。 |
| 統計面板 (Statistics) | SQL Aggregation |
實作良率計算公式:$$Yield = \frac{Pass\ Count}{Total\ Count}$$。 |
| 異常追蹤 (History) | DataGridView |
實作最新異常紀錄的自動回溯與清單展示。 |
- log_generation_script.py:資料生成核心,包含 SQL 寫入邏輯與環境路徑判斷。
- DataAccessObject.cs:資料服務層,負責與 SQLite 進行通訊並產出 Dapper 對映物件。
- Form1.cs:UI 介面控制邏輯,負責 Timer 驅動之數據流刷新與異常捕捉。