ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
28 марта
998784 Топик полностью
fk0, легенда (25.04.2020 14:15, просмотров: 914) ответил Гyдвин на Мне не надо понимать какой токен из множества различных. Я тупо выполняю команду и жду нужный или окончание тайм-аута: if (command("AT+CREG?", 2, REG)) Так что в данном приложении (просто проверить регистрацию в сети, активность GRS сессиии и послать данные, получив "200" ) - клевый. Простой и компактный. А я ленивый ;) Ну и да - если при выполнении команды модем ничего не ответил во время тайм-аута, значит висит - передергиваю питание. За пару суток такое
Ты ждешь хеш токена, а не токен. Проблема в том, что ответ может оказаться не буквально, побуквенно, совпадающий с ожидаемым. Пример: "CONNECT 9600". Который может превратиться в "CONNECT 2400". И коллизии само собой -- на которые гарантию никто не даст вообще. Может тебе вместо "CONNECT" написали "ERROR 23512" и хеши совпали. Хеширование само по себе -- не метод, а лишь способ ускорить и обойтись меньшим количеством сравнений строк, которые всё равно нужны. Потом таким 

методом тебе не распарсить сложные ответы. Вот как раз AT+CREG, AT+COPS, там сложные ответы. Я уж не помню деталей. И потом ещё есть в модемном протоколе такое понятие как "unsoliscited messages", которые валятся в любой момент. У них содержимое достаточно большое и разбнообразное, чтоб опять же устроить коллизии во-первых, во-вторых сломать твой недопарсер. Их, кстати, для нормальной работы с модемом обязательно парсить нужно, т.к. часть информации можно достать только из них.


Ещё кстати хороший вопрос, что ты будешь делать, если тебе запаяли как попало настроенный модем. По хорошему должен быть цикл подбирающий скорость уарта и посылающий набор команд для перевода в конфигурацию с которой может работать (скорость, форма ответов, эхо). Я кстати для себя навсегда сделал вывод, что лучше потратиться на парсинг, чем до конца жизни мучаться с тем что просто толком не работает. Парсер должен нормально работать в символьном режиме и с эхом: это основной режим который у всех работает более-менее. Ибо у того же SIM300 в цифровом режиме можно запросто наткнуться на символьные ответы.


Потом у тебя замечательный ответ: если не сработало (твой код наткнулся на неожиданный ответ) я мол питание передергиваю. И начинаются рассказы о зависающих модемах. А если у тебя 100 раз подряд не сработает, что делать будешь? Ты на этом погоришь, на циклических ребутах с непонятной ситуацией и отсутствием диагностики.


Я могу сказать на практике, дергать питание модемам типа SIM300, SIM900 нужно было очень редко. Там основной затык был в том, что модем не следует протоколу (V.250) и выплевывает какие попало сообщения когда попало (благо хоть строчки не рвет), что вываливается из сети думая, что он в сети и ничего не делает (что лечилось периодическим USSD-запросом, и если сбой: перерегистрация АТ-командой), что кратковременно теряется контакт с SIM-картой (проверялось периодически командой работающей с картой) и дальше невнятные ошибки -- вот в последнем случае нужен перезапуск с питанием.

[ZX]