| | | | |
Обмен информацией с модемом | Полный текст материала
Цитата или краткий комментарий: «... Мне было нужно организовать обмен данными с модемом так, как это происходит в "Свойствах Модема" на закладке "Диагностика" при нажатии на кнопку "Опросить модем". ...» |
Важно:- Страница предназначена для обсуждения материала, его содержания, полезности, соответствия действительности и так далее. Смысл не в разборке, а в приближении к истине :о) и пользе для всех.
- Любые другие сообщения или вопросы, а так же личные эмоции в адрес авторов и полемика, не относящаяся к теме обсуждаемого материала, будут удаляться без предупреждения авторов, дабы не мешать жителям нормально общаться.
- При голосовании учитывайте уровень, на который расчитан материал. "Интересность и полезность" имеет смысл оценивать относительно того, кому именно предназначался материал.
- Размер одного сообщений не должен превышать 5К. Если Вам нужно сказать больше, сделайте это за два раза. Или, что в данной ситуации правильнее, напишите свою статью.
Всегда легче осудить сделанное, нежели сделать самому. Поэтому, пожалуйста, соблюдайте правила Королевства и уважайте друг друга.
Добавить свое мнение.
| | Содержит полезные и(или) интересные сведения | [1] | 11 | 78.6% | | | | Ничего особенно нового и интересного | [2] | 3 | 21.4% | | | | Написано неверно (обязательно укажите почему) | [3] | 0 | 0% | | Всего проголосовали: 14 | | | Все понятно, материал читается легко | [1] | 10 | 83.3% | | | | Есть неясности в изложении | [2] | 2 | 16.7% | | | | Непонятно написано, трудно читается | [3] | 0 | 0% | | Всего проголосовали: 12 |
[Работа с модемом] [COM-порт]
Отслеживать это обсуждение
Всего сообщений: 2322-02-2010 08:16Пытаюсь откомпилить программу выдаёт ошибку File not found: 'Devices.dcu'. Что делать ? |
|
19-02-2010 18:01Полезная статья. Бывает что ищешь, а оно оказываеться рядом. |
|
04-11-2009 10:59Нужная вещь. Давно не мог решить проблему - уж месяц... |
|
04-11-2007 04:44Подводным камнем является - если данные буфура. передаваемым модема больше, чем запрашиваемый юзером, то получается ошибка: не полное чтение и в последующих командах нарушается логика - вопрос-ответ.
Прошу доработать. |
|
15-06-2007 04:48Прогу пока не тестил (нет модема под рукой), но статья мне понравилась!
В отзывах, кстати, тоже много интересного. Спасибо, что выложили свои наработки. |
|
06-04-2007 07:41Спасибо за прогу!
Пришлось закомментить {Devices,} и {, XComDrv} - нету у меня таких. Но и без них все работает на ура!
Работаю с помощью этой проги с телефоном СЭ k790 - команда AT*EKEY=1,":R",2 зажигает подсветку, эмулируя нажатие кнопки назад.
Почему GreyDog не смог заставить работать с самсунгм, я не знаю.
Самое интересное - это таймауты, корректно телефон отвечает на такую комбинацию:
CommTOuts.ReadIntervalTimeout:=200;
CommTOuts.ReadTotalTimeoutMultiplier:=30;
CommTOuts.ReadTotalTimeoutConstant:=400;
CommTOuts.WriteTotalTimeoutMultiplier:=30;
CommTOuts.WriteTotalTimeoutConstant:=400;
пробовал другие, с ними глюки - или слишком долго отвечает, или первый раз не приходит ОК, или ок вообще не приходит.
|
|
12-12-2006 05:36Хорошая статья, полезная.
У меня была такая особенность: не выполнялось условие (CommProp.dwProvSubType = PST_MODEM).
Значение dwProvSubType у меня всегда было равно 1, т.е. PST_RS232. Условие убрал, и благополучно получал отклики модема :-) |
|
04-07-2005 09:37
04-07-2005 09:36Написал программку ScanPort...
сканирует все порты на предмет подключен ли модем, и когда его находит, опрашивает по основным AT-командам и выдаёт ответы, также реализован терминал на открываемый порт.
http:\\www.tangorerro.da.ru\progs\scanport\scanport_exe.rar
и соответсвенно исходники
http:\\www.tangorerro.da.ru\progs\scanport\scanport_source.rar
какие то глюки со ссылками
|
|
13-06-2005 13:01
13-06-2005 12:58Все работает, если сделаю комметарием // Devices, Registry, XComDrv; в Uses.
Подключаюсь таким образом к почтовому серверу Dionis (v2.20), он сразу предлагает терминальный режим, но хочется подключиться по протоколу PPP и SMTP (я так понимаю к порту 110 и 25 почтового сервера). В локальной сети - без проблем с помощью компонентов Indy ( указав Ip-адрес), а вот по модему - никак. Помогите !!!.
И еще может кто подскажет, как передать информацию в сервер dionis используя Indy и пакетный режим передачи Dionis.Сообщение не подписано |
|
26-05-2005 18:59Подключил мобильный телефон Samsung C100, хотел протестить. Не вышло. Хотя, как я понял, "софтинка" должна быть идентичной стандартной виндовой функции "Опросить модем". Что то не так?
Другой вопрос. Интерфейс немного "странный". Кнопки с англ. названиями. Ответы русские...
P.S. Что нужно изменить для того что бы Ваша программа могла работать с модемом мобильного телефона?
P.P.S. Вообще то я чайник, но ответы хотел бы увидеть. |
|
18-03-2005 05:43Непонятна вообще завязка обсуждения работы с модемом и СОМ-портом. Модем просто использует RS232 и последовательный порт (СОМ3, например). Если автору нравится работать в синхроне, то причем тут PurgeComm. Ну вот и я начал "смешались в кучу кони, люди"...Гораздо правильней при таком названии статьи рассмотреть пример установки связи по модему между двумя компами по диал-апу, т.е. какие команды нужно подавать, в какой последовательности, как обрабатывать различные ситуации при установке связи, приеме-передаче данных...и т.п. А так получается - "как работать с СОМ-портом , если на нем "висит модем" |
|
25-11-2004 03:45В дополнение... Может проще отслеживать состояние
соответсвующего сигнала RTS или какого либо иного(того который говорит о наличии связи), то есть отслеживать непосредственно RS232 и лишь убедившись что модем ожил начинать считывать
ReadFile(hCommFile,InBuffer,SizeOf(InBuffer) и т.д. Я делал это пользуясь ассемблером в 98 для
своих радиолюбительских нужд. Нынешняя задача сложнее, мне нужно отсылать сообщения адресату по модему из своего приложения. Наверняка есть функция API отслеживающая RS232. |
|
25-11-2004 03:24Модем физическое устройство. Реальной помощью было бы описание физической работы этих функций.
Например... Зачем после связи системы с СОМ портом
(CreateFile) задавать значения TimeOut? Модем работал до инициализации. Единственное что мне нужно это связать свое приложение с ним и работать. Зачем для указания интервалов (SetCommTimeouts) необходимо сначало их получить
(GetCommTimeouts)? Что происходит при (GetCommTimeouts)? Связь с определенным регистром модема и одновременное обнуление его? Почему при реальном звонке я читаю состояние модема без проблем. Получаю сообщение Ring при звонке или
Busy в соответствующем положении, а в том случае когда модем не занят для чтения того же буфера приложение тратит до 20 секунд? |
|
19-08-2004 01:07Классная статья!
Если я установил соединение по ATD...
Есть ли вероятность, что данные пришлются не правильно? Или у модема встроеная система корекции ошибок? |
|
16-08-2004 16:51Во-первых хотелось бы поправить линк на работу Дмитрия Кузана: http://www.delphikingdom.ru/asp/viewitem.asp?catalogid=388
Далее, все мы умеем читать MSDN, однако при реализации, казалось бы очевидных вещей, зачастую встречаются подводные камни.
У меня тоже всё проходило нормально пока я работал с COM-портами, не касаясь модема.
Для тех, кто принимает участие в обсуждении: может быть Вы проверите мой пример на своих модемах и напишете - "вот на моей системе пример не работает, а если его исправить следующим образом ..., то все в порядке".
Со своей стороны могу ответственно сказать, что на Windows XP, внешний USB модем Acorp M56EUS, поставленная задача (обмен данными с модемом) в приведенном примере решена. Участки кода (не описанные в других источниках), без которых поставленную задачу (на данной системе) решить не удается отмечены особо.
Хотелось бы видеть не выдержки из общеизвестной документации, а примеры кода, работоспособность которого подтверждена практикой.
Спасибо. |
|
15-08-2004 00:20Насколько мне известно - PurgeComm - занимется только тем, что чистит буфера(PURGE_TXCLEAR or PURGE_RXCLEAR ) или завершает все I\O - операции(PURGE_TXABORT or PURGE_RXABORT ), не больше и не меньше.
Вообще-то до недавнего времени я этим паржом не пользовался, как-то не было необходимости и всё проходило нормально, а вообще функция полезная.
А команды модему о готовности буферов, принимать или передавать данные, и всякое такое, даёт функция EscapeCommFunction
В Королевстве есть замечательная статья посвящённая работе с портами(5 глав). Там содержаться исчерпывающие сведения по этой тематике - вот линк - http://www.delphikingdom.ru/mastering/ports2.htm.
Хотелось бы выразить особую благодарность автору статьи Дмитрию Кузану. |
|
13-08-2004 01:21Я пробовал отключать эхо ATE0 (на Acorp этот же код). Ничего не получается без вызова функции PurgeComm.
Поправте меня, если кто разобрался в данной проблеме, но у меня создалось впечатление, что функция PurgeComm не просто освобождает буфера, а дает команду модему, что буфера готовы к приему информации. |
|
12-08-2004 22:46Ребята, а почему бы просто не отключить это эхо. Например в модеме U.S.Robotics есть команда ATE0 - Эхо выключено. Я думаю аналогичная команда есть у всех модемов.
И ещё есть вопрос по статье - Разве нет вероятности, что применив PurgeComm между WriteFile и ReadFile, первые байты ответа модема(информационного ответа, а не эха) поступившие в буфер порта будут стёрты |
|
12-08-2004 19:15Ответ на замечание Александра Спелицина.
А Вы попробуйте из текста примера исключить строку PurgeComm и посмотрите, что получится. Возвращается не "AT OK", а просто "AT". На ввод "AT+GMM" возвратится именно "AT+GMM", а не "+GMM: название модема".
Т.е. эхо введенных команд пользователя, а не ответ модема.
Было бы интересно посмотреть на РАБОТАЮЩИЙ пример Вашего кода для решения задачи, поставленной в статье. |
|
11-08-2004 17:36>>>...Ну, пока всё так, как и пишется во всех форумах и статьях. Однако если теперь выполнить функцию ReadFile, то во входном буфере будет та же самая строка, что и в выходном буфере. Так что же делать? А вот здесь вторая и главная особенность описываемого мной метода общения с модемом. Этого я не нашел ни в каких источниках...
Это называется эхом. Когда включен режим эха, модем получив текст команды, сразу же выдает ее в порт обратно. Т.е. если Вы дали ему команду
at
то он выдает обратно ее же текст и результат выполнения.
at
OK |
|
10-08-2004 17:04Неплохо, но вообще AsyncPro все это делает, да и многое другое. |
|
|
|