<mxfile host="Electron" modified="2026-09-10T00:00:00.000Z" agent="Codex" version="24.7.17" type="device">
  <diagram id="tap-overview" name="01-总体分层结构">
    <mxGraphModel dx="1680" dy="1188" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1680" pageHeight="1188" math="0" shadow="0" background="#FFFFFF">
      <root>
        <mxCell id="0"/>
        <mxCell id="1" parent="0"/>
        <mxCell id="p1_title" value="TapProject 代码总体分层结构" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Microsoft YaHei;fontSize=18;fontStyle=1;fontColor=#17365D;" vertex="1" parent="1"><mxGeometry x="60" y="20" width="1180" height="36" as="geometry"/></mxCell>
        <mxCell id="p1_subtitle" value="静态源码快照：45 个内部工程｜.NET Framework 4.7.2｜实线＝运行/承载链路，灰色虚线＝编译或框架依赖" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Microsoft YaHei;fontSize=11;fontColor=#666666;" vertex="1" parent="1"><mxGeometry x="60" y="56" width="1500" height="24" as="geometry"/></mxCell>
        <mxCell id="p1_host_layer" value="WPF 宿主与启动层" style="swimlane;horizontal=1;startSize=36;rounded=1;whiteSpace=wrap;html=1;fillColor=#F4F8FC;strokeColor=#7EA6D8;strokeWidth=1.5;fontFamily=Microsoft YaHei;fontSize=14;fontStyle=1;fontColor=#17365D;" vertex="1" parent="1"><mxGeometry x="60" y="95" width="1560" height="185" as="geometry"/></mxCell>
        <mxCell id="p1_app" value="&lt;b&gt;App / TestPlatform&lt;/b&gt;&lt;br&gt;单实例、日志、语言、资源&lt;br&gt;程序集解析与启动" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#D9EAF7;strokeColor=#5B9BD5;strokeWidth=1.5;fontFamily=Microsoft YaHei;fontSize=11;fontColor=#17365D;spacing=8;" vertex="1" parent="1"><mxGeometry x="95" y="145" width="285" height="95" as="geometry"/></mxCell>
        <mxCell id="p1_login" value="&lt;b&gt;Login + UserInfo&lt;/b&gt;&lt;br&gt;SQLite 用户/角色/菜单&lt;br&gt;生成权限上下文" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#D9EAF7;strokeColor=#5B9BD5;strokeWidth=1.5;fontFamily=Microsoft YaHei;fontSize=11;fontColor=#17365D;spacing=8;" vertex="1" parent="1"><mxGeometry x="425" y="145" width="285" height="95" as="geometry"/></mxCell>
        <mxCell id="p1_loader" value="&lt;b&gt;LoadingWindow + PluginLoader&lt;/b&gt;&lt;br&gt;权限菜单树、反射装载 DLL&lt;br&gt;注入日志/配置并初始化" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#D9EAF7;strokeColor=#5B9BD5;strokeWidth=1.5;fontFamily=Microsoft YaHei;fontSize=11;fontColor=#17365D;spacing=8;" vertex="1" parent="1"><mxGeometry x="755" y="145" width="320" height="95" as="geometry"/></mxCell>
        <mxCell id="p1_host" value="&lt;b&gt;PanuonWindow + MainTabControl&lt;/b&gt;&lt;br&gt;IPluginContainer、菜单与页签承载&lt;br&gt;Active / DeActive / Close 生命周期" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#D9EAF7;strokeColor=#5B9BD5;strokeWidth=1.5;fontFamily=Microsoft YaHei;fontSize=11;fontColor=#17365D;spacing=8;" vertex="1" parent="1"><mxGeometry x="1120" y="145" width="450" height="95" as="geometry"/></mxCell>
        <mxCell id="p1_plugin_layer" value="业务与功能插件层" style="swimlane;horizontal=1;startSize=36;rounded=1;whiteSpace=wrap;html=1;fillColor=#FFF9F0;strokeColor=#E6A23C;strokeWidth=1.5;fontFamily=Microsoft YaHei;fontSize=14;fontStyle=1;fontColor=#7F6000;" vertex="1" parent="1"><mxGeometry x="60" y="315" width="1560" height="300" as="geometry"/></mxCell>
        <mxCell id="p1_burnin" value="&lt;b&gt;老化主业务（核心）&lt;/b&gt;&lt;br&gt;&lt;br&gt;Plugin.BurnIn&lt;br&gt;炉体/穴位、扫码、PLC、MES&lt;br&gt;测试状态、曲线、SQLite/CSV&lt;br&gt;&lt;br&gt;Plugin.CurrentSensorControl&lt;br&gt;Plugin.DOControl / DODriverControl" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FCE4D6;strokeColor=#ED7D31;strokeWidth=2;fontFamily=Microsoft YaHei;fontSize=11;fontColor=#843C0C;spacing=10;" vertex="1" parent="1"><mxGeometry x="95" y="365" width="340" height="205" as="geometry"/></mxCell>
        <mxCell id="p1_test_plugins" value="&lt;b&gt;测试执行与编辑&lt;/b&gt;&lt;br&gt;&lt;br&gt;Plugin.TsExecution&lt;br&gt;Plugin.StandardTest&lt;br&gt;Plugin.TestPlanEditor&lt;br&gt;Plugin.SeqEditor&lt;br&gt;Util.ManualDebug" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFF2CC;strokeColor=#D6B656;strokeWidth=1.5;fontFamily=Microsoft YaHei;fontSize=11;fontColor=#7F6000;spacing=10;" vertex="1" parent="1"><mxGeometry x="470" y="365" width="340" height="205" as="geometry"/></mxCell>
        <mxCell id="p1_data_plugins" value="&lt;b&gt;数据、结果与报告&lt;/b&gt;&lt;br&gt;&lt;br&gt;Plugin.TestResult&lt;br&gt;Plugin.DataViewer / DataBoard&lt;br&gt;Plugin.QualityReport&lt;br&gt;HMI.DataViewer&lt;br&gt;HMI.LogViewer" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E2F0D9;strokeColor=#70AD47;strokeWidth=1.5;fontFamily=Microsoft YaHei;fontSize=11;fontColor=#375623;spacing=10;" vertex="1" parent="1"><mxGeometry x="845" y="365" width="340" height="205" as="geometry"/></mxCell>
        <mxCell id="p1_manage_plugins" value="&lt;b&gt;系统管理与其他插件&lt;/b&gt;&lt;br&gt;&lt;br&gt;Menu / Setting / Parameter&lt;br&gt;AlarmInfo / ModelManage&lt;br&gt;JarUI / UICollection&lt;br&gt;&lt;br&gt;菜单与用户权限决定实际装载集合" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E4DFEC;strokeColor=#8064A2;strokeWidth=1.5;fontFamily=Microsoft YaHei;fontSize=11;fontColor=#4C3768;spacing=10;" vertex="1" parent="1"><mxGeometry x="1220" y="365" width="350" height="205" as="geometry"/></mxCell>
        <mxCell id="p1_framework_layer" value="平台框架与公共能力层" style="swimlane;horizontal=1;startSize=36;rounded=1;whiteSpace=wrap;html=1;fillColor=#F5F5F5;strokeColor=#7F8C8D;strokeWidth=1.5;fontFamily=Microsoft YaHei;fontSize=14;fontStyle=1;fontColor=#37474F;" vertex="1" parent="1"><mxGeometry x="60" y="650" width="1560" height="200" as="geometry"/></mxCell>
        <mxCell id="p1_core" value="&lt;b&gt;HMI.Core&lt;/b&gt;&lt;br&gt;IPlugin 契约、实体、设置&lt;br&gt;Manager、SQLite、路径/语言" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E7E6E6;strokeColor=#7F8C8D;fontFamily=Microsoft YaHei;fontSize=11;fontColor=#37474F;spacing=8;" vertex="1" parent="1"><mxGeometry x="95" y="700" width="280" height="105" as="geometry"/></mxCell>
        <mxCell id="p1_base" value="&lt;b&gt;HMI.Base&lt;/b&gt;&lt;br&gt;PluginLoader&lt;br&gt;PluginControl / MaskControl" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E7E6E6;strokeColor=#7F8C8D;fontFamily=Microsoft YaHei;fontSize=11;fontColor=#37474F;spacing=8;" vertex="1" parent="1"><mxGeometry x="405" y="700" width="260" height="105" as="geometry"/></mxCell>
        <mxCell id="p1_ui" value="&lt;b&gt;HMI.UI / StdControl&lt;/b&gt;&lt;br&gt;公共控件、样式、转换器&lt;br&gt;WPF/WinForms 承载" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E7E6E6;strokeColor=#7F8C8D;fontFamily=Microsoft YaHei;fontSize=11;fontColor=#37474F;spacing=8;" vertex="1" parent="1"><mxGeometry x="695" y="700" width="280" height="105" as="geometry"/></mxCell>
        <mxCell id="p1_util" value="&lt;b&gt;HMI.Util + SimpleUtil&lt;/b&gt;&lt;br&gt;配置、日志、串口、MSMQ&lt;br&gt;序列化与通用数据访问" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E7E6E6;strokeColor=#7F8C8D;fontFamily=Microsoft YaHei;fontSize=11;fontColor=#37474F;spacing=8;" vertex="1" parent="1"><mxGeometry x="1005" y="700" width="280" height="105" as="geometry"/></mxCell>
        <mxCell id="p1_ts_support" value="&lt;b&gt;TsSupport / TapApi&lt;/b&gt;&lt;br&gt;ITestExecutionWrapper&lt;br&gt;TestStand / OpenTAP 适配" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E7E6E6;strokeColor=#7F8C8D;fontFamily=Microsoft YaHei;fontSize=11;fontColor=#37474F;spacing=8;" vertex="1" parent="1"><mxGeometry x="1315" y="700" width="255" height="105" as="geometry"/></mxCell>
        <mxCell id="p1_infra_layer" value="设备、通信、数据与外部系统" style="swimlane;horizontal=1;startSize=36;rounded=1;whiteSpace=wrap;html=1;fillColor=#F2F8F8;strokeColor=#4F9DA6;strokeWidth=1.5;fontFamily=Microsoft YaHei;fontSize=14;fontStyle=1;fontColor=#1F4E5F;" vertex="1" parent="1"><mxGeometry x="60" y="890" width="1560" height="250" as="geometry"/></mxCell>
        <mxCell id="p1_plc_adapter" value="&lt;b&gt;PLC 适配&lt;/b&gt;&lt;br&gt;PLCHelper / S7Driver" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DDEBF7;strokeColor=#5B9BD5;fontFamily=Microsoft YaHei;fontSize=11;spacing=8;" vertex="1" parent="1"><mxGeometry x="100" y="945" width="300" height="65" as="geometry"/></mxCell>
        <mxCell id="p1_plc_ext" value="西门子 S7 PLC / 老化炉控制器" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#5B9BD5;dashed=1;fontFamily=Microsoft YaHei;fontSize=11;" vertex="1" parent="1"><mxGeometry x="100" y="1045" width="300" height="55" as="geometry"/></mxCell>
        <mxCell id="p1_comm_adapter" value="&lt;b&gt;通信与 I/O&lt;/b&gt;&lt;br&gt;OPC / Modbus TCP / DIO / TCP / Serial" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DDEBF7;strokeColor=#5B9BD5;fontFamily=Microsoft YaHei;fontSize=11;spacing=8;" vertex="1" parent="1"><mxGeometry x="480" y="945" width="300" height="65" as="geometry"/></mxCell>
        <mxCell id="p1_comm_ext" value="扫码器、传感器、板卡与网络设备" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#5B9BD5;dashed=1;fontFamily=Microsoft YaHei;fontSize=11;" vertex="1" parent="1"><mxGeometry x="480" y="1045" width="300" height="55" as="geometry"/></mxCell>
        <mxCell id="p1_exec_adapter" value="&lt;b&gt;测试执行适配&lt;/b&gt;&lt;br&gt;TapWrapper / TeststandWrapper" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DDEBF7;strokeColor=#5B9BD5;fontFamily=Microsoft YaHei;fontSize=11;spacing=8;" vertex="1" parent="1"><mxGeometry x="860" y="945" width="300" height="65" as="geometry"/></mxCell>
        <mxCell id="p1_exec_ext" value="NI TestStand / OpenTAP（外部源工程当前缺失）" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFF2CC;strokeColor=#C9A227;dashed=1;fontFamily=Microsoft YaHei;fontSize=11;" vertex="1" parent="1"><mxGeometry x="860" y="1045" width="300" height="55" as="geometry"/></mxCell>
        <mxCell id="p1_data_adapter" value="&lt;b&gt;数据与企业集成&lt;/b&gt;&lt;br&gt;SQLite / CSV / Config / Log / HTTP" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DDEBF7;strokeColor=#5B9BD5;fontFamily=Microsoft YaHei;fontSize=11;spacing=8;" vertex="1" parent="1"><mxGeometry x="1240" y="945" width="300" height="65" as="geometry"/></mxCell>
        <mxCell id="p1_data_ext" value="本地文件与数据库 / MES 服务" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#5B9BD5;dashed=1;fontFamily=Microsoft YaHei;fontSize=11;" vertex="1" parent="1"><mxGeometry x="1240" y="1045" width="300" height="55" as="geometry"/></mxCell>
        <mxCell id="p1_e1" value="启动" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#1F4E79;strokeWidth=2;fontFamily=Microsoft YaHei;fontSize=10;labelBackgroundColor=#FFFFFF;" edge="1" parent="1" source="p1_app" target="p1_login"><mxGeometry relative="1" as="geometry"/></mxCell>
        <mxCell id="p1_e2" value="登录成功" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#1F4E79;strokeWidth=2;fontFamily=Microsoft YaHei;fontSize=10;labelBackgroundColor=#FFFFFF;" edge="1" parent="1" source="p1_login" target="p1_loader"><mxGeometry relative="1" as="geometry"/></mxCell>
        <mxCell id="p1_e3" value="装载完成" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#1F4E79;strokeWidth=2;fontFamily=Microsoft YaHei;fontSize=10;labelBackgroundColor=#FFFFFF;" edge="1" parent="1" source="p1_loader" target="p1_host"><mxGeometry relative="1" as="geometry"/></mxCell>
        <mxCell id="p1_e4" value="承载与切换" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#1F4E79;strokeWidth=2;fontFamily=Microsoft YaHei;fontSize=10;labelBackgroundColor=#FFFFFF;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" edge="1" parent="1" source="p1_host" target="p1_plugin_layer"><mxGeometry relative="1" as="geometry"/></mxCell>
        <mxCell id="p1_e5" value="插件契约与公共能力" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;endArrow=open;endFill=0;strokeColor=#808080;strokeWidth=1.5;dashed=1;fontFamily=Microsoft YaHei;fontSize=10;labelBackgroundColor=#FFFFFF;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" edge="1" parent="1" source="p1_plugin_layer" target="p1_framework_layer"><mxGeometry relative="1" as="geometry"/></mxCell>
        <mxCell id="p1_e6" value="适配与持久化" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;endArrow=open;endFill=0;strokeColor=#808080;strokeWidth=1.5;dashed=1;fontFamily=Microsoft YaHei;fontSize=10;labelBackgroundColor=#FFFFFF;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" edge="1" parent="1" source="p1_framework_layer" target="p1_infra_layer"><mxGeometry relative="1" as="geometry"/></mxCell>
        <mxCell id="p1_e7" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#4F9DA6;strokeWidth=1.5;" edge="1" parent="1" source="p1_plc_adapter" target="p1_plc_ext"><mxGeometry relative="1" as="geometry"/></mxCell>
        <mxCell id="p1_e8" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#4F9DA6;strokeWidth=1.5;" edge="1" parent="1" source="p1_comm_adapter" target="p1_comm_ext"><mxGeometry relative="1" as="geometry"/></mxCell>
        <mxCell id="p1_e9" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#4F9DA6;strokeWidth=1.5;" edge="1" parent="1" source="p1_exec_adapter" target="p1_exec_ext"><mxGeometry relative="1" as="geometry"/></mxCell>
        <mxCell id="p1_e10" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#4F9DA6;strokeWidth=1.5;" edge="1" parent="1" source="p1_data_adapter" target="p1_data_ext"><mxGeometry relative="1" as="geometry"/></mxCell>
      </root>
    </mxGraphModel>
  </diagram>
  <diagram id="tap-runtime" name="02-运行时与老化主链路">
    <mxGraphModel dx="1680" dy="1188" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1680" pageHeight="1188" math="0" shadow="0" background="#FFFFFF">
      <root>
        <mxCell id="0"/>
        <mxCell id="1" parent="0"/>
        <mxCell id="p2_title" value="TapProject 运行时装载与老化测试主链路" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Microsoft YaHei;fontSize=18;fontStyle=1;fontColor=#17365D;" vertex="1" parent="1"><mxGeometry x="60" y="20" width="1300" height="36" as="geometry"/></mxCell>
        <mxCell id="p2_subtitle" value="关系来自 App/Login/PluginLoader/MainTabControl 与 Plugin.BurnIn、Plugin.TsSupport 的静态代码；部署配置和设备参数未联机验证" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Microsoft YaHei;fontSize=11;fontColor=#666666;" vertex="1" parent="1"><mxGeometry x="60" y="56" width="1500" height="24" as="geometry"/></mxCell>
        <mxCell id="p2_start_layer" value="A. 启动、认证与插件装载（从左到右）" style="swimlane;horizontal=1;startSize=36;rounded=1;whiteSpace=wrap;html=1;fillColor=#F4F8FC;strokeColor=#7EA6D8;strokeWidth=1.5;fontFamily=Microsoft YaHei;fontSize=14;fontStyle=1;fontColor=#17365D;" vertex="1" parent="1"><mxGeometry x="60" y="100" width="1560" height="335" as="geometry"/></mxCell>
        <mxCell id="p2_app" value="&lt;b&gt;App&lt;/b&gt;&lt;br&gt;单实例保护&lt;br&gt;日志/语言/资源初始化" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#D9EAF7;strokeColor=#5B9BD5;strokeWidth=1.5;fontFamily=Microsoft YaHei;fontSize=11;spacing=8;" vertex="1" parent="1"><mxGeometry x="90" y="175" width="215" height="105" as="geometry"/></mxCell>
        <mxCell id="p2_login" value="&lt;b&gt;Login&lt;/b&gt;&lt;br&gt;校验用户&lt;br&gt;查询角色与菜单权限" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#D9EAF7;strokeColor=#5B9BD5;strokeWidth=1.5;fontFamily=Microsoft YaHei;fontSize=11;spacing=8;" vertex="1" parent="1"><mxGeometry x="345" y="175" width="215" height="105" as="geometry"/></mxCell>
        <mxCell id="p2_user" value="&lt;b&gt;UserInfo&lt;/b&gt;&lt;br&gt;Permissions&lt;br&gt;AllPermissions" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#D9EAF7;strokeColor=#5B9BD5;strokeWidth=1.5;fontFamily=Microsoft YaHei;fontSize=11;spacing=8;" vertex="1" parent="1"><mxGeometry x="600" y="175" width="200" height="105" as="geometry"/></mxCell>
        <mxCell id="p2_loading" value="&lt;b&gt;LoadingWindow&lt;/b&gt;&lt;br&gt;AlarmUtil.Init&lt;br&gt;PluginLoader.LoadMenuAndPlugin" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#D9EAF7;strokeColor=#5B9BD5;strokeWidth=1.5;fontFamily=Microsoft YaHei;fontSize=11;spacing=8;" vertex="1" parent="1"><mxGeometry x="840" y="175" width="250" height="105" as="geometry"/></mxCell>
        <mxCell id="p2_reflect" value="&lt;b&gt;反射装载&lt;/b&gt;&lt;br&gt;Assembly.LoadFrom&lt;br&gt;Activator.CreateInstance" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#D9EAF7;strokeColor=#5B9BD5;strokeWidth=1.5;fontFamily=Microsoft YaHei;fontSize=11;spacing=8;" vertex="1" parent="1"><mxGeometry x="1130" y="175" width="220" height="105" as="geometry"/></mxCell>
        <mxCell id="p2_host" value="&lt;b&gt;PanuonWindow&lt;/b&gt;&lt;br&gt;MainTabControl&lt;br&gt;Active / DeActive / Close" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#D9EAF7;strokeColor=#5B9BD5;strokeWidth=1.5;fontFamily=Microsoft YaHei;fontSize=11;spacing=8;" vertex="1" parent="1"><mxGeometry x="1390" y="175" width="195" height="105" as="geometry"/></mxCell>
        <mxCell id="p2_sqlite" value="&lt;b&gt;SQLite database.db&lt;/b&gt;&lt;br&gt;user / role / menu / permission 关系" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E2F0D9;strokeColor=#70AD47;fontFamily=Microsoft YaHei;fontSize=11;spacing=8;" vertex="1" parent="1"><mxGeometry x="345" y="330" width="455" height="70" as="geometry"/></mxCell>
        <mxCell id="p2_start_e1" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#1F4E79;strokeWidth=2;" edge="1" parent="1" source="p2_app" target="p2_login"><mxGeometry relative="1" as="geometry"/></mxCell>
        <mxCell id="p2_start_e2" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#1F4E79;strokeWidth=2;" edge="1" parent="1" source="p2_login" target="p2_user"><mxGeometry relative="1" as="geometry"/></mxCell>
        <mxCell id="p2_start_e3" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#1F4E79;strokeWidth=2;" edge="1" parent="1" source="p2_user" target="p2_loading"><mxGeometry relative="1" as="geometry"/></mxCell>
        <mxCell id="p2_start_e4" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#1F4E79;strokeWidth=2;" edge="1" parent="1" source="p2_loading" target="p2_reflect"><mxGeometry relative="1" as="geometry"/></mxCell>
        <mxCell id="p2_start_e5" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#1F4E79;strokeWidth=2;" edge="1" parent="1" source="p2_reflect" target="p2_host"><mxGeometry relative="1" as="geometry"/></mxCell>
        <mxCell id="p2_start_e6" value="读取" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#70AD47;strokeWidth=1.5;fontFamily=Microsoft YaHei;fontSize=10;labelBackgroundColor=#FFFFFF;exitX=0.5;exitY=0;entryX=0.5;entryY=1;" edge="1" parent="1" source="p2_sqlite" target="p2_login"><mxGeometry relative="1" as="geometry"/></mxCell>
        <mxCell id="p2_burn_layer" value="B. Plugin.BurnIn 老化测试主链路" style="swimlane;horizontal=1;startSize=36;rounded=1;whiteSpace=wrap;html=1;fillColor=#FFF9F0;strokeColor=#E6A23C;strokeWidth=1.5;fontFamily=Microsoft YaHei;fontSize=14;fontStyle=1;fontColor=#7F6000;" vertex="1" parent="1"><mxGeometry x="60" y="470" width="1560" height="655" as="geometry"/></mxCell>
        <mxCell id="p2_burnin" value="&lt;b&gt;BurnInUI&lt;/b&gt;&lt;br&gt;老化炉/穴位编排&lt;br&gt;启动、停止、状态与告警" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FCE4D6;strokeColor=#ED7D31;strokeWidth=2;fontFamily=Microsoft YaHei;fontSize=11;fontColor=#843C0C;spacing=8;" vertex="1" parent="1"><mxGeometry x="90" y="545" width="260" height="115" as="geometry"/></mxCell>
        <mxCell id="p2_engine" value="&lt;b&gt;ITestExecutionWrapper&lt;/b&gt;&lt;br&gt;按序列扩展名选择引擎&lt;br&gt;.tapplan → OpenTAP" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFF2CC;strokeColor=#D6B656;strokeWidth=1.5;fontFamily=Microsoft YaHei;fontSize=11;fontColor=#7F6000;spacing=8;" vertex="1" parent="1"><mxGeometry x="420" y="545" width="255" height="115" as="geometry"/></mxCell>
        <mxCell id="p2_tap" value="&lt;b&gt;TapWrapper&lt;/b&gt;&lt;br&gt;TestPlanReader / Plan.Execute&lt;br&gt;StationGlobalsManager" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFF2CC;strokeColor=#D6B656;fontFamily=Microsoft YaHei;fontSize=11;spacing=8;" vertex="1" parent="1"><mxGeometry x="725" y="505" width="230" height="95" as="geometry"/></mxCell>
        <mxCell id="p2_ts" value="&lt;b&gt;TeststandWrapper&lt;/b&gt;&lt;br&gt;NI AxApplicationMgr&lt;br&gt;Sequence / StationGlobals" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFF2CC;strokeColor=#D6B656;fontFamily=Microsoft YaHei;fontSize=11;spacing=8;" vertex="1" parent="1"><mxGeometry x="725" y="625" width="230" height="95" as="geometry"/></mxCell>
        <mxCell id="p2_msg" value="&lt;b&gt;UIMessage 事件总线&lt;/b&gt;&lt;br&gt;EventCode 10014&lt;br&gt;方法码更新状态/计数/曲线/提示" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E4DFEC;strokeColor=#8064A2;strokeWidth=1.5;fontFamily=Microsoft YaHei;fontSize=11;fontColor=#4C3768;spacing=8;" vertex="1" parent="1"><mxGeometry x="1005" y="545" width="250" height="115" as="geometry"/></mxCell>
        <mxCell id="p2_cells" value="&lt;b&gt;DataTable / SingleCell&lt;/b&gt;&lt;br&gt;炉体与穴位模型&lt;br&gt;状态、条码、测量值、图表数据" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E2F0D9;strokeColor=#70AD47;strokeWidth=1.5;fontFamily=Microsoft YaHei;fontSize=11;fontColor=#375623;spacing=8;" vertex="1" parent="1"><mxGeometry x="1310" y="545" width="260" height="115" as="geometry"/></mxCell>
        <mxCell id="p2_config" value="&lt;b&gt;产品与运行配置&lt;/b&gt;&lt;br&gt;ParameterManager / ProductManager&lt;br&gt;Scanner.ini / Count.ini / 主序列" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E7E6E6;strokeColor=#7F8C8D;fontFamily=Microsoft YaHei;fontSize=11;spacing=8;" vertex="1" parent="1"><mxGeometry x="90" y="760" width="260" height="100" as="geometry"/></mxCell>
        <mxCell id="p2_plc" value="&lt;b&gt;PLCHelper.S7Context&lt;/b&gt;&lt;br&gt;BurnInControler&lt;br&gt;炉体、穴位与冷却状态读写" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DDEBF7;strokeColor=#5B9BD5;fontFamily=Microsoft YaHei;fontSize=11;spacing=8;" vertex="1" parent="1"><mxGeometry x="405" y="760" width="260" height="100" as="geometry"/></mxCell>
        <mxCell id="p2_scan" value="&lt;b&gt;扫码与 MES&lt;/b&gt;&lt;br&gt;SerialPort + 条码解析&lt;br&gt;HTTP 获取 PN / 过站校验" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DDEBF7;strokeColor=#5B9BD5;fontFamily=Microsoft YaHei;fontSize=11;spacing=8;" vertex="1" parent="1"><mxGeometry x="720" y="790" width="260" height="100" as="geometry"/></mxCell>
        <mxCell id="p2_output" value="&lt;b&gt;结果与可视化&lt;/b&gt;&lt;br&gt;SQLite / CSV / Count.ini&lt;br&gt;LiveCharts 曲线、测试结果与报警" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E2F0D9;strokeColor=#70AD47;fontFamily=Microsoft YaHei;fontSize=11;spacing=8;" vertex="1" parent="1"><mxGeometry x="1310" y="760" width="260" height="100" as="geometry"/></mxCell>
        <mxCell id="p2_ext_boundary" value="外部运行依赖：西门子 PLC｜串口扫码器｜MES HTTP 服务｜NI TestStand 或 OpenTAP 运行时。当前源码快照未包含 OpenTAP/UILib/UtilLib 外部源工程，且未做设备联机验证。" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFF2CC;strokeColor=#C9A227;dashed=1;fontFamily=Microsoft YaHei;fontSize=11;fontColor=#7F6000;spacing=10;align=left;" vertex="1" parent="1"><mxGeometry x="90" y="985" width="1480" height="80" as="geometry"/></mxCell>
        <mxCell id="p2_e1" value="初始化执行视图" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#C65911;strokeWidth=2;fontFamily=Microsoft YaHei;fontSize=10;labelBackgroundColor=#FFFFFF;" edge="1" parent="1" source="p2_burnin" target="p2_engine"><mxGeometry relative="1" as="geometry"/></mxCell>
        <mxCell id="p2_e2" value="OpenTAP" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#C65911;strokeWidth=1.5;fontFamily=Microsoft YaHei;fontSize=10;labelBackgroundColor=#FFFFFF;" edge="1" parent="1" source="p2_engine" target="p2_tap"><mxGeometry relative="1" as="geometry"/></mxCell>
        <mxCell id="p2_e3" value="其他序列" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#C65911;strokeWidth=1.5;fontFamily=Microsoft YaHei;fontSize=10;labelBackgroundColor=#FFFFFF;" edge="1" parent="1" source="p2_engine" target="p2_ts"><mxGeometry relative="1" as="geometry"/></mxCell>
        <mxCell id="p2_e4" value="统一事件" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#8064A2;strokeWidth=1.5;fontFamily=Microsoft YaHei;fontSize=10;labelBackgroundColor=#FFFFFF;" edge="1" parent="1" source="p2_tap" target="p2_msg"><mxGeometry relative="1" as="geometry"/></mxCell>
        <mxCell id="p2_e5" value="统一事件" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#8064A2;strokeWidth=1.5;fontFamily=Microsoft YaHei;fontSize=10;labelBackgroundColor=#FFFFFF;" edge="1" parent="1" source="p2_ts" target="p2_msg"><mxGeometry relative="1" as="geometry"/></mxCell>
        <mxCell id="p2_e6" value="更新模型" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#8064A2;strokeWidth=2;fontFamily=Microsoft YaHei;fontSize=10;labelBackgroundColor=#FFFFFF;" edge="1" parent="1" source="p2_msg" target="p2_cells"><mxGeometry relative="1" as="geometry"/></mxCell>
        <mxCell id="p2_e7" value="落库/导出" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#70AD47;strokeWidth=1.5;fontFamily=Microsoft YaHei;fontSize=10;labelBackgroundColor=#FFFFFF;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" edge="1" parent="1" source="p2_cells" target="p2_output"><mxGeometry relative="1" as="geometry"/></mxCell>
        <mxCell id="p2_e8" value="读取" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#808080;strokeWidth=1.5;dashed=1;fontFamily=Microsoft YaHei;fontSize=10;labelBackgroundColor=#FFFFFF;exitX=0.5;exitY=0;entryX=0.5;entryY=1;" edge="1" parent="1" source="p2_config" target="p2_burnin"><mxGeometry relative="1" as="geometry"/></mxCell>
        <mxCell id="p2_e9" value="控制/采集" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#5B9BD5;strokeWidth=1.5;fontFamily=Microsoft YaHei;fontSize=10;labelBackgroundColor=#FFFFFF;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" edge="1" parent="1" source="p2_burnin" target="p2_plc"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="220" y="720"/><mxPoint x="535" y="720"/></Array></mxGeometry></mxCell>
        <mxCell id="p2_e10" value="条码/过站" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#5B9BD5;strokeWidth=1.5;fontFamily=Microsoft YaHei;fontSize=10;labelBackgroundColor=#FFFFFF;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" edge="1" parent="1" source="p2_burnin" target="p2_scan"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="220" y="735"/><mxPoint x="850" y="735"/></Array></mxGeometry></mxCell>
      </root>
    </mxGraphModel>
  </diagram>
</mxfile>
