Отправка SMS на русском языке с помощью GSM-модулей Neoway

№ 4’2014
PDF версия
В охранных, мониторинговых, развлекательных и других M2M-приложениях часто требуется обеспечить отправку информационных SMS-сообщений на телефоны пользователей. При этом в пределах Российской Федерации предпочтение, безусловно, отдается системам, обеспечивающим отправку сообщений на русском языке и кириллическими символами. В данной статье рассматривается вопрос отправки кириллических SMS-сообщений при использовании GSM-модулей Neoway.

Выбор GSM-модулей Neoway в качестве модема обусловлен несколькими причинами: высоким качеством при низкой стоимости модулей и максимальным удобством монтажа, которое обеспечивается небольшим количеством выводов и корпусом LCC. Производитель Neoway Technology зарекомендовал себя на российском рынке как надежный поставщик и ответственный партнер. Официальным дистрибьютором компании Neoway в России является компания «ЭФО».

GSM-модули Neoway предусматривают два режима отправки SMS-сообщений: текстовый и PDU (Packet Data Unit). В текстовом режиме возможна отправка сообщений, содержащих только латинские буквы, цифры и символы. Для отправки SMS с кириллическими символами необходимо использовать режим PDU.

Переключение режимов передачи SMS осуществляется командой AT+CMGF:

AT+CMGF=0 — включение режима PDU;

AT+CMGF=1 — включение текстового режима.

В режиме PDU SMS представляет собой набор данных, передаваемых модулю в виде символов ASCII.

Рассмотрим формат посылаемого SMS-сообщения и последовательность команд, подаваемых на GSM-модуль. Для примера сформируем пакет PDU SMS-сообщения, отправляемого на номер +70123456789 и содержащего слово «Привет!».

 

Формат передаваемого SMS-сообщения в режиме PDU

Формат передаваемого SMS представлен на рис. 1.

Формат передаваемого SMS-сообщения в режиме PDU

Рис. 1. Формат передаваемого SMS-сообщения в режиме PDU

Краткое описание полей передаваемого SMS приведено в таблице 1.

Таблица 1. Описание полей пакета PDU передаваемого SMS

Название поля PDU

Длина, байт

Краткое описание

SCA — Service Center Address

1–12

Номер телефона Центра SMS (может не указываться)

PDU Type

1

Тип PDU

MR — Message Reference

1

Порядковый номер сообщения, устанавливаемый самим модулем

DA — Destination Address

2–12

Номер телефона получателя сообщения

PID — Protocol Identifier

1

Идентификатор протокола

DCS — Data Coding Scheme

1

Кодировка сообщения

VP — Validity Period

0,1 или 7

Время жизни SMS

UDL — User Data Length

1

Длина поля User Data в байтах

UD — User Data

0–140

Сообщение

Рассмотрим назначение отдельных полей пакета PDU передаваемого сообщения.

  • SCA (Service Center Address) — номертелефонаЦентраSMS (SMSC).

Данное поле не является обязательным, так как номер SMSC хранится на SIM-карте и считывается GSM-модулями Neoway автоматически. Воспользуемся данной возможностью и не будем указывать номер Центра SMS в нашем примере, тем более что в этом случае содержимое PDU не зависит от используемой SIM-карты. Если номер SMSC в PDU не указывается, поле SCA принимает значение 00h.

Если потребуется считать номер Центра SMS из GSM-модуля, это можно сделать с помощью команды AT+CSCA?

  • PDU Type — тип PDU.

–          RP (Reply Path):

         0 — путь для ответа не определен;

         1 — путь для ответа определен, используется тот же Центр SMS (SMSC).

–          UDHI (User Data Header Included):

            0 — поле UD содержит только само сообщение;

            1 — поле UD содержит сообщение и дополнительный заголовок.

–          SRR (Status Report Request):

            0 — статус сообщения не запрашивается;

            1 — статус сообщения запрашивается.

–          VPF (Validity Period Format):

            00 — поле VP отсутствует;

            01 — зарезервировано;

            10 — поле VP содержит временные данные в относительном формате;

            11 — поле VP содержит временные данные в абсолютном формате.

–          RD (Reject Duplicates):

            0 — SMSC следует переслать сообщение получателю в случае, если оно имеет те же значения полей MR и DA, что и предыдущее сообщение;

            1 — SMSC следует отклонить сообщение в случае, если оно имеет те же значения полей MR и DA, что и предыдущее сообщение.

–          MTI (Message Type Indicator):

            00 — принимаемое сообщение (от SMSC к модулю) или подтверждение приема
(от модуля к SMSC);

            01 — отправляемое сообщение (от модуля к SMSC) или подтверждение отправки (от SMSC к модулю);

            10 — отчет о доставке (от SMSC к модулю) или SMS-команда (от модуля к SMSC);

            11 — зарезервировано.

На рис. 2 представлены биты поля PDU Type в случае отправляемого SMS.

Поле PDU Type

Рис. 2. Поле PDU Type

Для упрощения нашего примера условимся не использовать поле VP (время жизни SMS) и установим биты VPF в нулевое значение. Также в нулевое значение установим биты RP, UDHI, SRR, RD. Биты MTI отправляемого сообщения необходимо установить в значение 01. Таким образом значение байта поля PDU Type принимаем равным 01h.

  • MR (Message Reference) — порядковый номер сообщения, определяется самим модулем. В PDU значение поля устанавливается равным 00h.
  • DA (Destination Address) — номер телефона получателя сообщения.

Поле DA состоит из трех частей, представленных в таблице 2.

Таблица 2. Поле DA пакета UDP

Количество цифр в номере получателя

Тип номера получателя

Номер получателя

1 байт

1 байт

0–6 байт

–          Количество цифр в номере получателя подсчитывается без учета знака «+» и представляется в шестнадцатеричном формате. Например, для номера +70123456789 значение байта «Количество цифр в номере получателя» равняется 0Bh (11 в десятичной системе счисления).

–          Тип номера получателя.

В случае международного формата номера байт «Тип номера получателя» устанавливается равным 91h, в случае местного формата — 81h.

–          Номер получателя.

Поле «Номер получателя» формируется следующим образом: а) в случае международного формата номера знак «+» отбрасывается; б) если количество цифр в номере нечетное, в конце добавляется «F»; в) цифры номера попарно переставляются местами.

Например, для номера +70123456789 поле «Номер получателя» будет иметь вид: 0721436587F9h, а целиком поле DA — 0B910721436587F9h.

  • PID (Protocol Identifier) — идентификатор протокола.

В нашем случае значение поля PID необходимо устанавливать в значение 00h. Подробнее об особенностях данного поля можно прочитать в ETSI GSM 03.40, пункт 9.2.3.9.

  • DCS (Data Coding Scheme) — кодировка сообщения.

Для отправки сообщений кириллическими символами необходимо использовать кодировку UCS2. Поэтому значение поля DCS в нашем случае следует установить равным 08h (обычное SMS) или 18h (flash-SMS, которое сразу выводится на экран телефона вместо сохранения в памяти).

  • VP (Validity Period) — время жизни сообщения.

Время жизни сообщения — время, по истечении которого сообщение уничтожается (стирается из памяти SMSC), если не было доставлено адресату.

Это поле связано с битами VPF поля PDU Type, существует три варианта их совместного использования.

–          Поле VP не используется.

В этом случае длина поля VP — 0 байт, биты VPF должны быть установлены в значение 00.

–          Поле VP содержит данные о времени жизни в относительном формате.

В этом случае длина поля VP — 1 байт, биты VPF должны быть установлены в значение 10 (в двоичной системе).

Возможные значения поля VP в случае использования относительного формата времени и формулы для расчета соответствующего времени жизни сообщения приведены в таблице 3.

Таблица 3. Время жизни SMS при использовании относительного формата времени

Значение VP шестнадцатеричное

Значение VP десятичное

Соответствующее значению VP время

Максимальное время жизни

1…8F

0…143

(VP + 1) × 5 минут

12 часов

90…A7

144…167

12 часов + (VP — 143) × 30 минут

24 часа

A8…C4

168…196

(VP — 166) ×1 день

30 дней

C5…FF

197…255

(VP — 192) × 1 неделю

63 недели

–          Поле VP содержит данные о времени жизни в абсолютном формате.

В этом случае длина поля VP — 7 байт, биты VPF должны быть установлены в значение 11 (в двоичной системе).

Назначение байт в поле VP при использовании абсолютного формата времени приведено в таблице 4.

Таблица 4. Поле VP при использовании абсолютного формата времени

Байт 1

Байт 2

Байт 3

Байт 4

Байт 5

Байт 6

Байт 7

Год

Месяц

День

Час

Минуты

Секунды

Часовой пояс

При этом каждый байт содержит по два десятичных числа, переставленных местами. Например, байт 2 в случае месяца мая будет иметь значение 50h.

Год представлен последними двумя цифрами.

Часовой пояс указывает разницу между местным временем и временем по Гринвичу (GMT), выраженную в четвертях часа. При этом первый бит указывает знак этой разницы: 0 — разница положительная, 1 — разница отрицательная. То есть байт 7 в случае часового пояса GMT+3 будет иметь значение 21h.

Ранее мы условились в целях упрощения не использовать поле VP в нашем примере и установили два бита VPF поля PDU Type в значение 00 (поле VP отсутствует). Поэтому в пакете PDU нашего примера данное поле будет отсутствовать.

  • UDL (User Data Length) — длина поля UD в байтах.

При использовании интересующей нас кодировки UCS2 значение поля UDL можно вычислить, умножив количество символов в передаваемом сообщении на 2 (каждый символ кодируется двумя байтами). Для сообщения «Привет!» значение поля UDL равно 0Eh (14 в десятичной системе счисления).

  • UD (User Data) — сообщение.

Для отправки сообщения кириллицей необходимо использовать кодировку UCS2, в этой кодировке каждая буква или символ кодируется двумя байтами. Кодировка UCS2 представлена на рис. 3.

Таблица кодировки UCS2

Рис. 3. Таблица кодировки UCS2

Сообщение «Привет!» в кодировке UCS2 имеет вид:

П — 041F

р — 0440

и — 0438

в — 0432

е — 0435

т — 0442

! — 0021

Привет! — 041F044004380432043504420021

Процесс отправки SMS-сообщения GSM-модулем Neoway

Процесс отправки SMS в режиме PDU состоит из следующих шагов:

  • Включение режима PDU:
AT+CMGF=0
  • Ввод команды отправки SMS с указанием количества байт в пакете PDU за исключением поля SCA.

В случае сообщения «Привет!» эта величина — 27:

AT+CMGS=27 

Важно, чтобы эта команда завершалась символом ‘\r’ (0Dh), а не чем-то другим. После этого модуль выдает приглашение ‘>’ ввести данные пакета PDU.

  • Ввод данных пакета PDU.

В случае сообщения «Привет!» они выглядят так:

0001000B91хххххххххххх00080E041F044004380432043504420021 (в текстовом виде),

где хххххххххххх — поле номера получателя, у которого переставлены местами цифры и добавлен символ «F» на конце в случае нечетного количества цифр в номере.

Для номера +70123456789 поле номера получателя будет иметь вид: 0721436587F9, а весь пакет PDU с сообщением «Привет!», отправляемый на данный номер:

0001000B910721436587F900080E041F044004380432043504420021

Ввод данных пакета PDU должен заканчиваться байтом 1Ah.

В случае успешной отправки SMS-сообщения ответ модуля имеет вид:

+CMGS: <Message Reference>

OK,

где «Message Reference» — порядковый номер сообщения, установленный модулем (см. описание поля MR пакета PDU).

 

Заключение

При отправке SMS применение режима PDU позволяет не только использовать в сообщении кириллические символы, но и управлять множеством параметров самого сообщения, что может оказаться полезным для части M2M-приложений.

Применение GSM-модулей Neoway в телеметрических приложениях предоставляет возможность снизить стоимость устройств, повысить надежность, упростить процессы производства оборудования и его последующего обслуживания.

Литература
  1. Neoway_M660_AT_Command_Set_V3_9
  2. ETSI GSM Technical Specification GSM 03.40
  3. wless.ru

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *