Python pySerial setDTR工作不正常

Python pySerial setDTR工作不正常,python,pyserial,ftdi,Python,Pyserial,Ftdi,首先,我使用Python2.7.5,Python2.7.x的最新版本中的pySerial,Windows7(64)和FTDIFT232RL(所以不是真正的RS232串行端口)。 仅针对测试,我创建了以下代码: class cProduction: g_comPort_name = "COM1" g_comPort = 0 # Instance of object -----------------------------------------------------

首先,我使用Python2.7.5,Python2.7.x的最新版本中的pySerial,Windows7(64)和FTDIFT232RL(所以不是真正的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
主要内容:

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

<>我有基于C++的QT应用程序,它正在正确地使用我的设备,现在我正试图将它重写到Python,所以我确信我的设备是正确的。
编辑:我在笔记本电脑上用真正的RS232 COM端口进行了尝试,它工作正常。因此,pySerial似乎与FTDI芯片的虚拟COM端口有问题…

它看起来更像是硬件或驱动程序问题,而不是python问题。 有什么东西连接到dtr吗?这可能是一个硬件保护触发,因为需要消耗太多的电流


<>你可以尝试使用或应用你的QT,看看是否有什么不同。

我再次检查了C++的GUI应用程序,我也发现了这个问题,但是没有时间延迟大约700毫秒,但是大约2秒。所以这是非常奇怪的,现在它看起来是一个真正的问题与硬件(设备),并与一些幸运的是,它是工作。但首先我得和硬件部门核实一下。
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