|
|
|
[!] Как относитесь к модерированию на этом форуме? Выскажите свое мнение здесь
Как определить состояние DCD сигнала COM-порта?
, COM-порт
- Подписаться на тему
- Сообщить другу
- Скачать/распечатать тему
|
|
У меня имеется девайс (ИК-приемник), который сообщает компу об изменении состояния (при приеме сигнала от пульта) DCD сигналом. Различные COM-терминалы отлично принимают этот сигнал. Хотелось бы чтобы моя программа делала то же самое. Кто знает, помогите пожалуйста разобраться в принципе приёма DCD сигнала. Буду очень признателен примерам в виде исходниов. P.S. Как получить значение бита DCD («0» или «1»)? |
trainer |
|
функция GetCommModemStatus, бит MS_RLSD_ON |
smp |
|
Попробовал в своей проге функцию GetCommModemStatus:
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 |
|
ты бы хоть для приличия почитал описание этой функции. В частности, о предназначении ее второго параметра. Или настоящие программисты не читают документацию?
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 |
|
Елси кто также не может разобраться с COM-портом, вот один добрый человек поделился — простой но зато очень понятный примерчик-исходник |
0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
0 пользователей:
- Предыдущая тема
- Borland C++ Builder/Turbo C++ Explorer
- Следующая тема
[ 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, что, согласно МСДН говорит о том, что фиче не поддерживается железом.
Ошибка дурная, и все-таки, проверьте: а вдруг забыли память выделить?
Курить я буду, но пить не брошу.
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 не под что память выделять
Точно, это я сглупил.
Курить я буду, но пить не брошу.
- Переместить
- Удалить
- Выделить ветку
Пока на собственное сообщение не было ответов, его можно удалить.
Я пытаюсь подключиться к своему телефону с компьютера под управлением 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
Быстрый переход
Текущее время: 23:11. Часовой пояс GMT +4.
Рекомендованные сообщения
прога для диагностики мр 140.работает под к-лайн адаптер.бесплатная.
Поделиться сообщением
Ссылка на сообщение
Поделиться на других сайтах
Поделиться сообщением
Ссылка на сообщение
Поделиться на других сайтах
-
2
Поделиться сообщением
Ссылка на сообщение
Поделиться на других сайтах
блин тормознул и не загрузил сразу.извините
Поделиться сообщением
Ссылка на сообщение
Поделиться на других сайтах
-
1
Поделиться сообщением
Ссылка на сообщение
Поделиться на других сайтах
MR-140 у меня с ваг-ком работать не хочет.чтото пишет про модем какойто код 6. подскажите это проблема с адаптером?
Изменено 25 февраля 2011 пользователем jeksonwil
Поделиться сообщением
Ссылка на сообщение
Поделиться на других сайтах
MR-140 у меня с ваг-ком работать не хочет.чтото пишет про модем какойто код 6. подскажите это проблема с адаптером?
У меня тоже такое окно выскочило, я нажал «Окей» и прога запустилась (врубал прогу без адаптера, попробавать пашет ли)
Поделиться сообщением
Ссылка на сообщение
Поделиться на других сайтах
У меня тоже такое окно выскочило, я нажал «Окей» и прога запустилась (врубал прогу без адаптера, попробавать пашет ли)
да это то понятно прога запускается но при попытке соединения выскакивает тоже и не соединяется.
Поделиться сообщением
Ссылка на сообщение
Поделиться на других сайтах
У меня чтото подобное было, в настройках сменил значение flow control на software и прога заработала, до етого стояло none
Поделиться сообщением
Ссылка на сообщение
Поделиться на других сайтах
А с К-лайн адаптером Мастер Китовским как данная программка работает?
Поделиться сообщением
Ссылка на сообщение
Поделиться на других сайтах
Создайте аккаунт или войдите в него для комментирования
Вы должны быть пользователем, чтобы оставить комментарий