鲲鹏恒控 · 程序集使用手册

面向开发者 / 集成商。本手册讲清楚鲲鹏恒控后端由哪些 .NET 程序集(assembly)组成、各自负责什么、公开的入口类型怎么调、彼此如何搭起来。

目标框架:net8.0(WPF 壳 Hmi.Shell 为 net8.0-windows)。解决方案:FangLikong.sln。全部程序集源码在 src/,对应测试在 tests/。


一、程序集分层一览

从下往上分四层,上层引用下层、下层从不反向依赖:

┌─ 宿主 / 集成层 ──────────────────────────────────────────────┐
│  Hmi.Shell(WPF+WebView2)  Hmi.HostBridge(Web 消息路由)       │
│  Hmi.Mcp.Host(MCP 服务器)  Hmi.RuntimeCore.Host(运行内核进程) │
├─ 组合层 ─────────────────────────────────────────────────────┤
│  Hmi.Automation(组态+感知统一 API)   Hmi.Backend(运行数据引擎)│
│  Hmi.ScriptRuntime(运行时脚本宿主)                            │
├─ 领域库层 ───────────────────────────────────────────────────┤
│  Hmi.Project  Hmi.Drivers  Hmi.Scripting                      │
│  Hmi.Historian  Hmi.Alarms  Hmi.Security                      │
├─ 内核层 ─────────────────────────────────────────────────────┤
│  Hmi.Core(实时库 RTDB + 点模型 + 订阅分发)                    │
└──────────────────────────────────────────────────────────────┘
       Hmi.Supervisor(进程监督者,自成一体,无 Hmi.* 依赖)

两个"独立户":Hmi.Security 和 Hmi.Supervisor 都不依赖任何 Hmi.*,可单独取用。


二、各章导航

章节 涵盖程序集 你什么时候看它
01 内核与工程模型 Hmi.Core、Hmi.Project 要读写实时点值、加载/保存工程文件
02 驱动通信与运行数据引擎 Hmi.Drivers、Hmi.Backend 要接 PLC、跑采集、写自定义协议插件
03 脚本引擎与运行时脚本宿主 Hmi.Scripting、Hmi.ScriptRuntime 要编译/运行用户脚本、接函数库
04 历史库与报警引擎 Hmi.Historian、Hmi.Alarms 要记历史、做限值/开关量报警
05 安全账号与权限 Hmi.Security 要做登录、角色、权限分级
06 自动化 API Hmi.Automation 集成的主入口:组态 + 感知统一调用
07 宿主与进程 HostBridge、Mcp.Host、RuntimeCore.Host、Supervisor、Shell 要嵌前端、开 MCP、管子进程

三、三条典型集成路线

A. 我要在自己的程序里读工程、改组态(不碰运行) → 只用 Hmi.Automation。ProjectAutomation.Open(dir) 拿到统一 API,组态类方法改工程、感知类方法读工程,Save() 落盘。这是最省事的一条,详见第 06 章。

B. 我要把工程真正跑起来(连 PLC、出实时值) → Hmi.Backend.RuntimeHost 建实时库 + 跑采集;要历史/报警/脚本再叠 Hmi.ScriptRuntime.RuntimeDataServices.Compose(...)。详见第 02、03、04 章。

C. 我要给外部 AI(Claude/Cursor)开一个组态入口 → 直接跑 Hmi.Mcp.Host 这个 exe,指向工程目录,stdio 或 http 两种传输。详见第 07 章。


四、一条不可逾越的边界

Hmi.Automation / MCP / HostBridge 对外只暴露组态(改工程 JSON,可逆)+ 感知(只读),绝不暴露运行态写值 / PLC 下发。即便脚本运行时,RuntimeWriteGate 也只放行内部变量、挡住通道/PLC 点的脚本侧写入。把这条边界记牢 —— 它贯穿所有上层程序集。