![]() |
|
|
![]()
|
|
| JoyEx |
|
|||
|
Дядя ![]() ![]() Профиль Группа: Участник Сообщений: 323 Регистрация: 21.6.2005 Где: Москва, РФ Репутация: 5 Всего: 12 |
Да. Олег Жуков классный был человек. Бугемот, а куда Вы пропали? У Вас всё получилось? -------------------- Если ты уже никого не боишься, значит ты самый страшный |
|||
|
||||
| Бугемот |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 27.12.2005 Репутация: 1 Всего: 1 |
Всем здравствуйте.
Частично - с общим таймаутом на чтение работает с такими интерваллами: ct.ReadTotalTimeoutMultiplier = 2; ct.ReadTotalTimeoutConstant = 1; Это, если честно, многовато. Но при меньших значениях данные не читаются. Придется подбирать все же таймауты, в документации я не нашел этого значения. Ну а в остальном - все работает Вам очень большое спасибо за советы !!! Это сообщение отредактировал(а) Бугемот - 5.1.2006, 03:14 |
|||
|
||||
| Бугемот |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 27.12.2005 Репутация: 1 Всего: 1 |
Всем снова здравствуйте.
Программе мне была нужна для отправки SMS сообщений, по работе приходится много отсылать, вот и хочу сделать для себя небольшой терминал. Вот так отправляю: Вот PDU: 07919732929090F0110B0B919732426654F70000A703D36110, программа pduspy раскодирует корректно. пишу отправку: AT+CMGS=24 (пробовал и макс. длину 140 - ничего) 07919732929090F0110B0B919732426654F70000A703D361101A (1A - это Ctrl+Z) И ничего ( Что неправильно? и как по-другому можно сформировать Ctrl-z? Попробовал просто сохранить сообщение в памяти, тоже не получается. Похоже, Ctrl-Z я неправильно посылаю. Читаю сообщения и любую доступную служебную информацию с телефона через АТ-команды - без проблем |
|||
|
||||
| Dreamer_0x01 |
|
|||
![]() Терминатор ![]() ![]() Профиль Группа: Участник Сообщений: 780 Регистрация: 14.4.2005 Где: Санкт-Петербург Репутация: 9 Всего: 12 |
Я бы посоветовал создать отдельный топик на эту тему. И раздел вроде про мобильные устройства тоже где-то видел, может, там помогут...
-------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
|||
|
||||
| bel_nikita |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: 2 Всего: 47 |
||||
|
||||
| Бугемот |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 27.12.2005 Репутация: 1 Всего: 1 |
А какие таймауты для записи примерно будут для порта со скоростью 57600Кб. На конце порта - сотовый телефон.
я выставил вот такие
но результат все равно никакой |
|||
|
||||
| Бугемот |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 27.12.2005 Репутация: 1 Всего: 1 |
Все, со всем разобрался. SMS не мог отправить потому что у моего телефона какой-то нестандартный режим отсылки сообщений
Остался один вопрос: я отсылаю команду и мне надо дождаться отклика, как его ждать? Я сейчас поставил sleep, т.е. просто тупо жду какое-то время, т.к. после отправки в порт команды отклик приходит с задержкой. А как правильно будет его получать, как отслеживать эту задержку? Ждать какое-то время до получения этого символа, но не больше определенного промежутка? |
|||
|
||||
| Dreamer_0x01 |
|
|||
![]() Терминатор ![]() ![]() Профиль Группа: Участник Сообщений: 780 Регистрация: 14.4.2005 Где: Санкт-Петербург Репутация: 9 Всего: 12 |
Таймауты на то и созданы, чтобы грамотно ждать отклика. Но если уж не хочется переделывать - лучше не Sleep использовать, так ты поток усыпляешь намертво, а это не есть хорошо, лучше в цикле делай ReadFile, пока не прочитает то, что тебе нужно, либо пока не кончется установленное тобой количество попыток чтения. (оно соответственно будет равно твоему нужному времени, деленному на твой таймаут, установленный для чтения. )
Но вообще...Не понимаю, чем же тебе не понравились установки вида
И усе, никаких проблем! Устанавливаешь вместо ТВОЙ_TIMEOUT твое время, в течение которого нужно ждать приема, и все! Функция ReadFile будет ждать приема указанного тобой количества символов в течение времени ТВОЙ_TIMEOUT (в миллисекундах). Очень удобно! -------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
|||
|
||||
| Бугемот |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 27.12.2005 Репутация: 1 Всего: 1 |
ctm.ReadTotalTimeoutConstant=ТВОЙ_TIMEOUT; - влияет на все операции чтения.
А отклик мне надо ждать только на команду перед записью, поэтому тормозить все чтение общим тайм-аутом не очень хочется. У меня сейчас стоит межсимвольный - 2мс, но 5Кб считываются не 10 секунд, а меньше. Если выставить межсимвольный в 0, а Constant'ный - например в 100, то чтение визуально выполняется быстрее. Поэтому я им не воспользовался константным. Sleep мне тоже не нравится О, проверил сейчас константный - работает! Осталось один нюанс уточнить - сколько же ждать Большое спасибо! Добавлено @ 18:36 Причем если выставить константу заведомо больше, чем надо. То и ожидание будет длиться все это время, хотя данные уже точно пришли в порт Добавлено @ 18:37 Вобщем, или это не так уж удобно, или я чего-то не понимаю |
|||
|
||||
| Бугемот |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 27.12.2005 Репутация: 1 Всего: 1 |
Проверил только что: если перед моей командой на запись (сначала команда, жду отклик, запись) отправить какую-нибудь другую - все, отклика с таймаутом в 100мс я дождусь. Если же сразу после открытия отправить эту команду - не дожидаюсь, т.е. отклик не приходит, ну и как тут быть
|
|||
|
||||
| Dreamer_0x01 |
|
||||
![]() Терминатор ![]() ![]() Профиль Группа: Участник Сообщений: 780 Регистрация: 14.4.2005 Где: Санкт-Петербург Репутация: 9 Всего: 12 |
А менять таймауты в процессе работы не пробовал?
1. А откуда ты знаешь, что данные пришли? 2. Поверь, у меня это все работает, ведь это моя работа, и с ожиданием все в порядке, как только в приемном буфере порта накопится нужное количество символов, ожидание прекращается. 3. Ты случаем не в дебаггере это смотришь? ;) -------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
||||
|
|||||
| Бугемот |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 27.12.2005 Репутация: 1 Всего: 1 |
Если честно - нет, такое практикуется вообще? У меня раз в 15 секунд из порта принимаются данные. Теперь проблема - в записи.
нет Т.е. рекомендуете для команд записи выставлять таймаут на чтение - больше чем на обычное чтение? Т.е. отправляется запрос на передачу данных (вот тут я и жду отклика), и в данном случае - изменить время ожидания? |
||||
|
|||||
| Бугемот |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 27.12.2005 Репутация: 1 Всего: 1 |
Всем еще раз здравствуйте. Никак не могу получить нормально отклик. ВОт код:
Вот, собственно, и все. Отклика я не дождался Чего-то я не понимаю |
|||
|
||||
| Dreamer_0x01 |
|
||||||||
![]() Терминатор ![]() ![]() Профиль Группа: Участник Сообщений: 780 Регистрация: 14.4.2005 Где: Санкт-Петербург Репутация: 9 Всего: 12 |
Зачем вообще выставлять таймаут на запись? Я все таймауты, начинающиеся со слова Write, присвоил нулю, и все прекрасно работает.
Может быть, ты хотел сделать так:
? Я бы посоветовал не использовать подобные конструкции. Даже если все работает - во время работы выдергиваешь кабель, получаешь жуткие тормоза, и предложение отправить отчет в микрософт. обязательно в таих конструкциях используй счетчик попыток. То есть, например, так:
Вот так ты свою программу не завесишь. Впрочем, это так, лирическое отступление, поделился печальным опытом, так сказать ;) А еще...Ты параметр dwnumber_read_bytes в функцию CSMSCOMPort::Instance()->ReadPort как передаешь? В фунции что у тебя принимается - сам параметр, или указатель, или ссылка, с этим усе в порядке? ;) Это сообщение отредактировал(а) Dreamer_0x01 - 13.1.2006, 16:45 -------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
||||||||
|
|||||||||
| Бугемот |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 27.12.2005 Репутация: 1 Всего: 1 |
"Количество попыток" - а зачем же тогда таймаут на чтение ??? Разве смысл не один и тот же - в течение какого-то времени опрашивать порт?
Проблема в том, что я не могу получить отклик, хотя таймаут на чтение выставлен заведомо бОльший. Зато через некоторое время, после отпарвки какой-нибудь "левой" команды - получаю отклик |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |