2026-09-06 夜间任务执行依据。目标:不改变现有功能的前提下完成解耦重构 + 视觉三平台(Halcon/Vm/Vpp)算子模块化拆分 + 图层显示改造。 执行原则:新增优先、少动存量、每阶段独立可回滚。
| 层 | 定位 | 工程 | 现状 |
|---|---|---|---|
| 一、地基 | 流程画布/插件架子/公共变量/产品/数据库 | TeamAAS.FlowEngine(引擎+SDK)、TeamAAS.Database、GlobalVariableManager/ProductManager |
已有,需契约下沉 |
| 二、设备内核 | 统一接口+可拓展调试页 | TeamAAS.Camera/Robot/Communication/Feeder + 新增 TeamAAS.Motion |
相机等已有;Motion 新建 |
| 三、公共后勤 | 配方/日志路径/权限 | GlobalVariableManager(配方)、PluginLogger/PathHelper(日志)、用户权限 | 已有,归位整理 |
| 四、插件 | 任务节点(有/无UI)+硬件调试页 | TeamAAS.Plugins\*(含新的视觉子目录体系) |
已有,视觉拆分是本次重点 |
| 五、UI | 客户向组装壳 | TeamAAS(主程序) |
已有,导航元数据化 |
分布式约束:本夜只保证「接口化 + 去静态耦合」的扩展点,不实现跨机通信。
TeamAAS.Plugins\
Plugins.Halcon\ → 拆分后仅保留: 引擎(HalconEngine)、流程容器(HalconFlowPlugin)、
显示节点(HalconDisplayPlugin)、显示控件(Views)、运行时(Core/Models)、
分类调度注册(HalconNodeCatalog.cs 兼容旧显示名)
Plugins.Halcon.Vision\ → 新: 按功能拆分的算子 DLL(每类一个 csproj)
TeamAAS.Plugins.Halcon.ImageProcessing\ → 输出 Plugins.Halcon.ImageProcessing.dll(图像处理算子)
TeamAAS.Plugins.Halcon.Detection\ → Plugins.Halcon.Detection.dll(检测识别)
TeamAAS.Plugins.Halcon.Measurement\ → Plugins.Halcon.Measurement.dll(几何测量)
TeamAAS.Plugins.Halcon.Logic\ → Plugins.Halcon.Logic.dll(逻辑判断)
Plugins.Vm / Plugins.Vpp → 同样模式(Vm.Vision / Vpp.Vision 下按功能分 DLL)
Plugins.<平台>.<功能>.dll,平台 ∈ {Halcon, Vm, Vpp};功能段对齐 VisionPlugin 枚举:ImageProcessing / Detection / Measurement / Calibration / DeepLearning / Logic / Other。Runtime\Plugins\**\Plugins.*.dll(含子目录)。部署布局:
Runtime\Plugins\HalconPlugins\*.dll、Runtime\Plugins\VmPlugins\*.dll、Runtime\Plugins\VppPlugins\*.dll(csproj 后处理复制到对应子目录)。DisplayName 索引。拆分后的算子保持显示名不变(如 “H阈值分割”),旧流程文件零影响;同名算子从 Plugins.Halcon 主 DLL 移除,避免双注册。现状:HalconEditorPreview.Show(image, overlay) → 单一 HalconWindow(挂编辑器 RightTopContent,高 300 固定)。
问题:窗口小、无图层、多节点相互覆盖、内存易堆积。
改造(新增 VisionLayerStore,三平台共用语义):
节点 PluginRun 完成
└─ VisionLayerStore.Publish(flowId, nodeName, [LayerItem{ 名称, HObject/GenImage, 类型(图像/区域/XLD/轮廓), 颜色 }], runStamp)
└─ 只保留当前 runStamp 的图层(新一次运行自动清旧层并 Dispose)
编辑器
└─ HalconFlowEditorView: 运行状态/信息条区域替换为大显示窗(默认高度自适应,可双击放大)
+ 底部 ComboBox 图层筛选(全部 / 底图 / 各节点图层名)
+ 画布点选节点 → 自动切换显示该节点图层
主页(生产)
└─ 显示节点语义不变(推 UCDispHalcon 画面框),仅接受 LayerStore 的新输出,不叠加历史
LayerItem 持有对象的所有权标记(owned),Publish 时 Dispose 上一 runStamp 的 owned 项;编辑器关闭时 Clear。规则与现有 HalconWindow 一致:流程内 HObject 归注册表所有绝不误放。[Button("高级编辑", nameof(OpenAdvancedEditor))] + PropertyGrid.GlobalButtonClicked。VmToolBlockEditView / VppToolBlockEditView,以 PluginViewDialog 承载)。Halcon 无需按钮(参数已全属性化)。TeamAAS.Core\TeamAAS.SDK(net48、无 WPF):
IPluginContext(GetService/GetDevice/Log)—— 插件将来通过上下文取服务,替代直接摸单例
ICameraService/IRobotService/ICommunicationService/IFeederService/IMotionDeviceService(签名对齐现有 Manager)Vision/ILayerPublisher(视觉图层发布契约,供 2.2 使用)Directory.GetFiles(pluginsPath, "*.dll", AllDirectories) + 保持 Plugins.* 前缀过滤。Plugins.Halcon.<功能>,显示名不变);Plugins.Halcon 主工程删除已迁出代码并引用 4 个新工程(保持单 DLL 部署兼容:主工程引用后仍输出到 Plugins 目录即可,部署子目录化作为后续 PostBuild 调整)。VisionLayerStore + HalconWindow 图层显示(多对象分层渲染、颜色区分、Combo 筛选)+ HalconFlowEditorView 布局改造(大预览 + 点选节点联动)。TeamAAS.Core\TeamAAS.Motion:IMotionCard(使能/回零/点动/定长/IO)、IIOCard(GR20T-ECT-1616ETN 16in/16out 批量读写)、MotionManager(配置加载/设备生命周期)、调试页契约(复用设备调试页模式)、内置 仿真实现(无 SDK 环境可跑通全流程);雷赛/固高/IMC60G 适配器留接口位(SDK DLL 到位后实现)。D:\Team\Program\TeamAAS-2.0 生产流程评估硬件节点缺口(若该目录可读)。feature/modularization 分支。Docs/NIGHT_LOG.md 记录遗留与风险。Plugins.Halcon\HalconSdk\(自动引用);Vm/Vpp 同模式(VmSdk 等)。TeamAAS.FlowEngine(Interfaces/Plugins 目录):IFlowNodePlugin/BasePlugin/BasePluginModel/PluginAttribute/IPluginLoader + IPluginViewSave/RunFeedback/ViewTip。
Plugins.*.dll 前缀,目前仅扫顶层 → 阶段1改递归。[Button(text, action)] + PropertyGrid.GlobalButtonClicked = 高级编辑按钮的现成机制。D:\Demo\01_Sourse\VM:老式 VM 风格工程,02Plugins 按 001图像处理/002检测识别/... 编号目录放插件,共享 03ThirdPartyDll\VM.Halcon(HWndCtrl+ROI 图层封装,275KB 已编译 DLL 在 00Exe)。其 HObjectEntry/GraphicsContext 图层模型可借鉴。