реклама на сайте
подробности

 
 
> GPRS, SIM900, TCP, Модуль (клиент) не соединяется с сервером
Electronics Engi...
сообщение Oct 9 2012, 08:29
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 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 можно не читать. Не могу найти, как их можно удалить.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
GeGeL
сообщение Oct 10 2012, 15:52
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 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й порт, естественно, не использовать sm.gif

Сообщение отредактировал GeGeL - Oct 10 2012, 17:46
Go to the top of the page
 
+Quote Post
Electronics Engi...
сообщение Oct 11 2012, 09:34
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 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 байт, если не ошибаюсь)?
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Oct 11 2012, 12:20
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 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кБ.
Go to the top of the page
 
+Quote Post
Electronics Engi...
сообщение Oct 11 2012, 12:40
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 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 секунды. Смотрел пакеты данных на осциллографе.
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Oct 11 2012, 13:23
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 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 попробовать?
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 30th June 2025 - 18:46
Рейтинг@Mail.ru


Страница сгенерированна за 0.01494 секунд с 7
ELECTRONIX ©2004-2016