起初,我在Python 2.7.x,Windows 7(64)和FTDIFT232RL(所以不是真正的RS232串行端口)上使用PYthon 2.7.5,pySerial。 只是爲了測試我創建了這個代碼:pySerial setDTR工作不正常
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與虛擬COM端口與FTDI芯片有問題...
我再次檢查我的GUI應用程序的基礎上,我也發現了這個問題,但沒有約700ms的時間延遲,但約2秒。所以這很奇怪,現在它看起來像是一個真正的HW(設備)問題,並且它運行起來很幸運。但首先我要與HW部門覈對。 – Lodhart