Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту

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

 
Опции темы

SIM900 в режиме PDU

Непрочитано 10.02.2020, 02:10  
DPANYTA
Прописка
 
Аватар для DPANYTA
 
Регистрация: 25.11.2008
Сообщений: 114
Сказал спасибо: 3
Сказали Спасибо 9 раз(а) в 9 сообщении(ях)
DPANYTA на пути к лучшему
По умолчанию SIM900 в режиме PDU

Кто-нить работал с этим чудом китайпрома?

Всё делаю вот по этой статье: http://hardisoft.ru/soft/samodelkin-...-na-c-chast-1/

В текстовом режиме (AT+CMGF=1) всё ровно - отправляет.
А вот когда AT+CMGF=0, тут ERROR.

Делаю так:
Включаю питание.
Дожидаюсь, когда лампочка замигает: "я в сети".
Жму кнопку:
1. AT+CMGF=0 Переводим в PDU-режим
отвечает OK
2. AT+CMGS=31
отвечает ›
3. 07 91 9701879999F9 0100 0B 91 9721436587F9 00 08 12
041F04400438043204350442002100210021
(тут циферки из статьи, а у меня номера СМС центра и абонента свои конечно)
4. 26 (т.е. 0x1A)
отвечает ERROR

4й пункт делал и сразу вслед сообщению, и после паузы (до 10сек) - ERROR.
Если 4й пункт не делать (не давать команду на отправку 0x1A), то вааще тишина. Приходит только эхо переданного.

Что не так?
Статья про модемы. Мож SIM900 чем отличается...
Реклама:
DPANYTA вне форума  
Непрочитано 11.02.2020, 01:28  
AR_Favorit
Почётный гражданин KAZUS.RUN
 
Регистрация: 13.03.2010
Сообщений: 2,896
Сказал спасибо: 498
Сказали Спасибо 3,061 раз(а) в 1,425 сообщении(ях)
AR_Favorit на пути к лучшему
По умолчанию Re: SIM900 в режиме PDU

Юникодовскую кодировку включить надобно.

AT+CSCS="UCS2"
AR_Favorit вне форума  
Непрочитано 11.02.2020, 01:48  
DPANYTA
Прописка
 
Аватар для DPANYTA
 
Регистрация: 25.11.2008
Сообщений: 114
Сказал спасибо: 3
Сказали Спасибо 9 раз(а) в 9 сообщении(ях)
DPANYTA на пути к лучшему
По умолчанию Re: SIM900 в режиме PDU

Сообщение от AR_Favorit Посмотреть сообщение
Юникодовскую кодировку включить надобно.

AT+CSCS="UCS2"
Дык это...
Там есть 08h. Оно вроде как и включает UCS2.

Добавил. Не помогло...

Добавил поле "время действия SMS" (тут подглядел: http://www.edgemodem.ru/forum/viewtopic.php?f=8&t=901 )
Пофиг...

Последний раз редактировалось DPANYTA; 11.02.2020 в 01:53.
DPANYTA вне форума  
Непрочитано 11.02.2020, 01:56  
AR_Favorit
Почётный гражданин KAZUS.RUN
 
Регистрация: 13.03.2010
Сообщений: 2,896
Сказал спасибо: 498
Сказали Спасибо 3,061 раз(а) в 1,425 сообщении(ях)
AR_Favorit на пути к лучшему
По умолчанию Re: SIM900 в режиме PDU

Сообщение от DPANYTA Посмотреть сообщение
Дык это...
Там есть 08h. Оно вроде как и включает UCS2.
Оно только указывает устройству получателя, в какой кодировке получено сообщение. Ваш же модем надо переводить в юникод вышеуказанной командой, иначе юникодное тело сообщения он не примет.

Сообщение от DPANYTA Посмотреть сообщение
Добавил. Не помогло...
ща посмотрю, что у меня там ещё в процедуре отправки...
AR_Favorit вне форума  
Непрочитано 11.02.2020, 02:03  
AR_Favorit
Почётный гражданин KAZUS.RUN
 
Регистрация: 13.03.2010
Сообщений: 2,896
Сказал спасибо: 498
Сказали Спасибо 3,061 раз(а) в 1,425 сообщении(ях)
AR_Favorit на пути к лучшему
По умолчанию Re: SIM900 в режиме PDU

PHP код:
void long_sms_compose(char* phone_number, uint8_t u8_ttl)
{
  uint8_t u8_tmp_phone_number_position_index = 0;
  uint8_t u8_tmp_phone_number_length = 0;
  uint8_t u8_tmp_number_finished = 0;
  uint16_t u16_sms_bytes_count = 0;                                //Счетчик байт в поле сообщения
    uint16_t u16_tmp_length;
  uint8_t u8_tmp_length_index = 0;
    
  
    //Начинаем собирать пакет
    u16_outcoming_long_sms_position_index = 0;  
    
    //Буфер начинается с 00 (номер SMS-центра не указан) 
    outcoming_sms[u16_outcoming_long_sms_position_index++] = '0';
    outcoming_sms[u16_outcoming_long_sms_position_index++] = '0';
    
    
    //PDU-type (простое или составное сообщение)
    if (long_sms_current_wr_position_index › SHORT_SMS_MAX_LENGTH)
    {
        outcoming_sms[u16_outcoming_long_sms_position_index++] = '5';            //VPF = 0x10, относительный формат времени жизни СМС
        outcoming_sms[u16_outcoming_long_sms_position_index++] = '1';
    }
    else 
    {
        outcoming_sms[u16_outcoming_long_sms_position_index++] = '1';            //VPF = 0x10, относительный формат времени жизни СМС
        outcoming_sms[u16_outcoming_long_sms_position_index++] = '1';
    }

    //TP-MR
    add_u8hex_as_text (u8_TP_MR_field++);
    
    //Подсчет длины телефонного номера
  while (phone_number[u8_tmp_phone_number_position_index] !=0)
  {
    if ((phone_number[u8_tmp_phone_number_position_index] != '+')&&(phone_number[u8_tmp_phone_number_position_index] != '"')) u8_tmp_phone_number_length++;
    u8_tmp_phone_number_position_index++;
  }
  
    add_u8hex_as_text (u8_tmp_phone_number_length);
  
    //Тип номера - международный
    outcoming_sms[u16_outcoming_long_sms_position_index++] = '9';
    outcoming_sms[u16_outcoming_long_sms_position_index++] = '1';
  
    //Номер помещается в буфер без знака "+"
  u8_tmp_phone_number_position_index = 0;
  if ((phone_number[u8_tmp_phone_number_position_index] == '+')||(phone_number[u8_tmp_phone_number_position_index] == '"'))  u8_tmp_phone_number_position_index++;
  
    //Помещаем номер в буфер с перестановкой и, при необходимости, дополнением "F"
  while (u8_tmp_number_finished == 0)
  {
    if (phone_number[u8_tmp_phone_number_position_index] == '"') 
      {
        u8_tmp_phone_number_position_index++;
      }
    else
    {
      if (phone_number[u8_tmp_phone_number_position_index] == 0) 
      {
        u8_tmp_number_finished = 1;
      }
      else 
      {
        outcoming_sms[u16_outcoming_long_sms_position_index + 1] = phone_number[u8_tmp_phone_number_position_index];
        if (phone_number[u8_tmp_phone_number_position_index+1] ==0) 
        {
          outcoming_sms[u16_outcoming_long_sms_position_index] = 'F';
          u8_tmp_number_finished = 1;
        }
        else 
        {
          outcoming_sms[u16_outcoming_long_sms_position_index] = phone_number[u8_tmp_phone_number_position_index+1];
        }
        u16_outcoming_long_sms_position_index += 2;
        u8_tmp_phone_number_position_index += 2;
       }
    }
  }

    //Поле TP- PID=00, поле TP- DCS = 08 (кодировка UCS-2)
    outcoming_sms[u16_outcoming_long_sms_position_index++] = '0';
    outcoming_sms[u16_outcoming_long_sms_position_index++] = '0';
    outcoming_sms[u16_outcoming_long_sms_position_index++] = '0';
    outcoming_sms[u16_outcoming_long_sms_position_index++] = '8';

    //ПОле VP - время жизни СМС 
    if (u8_ttl == 1)
    {
        outcoming_sms[u16_outcoming_long_sms_position_index++] = '0';
        outcoming_sms[u16_outcoming_long_sms_position_index++] = '0';
    }
    else if (u8_ttl == 2)
    {
        outcoming_sms[u16_outcoming_long_sms_position_index++] = 'A';
        outcoming_sms[u16_outcoming_long_sms_position_index++] = '7';
    }
    else 
    {
        outcoming_sms[u16_outcoming_long_sms_position_index++] = 'C';
        outcoming_sms[u16_outcoming_long_sms_position_index++] = '5';
    }
    
    
    //Поле TP- UDL - длина пользовательской чвасти сообщения в байтах, в шестнадцатеричном формате
    
    if (long_sms_current_wr_position_index › SHORT_SMS_MAX_LENGTH) //Для фрагмента составного сообщения
    {
        if (long_sms_length ›= LONG_SMS_MAX_PART_LENGTH)
        {
            u16_sms_bytes_count = SHORT_SMS_MAX_LENGTH ›› 1;
        }
        else
        {
            u16_sms_bytes_count = (long_sms_length ›› 1)+6;
        }
    }
    else                                                                                                                            //Для короткого сообщения
    {
        u16_sms_bytes_count = long_sms_length ›› 1;
    }

    add_u8hex_as_text((uint8_t)u16_sms_bytes_count);
    
    
    //Теперь помещаем в буфер отправки скомпонованный текст короткого сообщения, либо UDH+текст очередного фрагмента составного сообщения
    if (long_sms_current_wr_position_index › SHORT_SMS_MAX_LENGTH) //Для фрагмента составного сообщения
    {
        //Общая длина поля UDH 05, размер идентификатора 1 байт, длина данных инф. элемента 3 байта
        outcoming_sms[u16_outcoming_long_sms_position_index++] = '0';
        outcoming_sms[u16_outcoming_long_sms_position_index++] = '5';
        outcoming_sms[u16_outcoming_long_sms_position_index++] = '0';
        outcoming_sms[u16_outcoming_long_sms_position_index++] = '0';
        outcoming_sms[u16_outcoming_long_sms_position_index++] = '0';
        outcoming_sms[u16_outcoming_long_sms_position_index++] = '3';
        
        // Идентификатор составного сообщения 
        add_u8hex_as_text(u8_refnum);
        
        //Количество частей в сообщении
        u8_total_parts = long_sms_current_wr_position_index / LONG_SMS_MAX_PART_LENGTH;
        if (long_sms_current_wr_position_index % LONG_SMS_MAX_PART_LENGTH) u8_total_parts ++;

        add_u8hex_as_text(u8_total_parts);
        
        //Номер текущей части
        u8_current_part_number++;
        add_u8hex_as_text(u8_current_part_number);

        
        if (long_sms_length ›= LONG_SMS_MAX_PART_LENGTH)
        {
            for (u16_sms_bytes_count = 0; u16_sms_bytes_count ‹ LONG_SMS_MAX_PART_LENGTH; u16_sms_bytes_count++)
            {
                outcoming_sms[u16_outcoming_long_sms_position_index++] = long_sms_buffer[long_sms_current_rd_position_index++];
            }
            long_sms_length -= LONG_SMS_MAX_PART_LENGTH;
        }
        else
        {
            for (u16_sms_bytes_count = 0; u16_sms_bytes_count ‹ long_sms_length; u16_sms_bytes_count++)
            {
                outcoming_sms[u16_outcoming_long_sms_position_index++] = long_sms_buffer[long_sms_current_rd_position_index++];
            }
            long_sms_length = 0;
        }
    }
    else                                                                                                                            //Для простого сообщения
    {
        for (u16_sms_bytes_count = 0; u16_sms_bytes_count ‹ long_sms_length; u16_sms_bytes_count++)
        {
            outcoming_sms[u16_outcoming_long_sms_position_index++] = long_sms_buffer[u16_sms_bytes_count];
        }
        long_sms_length = 0;
    }
    
    
    //Подсчитываем общую длину пакета
  u16_tmp_length = ((u16_outcoming_long_sms_position_index-2) ›› 1);
  
    if (u16_tmp_length › 99)
  {
    ch_outcoming_sms_length_[u8_tmp_length_index++] = '0' + (u16_tmp_length / 100);
    u16_tmp_length %= 100;
    ch_outcoming_sms_length_[u8_tmp_length_index++] = '0' + (u16_tmp_length / 10);
  }
  else if (u16_tmp_length › 9)
  {
    ch_outcoming_sms_length_[u8_tmp_length_index++] = '0' + (u16_tmp_length / 10);
  }
  
    ch_outcoming_sms_length_[u8_tmp_length_index++] = '0' + u16_tmp_length%10;
  ch_outcoming_sms_length_[u8_tmp_length_index] = 0;
  
  outcoming_sms[u16_outcoming_long_sms_position_index++] = 0;
  outcoming_sms[u16_outcoming_long_sms_position_index] = 0;
} 

Последний раз редактировалось AR_Favorit; 11.02.2020 в 02:18.
AR_Favorit вне форума  
Непрочитано 11.02.2020, 02:08  
AR_Favorit
Почётный гражданин KAZUS.RUN
 
Регистрация: 13.03.2010
Сообщений: 2,896
Сказал спасибо: 498
Сказали Спасибо 3,061 раз(а) в 1,425 сообщении(ях)
AR_Favorit на пути к лучшему
По умолчанию Re: SIM900 в режиме PDU

СМС-центр не указываю

В настройке модема включается AT+CMGF=0 и AT+CSCS="UCS2"


в массиве outcoming_sms[] собирается весь текущий пакет
телефонный номер - в виде null-terminated строки символов phone_number[]
текст сообщения - преобразован заранее в юникод и записан в виде null-terminated строки символов long_sms_buffer[]
длина сообщения для команды AT+CMGS представлена в виде null-terminated строки символов ch_outcoming_sms_length_[]
Это процедура из рабочего устройства...

А вы в терминале модем пытаете или как?

Последний раз редактировалось AR_Favorit; 11.02.2020 в 02:25.
AR_Favorit вне форума  
Непрочитано 11.02.2020, 03:00  
DPANYTA
Прописка
 
Аватар для DPANYTA
 
Регистрация: 25.11.2008
Сообщений: 114
Сказал спасибо: 3
Сказали Спасибо 9 раз(а) в 9 сообщении(ях)
DPANYTA на пути к лучшему
По умолчанию Re: SIM900 в режиме PDU

Или как.
Атмегой.

Уточните. Что вы называете модемом. SIM900 или что другое.
Этот код работает именно с SIM900 ?

Последний раз редактировалось DPANYTA; 11.02.2020 в 07:35.
DPANYTA вне форума  
Непрочитано 11.02.2020, 09:42  
AR_Favorit
Почётный гражданин KAZUS.RUN
 
Регистрация: 13.03.2010
Сообщений: 2,896
Сказал спасибо: 498
Сказали Спасибо 3,061 раз(а) в 1,425 сообщении(ях)
AR_Favorit на пути к лучшему
По умолчанию Re: SIM900 в режиме PDU

Сообщение от DPANYTA Посмотреть сообщение
Или как.
Атмегой.

Уточните. Что вы называете модемом. SIM900 или что другое.
Этот код работает именно с SIM900 ?
Работает с SIM900, и с SIM800С...

Функция add_u8hex_as_text, вызываемая вышеприведённым кодом:

PHP код:
void add_u8hex_as_text (uint8_t u8_num)
{    
    if ((u8_num ›› 4) › 9 ) outcoming_sms[u16_outcoming_long_sms_position_index++] = 'A' + (u8_num ›› 4) - 10; else outcoming_sms[u16_outcoming_long_sms_position_index++] = '0' + (u8_num ›› 4);
    if ((u8_num & 0x0F) › 9 ) outcoming_sms[u16_outcoming_long_sms_position_index++] = 'A' + (u8_num & 0x0F) - 10; else outcoming_sms[u16_outcoming_long_sms_position_index++] = '0' + (u8_num & 0x0F);
} 

Последний раз редактировалось AR_Favorit; 11.02.2020 в 09:50.
AR_Favorit вне форума  
Непрочитано 11.02.2020, 10:43  
DPANYTA
Прописка
 
Аватар для DPANYTA
 
Регистрация: 25.11.2008
Сообщений: 114
Сказал спасибо: 3
Сказали Спасибо 9 раз(а) в 9 сообщении(ях)
DPANYTA на пути к лучшему
По умолчанию Re: SIM900 в режиме PDU

А можно код отправки смс полностью ?
DPANYTA вне форума  
Непрочитано 11.02.2020, 12:26  
AR_Favorit
Почётный гражданин KAZUS.RUN
 
Регистрация: 13.03.2010
Сообщений: 2,896
Сказал спасибо: 498
Сказали Спасибо 3,061 раз(а) в 1,425 сообщении(ях)
AR_Favorit на пути к лучшему
По умолчанию Re: SIM900 в режиме PDU

Увы. Это надо почти весь проект выложить, а он коммерческий...

но всё остальное по собственно отправке совсем просто
после формирования пакета в USART уходит
PHP код:
writestr ("AT+CMGS=");
writestr (ch_outcoming_sms_length_);
writestr ("\r"); 
после получения в ответ "›" отправляем в USART всё содержимое outcoming_sms[], и, когда весь пакет ушёл, туда же байт 0x1A

Последний раз редактировалось AR_Favorit; 11.02.2020 в 12:28.
AR_Favorit вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
FAQ (ЧаВО) по PROTEUS для начинающих и не только dosikus Proteus 221 07.03.2024 22:45
как прочитать сообщение по шине CAN режиме самопрослушки. retro55 ARM 11 21.06.2018 14:37
Прерывание от SSP в режиме SPI slave на PIC16F87* JekaKey PIC 2 14.11.2012 16:53
PDU режим отправки SMS serb-radio Микроконтроллеры, АЦП, память и т.д 6 31.12.2008 19:20
светодиоды в лавинном режиме Vovan12 Источники питания и свет 2 29.12.2005 15:11


Часовой пояс GMT +4, время: 10:54.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.