串口 COM 端口被占用:The port is already open 怎么解决

打开串口时提示 **`The port is already open`** 或无法占用 COM,说明该端口句柄仍被某进程持有,或上一轮 Web Serial / 桌面助手未释放读写锁。

### 常见原因

  1. Arduino IDE、串口监视器、另一串口助手未关闭。
  2. 上次网页调试未点断开,读循环仍占着 `ReadableStream`。
  3. 热拔插后系统重建节点,旧句柄僵死。
  4. 虚拟串口/驱动异常,设备管理器需禁用再启用。

### 处理步骤

  1. 关掉所有可能占用的串口软件。
  2. 网页端点「断开」,刷新页面;必要时 `forget()` 后重新授权。
  3. 设备管理器禁用/启用 COM,或拔插 USB。
  4. 任务管理器结束残留串口相关进程。
  5. 仍不行:重启浏览器或注销 Windows 会话。

### Web Serial 特别注意

规范关闭顺序:cancel 读取 → releaseLock → close writer → `port.close()`。异常断开若不释放,容易出现「端口已打开」。实现良好的在线串口工具会在 `disconnect` 事件里做清理。

### 预防

  • 同一 COM 同时只给一个程序。
  • 调试结束养成断开习惯。
  • 产线电脑固定工具白名单,减少多软件抢口。

COM 被占用是串口调试高频问题:先杀占用者,再查是否未释放的 Web Serial 锁,最后才重装驱动。