1.3 KiB
1.3 KiB
由单个 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/focusHTTP 唤醒旧实例,避免双击重复弹出。 - 前端注入:响应 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 端口) 提供,本服务不直接读写硬件。