|
SIM20 |
|
|
|
Oct 1 2013, 11:10
|
Частый гость
 
Группа: Свой
Сообщений: 187
Регистрация: 22-06-05
Из: Минск, Беларусь
Пользователь №: 6 213

|
Пишу программу для коммуникации через SIM20 в режиме команд. Режим команд выбрал, для более гибкой работы с несколькими адресатами, а также для того, чтобы не было задержек ожидания передающего буфера.
1) Хотелось бы уточнить у знатоков, в каком порядке будут поступать данные от SIM20, если мой запрос на выполнение AT-команды совпадет с моментом получения данных от удаленного источника: - Может ли ответ на АТ-команду "разорваться" вставкой полученных данных или они все же будут поступать последовательно друг за другом? - При последовательном поступлении данных от SIM20 есть ли какой-либо проритет между отработкой AT-команд или приема данных от удаленного устройства?
2) Как обычно определяется скорость работы если устройство (в данном случае SIM20) может конфигурироваться. Поясню, у SIM20 "заводская скорость" - 115kbps, однако она может меняться по усмотрению пользователся. Т.е. я по включению должен все таки определить на какой скорости сейчас работает устройство и подстроить ее под себя, мало ли что мог поменять производитель или где до меня был этот SIM20? Как обычно поступают в таких случаях, по включению проверяются все скорости, пока не найдется нужная и уже на ней устройство, при необходимости, переконфигурируется на нужную скорость?
|
|
|
|
|
Oct 1 2013, 11:40
|
Знающий
   
Группа: Свой
Сообщений: 615
Регистрация: 14-02-08
Из: г. Рыбинск, Ярославская область
Пользователь №: 35 028

|
Цитата(Yaumen @ Oct 1 2013, 15:10)  Пишу программу для коммуникации через SIM20 в режиме команд. Режим команд выбрал, для более гибкой работы с несколькими адресатами, а также для того, чтобы не было задержек ожидания передающего буфера.
1) Хотелось бы уточнить у знатоков, в каком порядке будут поступать данные от SIM20, если мой запрос на выполнение AT-команды совпадет с моментом получения данных от удаленного источника: - Может ли ответ на АТ-команду "разорваться" вставкой полученных данных или они все же будут поступать последовательно друг за другом? - При последовательном поступлении данных от SIM20 есть ли какой-либо проритет между отработкой AT-команд или приема данных от удаленного устройства?
2) Как обычно определяется скорость работы если устройство (в данном случае SIM20) может конфигурироваться. Поясню, у SIM20 "заводская скорость" - 115kbps, однако она может меняться по усмотрению пользователся. Т.е. я по включению должен все таки определить на какой скорости сейчас работает устройство и подстроить ее под себя, мало ли что мог поменять производитель или где до меня был этот SIM20? Как обычно поступают в таких случаях, по включению проверяются все скорости, пока не найдется нужная и уже на ней устройство, при необходимости, переконфигурируется на нужную скорость? 1. Нет. Не замечал. 2. "заводская скорость" у сим20 -9600 (реально и по даташит), но китайцы могут всё ;-)
|
|
|
|
|
Oct 1 2013, 11:55
|
Частый гость
 
Группа: Свой
Сообщений: 187
Регистрация: 22-06-05
Из: Минск, Беларусь
Пользователь №: 6 213

|
Цитата(ssokol @ Oct 1 2013, 14:40)  2. "заводская скорость" у сим20 -9600 (реально и по даташит), но китайцы могут всё ;-) Вопрос был в другом. Как правильнее начинать работать с модулем, скорость которого могла быть изменена до вставки в Ваше изделие. Перебирать все скорости, пока SIM20 не ответит на одной из скоростей?
|
|
|
|
|
Oct 3 2013, 12:50
|
Участник

Группа: Участник
Сообщений: 48
Регистрация: 4-07-13
Из: Санкт-Петербург
Пользователь №: 77 391

|
Цитата(Yaumen @ Oct 1 2013, 15:55)  Вопрос был в другом. Как правильнее начинать работать с модулем, скорость которого могла быть изменена до вставки в Ваше изделие. Перебирать все скорости, пока SIM20 не ответит на одной из скоростей? Можно и так. Но чаще всего модули поставляются предпрошитыми с установленной скоростью 9600 (реже) и 115200 bps (чаще). Кто бы после этого не юзал модуль и на какой бы его скорости не оставил - аппаратный RESET должен откатить его на заводские (прошивочные) установки по умолчанию. Т.е. - на одну из этих скоростей. • AT+SRDRESET =1 Reset after 1s without change any pre-set parameters • AT+SRDRESET=0 Reset after 1s ,SIM20 parameters set to default • All AT command send to SIM20 should be finished by "RETURN" ( ASCII HEX = OD Также однозначно поможет перепрошивка модуля, где вы заранее выберете нужную скорость. Кстати, а что отвечает такой модуль на команду AT? Большинство SIMCom-вских модулей на такой запрос отвечает независимо от предустановленной скорости и после такого ответа есть возможность уточнить не какой он стоит сейчас, либо принудительно навязать ему нужную Вам скорость и уже после этого "вправить мозги" так, чтобы Ваша настройка оставалась у него по умолчанию.
|
|
|
|
|
Oct 5 2013, 09:59
|
Ортодокс
  
Группа: Свой
Сообщений: 219
Регистрация: 26-10-07
Из: Смела, Украина
Пользователь №: 31 775

|
Цитата(ssokol @ Oct 3 2013, 17:34)  причем замечал , что если неправильно выбрать стоповые - работает , но с ошибками. 1 или 2 стоп-бита фактически определяют паузу между двумя последовательно выдаваемыми байтами. Если работает с 1, то тем более должно работать, если установить 2.
|
|
|
|
|
Oct 7 2013, 09:01
|
Частый гость
 
Группа: Свой
Сообщений: 187
Регистрация: 22-06-05
Из: Минск, Беларусь
Пользователь №: 6 213

|
Опыт работы с отладочными модулями SIM20-TE говорит о том, что модуль на команду на неправильной скорости не ответит ничего, так как фактически он ничего не примет. Так что придется перебирать скорость, но это не беда.
Мне сложнее написать код для работы, так как опыта работы именно с АТ командами маловато. Вот вопросы, которые возникают:
1. При работе в режиме команд в момент пока я отправляю AT команду к SIM20, он может получить данные от удаленного устройства, т.е. фактически ожидая ответа на АТ команду, гипотетически, я могу получить в начале принятые удаленные данные, а лишь затем ответ на АТ команду. Т.е. в процедуре отбработки ответа на АТ команду, необходимо уметь вычленять собственно ответ и данные. Причем удаленные данные необходимо куда-то временно складывать, чтобы затем другой процедурой заняться их анализом. 2. Каким образом отслеживать окончание ответа на АТ команду: поиск некоего ключевого слова, типа OK или ERROR или по возникновении определенной паузы в передаче ответа от модуля SIM ? 3. Выдерживает ли модуль SIM20 какие-либо паузы между блоками: [удаленные данные] - [ответ на АТ команду] - [удаленные данные] ?
|
|
|
|
|
Oct 7 2013, 10:46
|
Знающий
   
Группа: Свой
Сообщений: 615
Регистрация: 14-02-08
Из: г. Рыбинск, Ярославская область
Пользователь №: 35 028

|
Цитата(Yaumen @ Oct 7 2013, 13:01)  Опыт работы с отладочными модулями SIM20-TE говорит о том, что модуль на команду на неправильной скорости не ответит ничего, так как фактически он ничего не примет. Так что придется перебирать скорость, но это не беда.
Мне сложнее написать код для работы, так как опыта работы именно с АТ командами маловато. Вот вопросы, которые возникают:
1. При работе в режиме команд в момент пока я отправляю AT команду к SIM20, он может получить данные от удаленного устройства, т.е. фактически ожидая ответа на АТ команду, гипотетически, я могу получить в начале принятые удаленные данные, а лишь затем ответ на АТ команду. Т.е. в процедуре отбработки ответа на АТ команду, необходимо уметь вычленять собственно ответ и данные. Причем удаленные данные необходимо куда-то временно складывать, чтобы затем другой процедурой заняться их анализом. 2. Каким образом отслеживать окончание ответа на АТ команду: поиск некоего ключевого слова, типа OK или ERROR или по возникновении определенной паузы в передаче ответа от модуля SIM ? 3. Выдерживает ли модуль SIM20 какие-либо паузы между блоками: [удаленные данные] - [ответ на АТ команду] - [удаленные данные] ? 1. Да 2. SIM20_AT20CommandManual_V1.04, page8, AT Command syntax 3. сомневаюсь, да и зачем "тормозить-то"???
|
|
|
|
|
Oct 8 2013, 12:33
|
Частый гость
 
Группа: Свой
Сообщений: 187
Регистрация: 22-06-05
Из: Минск, Беларусь
Пользователь №: 6 213

|
Народ, зациклился при реализации кода работы с SIM20. Но вполне вероятно, что эта ситуация касается любых устройств, работающих с АТ командами.
Кратенько опишу чуть проблемы:
3 или более устройства связываются между собой посредством SIM20. Для того, чтобы сократить задержки на передаче и для удобства назначения адрес устройства назначения, решил работать исключительно в режиме команд с использованием команды "AT+SRDSEND".
Допустим настал момент отправки сообщения одному из устройств. Я перехожу в процедуру формирования запроса "AT+SRDSEND" и начинаю формировать АТ команду на отправку, который здесь же отправляю к модулю SIM20. Гипотетически, возможна ситуация, что в этот момент, пока я готовлю или отправляю АТ команду, от одного из удаленных модулей поступают данные, которые начинают "сыпаться" в UART. После окончания передачи АТ команды я естественно должен ждать отклика, но от SIM20 "сыпятся" удаленные данные, которые я каким-то образом должен узнать, среди общего потока данных и при этом не потерять.
Еще одна проблема, так как различные АТ команды могут выполняться разное время, то при ожидании отклика я планирую использовать 2 таймаута: - максимальное время реакции SIM20 на АТ команду - максимальная пауза между приемом двух соседних байт данных Так вот, чтобы ими воспользоваться, нужно уметь, в описанном выше случае, четко различать когда закончились "сыплющиеся" удаленные данные, чтобы иметь возможность их применить.
Готов выслушать, любые советы и замечания по тому, как в таких случаях поступают ...
|
|
|
|
|
Oct 8 2013, 13:05
|
Профессионал
    
Группа: Свой
Сообщений: 1 241
Регистрация: 15-11-05
Из: Челябинск
Пользователь №: 10 882

|
Цитата(Yaumen @ Oct 8 2013, 18:33)  Народ, зациклился при реализации кода работы с SIM20. Но вполне вероятно, что эта ситуация касается любых устройств, работающих с АТ командами.
Гипотетически, возможна ситуация, что в этот момент, пока я готовлю или отправляю АТ команду, от одного из удаленных модулей поступают данные, которые начинают "сыпаться" в UART. После окончания передачи АТ команды я естественно должен ждать отклика, но от SIM20 "сыпятся" удаленные данные, которые я каким-то образом должен узнать, среди общего потока данных и при этом не потерять. Общее правило - всегда обрабатывайте ВЕСЬ поток входящих данных! А уж там его разгребайте на отклики и прочую чушь. Прочую чушь желательно отлавливать по заголовкам, где указана длина этой чуши. При наличии отклика выставляйте соответсвующий флаг.
|
|
|
|
|
Oct 8 2013, 13:15
|

Гуру
     
Группа: Свой
Сообщений: 6 023
Регистрация: 26-08-05
Из: Днепр
Пользователь №: 7 988

|
Наш уважаемый клиент и коллега думаю сможет вам помочь - он в свое время основательно разобрался с SIM20. Контакты внизу статьи. http://invent-systems.narod.ru/shkola2.htmили Ukraine Телефон: +380-50-575-98-63 (MTC Украина) E-mail: invent-systems@ya.ru gchernov@e-mail.ua Геннадий Чернов
--------------------
Не можна втрачати надію. Не можна здаватися до останньої миті. Можливо саме вона, остання мить, принесе весну, яка стане початком нового життя.
|
|
|
|
|
Oct 8 2013, 13:22
|
Частый гость
 
Группа: Свой
Сообщений: 187
Регистрация: 22-06-05
Из: Минск, Беларусь
Пользователь №: 6 213

|
CADiLO, Спасибо, я уже отослал ему письмо, но я думал, что это проблема методическая, касающаяся не только SIM20. И похожую проблему должны были бы решать многие, кто работает с АТ командами.
Alechek, Получается, что нужно каким-то образом на лету, при приеме в прерывании очередного байта, определять, что за данные "сыпятся" и выставлять соответствующие флаги.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|