Уважаемые коллеги!
Возникала необходимость промониторить 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 читает из порта и пишет что нет данных. Как -же все-таки считать данные из порта?
Прочитать Rs232
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
- WadimZapara
- Активист
- Сообщения: 181
- Зарегистрирован: 11 Июнь 2008, 12:11
- Откуда: Тамбов
Re: Прочитать Rs232
а что, GetLastError() - использовать не пробовал ?...думаю ошибка доступа...
Компьютер имеет то преимущество перед мозгом, что им пользуются...
- WadimZapara
- Активист
- Сообщения: 181
- Зарегистрирован: 11 Июнь 2008, 12:11
- Откуда: Тамбов
Re: Прочитать Rs232
а ещё есть ли уверенность, что:
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)
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)
Компьютер имеет то преимущество перед мозгом, что им пользуются...