david_off 0 4 ноября, 2008 Опубликовано 4 ноября, 2008 (изменено) · Жалоба В своем посте "Краткий курс по TCP/IP" я писал про три чудо команды AT+CSTT, AT+CIICR, AT+CIFSF и про глючно работающую AT+CIPSHUT. На горьком опыте убедился, что одна из чудо команд так же имеет особенность. Заметил, что если после посылки AT+CIICR поступает входящий звонок, то модем: 1) в упор отказывается присылать ответ на AT+CIICR, пока есть входящий звонок 2) пока есть входящий звонок - лезут сообщения RING, а любые команды посылаемые модему игнорируются. Получается, что если кто-то дозвонился после посылки команды AT+CIICR и до приёма ответа на эту команду - то надо ждать пока на той стороне положат трубку. На нашей стороне нельзя ни отклонить ни принять звонок. Отдалённо я понимаю, что эти модемы не мультизадачны, но должен же быть какой-то выход из этой ситуации? Может хотя бы можно поставить ограничение на количество RING, после которых, если трубка не снимается, то модем сам выполняет ATH. Это конечно не решает проблему, но хотя бы сокращает время "зависания" модема. Для лучшего понимания приведу лог. Лог реальный! CTRL+C, CTRL+V из окна терминала (кроме коментов кончено): AT+CSTT="WWW.UMC.UA" OK AT+CIICR RING RING //в этот момент посылаю ATH первый раз RING //в этот момент посылаю ATH второй раз RING RING RING NO CARRIER //положил на другой стороне трубку +PDP: DEACT //модем ожил и вспомнил, что выполняет команду CIICR ATH //получаю эхо на посланную первый раз ATH ERROR //ответ на первый ATH ATH //получаю эхо на посланную второй раз ATH OK //ответ на второй ATH Изменено 4 ноября, 2008 пользователем david_off Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
david_off 0 4 ноября, 2008 Опубликовано 4 ноября, 2008 (изменено) · Жалоба Тихо сам с собой веду беседу... Нашёл регистр S7. В нём хранится значение в секундах, которое вызывающий модуль будет ждать до установления связи. По его истечению он перестаёт пытаться дозвонится и выдаёт команду NO ANSWER. Штука почти что надо, только она не совсем корректно работает при разной нагрузке на сеть. Если бы найти что-то подобное для случая, когда поступает входящий звонок и можно регулировать время приёма сообщений RING до автоматической посылки команды ATH, то было бы лучше. Изменено 4 ноября, 2008 пользователем david_off Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость @Ark 4 ноября, 2008 Опубликовано 4 ноября, 2008 · Жалоба Если бы найти что-то подобное для случая, когда поступает входящий звонок и можно регулировать время приёма сообщений RING до автоматической посылки команды ATH, то было бы лучше. Попробуйте при получении RING, вместо ATH, использовать команду ATA (ответ другому модему). Далее - сразу же прервать связь и, тем самым, отключить звонящего. (По моему цель такая?). В регистре S1 находится текущий счетчик звонков (количество принятых RING-ов). Можете воспользоваться, если хотите ответить не сразу. Еще режим автоответа можно попробовать задействовать для решения Вашей проблемы... По моему скромному мнения, Вам нужно для начала основательно разобраться с работой обычного, стандартного модема. Далее - изучить дополнительные особенности вашего модема (модуля), потом - сети, с которой работаете. Вы, почему-то, движетесь строго с "противоположного конца". Отсюда - и большинство проблем... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
david_off 0 4 ноября, 2008 Опубликовано 4 ноября, 2008 · Жалоба Попробуйте при получении RING, вместо ATH, использовать команду ATA Я же говорю, что ни одна команда модемом не воспринимается в этот момент. Ни ATA ни ATH. По логу видно, что модем даже эхо не выдаёт, пока на той стороне не положат трубку. В регистре S1 находится текущий счетчик звонков В моём модеме нет такого регистра. Проверял ATS1? - выдает ERROR. AT&V - показывает S0, S2, S3... Кроме того, даже если бы было, то всё равно наврядли помогло бы. Модем НЕ РЕАГИРУЕТ ни на какие посылаемые ему команды. По моему скромному мнения, Вам нужно для начала основательно разобраться с работой обычного, стандартного модема. Далее - изучить дополнительные особенности вашего модема (модуля), потом - сети, с которой работаете. Вы, почему-то, движетесь строго с "противоположного конца". Отсюда - и большинство проблем... Спорить с вами не буду. Убедился, что у Вас опыта побольше будет. Но помоему эта фраза не очень к месту относительно данной темы. Со всеми аспектами касательно данного вопроса я разобрался. Моя же проблема возникла не из-за недостатка знания, а из-за БАГА-ФИЧИ конкретного модема. Её решение ИМХО может быть только каким-то недокументированным способом. А может она вообще не решаема. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость @Ark 4 ноября, 2008 Опубликовано 4 ноября, 2008 · Жалоба Я же говорю, что ни одна команда модемом не воспринимается в этот момент. Ни ATA ни ATH. По логу видно, что модем даже эхо не выдаёт, пока на той стороне не положат трубку. Попробуйте, все-таки, включить автоответ (он-то должен быть, раз есть регистр S0). Заблаговременно включите, конечно, а не когда получите RING... Спорить с вами не буду. Убедился, что у Вас опыта побольше будет. Но помоему эта фраза не очень к месту относительно данной темы. Со всеми аспектами касательно данного вопроса я разобрался. За фразу, конечно, могу извиниться, если полагаете что впечатление ошибочно. :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
david_off 0 5 ноября, 2008 Опубликовано 5 ноября, 2008 (изменено) · Жалоба Проверил ваше предложение. Пришёл к выводу, что проблема вообще не решаема для данного модема. Вот листинг нагладно показывающий это. 1)Устанавливаю автоматический ответ после двух RING. ats0? 0 OK ats0=2 OK 2) Проверяю работоспособность функции автоответа - работает. RING RING CONNECT 9600 OK ath OK 3) Пробую, ответит ли модем, если звонок поступит во время выполнения команды CIICR. НЕ РАБОТАЕТ! AT+CSTT="WWW.UMC.UA" OK AT+CIICR RING RING RING RING RING RING NO CARRIER//кладу на другой стороне трубуку OK//когда пропал сигнал входящего звонка - модуль оживает и даёт ответ на AT+CIICR 4) Проверяю, а работает ли ещё функция автоответа (после глюка при CIICR) - работает. RING RING CONNECT 9600 Получается, что пока единственно подходящий вариант, ограничить время попытки создать коннект у вызывающего модема(S7). Это хотя бы сократит период подвешивания вызываемого модема. Изменено 5 ноября, 2008 пользователем david_off Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Baser 5 5 ноября, 2008 Опубликовано 5 ноября, 2008 · Жалоба Есть парочка соображений: - конечно, SIM300 являет собой GPRS mobile station class B, которая не обязана уметь одновременно работать с GPRS и голосовой связью. Но все-таки разруливание задач в нем явно сделано криво и многие вещи на совести разработчиков. Все же поглядите на версию ПО вашего экземпляра модема, может она старая, и есть новее с кучей исправлений; - кроме применяемой вами группы команд, в SIM300 есть и другие варианты выполнения того же самого. Поглядите здесь. Я сам применяю первый вариант, там по сути две команды, первая из которых, AT+CIPCSGP, из модема не вылазит (настраивает параметры в самом модеме). А вторая, AT+CIPSTART, автоматически обеспечивает все действия, необходимые для подключения. Может быть такой вариант будет менее глючным; - ещё я не совсем понял стремление разрулить эту ситуацию в модеме как можно быстрее. Почему нельзя просто подождать окончания звонков и установить тайм-аут ожидания корректного ответа на предыдущую команду побольше (минуты две)? Или у вас задача требует скоростных решений? А то любая модемная связь в плане быстроты соединений оч-ч-чень нетороплива. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
david_off 0 6 ноября, 2008 Опубликовано 6 ноября, 2008 · Жалоба поглядите на версию ПО вашего экземпляра модема, может она старая, и есть новее с кучей исправлений; Прошивка 12 - самая новая из доставаемых. Теоритически есть 14, но это пока только теория. - кроме применяемой вами группы команд, в SIM300 есть и другие варианты выполнения того же самого. Спасибо, попробую. Может действительно дело упростится - Почему нельзя просто подождать окончания звонков и установить тайм-аут ожидания корректного ответа на предыдущую команду побольше (минуты две)? Отвечу вопросом на вопрос. А почему бы не побробывать сделать побыстрее? Опишу слегка конфигурацию системы и может тогда станет понятно зачем ускорять. Задача на один модуль собрать инфу о разных объектах. У меня в системе один из модулей (на котором замечено зависание) является "типа основным". Он пытается обзвонить все вторичные модули и узнать их IP адреса. Если вторичный заметил слет GPRS, то сам может позвонить на главный и инициировать обновление своего IP. Все вторичные настраивают себя как сервера. Когда на основной модуль приходят IP от от "вторичных модулей, то тот начинает у них сдаивать инфу о состояние их систем (через GPRS). Опрос одним всех, вместо сливания всеми на один сделано для того, что бы на главный модуль не валилась куча пакетов от кучи вторичных. TCP/IP глючный в модуле SIM300C c 12 прошивкой. 100% замечено, что данные TCP пакета могут вывалится из порта раньше, чем поступит сообщение REMOTE IP:xxx. Т.е не получается в сплошном потоке корректно обрабатывать пакеты. Про этот баг даже сами китайцы писали Когда же один опрашивает всех, то он может и подождать пару сек, пока там гарантированно вылезет REMOTE IP... Так вот, в системе есть тонкое место, когда в районе пропало питание, разрядились все УПС а потом дали элекричество, то потом практически все начнут одновременно ломится на главное устройство. И чем раньше закончится ломление = обновится список IP на главном, тем раньше продолжится нормальная работа. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Baser 5 6 ноября, 2008 Опубликовано 6 ноября, 2008 · Жалоба Отвечу вопросом на вопрос. А почему бы не побробывать сделать побыстрее? Теперь действительно понятно, зачем быстрее. В моих применениях CSD не используется, поэтому ситуация звонка в момент подключения GPRS практически равна нулю, и проще подождать пару минут. У вас же описанная ситуация является чуть-ли не штатной, поэтому действительно нужно искать решение... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
david_off 0 7 ноября, 2008 Опубликовано 7 ноября, 2008 (изменено) · Жалоба В моих применениях CSD не используется А позвольте поинтересоваться, как вы пользуясь GPRS узнаёте IP адреса удалённых точек? Может я как-то нерациоанально сделал? Сначала сам думал о приобретении статических IP - оказалось что оператор не может это сделать. Потом думал пользоваться DynDNS и в главном модуле пользовать сервис DNS. Но так и не понял, как со вторичных мудулей посылать запросы на сервер DynDNS для обновления их IP. Если вы подскажите как разрулить с DynDNS, то буду признателен. Мне кажется это будет более красивое решение обновления IP, чем через CSD. Изменено 7 ноября, 2008 пользователем david_off Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Baser 5 7 ноября, 2008 Опубликовано 7 ноября, 2008 · Жалоба А позвольте поинтересоваться, как вы пользуясь GPRS узнаёте IP адреса удалённых точек? Может я как-то нерациоанально сделал? Не зная глобальных требований к вашей системе, сложно сказать, насколько у вас рационально все сделано. Если главным требованием было сделать так, чтобы устройство, на которое собирается вся информация, было бы мобильным, плюс недопустимы никакие промежуточные стационарные станции (сервер) - тогда у вас все логично. Я таких систем не строил, у нас все по классической схеме клиент-сервер: мобильные устройства - клиенты; сервер - стационарный интернет-сервер со статическим реальным адресом, может находиться в любой точке света. Инициировать обмен может только клиент. В редких случаях сервер может пнуть клиента по SMS, чтобы тот вышел на связь. Но это больше как резервный канал, ибо SMS довольно дорогая вещь при массовом применении. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
megaboy 0 10 ноября, 2008 Опубликовано 10 ноября, 2008 · Жалоба В редких случаях сервер может пнуть клиента по SMS, чтобы тот вышел на связь. хм... а низзя вместо sms просто входящий звонок без поднятия трубки делать? и риал тайм обеспечен и совершенно бесплатно ;) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Baser 5 10 ноября, 2008 Опубликовано 10 ноября, 2008 · Жалоба хм... а низзя вместо sms просто входящий звонок без поднятия трубки делать? и риал тайм обеспечен и совершенно бесплатно ;) Да можно, конечно. И мысль сама по себе очень неплохая. Но применительно к моей системе есть минусы из-за которых я ее пока не буду реализовывать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться