PDU 发送短信3

2023-05-16

T指令收发短信主要有两种模式:Text模式和PDU(Protocol Data Unit,协议数据单元)模式。使用Text模式收发短信代码简单,很容易实现,最大缺点不支持中文短信。PDU模式不仅能发送中文短信,也能发送英文短信。PDU收发短信有三种编码可用:7-bit、8-bit和UCS2编码。7-bit编码用于发送普通的ASCII字符,即英文短信,最多可发送160字符。8- bit编码通常用于发送数据消息。UCS2编码用于发送Unicode字符,可发送中文字符,最多发送70字符。

短信发送实例:

Text模式(向号码为15050850677的手机发送“TEST”):

1: AT //发送AT 返回OK 连接成功
2:
3: OK
4:
5: AT+CMGF=1 //设置为Text模式
6:
7: AT+CMGS="15050850677" //发送指令,双引号内改为对用手机号码
8:
9: > TEST(+^z,十六进制的1A)//返回字符串中有OK 发送成功 >号为设备返回字符
PDU模式(向号码为15050850677的手机发送“你好”):

1: AT //发送AT 返回OK 连接成功
2:
3: OK
4:
5: AT+CMGF=0 //设置为PDU模式
6:
7: AT+CMGS=19 //发送指令,更改为对应PDU编码的长度计算方法在后面
8:
9: > 0011000D91685150800576F70008C4044F60597D(+^z,十六进制的1A)//返回字符串中有OK 发送成功
有的“猫”用“串口调试器”发送总是失败:Text模式接收到的是乱码,PDU模式发送不出去。我用的这个就是这个样子,给我郁闷了很多天,后来发现在串口调试器中我们摁下的“回车”被解析为”\r\n”,而我用的这个modem只有在只发送AT指令+”\r”时才能正确的发送短信。发现后发送短信都能成功,高兴了好一会儿。不说废话了,开始PDU短信编码的解析。这是我的理解,更多详细资料参考下列标准:
GSM 03.04 着重介绍短信发送中对字符集的控制部分
GSM 03.08
GSM 03.41
GSM 07.05 介绍 at 的一些控制命令
GSM 07.07 着重介绍 at 的短信相关命令,可以说是at的sms 规范

元素 名称 长度 描述
SCA Service Center Address 1-12 短消息服务中心号码
PDU-Type Protocol Data Unit 1 协议数据单元类型
MR Message Reference 1 所有成功的短信发送参考数目(0..255)
OA Originator Address 2-12 发送方地址(手机号码)
DA Destination Address 2-12 接收方地址(手机号码)
PID Protocol Identifer 1 参数显示消息中心以何种方式处理消息内容(比如FAX,Voice)
DCS Data Coding Scheme 1 参数显示用户数据编码方案
SCTS Service Center Time Stamp 7 消息中心收到消息时的时间戳
VP Validity Period 0,1,7 参数显示消息有效期
UDL User Data Lenghth 1 用户数据长度
UD User Data 0-140 用户数据
发送方PDU格式:

SCA PDU-Type MR DA PID DCS VP UDL UD
1-12 1 1 2-12 1 1 0,1,7 1 0-140
示例:

向15050850677发送一条短信,内容“Test”

0011000D91685150800576F70000C404D4F29C0E

向15050850677发送一条短信,内容“你好”

0011000B815150800576F70008C4044F60597D

SCA PDU-Type MR DA PID DCS VP UDL UD
1-12 1 1 2-12 1 1 0,1,7 1 0-140
00 11 00 0D91685150800576F7 00 00 C4 04 D4F29C0E
00 11 00 0B815150800576F7 00 08 C4 04 4F60597D
接收方PDU格式:

SCA PDU-Type OA PID DCS SCTS UDL UD
1-12 1 2-12 1 1 7 1 0-140
示例:

从15050850677接收一条短信,内容“Test”

0891683110402505F0240BA15150800576F700000111208160302304D4F2
9C0E

从15050850677接收一条短信,内容“你好”

0891683110402505F0240BA15150800576F7000801112081600423044F60
597D

SCA PDUType OA PID DCS SCTS UDL UD
1-12 1 2-12 1 1 7 1 0-140
0891683110402505F0 24 0BA15150800576F7 00 00 01112081603023 04 D4F29C0E
0891683110402505F0 24 0BA15150800576F7 00 08 01112081600423 04 4F60597D
SCA:短消息服务中心地址格式

服务中心地址包含三个部分:1-12个8位位组 第一个位组指示服务中心地址长度,第二个位组指示服务中心类型,第三个位组为服务中心地址。

示例:0891683110402505F0

Lenghth Type Address
08 91 683110402505F0
Lenghth:服务中心地址长度 指示Type+Address部分位组长度(例中:91683110402505F0中位组8个:08)
如果Lenghth部分为“00”则不提供后面部分,发送时终端将自动从SIM卡中读取并填充SCA

Type:短信中心地址的类型(81:指国内的号码 91:指国际的号码 91最常用(资料里都说是这样,但根据后面的表格:国内应该是A1,81是未知!!))91H=10010001B 具体意义如下表:

BIT No. 7 6 5 4 3 2 1 0
1 类型 类型 类型 号码鉴别 同3 同3 同3
类型:000-未知 001-国际 010-国内 111-留作扩展

号码鉴别:0000-未知 0001-ISDN/电话号码(E.164/E.163) 1111-留作扩展

SCA示例:

短信中心 PDU编码
+8613010452500 0891683110402505F0
13010452500 07813110402505F0
123456 0481214365
注:AT指令中 AT+CMGS= Len不包含此段位组的长度

PDU Type:是发送和接受短信的PDU中的第一个8位位组

发送方:例 11h=00010001b

Bit No. 7 6 5 4 3 2 1 0
RP UDHI SRR VPF VPF RD MTI MTI
0 0 0 1 0 0 0 1
接收方:例 24h=00100100b

Bit No. 7 6 5 4 3 2 1 0
RP UDHI SRI MMS MTI MTI
0 0 1 0 0 1 0 0
RP:应答路径,
0-未设置
1-设置

UDHI:用户数据头标识(User Data Header Indicator),
0-用户数据(UD)部分不包含头信息
1-用户数据(UD)开始部分包含用户头信息

SRR:请求状态报告(Status Report Request),
0-不需要报告
1-需要报告

SRI:状态报告指示(Status Report Indication),此值仅被短消息服务中心设置,
0-状态报告将不会返回给短消息实体(SME)
1-状态报告将返回给短消息实体(SME)

VPF:有效期格式(Validity Period Format),
00-VP段没有提供(长度为0)
01-保留
10-VP段以整型形式提供(相对的)
11-VP段以8位位组的一半形式提供(绝对的)

RD:拒绝复本(Reject Duplicate)
0-通知短消息服务中心(SMSC)接受一个消息(SMS-SUBMIT),即该消息是先前已提交过的,并还存在与SMSC中未发送出去。MS重复的条件是:消息参考(MR)、接收方地址(DA)及发送方地址(OA)相同
1-通知SMSC拒绝一个重复的SMS

MMS:有更多的消息需要发送(More Message to Send),此值仅被SMSC设置
0-在SMSC中有更多的信息等待MS
1-在SMSC中没有更多的信息等待MS

MTI:信息类型指示(Message Type Indicator)
不太理解 有待于再查资料

MR:信息参考 不太理解 置为00即可

DA/OA:接收方与发送方地址

DA与OA编码方式是一样的 2-12个8位位组

例:0D91685150800576F7

Lenghth Type Address
0D 91 685150800576F7
Lenghth:地址长度 指8615050850677的长度。与SCA中不一样!
Type:地址类型 指示国内(81) 还是国际(91)

示例:

号码 PDU编码
+8615050850677 0D91685150800576F7
15050850677 0B815150800576F7
123456 0681214365
PID:协议标识(Protocol Identifier)

对于标准情况下的MS-to-SC短消息传送,只需设置PID为00

DCS:数据编码方案(DataCoding Scheme)

Bit No. 7 6 5 4 3 2 1 0 描述
示例: 0 0 0 0 0 0 0 0 00h 7bit数据编码 默认字符集
1 1 1 1 0 1 1 0 F6h 8bit数据编码 Class1
0 0 0 0 1 0 0 0 08h USC2(16bit)双字节字符集
Bit No.7与Bit No.6:
一般设置为00

Bit No.5:
0-文本未压缩
1-文本用GSM标准压缩算法压缩

Bit No.4:
0-指示Bit No.1 Bit No.0为保留位,不含信息类型信息
1-指示Bit No.1 Bit No.0含信息类型信息

Bit No.3与Bit No.2:
00-默认的字符集,每字符占7bit,此时最大可发送160字符
01-8bit,此时最大可发送140字符
10-USC2(16bit),发送双字节字符集
11-预留

Bit N0.1与Bit No.0:
00-Class 0,短消息直接显示在屏幕上
01-Class 1,
10-Class 2(SIM卡特定信息),
11-Class 3

示例:

DCS 字符集 信息Class
00 7-bit No Class
F0 7-bit Class 0(Immediate Display)
F1 7-bit Class 1(Mobile Equipment-specific)
F2 7-bit Class 2(SIM specific Message)
F3 7-bit Class 3(Terminate Equipment-specific)
F4 8-bit Class 0(Immediate Display)
F5 8-bit Class 1(Mobile Equipment-specific)
F6 8-bit Class 2(SIM specific Message)
F7 8-bit Class 3(Terminate Equipment-specific)
08 16-bit No Class
18 16-bit Class 0(Immediate Display)
VP:信息有效期(Validity Period)

第一种情况(相对的):VPF=10 VP=AAH(四天)

第二种情况(绝对的):VPF=11

年 月 日 时 分 秒 时区
30 80 02 90 54 33 20
表示:03-08-20 09:45:33

VP段以整形或半个8位位组形式提供

第一种情况,VP为一个8位组,给定有效期的长度
从消息被SMSC接收开始计算

VP 相应的有效期
00-8F (VP+1)5分钟 从5分钟间隔到12小时
90-A7 12小时+(VF-143)
30分钟
A8-C4 (VP-166)1天
C5-FF (VP-192)
1周
第二种情况,VP为七个8位组,给定有效期终止的绝对时间 时间形式与SCTS形式一致

SCTS:服务中心时间戳(Service Center Time Stamp)

占用7个8位组,格式和VP第二种情况一致,请参考其中的表格

UDL:用户数据长度(User Data Lenghth)

UDL以整形形式提供,指示后面用户数据段的长度(UD的8位组的个数)

UD:用户数据(User Data)

英文编码:7bit编码,依次将下一位的后几位移至前面形成新的8位编码
示例:Test
T:01010100 e:01100101 s:01110011 t:01110100
去最高位0,变为7位
T:1010100 e:1100101 s:1110011 t:1110100
后面低位移至前面形成8位编码
Test:11010100111100101001110000001110
UD:D4F29C0E UDL:04

中文编码:取USC2编码 高低字节交换即可

注意:7bit编码的UDL部分计算的是编码前的字符串长度,而不是编码后的8位组个数!

注:AT+CMGS=中Len为出SCA外8位组的个数

转载于:https://www.cnblogs.com/Dennis-mi/articles/10713870.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PDU 发送短信3 的相关文章

  • 四旋翼无人机调试时,电机滴滴滴响问题及解决办法汇总

    机型 xff1a 大疆450的机架 xff08 我太喜欢这个机架了 xff0c 可以不装腿儿 xff0c 不容易摔坏 xff09 电机 xff1a T motor的air系列 电调 xff1a 好盈的x系列 飞控 xff1a px4 插上电
  • 智能车模块详解——按键及按键调参

    同以往文章一样 xff0c 会附上几个讲理论的优质博客链接 xff0c 本文重点讲怎么用代码实现 按键 xff1a lcd showint8 0 0 P37 p37接一个按键 xff0c 按键没按下显示0 xff0c 按下显示1 xff1b
  • Nginx配置反向代理解决跨域问题

    通过Nginx配置反向代理结果跨域问题 第一步 xff1a 下载Nginx 一 下载 官网下载地址 xff1a http nginx org en download html 我下载的版本 xff1a http nginx org down
  • C++笔试试题讲解(~~~可能是全站唯独一份有解析的~~~)

    C 43 43 笔试题讲解 前言一 面向对象程序概论基本理论笔试题 二 从C到C 43 43 基本理论笔试题 三 类与对象基本理论笔试题 四 继承机制基本理论笔试题 五 多态性和虚函数基本理论笔试题 六 运算符重载基本理论笔试题 七 模板基
  • Linux C/C++ 学习路线(已拿腾讯、百度等)

    Linux C C 从零基础到入门 到熟悉的一些路线 xff0c 对于想走这个方向的同学 xff0c 可以认真看看 xff0c 分享到这里来 xff0c 希望对于正在走 Linux C C 路上的同学能有所帮助 我将大致按照以下的目录 xf
  • python架构之Django学习------基础篇一

    学习环境 xff1a ubuntu16 0 4 1 创建虚拟环境 mkvirtualenv test test为虚拟环境名称 2 删除虚拟环境 rmvirtualenv 3 在制定的虚拟环境上工作 workon test 4 退出虚拟环境
  • 无人机取证——飞行日志分析取证

    前言 随着科技发展日新月异 xff0c 利用无人机犯罪的途径和案例越来越多 xff0c 无人机除了拍照录像的用途外 xff0c 亦可能被有心人士用于运送违法物品等不法行为 xff0c 甚至 xff0c 若是绑上自制炸弹 xff0c 刻意飞去
  • 树莓派4B(4G/8G)安装Ubuntu18.04桌面版+ROS(Melodic)+Realsense SDK(T265+D400系列)

    文章目录 前言一 下载安装树莓派4B镜像 xff08 Ubuntu mate 18 04 xff09 1 树莓派4B服务器镜像2 准备物品3 镜像烧录4 安装桌面基础软件5 为了防止树莓派内存不够 xff0c 需要增加交换空间 xff0c
  • C++程序员这行能干一辈子吗?

    有人说 xff0c 程序员这一行就是吃青春饭 xff0c 不能干一辈子 xff0c 因为程序员面对的是一份高强度的工作 xff0c 同时面临着技术的快速迭代 xff0c 对于身体素质 学习能力等都有很高的要求 xff0c 所以很多人都面临入
  • 学习记录--PID(角度双环)

    一 xff0c 理论理解 参考 xff1a 从不懂到会用 xff01 PID从理论到实践 哔哩哔哩 bilibili 1 三个参数 Kp xff1a 比例系数 xff1a pid gt p out 61 pid gt kp pid gt e
  • FreeRTOS多任务调度器原理

    1 xff1a 多任务启动 1 xff1a 创建空闲任务 2 xff1a 配置SysTick和PendSV为最低优先级 3 xff1a 配置SysTick寄存器 4 xff1a 调用SVC中断 2 xff1a SVC业务流程 1 xff1a
  • 立创EDA使用教程

    1 xff1a 绘制原理图 1 1 放置元件 立创EDA可以在线编辑 xff0c 不同于AD和PADS需要自己绘制或者导入封装 立创可以直接在线拉取别人的封装过来使用 xff0c 当然也可以自己绘制 1 2添加导线和网络 W是连线 xff0
  • ubuntu电脑共享文件夹给另一台windows电脑

    1 xff1a 安装samba工具 sudo apt get install samba samba version 2 xff1a 配置共享文件夹路径 vi etc samba smb conf 在文件末尾添加 share comment
  • FreeRTOS 学习(一)

    一 使用FreeRTOS点亮LED灯 在STM32有一定基础 xff0c 在开始学习操作系统的小白 xff0c 介绍使用STM32用操作系统点亮第一盏灯 xff0c 这也是学习单片机最开始的地方 xff1b 下面来图文配置 xff0c 我这
  • FreeRTOS的启动流程,编码风格与调试方法

    一 启动流程 RTOS主要有两种比较流行的启动方式 xff0c 下面会通过伪代码讲解两种启动方式的区别 xff0c 然后看看STM32cubeMX集成的FreeRTOS采用哪种启动方式 1 方法一 xff1a 在main函数中将硬件初始化
  • 2021AIOps挑战赛|基于移动通信网络运维中的多指标时空序列预测

    2021国际AIOps挑战赛决赛暨AIOps创新高峰论坛于2021年5月13日在北京成功举行 本文根据中国移动研究院首席科学家 人工智能与智慧运营中心总经理冯俊兰博士现场发言纪要整理而成 演讲内容 各位领导 xff0c 各位老师 xff0c
  • python架构之Django学习------基础篇二

    学习环境 xff1a ubuntu16 0 4 1 创建项目 django admin startproject studypy studypy为项目名称 注意 xff1a 项目创建完成之后 xff0c 会有一个文件夹和项目名称一样 xff
  • VNC配置端口占用

    问题描述 xff1a 配置VNC环境时 执行systemctl配置端口发现有些端口被占用 systemctl status vncserver span class token operator span user 64 span clas
  • SNMP概述

    目录 SNMP的架构 SNMP的版本 SNMPv1 v2c 报文结构 操作类型 工作原理 SNMPv3 报文结构 SNMPv3体系结构 工作原理 用户组和用户名 SNMP的配置 基本配置 v2c配置 SNMPv3配置 xff08 USM用户
  • (18)ROS学习-TF坐标变换之静态坐标变换

    1 坐标msg消息 xff1a 订阅发布模型中数据载体 msg 是一个重要实现 xff0c 首先需要了解一下 xff0c 在坐标转换实现中常用的 msg geometry msgs TransformStamped和geometry msg

随机推荐

  • CentOS8.4 Samba服务配置

    目录 Samba服务简介 基本操作 Samba服务主配置文件 全局配置参数 局部配置参数 题一 创建共享资源 创建系统用户组和系统用户并查看 对系统用户设置Samba密码 查看已设置Samba密码的用户 建立共享资源目录并分配权限 修改主配
  • X86汇编语言从实模式到保护模式(Linux环境搭建)

    前言 在学完了计算机组成原理和王爽的汇编语言后 xff0c 虽然操作系统的理论知识能看懂了 xff0c 但做起xv6和ucore实验还是有一定难度 xff0c 所以还是得补一补x86汇编的知识 环境搭建 xff1a 因为书中的工具包和环境都
  • 【机器学习】二分类算法实现及算法精度比较

    文章目录 一 数据集选择1 感知机2 K近邻 xff08 knn xff09 3 朴素贝叶斯4 决策树id35 逻辑斯蒂回归总结 一 数据集选择 鸢尾花数据集 iris data Iris数据集是常用的分类实验数据集 xff0c 由Fish
  • OpenStack实战

    开源OpenStack实战 公有云 一个用户就是一个VPC虚拟私有云 在同一个VPC中的不同子网可以互通 不同VPC之间不能互通 一个VPC 就属于regin一个路由器 VPC不可以跨Regin 两个租户是不可以打通的 Regin xff1
  • VScode怎样从gitee上拉取项目?很简单,赶快学起来

    1 xff0c 在你写项目的磁盘里新建文件夹 2 xff0c 登录Gitee 3 xff0c 复制克隆 下载处的地址 4 xff0c 打开VScode xff0c 在新建的文件夹下 xff0c 打开终端 5 xff0c 运行 git clo
  • 《操作系统》-进程的定义组成和特征

    进程的定义组成和特征 进程的定义 程序 xff1a 就是一个指令序列 早期的计算机只支持单道程序 引用多道程序技术 xff1a 为了方便操作系统管理完成各程序并发执行 xff0c 引入了进程和进程实体的概念 进程实体 xff08 进程映像
  • 【完整教程】在win10平台下使用d435i深度相机读取数据并保存到本地,以便进行后续3D点云处理

    1 下载RealSense SDK 2 0 进入网址 xff1a RealSense SDK 2 0 直接拉到网站最下端 xff0c 在Asset下可以看到很多exe可执行软件 xff0c 由于我的电脑是win10 xff0c 所以选择第三
  • python架构之Django学习(管理站点)------基础篇三

    学习环境 xff1a ubuntu16 0 4 1 创建管理员 http 127 0 0 1 8000 admin python manage py createsuperuser 创建用户名密码 注册
  • VMware虚拟机安装Linux教程(超详细)

    一 安装 VMware 官方正版VMware下载 xff08 16 pro xff09 xff1a https www aliyundrive com s wF66w8kW9ac 下载Linux系统镜像 xff08 阿里云盘不限速 xff0
  • WIFI模块——ESP8266

    1 ESP8266简介 ESP8266是一款高性能的WIFI串口模块 xff0c 内部集成MCU能实现单片机之间串口通信 xff0c 是目前使用最广泛的一种WIFI模块之一 可以简单理解为一个WIFI转串口的设备 xff0c 不用知道太多W
  • 姿态传感器——MPU6050

    1 MPU6050介绍 MPU6050是由三个陀螺仪和三个加速度传感器组成的6轴运动处理组件 xff0c 是一款六轴 xff08 三轴加速度 43 三轴角速度 xff08 陀螺仪 xff09 xff09 传感器 内部主要结构 陀螺仪 加速度
  • Arch | Nodejs 配置

    今天在使用 npm 时出现了一些错误 xff0c 之前那个文章内容有点多 xff0c 找起来比较麻烦 xff0c 所以这里单独把一些软件的配置单独拉出来写一个文章 参考 ArchWiki Node js 安装 如果没有多版本需求的话 xff
  • 基于I2C协议利用STM32进行温湿度传感器的数据采集

    目录 一 I2C总线通信协议的介绍1 I2C简介2 I2C总线时序图3 五种速率4 四种信号5 I2C的优缺点6 软件IIC和硬件IIC 二 创建工程1 实验目的2 工具的选择3 相关代码分析 三 线路的连接四 结果实现五 总结参考文献 一
  • 海康嵌入式软件面试经验(已拿offer)

    本科双非 xff0c 计算机类专业学渣 xff0c 0实习经历 xff0c 复习考研的时候学了一遍408 xff0c 强化阶段学的心态崩了就边复习边投简历 xff0c 之前投了好几次体面厂的测试岗都没进面试 xff0c 投开发岗反而进了 7
  • 前端浏览器渲染原理及优化

    文章目录 一 浏览器组成1 对浏览器内核的理解2 浏览器的主要组成部分 二 浏览器渲染原理1 浏览器的渲染过程步骤一 xff1a 步骤二 xff1a 步骤三 xff1a 步骤四 xff1a 步骤五 xff1a 2 相关概念 重排 更新元素的
  • Docker+github actions部署前端项目

    Docker 43 github actions部署前端项目 文章目录 Docker 43 github actions部署前端项目前言1 Docker相关文件配置2 创建自己的dokcer hub仓库3 yml文件配置 前言 在进行本篇实
  • pytorch可视化之:可视化网络结构+CNN可视化+TensorBorad使用

    Pytorch学习第五部分 xff1a pytorch可视化 Let 39 s go 一 可视化网络结构1 1 Resnet18结构1 2 使用torchinfo可视化网络结构1 2 1 torchinfo安装1 2 2 torchinfo
  • spring中用到的设计模式及应用场景

    spring中用到的设计模式及应用场景 1 工厂模式 xff1a 在Beanfactory和applicationContext创建中都用到了 2 单例模式 xff1a Bean默认就是单例模式 单例模式只允许创建一个对象 xff0c 获取
  • python架构之Django学习------流程总结

    python架构之Django学习 一 二 三 开发流程 xff1a step1 创建虚拟环境 mkvirtrualenv step2 安装django pip install django step3 创建项目 python manage
  • PDU 发送短信3

    T指令收发短信主要有两种模式 xff1a Text模式和PDU xff08 Protocol Data Unit xff0c 协议数据单元 xff09 模式 使用Text模式收发短信代码简单 xff0c 很容易实现 xff0c 最大缺点不支