分享图
动画工坊
引擎就绪
<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>微型压电-文丘里一体化零延迟吸附系统 (IFR理想解)</title>
  <style>
    :root {
      --bg-dark: #070a10;
      --panel-bg: rgba(13, 19, 33, 0.78);
      --panel-border: rgba(56, 189, 248, 0.2);
      --cyan-glow: #00f0ff;
      --cyan-dim: #0284c7;
      --purple-vac: #c084fc;
      --purple-glow: #a855f7;
      --amber-act: #f59e0b;
      --emerald-flow: #10b981;
      --text-main: #f1f5f9;
      --text-muted: #94a3b8;
    }

    * {
      box-sizing: border-box;
      margin: 0;
      padding: 0;
      user-select: none;
    }

    body {
      background-color: var(--bg-dark);
      color: var(--text-main);
      font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif;
      min-height: 100vh;
      display: flex;
      flex-direction: column;
      align-items: center;
      justify-content: space-between;
      overflow: hidden;
      position: relative;
    }

    /* 工业暗色背景网格与光晕 */
    .bg-grid {
      position: absolute;
      inset: 0;
      background-image: 
        radial-gradient(circle at 50% 38%, rgba(0, 240, 255, 0.08) 0%, transparent 60%),
        linear-gradient(rgba(255, 255, 255, 0.03) 1px, transparent 1px),
        linear-gradient(90deg, rgba(255, 255, 255, 0.03) 1px, transparent 1px);
      background-size: 100% 100%, 32px 32px, 32px 32px;
      pointer-events: none;
      z-index: 0;
    }

    /* 顶栏紧凑信息 */
    header {
      width: 100%;
      max-width: 1380px;
      padding: 12px 24px;
      display: flex;
      justify-content: space-between;
      align-items: center;
      z-index: 10;
      border-bottom: 1px solid rgba(255, 255, 255, 0.06);
      background: linear-gradient(180deg, rgba(7, 10, 16, 0.9) 0%, transparent 100%);
    }

    .brand-box {
      display: flex;
      align-items: center;
      gap: 12px;
    }

    .brand-tag {
      font-size: 10px;
      font-weight: 700;
      letter-spacing: 1px;
      padding: 3px 8px;
      border-radius: 4px;
      background: rgba(0, 240, 255, 0.12);
      color: var(--cyan-glow);
      border: 1px solid rgba(0, 240, 255, 0.3);
    }

    h1 {
      font-size: 15px;
      font-weight: 600;
      letter-spacing: 0.5px;
      color: #fff;
    }

    .status-pill {
      font-size: 12px;
      font-family: "JetBrains Mono", Consolas, monospace;
      padding: 4px 12px;
      border-radius: 20px;
      background: rgba(16, 185, 129, 0.1);
      border: 1px solid rgba(16, 185, 129, 0.3);
      color: #34d399;
      display: flex;
      align-items: center;
      gap: 6px;
    }

    .status-dot {
      width: 7px;
      height: 7px;
      border-radius: 50%;
      background: #34d399;
      box-shadow: 0 0 8px #34d399;
      animation: blink 1.2s infinite ease-in-out;
    }

    @keyframes blink {
      0%, 100% { opacity: 1; transform: scale(1); }
      50% { opacity: 0.4; transform: scale(0.85); }
    }

    /* 核心动画工作区:占据最大无遮挡空间 */
    main {
      position: relative;
      flex: 1;
      width: 100%;
      max-width: 1380px;
      display: flex;
      align-items: center;
      justify-content: center;
      z-index: 1;
      padding: 8px 16px;
    }

    .stage-container {
      position: relative;
      width: 100%;
      height: 100%;
      max-height: 640px;
      display: flex;
      align-items: center;
      justify-content: center;
    }

    svg#main-vis {
      width: 100%;
      height: 100%;
      max-height: 620px;
      filter: drop-shadow(0 10px 30px rgba(0, 0, 0, 0.6));
    }

    /* 左右微型浮动指示面板 (字体小、边角放置、绝不遮挡居中主图) */
    .hud-panel {
      position: absolute;
      background: var(--panel-bg);
      border: 1px solid var(--panel-border);
      backdrop-filter: blur(10px);
      border-radius: 8px;
      padding: 10px 14px;
      pointer-events: none;
      font-size: 11px;
      z-index: 5;
    }

    .hud-left {
      top: 14px;
      left: 18px;
      width: 220px;
    }

    .hud-right {
      top: 14px;
      right: 18px;
      width: 230px;
    }

    .hud-title {
      font-size: 10px;
      font-weight: 700;
      color: var(--text-muted);
      text-transform: uppercase;
      letter-spacing: 0.8px;
      margin-bottom: 8px;
      display: flex;
      justify-content: space-between;
      border-bottom: 1px solid rgba(255, 255, 255, 0.08);
      padding-bottom: 4px;
    }

    .metric-row {
      display: flex;
      justify-content: space-between;
      align-items: center;
      margin: 5px 0;
      font-family: "JetBrains Mono", Consolas, monospace;
    }

    .metric-val {
      font-weight: 700;
      color: var(--cyan-glow);
    }

    .metric-vac {
      color: var(--purple-vac);
    }

    /* 压力条动画 */
    .bar-wrap {
      width: 100%;
      height: 5px;
      background: rgba(255, 255, 255, 0.08);
      border-radius: 3px;
      overflow: hidden;
      margin-top: 4px;
    }

    .bar-fill-vac {
      height: 100%;
      width: 0%;
      background: linear-gradient(90deg, #8b5cf6, #ec4899);
      transition: width 0.08s linear;
      box-shadow: 0 0 8px rgba(168, 85, 247, 0.6);
    }

    .bar-fill-pz {
      height: 100%;
      width: 0%;
      background: linear-gradient(90deg, #0284c7, #00f0ff);
      transition: width 0.05s linear;
    }

    /* 底部极简时序控制区 */
    footer {
      width: 100%;
      max-width: 1380px;
      padding: 10px 24px 16px;
      display: flex;
      flex-direction: column;
      gap: 8px;
      z-index: 10;
    }

    .timeline-strip {
      display: grid;
      grid-template-columns: repeat(4, 1fr);
      gap: 8px;
    }

    .phase-chip {
      background: rgba(15, 23, 42, 0.65);
      border: 1px solid rgba(255, 255, 255, 0.07);
      border-radius: 6px;
      padding: 6px 10px;
      display: flex;
      align-items: center;
      justify-content: space-between;
      cursor: pointer;
      transition: all 0.25s ease;
    }

    .phase-chip.active {
      background: rgba(0, 240, 255, 0.1);
      border-color: var(--cyan-glow);
      box-shadow: 0 0 12px rgba(0, 240, 255, 0.2);
    }

    .phase-chip .phase-name {
      font-size: 11px;
      font-weight: 600;
      color: var(--text-main);
    }

    .phase-chip .phase-time {
      font-size: 10px;
      font-family: monospace;
      color: var(--text-muted);
    }

    .phase-chip.active .phase-time {
      color: var(--cyan-glow);
    }

    .ctrl-row {
      display: flex;
      justify-content: space-between;
      align-items: center;
      font-size: 11px;
      color: var(--text-muted);
    }

    .btn-group {
      display: flex;
      gap: 8px;
    }

    .btn-ctrl {
      background: rgba(30, 41, 59, 0.8);
      border: 1px solid rgba(255, 255, 255, 0.15);
      color: var(--text-main);
      padding: 4px 12px;
      border-radius: 4px;
      font-size: 11px;
      cursor: pointer;
      display: flex;
      align-items: center;
      gap: 5px;
      transition: all 0.2s;
    }

    .btn-ctrl:hover {
      background: rgba(56, 189, 248, 0.2);
      border-color: var(--cyan-glow);
      color: #fff;
    }

    .btn-ctrl.active-play {
      background: rgba(0, 240, 255, 0.15);
      border-color: var(--cyan-glow);
      color: var(--cyan-glow);
    }

    /* 动态粒子与气流效果 (SVG内部滤镜与渐变) */
    .glow-cyan {
      filter: drop-shadow(0 0 6px rgba(0, 240, 255, 0.7));
    }
    .glow-purple {
      filter: drop-shadow(0 0 8px rgba(168, 85, 247, 0.8));
    }
  </style>
</head>
<body>
  <div class="bg-grid"></div>

  <!-- 顶栏:系统指标与IFR理想解标语 -->
  <header>
    <div class="brand-box">
      <span class="brand-tag">TRIZ IFR 最终理想解</span>
      <h1>零距离压电-文丘里集成吸嘴 (亚毫秒响应/免远端真空管路)</h1>
    </div>
    <div class="status-pill">
      <div class="status-dot"></div>
      <span id="system-mode-text">实时运行态: 脉宽调制吸附</span>
    </div>
  </header>

  <!-- 核心主视觉区:高保真剖面动态原理动画 (自适应居中、高占比) -->
  <main>
    <div class="stage-container">
      
      <!-- 左侧浮动指标 (小字号、边缘布局、不挡主体) -->
      <div class="hud-panel hud-left">
        <div class="hud-title">
          <span>压电阀响应动力学</span>
          <span style="color:var(--amber-act);">PZT 500Hz</span>
        </div>
        <div class="metric-row">
          <span>阀门开度 (0.5ms响应)</span>
          <span class="metric-val" id="val-piezo-stroke">100 %</span>
        </div>
        <div class="bar-wrap">
          <div class="bar-fill-pz" id="bar-pz"></div>
        </div>
        <div class="metric-row" style="margin-top:8px;">
          <span>供气压力 (稳压源)</span>
          <span class="metric-val" id="val-supply-p">0.40 MPa</span>
        </div>
        <div class="metric-row">
          <span>文丘里喉口流速</span>
          <span class="metric-val" id="val-jet-speed">330 m/s</span>
        </div>
      </div>

      <!-- 右侧浮动指标 -->
      <div class="hud-panel hud-right">
        <div class="hud-title">
          <span>就地真空度 (0mm管道延时)</span>
          <span class="metric-vac" id="txt-vac-status">已锁定</span>
        </div>
        <div class="metric-row">
          <span>腔内负压值</span>
          <span class="metric-val metric-vac" id="val-vac-p">-60.0 kPa</span>
        </div>
        <div class="bar-wrap">
          <div class="bar-fill-vac" id="bar-vac"></div>
        </div>
        <div class="metric-row" style="margin-top:8px;">
          <span>吸附建立时间</span>
          <span class="metric-val">2.8 ms <span style="font-size:9px;color:var(--text-muted);">(原需>85ms)</span></span>
        </div>
        <div class="metric-row">
          <span>瞬态破真空反吹</span>
          <span class="metric-val" id="val-blow-status" style="color:var(--text-muted);">待命</span>
        </div>
      </div>

      <!-- 核心高保真 SVG 剖面与气流动力学图 -->
      <svg id="main-vis" viewBox="0 0 1000 600" preserveAspectRatio="xMidYMid meet">
        <defs>
          <!-- 渐变定义 -->
          <linearGradient id="metal-grad" x1="0%" y1="0%" x2="100%" y2="0%">
            <stop offset="0%" stop-color="#1e293b" />
            <stop offset="30%" stop-color="#334155" />
            <stop offset="70%" stop-color="#1e293b" />
            <stop offset="100%" stop-color="#0f172a" />
          </linearGradient>

          <linearGradient id="piezo-grad" x1="0%" y1="0%" x2="0%" y2="100%">
            <stop offset="0%" stop-color="#f59e0b" />
            <stop offset="25%" stop-color="#fbbf24" />
            <stop offset="50%" stop-color="#d97706" />
            <stop offset="75%" stop-color="#fbbf24" />
            <stop offset="100%" stop-color="#b45309" />
          </linearGradient>

          <linearGradient id="sup-air-grad" x1="0%" y1="0%" x2="100%" y2="0%">
            <stop offset="0%" stop-color="#0284c7" />
            <stop offset="50%" stop-color="#00f0ff" />
            <stop offset="100%" stop-color="#38bdf8" />
          </linearGradient>

          <radialGradient id="vac-chamber-glow" cx="50%" cy="50%" r="50%">
            <stop offset="0%" stop-color="rgba(168, 85, 247, 0.45)" />
            <stop offset="80%" stop-color="rgba(168, 85, 247, 0.08)" />
            <stop offset="100%" stop-color="transparent" />
          </radialGradient>

          <linearGradient id="jet-stream" x1="0%" y1="0%" x2="100%" y2="0%">
            <stop offset="0%" stop-color="#00f0ff" stop-opacity="1" />
            <stop offset="40%" stop-color="#38bdf8" stop-opacity="0.9" />
            <stop offset="80%" stop-color="#a855f7" stop-opacity="0.6" />
            <stop offset="100%" stop-color="#64748b" stop-opacity="0.1" />
          </linearGradient>

          <!-- 滤网网格图案 -->
          <pattern id="filter-mesh" width="6" height="6" patternUnits="userSpaceOnUse">
            <line x1="0" y1="3" x2="6" y2="3" stroke="rgba(255,255,255,0.25)" stroke-width="0.8" />
            <line x1="3" y1="0" x2="3" y2="6" stroke="rgba(255,255,255,0.25)" stroke-width="0.8" />
          </pattern>

          <!-- 发光滤镜 -->
          <filter id="glow" x="-20%" y="-20%" width="140%" height="140%">
            <feGaussianBlur stdDeviation="3.5" result="blur" />
            <feComposite in="SourceGraphic" in2="blur" operator="over" />
          </filter>
        </defs>

        <!-- 背景刻度与辅助基准线 -->
        <g stroke="rgba(255,255,255,0.06)" stroke-width="1" stroke-dasharray="4,4">
          <line x1="120" y1="300" x2="880" y2="300" />
          <line x1="500" y1="60" x2="500" y2="540" />
          <!-- 尺寸标注线:零距离集成 -->
          <line x1="430" y1="380" x2="430" y2="470" stroke="rgba(0, 240, 255, 0.4)" stroke-dasharray="2,2" />
        </g>

        <!-- 标尺文字:零延时就地产生真空 -->
        <text x="420" y="430" fill="var(--cyan-glow)" font-size="11" text-anchor="end" font-family="monospace">
          文丘里发生源至吸嘴仅 8mm (原系统管道>1.5m)
        </text>
        <path d="M 425 385 L 425 465" stroke="var(--cyan-glow)" stroke-width="1.2" marker-start="url(#dot)" marker-end="url(#dot)"/>

        <!-- ==================== 一体化阀体外壳 (剖面) ==================== -->
        <!-- 外壳基座 -->
        <path d="M 330,70 
                 L 670,70 
                 L 670,220 
                 L 770,220 
                 L 770,360 
                 L 640,360 
                 L 640,460 
                 L 590,490 
                 L 590,510 
                 L 410,510 
                 L 410,490 
                 L 360,460 
                 L 360,360 
                 L 230,360 
                 L 230,220 
                 L 330,220 Z" 
              fill="url(#metal-grad)" 
              stroke="#475569" 
              stroke-width="2.5" />

        <!-- 剖面斜剖线纹理 (加强工程感) -->
        <g stroke="rgba(255,255,255,0.04)" stroke-width="1.2">
          <line x1="340" y1="80" x2="360" y2="100" />
          <line x1="340" y1="120" x2="380" y2="160" />
          <line x1="630" y1="80" x2="660" y2="110" />
          <line x1="640" y1="140" x2="660" y2="160" />
          <line x1="240" y1="240" x2="300" y2="300" />
          <line x1="700" y1="240" x2="760" y2="300" />
        </g>

        <!-- ==================== 内部流道与关键腔体 ==================== -->

        <!-- 1. 顶部 0.4MPa 压缩空气进气道 -->
        <path d="M 470,70 L 530,70 L 530,135 L 470,135 Z" fill="#0b1329" stroke="rgba(56,189,248,0.4)" stroke-width="1.5" />
        
        <!-- 2. 压电陶瓷致动器腔室 (PZT Actuator Chamber) -->
        <rect x="380" y="100" width="80" height="90" rx="4" fill="#0f172a" stroke="#334155" />
        <!-- PZT 陶瓷叠堆 (动态微位移) -->
        <g id="piezo-stack" transform="translate(0, 0)">
          <rect x="388" y="106" width="64" height="78" rx="2" fill="url(#piezo-grad)" stroke="#f59e0b" stroke-width="1" />
          <!-- 晶格叠层条纹 -->
          <line x1="388" y1="119" x2="452" y2="119" stroke="#78350f" stroke-width="1.5" />
          <line x1="388" y1="132" x2="452" y2="132" stroke="#78350f" stroke-width="1.5" />
          <line x1="388" y1="145" x2="452" y2="145" stroke="#78350f" stroke-width="1.5" />
          <line x1="388" y1="158" x2="452" y2="158" stroke="#78350f" stroke-width="1.5" />
          <line x1="388" y1="171" x2="452" y2="171" stroke="#78350f" stroke-width="1.5" />
          
          <!-- 阀针连接杆 -->
          <path id="valve-needle" d="M 452,145 L 492,145 L 498,141 L 504,145 L 504,151 L 498,155 L 492,151 Z" fill="#e2e8f0" stroke="#94a3b8" />
        </g>

        <!-- 3. 微型文丘里喷射流道 (收缩喷嘴 0.4mm -> 混合腔 -> 扩散消音排气) -->
        <!-- 主供气向下通道 -->
        <path d="M 485,145 L 515,145 L 515,240 L 485,240 Z" fill="#0b1329" />
        
        <!-- 文丘里核心管段 (横向高速射流腔) -->
        <!-- 喷嘴收缩段 -> 喉口 (0.4mm) -> 扩散段 -->
        <path d="M 450,255 
                 L 490,265 
                 L 508,268 
                 L 540,265 
                 L 740,245 
                 L 740,315 
                 L 540,295 
                 L 508,292 
                 L 490,295 
                 L 450,305 Z" 
              fill="#060d1d" 
              stroke="rgba(0,240,255,0.4)" 
              stroke-width="1.5" />

        <!-- 混合吸气负压腔 (垂直连通下方吸嘴) -->
        <path d="M 480,270 
                 L 535,270 
                 L 550,380 
                 L 570,440 
                 L 570,490 
                 L 430,490 
                 L 430,440 
                 L 465,380 Z" 
              fill="#080e1e" 
              stroke="rgba(168,85,247,0.4)" 
              stroke-width="1.5" />

        <!-- 负压发光染色底色 (强度随真空度变化) -->
        <path id="vac-glow-path" d="M 480,270 L 535,270 L 550,380 L 570,440 L 570,490 L 430,490 L 430,440 L 465,380 Z" fill="url(#vac-chamber-glow)" opacity="0.8" />

        <!-- 4. 并联瞬态破真空微吹支路 (Bypass Blow Channel) -->
        <path d="M 470,140 
                 L 330,140 
                 L 330,390 
                 L 440,410" 
              fill="none" 
              stroke="rgba(245,158,11,0.25)" 
              stroke-width="6" 
              stroke-linecap="round" />
        <path id="bypass-air-pulse" d="M 470,140 L 330,140 L 330,390 L 440,410" 
              fill="none" 
              stroke="#f59e0b" 
              stroke-width="4" 
              stroke-dasharray="12,12" 
              stroke-dashoffset="0"
              opacity="0" />

        <!-- 微型单向节流阀在破真空支路上 -->
        <circle cx="330" cy="270" r="14" fill="#1e293b" stroke="#f59e0b" stroke-width="1.5" />
        <path d="M 324,264 L 336,270 L 324,276 Z" fill="#f59e0b" />
        <line x1="336" y1="262" x2="336" y2="278" stroke="#f59e0b" stroke-width="1.5" />

        <!-- 5. 集成微孔烧结过滤器 (就地防尘防堵塞) -->
        <rect x="440" y="445" width="120" height="14" rx="2" fill="url(#filter-mesh)" stroke="#64748b" stroke-width="1.2" />
        <text x="500" y="455" fill="#94a3b8" font-size="8.5" text-anchor="middle" font-family="monospace">多孔微滤芯 (0.1μm)</text>

        <!-- 6. 吸嘴末端精密接口 (Nozzle Tip) -->
        <path d="M 450,490 L 550,490 L 540,525 L 460,525 Z" fill="#334155" stroke="#64748b" stroke-width="1.5" />
        <!-- 柔性高分子吸嘴唇边 (紫色发光) -->
        <path d="M 455,525 L 545,525 L 552,538 L 448,538 Z" fill="#0284c7" stroke="var(--cyan-glow)" stroke-width="1" />

        <!-- ==================== 射流与气流动态效果 ==================== -->
        <!-- 供气主流束 -->
        <g id="supply-particles"></g>

        <!-- 文丘里高速超音速射流束 (带激波膨胀纹理) -->
        <g id="jet-expansion" opacity="1">
          <!-- 射流锥 -->
          <polygon points="508,278 730,250 730,310 508,282" fill="url(#jet-stream)" opacity="0.85" filter="url(#glow)" />
          <!-- 激波菱形纹 (文丘里高速特征) -->
          <polygon points="530,280 545,274 560,280 545,286" fill="rgba(255,255,255,0.7)" />
          <polygon points="575,280 595,272 615,280 595,288" fill="rgba(255,255,255,0.5)" />
          <polygon points="635,280 660,270 685,280 660,290" fill="rgba(255,255,255,0.3)" />
          
          <!-- 消音排气微粒逸出 -->
          <g id="exhaust-particles"></g>
        </g>

        <!-- 负压抽吸流线微粒 (从吸嘴直奔文丘里混合腔) -->
        <g id="vacuum-suction-lines"></g>

        <!-- ==================== 吸附目标物:半导体芯片 (Chip) ==================== -->
        <g id="workpiece" transform="translate(0, 0)">
          <!-- 硅片镜面与倒角 -->
          <rect x="420" y="540" width="160" height="18" rx="2" fill="#1e1b4b" stroke="#818cf8" stroke-width="1.5" />
          <!-- 芯片金线引脚 / 焊盘微结构 -->
          <rect x="430" y="544" width="18" height="10" fill="#fbbf24" opacity="0.9" />
          <rect x="460" y="544" width="18" height="10" fill="#fbbf24" opacity="0.9" />
          <rect x="522" y="544" width="18" height="10" fill="#fbbf24" opacity="0.9" />
          <rect x="552" y="544" width="18" height="10" fill="#fbbf24" opacity="0.9" />
          <!-- 芯片文字 -->
          <text x="500" y="552" fill="#c7d2fe" font-size="8.5" text-anchor="middle" font-family="monospace" font-weight="700">DIE-PKG 0.05g</text>
          
          <!-- 贴合接触面吸力箭头 (吸附建立时显示) -->
          <g id="grip-force-arrows" opacity="1">
            <path d="M 470,536 L 470,528 M 467,531 L 470,528 L 473,531" stroke="#ec4899" stroke-width="1.8" />
            <path d="M 500,536 L 500,528 M 497,531 L 500,528 L 503,531" stroke="#ec4899" stroke-width="1.8" />
            <path d="M 530,536 L 530,528 M 527,531 L 530,528 L 533,531" stroke="#ec4899" stroke-width="1.8" />
          </g>
        </g>

        <!-- ==================== 部件技术标注 (精简工业线框) ==================== -->
        <!-- 压电阀标注 -->
        <g transform="translate(360, 110)">
          <line x1="20" y1="35" x2="-80" y2="35" stroke="#64748b" stroke-width="1" />
          <circle cx="-80" cy="35" r="3" fill="#f59e0b" />
          <text x="-88" y="32" fill="#f59e0b" font-size="10" font-weight="700" text-anchor="end">压电晶体换向阀</text>
          <text x="-88" y="44" fill="var(--text-muted)" font-size="9" text-anchor="end">0.5ms 极速启闭 / 500Hz PWM</text>
        </g>

        <!-- 供气口标注 -->
        <g transform="translate(500, 65)">
          <text x="0" y="-8" fill="var(--cyan-glow)" font-size="10" font-weight="700" text-anchor="middle">单一气源: 洁净压缩空气 0.4 MPa</text>
          <path d="M 500,0 L 500,18 M 496,12 L 500,18 L 504,12" stroke="var(--cyan-glow)" stroke-width="1.5" />
        </g>

        <!-- 文丘里喷嘴孔径标注 -->
        <g transform="translate(508, 260)">
          <line x1="0" y1="0" x2="35" y2="-45" stroke="#38bdf8" stroke-width="1" />
          <line x1="35" y1="-45" x2="135" y2="-45" stroke="#38bdf8" stroke-width="1" />
          <circle cx="0" cy="0" r="2.5" fill="#38bdf8" />
          <text x="40" y="-50" fill="#38bdf8" font-size="10" font-weight="700">微型文丘里喷嘴 (Φ0.4mm)</text>
          <text x="40" y="-38" fill="var(--text-muted)" font-size="8.5">高速射流就地抽吸 (3ms达-60kPa)</text>
        </g>

        <!-- 排气口标注 -->
        <g transform="translate(740, 280)">
          <text x="12" y="4" fill="#94a3b8" font-size="10" font-family="monospace">排气扩散口 →</text>
        </g>

        <!-- 反吹旁路标注 -->
        <g transform="translate(330, 340)">
          <line x1="-15" y1="0" x2="-80" y2="0" stroke="#f59e0b" stroke-width="1" />
          <circle cx="-15" cy="0" r="2.5" fill="#f59e0b" />
          <text x="-85" y="-3" fill="#f59e0b" font-size="10" font-weight="700" text-anchor="end">瞬态破真空支路</text>
          <text x="-85" y="9" fill="var(--text-muted)" font-size="8.5" text-anchor="end">反向余压微吹 3ms 瞬间脱附</text>
        </g>
      </svg>
    </div>
  </main>

  <!-- 底部时序与节拍控制器 (紧凑排布) -->
  <footer>
    <div class="timeline-strip">
      <div class="phase-chip active" id="chip-phase-0" onclick="jumpToPhase(0)">
        <div>
          <div class="phase-name">1. 压电开启 / 瞬态射流</div>
          <div style="font-size:9.5px;color:var(--text-muted);">供气开通 0.5ms • 喉口超音速喷射</div>
        </div>
        <div class="phase-time">0~1.2s</div>
      </div>
      <div class="phase-chip" id="chip-phase-1" onclick="jumpToPhase(1)">
        <div>
          <div class="phase-name">2. 就地真空建立 (-60kPa)</div>
          <div style="font-size:9.5px;color:var(--text-muted);">3ms极限抽吸 • 芯片瞬间贴合</div>
        </div>
        <div class="phase-time">1.2~2.6s</div>
      </div>
      <div class="phase-chip" id="chip-phase-2" onclick="jumpToPhase(2)">
        <div>
          <div class="phase-name">3. PWM 高频保压转运</div>
          <div style="font-size:9.5px;color:var(--text-muted);">500Hz 脉宽调制 • 节能稳态吸附</div>
        </div>
        <div class="phase-time">2.6~4.4s</div>
      </div>
      <div class="phase-chip" id="chip-phase-3" onclick="jumpToPhase(3)">
        <div>
          <div class="phase-name">4. 极速断气 / 瞬态微吹</div>
          <div style="font-size:9.5px;color:var(--text-muted);">反向余压 3ms 破真空 • 零黏连释放</div>
        </div>
        <div class="phase-time">4.4~6.0s</div>
      </div>
    </div>

    <div class="ctrl-row">
      <div class="btn-group">
        <button class="btn-ctrl active-play" id="btn-play" onclick="togglePlay()">
          <span id="play-icon">⏸</span> <span id="play-text">自动连续循环</span>
        </button>
        <button class="btn-ctrl" onclick="stepSlowMo()">
          <span>⏱</span> <span id="speed-text">1.0x 正常速度</span>
        </button>
        <button class="btn-ctrl" onclick="resetCycle()">
          <span>↺</span> 重置周期
        </button>
      </div>

      <div style="display:flex; gap:16px; font-family:monospace; font-size:11px;">
        <span>节拍周期: <strong style="color:var(--cyan-glow);">6.0 s</strong></span>
        <span>当前时序: <strong style="color:var(--text-main);" id="clock-display">0.00 s</strong></span>
        <span style="color:rgba(255,255,255,0.4);">| 消除矛盾: 速度与管路体积的物理矛盾 (IFR)</span>
      </div>
    </div>
  </footer>

  <!-- ==================== 仿真驱动核心脚本 ==================== -->
  <script>
    // 状态与时序变量
    let isPlaying = true;
    let timeScale = 1.0;
    let cycleTime = 0.0; // 0.0 ~ 6.0 秒
    const CYCLE_DURATION = 6.0;

    // DOM 元素引用
    const valPiezoStroke = document.getElementById('val-piezo-stroke');
    const barPz = document.getElementById('bar-pz');
    const valJetSpeed = document.getElementById('val-jet-speed');
    const valVacP = document.getElementById('val-vac-p');
    const barVac = document.getElementById('bar-vac');
    const txtVacStatus = document.getElementById('txt-vac-status');
    const valBlowStatus = document.getElementById('val-blow-status');
    const systemModeText = document.getElementById('system-mode-text');
    const clockDisplay = document.getElementById('clock-display');

    // SVG 动态图形元素
    const piezoStack = document.getElementById('piezo-stack');
    const valveNeedle = document.getElementById('valve-needle');
    const jetExpansion = document.getElementById('jet-expansion');
    const vacGlowPath = document.getElementById('vac-glow-path');
    const bypassAirPulse = document.getElementById('bypass-air-pulse');
    const workpiece = document.getElementById('workpiece');
    const gripForceArrows = document.getElementById('grip-force-arrows');
    const supplyParticles = document.getElementById('supply-particles');
    const exhaustParticles = document.getElementById('exhaust-particles');
    const vacuumSuctionLines = document.getElementById('vacuum-suction-lines');

    // 预建粒子池
    const particlesSupply = [];
    const particlesExhaust = [];
    const particlesSuction = [];

    function initParticles() {
      // 1. 顶部供气粒子
      for (let i = 0; i < 18; i++) {
        const circle = document.createElementNS("http://www.w3.org/2000/svg", "circle");
        circle.setAttribute("r", (1.5 + Math.random() * 1.5).toFixed(1));
        circle.setAttribute("fill", "#00f0ff");
        circle.setAttribute("opacity", "0.8");
        supplyParticles.appendChild(circle);
        particlesSupply.push({
          el: circle,
          x: 480 + Math.random() * 40,
          y: 75 + Math.random() * 60,
          speed: 2 + Math.random() * 3
        });
      }

      // 2. 排气口高速逸出微粒
      for (let i = 0; i < 25; i++) {
        const circle = document.createElementNS("http://www.w3.org/2000/svg", "circle");
        circle.setAttribute("r", (1.2 + Math.random() * 2).toFixed(1));
        circle.setAttribute("fill", "#38bdf8");
        circle.setAttribute("opacity", "0.7");
        exhaustParticles.appendChild(circle);
        particlesExhaust.push({
          el: circle,
          x: 720 + Math.random() * 20,
          y: 255 + Math.random() * 50,
          vx: 3 + Math.random() * 5,
          vy: (Math.random() - 0.5) * 2,
          life: Math.random()
        });
      }

      // 3. 底部负压抽吸流线微粒 (就地流向文丘里)
      for (let i = 0; i < 20; i++) {
        const circle = document.createElementNS("http://www.w3.org/2000/svg", "circle");
        circle.setAttribute("r", (1.2 + Math.random() * 1.6).toFixed(1));
        circle.setAttribute("fill", "#c084fc");
        circle.setAttribute("opacity", "0.85");
        vacuumSuctionLines.appendChild(circle);
        particlesSuction.push({
          el: circle,
          x: 460 + Math.random() * 80,
          y: 490 - Math.random() * 200,
          vy: 2 + Math.random() * 3.5,
          baseX: 460 + Math.random() * 80
        });
      }
    }

    initParticles();

    // 动画主循环 (页面加载即自启动)
    let lastTimestamp = performance.now();

    function updateSimulation(now) {
      const deltaSec = (now - lastTimestamp) / 1000;
      lastTimestamp = now;

      if (isPlaying) {
        cycleTime = (cycleTime + deltaSec * timeScale) % CYCLE_DURATION;
      }

      clockDisplay.innerText = cycleTime.toFixed(2) + ' s';

      // ==================== 4 个工作阶段动力学计算 ====================
      // 阶段 1 (0.0 ~ 1.2s): 压电极速开启 (0.5ms) 与 射流喷射
      // 阶段 2 (1.2 ~ 2.6s): 就地真空极限建立 (-60kPa),芯片吸附到位
      // 阶段 3 (2.6 ~ 4.4s): PWM 高频调制保持 (500Hz 微动),工件稳定转运
      // 阶段 4 (4.4 ~ 6.0s): 压电断气,并联支路 3ms 极速微吹破真空,芯片脱附

      let piezoOpening = 0.0; // 0.0 ~ 1.0
      let vacuumKPa = 0.0;    // 0.0 ~ -60.0 kPa
      let jetActive = false;
      let bypassBlow = false;
      let chipY = 0;          // 0 = 紧贴吸附, >0 = 落下脱附
      let phaseIndex = 0;

      if (cycleTime < 1.2) {
        // --- 阶段 1: 瞬态触发 ---
        phaseIndex = 0;
        const subT = cycleTime / 1.2;
        piezoOpening = Math.min(1.0, subT * 8.0); // 迅速拉满
        vacuumKPa = -60.0 * Math.min(1.0, subT * 3.5); // 毫秒级负压建立
        jetActive = true;
        bypassBlow = false;
        chipY = Math.max(0, (1 - subT * 2.5) * 8); // 快速吸附贴紧
      } else if (cycleTime < 2.6) {
        // --- 阶段 2: 稳态真空吸附 ---
        phaseIndex = 1;
        piezoOpening = 1.0;
        vacuumKPa = -60.0;
        jetActive = true;
        bypassBlow = false;
        chipY = 0;
      } else if (cycleTime < 4.4) {
        // --- 阶段 3: PWM 调制阶段 (模拟 500Hz 高频占空比通断波动) ---
        phaseIndex = 2;
        const pwmWave = 0.85 + 0.15 * Math.sin(cycleTime * 40.0);
        piezoOpening = pwmWave;
        vacuumKPa = -58.0 + 3.0 * Math.sin(cycleTime * 40.0);
        jetActive = true;
        bypassBlow = false;
        chipY = 0;
      } else {
        // --- 阶段 4: 瞬态断气与破真空微吹 ---
        phaseIndex = 3;
        const subT = (cycleTime - 4.4) / 1.6;
        piezoOpening = Math.max(0.0, 1.0 - subT * 6.0); // 极速切断
        if (subT < 0.35) {
          // 3ms 瞬态反吹
          bypassBlow = true;
          vacuumKPa = 5.0 * (1 - subT / 0.35); // 正压脉冲
        } else {
          bypassBlow = false;
          vacuumKPa = 0.0;
        }
        jetActive = false;
        chipY = Math.min(12, subT * 18); // 脱附掉落到位
      }

      // ==================== 更新 UI 指标 ====================
      updateUI(phaseIndex, piezoOpening, vacuumKPa, jetActive, bypassBlow);

      // ==================== 更新 SVG 图形与物理运动 ====================
      renderGraphics(piezoOpening, vacuumKPa, jetActive, bypassBlow, chipY, now);

      requestAnimationFrame(updateSimulation);
    }

    // 更新界面数字与高亮芯片
    function updateUI(phaseIdx, piezoOpening, vacuumKPa, jetActive, bypassBlow) {
      // 切换底部阶段高亮
      for (let i = 0; i < 4; i++) {
        const chip = document.getElementById(`chip-phase-${i}`);
        if (i === phaseIdx) {
          chip.classList.add('active');
        } else {
          chip.classList.remove('active');
        }
      }

      // 压电阀开度与状态
      const pzPercent = Math.round(piezoOpening * 100);
      valPiezoStroke.innerText = `${pzPercent} %`;
      barPz.style.width = `${pzPercent}%`;
      
      // 流速与压力
      valJetSpeed.innerText = jetActive ? (320 + pzPercent * 0.2).toFixed(0) + ' m/s (超音速)' : '0 m/s';
      
      // 真空读数
      valVacP.innerText = `${vacuumKPa.toFixed(1)} kPa`;
      const vacRatio = Math.max(0, Math.min(100, (-vacuumKPa / 60.0) * 100));
      barVac.style.width = `${vacRatio}%`;

      if (vacuumKPa < -40.0) {
        txtVacStatus.innerText = '已锁定 (极度稳固)';
        txtVacStatus.style.color = 'var(--purple-vac)';
      } else if (vacuumKPa < -10.0) {
        txtVacStatus.innerText = '建压抽吸中...';
        txtVacStatus.style.color = 'var(--cyan-glow)';
      } else if (bypassBlow) {
        txtVacStatus.innerText = '正压瞬态反吹';
        txtVacStatus.style.color = 'var(--amber-act)';
      } else {
        txtVacStatus.innerText = '待命释放';
        txtVacStatus.style.color = 'var(--text-muted)';
      }

      // 破真空状态
      valBlowStatus.innerText = bypassBlow ? '3ms 脉冲反吹中' : '常闭待命';
      valBlowStatus.style.color = bypassBlow ? 'var(--amber-act)' : 'var(--text-muted)';

      // 顶栏模式文字
      const modeTexts = [
        '阶段 1: 压电毫秒级启闭 • 喉口射流瞬间就绪',
        '阶段 2: 零距离就地真空建立 (-60 kPa)',
        '阶段 3: 500Hz PWM 微调 • 稳态恒力转运',
        '阶段 4: 残余反向微吹 • 3ms 零滞后脱附'
      ];
      systemModeText.innerText = modeTexts[phaseIdx];
    }

    // 渲染 SVG 内部物理与气流
    function renderGraphics(piezoOpening, vacuumKPa, jetActive, bypassBlow, chipY, timestamp) {
      // 1. 压电叠堆微位移与阀针 (视觉上微放大位移强化表达)
      const pzOffset = piezoOpening * 6; // 向右微推
      piezoStack.setAttribute('transform', `translate(${pzOffset}, 0)`);

      // 2. 射流管视觉强度
      jetExpansion.setAttribute('opacity', jetActive ? (0.3 + piezoOpening * 0.7).toString() : '0');

      // 3. 真空腔紫色发光底色
      const vacAlpha = Math.max(0, -vacuumKPa / 60.0);
      vacGlowPath.setAttribute('opacity', (vacAlpha * 0.85).toFixed(2));

      // 4. 破真空支路脉冲动画
      if (bypassBlow) {
        bypassAirPulse.setAttribute('opacity', '1');
        const dashOffset = -((timestamp * 0.3) % 24);
        bypassAirPulse.setAttribute('stroke-dashoffset', dashOffset.toString());
      } else {
        bypassAirPulse.setAttribute('opacity', '0');
      }

      // 5. 工件芯片位置与抓紧箭头
      workpiece.setAttribute('transform', `translate(0, ${chipY})`);
      if (vacuumKPa < -35 && chipY <= 1) {
        gripForceArrows.setAttribute('opacity', '1');
      } else {
        gripForceArrows.setAttribute('opacity', '0');
      }

      // 6. 粒子系统更新
      // 供气粒子
      particlesSupply.forEach(p => {
        if (piezoOpening > 0.05) {
          p.y += p.speed * (0.4 + piezoOpening * 0.8);
          if (p.y > 140) {
            p.y = 75;
            p.x = 480 + Math.random() * 40;
          }
          p.el.setAttribute('cx', p.x.toFixed(1));
          p.el.setAttribute('cy', p.y.toFixed(1));
          p.el.setAttribute('opacity', (0.3 + piezoOpening * 0.7).toFixed(2));
        } else {
          p.el.setAttribute('opacity', '0.1');
        }
      });

      // 排气粒子
      particlesExhaust.forEach(p => {
        if (jetActive) {
          p.x += p.vx * piezoOpening;
          p.y += p.vy;
          p.life += 0.03;
          if (p.life > 1 || p.x > 820) {
            p.x = 720 + Math.random() * 15;
            p.y = 265 + Math.random() * 30;
            p.life = 0;
          }
          p.el.setAttribute('cx', p.x.toFixed(1));
          p.el.setAttribute('cy', p.y.toFixed(1));
          p.el.setAttribute('opacity', ((1 - p.life) * piezoOpening * 0.8).toFixed(2));
        } else {
          p.el.setAttribute('opacity', '0');
        }
      });

      // 抽吸粒子 (向上涌入文丘里混合腔)
      particlesSuction.forEach(p => {
        if (vacuumKPa < -15) {
          p.y -= p.vy * (-vacuumKPa / 60.0);
          p.x = p.baseX + Math.sin(p.y * 0.05) * 8;
          if (p.y < 280) {
            p.y = 490 - Math.random() * 20;
            p.baseX = 460 + Math.random() * 80;
          }
          p.el.setAttribute('cx', p.x.toFixed(1));
          p.el.setAttribute('cy', p.y.toFixed(1));
          p.el.setAttribute('opacity', ((-vacuumKPa / 60.0) * 0.8).toFixed(2));
        } else {
          p.el.setAttribute('opacity', '0');
        }
      });
    }

    // ==================== 交互控制函数 ====================
    function togglePlay() {
      isPlaying = !isPlaying;
      const btn = document.getElementById('btn-play');
      const icon = document.getElementById('play-icon');
      const text = document.getElementById('play-text');
      if (isPlaying) {
        btn.classList.add('active-play');
        icon.innerText = '⏸';
        text.innerText = '自动连续循环';
      } else {
        btn.classList.remove('active-play');
        icon.innerText = '▶';
        text.innerText = '已暂停播放';
      }
    }

    function stepSlowMo() {
      if (timeScale === 1.0) {
        timeScale = 0.3;
        document.getElementById('speed-text').innerText = '0.3x 慢动作剖析';
      } else {
        timeScale = 1.0;
        document.getElementById('speed-text').innerText = '1.0x 正常速度';
      }
    }

    function resetCycle() {
      cycleTime = 0.0;
    }

    function jumpToPhase(phaseIdx) {
      const targetTimes = [0.1, 1.4, 2.8, 4.5];
      cycleTime = targetTimes[phaseIdx];
      if (!isPlaying) {
        togglePlay();
      }
    }

    // 页面加载完成后立即自动启动动画
    window.addEventListener('DOMContentLoaded', () => {
      requestAnimationFrame(updateSimulation);
    });
  </script>
</body>
</html>
积分规则:每轮对话扣10分