HLFX.Ru Forum Страницы (2): [1] 2 »
Показать все 17 сообщений этой темы на одной странице

HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Технические вопросы (https://hlfx.ru/forum/forumdisplay.php?forumid=20)
-- COM порт не открывается (https://hlfx.ru/forum/showthread.php?threadid=3515)


Отправлено AntiPlayer 06-07-2012 в 12:50:

COM порт не открывается

В общем, суть вопроса вот в чем. Я открываю СОМ порт.

C++ Source Code:
condev = CreateFile(portName.c_str(), 					GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);
DCB dcb = {0};
if (condev == INVALID_HANDLE_VALUE) { 	 CloseHandle(condev); 	 ShowMessage("Не удалось открыть порт");   	} 	else бла бла остальной код программы{


Так вот, после перезагрузки компьютера моя программа отказывается открывать COM порт до тех пор, пока я не открою порт и пошлю посылку какой-нибудь сторонней прогой. Например COM Port Toolkit . В чем моет быть проблема ума не приложу. После того как воспользовался сторонней программой, моя начинает всё открывать, посылать и принимать посылки. Подскаите пожалуйста.

__________________
I tell you to enjoy life


Отправлено XaeroX 06-07-2012 в 13:39:

Цитата:
AntiPlayer писал:
portName.c_str()

Чему равно точно?

__________________

xaerox on Vivino


Отправлено Дядя Миша 06-07-2012 в 13:42:

Помнится с комами был аналогичный занятный глюк модемов. То есть зависнет, пока не перезагрузишь - фиг зайдешь в интернет.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено AntiPlayer 06-07-2012 в 14:53:

Цитата:
XaeroX писал:
Чему равно точно?


C++ Source Code:
i=StrToInt(Text);
const AnsiString portName = "COM"+IntToStr(i);

Соответственно в моей программе эта переменная от COM1 до COM9.

Запись кода в виде:
C++ Source Code:
condev = CreateFile("COM3",GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);


не дает никаких результатов.



Добавлено 06-07-2012 в 18:53:

Цитата:
Дядя Миша писал:
Помнится с комами был аналогичный занятный глюк модемов. То есть зависнет, пока не перезагрузишь - фиг зайдешь в интернет.


Там глюк с модемами, а у меня именно с моей программой. Две аналогичные программы цепляются без проблем.
По каким то причинам порт возвращает INVALID_HANDLE_VALUE.

Я вообще за С++ недавно. Пришлось по работе. Еще и в RAD Studio. Азов мне немного не хватает, очевидно. Как я намучался с unsigned char. Если посоветуете заодно литературу грамотную, буду благодарен.

__________________
I tell you to enjoy life


Отправлено XaeroX 06-07-2012 в 15:05:

Может, дело в OPEN_EXISTING? Что если убрать?

Цитата:
AntiPlayer писал:
Еще и в RAD Studio

Так это же Delphi...

__________________

xaerox on Vivino


Отправлено AntiPlayer 06-07-2012 в 15:28:

Цитата:
XaeroX писал:
Так это же Delphi...


В дистре CodeGear RAD Studio 2009 разом идет Delphi и C++ Builder.

Цитата:
XaeroX писал:
Может, дело в OPEN_EXISTING? Что если убрать?

Надо будет попробовать. Вот только теперь до прибора добраться надо.

Просто самое интересное, что я даже приблизительно не могу понять какой может быть затык. Потому что медот работы с портами стандартен до невозможного.

__________________
I tell you to enjoy life


Отправлено XaeroX 06-07-2012 в 15:31:

AntiPlayer
Возможно, проблема вовсе не в том коде, что ты привёл.
А может быть, проблема вообще в системе.

__________________

xaerox on Vivino


Отправлено PomanoB 06-07-2012 в 15:31:

Мб ты его не закрываешь....


Отправлено AntiPlayer 06-07-2012 в 16:38:

Цитата:
XaeroX писал:
А может быть, проблема вообще в системе.


Было бы очень классно. Протестирую на эмуляторе КОМ порта.
Я просто думал, может кто-то знает, что такого могут делать прочие программы с портом, что моя программа после них начинает работать


Цитата:
PomanoB писал:
Мб ты его не закрываешь....


Как это не тупо, я закрываю его, даже если он не открывается.

CloseHandle(condev);.

__________________
I tell you to enjoy life


Отправлено XaeroX 07-07-2012 в 05:22:

Цитата:
AntiPlayer писал:
Я просто думал, может кто-то знает, что такого могут делать прочие программы с портом, что моя программа после них начинает работать

Первая мысль - инициализировать
Может, в него надо какие-то управляющие команды заслать сначала?

__________________

xaerox on Vivino


Отправлено AntiPlayer 07-07-2012 в 11:04:

XaeroX

Скорее всего ты прав. Буду шаманить с настройками dcb.

__________________
I tell you to enjoy life


Отправлено Дядя Миша 07-07-2012 в 12:54:

Цитата:
XaeroX писал:
Может, в него надо какие-то управляющие команды заслать сначала?

Совершенно верно. Только не управляющие команды, а донейт. И не в ком-порт, а дяде Мише, и не сначала, а регулярно.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено PomanoB 07-07-2012 в 19:48:

Цитата:
AntiPlayer писал:
Как это не тупо, я закрываю его, даже если он не открывается.

Я имею ввиду после предыдущего открытия..
У меня так было, когда программа вылетела и не закрыла порт потом уже не открывается


Отправлено AntiPlayer 08-07-2012 в 00:01:

PomanoB
А ну так это, глюк проявляется сразу после перезагрузки компа. То есть порт никто и не открывал, не вижу смсла его закрывать. Но ради эксперимента попробую.

__________________
I tell you to enjoy life


Отправлено AntiPlayer 09-07-2012 в 10:45:

В общем разобрался.
Порт действительно надо инициализировать. Но по каким-то причинам инициализация порта не происходила при сохранении параметров командой SetCommState. Почему - не знаю, уже не было времени отлавливать баг. Но его придется отлавливать позже.
пришлось в принудительном порядке конфигурировать порт с помощью cmd команд. В итоге при запуске программы запускается .bat файл с командами:

mode com% baud=9600 stop=2 data=8 parity=n

Костыли, такие костыли. Не удивлюсь если это "прикол" собственно RAD Studio

__________________
I tell you to enjoy life


Временная зона GMT. Текущее время 20:52. Страницы (2): [1] 2 »
Показать все 17 сообщений этой темы на одной странице

На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024