2013-10-29 4 views
0

처음에는 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 포트에 문제가있는 것 같습니다 ...

답변

0

그것은 파이썬 문제보다 하드웨어 또는 드라이버 문제와 비슷해 보입니다. dtr에 연결된 항목이 있습니까? 많은 전류가 소모되기 때문에 하드웨어 보호 트리거가 될 수 있습니다.

logger 또는 apimonitor을 응용 프로그램과 Qt에서 사용하면 차이가 있는지 확인할 수 있습니다.

+0

C++에서 내 GUI 응용 프로그램 기반을 다시 확인한 결과이 문제는 발견되었지만 약 700ms이지만 약 2 초는 걸리지 않았습니다. 그래서 매우 이상한데 이제는 HW (장치)에 실제로 문제가있는 것처럼 보였고 운 좋게도 작동했습니다. 하지만 먼저 HW 부서에 확인해야합니다. – Lodhart