C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
считывание информации с com1 порта
Privalov
Отправлено: 08.07.2003, 22:59


Не зарегистрирован







Вопрос!!!!!!
Как считать информацию с com1 порта.
Заранее благодарен.
seg_r
Отправлено: 09.07.2003, 08:02


Дежурный стрелочник

Группа: Участник
Сообщений: 74



В архиве форума есть

http://www.cbuilder.ru/progi/forum_poisk.p....php?spoisk=com
Vlad
Отправлено: 09.07.2003, 10:27


Машинист паровоза

Группа: Участник
Сообщений: 231



В Help-е есть , но нужно смотреть

HANDLE hCom;
OVERLAPPED o;
BOOL fSuccess;
DWORD dwEvtMask;

hCom = CreateFile("COM1",
GENERIC_READ | GENERIC_WRITE,
0, /* exclusive access */
NULL, /* no security attrs */
OPEN_EXISTING,
FILE_FLAG_OVERLAPPED,
NULL
);

if (hCom == INVALID_HANDLE_VALUE) {
/* Deal with the error. */
}

/* Set the event mask. */

fSuccess = SetCommMask(hCom, EV_CTS | EV_DSR);

if (!fSuccess) {
/* deal with error */
}

/* Create an event object for use in WaitCommEvent. */

o.hEvent = CreateEvent(NULL, /* no security attributes */
FALSE, /* auto reset event */
FALSE, /* not signaled */
NULL /* no name */
);

assert(o.hEvent);

if (WaitCommEvent(hCom, &dwEvtMask, &o)) {
if (dwEvtMask & EV_DSR) {
/*
* . . .
*/
}

if (dwEvtMask & EV_CTS) {
/*
* . . .
*/
}
}



The following example opens a handle to COM1 and fills in a DCB structure with the current configuration. The DCB structure is then modified and used to reconfigure the device.

DCB dcb;
HANDLE hCom;
DWORD dwError;
BOOL fSuccess;

hCom = CreateFile("COM1",
GENERIC_READ | GENERIC_WRITE,
0, /* comm devices must be opened w/exclusive-access */
NULL, /* no security attrs */
OPEN_EXISTING, /* comm devices must use OPEN_EXISTING */
0, /* not overlapped I/O */
NULL /* hTemplate must be NULL for comm devices */
);

if (hCom == INVALID_HANDLE_VALUE) {
dwError = GetLastError();

/* handle error */
}

/*
* Omit the call to SetupComm to use the default queue sizes.
* Get the current configuration.
*/

fSuccess = GetCommState(hCom, &dcb);

if (!fSuccess) {
/* Handle the error. *
}

/* Fill in the DCB: baud=9600, 8 data bits, no parity, 1 stop bit. */

dcb.BaudRate = 9600;
dcb.ByteSize = 8;
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT;

fSuccess = SetCommState(hCom, &dcb);

if (!fSuccess) {
/* Handle the error. *
}

KrisK
Отправлено: 09.07.2003, 13:44


Не зарегистрирован







А еще есть компонеты, например CPort или OCX MSComm, но
CPort более продвинут. Пользовал версию 2.61 с CB++5 — , без проблем.
CPort смотри на www2.arnes.si/~sopecrni
Pricalov
Отправлено: 09.07.2003, 23:13


Не зарегистрирован







Вопрос!
Народ, что-то не получается, попробовал использовать стандартные функции Си для работы с портами bioscom() но комок или виснет, или выдает на экран при выводе результатов FFF4.
Как это исправить???????????????????????????
Причем после таких попыток другая(не моя) прога тоже отказывается снимать результаты с Com1 порта.
Заранее благодарен за помощь.
Vlad
Отправлено: 10.07.2003, 09:05


Машинист паровоза

Группа: Участник
Сообщений: 231



Вопрос : ты на каком С пишешь- под ДОС или Windows?
Privalov
Отправлено: 10.07.2003, 11:52


Не зарегистрирован







Под DOS
sprinter
Отправлено: 10.07.2003, 14:15


Ученик-кочегар

Группа: Участник
Сообщений: 14



Последнее заявление ohmy.gif  — супер!

Первое что приходит на ум выглядит так

#include "stdio.h"
#include "dos.h"

int main(void)
{
int result;
int port = 0;
result = inport(port);
printf("Word read from port %d = 0x%X\n", port, result);
return 0;
}

Но нужно уточнить про ДОС — все пишется под ДОС и работать будет только в ДОС? Именно это и будет определять рабочие функции — Win'9x/Me с портами работает иначе нежели ДОС и NT.
Если и писать и работать в ДОС (т.е. доступ к железу практически прямой), то есть рабочие куски...

Вернуться в Вопросы программирования в C++Builder