專案能力邊界與平台化需求地圖

返回文件首頁

專案能力邊界與平台化需求地圖

本文件整理「智慧設備順序控制系統共用骨架」目前已具備的能力、部分具備的能力、尚未具備的能力,以及第一階段、第二階段與後續平台化的邊界。

本文件只做需求對照與階段地圖,不直接修改程式碼、資料模型、API、設定檔格式、資料庫欄位或專案啟動方式。

第一階段控制核心已完成
第二階段資料庫與 Schema 自動化進行中
第三階段API / Service / Plugin 尚未開始
核心需求已用已符合 / 部分符合 / 尚未符合標記

讀這份文件要回答的問題

問題回答位置
目前專案已經能做到什麼?第一階段已完成能力、第二階段進行中能力
我的需求是否有被包含?需求符合度總覽
哪些是現在已完成,哪些只是後續規劃?已符合 / 部分符合 / 尚未符合
一台主機管理多個設備單元是否可行?多設備單元共用控制主機需求
接下來要補什麼才會變成正式平台?建議階段地圖與建議下一步

總體定位

本專案不是一次完成完整平台,而是分階段建立:

  1. 可驗證的設備順序控制核心。
  2. 可追蹤、可持久化、可由 C# class 維護 schema 的資料基礎。
  3. 可由 API / ServiceHost / Plugin 擴充成正式執行平台。
  4. 可支援多設備單元、多工作站、現場維運與管理工具。

第一階段已完成能力

能力目前狀態說明
Workflow 順序控制已完成可依 WorkflowDefinition 執行節點、重試、失敗轉移與條件轉移。
JSON 設定流程已完成workflows.json / devices.json / appsettings.json 可設定流程與設備命令。
Config Loader / Mapper / Validator已完成可載入設定、跨檔驗證與輸出可讀錯誤。
Adapter 抽象已完成透過 IDeviceAdapter 操作設備,不讓 Core 直接碰硬體。
Mock Adapter已完成可不接硬體驗證流程。
Modbus TCP Adapter 第一版已完成已完成 PoC、設定映射、錯誤處理與 RecoveryPolicy。
Adapter Data 承接已完成Workflow / Log 可承接 Data、RawRequest、RawResponse、Metadata。
Task 追蹤已完成可記錄任務、節點歷程與近期任務摘要。
ConsoleHost 驗證入口已完成可用 ConsoleHost 執行代表流程與人工驗證。
文件網站 / 進度同步已完成文件 repo 可發布到 Cloudflare Pages 並顯示開發進度。

第二階段進行中能力

能力目前狀態說明
MySQL Schema Attribute已完成第一批可由 C# class 維護 table / column / index 描述。
SQL Generator已完成可依 SchemaDefinition 產生 MySQL SQL。
Schema Dry Run已完成可比對 expected / current schema,先不執行 DDL。
Schema Inspector 抽象已完成已有 ISchemaInspector 與 Mock inspector。
MySQL helper已完成純程式 helperQuery Builder、metadata mapper、snapshot assembler 已完成,但尚未連 DB。
真實 MySQL provider規劃中尚未導入 MySqlConnector,尚未讀取真實 information_schema
MySQL TaskStore尚未開始任務歷程尚未持久化到 MySQL。

第二階段完成後,預期可做到:

需求符合度總覽

符合度定義
已符合目前程式碼、設定、測試或人工驗證已可支撐此能力。
部分符合核心基礎已具備,但正式平台層、管理層、營運層或現場安全機制尚未完成。
尚未符合目前只有規劃或抽象基礎,尚未有對應實作入口。
不納入本階段已明確排除在目前階段外,不應視為缺漏。
使用者需求符合度已完成階段 / 目前完成內容尚未完成內容建議補齊階段
程式邏輯、設備動作可用 JSON 或其他工具編程,不影響核心部分符合第一階段已完成 JSON 設定流程、workflows.jsondevices.json、Config Loader / Mapper / Validator、Workflow 條件轉移與 Adapter 抽象。圖形化流程工具、設定版本控管、設定審核、熱更新、設定回滾尚未完成。第三 / 四階段
使用 API 呼叫,Server 機可控制設備狀態及知道設備狀態尚未符合第一階段已完成 Workflow / Adapter / Task / Log 基礎;第二階段正在補 MySQL 與 TaskStore 持久化基礎。WebApi 專案、API contract、認證授權、任務啟動 / 查詢 / 取消 API、設備狀態 API 尚未完成。第三階段
控制端可透過 Service 掌握設備順序控制或控制裝置尚未符合第一階段已有 ConsoleHost 驗證入口與 TaskEngine,可證明核心流程可執行。ServiceHost、背景常駐、任務佇列、排程、重啟恢復、服務健康狀態尚未完成。第三階段
裝置可動態載入外部 DLL,例如馬達通訊、顯示面板刷新控制尚未符合第一階段已完成 IDeviceAdapter 抽象,具備未來擴充 Adapter 的基礎。Plugin Loader、DLL 掃描、版本控管、相依套件隔離、載入失敗處理、安全限制尚未完成。第三階段
一台控制主機管理多個設備單元,例如藥櫃、顯示面板、馬達模組、RFID 區域、燈號區域、工作站或其他設備單元部分符合第一階段已有 DeviceId、Adapter Dispatcher、Workflow 節點綁定設備、Log 記錄 DeviceId,可支撐多設備命令。邏輯控制單元識別、單元層級任務 / Log / API、共享 Adapter 仲裁、Resource Lock、Command Queue、單站 / 全站急停尚未完成。第三階段
MySQL 任務歷程與設備結果持久化部分符合第二階段已完成 Schema Attribute、SQL Generator、Dry Run、Schema Inspector 抽象與 MySQL helper。真實 MySQL provider、MySqlConnector、TaskStore 實作、真實 DB 驗證尚未完成。第二階段後段

階段完成內容對照

階段對平台需求的貢獻完成判斷
第一階段:控制核心已完成可設定化順序控制核心,包含 JSON 設定、Workflow、Adapter 抽象、Mock / Modbus TCP 第一版、Log、Task 追蹤與 ConsoleHost 驗證。已完成,支撐平台化的核心骨架。
第二階段:資料庫與 Schema 自動化補上 MySQL schema 自動化與任務持久化基礎,讓後續 API / Service 可查詢任務歷程與設備結果。進行中。
第三階段:正式執行平台補上 WebApi、ServiceHost、Device Status、Task Control、Plugin DLL、多設備單元控制、Resource Lock 與 Command Queue。尚未開始。
第四階段:現場工具與管理補上流程編輯器、設備管理、設定版本、權限、部署、監控與現場維運工具。尚未開始。

多設備單元共用控制主機需求

使用者提出的成本最佳化情境,不限於調劑台,也可套用到藥櫃、顯示面板、馬達模組、秤重模組、RFID 區域、燈號區域、工作站或其他設備單元:

一台控制主機或控制設備,同時管理多個獨立設備單元。

建議設計方向不是「一台設備有多個控制核心」,而是:

DeviceControlService
  ├─ Control Unit 01
  ├─ Control Unit 02
  ├─ Control Unit 03
  └─ Control Unit 04
        ↓
  Shared Adapter / PLC / IO / DLL / Device Channel
        ↓
  實體設備或共用控制器

必要能力

能力說明
ControlUnitId / StationId每個設備單元需有獨立識別,例如 CABINET_01PANEL_01MOTOR_GROUP_01;不建議使用 UnitId,避免與 Modbus UnitId 混淆。
Unit-level Workflow每個設備單元可各自執行流程。
Unit-level Task每個設備單元需有自己的任務狀態與節點歷程。
Unit-level LogLog 必須記錄 ControlUnitId / StationId,避免多單元資料混在一起。
Shared Adapter多個設備單元可共用同一 PLC / 控制器 / DLL adapter。
Resource Lock同一硬體資源同時間只能被一個設備單元使用。
Command Queue多設備單元同時下命令時需排隊或仲裁。
Unit StatusAPI / Service 需可查單一設備單元狀態與整體總覽。
Emergency Stop需支援單站急停與全站急停。

建議設定概念

{
  "controlUnits": [
    {
      "controlUnitId": "CABINET_01",
      "displayName": "藥櫃區 1",
      "unitType": "Cabinet",
      "devices": ["LIGHT_01", "LOCK_01", "SENSOR_01"]
    },
    {
      "controlUnitId": "PANEL_01",
      "displayName": "電子紙面板區 1",
      "unitType": "DisplayPanel",
      "devices": ["EPAPER_PANEL_01", "RFID_01"]
    }
  ]
}

若底層共用同一台 PLC,可用命令設定區分 channel / register range:

PLC_MAIN
  CABINET_01 -> register 1000-1099
  CABINET_02 -> register 1100-1199
  PANEL_01   -> register 1200-1299
  MOTOR_01   -> register 1300-1399

主要風險

風險建議
單點故障一台主機故障會影響多個設備單元,需規劃備援或快速替換。
指令互搶共用 PLC / IO / 馬達時必須有 Resource Lock。
Log 混亂每筆任務、節點、設備命令需記錄 ControlUnitId / StationId
維修影響單一設備單元維修時,不應讓其他設備單元無法運作。
效能瓶頸需評估多設備單元同時操作時的通訊延遲與命令佇列。
安全停機需定義單站急停與全站急停優先權。

建議補強的延伸需求

延伸需求建議階段原因
權限與操作身分第三階段API 控制設備需知道誰啟動、取消、改設定。
任務排程與佇列第三階段多個控制請求同時進來時需排隊、拒絕、取消或合併。
設備狀態快取與心跳第三階段API 查狀態不宜每次都打真實設備。
Plugin / DLL 安全規格第三階段外部 DLL 需處理版本、相依套件、載入失敗與隔離。
設定版本與發布流程第三階段JSON 流程一改會影響設備動作,需審核與回滾。
現場人工介入機制第三 / 四階段設備卡住或 Sensor 異常時需人工確認、略過、重試、停機。
多設備單元共用控制主機第三階段降低硬體成本,但需控制單元識別、鎖定、佇列與狀態隔離。

建議階段地圖

階段名稱主要目標
第一階段控制核心Workflow、Adapter、Config、Log、Task、ConsoleHost、Modbus TCP 第一版。
第二階段資料庫與 Schema 自動化MySQL、TaskStore、Schema Attribute、SQL Generator、Dry Run、Inspector。
第三階段正式執行平台WebApi、ServiceHost、Device Status、Task Control、Plugin DLL、多設備單元。
第四階段現場工具與管理流程編輯器、設備管理、權限、部署、監控、維運工具。

建議結論

目前第一、第二階段方向可以保留,不建議把 API、Service、Plugin DLL、多設備單元控制一次塞進第二階段。

  1. 第二階段先完成 MySQL provider、TaskStore 與 schema 自動化。
  2. 第三階段正式啟動平台化設計,加入 API、ServiceHost、Plugin Loader 與多設備單元模型。
  3. 多設備單元共用控制主機應作為第三階段核心需求之一,而不是臨時補丁。

建議下一步

建議下一步依本頁內容調整文件首頁,讓首頁直接看到:

返回文件首頁