Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: вопросы чайника по TCP-IP стеку SIM300
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > Сотовая связь и ее приложения
rx3apf
1. В чем суть команды at+cgdcont= и нужно ли ее использовать при работе посредством собственного стека ? Вопрос возник потому, что я обнаружил, что в настройках моего мобильного GPRS для телефона эта команда не была прописана в дополнительных параметрах и я лишь случайно это обнаружил (хотя скопировать в настройки SIM300) - и все работало. Аналогично, при работе с SIM300 тоже работает и без нее, хоть по atd*99, хоть через внутренний стек. Но один раз я ее использовал... Она нужна ? Она нужна, но не всем (в данном случае МТС) ? Она нужна хотя бы один раз для конкретного IMEI и где-то у оператора запоминается на какое-то время ?

2. Аналогично, at+ciicr. Я никак не мог запустить сессию, не понимая в чем причина (вроде все ж ошибка 6). Стал смотреть примеры, дал at+cgdcont - не помогло. at+ciicr - помогло. А потом стало и без нее работать, довольно много раз. А потом как-то опять вылезла ошибка 6. Так вот, что делает at+ciicr, и почему потом работает и без нее ?

3. Открываю сессию udp, посылаю пакеты (на другом конце простенькая заглушка, возвращает эхо), вижу ответы. Посылаю с интервалом в минуту - работает. Две минуты - работает. Где-то три - туда дуй... В смысле, получатель пакеты получает, эхо отправляет, но до модема они не доходят. at+cipclose не помогает, требуется at+cipshut. Это оператор такое делает ? Время зависит от настроек у оператора ? Чтобы жило, дергать чаще ? А когда я делаю at+cipshut, сессия закрывается и тарифицируется до полных 40 кило или сколько там у кого ?)

4. Открываю TCP-сессию, открытие срывается (connection failed), по таймауту. Состояние почему-то остается connecting, и повторное открытие дает ошибку, нужен close или shut. Почему оно само не переходит в IP INITIAL ?
HARMHARM
Цитата(rx3apf @ Oct 3 2009, 23:37) *
1. В чем суть команды at+cgdcont= и нужно ли ее использовать при работе посредством собственного стека ? Вопрос возник потому, что я обнаружил, что в настройках моего мобильного GPRS для телефона эта команда не была прописана в дополнительных параметрах и я лишь случайно это обнаружил (хотя скопировать в настройки SIM300) - и все работало. Аналогично, при работе с SIM300 тоже работает и без нее, хоть по atd*99, хоть через внутренний стек. Но один раз я ее использовал... Она нужна ? Она нужна, но не всем (в данном случае МТС) ? Она нужна хотя бы один раз для конкретного IMEI и где-то у оператора запоминается на какое-то время ?

Сейчас у операторов стало популярно ставить APN="internet", USER и PASSWORD в "". Может быть, что в модеме по умолчанию те же параметры.
По моим данным:
Код
TGprsParams GprsParams[] =
{
    { "25501", "internet", "", ""},                   // MTS
    { "25502", "internet.beeline.ua", "", ""},        // Beeline
    { "25503", "www.kyivstar.net", "", ""},           // Kyivstar
    { "25506", "internet", "", ""}                   // life:)
};

У MTC кажись припейд отличается. На Киевстаре без "at+cgdcont" не работает ни с SIM300, ни с мобильного.

Цитата
2. Аналогично, at+ciicr. Я никак не мог запустить сессию, не понимая в чем причина (вроде все ж ошибка 6). Стал смотреть примеры, дал at+cgdcont - не помогло. at+ciicr - помогло. А потом стало и без нее работать, довольно много раз. А потом как-то опять вылезла ошибка 6. Так вот, что делает at+ciicr, и почему потом работает и без нее ?

Потому что можно прямо делать +CIPSTART. Эта команда включает в себя и +CIICR. У меня тоже появлялась ошибка 6, но не помню про неё ничего уже.

Цитата
3. Открываю сессию udp, посылаю пакеты (на другом конце простенькая заглушка, возвращает эхо), вижу ответы. Посылаю с интервалом в минуту - работает. Две минуты - работает. Где-то три - туда дуй... В смысле, получатель пакеты получает, эхо отправляет, но до модема они не доходят. at+cipclose не помогает, требуется at+cipshut. Это оператор такое делает ? Время зависит от настроек у оператора ? Чтобы жило, дергать чаще ? А когда я делаю at+cipshut, сессия закрывается и тарифицируется до полных 40 кило или сколько там у кого ?)

Я использую TCP сессии. При простое примерно 5 минут соединение закрывается, причем не сервером. В итоге на Киевстаре кипалайв раз 3 минуты, и всё работает. С UDP не пробовал.
Master of Nature
Цитата(rx3apf @ Oct 4 2009, 01:37) *
1. В чем суть команды at+cgdcont= и нужно ли ее использовать при работе посредством собственного стека ? Вопрос возник потому, что я обнаружил, что в настройках моего мобильного GPRS для телефона эта команда не была прописана в дополнительных параметрах и я лишь случайно это обнаружил (хотя скопировать в настройки SIM300) - и все работало. Аналогично, при работе с SIM300 тоже работает и без нее, хоть по atd*99, хоть через внутренний стек. Но один раз я ее использовал... Она нужна ? Она нужна, но не всем (в данном случае МТС) ? Она нужна хотя бы один раз для конкретного IMEI и где-то у оператора запоминается на какое-то время ?

AT+CGDCONT=<cid>,"IP,"<apn>" задает точку доступа
причем <cid> номер конкретной настройки внутри модема.
при вызове по команде ATD*99***<cid># устанавливается GPRS соединение с указанными настройками.
количество настроек (диапазон <cid>) можно посмотреть по AT+CGDCONT=?
Если данная настройка записана в памяти модуля, то повторная команда не нужна.
Возможно проблема возникает при смене оператора, т.к. для другого оператора требуется другая настройка.

Цитата(rx3apf @ Oct 4 2009, 01:37) *
2. Аналогично, at+ciicr. Я никак не мог запустить сессию, не понимая в чем причина (вроде все ж ошибка 6). Стал смотреть примеры, дал at+cgdcont - не помогло. at+ciicr - помогло. А потом стало и без нее работать, довольно много раз. А потом как-то опять вылезла ошибка 6. Так вот, что делает at+ciicr, и почему потом работает и без нее ?


Для внутреннего стека лучше пользоваться командой AT+CSTT=<apn>,<user>,<pwd>
stream
Цитата(rx3apf @ Oct 4 2009, 00:37) *
1. В чем суть команды at+cgdcont= и нужно ли ее использовать при работе посредством собственного стека ?
Точка доступа в инет. Оператор может делать разные точки доступа для разных способов. Например, для realIp у МТС - отдельная точка.

Цитата
Она нужна, но не всем (в данном случае МТС) ?
Зависит от оператора, в МТС - необязательна (если тебе нужен "обычный" интернет"), а вот в билайне без точного указания точки доступа, имени и пароля не работало.

Цитата
Она нужна хотя бы один раз для конкретного IMEI и где-то у оператора запоминается на какое-то время ?
Она нужна каждый раз при открытии GPRS-сессии, когда тебе присваивается IP-адрес. Запоминается в модеме до перезагрузки.

Цитата
3. Открываю сессию udp, посылаю пакеты (на другом конце простенькая заглушка, возвращает эхо), вижу ответы. Посылаю с интервалом в минуту - работает. Две минуты - работает. Где-то три - туда дуй... В смысле, получатель пакеты получает, эхо отправляет, но до модема они не доходят. at+cipclose не помогает, требуется at+cipshut. Это оператор такое делает ? Время зависит от настроек у оператора ? Чтобы жило, дергать чаще ? А когда я делаю at+cipshut, сессия закрывается и тарифицируется до полных 40 кило или сколько там у кого ?)

Настройка NAT у оператора - мутная вода, на которую мы влиять не можем. У всех свои тараканы. В данном случае в NAT оператора тебе открывают UDP-forwaring. А когда его закрывать? В идеале - по таймауту от последнего прошедшего через него пакета. А в реале все пучит и колбасит.
Я надеюсь, для ответа-эха ты всегда берешь адрес и порт из пришедшего пакета?

Цитата
4. Открываю TCP-сессию, открытие срывается (connection failed), по таймауту. Состояние почему-то остается connecting, и повторное открытие дает ошибку, нужен close или shut. Почему оно само не переходит в IP INITIAL ?

Патамушта SIM300 так написана.
Baser
Цитата(rx3apf @ Oct 3 2009, 23:37) *
1. В чем суть команды at+cgdcont= и нужно ли ее использовать при работе посредством собственного стека ?

Само описание команды см. ответ Master of Nature

Ставил в свое время эксперименты, которые показали, что внутренний стек модема не использует значения переменных, которые задаются этой командой. То есть их можно программировать, они запоминаются, но применяются только при работе через ATD*99***<cid>#

При использовании внутреннего стека нужно задавать APN командами AT+CIPCSGP= или AT+CSTT= (на выбор), иначе не работает.
Я применяю AT+CIPCSGP= и AT+CIPSTART=
Проверено в GSM сетях нескольких стран - проблем не наблюдалось...
rx3apf
Всем спасибо за ответы, буду переваривать и думать. Потом еще спрошу wink.gif

Цитата(HARMHARM @ Oct 4 2009, 09:01) *
Потому что можно прямо делать +CIPSTART. Эта команда включает в себя и +CIICR. У меня тоже появлялась ошибка 6, но не помню про неё ничего уже.

Вот по моим ощущением +CIPSTART не включает в себя +CIICR. Потому как раз двадцать самыми разными вариантами давал +CIPSTART, и в ответ все "ERROR". А как дал +CIICR - заработало. Воспроизводимость ситуации, к сожалению, очень низкая - потом долго работало и без этого. Повторилось только один раз, и опять же - несколько раз +CIPSTART давал.


Цитата(stream @ Oct 6 2009, 14:05) *
Она нужна каждый раз при открытии GPRS-сессии, когда тебе присваивается IP-адрес. Запоминается в модеме до перезагрузки.

Независимо от того, пользуюсь ли я atd*99 или встроенным стеком ? Если МТС-у она не нужна, то, значит, я пока сам проверить и не могу, а знать надо бы...
Цитата
Я надеюсь, для ответа-эха ты всегда берешь адрес и порт из пришедшего пакета?

Вероятно да. Я не сам писал (для PC, на ЯВУ я ничего не пишу), взял TCP-COM, настроил на бридж реального COM, закоротил RxD с TxD - вот и эхо... Учитывая воспроизводимость картины, даже лениво анализатором пакетов смотреть, на какой адрес и порт уходит...


Цитата(Baser @ Oct 6 2009, 23:42) *
При использовании внутреннего стека нужно задавать APN командами AT+CIPCSGP= или AT+CSTT= (на выбор), иначе не работает.

Вот теперь что-то прояснилось. Хотя непонятно, почему и без них заработало - может быть, потому, что МТС более снисходительно относится к наличию/отсутствия этих данных...
Master of Nature
Цитата(rx3apf @ Oct 8 2009, 00:08) *
Независимо от того, пользуюсь ли я atd*99 или встроенным стеком ? Если МТС-у она не нужна, то, значит, я пока сам проверить и не могу, а знать надо бы...

Вообще-то при использовании встроенного стека используется другая команда для настройки точки доступа.
+CGDCONT - стандартная команда по спецификации GPRS
ATD*99# - тоже - доступ согласно стандарту
+CIPxxxxx - команды чисто симкомовские, в стандартах не упомянутые
kyson
Доброе время суток! У кого-нибудь получалось передавать и принимать бинарные данные через TCP стек. Есть проблема при получении бинарных данных. В ответе модема съедаются нули. Причем, если включить печать заголовка пакета, то длина пакета указывается с учетом нулей.
Master of Nature
Цитата(kyson @ Oct 8 2009, 10:48) *
Доброе время суток! У кого-нибудь получалось передавать и принимать бинарные данные через TCP стек. Есть проблема при получении бинарных данных. В ответе модема съедаются нули. Причем, если включить печать заголовка пакета, то длина пакета указывается с учетом нулей.

Подозреваю что проблема не в модеме, а в программе.
Просмотрите код внимательно, возможно вы их (нули) сами пропускаете.
kyson
Цитата(Master of Nature @ Oct 8 2009, 11:27) *
Подозреваю что проблема не в модеме, а в программе.
Просмотрите код внимательно, возможно вы их (нули) сами пропускаете.


СПасибо! Действительно, так и оказалось. Программа, которая использовалась для тестов
собрана на компоненте TComPort, а он использовал событие OnRxChar, для получения данных с порта.
Почемуто-то в этом компопоненте не работает событие OnRxBuf. sad.gif
При использовани функций WinApi нули стали приходить.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.