처음에는 Python 2.7.x, Windows 7 (64) 및 FTDIFT232RL (실제 RS232 직렬 포트가 아님)의 마지막 버전에서 Python 2.7.5, pySerial을 사용하고 있습니다.pySerial setDTR 잘 작동하지 않습니다
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에 문제가 :
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
홈페이지 : 는 그냥 시험이 코드를 만들었습니다. DTR을 False로 설정하면 osciloscope에서 DTR이 실제로 로우 레벨로 설정되었음을 알 수 있습니다.하지만 ~ 700ms 후에는 높은 레벨로 되돌아갑니다 (내 측면에서 인터럽트 없음). 이 시간에 setDTR (False)가 더 이상 작동하지 않습니다. 먼저 setDTR (True)를 호출해야하고 setDTR (False)이 다시 작동하지만 (다시 700ms 후에 다시 높은 수준으로 되돌아 간다) 다시 호출해야합니다. 700ms의 시간은 모두 동일합니다. 'dsrdtr'또는 'rtscts'의 구성을 변경하려고했지만 도움이되지 않았습니다.
내 장치가 올바르게 작동하는 Qt 응용 프로그램이 C++를 기반으로하고 있습니다. 이제는 장치를 올바르게 사용하고 있으므로 파이썬으로 다시 작성하려고합니다. 따라서 장치가 올바른지 100 % 확신합니다.
편집 : 내 랩톱에서 실제 RS232 COM 포트로 시도해 보았습니다. 그래서 pySerial FTDI 칩 가상 COM 포트에 문제가있는 것 같습니다 ...
C++에서 내 GUI 응용 프로그램 기반을 다시 확인한 결과이 문제는 발견되었지만 약 700ms이지만 약 2 초는 걸리지 않았습니다. 그래서 매우 이상한데 이제는 HW (장치)에 실제로 문제가있는 것처럼 보였고 운 좋게도 작동했습니다. 하지만 먼저 HW 부서에 확인해야합니다. – Lodhart