【问题标题】:Read/Write value for some time,pyserial throws ClearCommError failed (PermissionError(13, 'Access denied', None, 5)读/写值一段时间,pyserial 抛出 ClearCommError failed (PermissionError(13, 'Access denied', None, 5)
【发布时间】:2019-07-18 01:59:10
【问题描述】:

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

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)

首先,我在点击“连接”按钮时打开串口,然后通过一个功能读取/写入数据到设备。初始化一些命令到设备,或者写命令从设备读取数据时,有时会抛出错误。

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

这是环境:

  • Windows 10 64 位
  • python 3.6.8 -> conda create -n py36 python=3.6
  • PySide2 5.13.0
  • pyserial 3.4
  • 点 19.1.1

读写功能如下:

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)

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

【问题讨论】:

    标签: python-3.x pyserial


    【解决方案1】:

    您看到的错误发生在连接另一端的设备因任何其他原因重置或关闭连接时。

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

    您可以使用许多硬件和软件工具来检查您的 USB 端口。例如,请参阅 herehere

    【讨论】:

    • 笔记本电脑没有使用相同的USB适配器,只需在不同时间单独连接即可运行我的桌面程序
    • 您的意思是他们使用的是同一个 USB 适配器,对吧?有什么东西突然关闭了连接,这就是您看到该错误的原因。
    • 不是,设备通过USB连接到我的笔记本电脑,操作系统是Win10 64bit Home edition,运行代码稳定,笔记本电脑是华硕。其他笔记本电脑是微软Surface或者Mac book air,都是win10 64bit pro版,但是都运行代码,同样报错。
    • 所有的软件版本和驱动都一样吗?您是否尝试过切换到其他 USB 端口或添加一个带有电源的 USB 集线器?有时 USB 设备需要的电量超过了计算机能够提供的电量,这会导致设备重置等等……您可以在运行程序时尝试移除 USB,以验证是否看到相同的错误。
    • 升级USB驱动后,问题似乎解决了。谢谢
    猜你喜欢
    • 2022-06-22
    • 2021-03-17
    • 2021-01-10
    • 2020-07-22
    • 2017-02-12
    • 1970-01-01
    • 2016-07-21
    • 2019-07-31
    • 2016-08-17
    相关资源
    最近更新 更多