Перейти к содержанию
    

Общий вопрос приема данных

Я хотел спросить, как модем себя поведет если ему через RS232 идет одна команда, а от сети оператора сообщение и все это одновременно.

Что я увижу в окне терминала? Нужно ли мне ожидать конкретный ответ, на посланную команду или есть возможность что в ответе придет еще что-нибудь( например +CMTI:"SM",4), а потом ответ. Как мне писать обработчик, на что надеятся.

 

А пишу я на Си. (опыту мало, вот и задаю вопросы)

Возможны варианты когда вы послали команду по RS232 и если ответ приходит не скоро, то может придти сообщение что-нибудь( например +CMTI:"SM",4). пример возможных не быстрых ответов at+cgatt=1, и другие есть команды которие требуют обработки оператором.

Поэтому стоит не ждать конкретного сообщения а приняв сообщение от модема, анализировать его и выполнять соответствующие действия.

Я принимаю сообщения от модема по признаку 0x0d 0x0a(конец строки, принято сообщение). Сличаю полученное сообщение с списком ожидаемых сообщений. В списке ожидаемых сообщений конечно не все возможные сообщения, а только те, которые я ожидаю и буду обрабатывать. Если это превая строка сообщения(сообщение состоит из нескольких строчек), веточка уходит на прием следующих строчек сообщения. Это уже как параметры.

В таком случае не важно если вы послали команду а пришло сначало какое то другое сообщение а потом ответ на ваше сообщение. Все будет обработано как надо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

во... наконецто народ сознаваться сталь что у него нихрена ничего не работает..

в силу того что даже незнает как модуль работает. :rolleyes:

впрочим как и я.

ну для этого мы тут и собрались.... чтобы выяснить все "китайские" моменты.

 

пока я заметил тока одно..что модуль одновременно принимать и передовать не может ( я думаю что оно так и должно быть, ПОТОМУ ЧТО ПОДРУГОМУ НЕ ПОЛУЧИТСЯ!!)

потому что если прям сразу отправить ему что нибуть после прихода чево нибуть из модуля... и даже по теме модуль бывает нихрена не понимает.

поэтому приходиться делать между ними паузу.

-------------------------

теперь по обработке ответов.

вот пример....

подключаемя к серваку и дрочим модуть входящими звонками..в момент подключения!!!

 

--------

пояснение небольшое....

чтобы упростить себе жизнь и не набирать каждый раз то что можно не набирать я сделал так..

; предварительная настройка модуля

;

; ATE0 - выключаем эхо

; ATV0 - переводим режим ответов в цыфровой режим

; AT+CMEE=0 - выключаем коды ошибок, и получаем цифровой вид error без пояснений на код ошибки

;

; настраиваем под PPP

;

; AT+CIPATS=0 - отключаем таймер авто посылки

; AT+CDNSORIP=0 - выбираем режим IP

;

; настраиваем под SMS ---- я исползую смс на русском языке

;

; AT+CMGF=1 - включаем текстовый режим

; AT+CSCS="UCS2" - включкем юникод

; AT+CSMP=17,167.0,25 - выбираем параметры текстового режима

;

; AT&W - Запись в модуль выбраных настроек

;

после этого эти команды находятся в таком состоянии по умолчанию...

следовательно их больше не набираем.

 

так вот ДЕЛАЮ ТАК..

влючаю устройство....

 

Call Ready - жду пона оно не поймает это и только потом начинает рабатать

 

AT+CGATT=1 - выдаю это !!!! тут 0=ОК и оно сразу не вываливается, есть какаято пауза

похоже что тут ок вываливается не на приём команды а на конкрето конект в сети gprs.. ну или не конект

 

0 - это ОК в цыфровом виде - далее понятно...

 

AT+CIPCSGP=1,"internet.volga"

0

AT+CIPSTART="TCP","89.X.X.X","6565" - а вот тут чуть зарание беру телефон и звоню на модуль... ОК вываливается сразу после набора команды итолько потом сразу RING=2

0

 

2 - это RING

 

2

 

2

 

3 - а это я дал отбой..и если долго ждать то отбой даст оператор.

так вот дальше конектится к серверу нет смысла.. потому сто мы звонком отвалили жпрс

 

AT+CIPSHUT - этим надо закрыть подключения к серверу... а то без этого дальше ничего не получится <--- вот тут уже результат обработки ответов

0 = ок

 

AT+CGATT=1

0

AT+CIPCSGP=1,"internet.volga"

0

AT+CIPSTART="TCP","89.X.X.X0","6565"

0

 

+PDP: DEACT

 

6

AT+CIPSHUT

 

0

AT+CGATT=1

0

AT+CIPCSGP=1,"internet.volga"

0

AT+CIPSTART="TCP","89.X.X.X","6565"

0

 

+PDP: DEACT

 

6

AT+CIPSHUT

 

0

AT+CGATT=1

0

AT+CIPCSGP=1,"internet.volga"

0

AT+CIPSTART="TCP","89.X.X.X","6565"

0

 

+PDP: DEACT

 

6

и так далее по кругу... пока не включим сервер :biggrin:

он был спецыально выключен для настройки обработки комант начинаюшихся на +.....+PDP: DEACT

кокоче сделан автоматический конект к серверу..пробовал звонить.. посылать смс..ничего не мешает.. всё это игнорируется и конект начинается заново...

(тут ещё не закончено... пока не настроен сам конект при включеном сервере... по тех причинам.. но это дело времени)

-----------

теперь про обработку осветов....

как вы уже заметили я модуль переключил на цифровые ответы.. (посмотрите командуATV0)

но в работе с жпрс некоторые команды идут всётаки в текстовом формате

например CONNECT.... в разных вариациях

(если кто знает как это сделать..дайте знать.. я пока не нашол.)

 

короче после команды сразу после неё AT+CIPSTART идёт ответ на принятие самой команды который может быть только двух видов

0 или 4 = ок или еррор

впринципе ответ 4 теоретически возможен а практически если передача в модуль отлажена хорошо то 4 получить трудно но реально ( короче в некоторых устройствах можно не делать)

 

так вот если 0 идём дальше если 4 набираем команду занова.

теперь после ОК

будут ответы на сам конект к серверу.. + цифровые

значит будут и цифровые и текстовые...

тут требуется помощь колектива!!!! так как в пдф нет реального синтаксиса ответов... гдето перед текстом стоит + гдето нету...

а проверить все РЕАЛЬНЫЕ ответы я не могу.

поэтоу у меня щас запущена обработка не всех команд....

для меня это важно... для того чтобы избежать всякие зависания ПОТОМУ ЧТО Я НЕ ПОЛЬЗУЮСЬ ПРОЦОВЫМ ВОТЧДОГ или кто он там не важно...

так вот чтобы у нас ничего не повисло нам надо знать все варианты ответов...

( :biggrin: странно ... описывая это .. сам начинаю понимать как оно работает!!!)

теперь ..после уже обработаного 0 просто принимаем байт и начинаем его сравнивать

 

выглядит это так

принимаем байт - пусть например будет 0D

И НАЧИНАЕМ СРАВНИВАТЬ СО ВСЕМИ ВОЗМОЖНЫМИ В ЭТОМ МЕСТЕ!!!!!!!!!

0=

1=

2=

3=

4=

6=

7=

8=

9=

(некоторые могут начинатся на +... например в этом месте может прийти смс..проверено...заначит добовляем+)

+=

(некоторые могут начинатся на CONNECT ... я не помню начинается ли он на +..заначит добовляем 43)

43=

если дошли досюда то значит нам это байт не нужен и начинаем ловить его занова- идем на "принимаем байт "

--------------

пеперь по веткам

 

0 = значт ок (тут надо проверить как откликнится CONNECT ОК- возможно будет ответ = 1) если по этой команде то

идём на CIPSEND

---------------

2= это ринг, он нам нах не нужет при конекте... но есть два варианта (мы пытаемся приконектится поэтому 3й вариант нах)

1й дать ответ ATH и потом уйти на "принимаем байт "

2й просто проигнарировать и уйти на "принимаем байт " - у меня пока так

3й обработать звонок если вам надо

---------------

раз была 2

значит обязательно 3

3= уйти на закрытие конекта и начинаем заново... так как звонок нам сорвал жпрс

---------------

если приняли

43=то это могут быть

CONNECT в разных вариациях ..ОК или FAIL --ТИПА КАСЯК!!!

тогда после 43 начинаем ловить дальше пропуская 7 байт и цыпляемся за 8й

это будет О или F - ну что делать с ними понятно...опять ухлдим в две ветки..

-------------

+= это значит будет текстовая команда с ней поступаем также как с предыдущей..

----------------------------------------------------

 

я думаю принцип обработки ответов понятен...

это я приводил опираясь на применения асемблера.

и не приводил реальных исходников чтоб народ не заморачивался а понял принцип действия.

я не утверждаю что это правельный или единственый метод..

но на обработке некоторых команд уже проверено.

 

-------------------------------------------

теперь "помошь зала"

нужен весь список реальных ответов (реальных это не из пдф. а хотябы из гипер терминала) с правельным синтаксисом

после команды..

 

AT+CIPSTART="TCP","89.X.X.X","6565"

ОК - это поняно

нато то что возможно тут!!!!!

уже знаю такие ответы

 

+PDP: DEACT

+CMTI:.....

CONNECT ОК

CONNECT FAIL

2=RING

3=NO CARRIER

6=NO DIALTONE

-----------------

А ВОТ ЭТИ 2 Я ДУМАЮ ЧТО НЕ ВОЗМОЖНЫ... МЫЖ ТУТ НЕ ЗВОНИМ!!!

7=BUSY

8=NO ANSWER

-----------------

 

КАКИЕ ЕЩЁ ???????

Изменено пользователем KGB

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Возможны варианты когда вы послали команду по RS232 и если ответ приходит не скоро, то может придти сообщение что-нибудь( например +CMTI:"SM",4). пример возможных не быстрых ответов at+cgatt=1, и другие есть команды которие требуют обработки оператором.

Поэтому стоит не ждать конкретного сообщения а приняв сообщение от модема, анализировать его и выполнять соответствующие действия.

Я принимаю сообщения от модема по признаку 0x0d 0x0a(конец строки, принято сообщение). Сличаю полученное сообщение с списком ожидаемых сообщений. В списке ожидаемых сообщений конечно не все возможные сообщения, а только те, которые я ожидаю и буду обрабатывать. Если это превая строка сообщения(сообщение состоит из нескольких строчек), веточка уходит на прием следующих строчек сообщения. Это уже как параметры.

В таком случае не важно если вы послали команду а пришло сначало какое то другое сообщение а потом ответ на ваше сообщение. Все будет обработано как надо.

 

Вот такого ответа я и ждал. Мое любопытство удовлетворено.

Громадное спасибо.

 

Принцип написания программ у каждого свой (сколько людей столько и мнений) интересно узнать все мнения.

А может есть еще варианты????

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я хотел спросить, как модем себя поведет если ему через RS232 идет одна команда, а от сети оператора сообщение и все это одновременно.

Что я увижу в окне терминала? Нужно ли мне ожидать конкретный ответ, на посланную команду или есть возможность что в ответе придет еще что-нибудь( например +CMTI:"SM",4), а потом ответ. Как мне писать обработчик, на что надеятся.

У модема есть две разновидности команд, одни работают только внутри модема, не вылазя наружу, а другие посылаются дальше в ГСМ сеть.

Так вот, по моим наблюдениям, всё что не вылазит из модема, обрабатывается "атомарно", т.е. между моментом окончания команды и ответом модема ничего другого вклиниться не может.

Вторая группа команд работы с сетью обычно имеет два ответа: чаще всего ОК и ответ сети. До ответа ОК ничего не вклинивается, а вот во время ожидания ответа сети может вывалится какой-нибудь "незапрашиваемый ответ" (URC - unsolicited result code).

 

А по поводу начального момента времени: если одновременно придет ответ сети и команда от вас,

то тут "кто первый" попадет на обработчик события. Интерфейс-то дуплексный, а "одновременность" это абстрактное математическое понятие :)

Так что вполне возможна ситуация, когда во время передачи команды модему (еще все байты не передались, конца строки нет, обработка не началась), модем начинает выдавать вам сообщение о принятой SMS

 

По поводу глюка SIM300 при звонке на него в момент подключения GPRS, о котором вскользь упомянул KGB, то о нем написано здесь:

<AT+CIICR> + <RING> + <SIM300C> = ГЛЮК, Модем странно себя ведёт

Я тоже немного поисследовал этот глюк и подтверждаю его наличие в версии SIM300Z B15. Версии новее не проверял, может уже исправили.

 

 

to KGB

оставьте надежду обрабатывать ВСЕ возможные ответы от модема, поскольку никто кроме разработчиков точно не знает, сколько их и какие они.

И даже сами разработчики модема не знают, что им придется добавить туда завтра :biggrin:

Так шта... Программа просто не должна затыкаться, если наткнется на неизвестный для неё ответ.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так шта... Программа просто не должна затыкаться, если наткнется на неизвестный для неё ответ.

+100

и три строчки кода. ))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

По поводу глюка SIM300 при звонке на него в момент подключения GPRS.....

наверно это не глюк, мож оно так и должно быть.

отбить то звонок можно.

 

to KGB

оставьте надежду обрабатывать ВСЕ возможные ответы от модема, ....

Так шта... Программа просто не должна затыкаться, если наткнется на неизвестный для неё ответ.

 

ну пока я так и делаю... просто холось бы сразу сделать чтоб прога не висла...

а не гонять потом с логером...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

короче как говорится после сборки обработать напильником....

сделал всё проше...

установил конект с сервером.. и сидел отрубал ... врубал сервак

смотрел в каких местах вываливаются какие команды...

конект отладил... теперь полный автомат... ни звонок ни смс .. ему пох.... работает (если надо то можно сделать их обработку)

потом стал модуль дрочить звонками и смс во время передачи данных серверу... тут тоже вылезло несколько касяков.

которые уже поправлены...

короче теперь есть можно сказать полный автомат конекта и передачи данных серверу..

причём после любых дисконектов делаю CGREG проверяю жпрс

и если надо то врубаю его обратно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Baser

обрабатывать не всё не получится...

смотри какой прикольный касяк вылез..

-----------------------------------------------------

AT+CIPSEND

 

> 123456789

SEND OK

 

+CMTI: "SM",7

AT+CIPSEND

 

> 123456789

SEND OK

 

+CMTI: "SM",8 ------------- тут 8ку восприняло как дисконект ...

надо тут добывить обработку +, а то цыпануло за 8ку...это не правельно.

врпинципе это надо сделать везде..

будем ловить + а после него 0D ...обработка в холостую

смс нам тут не нужно.. но если понадобится можно и сделать

 

 

AT+CIPSTART="TCP","X.X.X.X","6565" -- послали заново конект

4 --------------------- и нихрена не поняли

 

+CMTI: "SM",8 --- ЭТО ВХОДЯЩЕЕ СМС №8

А БУДУТ ЖЕ ещёи 30,38,40,48,34,44,33,43,32,42, итд на которые это будет

срабатывать если не обработать

 

Так шта... Программа просто не должна затыкаться, если наткнется на неизвестный для неё ответ.

+100

и три строчки кода. ))

я заметил такие ситуации что когда не по теме что приходит и оно игнорируется а после этого от модуля нет никаких ответов...

вродибы и рад чтото обработать а нету.... вот и получаем висяк...

я думаю что единственый выход это подождать его малость и послать его нах :biggrin:

Изменено пользователем KGB

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

;

; ATE0 - выключаем эхо

; ATV0 - переводим режим ответов в цыфровой режим

; AT+CMEE=0 - выключаем коды ошибок, и получаем цифровой вид error без пояснений на код ошибки

;

Мне нравится когда люди сначала создают сами себе проблемы настройками такого рода, а потом с ними же борются.

Былиб нормальные настройки и получал бы не цифру 8 а а конкретное сообщение, которое трактуется однозначно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Мне нравится когда люди сначала создают сами себе проблемы настройками такого рода, а потом с ними же борются.

Былиб нормальные настройки и получал бы не цифру 8 а а конкретное сообщение, которое трактуется однозначно.

добавил обработку +____0D и всё работает нармально.

правда если с сервака послать 8 то получится автоматический переконект :biggrin: (почти перетонит :crying: )

-----------------------------------------------

AT+CIPSEND

 

> 123456789

SEND OK

8 .............................десконект

AT+CIPSHUT

 

0

AT+CGREG?

 

+CGREG: 0,1

0

AT+CIPSTART="TCP","ч.ч.ч.ч","6565"

0

 

+PDP: DEACT

 

8 ............................. конект

AT+CIPSEND

 

> 123456789

SEND OK

-------------------------------------------------

Изменено пользователем KGB

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

кстати... выше описаный недостаток можно использовать и во благо....

например клиента надо переключить на 2й сервер... а на первом мож профилактика

тогда посылаем в модуль команду записать новый ип в епром...

и потом 8

по 8 происходит дисконект .... и потом конект но уже на новый ип.

 

прикольная фича.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

добавил обработку +____0D и всё работает нармально.

правда если с сервака послать 8 то получится автоматический переконект :biggrin: (почти перетонит :crying: )

-----------------------------------------------

AT+CIPSEND

 

> 123456789

SEND OK

8 .............................десконект

AT+CIPSHUT

 

0

AT+CGREG?

 

+CGREG: 0,1

0

AT+CIPSTART="TCP","ч.ч.ч.ч","6565"

0

 

+PDP: DEACT

 

8 ............................. конект

AT+CIPSEND

 

> 123456789

SEND OK

-------------------------------------------------

Отличная штука получилась!!! :biggrin:

И сколько еще ям себе накопал???

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

M_Z

давай не будем друг другу мозг калупать!!!

и о вкусах спорить...

 

то что мне надо.. работает . жпс принемается и на сервер передаётся.

при дисконектах сам сеодиняется и дальше передаёт

команды с сервера принимаются и устройсто на них реагирует.

всё пучком!!!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

всё пучком!!!

Хм. "Пучком" это смахивает... на радиолюбительство...

Кто мешает сделать AT+CIPSTATUS и узнать точно что происходит с модемом?

Я запрашиваю AT+CREG?, AT+CGREG?, AT+CGATT?, AT+CIPSTATUS в зависимости от желаемого режима несколько раз в минуту.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я запрашиваю AT+CREG?, AT+CGREG?, AT+CGATT?, AT+CIPSTATUS в зависимости от желаемого режима несколько раз в минуту.

Я ... скажем так .. всего 3 недели пишу прогу.. а не несколько лет как некоторые.. и всё дописывают.

и 4 недели как узнал что такое гсм модуль.

поэтому изза отсутствия практики в работе с модулем я ещё не знаю всех возможностей модуля.

соответственно фантазия работает тока в пределах позноного.

век жеви век учись.. так что я думаю что всему своё время.

 

пока я тока опрашиваю AT+CGREG?

если был разрыв соединения то сперва СИПШУТ потом AT+CGREG? и исхотя из этого на AT+CGATT если жпрс оторвался, или на СИПСТАРТ.

 

AT+CIPSTATUS

С ЭТИМ ПОКА НЕ РАЗОБРАЛСЯ КАК РАБОТАЕТ.

едининственное подметил из твоих слов что это определяет что происходит.

а не варианты ответа на набраную перед ним коману.

 

---------------------

единственое могу сказать что С САМИМ модулем уже больших проблем нету, понял как с ним работать..пока всё получается...

главное :biggrin: правельно мониторинг организовать ... и тогда и AT+CIPSTATUS не понадобится... и так видно что происходит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...