![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| Alexander06 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 90 Регистрация: 28.7.2006 Репутация: нет Всего: нет |
Мне необходимо через ком-порт работать с устройством. Отсылать 2 байта команды и получать 4 байта ответ.
Когда посылаю команду, ответ приходит не всегда, а почему-то через раз. То есть на первый запрос ответа нет, а на второй есть. Опрашиваю их VC++. При работе через специализированный софт LabVIEW железка отвечает на каждый опрос. Может я как-то неверно работаю с ком-портом? Работаю с помощью функций работы с файлами. |
|||
|
||||
| TimeMan |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 26.9.2006 Репутация: нет Всего: нет |
В WIN API есть очень много интересных функций для работы с СОМ-портом (с хендлом открытым через СreateFile и асоциированным с портом):
BuildCommDCB BuildCommDCBAndTimeouts ClearCommBreak ClearCommError CommConfigDialog DeviceIoControl EscapeCommFunction GetCommConfig GetCommMask GetCommModemStatus GetCommProperties GetCommState GetCommTimeouts GetDefaultCommConfig PurgeComm SetCommBreak SetCommConfig SetCommMask SetCommState SetCommTimeouts SetDefaultCommConfig SetupComm TransmitCommChar WaitCommEvent Глянь их описание в MS SDK- найдеш много интересного. Но в принципе, если ты знаеш, какие настройки должны быть у твоего порта (должны совпадать с настройками порта того устройства с которым работаешь) то можно, для начала сравнить их с теми, которые устанавливаються по дефолту. Для того, чтобы достать параметры уже установленные для порта можно использовать функцию или GetCommState, изменение установленных параметров SetCommState . |
|||
|
||||
| Gremlin |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 119 Регистрация: 28.8.2006 Репутация: нет Всего: нет |
у меня в принципе тоже самый трабл я в другом топике писал
При выполнении
Buf0x00f4f648 "20:0\n\nTММ..." char[1024] а у меня должно прийти TS8.150 что такое 20:0 вроде я Purge тоесть очищаю все что там есть и почему ловится только один символ Т если делаю так
а на второй и последующих Buf0x00f4f648 "S8.150E+00ММ..." char[1024] почему у меня сразу в буфер не заносится TS8.150E+00 хз не могу разобраться |
||||
|
|||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 7 Всего: 146 |
скорости правильно установлены?
-------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| Gremlin |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 119 Регистрация: 28.8.2006 Репутация: нет Всего: нет |
2Romikgy: а неее с этим разобрался уже
Вот как сделал
тока после этого я уже в когда в порт пишу а прибор не реагирует есть мысль что я SetCommMask(hPort, EV_RXCHAR) перевел его в чтение а обратно нет! Подскажите в чом может быть трабл и как его поправить.(эта процедура у меня в отдельном потоке) Это сообщение отредактировал(а) Gremlin - 29.9.2006, 18:26 |
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 7 Всего: 146 |
эта ф_ция не переводит никуда, она добаляет событие на срабатывание и если она у тя в отдельном потоке , зачем те события? Добавлено @ 21:44 и что не получается? -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| Gremlin |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 119 Регистрация: 28.8.2006 Репутация: нет Всего: нет |
Вот я так опрашиваю состояние прибора! И когда я пытаюсь послать какую нибудь другую команду прибор на нее не реагирует! а функция записи
Может в функции Read тоже нужно делать CloseHandle? Это сообщение отредактировал(а) Gremlin - 30.9.2006, 07:44 |
||||
|
|||||
| ATN |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 10.5.2008 Репутация: нет Всего: нет |
Да, но только там нет ответа на вопрос, почему при установке события: ev_txempty в setcommmask waitcommevent возвращает 4. Ведь если по описанию то это совсем другое событие, а я ничего кроме ev_txempty не ставлю. |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
Во первых зачем тебе Overlapped IO, если его возможности не используются? Используй обычные блокирующие ReadFile и WriteFile.
Во вторых, рекомендуется выставлять timeout'ы на порт (по крайней мере для приема) Так же возможны разные варианты с нарезкой принятых байтов по вызовам ReadFile - никто не гарантирует, что ответ придет за одно чтение, так же никто не гарантирует, что начало ответа не будет принято сразу после окончание предыдущего в одном вызове ReadFile (за исключением протокола работы с прибором, но это уже дело самого прибора) |
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |