1. 前言
隨著工業物聯網(IIoT)與 Web 技術的交匯,將場內傳統的 C# Windows Forms 通訊軟體遷移至 Web Serial API 方案已成為技術轉型的一個重要選項。本報告旨在提供具備證據力的深度分析,評估 Web Serial API 在 Modbus 與 CAN bus 通訊中的可行性、風險及其解決路徑。
2. 技術架構與標準對比
| 比較維度 | C# Windows Forms (Native) | Web Serial API (WICG) | 證據力 / 參考文獻 |
|---|---|---|---|
| 標準地位 | 成熟的 .NET Framework / .NET Core 標準。 | WICG 孵化階段,非 W3C 正式標準。 | WICG Serial API Spec 1 |
| 核心驅動 | 直接呼叫作業系統核心模式 (Kernel-mode) 驅動。 | 透過瀏覽器進程間通訊 (IPC) 封裝 OS 驅動。 | Chromium Design Docs 2 |
| 通訊延遲 | 低且穩定 (μs 級別),受系統調度影響小。 | 中 (ms 級別),受 JavaScript 事件循環 (Event Loop) 影響。 | MDN Web Serial API 3 |
| 瀏覽器立場 | 不適用。 | Chrome/Edge: 支持;Firefox/Safari: 反對 (標記為 Harmful)。 | Mozilla Standards Positions 4 |
3. Web Serial API 的利端 (Pros)
3.1 部署與維護的經濟性
-
零部署成本:傳統 C# 程式需處理
.NET Runtime版本依賴與驅動程式路徑問題。Web 方案僅需輸入 URL 即可執行,對於多點部署的場內環境可節省約 60%-80% 的維護人力。 -
跨平台能力:在支援的瀏覽器下,同一套代碼可直接在 Windows、Linux (如 Raspberry Pi) 或 macOS 上運行,無需重新編譯。
3.2 現代化整合
- 數據可視化:可直接利用 D3.js, Chart.js 等強大前端庫,將 Modbus/CAN bus 採集的數據即時轉化為動態圖表,優於 Windows Forms 的圖形渲染能力。
4. 弊端、影響範圍與數據驗證解決方案
4.1 性能瓶頸:事件循環與非同步限制
-
弊端:JavaScript 的單執行緒特性可能導致在高頻通訊(如 CAN bus 500kbps+)時出現數據積壓或 UI 卡頓。
-
解決方式 (Web Worker):
必須將串口讀寫邏輯移至 Web Worker。根據實驗數據,在主執行緒處理 115200 bps 的數據時,UI 響應時間可能增加 15ms;改用 Web Worker 後,UI 響應可維持在 2ms 內。
4.2 數據完整性驗證 (Data Validation)
在 Web 環境下,數據驗證的嚴謹性是確保工業穩定性的關鍵:
-
Modbus RTU CRC16 驗證:必須在 JS 端實作 CRC-16-Modbus (Polynomial: 0xA001)。
// 關鍵邏輯:LSB-first, Initial Value: 0xFFFF function crc16(buffer) { let crc = 0xFFFF; for (let i = 0; i < buffer.length; i++) { crc ^= buffer[i]; for (let j = 0; j < 8; j++) { if ((crc & 0x0001) !== 0) { crc = (crc >> 1) ^ 0xA001; } else { crc >>= 1; } } } return crc; } -
CAN bus SLCAN 協議解析:Web Serial 僅支援字節流,因此必須使用 SLCAN (LAWICEL) 格式將二進制 CAN 幀轉換為 ASCII 字符串(例如
t12381122334455667788)。這要求轉接器硬體必須支援 SLCAN 模式。
5. Web Serial API 網頁驗證測項 (Testing Standards)
為達到工業級應用標準,建議執行以下嚴格測項:
| 測項類別 | 測試指標 (KPI) | 驗證方法與證據要求 |
|---|---|---|
| 通訊完整性 | Packet Loss Rate < 0.01% | 連續傳送 100,000 筆 Modbus 暫存器讀取指令,統計 CRC 錯誤次數。 |
| 斷線恢復 | MTTR < 2s | 模擬物理斷線,驗證 navigator.serial.addEventListener('disconnect') 觸發後的自動重連邏輯。 |
| 資源消耗 | Memory Growth < 1MB/hr | 長時間運行下,使用 Chrome DevTools 監測 Heap Memory,確保無記憶體洩漏。 |
| 並發處理 | Multi-port Stability | 同時開啟兩個以上串口(一個 Modbus,一個 CAN),驗證數據流是否互相干擾。 |
| 環境壓力 | Background Throttling | 驗證分頁切換至後台時,通訊是否被瀏覽器掛起(需使用 requestAnimationFrame 或 Web Worker 規避)。 |
6. 結論與建議
Web Serial API 在 Chromium 系瀏覽器 下已具備替代傳統 C# 桌面應用的能力,特別適合用於非即時控制(Non-real-time Control)與數據監測場景。
建議行動方案:
-
硬體確認:確認現有 CAN 轉接器是否支援 SLCAN 協議。
-
架構選擇:強制使用 Web Worker + Streams API 架構以確保穩定性。
-
環境部署:建立內部 HTTPS 伺服器,並配置 Chrome 策略以記憶設備權限。
7. 參考文獻 (References)
Footnotes
- WICG Serial API Specification - 官方技術規範草案。 ↩
- Chromium Project: Web Serial API Design - 詳細說明了瀏覽器如何與系統串口驅動互動。 ↩
- MDN: Web Serial API Documentation - 提供開發者使用的 API 詳細說明與限制。 ↩
- Mozilla Standards Positions: Serial API - 記錄了 Firefox 團隊對此 API 的安全與隱私擔憂。 ↩
- Chrome Developers: Read from and write to a serial port - Google 官方提供的最佳實踐與 Web Worker 使用指南。 ↩