|
GPRS, SIM900, TCP, Модуль (клиент) не соединяется с сервером |
|
|
|
Oct 9 2012, 08:29
|
Частый гость
 
Группа: Участник
Сообщений: 89
Регистрация: 28-04-11
Пользователь №: 64 664

|
Добрый день!
Начал разбираться с GPRS на базе модуля SIM900. Ознакомился с файлом описания TCP/IP (название документа: SIM900_TCPIP_ApplicationNote_V1.02.pdf). Начал делать такой проектик: Софт на РС будет сервером, а модуль SIM900 - клиентом. Модуль на данный момент подсоединен к терминалу. Буду с терминала управлять модулем SIM900 для первоначального запуска. Используется режим single connection и non-transparent mode, установленные по умолчанию. Начал выполнять действия, описанные в пункте 2.1.1 How to Establish a TCP Client Connection. Команды AT+CPIN?, AT+CSQ, AT+CREG?, AT+CGATT?, AT+CSTT="internet.lmt.lv" (APN латвийского оператора LMT), AT+CIICR, AT+CIFSR прошли нормально. Ответы на эти команды такие же, как в примере на страницах 5 и 6. До этого момента вроде все нормально.
На следующую команду AT+CIPSTART="TCP","10.13.137.45","10000" получил такой ответ: OK а еще через какое-то время пришло: STATE: TCP CLOSED CONNECT FAIL
На компе с IP адресом 10.13.137.45 уже до выполнения этой команды была запущена программа сервера с номером порта сервера 10000. Может какой-то не тот софт на PC? При запуске этой программы нужно было только присвоить номер порта (выбрал 10000). Софт уже сам считывал IP адрес РС. В чем может быть проблема? Какой софт можете посоветовать?
Думаю, что проблема все же не в софте на РС. Один человек подсказал следующее: "Программа может и слушает, но модулю возможно не пробиться через сервер/рутер, сложно сказать не зная вашей архитектуры сети. Настройки Nat, port forwarding и т.д. смотрите". Где можно посмотреть настройки и какие они должны быть?
Заранее спасибо за помощь! Дмитрий
Создал сразу 4 одинаковые темы. У меня сегодня РС тормозит. Первые 3 можно не читать. Не могу найти, как их можно удалить.
|
|
|
|
|
 |
Ответов
|
Oct 10 2012, 15:52
|
Местный
  
Группа: Свой
Сообщений: 403
Регистрация: 29-04-11
Из: Украина
Пользователь №: 64 682

|
Не все так просто у Вас сделать. Все IP, которые начинаются на 10, серые. ---------------- inetnum: 10.0.0.0 - 10.255.255.255 netname: IANA-ABLK-RESERVED1 descr: Class A address space for private ------------------ Т.о., и модуль, и РС с сервером у Вас находятся за NAT, поэтому никоим образом недоступны друг другу, и все Ваши попытки создать описанное выше соединение бесполезны. Выходов из данной ситуации есть много, но самым лучшим видится следующие: 1. Установить сервер на РС, имеющий белый IP (причем не обязательно статический). Многие домовые сети раздают клиентам именно белые IP. Если компьютер за роутером, то в роутере необходимо прописать нужный диаппазон портов на конкретный внутрненний IP вашего компьютера с сервером (VirtualServer). Если IP от провайера белый, но динамический, пропишите в роутере или запустите на РС клиент dyndns, и бесплатно получите доменное имя на dyndns.com. В этом случае подключайтесь с модуля, используя функцию ресолвинга домена (в крайнем случае можно сделать и вручную, отправив заранее заготовленный UDP пакет на 8.8.8.8:53 и отпарсив ответ). Тут есть "подводный камень" - иногда надо постоянную исходящую активность компа с сервером для поддержки arp в сети провайдера. Например, запустите на нем скайп. 2. Более изящный вариант: арендуйте самый дешевый VDS с реальным статитческим IP (это будет стоить 5$/мес), и используйте его в качестве транзитного узла. Можно подобрать нужный готовый софт, или же написать на gcc простенький демон, выполняющий нужные операции. 3. Если все же принципиально нужно соединение точка-точка в ваших условиях, то можно попробовать с помощью внешнего сервера настроить оба NAT (модуля и внутреннего сервера) друг на друга. Так делает, например, скайп или хамачи. Это достаточно сложно алгоритмически и не всегда выполнимо (все зависит от типов NAT). Цитата(Electronics Engineer @ Oct 10 2012, 09:57)  Что касается компа на работе, то наш администратор дал внешний IP адрес моего компа и снял Firewall с порта 10000. Если быть точным, не снял Firewall, а проключил порт 10000 извне на ваш комп (создал VirtualServer-запись в своем роутере). Тоже вариант решения проблемы, но требует контакта с админом сети, его расторопности и желания. Цитата(west329_ @ Oct 10 2012, 16:18)  В Украине только ЛАЙФ и УТЕЛ выделят белый ИП по жпрс, и будьте готовы к приходу большого количества мусора. Ип при подключении всегда разный. С лайфом я не работал, а утел всегда белый и доступен извне. Если на модуле реализовать dyndns-клиент (протокол открыт, из-под OpenCPU или EAT это можно сделать), то не надо ничего просить у сисопа: сервер внутри модуля будет всегда доступен по домену. Может потребоваться периодическая активность модуля (см. выше): например, каждые 30 сек отсылать куда-нибудь удп-пакет с 1-байтной датаграмой. Мусора немного, все терпимо и отсекается на уровне сокета ядром (кстати, столько же, как и в режиме клиента), только 80й порт, естественно, не использовать
Сообщение отредактировал GeGeL - Oct 10 2012, 17:46
|
|
|
|
|
Oct 11 2012, 09:34
|
Частый гость
 
Группа: Участник
Сообщений: 89
Регистрация: 28-04-11
Пользователь №: 64 664

|
Спасибо всем за помощь в решении данной проблемы. На данный момент пока достаточно ломать голову с этими IP адресами.
Надо двигаться дальше. Написал программу для микроконтроллера, который управляет SIM900 модулем (клиент). Программа на РС является сервером. Но планируется запускать эту программу периодически, т.е. сервер с клиентом большую часть времени будут рассоединены.
В начале идет инициализация SIM900, как написано в выше упомянутом документе. Когда при соединении с сервером (отправляется команда AT+CIPSTART="TCP","195.13.137.41","10000"), а в это время сервер слушает клиента, то микроконтроллер получает ответ "CONNECT OK". С этого момента можно обмениваться данными. Если же программа сервера не работает, то микроконтроллер получает ответ "TCP CLOSED", "CONNECT FAIL" и микроконтроллер пытается подсоединиться к серверу вновь. И так до тех пор пока клиент не подсоединится к серверу. Период каждого запроса примерно составляет 2.5-3 секунды. По идее устройство (клиент) должно подлючиться к серверу максимально быстро после запуска программы сервера, т.к. пользователь с программы сервера может слать кое-какие команды устройству. Сейчас программа микроконтроллера написана так, что при удачном соединении с сервером на сервер отсылается сообщение "I am ready". По этому принятому сообщению программа сервера определяет, что можно начинать работу с клиентом. Тут все работает как надо.
Вопрос 1: Используется ли предоставляемый интернетовский объем данных при неудачных попытках подсоединения? Если клиен будет запрашивать соединение каждые 2-3 секунды, не израсходуется ли быстро лимит данных?
Вопрос 2: Устройство (клиент) должно будет слать на сервер довольно большие объемы данных (предварительно до 2 Мbit). Нужно ли использовать handshake при отсылке данных, т.к. скорость передачи данных по каналу GPRS довольно низкая, а внутренний буфер SIM900 ограничен (что-то вроде 500 байт, если не ошибаюсь)?
|
|
|
|
|
Oct 11 2012, 12:20
|
Гуру
     
Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322

|
Цитата(Electronics Engineer @ Oct 11 2012, 12:34)  Вопрос 1: Используется ли предоставляемый интернетовский объем данных при неудачных попытках подсоединения? Если клиен будет запрашивать соединение каждые 2-3 секунды, не израсходуется ли быстро лимит данных? Что значит подсоединение? Раз в 2-3 секунды не выйдет. Цитата(Electronics Engineer @ Oct 11 2012, 12:34)  Вопрос 2: Устройство (клиент) должно будет слать на сервер довольно большие объемы данных (предварительно до 2 Мbit). Нужно ли использовать handshake при отсылке данных, т.к. скорость передачи данных по каналу GPRS довольно низкая, handshake не нужен, достаточно получать ответы от модема (SEND OK). Цитата(Electronics Engineer @ Oct 11 2012, 12:34)  а внутренний буфер SIM900 ограничен (что-то вроде 500 байт, если не ошибаюсь)? Побольше вроде, пакет ведь до 1кБ.
|
|
|
|
|
Oct 11 2012, 12:40
|
Частый гость
 
Группа: Участник
Сообщений: 89
Регистрация: 28-04-11
Пользователь №: 64 664

|
Цитата(_Артём_ @ Oct 11 2012, 15:20)  Что значит подсоединение? Раз в 2-3 секунды не выйдет. Под попыткой подключения / подсоединения клиента к серверу я понимаю следующую последовательность команд: 1) AT+CREG? 2) AT+CGATT? 3) AT+CSTT="internet.lmt.lv" 4) AT+CIICR 5) AT+CIFSR 6) AT+CIPSTART="TCP","IP address of server","Port number of server" Разумеется, выше перечисленные команды посылаются только после приема соответствующего ответа от SIM900. Если на последнюю команду (6) принимается "STATE: TCP CLOSED" "CONNECT FAIL", то процесс повторяется с отсылки команды (1). Этот весь период занимает меньше 3 секунд, типично 2.5 секунды. Смотрел пакеты данных на осциллографе.
|
|
|
|
|
Oct 11 2012, 13:23
|
Гуру
     
Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322

|
Цитата(Electronics Engineer @ Oct 11 2012, 15:40)  Под попыткой подключения / подсоединения клиента к серверу я понимаю следующую последовательность команд: 1) AT+CREG? 2) AT+CGATT? 3) AT+CSTT="internet.lmt.lv" 4) AT+CIICR 5) AT+CIFSR 6) AT+CIPSTART="TCP","IP address of server","Port number of server" Разумеется, выше перечисленные команды посылаются только после приема соответствующего ответа от SIM900. Если на последнюю команду (6) принимается "STATE: TCP CLOSED" "CONNECT FAIL", то процесс повторяется с Непонятно зачем зачем apn и регистрацию в GPRS повторять многократно. Если модуль уже зарегистрирован, то дальше достаточно только пытаться соединится по сокету. Цитата(Electronics Engineer @ Oct 11 2012, 15:40)  Этот весь период занимает меньше 3 секунд, типично 2.5 секунды. Смотрел пакеты данных на осциллографе. Что-то как-то быстро у вас получается. PS. Если за траффик беспокоитесь, то может UDP попробовать?
|
|
|
|
Сообщений в этой теме
Electronics Engineer GPRS, SIM900, TCP Oct 9 2012, 08:29 andrewlekar Попробуйте с компа подцепиться к этому адресу. Ком... Oct 9 2012, 09:03 Electronics Engineer Цитата(andrewlekar @ Oct 9 2012, 12:03) П... Oct 9 2012, 09:19 andrewlekar Если связь не установится между двумя PC в разных ... Oct 9 2012, 09:47 Electronics Engineer Цитата(andrewlekar @ Oct 9 2012, 12:47) Е... Oct 9 2012, 12:06  _Артём_ Цитата(Electronics Engineer @ Oct 9 2012, 15... Oct 9 2012, 13:07   alexdos "а еще через какое-то время пришло: STATE: TC... Oct 9 2012, 16:28   Electronics Engineer Цитата(_Артём_ @ Oct 9 2012, 16:07) Зачем... Oct 10 2012, 06:57 andrewlekar Чтобы модуль был сервером, нужно идти к оператору ... Oct 10 2012, 07:03 Electronics Engineer Цитата(andrewlekar @ Oct 10 2012, 10:03) ... Oct 10 2012, 07:23  _Артём_ Цитата(Electronics Engineer @ Oct 10 2012, 10... Oct 10 2012, 11:20   Electronics Engineer Цитата(_Артём_ @ Oct 10 2012, 14:20) Испо... Oct 10 2012, 12:00    west329_ Цитата(Electronics Engineer @ Oct 10 2012, 15... Oct 10 2012, 13:18 andrewlekar 1. Да, используется. Да, израсходуется.
2. Можно и... Oct 11 2012, 10:53 Electronics Engineer Цитата(andrewlekar @ Oct 11 2012, 13:53) ... Oct 11 2012, 11:17 GeGeL При Вашем подходе расход трафика будет очень больш... Oct 11 2012, 12:51 Electronics Engineer Цитата(GeGeL @ Oct 11 2012, 15:51) При Ва... Oct 12 2012, 06:03  _Артём_ Цитата(Electronics Engineer @ Oct 12 2012, 09... Oct 12 2012, 13:24   Electronics Engineer Цитата(_Артём_ @ Oct 12 2012, 16:24) Как-... Oct 12 2012, 16:02    _Артём_ Цитата(Electronics Engineer @ Oct 12 2012, 19... Oct 12 2012, 20:55     Electronics Engineer Цитата(_Артём_ @ Oct 12 2012, 23:55) Да, ... Oct 15 2012, 07:07      _Артём_ Цитата(Electronics Engineer @ Oct 15 2012, 10... Oct 15 2012, 20:49       Electronics Engineer Попробовал пересылать большие пакеты данных с кли... Oct 17 2012, 10:39        GeGeL Цитата(Electronics Engineer @ Oct 17 2012, 13... Oct 18 2012, 18:18         Electronics Engineer Цитата(GeGeL @ Oct 18 2012, 21:18) Думаю,... Oct 19 2012, 09:21       Electronics Engineer Увеличил скорость обмена данными по UART между мик... Oct 18 2012, 06:16 GeGeL UDP тут не поможет, т.к. в смысле трафика практиче... Oct 12 2012, 06:37 Electronics Engineer Цитата(GeGeL @ Oct 12 2012, 09:37) При та... Oct 12 2012, 07:19 vka_ Не совсем понятна Ваша проблема: по существу Вы ... Oct 12 2012, 06:43 MKdemiurg ЦитатаВопрос заключается в том, как можно по возмо... Oct 18 2012, 06:24 _Артём_ Цитата(MKdemiurg @ Oct 18 2012, 09:24) Пр... Oct 18 2012, 15:12 GeGeL При таком подходе сообщение о доставке будет прихо... Oct 19 2012, 09:50 vintick Уточните еще раз пожалуйста:
как можно устанавлив... Jan 3 2013, 13:33 GeGeL Модуль должен постоянно поддерживать соединение с ... Jan 7 2013, 08:22 vintick На данный момент мне надо вариант
когда модуль-сер... Jan 7 2013, 09:55 GeGeL Если все так, как описано (на модуле СТАТИЧЕСКИЙ I... Jan 7 2013, 15:06 Romashki По поводу скорости - передавал на сервер с СИМ900 ... Jan 8 2013, 17:30
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|