Read/Write 值一段时间,pyserial 抛出 ClearCommError failed (PermissionError(13, 'Access denied', None, 5)

Read/Write value for some time,pyserial throws ClearCommError failed (PermissionError(13, 'Access denied', None, 5)

我已经通过 PySide2 创建了一个桌面 UI,然后通过 pyserial 与 USB 设备通信,但是 read/write 数据有一段时间了,我得到的错误是:

Traceback (most recent call last):
    File "C:\Users\t\Desktop\test\tabWidget.py", line 160, in timeTick
        bTemp.append(float(setCommand(self.mainwindow.ser, 'drum_temp')))
    File "C:\Users\t\Desktop\test\utils.py", line 88, in setCommand
        while serialObj.inWaiting() > 0:
    File "C:\Users\t\Anaconda3\lib\site-packages\serial\serialutil.py", line 590, in inWaiting
        return self.in_waiting
    File "C:\Users\t\Anaconda3\lib\site-packages\serial\serialwin32.py", line 257, in in_waiting
        raise SerialException("ClearCommError failed ({!r})".format(ctypes.WinError()))
    serial.serialutil.SerialException: ClearCommError failed (PermissionError(13, 'Access denied', None, 5)

首先,我在点击'connect'按钮时打开串口,然后read/write数据通过一个函数发送到设备。初始化一些命令到设备,或者写入命令从设备读取数据时有时会抛出错误。

我的笔记本电脑有点奇怪 运行 代码没问题,但我同事的另一台笔记本电脑总是抛出这个错误。并使用管理员在命令行上 运行 代码,结果相同。

这是环境:

read/write函数如下:

def setCommand(serialObj, command):
    try:
        if serialObj is not None and serialObj.isOpen():
            serialObj.flushInput()
            byteData = bytes()
            if len(command) > 0:
                serialObj.write(command.encode() + '\r'.encode())
                time.sleep(0.1)
                while serialObj.inWaiting() > 0:
                    byteData += serialObj.read(serialObj.inWaiting()) 
        return byteData.decode('ascii').rstrip('\r\n')
    except Exception:
        traceback.print_exc()
        pass
    return None

这是串行设置

serialObj = serial.Serial(
    port='COM3',
    baudrate=57600,
    parity=serial.PARITY_NONE,
    stopbits=serial.STOPBITS_ONE,
    bytesize=serial.EIGHTBITS,
    timeout=0.5,
    writeTimeout=0)

我希望代码可以 运行 在任何笔记本电脑上,任何人都可以帮助我吗?

当连接另一端的设备出于任何其他原因重置或关闭连接时,就会出现您看到的错误。

您是否在两台笔记本电脑上使用相同的 USB 适配器?如果是这样,也许可以尝试使用任何其他 USB 端口将其连接到。这可能是 USB 控制器之一的硬件问题。也可能是连接到同一 USB 主机的另一台设备干扰或奇怪的驱动程序问题。

您可以使用许多硬件和软件工具来检查 USB 端口。参见,例如,here or here.