4699|9

62

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

3G模块短信发送问题 [复制链接]

使用的3G模块为华为的EM730WCDMA模块,自己改了个短信发送程序,通过对串口发送AT指令实现,运行结果如下:
~ $ ./send
the sms is sending........

AAT+CMGS=?

OK
ATE1

OK

AT+CSQ

+CSQ: 22,99

OK

AT+CMGF=0
OK

AT+CMGS=41
>
0891685118683343f811000D91685129562904F

短信格式为PDU。
手机也没收到任何信息,请问这是怎么回事?谢谢

最新回复

感谢各位关注,现在短信能够发出。问题出在PDU格式结构有误,最后应该加上“CTRL+Z”,即“\x01a”,原来写成“\x1a"; char     pdu[] =         "0891683110808805F011000D91685198367879F60000000BE8329BFD06DDDF723619\x01a"; 现在还有点问题,就是我这里接收方的电话号码是在上面pdu变量中设置的, 现在我需要针对不同的接收方都可使用,电话号码应该在上层调用中设置,请问有没什么建议,谢谢!  详情 回复 发表于 2010-2-25 09:13
点赞 关注

回复
举报

66

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
楼主设置了 短信中心号码?

发送短信 和其他手机发送短信给模块  都测试下,
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
感谢回复,没有设置短信中心号码,我再看看。
另外在程序中我的发送信息为:
char     pdu[] =
        
        "0891685118683343f811000D91685129562904F90008001A6B228FCE676552306B666C4951CC727975355B50516C53F8FF01\x1a";
实际输出产生截断了,请问怎么回事?
 
 
 

回复

96

帖子

0

TA的资源

一粒金砂(初级)

4
 
按 模块的文档介绍的方法 发送。
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

5
 
发送部分主程序:
void main ()
{
        // parse_arguments (argc, argv);
        //char cmd[16]; // 命令串
        
        //char pdu[512]; // PDU串
     char           ans[218];   // 应答串
        /* open comport */
    char            buf[] = "AT+CMGS=?\r";      //测试手机是否支持相关AT指令
    char            atbuf[] = "ATE1\r"; //回显
    char            smscsq[] = "AT+CSQ\r";
    char     smstype[] = "AT+CMGF=0\r";
char     smsend[] = "AT+CMGS=25\r";  //41
char     pdu[] =
                   "0891688106036039F111000D91685198367879F60000000BE8329BFD06DDDF723619\x1a";//发送信息
    int             i;
int      flag;     OpenComPort (2, 115200, 8, "1", 'N');
usleep (2000);
    WriteComPort (buf, sizeof (buf));
usleep (2000);
WriteComPort (atbuf, sizeof (atbuf));
usleep (2000);
WriteComPort (smscsq, sizeof (smscsq));
usleep (2000);
WriteComPort (smstype, sizeof (smstype));
  usleep (2000);
WriteComPort (smsend, sizeof (smsend));
  usleep (2000);
printf ("the sms is sending........\n");
  usleep (20000);
WriteComPort (pdu, sizeof (pdu));    // 得到肯定回答,继续输出PDU串
    usleep (10000);
   SetPortSig ();
while (1) {
if (getnumf == 1) {
   for (i = 0; i < 32; i++)
numbuf = '\0';
getnumf = 0;
}
     }
printf ("err");
CloseComPort ();
exit (0);
}
发送的字符为:E8329BFD06DDDF723619(“Hello World"),但是在输出中没有出现这个,产生了截断,请帮忙分析下原因。
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

6
 
发送部分主程序:
void main ()
{
        // parse_arguments (argc, argv);
        //char cmd[16]; // 命令串
        
        //char pdu[512]; // PDU串
     char           ans[218];   // 应答串
        /* open comport */
    char            buf[] = "AT+CMGS=?\r";      //测试手机是否支持相关AT指令
    char            atbuf[] = "ATE1\r"; //回显
    char            smscsq[] = "AT+CSQ\r";
    char     smstype[] = "AT+CMGF=0\r";
char     smsend[] = "AT+CMGS=25\r";  //41
char     pdu[] =
                   "0891688106036039F111000D91685198367879F60000000BE8329BFD06DDDF723619\x1a";//发送信息
    int             i;
int      flag;     OpenComPort (2, 115200, 8, "1", 'N');
usleep (2000);
    WriteComPort (buf, sizeof (buf));
usleep (2000);
WriteComPort (atbuf, sizeof (atbuf));
usleep (2000);
WriteComPort (smscsq, sizeof (smscsq));
usleep (2000);
WriteComPort (smstype, sizeof (smstype));
  usleep (2000);
WriteComPort (smsend, sizeof (smsend));
  usleep (2000);
printf ("the sms is sending........\n");
  usleep (20000);
WriteComPort (pdu, sizeof (pdu));    // 得到肯定回答,继续输出PDU串
    usleep (10000);
   SetPortSig ();
while (1) {
if (getnumf == 1) {
   for (i = 0; i < 32; i++)
numbuf = '\0';
getnumf = 0;
}
     }
printf ("err");
CloseComPort ();
exit (0);
}
发送的字符为:E8329BFD06DDDF723619(“Hello World"),但是在输出中没有出现这个,产生了截断,请帮忙分析下原因。
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

7
 
上面修改了发送信息,打印消息如下,同样有截断:
~ $ ./send
the sms is sending........
AAT+CMGS=?
OK
ATE1
OK
AT+CSQ
+CSQ: 22,99

OK
AT+CMGF=0
OK
AT+CMGS=25
>
0891688106036039F111000D91685198367879F
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

8
 

学习了,谢谢!!!!
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

9
 
引用 6 楼 thzhr 的回复:
上面修改了发送信息,打印消息如下,同样有截断:
~ $ ./send
the sms is sending........
AAT+CMGS=?
OK
ATE1
OK
AT+CSQ
+CSQ: 22,99

OK
AT+CMGF=0
OK
AT+CMGS=25
>
0891688106036039F111000D91685198367879F




是不是发送出去了?
截断的话得看你的发送函数了,贴出来

 
 
 

回复

90

帖子

0

TA的资源

一粒金砂(初级)

10
 
感谢各位关注,现在短信能够发出。问题出在PDU格式结构有误,最后应该加上“CTRL+Z”,即“\x01a”,原来写成“\x1a";
char     pdu[] =
        "0891683110808805F011000D91685198367879F60000000BE8329BFD06DDDF723619\x01a";
现在还有点问题,就是我这里接收方的电话号码是在上面pdu变量中设置的,
现在我需要针对不同的接收方都可使用,电话号码应该在上层调用中设置,请问有没什么建议,谢谢!
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表