|
|
  |
вопросы чайника по TCP-IP стеку SIM300, объясните, pls ? |
|
|
|
Oct 3 2009, 20:37
|
Гуру
     
Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047

|
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 ?
|
|
|
|
|
Oct 4 2009, 05:01
|

читатель даташитов
   
Группа: Свой
Сообщений: 853
Регистрация: 5-11-06
Из: Днепропетровск
Пользователь №: 21 999

|
Цитата(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 не пробовал.
|
|
|
|
|
Oct 5 2009, 11:42
|
Мыслящий
    
Группа: Свой
Сообщений: 1 729
Регистрация: 20-07-07
Из: Самара
Пользователь №: 29 270

|
Цитата(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>
--------------------
FAQ по ADФорум по ADЗнание только тогда знание, когда оно приобретено усилиями своей мысли, а не памятью. ...стоит запомнить ...вернее задуматься.
|
|
|
|
|
Oct 6 2009, 10:05
|
Частый гость
 
Группа: Участник
Сообщений: 142
Регистрация: 20-08-07
Из: Тула
Пользователь №: 29 919

|
Цитата(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 так написана.
|
|
|
|
|
Oct 6 2009, 19:42
|

Просто Che
    
Группа: Свой
Сообщений: 1 567
Регистрация: 22-05-07
Из: ExUSSR
Пользователь №: 27 881

|
Цитата(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 сетях нескольких стран - проблем не наблюдалось...
|
|
|
|
|
Oct 7 2009, 19:08
|
Гуру
     
Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047

|
Всем спасибо за ответы, буду переваривать и думать. Потом еще спрошу  Цитата(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= (на выбор), иначе не работает. Вот теперь что-то прояснилось. Хотя непонятно, почему и без них заработало - может быть, потому, что МТС более снисходительно относится к наличию/отсутствия этих данных...
|
|
|
|
|
Oct 8 2009, 04:39
|
Мыслящий
    
Группа: Свой
Сообщений: 1 729
Регистрация: 20-07-07
Из: Самара
Пользователь №: 29 270

|
Цитата(rx3apf @ Oct 8 2009, 00:08)  Независимо от того, пользуюсь ли я atd*99 или встроенным стеком ? Если МТС-у она не нужна, то, значит, я пока сам проверить и не могу, а знать надо бы... Вообще-то при использовании встроенного стека используется другая команда для настройки точки доступа. +CGDCONT - стандартная команда по спецификации GPRS ATD*99# - тоже - доступ согласно стандарту +CIPxxxxx - команды чисто симкомовские, в стандартах не упомянутые
--------------------
FAQ по ADФорум по ADЗнание только тогда знание, когда оно приобретено усилиями своей мысли, а не памятью. ...стоит запомнить ...вернее задуматься.
|
|
|
|
|
Oct 8 2009, 05:48
|
Группа: Новичок
Сообщений: 2
Регистрация: 7-10-09
Пользователь №: 52 806

|
Доброе время суток! У кого-нибудь получалось передавать и принимать бинарные данные через TCP стек. Есть проблема при получении бинарных данных. В ответе модема съедаются нули. Причем, если включить печать заголовка пакета, то длина пакета указывается с учетом нулей.
|
|
|
|
|
Oct 8 2009, 06:27
|
Мыслящий
    
Группа: Свой
Сообщений: 1 729
Регистрация: 20-07-07
Из: Самара
Пользователь №: 29 270

|
Цитата(kyson @ Oct 8 2009, 10:48)  Доброе время суток! У кого-нибудь получалось передавать и принимать бинарные данные через TCP стек. Есть проблема при получении бинарных данных. В ответе модема съедаются нули. Причем, если включить печать заголовка пакета, то длина пакета указывается с учетом нулей. Подозреваю что проблема не в модеме, а в программе. Просмотрите код внимательно, возможно вы их (нули) сами пропускаете.
--------------------
FAQ по ADФорум по ADЗнание только тогда знание, когда оно приобретено усилиями своей мысли, а не памятью. ...стоит запомнить ...вернее задуматься.
|
|
|
|
|
Oct 9 2009, 11:58
|
Группа: Новичок
Сообщений: 2
Регистрация: 7-10-09
Пользователь №: 52 806

|
Цитата(Master of Nature @ Oct 8 2009, 11:27)  Подозреваю что проблема не в модеме, а в программе. Просмотрите код внимательно, возможно вы их (нули) сами пропускаете. СПасибо! Действительно, так и оказалось. Программа, которая использовалась для тестов собрана на компоненте TComPort, а он использовал событие OnRxChar, для получения данных с порта. Почемуто-то в этом компопоненте не работает событие OnRxBuf.  При использовани функций WinApi нули стали приходить.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|