Уважаемые Специалисты, возможно ктонибудь сталкивался со следующей проблемой: закрадываются лишние символы в смс
Использую GSM modem Cinterion MC35i в связке с контроллером TWDLC-A40DRF для отсылки СМС при аварии.
Модем сконфигурирован следующими командами:
AT&F
ATE0&C1&D0&S0X4Q0S0=0V1
AT+CMGF=1
AT&W0
Контроллер сконфигурирован следующим образом
baudrate 9600
databits 8
parity none
stop bit 1
response timeout 10x100ms
time between frames ----
во вкладке адванс галочка стоит только на "stop on silence 10ms"
Далее в процессе выполнения программы при аварии отправляю через exch2 %mw0:19
%mw0=16#0116
%mw1=16#0000
%mw2...mw12 в хексе "AT+CMGS=+37529XXXXXXX<CR>"
потом через блок сравнения жду ответа ">"
при получении ">" отправляю через exch2 %mw20:19
%mw20=16#0108
%mw21=16#0000
%mw22...mw25 в хексе "test#6<Cntrl-z><CR>"
на это получаю ответ "ОК"
И тут самое интересное: приходит смс с текстом "AT+Ctest#6" вместо ожидаемого "test#6"
Помогите пожалуйста советом.
%mw22...mw25 в хексе "test#6<Cntrl-z><CR>
Отмените эхо ATE=0
Уберите <CR> в конце.
Что даете в виде <Cntrl-z>
Эхо отключено при конфигурировании модема командой ATE0 (проверял отправкой тестовой команды АТ)
<CR> отправлял в кодировке HEX как "0D", соотвенно <Cntrl-z> как "1А" в программе это выглядело так
%mw25=16#1A0D
Попробовал убрать <CR> в конце %mw25 (таким образом %mw25=16#1A00) команда прошла , в ответ получил от модема "ОК" .... но смс не отправилось. Заменил сим повторил опыт -- тот же эффект. Вернул <CR> в конец (%mw25=16#1A0D) команда прошла снова в ответ ОК, смс отправилась. В мануале на модем эта команда действительно без <CR> указывалась в следующем виде AT+CMGS=<da>[, <toda>]<CR> Text can be entered. <CTRL-Z>/<ESC>
Правильно
<CTRL-Z>/<ESC>
в десятичном виде это 26. 27.
не правильно
<CTRL-Z>/<CR>
в десятичном виде это 26. 13.
В гайде на модем как пояснение указано:
After invoking the write command wait for the prompt ">" and then start to write the message. To send the message
simply enter <CTRL-Z>. After the prompt a timer will be started to observe the input.
To abort sending use <ESC>. Abortion is acknowledged with "OK", though the message will not be sent.
Насколько я понял тут слэш означает или то или то. Если<CTRL-Z> то отправляет смс , а если <ESC>
то отменяет команду.
С <ESC> на конце модем тоже отписывается ОК, но смс не отправляет.
Есть подозрение что с конфигурированием модема что-то не то.
Строку для конфигурирования "ATE0&C1&D0&S0X4Q0S0=0V1" подсказали в организации которая продала модем. А проанализировать полностью команду не могу тк не хватает знаний. У нас в Беларуси техпоппдержка мобильных операторов (МТС и Velcom) не владеет информацией о том как надо настроить модем и какие режимы активировать ... отсылает к продавцам модема )))
Может быть можно выкрутится АТ командой AT+CMSS ?
Но тут другая проблема:
отправляю "AT+CMSS=1,(пробел, код 20 в hex)+37529XXXXXXX<CR>"
в ответ от модема "+CMS ERROR"
Сообщение с индексом 1 существует, считывается командой AT+CMGR=1.
Может причина в настройках FRAME Structure в TwidoSuite?
Цитата(san @ 3.4.2012, 17:59)

Может причина в настройках FRAME Structure в TwidoSuite?
Попробовал изменить Frame Structure в TwidoSuite -- снял галочку с "Stop on silence 10ms", далее установил галочку "used 1st end character". Сначала выбрал в качестве 1го стопового символа CR, рассуждая что у меня все АТ команды заканчиваются CR. Сэмулировал прцесс ... от модема не получил ответа и как результат ошибка (msg2.e) по таймауту.
Проанализировав результат решил что возможно 1ый стоповый символ входит а структуру фрэйма и на модем не передаётся. Для эксперимента после каждой ат команды дописал LF(0А в hex) и в фрэйм стракче выбрал 1ым стоповым LF. Результат тотже что и в предыдущем случае.
В качестве 1го стопового символа можно задать самому, попробовал задать в качестве стопового @ (40 hex)и дописал после СR... тоже ничего не получилось.
Цитата(Gi0 @ 4.4.2012, 7:09)

Попробовал изменить Frame Structure в TwidoSuite -- снял галочку с "Stop on silence 10ms", далее установил галочку "used 1st end character". Сначала выбрал в качестве 1го стопового символа CR, рассуждая что у меня все АТ команды заканчиваются CR. Сэмулировал прцесс ... от модема не получил ответа и как результат ошибка (msg2.e) по таймауту.
Проанализировав результат решил что возможно 1ый стоповый символ входит а структуру фрэйма и на модем не передаётся. Для эксперимента после каждой ат команды дописал LF(0А в hex) и в фрэйм стракче выбрал 1ым стоповым LF. Результат тотже что и в предыдущем случае.
В качестве 1го стопового символа можно задать самому, попробовал задать в качестве стопового @ (40 hex)и дописал после СR... тоже ничего не получилось.
Да я наоборот, в плане все галочки поснимать. А вобще, лучше сначала прослушать СОМ-портом ПК самого Твидо, что он посылает. Я тоже боролся с этой ситуацией, пока ... не узнал что CSD-канал GSM берет больше денег чем GPRS. Узнал когда деньги на карте кончились. Но вот добился я резульата или нет ... уже даже не помню. Отпишитесь, когда добъетесь, самому интересно.
san, спасибо за совет насчет ком порта, попробую. Может быть, Вы сможете подсказать каким образом это удобнее делать тк на ум не приходит ничего кроме Гипертерминала (но не уверен, что и через него что-нибудь получится). Может быть, есть какие-нибудь спец программы / методы?
Я по старинке пользуюсь Compt.exe. Хотя есть более продвинутые проги, где-то у себя посмотрю. Пока вылаживаю эту прогу. Инсталить не надо.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.