串行端口访问被拒绝
端口已列出并选中,但每次连接尝试都会立即失败,并显示访问或权限错误。
你会看到
端口会出现在下拉列表中。你选中端口并点击Connect后,连接会立即失败,而不是在超时或尝试几秒后失败。错误信息会包含你的端口名称,内容类似:
打开 COM7 时访问被拒绝:访问遭拒。另一个应用进程可能正在使用此串行端口。请关闭其他激光或串行软件,拔下并重新连接控制器,然后重试。
具体措辞取决于操作系统。在Windows上,详细信息是“访问遭拒”,并建议关闭其他软件,这通常就是原因。在Linux和macOS上,详细信息是“权限不足”,提示则指向串行设备权限问题:
打开 /dev/ttyUSB0 时访问被拒绝:权限不足。你的用户账户可能没有打开串行设备的权限。在 Linux 上,请将用户加入 dialout 组(或发行版的串行组),然后注销并重新登录。
发生了什幺
端口是真实存在的,Beam Bench也能看到它,问题出在打开端口上。串行端口同一时间只能由一个进程打开。其他进程已经打开了该端口,因此操作系统拒绝第二次打开,Beam Bench会将其报告为访问被拒绝,而不是在握手过程中超时。
Beam Bench无法从其他进程那里夺取端口。修复始终需要在你的设备上完成:找到并关闭已经占用端口的进程。
修复方法
如果你使用Windows
这种情况几乎总是发生在这里。请检查:
- Arduino IDE是否打开了Serial Monitor,或者是否仍在同一个COM端口上选中了开发板。
- PlatformIO的串行监视器,或仍在进行中的上传操作。
- 仍连接到该端口的串行终端,例如PuTTY。
- 已打开端口但未释放端口的固件烧录工具。
- 仍在运行的其他雕刻软件,即使它已最小化。
- Beam Bench的第二个副本、另一个窗口或另一个实例。
如果你使用Linux
错误详细信息是“权限不足”。在Linux上,这几乎总是意味着你的用户帐户不在dialout组中。这是权限问题,而不是进程占用端口:如果确实有其他进程占用端口,Linux通常会报告端口忙,而不是访问被拒绝。请参阅Linux串行权限了解修复方法。
如果你已经在dialout组中但仍看到此错误,请检查是否有进程以独占方式占用端口:串行终端(screen、minicom)、烧录工具或另一个Beam Bench实例。关闭它,然后重新连接。
如果你使用macOS
这种情况不太常见,但规则相同:打开该端口的串行终端或其他进程会阻止Beam Bench打开端口。关闭它,然后重新连接。
可解决大多数情况的一般步骤
- 关闭所有可能与串行端口通信的进程:Arduino IDE、PlatformIO、串行终端、固件烧录工具、其他雕刻软件以及Beam Bench的第二个副本。
- 拔下控制器的USB线缆。
- 等待几秒。
- 重新插入线缆。
- 在Beam Bench中重新连接。
如果找不到占用端口的进程
重启电脑。重启会释放所有被占用的端口,即使你无法找到占用它们的进程。如果Beam Bench在重启后立即顺利连接,而错误稍后又出现,那幺你在这期间打开的某个进程就是罪魁祸首。
仍然无法解决?
- 机器无法连接:更广泛的连接失败问题,包括端口错误和波特率错误。
- Linux串行权限:在Linux上设置
dialout组。 - 连接诊断面板:在尝试连接时查看事件日志。
- 在Facebook群组发帖,并说明你的操作系统以及问题发生时还有哪些进程处于打开状态。