各位:
    在下目前在做“通过GSM MODEM发送中文短信”的项目,现在的进展是:了解PDU编码,可以在超级终端里成功发送中、英文短消息,可以通过程序发送英文短消息,现在的问题是:程序发送不了中文的短消息。我使用的是SPCOMM控件(串口通讯),使用其默认属性,但在代码中写:
    s := 'at+cmgs=18'+chr($0d)+chr($0a);//PDU编码长度为18,后跟回车换行符
    smsport.WriteCommData(pchar(s),Length(s));
    s := '0011000B813107020277F1000810046B228FCE'+chr($1A);//发送中文“欢迎”,编码为“46B228FCE”,后跟CTRL+Z
    smsport.WriteCommData(pchar(s),Length(s));    代码执行完后,却返回“ERROR”。好象与最后的结束符CTRL_Z有关!    但是如果在超级终端中输入如下命令则可以收到“欢迎”:
    at+cmgf=0
    at+cmgs=18
    at+cmgs=0011000B812107020277F1000810046B228FCE(后跟一个CTRL_Z)    请问我的代码有何问题?是不是SPCOMM的属性不应使用默认值?    在下刚换公司,没有宽带,不方便上网,愿意帮忙的朋友最好给我发邮件。如果在不涉及任何知识产权的情况下,能否给我发个例程?简单写一下代码或指点一下也可。很急!谢谢!
                                             [email protected]

解决方案 »

  1.   

    wilson_z 兄,“立即我又试了一下加上#26+#0”我可没有试过
      

  2.   

    我在前几天才看到你的问题,也是在前几天才开始对手机编程,首先感谢你的问题对我的启发,没有他,我还得转几天的圈子,你的问题出现在这里,你每一条AT命令之间必须在上一条命令有回应后才能执行下一条命令(也就是有OK之后),所以每一条命令之间最好有个时间等候。
      s:='at'+chr($0d)+chr($0a);
       smsport.WriteCommData(pchar(s),Length(s));
       sleep(1500);
       s := 'at+cmgs=18'+chr($0d)+chr($0a);//PDU编码长度为18,后跟回车换行符
        smsport.WriteCommData(pchar(s),Length(s));
        sleep(1500);
        s := '0011000B813107020277F1000810046B228FCE'+chr($1A);//发送中文“欢迎”,编码为“46B228FCE”,后跟CTRL+Z
        我的程序已通过了。