at发送短信 怎么没有状态报告?

时间:2022-02-27 08:55:08
我用AT指令通过手机的MODEN串口发送短信,成功,但没有状态报告。
我写的指令的 FirstOctet字段(包含TP-MTI(2bit),TP-RD(1bit),TP-VPF(2bit),TP-RP(1bit),TP-UDHI(1bit),TP-SRR(1bit)是0X11 :二进制表示形式:0 0 0 10 0 01

也就是需要短信的状态报告的,但是当短信发送出去,被对方手机接收到后,发送的手机上并没有收到状态报告,手机也没有上报什么数据?这是为什么,请高手指教?我需要通过收到状态报告后来判断短信发送成功与否.


//---------------------------------------------------------------------------------------------
下面是每一位的含义和取值:
TP-MTI:01
       TP-Message-Type-Indicator(消息类型指示符)
Bit1,0:01      指示为SMS-SUBMIT类型
TP-RD:0

TP-Reject-Duplicates(是否拒绝相同重复消息)

Bit2:0          指示短消息中心接受未转发的具有相同TP-MR的消息。

TP-VPF:10

       TP-Validity-Period-Format(有效期格式)

       Bit4,3:10      指示使用相对格式。

TP-SRR:0

       TP-Status-Report-Request

       Bit5:0          指示不使用状态报告。

TP-UDHI:0
       TP-User-Data-Header-Indicator(用户数据头标示)
       Bit6:0          指示这是一个SMS消息,没有用户数据头。EMS消息需要设置。

TP-RP:0
       TP-Reply-Path(回复路径)
       Bit7:0          指示没有设置回复路径。

5 个解决方案

#1


发送成功会返回ok
但这只意味短信到了短消息中心,不能判断对方是否收到短信。

#2


我记的好像是如果发送指令中指示使用状态报告,发送完成后,会收到一条来自消息中心的短信,告知是否发送成功,所以发送完以后,再AT+CMGR读取试试。(注意应该有延时)

#3


报告已经有了,在发送短信之前,要先发送一个指令进行设置.
String strCmd =  "AT+CNMI=2,1,2,2,1\r\n";
void *Cmd = (void*)(strCmd.c_str()); 
if(Port != NULL)  Port->WriteComm(Cmd, strCmd.Length());

而且消息报告是放在某个寄存器上的,好像只能存10条消息报告,之后的就收不到了.用指令清空也不行,只能重启手机才能继续收到报告,有点没太弄清楚是怎么回事...

谢谢二楼的提醒,后来我们也发现了,回复OK就到短信中心了,这个就意味着发送方手机是没问题的.
结贴,给分~~~

#4


谢谢 

#5


哈哈,学习了,谢谢啊

#1


发送成功会返回ok
但这只意味短信到了短消息中心,不能判断对方是否收到短信。

#2


我记的好像是如果发送指令中指示使用状态报告,发送完成后,会收到一条来自消息中心的短信,告知是否发送成功,所以发送完以后,再AT+CMGR读取试试。(注意应该有延时)

#3


报告已经有了,在发送短信之前,要先发送一个指令进行设置.
String strCmd =  "AT+CNMI=2,1,2,2,1\r\n";
void *Cmd = (void*)(strCmd.c_str()); 
if(Port != NULL)  Port->WriteComm(Cmd, strCmd.Length());

而且消息报告是放在某个寄存器上的,好像只能存10条消息报告,之后的就收不到了.用指令清空也不行,只能重启手机才能继续收到报告,有点没太弄清楚是怎么回事...

谢谢二楼的提醒,后来我们也发现了,回复OK就到短信中心了,这个就意味着发送方手机是没问题的.
结贴,给分~~~

#4


谢谢 

#5


哈哈,学习了,谢谢啊