pySerial setDTR运行不正常

时间:2013-10-29 08:12:21

标签: python pyserial ftdi

起初我使用的是PYthon 2.7.5,pySerial在最后一个版本中用于Python 2.7.x,Windows 7(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

主:

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确实被设置为低电平,但是在大约700ms之后它返回到高电平(没有来自我方的任何中断)。在这段时间内,setDTR(False)不再起作用了。我必须首先调用setDTR(True),然后setDTR(False)再次工作(但在700ms之后再次返回高电平)。时间700毫秒都是一样的。 我试图改变'dsrdtr'或'rtscts'的配置,但它没有帮助。

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

编辑:我在笔记本电脑上使用真正的RS232 COM端口尝试了它,并且它正在运行。所以似乎pySerial的FTDI芯片的虚拟COM端口有问题......

1 个答案:

答案 0 :(得分:0)

它看起来更像是硬件或驱动程序问题,而不是python问题。 有什么东西连接到dtr?它可能是一个硬件保护触发因为会产生大量电流。

您可以尝试在应用程序和Qt上使用loggerapimonitor来查看是否存在任何差异。