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

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

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

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

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

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

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

 
Опции темы
Непрочитано 10.02.2020, 02:10  
DPANYTA
Прописка
 
Аватар для DPANYTA
 
Регистрация: 25.11.2008
Сообщений: 100
Сказал спасибо: 2
Сказали Спасибо 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.RU
 
Регистрация: 13.03.2010
Сообщений: 2,886
Сказал спасибо: 489
Сказали Спасибо 3,033 раз(а) в 1,412 сообщении(ях)
AR_Favorit на пути к лучшему
По умолчанию Re: SIM900 в режиме PDU

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

AT+CSCS="UCS2"
AR_Favorit вне форума  
Непрочитано 11.02.2020, 01:48  
DPANYTA
Прописка
 
Аватар для DPANYTA
 
Регистрация: 25.11.2008
Сообщений: 100
Сказал спасибо: 2
Сказали Спасибо 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.RU
 
Регистрация: 13.03.2010
Сообщений: 2,886
Сказал спасибо: 489
Сказали Спасибо 3,033 раз(а) в 1,412 сообщении(ях)
AR_Favorit на пути к лучшему
По умолчанию Re: SIM900 в режиме PDU

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

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

PHP код:
void long_sms_compose(charphone_numberuint8_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_LENGTHu8_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 0u16_sms_bytes_count ‹ LONG_SMS_MAX_PART_LENGTHu16_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 0u16_sms_bytes_count ‹ long_sms_lengthu16_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 0u16_sms_bytes_count ‹ long_sms_lengthu16_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.RU
 
Регистрация: 13.03.2010
Сообщений: 2,886
Сказал спасибо: 489
Сказали Спасибо 3,033 раз(а) в 1,412 сообщении(ях)
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
Сообщений: 100
Сказал спасибо: 2
Сказали Спасибо 9 раз(а) в 9 сообщении(ях)
DPANYTA на пути к лучшему
По умолчанию Re: SIM900 в режиме PDU

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

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

Последний раз редактировалось DPANYTA; 11.02.2020 в 07:35.
DPANYTA вне форума  
Непрочитано 11.02.2020, 09:42  
AR_Favorit
Почётный гражданин KAZUS.RU
 
Регистрация: 13.03.2010
Сообщений: 2,886
Сказал спасибо: 489
Сказали Спасибо 3,033 раз(а) в 1,412 сообщении(ях)
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) › 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) › 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
Сообщений: 100
Сказал спасибо: 2
Сказали Спасибо 9 раз(а) в 9 сообщении(ях)
DPANYTA на пути к лучшему
По умолчанию Re: SIM900 в режиме PDU

А можно код отправки смс полностью ?
DPANYTA вне форума  
Непрочитано 11.02.2020, 12:26  
AR_Favorit
Почётный гражданин KAZUS.RU
 
Регистрация: 13.03.2010
Сообщений: 2,886
Сказал спасибо: 489
Сказали Спасибо 3,033 раз(а) в 1,412 сообщении(ях)
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 179 25.11.2019 22:57
как прочитать сообщение по шине 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, время: 02:27.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd. Перевод: zCarot