Прочитать Rs232

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
seawolf
Старожил
Сообщения: 217
Зарегистрирован: 08 Июль 2005, 11:23
Откуда: St. Petersburg

Прочитать Rs232

Сообщение seawolf »

Уважаемые коллеги!
Возникала необходимость промониторить com порт (Rs232). Почитав статьи была написана программка которая посылает строку в порт (далее я подсмотрел вынутой из интернета утилитой что данные сыпятся). Но мне никак не прочитать эти данные своей другой программкой. Поскольку порт в момент записи не открывается (думаю ошибка доступа). Когда порт закрылся, то все работает.
Использую стандартные функции API

MODULE('WinComm.dll')
CreateFile(LONG PtrToFilename,|
DWORD DesiredAccess,|
DWORD SharedMode,|
LONG SecurityAttributes,|
DWORD CreationDisposition,|
DWORD Flags,|
HANDLE TemplateFile),Handle,Raw,Pascal,Name('CreateFileA')

BuildCommDCB(LONG PtrToDeviceControlString,|
LONG PtrToDCB),BOOL,RAW,PASCAL,Name('BuildCommDCBA')

SetCommState(HANDLE PortHandle,LONG PtrToDCB),BOOL,RAW,PASCAL

SetCommTimeouts(HANDLE,ulong pCOMMTIMEOUTS),BOOL,PASCAL,RAW,proc

ReadFile(HANDLE HandleToFile, |
LONG PtrToBuffer, |
DWORD NumberOfBytesToRead, |
LONG PtrToNumberOfBytesRead, |
LONG PtrToOverlappedStructure),BOOL,Raw,Pascal,Proc

WriteFile(HANDLE HandleToFile,|
LONG PtrToBuffer,|
DWORD NumberOfBytesToWrite, |
LONG PtrToNumberOfBytesWritten, |
LONG PtrToOverlappedStructure),BOOL,Raw,Pascal

CloseHandle(HANDLE PortHandle),BOOL,PASCAL,RAW
END

Сначала открываем порт по CreateFile получаем Handle

2 параметр для DesiredAccess - GENERIC_READ + GENERIC_WRITE + GENERIC_EXECUTE
3 параметр для SharedMode - FILE_SHARE_WRITE + FILE_SHARE_READ

Затем по Handle пишем в порт через WriteFile и если в этот момент пытаться читать из порта по ReadFile имеем ошибку. Как только запись окончена (типа файл и порт закрылся) ReadFile читает из порта и пишет что нет данных. Как -же все-таки считать данные из порта?
Аватара пользователя
WadimZapara
Активист
Сообщения: 181
Зарегистрирован: 11 Июнь 2008, 12:11
Откуда: Тамбов

Re: Прочитать Rs232

Сообщение WadimZapara »

...думаю ошибка доступа...
а что, GetLastError() - использовать не пробовал ?
Компьютер имеет то преимущество перед мозгом, что им пользуются...
Аватара пользователя
WadimZapara
Активист
Сообщения: 181
Зарегистрирован: 11 Июнь 2008, 12:11
Откуда: Тамбов

Re: Прочитать Rs232

Сообщение WadimZapara »

а ещё есть ли уверенность, что:
1) HANDLE - это 4 байта, а не два ?
я описываю:
CreateFile(*CString lpFileName, ULONG dwDesiredAccess, ULONG dwShareMode, |
ULONG Addr_SecurityAttributes=0, ULONG dwCreationDisposition, ULONG dwFlagsAndAttributes, |
UnSigned hTemplateFile=0),UnSigned, PASCAL,RAW,Name('CreateFileA'),DLL(TRUE)
2) а что в CreationDisposition, а в FlagsAndAttributes, а в TemplateFile ?
я вызываю:
hFile = CreateFile(lpcFileName, GENERIC_READ+GENERIC_WRITE, FILE_SHARE_BOTH, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL)
Компьютер имеет то преимущество перед мозгом, что им пользуются...
Ответить