打开串口时提示 **`The port is already open`** 或无法占用 COM,说明该端口句柄仍被某进程持有,或上一轮 Web Serial / 桌面助手未释放读写锁。
### 常见原因
- Arduino IDE、串口监视器、另一串口助手未关闭。
- 上次网页调试未点断开,读循环仍占着 `ReadableStream`。
- 热拔插后系统重建节点,旧句柄僵死。
- 虚拟串口/驱动异常,设备管理器需禁用再启用。
### 处理步骤
- 关掉所有可能占用的串口软件。
- 网页端点「断开」,刷新页面;必要时 `forget()` 后重新授权。
- 设备管理器禁用/启用 COM,或拔插 USB。
- 任务管理器结束残留串口相关进程。
- 仍不行:重启浏览器或注销 Windows 会话。
### Web Serial 特别注意
规范关闭顺序:cancel 读取 → releaseLock → close writer → `port.close()`。异常断开若不释放,容易出现「端口已打开」。实现良好的在线串口工具会在 `disconnect` 事件里做清理。
### 预防
- 同一 COM 同时只给一个程序。
- 调试结束养成断开习惯。
- 产线电脑固定工具白名单,减少多软件抢口。
COM 被占用是串口调试高频问题:先杀占用者,再查是否未释放的 Web Serial 锁,最后才重装驱动。