Files

1.3 KiB
Raw Permalink Blame History

由单个 Python 进程构成,核心是 http.server.ThreadingHTTPServer + SimpleHTTPRequestHandler 派生类:

  • 路由层:根路径 302 到 /tabs.html,/pages/*、/css/*、/js/* 等走内置目录静态映射;/ws/app-lease 实现基于全局计数器的 app 窗口租约协议(全部断开自动停止 EtherCAT PDO 循环并从站退回 INIT);POST /api/shutdown 终止本服务。
  • EtherCAT 反向代理:/ecat/api/<路径> 通过 TCP 转发到 tools/ecat/build_native/ecat_native.exe 的 8090–8095 端口,首次命中时按进程 ID 复用已有实例,否则以 --parent-pid 拉起子进程并由 Job Object 连带回收。
  • 单实例互斥:通过命名互斥量 + /api/focus HTTP 唤醒旧实例,避免双击重复弹出。
  • 前端注入:响应 HTML 时在 </body> 前注入 _RELOAD_SNIPPET,为 pywebview 提供刷新按钮、F5/Ctrl+R 键盘拦截和返回主页行为。
  • 启动外壳:esp32_app.vbs 使用 pythonw.exe --window 启动 pywebview 桌面窗口(无控制台),esp32_web.vbs 用相同入口但以隐藏方式启动并交由系统默认浏览器打开。 依赖方向单向向下:VBScript → Python HTTP 服务 → 可选拉起的 ecat_native.exe;所有业务 API 实际由 ESP32 设备 (80 端口) 提供,本服务不直接读写硬件。