鲲鹏恒控 · 程序集使用手册
面向开发者 / 集成商。本手册讲清楚鲲鹏恒控后端由哪些 .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 点的脚本侧写入。把这条边界记牢 —— 它贯穿所有上层程序集。