Прочитать Rs232
Добавлено: 29 Май 2008, 14:32
Уважаемые коллеги!
Возникала необходимость промониторить 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 читает из порта и пишет что нет данных. Как -же все-таки считать данные из порта?
Возникала необходимость промониторить 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 читает из порта и пишет что нет данных. Как -же все-таки считать данные из порта?