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

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> 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
andrewlekar
сообщение Oct 9 2012, 09:03
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 837
Регистрация: 8-02-07
Пользователь №: 25 163



Попробуйте с компа подцепиться к этому адресу. Комп возьмите с другой локалки.
Go to the top of the page
 
+Quote Post
Electronics Engi...
сообщение Oct 9 2012, 09:19
Сообщение #3


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

Группа: Участник
Сообщений: 89
Регистрация: 28-04-11
Пользователь №: 64 664



Цитата(andrewlekar @ Oct 9 2012, 12:03) *
Попробуйте с компа подцепиться к этому адресу. Комп возьмите с другой локалки.


В начале попробовал соединить два РС, которые включены в одну сеть.
На одном РС была запущена программа сервера, на втором - программа клиента.
Все работало, можно было обмениваться данными в обоих направлениях.
Возможно, у нас здесь (на работе) своя локальная сеть. Может она не пропускает что-то.
Если честно, то я в сетях мало что понимаю. Если что, надо будет спрашивать у администратора сети.
Пока у меня нет возможности подсоединиться с другой сети.
В крайнем случае нужно нести модуль домой, устанавливать весь софт и т.д.
Что нужно делать, если связь не установится между двумя РС в разных локальных сетях?
В любом случае эту проблему нужно решать.
Go to the top of the page
 
+Quote Post
andrewlekar
сообщение Oct 9 2012, 09:47
Сообщение #4


Знающий
****

Группа: Участник
Сообщений: 837
Регистрация: 8-02-07
Пользователь №: 25 163



Если связь не установится между двумя PC в разных локальных сетях, значит указанный IP адрес "серый" - спрятан за NATом, то есть существует только в пределах вашей локалки. Если не ошибаюсь, то диапазон 10.х.х.х используется как раз для локальных адресов...
GSM модуль существует в своей виртуальное подсети и за некорыми исключениями, может подключаться только к "белым" внешним адресам. Вам, чтобы решить эту проблему, нужно попросить у админа статический внешний адрес для экспериментов (это может потребовать некоторых финансовых затрат).
Go to the top of the page
 
+Quote Post
Electronics Engi...
сообщение Oct 9 2012, 12:06
Сообщение #5


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

Группа: Участник
Сообщений: 89
Регистрация: 28-04-11
Пользователь №: 64 664



Цитата(andrewlekar @ Oct 9 2012, 12:47) *
Если связь не установится между двумя PC в разных локальных сетях, значит указанный IP адрес "серый" - спрятан за NATом, то есть существует только в пределах вашей локалки. Если не ошибаюсь, то диапазон 10.х.х.х используется как раз для локальных адресов...
GSM модуль существует в своей виртуальное подсети и за некорыми исключениями, может подключаться только к "белым" внешним адресам. Вам, чтобы решить эту проблему, нужно попросить у админа статический внешний адрес для экспериментов (это может потребовать некоторых финансовых затрат).


Хорошо, буду узнавать у нашего админа.
Если GSM модуль существует в своей виртуальной подсети, то и его IP начинается с 10.х.х.х?
При считывании IP адреса с SIM900 модуля он выдает разные адреса.
Один раз выдал 10.83.194.253, а другой раз - 10.40.25.55
IP адрес модуля нефиксированный, а динамический?
Поэтому его нужно каждый раз считывать?
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Oct 9 2012, 13:07
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(Electronics Engineer @ Oct 9 2012, 15:06) *
При считывании IP адреса с SIM900 модуля он выдает разные адреса.
Один раз выдал 10.83.194.253, а другой раз - 10.40.25.55
IP адрес модуля нефиксированный, а динамический?
Поэтому его нужно каждый раз считывать?

Зачем вам нужен IP модуля? Какой в нём смысл?
Go to the top of the page
 
+Quote Post
alexdos
сообщение Oct 9 2012, 16:28
Сообщение #7


Местный
***

Группа: Участник
Сообщений: 339
Регистрация: 10-07-08
Из: Херсон
Пользователь №: 38 856



"а еще через какое-то время пришло: STATE: TCP CLOSED CONNECT FAIL" мы программисты любим цифры, конкретно укажите через какое время Вам приходит " STATE: TCP CLOSED CONNECT FAIL" ?
Go to the top of the page
 
+Quote Post
Electronics Engi...
сообщение Oct 10 2012, 06:57
Сообщение #8


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

Группа: Участник
Сообщений: 89
Регистрация: 28-04-11
Пользователь №: 64 664



Цитата(_Артём_ @ Oct 9 2012, 16:07) *
Зачем вам нужен IP модуля? Какой в нём смысл?

Я так понимаю, IP адрес модуля понадобится, если захочу сконфигурировать
модуль сервером, а программу на РС - клиентом.
При подключении к серверу нужно указывать IP адрес и номер порта сервера.
Это для следующего эксперимента.

Дома получилось подключиться к серверу.
Что касается компа на работе, то наш администратор дал
внешний IP адрес моего компа и снял Firewall с порта 10000.
В результате тоже получилось соединиться с програмкой сервера.
Данные передаются в обоих направлениях.

Модуль SIM900 поочередно выдает два IP адреса:
10.40.25.55 и 10.83.194.253
Можно ли сделать так, чтобы он всегда выдавал только один адрес.
Если не ошибаюсь, то где-то читал, что можно задать фиксированный IP адрес.
Когда модуль подключается к серверу, то в програмке
сервера в поле IP адреса клиента вместо 10.40.25.55 появляется
212.93.100.2, а при 10.83.194.253 появляется такой адрес 212.93.100.45

Теперь хочу сделать наоборот, чтобы комп был клиентом, а модуль - сервером.
Какой мне указывать адрес сервера (IP адрес модуля SIM900)?
Может локальные адреса предусмотрены для общения между аналогичними модулями SIM900,
а есть также какой-то внеший IP адрес для работы с остальным миром?
Это я просто предположил по аналогии с нашей локальной сетью.

Цитата(alexdos @ Oct 9 2012, 19:28) *
"а еще через какое-то время пришло: STATE: TCP CLOSED CONNECT FAIL" мы программисты любим цифры, конкретно укажите через какое время Вам приходит " STATE: TCP CLOSED CONNECT FAIL" ?

Точно не скажу, но где-то порядка 30 секунд или примерно так.
Наверно, при отсылке команды AT+CIPSTART="TCP","10.13.137.41","10000" запускается таймер на определенное время.
Если модуль не подсоединяется к серверу за это время, то срабатывает таймаут и
модуль выдает сообщение STATE: TCP CLOSED CONNECT FAIL.
Эта проблема уже решилась после того, как администратор дал внешний IP адрес моего РС.

Сообщение отредактировал Electronics Engineer - Oct 10 2012, 06:58
Go to the top of the page
 
+Quote Post
andrewlekar
сообщение Oct 10 2012, 07:03
Сообщение #9


Знающий
****

Группа: Участник
Сообщений: 837
Регистрация: 8-02-07
Пользователь №: 25 163



Чтобы модуль был сервером, нужно идти к оператору сотовой связи и просить у него услугу "статический внешний IP". Ни разу такой услугой не пользовался, но подозреваю, что дадут нестандартный APN и возьмут некоторое количество денег.
Go to the top of the page
 
+Quote Post
Electronics Engi...
сообщение Oct 10 2012, 07:23
Сообщение #10


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

Группа: Участник
Сообщений: 89
Регистрация: 28-04-11
Пользователь №: 64 664



Цитата(andrewlekar @ Oct 10 2012, 10:03) *
Чтобы модуль был сервером, нужно идти к оператору сотовой связи и просить у него услугу "статический внешний IP". Ни разу такой услугой не пользовался, но подозреваю, что дадут нестандартный APN и возьмут некоторое количество денег.

Попытался запустить модуль в качестве сервера, а софт на РС - в качестве клиента.
В начале сконфигурировал модуль сервером, как описано на странице 8 выше указанного документа.
Когда модуль находился в состоянии SERVER LISTENING, перепробывал все 4 IP адреса сервера,
но клиенту так и не удалось подсоединиться к серверу ни с одним адресом.
Это я просто хотел поэкспериментировать. В реальных устройствах модуль скорее всего будет клиентом.
Пока не актуально делать модуль сервером.

Интересно, а два SIM900 модуля будут между собой работать, если один будет сервером, а второй -клиентом?
Или с сервером будет такая же проблема?
Использовать их локальные адреса, что модули выдают на команду AT+CIFSR (Get local IP address).

Сообщение отредактировал Electronics Engineer - Oct 10 2012, 08:02
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Oct 10 2012, 11:20
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(Electronics Engineer @ Oct 10 2012, 10:23) *
Попытался запустить модуль в качестве сервера, а софт на РС - в качестве клиента.
...

Использование sim900 в качестве сервера (и не только) описано в документе SIM900_TCPIP_Application Note_V1.02.pdf
Go to the top of the page
 
+Quote Post
Electronics Engi...
сообщение Oct 10 2012, 12:00
Сообщение #12


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

Группа: Участник
Сообщений: 89
Регистрация: 28-04-11
Пользователь №: 64 664



Цитата(_Артём_ @ Oct 10 2012, 14:20) *
Использование sim900 в качестве сервера (и не только) описано в документе SIM900_TCPIP_Application Note_V1.02.pdf

Как раз делал по примерам, описанным в этом документе.
Проблема заключалась в том, что клиент (софт на РС) не мог подсоединиться к серверу (модуль SIM900).
Загвоздка в IP адресе модуля (сервер). Тот локальный IP адрес, который считывается с SIM900, не проходит.
Не подходил также тот IP адрес, который определяет РС, когда модуль подсоединяется как клиент.
Чуть выше была описана возможное решение этой проблемы.
Пока с этим я возиться не буду. Модуль планируется использовать в качастве клиента.
Просто хотел попробовать.
Go to the top of the page
 
+Quote Post
west329_
сообщение Oct 10 2012, 13:18
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 378
Регистрация: 10-09-07
Из: UKR/Voz
Пользователь №: 30 423



Цитата(Electronics Engineer @ Oct 10 2012, 15:00) *
Как раз делал по примерам, описанным в этом документе.
Проблема заключалась в том, что клиент (софт на РС) не мог подсоединиться к серверу (модуль SIM900).
Загвоздка в IP адресе модуля (сервер). Тот локальный IP адрес, который считывается с SIM900, не проходит.
Не подходил также тот IP адрес, который определяет РС, когда модуль подсоединяется как клиент.
Чуть выше была описана возможное решение этой проблемы.
Пока с этим я возиться не буду. Модуль планируется использовать в качастве клиента.
Просто хотел попробовать.


В Украине только ЛАЙФ и УТЕЛ выделят белый ИП по жпрс, и будьте готовы к приходу большого количества мусора. Ип при подключении всегда разный.
Go to the top of the page
 
+Quote Post
GeGeL
сообщение Oct 10 2012, 15:52
Сообщение #14


Местный
***

Группа: Свой
Сообщений: 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
Сообщение #15


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

Группа: Участник
Сообщений: 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

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

 


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


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