Getcommmodemstatus function failed win error code 6 mr140diag

Нравится ресурс?

    msm.ru

    Нравится ресурс?

    Помоги проекту!

    [!] Как относитесь к модерированию на этом форуме? Выскажите свое мнение здесь

    >
    Как определить состояние DCD сигнала COM-порта?
    , COM-порт

    • Подписаться на тему
    • Сообщить другу
    • Скачать/распечатать тему



    Сообщ.
    #1

    ,
    05.04.08, 00:45

      У меня имеется девайс (ИК-приемник), который сообщает компу об изменении состояния (при приеме сигнала от пульта) DCD сигналом. Различные COM-терминалы отлично принимают этот сигнал. Хотелось бы чтобы моя программа делала то же самое. Кто знает, помогите пожалуйста разобраться в принципе приёма DCD сигнала. Буду очень признателен примерам в виде исходниов.

      P.S. Как получить значение бита DCD («0» или «1»)?


      trainer



      Сообщ.
      #2

      ,
      05.04.08, 12:37

        функция GetCommModemStatus, бит MS_RLSD_ON


        smp



        Сообщ.
        #3

        ,
        06.04.08, 13:22

          Попробовал в своей проге функцию GetCommModemStatus:

          ExpandedWrap disabled

            LPDWORD lpModemStat;

            void __fastcall TForm1::Button3Click(TObject *Sender)

            {if(!GetCommModemStatus(port, lpModemStat))

               Label2->Caption=IntToStr(MS_RLSD_ON);

             else   Label1->Caption=»Error»;

            }

          Что при открытом порте, что при закрытом MS_RLSD_ON = 128. Может быть я ей не правильно пользуюсь.. Если не трудно скиньте пожалуйста небольшой примерчик с применением этой функции. Заранее благодарен.

          Сообщение отредактировано: smp — 06.04.08, 13:45


          trainer



          Сообщ.
          #4

          ,
          07.04.08, 04:23

            ты бы хоть для приличия почитал описание этой функции. В частности, о предназначении ее второго параметра. Или настоящие программисты не читают документацию?

            ExpandedWrap disabled

              void __fastcall TForm1::Button3Click(TObject *Sender) {

                 DWORD dwModemStat;

                 if( !GetCommModemStatus(port, &dwModemStat) )

                    Label2->Caption = (dwModemStat&MS_RLSD_ON)?»On»:»Off»;

                 else

                    Label1->Caption=»Error»;

              }


            smp



            Сообщ.
            #5

            ,
            08.04.08, 01:05

              Елси кто также не может разобраться с COM-портом, вот один добрый человек поделился — простой но зато очень понятный примерчик-исходник

              Прикреплённый файлПрикреплённый файлComTest02.zip (7.25 Кбайт, скачиваний: 210)

              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)

              0 пользователей:

              • Предыдущая тема
              • Borland C++ Builder/Turbo C++ Explorer
              • Следующая тема

              Рейтинг@Mail.ru

              [ Script execution time: 0,0238 ]   [ 16 queries used ]   [ Generated: 9.02.23, 19:11 GMT ]  


              Re[2]: GetCommModemStatus

              От:

              Злость

              Россия

               
              Дата:  22.03.04 13:28
              Оценка:

              1 (1)

              Здравствуйте, rsdn_v, Вы писали:

              _>> Буду рад услышать дельные соображения


              _> Вопрос криво поставлен или умельцев здесь нет ?

              Раз вы такое пишете.

              То могу только сказать — вы как минимум забыли указать что возвращает GetLastError после того как GetCommModemStatus вернула 0.

              И поскриптум… Вы нас на понт не берите

              Правда, Ложь — мне все одно — я имею свое мнение.
              Если функция недокументированна — это не значит, что ее не используют все ваши конкуренты в своих продуктах.
              Любой строй переходный и отрицать это значит быть закостенелым идиотом.

              От:

              rsdn_v

               
              Дата:  17.03.04 09:58
              Оценка:

              Всем привет.

              Вопрос такой — всегда ли GetCommModemStatus в состоянии определить статус ком-порт, и, если нет, то можно ли об этом узнать.

              Вопрос возник из такой ситуации : есть программа, есть железка, работающая через com-порт. Перед обменом инф-цией с этой железкой нужно выставить ей DTR и дождаться от неё CTS или DSR. После этого можно общаться. Выяснилось, что на компьютере разработчика всё работает как тут описано (как обычно и бывает ;), но на некоторых (не на всех) компьютерах клиентов GetCommModemStatus всегда возвращает 0, хотя реально железка выставляет CTS (или DSR — неважно ;)

              Буду рад услышать дельные соображения ;)

              Спасибо, Влад

              От:

              rsdn_v

               
              Дата:  22.03.04 13:18
              Оценка:

              _> Буду рад услышать дельные соображения ;)

              Вопрос криво поставлен или умельцев здесь нет ?


              Re[3]: GetCommModemStatus

              От:

              rsdn_v

               
              Дата:  22.03.04 14:00
              Оценка:

              Здравствуйте, Злость, Вы писали:

              З>То могу только сказать — вы как минимум забыли указать что возвращает GetLastError после того как GetCommModemStatus вернула 0.

              Да, каюсь, не сказал — после всех вызовов API стоит проверка GetLastError, и если там не 0,
              то ClearCommError. Причём рез-ты этого пишутся в протокол (если есть что писать ;).
              Могу уверить, что GetLastError возвращал 0.

              В MSDN написано
              «The function fails if the hardware does not support the control-register values»

              однако, GetLastError возвращает 0, и хотелось бы знать — как распознать такое кривое hardware

              З>И поскриптум… Вы нас на понт не берите :-))


              Дык и меня не стоит брать ;)


              Re[4]: GetCommModemStatus

              От:

              Злость

              Россия

               
              Дата:  22.03.04 14:12
              Оценка:

              Здравствуйте, rsdn_v, Вы писали:

              _>Здравствуйте, Злость, Вы писали:

              _>…
              З>>То могу только сказать — вы как минимум забыли указать что возвращает GetLastError после того как GetCommModemStatus вернула 0.

              _> Да, каюсь, не сказал — после всех вызовов API стоит проверка GetLastError, и если там не 0,

              _>то ClearCommError. Причём рез-ты этого пишутся в протокол (если есть что писать .
              _>Могу уверить, что GetLastError возвращал 0.

              _> В MSDN написано

              _>»The function fails if the hardware does not support the control-register values»

              _>однако, GetLastError возвращает 0, и хотелось бы знать — как распознать такое кривое hardware

              З>>И поскриптум… Вы нас на понт не берите


              _> Дык и меня не стоит брать

              Из вас инфу надо вытягивать?

              Какая платформа. W9X или NT — на какой работает, а на кокой нет ?

              Правда, Ложь — мне все одно — я имею свое мнение.
              Если функция недокументированна — это не значит, что ее не используют все ваши конкуренты в своих продуктах.
              Любой строй переходный и отрицать это значит быть закостенелым идиотом.


              Re[5]: GetCommModemStatus

              От:

              rsdn_v

               
              Дата:  22.03.04 14:20
              Оценка:

              Здравствуйте, Злость, Вы писали:

              З>Какая платформа. W9X или NT — на какой работает, а на кокой нет ?

              W2K — в обоих случаях, машины разные. Не работало на машине с какой-то
              microATX матерью (не было возможности узнать точнее) и процессором Via
              гигагерцовым.


              Re[6]: GetCommModemStatus

              От:

              Злость

              Россия

               
              Дата:  22.03.04 14:26
              Оценка:

              Здравствуйте, rsdn_v, Вы писали:

              _>Здравствуйте, Злость, Вы писали:


              З>>Какая платформа. W9X или NT — на какой работает, а на кокой нет ?


              _>W2K — в обоих случаях, машины разные. Не работало на машине с какой-то

              _>microATX матерью (не было возможности узнать точнее) и процессором Via
              _>гигагерцовым.

              Попробуй примерно такой код

              #define DSR_TIMEOUT 1000L
              DWORD dwModemStatus;
              DWORD dwStartTime, dwNowTime;
              dwStartTime = dwNowTime = GetTickCount();
              do {
                 GetCommModemStatus(hCom, &dwModemStatus);
                 if (!(dwModemStatus & MS_DSR_ON)) Sleep(50);
                 dwNowTime = GetTickCount();
              } while ((!(dwModemStatus & MS_DSR_ON)) && (labs(dwStartTime - dwNowTime) < DSR_TIMEOUT));
              if (!(dwModemStatus & MS_DSR_ON)) {
              }

              Правда, Ложь — мне все одно — я имею свое мнение.
              Если функция недокументированна — это не значит, что ее не используют все ваши конкуренты в своих продуктах.
              Любой строй переходный и отрицать это значит быть закостенелым идиотом.


              Re[4]: GetCommModemStatus

              От:

              Sergeant

              Украина

              www.photomirror.com.ua
              Дата:  22.03.04 14:33
              Оценка:

              Здравствуйте, rsdn_v, Вы писали:

              _>Здравствуйте, Злость, Вы писали:

              _> Да, каюсь, не сказал — после всех вызовов API стоит проверка GetLastError, и если там не 0,
              _>то ClearCommError. Причём рез-ты этого пишутся в протокол (если есть что писать .
              _>Могу уверить, что GetLastError возвращал 0.

              _> В MSDN написано

              _>»The function fails if the hardware does not support the control-register values»

              _>однако, GetLastError возвращает 0, и хотелось бы знать — как распознать такое кривое hardware

              Видел нечто подобное. Там проблема была в том, что перед вызовом QueryPerformanceFrequency человек объявлял указатель на структуру LARGE_INTEGER *lpFrequency, но забывал выделить под нее память. В результате получалась как раз такая ситуация: GetLastError = 0, но и функция возвращает FALSE, что, согласно МСДН говорит о том, что фиче не поддерживается железом.
              Ошибка дурная, и все-таки, проверьте: а вдруг забыли память выделить?

              http://www.rsdn.org/File/3216/logoa.gifКурить я буду, но пить не брошу.


              Re[7]: GetCommModemStatus

              От:

              rsdn_v

               
              Дата:  22.03.04 14:35
              Оценка:

              Здравствуйте, Злость, Вы писали:


              З>Попробуй примерно такой код

              Вот мой код

                EscapeCommFunction(FComHandle, CLRDTR);
                EscapeCommFunction(FComHandle, CLRRTS);  
                CheckError('InitPort.EscapeCommFunction(CLRRTS)');
              
                EscapeCommFunction(FComHandle, SETDTR);  
                CheckError('InitPort.EscapeCommFunction(SETDTR)');
              
                for i := 0 to 3000 div 50 do
                begin
                  if FComHandle = INVALID_HANDLE_VALUE
                  then Exit;
              
                  dwMask := 0;
                  GetCommModemStatus(FComHandle, dwMask);
                  CheckError('InitPort.GetCommModemStatus');
              
                  Result := dwMask and (MS_CTS_ON or MS_DSR_ON) <> 0;
                  if Result
                  then Break;
              
                  Sleep(50);
                end;


              Re[5]: GetCommModemStatus

              От:

              rsdn_v

               
              Дата:  22.03.04 14:40
              Оценка:

              Здравствуйте, Sergeant, Вы писали:

              _>>однако, GetLastError возвращает 0, и хотелось бы знать — как распознать такое кривое hardware

              S>Видел нечто подобное. Там проблема была в том, что перед вызовом QueryPerformanceFrequency человек объявлял указатель на структуру LARGE_INTEGER *lpFrequency, но забывал выделить под нее память. В результате получалась как раз такая ситуация: GetLastError = 0, но и функция возвращает FALSE, что, согласно МСДН говорит о том, что фиче не поддерживается железом.

              Т.е. ф-ция может вернуть не 0, а GetLastError будет 0 ? Интересный поворот ;)
              Попробую при случае, спасибо.

              S>Ошибка дурная, и все-таки, проверьте: а вдруг забыли память выделить? ;)

              Так для вызова GetCommModemStatus не под что память выделять ;)


              Re[6]: GetCommModemStatus

              От:

              Sergeant

              Украина

              www.photomirror.com.ua
              Дата:  22.03.04 14:46
              Оценка:

              Здравствуйте, rsdn_v, Вы писали:

              _>Здравствуйте, Sergeant, Вы писали:


              _>>>однако, GetLastError возвращает 0, и хотелось бы знать — как распознать такое кривое hardware

              S>>Видел нечто подобное. Там проблема была в том, что перед вызовом QueryPerformanceFrequency человек объявлял указатель на структуру LARGE_INTEGER *lpFrequency, но забывал выделить под нее память. В результате получалась как раз такая ситуация: GetLastError = 0, но и функция возвращает FALSE, что, согласно МСДН говорит о том, что фиче не поддерживается железом.



              _> Т.е. ф-ция может вернуть не 0, а GetLastError будет 0 ? Интересный поворот

              _>Попробую при случае, спасибо.
              Точнее — там была ситуация такая, что релиз-сборка работала нормально, а дебаг — функция возвращает FALSE и GetLastError — 0.

              S>>Ошибка дурная, и все-таки, проверьте: а вдруг забыли память выделить?


              _> Так для вызова GetCommModemStatus не под что память выделять

              Точно, это я сглупил.

              http://www.rsdn.org/File/3216/logoa.gifКурить я буду, но пить не брошу.

              Подождите ...

              Wait...

              • Переместить
              • Удалить
              • Выделить ветку

              Пока на собственное сообщение не было ответов, его можно удалить.

              Я пытаюсь подключиться к своему телефону с компьютера под управлением Windows 7, используя PySerial, с помощью следующего кода:

              import wmi
              import serial
              
              c = wmi.WMI()
              modem = c.query("SELECT * FROM Win32_POTSModem").pop()
              ser = serial.Serial(modem.AttachedTo, modem.MaxBaudRateToSerialPort)
              
              try:
                  ser.write('at rn')
                  print ser.readline()
              finally:
                  ser.close()
              

              Но получите следующую ошибку при записи:

              Traceback (most recent call last):
                File "D:AlasdairDocumentsPython ScriptsPhone Interfacetest.py", line 14, in <module>
                  ser.write('at rn')
                File "C:Python26Libsite-packagesserialserialwin32.py", line 255, in write
                  raise SerialException("WriteFile failed (%s)" % ctypes.WinError())
              SerialException: WriteFile failed ([Error 6] The handle is invalid.)
              

              Я попытался соединиться с TeraTerm, и он работает нормально, так что это не проблема с подключением к самому телефону.

              Я искал целую вечность, пытаясь найти решение, но не нашел ничего, что работает. Есть идеи?

              4 ответа

              Лучший ответ

              Я на Windows 7 64 бит, с Python 2.6, и это дает мне ту же ошибку.

              ser = serial.Serial(3,115200,timeout=1)
              ser.read()
              #or ser.write("whatever")
              
              Traceback (most recent call last):
                File "<pyshell#3>", line 1, in <module>
                  ser.read(1)
                File "buildbdist.win-amd64eggserialserialwin32.py", line 236, in read
                  raise SerialException("ReadFile failed (%s)" % ctypes.WinError())
              SerialException: ReadFile failed ([Error 6] The handle is invalid.)
              

              При использовании аналогичной программы с использованием библиотеки c тот же порт отвечает правильно. Что здесь происходит? Похоже, ошибка в Pyserial или Ctypes. Вы тоже используете 64 бит?

              Исходный код для написания в pyserial выглядит очень просто

              def write(self, data):
                      """Output the given string over the serial port."""
                      if not self.hComPort: raise portNotOpenError
                      #~ if not isinstance(data, (bytes, bytearray)):
                          #~ raise TypeError('expected %s or bytearray, got %s' % (bytes, type(data)))
                      # convert data (needed in case of memoryview instance: Py 3.1 io lib), ctypes doesn't like memoryview
                      data = bytes(data)
                      if data:
                          #~ win32event.ResetEvent(self._overlappedWrite.hEvent)
                          n = win32.DWORD()
                          err = win32.WriteFile(self.hComPort, data, len(data), ctypes.byref(n), self._overlappedWrite)
                          if not err and win32.GetLastError() != win32.ERROR_IO_PENDING:
                              raise SerialException("WriteFile failed (%s)" % ctypes.WinError())
              

              Возможно проблема с 64-битными ctypes?


              Обновление: определенно проблема 64 бит по крайней мере для меня. Я только что установил версию Python для x86 (на этот раз 3.1), и теперь она работает нормально. Приблизительно 64-битные ctypes могут импортировать только 64-битные библиотеки. Звучит очень странно, не имея доступа к библиотекам операционной системы.


              6

              Imbrondir
              27 Июн 2010 в 13:03

              Я только что исправил эту проблему на 64-битных окнах (XP, Vista и 7).

              Эта проблема вызвана неправильным приведением дескриптора, который отбрасывает старшее 32-битное 64-битное значение из-за старых функций python-win32. Если вы столкнулись с такой проблемой, пожалуйста, используйте новые функции python-win32, которые включены в модули win32file и т. Д. Пожалуйста, напишите следующий код поверх site-packages serial serialwin32.py.

              #! python
              # Python Serial Port Extension for Win32, Linux, BSD, Jython
              # serial driver for win32
              # see __init__.py
              #
              # (C) 2001-2009 Chris Liechti <cliechti@gmx.net>
              # this is distributed under a free software license, see license.txt
              #
              # Initial patch to use ctypes by Giovanni Bajo <rasky@develer.com>
              
              import ctypes
              import win32
              import win32file
              import win32con
              import pywintypes
              
              from serialutil import *
              
              def device(portnum):
                  """Turn a port number into a device name"""
                  return 'COM%d' % (portnum+1) # numbers are transformed to a string
              
              class Win32Serial(SerialBase):
                  """Serial port implementation for Win32 based on ctypes."""
              
                  BAUDRATES = (50, 75, 110, 134, 150, 200, 300, 600, 1200, 1800, 2400, 4800,
                               9600, 19200, 38400, 57600, 115200)
              
                  def __init__(self, *args, **kwargs):
                      self.hComPort = None
                      SerialBase.__init__(self, *args, **kwargs)
              
                  def open(self):
                      """Open port with current settings. This may throw a SerialException
                         if the port cannot be opened."""
                      if self._port is None:
                          raise SerialException("Port must be configured before it can be used.")
                      # the "\.COMx" format is required for devices other than COM1-COM8
                      # not all versions of windows seem to support this properly
                      # so that the first few ports are used with the DOS device name
                      port = self.portstr
                      try:
                          if port.upper().startswith('COM') and int(port[3:]) > 8:
                              port = '\\.\' + port
                      except ValueError:
                          # for like COMnotanumber
                          pass
                      self.hComPort = win32file.CreateFile(port,
                             win32con.GENERIC_READ | win32con.GENERIC_WRITE,
                             0, # exclusive access
                             None, # no security
                             win32con.OPEN_EXISTING,
                             win32con.FILE_ATTRIBUTE_NORMAL | win32con.FILE_FLAG_OVERLAPPED,
                             0)
                      if self.hComPort == win32.INVALID_HANDLE_VALUE:
                          self.hComPort = None    # 'cause __del__ is called anyway
                          raise SerialException("could not open port %s: %s" % (self.portstr, ctypes.WinError()))
              
                      # Setup a 4k buffer
                      win32file.SetupComm(self.hComPort, 4096, 4096)
              
                      # Save original timeout values:
                      tos = win32file.GetCommTimeouts(self.hComPort)
                      self._orgTimeouts = win32.COMMTIMEOUTS(*tos)
                      self._rtsState = win32.RTS_CONTROL_ENABLE
                      self._dtrState = win32.DTR_CONTROL_ENABLE
              
                      self._reconfigurePort()
              
                      # Clear buffers:
                      # Remove anything that was there
                      win32file.PurgeComm(self.hComPort,
                                          win32.PURGE_TXCLEAR | win32.PURGE_TXABORT |
                                          win32.PURGE_RXCLEAR | win32.PURGE_RXABORT)
              
                      self._overlappedRead = pywintypes.OVERLAPPED()
                      self._overlappedRead.hEvent = win32.CreateEvent(None, 1, 0, None)
                      self._overlappedWrite = pywintypes.OVERLAPPED()
                      #~ self._overlappedWrite.hEvent = win32.CreateEvent(None, 1, 0, None)
                      self._overlappedWrite.hEvent = win32.CreateEvent(None, 0, 0, None)
                      self._isOpen = True
              
                  def _reconfigurePort(self):
                      """Set communication parameters on opened port."""
                      if not self.hComPort:
                          raise SerialException("Can only operate on a valid port handle")
              
                      # Set Windows timeout values
                      # timeouts is a tuple with the following items:
                      # (ReadIntervalTimeout,ReadTotalTimeoutMultiplier,
                      #  ReadTotalTimeoutConstant,WriteTotalTimeoutMultiplier,
                      #  WriteTotalTimeoutConstant)
                      if self._timeout is None:
                          timeouts = (0, 0, 0, 0, 0)
                      elif self._timeout == 0:
                          timeouts = (win32.MAXDWORD, 0, 0, 0, 0)
                      else:
                          timeouts = (0, 0, int(self._timeout*1000), 0, 0)
                      if self._timeout != 0 and self._interCharTimeout is not None:
                          timeouts = (int(self._interCharTimeout * 1000),) + timeouts[1:]
              
                      if self._writeTimeout is None:
                          pass
                      elif self._writeTimeout == 0:
                          timeouts = timeouts[:-2] + (0, win32.MAXDWORD)
                      else:
                          timeouts = timeouts[:-2] + (0, int(self._writeTimeout*1000))
                      win32file.SetCommTimeouts(self.hComPort, timeouts)
              
                      win32file.SetCommMask(self.hComPort, win32.EV_ERR)
              
                      # Setup the connection info.
                      # Get state and modify it:
                      comDCB = win32file.GetCommState(self.hComPort)
                      comDCB.BaudRate = self._baudrate
              
                      if self._bytesize == FIVEBITS:
                          comDCB.ByteSize     = 5
                      elif self._bytesize == SIXBITS:
                          comDCB.ByteSize     = 6
                      elif self._bytesize == SEVENBITS:
                          comDCB.ByteSize     = 7
                      elif self._bytesize == EIGHTBITS:
                          comDCB.ByteSize     = 8
                      else:
                          raise ValueError("Unsupported number of data bits: %r" % self._bytesize)
              
                      if self._parity == PARITY_NONE:
                          comDCB.Parity       = win32.NOPARITY
                          comDCB.fParity      = 0 # Disable Parity Check
                      elif self._parity == PARITY_EVEN:
                          comDCB.Parity       = win32.EVENPARITY
                          comDCB.fParity      = 1 # Enable Parity Check
                      elif self._parity == PARITY_ODD:
                          comDCB.Parity       = win32.ODDPARITY
                          comDCB.fParity      = 1 # Enable Parity Check
                      elif self._parity == PARITY_MARK:
                          comDCB.Parity       = win32.MARKPARITY
                          comDCB.fParity      = 1 # Enable Parity Check
                      elif self._parity == PARITY_SPACE:
                          comDCB.Parity       = win32.SPACEPARITY
                          comDCB.fParity      = 1 # Enable Parity Check
                      else:
                          raise ValueError("Unsupported parity mode: %r" % self._parity)
              
                      if self._stopbits == STOPBITS_ONE:
                          comDCB.StopBits     = win32.ONESTOPBIT
                      elif self._stopbits == STOPBITS_ONE_POINT_FIVE:
                          comDCB.StopBits     = win32.ONE5STOPBITS
                      elif self._stopbits == STOPBITS_TWO:
                          comDCB.StopBits     = win32.TWOSTOPBITS
                      else:
                          raise ValueError("Unsupported number of stop bits: %r" % self._stopbits)
              
                      comDCB.fBinary          = 1 # Enable Binary Transmission
                      # Char. w/ Parity-Err are replaced with 0xff (if fErrorChar is set to TRUE)
                      if self._rtscts:
                          comDCB.fRtsControl  = win32.RTS_CONTROL_HANDSHAKE
                      else:
                          comDCB.fRtsControl  = self._rtsState
                      if self._dsrdtr:
                          comDCB.fDtrControl  = win32.DTR_CONTROL_HANDSHAKE
                      else:
                          comDCB.fDtrControl  = self._dtrState
                      comDCB.fOutxCtsFlow     = self._rtscts
                      comDCB.fOutxDsrFlow     = self._dsrdtr
                      comDCB.fOutX            = self._xonxoff
                      comDCB.fInX             = self._xonxoff
                      comDCB.fNull            = 0
                      comDCB.fErrorChar       = 0
                      comDCB.fAbortOnError    = 0
                      comDCB.XonChar          = XON
                      comDCB.XoffChar         = XOFF
                      win32file.SetCommState(self.hComPort, comDCB)
              
                  #~ def __del__(self):
                      #~ self.close()
              
                  def close(self):
                      """Close port"""
                      if self._isOpen:
                          if self.hComPort:
                              # Restore original timeout values:
                              win32file.SetCommTimeouts(self.hComPort, self._orgTimeouts)
                              # Close COM-Port:
                              win32file.CloseHandle(self.hComPort)
                              win32file.CloseHandle(self._overlappedRead.hEvent)
                              win32file.CloseHandle(self._overlappedWrite.hEvent)
                              self.hComPort = None
                          self._isOpen = False
              
                  def makeDeviceName(self, port):
                      return device(port)
              
                  #  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
              
                  def inWaiting(self):
                      """Return the number of characters currently in the input buffer."""
                      flags = win32.DWORD()
                      comstat = win32.COMSTAT()
                      if not win32file.ClearCommError(self.hComPort, ctypes.byref(flags), ctypes.byref(comstat)):
                          raise SerialException('call to ClearCommError failed')
                      return comstat.cbInQue
              
                  def read(self, size=1):
                      """Read size bytes from the serial port. If a timeout is set it may
                         return less characters as requested. With no timeout it will block
                         until the requested number of bytes is read."""
                      if not self.hComPort: raise portNotOpenError
                      if size > 0:
                          win32.ResetEvent(self._overlappedRead.hEvent)
                          if not win32file.ClearCommError(self.hComPort):
                              raise SerialException('call to ClearCommError failed')
                          if self.timeout == 0:
                              n = min(comstat.cbInQue, size)
                              if n > 0:
                                  rc,buf = win32file.ReadFile(self.hComPort, n, self._overlappedRead)
                                  if win32.GetLastError() != win32.ERROR_IO_PENDING:
                                      raise SerialException("ReadFile failed (%s)" % ctypes.WinError())
                                  err = win32.WaitForSingleObject(self._overlappedRead.hEvent, win32.INFINITE)
                                  read = buf[:rc]
                              else:
                                  read = bytes()
                          else:
                              rc,buf = win32file.ReadFile(self.hComPort, size, self._overlappedRead)
                              rc = win32file.GetOverlappedResult(self.hComPort, self._overlappedRead, True)
                              read = buf[:rc]
                      else:
                          read = bytes()
                      return bytes(read)
              
                  def write(self, data):
                      """Output the given string over the serial port."""
                      if not self.hComPort: raise portNotOpenError
                      #~ if not isinstance(data, (bytes, bytearray)):
                          #~ raise TypeError('expected %s or bytearray, got %s' % (bytes, type(data)))
                      # convert data (needed in case of memoryview instance: Py 3.1 io lib), ctypes doesn't like memoryview
                      if data:
                          #~ win32event.ResetEvent(self._overlappedWrite.hEvent)
                          err,n = win32file.WriteFile(self.hComPort, data, self._overlappedWrite)
                          if not err and win32.GetLastError() != win32.ERROR_IO_PENDING:
                              raise SerialException("WriteFile failed (%s)" % ctypes.WinError())
                          # Wait for the write to complete.
                          #~ win32.WaitForSingleObject(self._overlappedWrite.hEvent, win32.INFINITE)
                          n = win32file.GetOverlappedResult(self.hComPort, self._overlappedWrite, True)
                          if n != len(data):
                              raise writeTimeoutError
                          return n
                      else:
                          return 0
              
                  def flushInput(self):
                      """Clear input buffer, discarding all that is in the buffer."""
                      if not self.hComPort: raise portNotOpenError
                      win32.PurgeComm(self.hComPort, win32.PURGE_RXCLEAR | win32.PURGE_RXABORT)
              
                  def flushOutput(self):
                      """Clear output buffer, aborting the current output and
                      discarding all that is in the buffer."""
                      if not self.hComPort: raise portNotOpenError
                      win32.PurgeComm(self.hComPort, win32.PURGE_TXCLEAR | win32.PURGE_TXABORT)
              
                  def sendBreak(self, duration=0.25):
                      """Send break condition. Timed, returns to idle state after given duration."""
                      if not self.hComPort: raise portNotOpenError
                      import time
                      win32.SetCommBreak(self.hComPort)
                      time.sleep(duration)
                      win32.ClearCommBreak(self.hComPort)
              
                  def setBreak(self, level=1):
                      """Set break: Controls TXD. When active, to transmitting is possible."""
                      if not self.hComPort: raise portNotOpenError
                      if level:
                          win32.SetCommBreak(self.hComPort)
                      else:
                          win32.ClearCommBreak(self.hComPort)
              
                  def setRTS(self, level=1):
                      """Set terminal status line: Request To Send"""
                      if not self.hComPort: raise portNotOpenError
                      if level:
                          self._rtsState = win32.RTS_CONTROL_ENABLE
                          win32.EscapeCommFunction(self.hComPort, win32.SETRTS)
                      else:
                          self._rtsState = win32.RTS_CONTROL_DISABLE
                          win32.EscapeCommFunction(self.hComPort, win32.CLRRTS)
              
                  def setDTR(self, level=1):
                      """Set terminal status line: Data Terminal Ready"""
                      if not self.hComPort: raise portNotOpenError
                      if level:
                          self._dtrState = win32.DTR_CONTROL_ENABLE
                          win32.EscapeCommFunction(self.hComPort, win32.SETDTR)
                      else:
                          self._dtrState = win32.DTR_CONTROL_DISABLE
                          win32.EscapeCommFunction(self.hComPort, win32.CLRDTR)
              
                  def _GetCommModemStatus(self):
                      stat = win32.DWORD()
                      win32.GetCommModemStatus(self.hComPort, ctypes.byref(stat))
                      return stat.value
              
                  def getCTS(self):
                      """Read terminal status line: Clear To Send"""
                      if not self.hComPort: raise portNotOpenError
                      return win32.MS_CTS_ON & self._GetCommModemStatus() != 0
              
                  def getDSR(self):
                      """Read terminal status line: Data Set Ready"""
                      if not self.hComPort: raise portNotOpenError
                      return win32.MS_DSR_ON & self._GetCommModemStatus() != 0
              
                  def getRI(self):
                      """Read terminal status line: Ring Indicator"""
                      if not self.hComPort: raise portNotOpenError
                      return win32.MS_RING_ON & self._GetCommModemStatus() != 0
              
                  def getCD(self):
                      """Read terminal status line: Carrier Detect"""
                      if not self.hComPort: raise portNotOpenError
                      return win32.MS_RLSD_ON & self._GetCommModemStatus() != 0
              
                  # - - platform specific - - - -
              
                  def setXON(self, level=True):
                      """Platform specific - set flow state."""
                      if not self.hComPort: raise portNotOpenError
                      if level:
                          win32.EscapeCommFunction(self.hComPort, win32.SETXON)
                      else:
                          win32.EscapeCommFunction(self.hComPort, win32.SETXOFF)
              
                  def outWaiting(self):
                      """return how many characters the in the outgoing buffer"""
                      flags = win32.DWORD()
                      comstat = win32.COMSTAT()
                      if not win32.ClearCommError(self.hComPort, ctypes.byref(flags), ctypes.byref(comstat)):
                          raise SerialException('call to ClearCommError failed')
                      return comstat.cbOutQue
              
              # assemble Serial class with the platform specific implementation and the base
              # for file-like behavior. for Python 2.6 and newer, that provide the new I/O
              # library, derive from io.RawIOBase
              try:
                  import io
              except ImportError:
                  # classic version with our own file-like emulation
                  class Serial(Win32Serial, FileLike):
                      pass
              else:
                  # io library present
                  class Serial(Win32Serial, io.RawIOBase):
                      pass
              
              # Nur Testfunktion!!
              if __name__ == '__main__':
                  s = Serial(0)
                  sys.stdout.write("%sn" % s)
              
                  s = Serial()
                  sys.stdout.write("%sn" % s)
              
                  s.baudrate = 19200
                  s.databits = 7
                  s.close()
                  s.port = 0
                  s.open()
                  sys.stdout.write("%sn" % s)
              


              7

              nkamado
              10 Янв 2011 в 12:48

              Я наблюдал эту проблему с Python 2.7 win7 x64, и PySerial 2.5, установленный автоматически от easy_install.exe

              Проблема не в PySerial 2.4, поэтому, если ваш код совместим с 2.4, просто используйте его, и проблема будет решена. Обратите внимание, что вы также должны использовать pywin32 и выбрать версию, соответствующую вашему python (например, pywin32-216.win-amd64-py2.7.exe).

              См. Также https://sourceforge.net/tracker/?func=detail&aid = 2921959 & group_id = 46487 & atid = 446302% 5D2921959


              1

              Cyril Holweck
              18 Авг 2011 в 11:23


              Ваши права в разделе

              Вы можете скачивать файлы скор. 128.0 Кб/s.

              Вы не можете загружать файлы на сервер

              Вы не можете загружать изображения к файлам

              Вы не можете редактировать свои файлы

              Вы не можете удалять свои файлы

              Вы не можете использовать докачку файлов

              Общие правила

              • Вы скачиваете и используете выложенные здесь материалы, программы и файлы «как есть», на свой страх и риск.

              • Администрация не несет ответственности за материалы, загруженные посетителями форума. Администрация не несет ответственности в случае любого ущерба, вызванного нуемалым или некорректным использованием материалов или программ, выложенных в архиве. Всегда проверяйте содержимое архивов антивирусным ПО после скачивания.

              • Перед тем как закачивать файл, пожалуйста, убедитесь в том, что данной информации нет в файловом архиве. Постарайтесь максимально ёмко описать вложение и сделать скриншот (несколько), где это возможно. Проверьте архив антивирусным ПО перед закачиванием на сервер.

              • Строжайше запрещены для выкладывания хаки, кряки и взломанные версии программ российского производства. Загрузка на файловый архив данного контента наказывается перманентным баном в архиве и на форуме без обсуждения и предупреждения.

              • О всех нарушениях авторских прав, несоответствии выложенной информации описанию, некорректно оформленных загрузок или обнаружении вредоносного ПО сообщайте администрации.

              • Модераторы имеют право удалять файлы, нарушающие правила архива, переносить их в другой раздел, редактировать описания к файлам и пр.

              • Файл

              • Файлы пользователей
              • Медиа файлы
              • Поиск файлов
              Автор Название файла Размер файла Дата добавления Дата обновления Скачиваний

              Загрузил: Sим

              MR140 DIAG

              358.1 Кб 17:35 09.01.2011

              никогда

              3,140

              Описание
              Программа для диагностики а/м с ЭБУ Delphi MR140 (Daewoo Nexia, Chevrolet)

              Ссылка для вставки на форум

              Изображения к файлу: MR140 DIAG

              Дополнительно

              mr140diag.jpg

              mr140diag.jpg

              Быстрый переход

              Текущее время: 23:11. Часовой пояс GMT +4.

              Рекомендованные сообщения

              прога для диагностики мр 140.работает под к-лайн адаптер.бесплатная.

              Поделиться сообщением


              Ссылка на сообщение
              Поделиться на других сайтах

              Поделиться сообщением


              Ссылка на сообщение
              Поделиться на других сайтах

              • Upvote


                2

              Поделиться сообщением


              Ссылка на сообщение
              Поделиться на других сайтах

              блин тормознул и не загрузил сразу.извините

              Поделиться сообщением


              Ссылка на сообщение
              Поделиться на других сайтах

              • Upvote


                1

              Поделиться сообщением


              Ссылка на сообщение
              Поделиться на других сайтах

              MR-140 у меня с ваг-ком работать не хочет.чтото пишет про модем какойто код 6. подскажите это проблема с адаптером?


              Изменено 25 февраля 2011 пользователем jeksonwil

              Поделиться сообщением


              Ссылка на сообщение
              Поделиться на других сайтах

              MR-140 у меня с ваг-ком работать не хочет.чтото пишет про модем какойто код 6. подскажите это проблема с адаптером?

              У меня тоже такое окно выскочило, я нажал «Окей» и прога запустилась (врубал прогу без адаптера, попробавать пашет ли)

              Поделиться сообщением


              Ссылка на сообщение
              Поделиться на других сайтах

              У меня тоже такое окно выскочило, я нажал «Окей» и прога запустилась (врубал прогу без адаптера, попробавать пашет ли)

              да это то понятно прога запускается но при попытке соединения выскакивает тоже и не соединяется.

              Поделиться сообщением


              Ссылка на сообщение
              Поделиться на других сайтах

              У меня чтото подобное было, в настройках сменил значение flow control на software и прога заработала, до етого стояло none

              Поделиться сообщением


              Ссылка на сообщение
              Поделиться на других сайтах

              А с К-лайн адаптером Мастер Китовским как данная программка работает?

              Поделиться сообщением


              Ссылка на сообщение
              Поделиться на других сайтах

              Создайте аккаунт или войдите в него для комментирования

              Вы должны быть пользователем, чтобы оставить комментарий

              Понравилась статья? Поделить с друзьями:
            • Get validation error django
            • Get thread context error failed что делать cities skylines
            • Get text document content error apple watch
            • Get smart log directory error
            • Get smart command error reading smart victoria что это