【问题标题】:pySerial setDTR not working wellpySerial setDTR 无法正常工作
【发布时间】:2013-10-29 08:12:21
【问题描述】:

起初我在 Python 2.7.x、Windows 7 (64) 和 FTDIFT232RL 的最新版本中使用 PYthon 2.7.5、pySerial(所以不是真正的 RS232 串行端口)。 仅用于我创建此代码的测试:

class cProduction:

    g_comPort_name = "COM1"
    g_comPort = 0

    # Instance of object -------------------------------------------------------
    def __init__(self, portName):
        self.data = []
        self.g_comPort_name = portName

    # Main functions -----------------------------------------------------------
    def start(self):
        """ Open port, configure port, set pins of serial line to default state
        DTR true, RTS false """
        try:
            self.g_comPort = serial.Serial(
                port = self.g_comPort_name,
                baudrate = 9600,
                parity = serial.PARITY_NONE,
                stopbits = serial.STOPBITS_ONE,
                bytesize = serial.EIGHTBITS,
                timeout = 10,
                dsrdtr = False,
                xonxoff = False,
                rtscts = False)

            if self.g_comPort.isOpen():
                return True
            else:
                return False
        except:
            return False
        return False

主要:

prod = cProduction("COM33")
if prod.start():
    print Style.BRIGHT + Fore.YELLOW + "Open" + Style.RESET_ALL
    while True:
        key = raw_input('key: ')
        if key == "R":
            prod.g_comPort.setRTS(True)
        if key == "r":
            prod.g_comPort.setRTS(False)
        if key == "D":
            prod.g_comPort.setDTR(True)
        if key == "d":
            prod.g_comPort.setDTR(False)

else:
    print Style.BRIGHT + Fore.RED + "Error while starting production module" + Style.RESET_ALL

RTS 运行良好,但 DTR 有问题。当我将 DTR 设置为 False 时,我可以在示波器上看到 DTR 确实设置为低电平,但在约 700 毫秒后它又返回到高电平(我这边没有任何中断)。在这个时候 setDTR(False) 不再工作了。我必须先调用 setDTR(True) ,然后 setDTR(False) 再次工作(但在 700 毫秒后又回到高电平)。时间700ms都是一样的。 我尝试更改“dsrdtr”或“rtscts”的配置,但没有帮助。

我有基于 C++ 的 Qt 应用程序,它可以在我的设备上正常工作,现在我只是想将它重写为 Python,所以我 100% 确定我的设备是正确的。

编辑:我在笔记本电脑上使用真正的 RS232 COM 端口进行了尝试,它可以正常工作。所以看来 pySerial 与 FTDI 芯片的虚拟 COM 端口有问题...

【问题讨论】:

    标签: python pyserial ftdi


    【解决方案1】:

    它看起来更像是硬件或驱动程序问题,而不是 python 问题。 有什么与 dtr 相关的吗?这可能是硬件保护触发,因为消耗了太多电流。

    您可以尝试在您的应用程序和 Qt 应用程序上使用 loggerapimonitor 看看是否有任何区别。

    【讨论】:

    • 我再次检查了基于 C++ 的 GUI 应用程序,我也发现了这个问题,但时间延迟不是大约 700 毫秒,而是大约 2 秒。所以这很奇怪,现在它看起来像是硬件(设备)的一个真正问题,幸运的是它正在工作。但首先我必须与硬件部门核实。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-01
    • 2016-12-10
    • 1970-01-01
    • 2016-09-01
    • 2012-07-11
    • 2018-04-08
    • 2017-04-20
    相关资源
    最近更新 更多