Форум программистов
 
Регистрация на форуме тут, о проблемах пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль

Купить рекламу на форуме 15-35 тыс рублей в месяц

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

           Online-курс Java с оплатой после трудоустройства. Каждый выпускник получает предложение о работе
           И зарплату на 30% выше ожидаемой, подробнее на сайте академии, ссылка - https://clck.ru/fCqwP

Ответ
 
Опции темы Поиск в этой теме
Старый 11.06.2014, 12:28   #1
Pavlov_yu
Пользователь
 
Регистрация: 22.02.2009
Сообщений: 65
Злость Com port (RS232)

Доброго дня.
помогите разобраться с настройкой ком порта.
Код:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
typedef struct DCB {
  DWORD DCBlength;
  DWORD BaudRate;
  DWORD fBinary  :1;
  DWORD fParity  :1;
  DWORD fOutxCtsFlow  :1;
  DWORD fOutxDsrFlow  :1;
  DWORD fDtrControl  :2;
  DWORD fDsrSensitivity  :1;
  DWORD fTXContinueOnXoff  :1;
  DWORD fOutX  :1;
  DWORD fInX  :1;
  DWORD fErrorChar  :1;
  DWORD fNull  :1;
  DWORD fRtsControl  :2;
  DWORD fAbortOnError  :1;
  DWORD fDummy2  :17;
  WORD  wReserved;
  WORD  XonLim;
  WORD  XoffLim;
  BYTE  ByteSize;
  BYTE  Parity;
  BYTE  StopBits;
  char  XonChar;
  char  XoffChar;
  char  ErrorChar;
  char  EofChar;
  char  EvtChar;
  WORD  wReserved1;
} DCB;

HANDLE port;
port = CreateFile("Com1", GENERIC_READ | GENERIC_WRITE, 0,NULL,OPEN_EXISTING,0,NULL );

   if (port == INVALID_HANDLE_VALUE) ShowMessage("Сломался");

BuildCommDCB("baud=1200 parity=N data=8 stop=1", DCB);
   CloseHandle(port);
}
матюкается на выделенное жирным, красном. Пишет неправильное использование DCB. пробовал так же &DCB, *DCB результат прежний

Последний раз редактировалось Stilet; 16.06.2014 в 07:57.
Pavlov_yu вне форума Ответить с цитированием
Старый 11.06.2014, 12:46   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,405
По умолчанию

DCB var;
BuildCommDCB(..., &var);

Не путайте тип и переменную типа.
waleri вне форума Ответить с цитированием
Старый 16.06.2014, 05:18   #3
Pavlov_yu
Пользователь
 
Регистрация: 22.02.2009
Сообщений: 65
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
DCB var;
BuildCommDCB(..., &var);

Не путайте тип и переменную типа.
Спасибо, заработало
Pavlov_yu вне форума Ответить с цитированием
Старый 16.06.2014, 12:06   #4
Pavlov_yu
Пользователь
 
Регистрация: 22.02.2009
Сообщений: 65
По умолчанию

DCB dcb;
COMMTIMEOUTS ots;
char a[5]="Test", b[5]="",c[5];
DWORD bc;
ots.ReadIntervalTimeout=100; //îáùåå âðåìÿ
ots.ReadTotalTimeoutMultiplier=50; // ìíîæèòåëü
ots.ReadTotalTimeoutConstant=50; //êîíñòàíòà
ots.WriteTotalTimeoutMultiplier=50;
ots.WriteTotalTimeoutConstant=50;

HANDLE port;
port = CreateFile("Com1", GENERIC_READ | GENERIC_WRITE, 0,NULL,OPEN_EXISTING,0,NULL ); //ñîçäàåì ïîðò
BuildCommDCB("baud=9600 parity=N data=8 stop=1", &dcb); //êîíôèãóðèðîâàíèå ïîðòà
if (port == INVALID_HANDLE_VALUE) ShowMessage("Ñëîìàëñÿ");
SetCommState(port,&dcb); //çàïèñü êîíôèãóðàöèè â ïîðò
//ShowMessage(dcb.BaudRate); //òèïà ïðîâåðêà, ÷òî çàïèñàëîñü

//SetCommTimeouts(port,&ots); //òàéìàóò íà ÷òåíèå è çàïèñü â ïîðò
if(WaitForSingleObject(port,100)!=0 )ShowMessage("Ñëîìàëñÿ"); //âðåìÿ îæèäàíèÿ îò îáúåêòà
PurgeComm(port,PURGE_TXCLEAR|PURGE_ RXCLEAR); //î÷èùàåì áóôåð ïîðòà îò ìócoðà

WriteFile(port,"ABCDE",5,&bc,NULL);
ReadFile(port,&b,5,&bc,NULL);
ShowMessage(b);

//ClearCommError(port,

CloseHandle(port); //çàêðûòèå ïîðòà
___________________________________ ___________________________________ _
Подскажите, пожалуйста, как проверить работоспособность. данные пишу в порт, принемаю, смотрю через ShowMessage(b) - а в ответ ни чего((((. можен он пишет в порт - ни куда, и ответа нет ни от куда???
Pavlov_yu вне форума Ответить с цитированием
Старый 16.06.2014, 12:10   #5
Pavlov_yu
Пользователь
 
Регистрация: 22.02.2009
Сообщений: 65
По умолчанию

код поправлю

DCB dcb;
COMMTIMEOUTS ots;
char a[5]="Test", b[5]="",c[5];
DWORD bc;
ots.ReadIntervalTimeout=100;
ots.ReadTotalTimeoutMultiplier=50;
ots.ReadTotalTimeoutConstant=50;
ots.WriteTotalTimeoutMultiplier=50;
ots.WriteTotalTimeoutConstant=50;

HANDLE port;
port = CreateFile("Com1", GENERIC_READ | GENERIC_WRITE, 0,NULL,OPEN_EXISTING,0,NULL );
BuildCommDCB("baud=9600 parity=N data=8 stop=1", &dcb);
if (port == INVALID_HANDLE_VALUE) ShowMessage("Не Работает");
SetCommState(port,&dcb);

//SetCommTimeouts(port,&ots);
if(WaitForSingleObject(port,100)!=0 )ShowMessage("Не Работает");
PurgeComm(port,PURGE_TXCLEAR|PURGE_ RXCLEAR);
WriteFile(port,"ABCDE",5,&bc,NULL);
ReadFile(port,&b,5,&bc,NULL);
ShowMessage(b);

CloseHandle(port); //çàêðûòèå ïîðòà
Pavlov_yu вне форума Ответить с цитированием
Старый 16.06.2014, 17:30   #6
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,405
По умолчанию

А что подключено к порту?
Почему вы думаете, что должен быть ответ?

Поставьте вот эту утилиту и понаблюдайте:
http://technet.microsoft.com/en-us/s.../bb896644.aspx

Почитайте и вот это:
http://www.lammertbies.nl/comm/info/...w_control.html
waleri вне форума Ответить с цитированием
Старый 16.06.2014, 19:31   #7
Pavlov_yu
Пользователь
 
Регистрация: 22.02.2009
Сообщений: 65
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
А что подключено к порту?
Почему вы думаете, что должен быть ответ?
Вот и у меня закрались подозрения, что если ни чего к нему не подключено то ответа, возможно, не будет. пробую на буке в виртуалке. на буке ком портов нет.
Но с другой стороны, если я его открываю и туда что то записываю, значит оно там и должно остаться. А потом считываю то что записал.
за инфу спасибо, почитаю
Pavlov_yu вне форума Ответить с цитированием
Старый 16.06.2014, 20:09   #8
Pavlov_yu
Пользователь
 
Регистрация: 22.02.2009
Сообщений: 65
По умолчанию

Цитата:
Сообщение от waleri;1388458
Поставьте вот эту утилиту и понаблюдайте:
[url
http://technet.microsoft.com/en-us/sysinternals/bb896644.aspx[/url]
закачка не работала, пошукал нашел вот это "Advanced Serial Port Monitor" может кому пригодится. http://www.aggsoft.com/serial-port-monitor/download.htm
Pavlov_yu вне форума Ответить с цитированием
Старый 16.06.2014, 20:21   #9
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,742
По умолчанию

Цитата:
закачка не работала
какая версия ОC?
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 17.06.2014, 05:00   #10
Pavlov_yu
Пользователь
 
Регистрация: 22.02.2009
Сообщений: 65
По умолчанию

Цитата:
Сообщение от raxp Посмотреть сообщение
какая версия ОC?
качал инсталяху с Win 7x64. Скачал с иного сайта, но в виртуалке на XP работать не захотела.
Pavlov_yu вне форума Ответить с цитированием
Ответ

           Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
           Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с RS232 в DELPHI 100GRamm Общие вопросы Delphi 9 17.09.2021 00:18
программа Delphi RS232-Excel mxroman Общие вопросы Delphi 1 05.12.2011 08:34
Java. Работа с RS232 Ethernet MikeVazovsky Общие вопросы по Java, Java SE, Kotlin 1 04.11.2011 18:13
RS232, Библиотека Игоря Павлова TComPort xBugiman Компоненты Delphi 11 12.06.2010 13:41