起初,我在 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 端口存在问题......