CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  网络通信/分布式开发

求救:PC串口连手机模块发送短信(用MSComm控件),消息总被截断!

楼主GBlueMan(古)2005-02-04 16:57:12 在 Delphi / 网络通信/分布式开发 提问

我用PC串口COM1连接手机模块(BenQ   M22),通过MSComm控件进行串口操作发AT命令来发送短信,发送的消息前面部分总被截断,百思不得其解,请各位大侠帮忙看看,下面是AT命令和程序代码:  
   
  文本模式的AT命令:  
  <-----------------------------  
  AT  
  AT+CSCA="+8613800280500"   //设置短信中心号,成都  
  AT+CMGF=1  
  AT+CMGS="要发送的手机号"     //双引号部分用真实手机号代替  
  >How   are   you  
  ----------------------------->  
  手机上得到的结果:e   you    
   
   
  PDU模式下的AT命令:  
  <-----------------------------  
  AT  
  AT+CSCA="+8613800280500"   //设置短信中心号,成都  
  AT+CMGF=0  
  AT+CMGS=65  
  >0891683108200805F011000D91683106089259F7000800324F7F752800540065007800746A215F0F6536  
  53D177ED4FE14EE378017B805355FF0C5B9E73B08D776765534152065BB96613  
  ----------------------------->  
   
  上面的代码放到超级终端执行则发送正确,在程序中运行完后,打开超级终端,看到如下结果:  
  <--------------------------------  
  AT+CMGS=65  
  >1000D91683106089259F7000800324F7F752800540065007800746A215F0F653653D177ED4FE14EE378  
  017B805355FF0C5B9E73B08D776765534152065BB96613  
  ERROR  
  -------------------------------->  
   
  显然数据头部的“0891683108200805F01”被截断了。奇怪的是下面附的程序代码如果在设置断  
  点调的状态则可以发送竟然成功,直接运行则被截断。是不是Delphi中变量运用的问题呀?我用的是Delphi7.  
   
  附:以下是PDU模式下的Delphi程序代码(文本模式仅是AT命令不同),麻烦那位高手帮忙指正一下,  
  在下先谢过:  
   
  <==============================================================>  
  procedure   TManuGetInfoForm.btnSendClick(Sender:   TObject);  
  var  
      sMsg:   String;  
  begin  
      //-----------配置组件----------------------  
      MSComm1.CommPort   :=   1;   //使用COM1  
      MSComm1.Settings   :=   '115200,N,8,1';   //设置波特率  
      MSComm1.InputLen   :=   0;               //设置该属性为0表示Input读取整个缓冲区的内容。  
      MSComm1.InBufferCount   :=   0;       //清空接收缓冲区  
      MSComm1.OutBufferCount   :=   0;     //清空发送缓冲区  
   
      try  
          MSComm1.PortOpen   :=   true;         //打开端口  
      except  
          MessageDlg('打开端口时发生错误,请确认端口是否被其它程序占用',mtError,[mbOk],0);  
          exit;  
      end;  
      //-----------发送   AT命令----------------------  
      MSComm1.Output   :=   'AT'+char(13);     //发送   AT  
      sleep(100);   //延时0.1秒  
   
      MSComm1.Output   :=   'AT+CSCA="+8613800280500"'+CHAR(13);//成都移动短信中心号:+8613800280500  
      sleep(100);   //延时0.1秒      
      MSComm1.Output   :=   'AT+CMGF=0'+char(13);   //发送'AT+CMGF=0'设置为PDU方式  
      sleep(500);   //延时0.5秒  
   
      sMsg   :=   '0891683108200805F011000D91683106089259F7000800324F7F752800540065007800746A215F0F  
                      653653D177ED4FE14EE378017B805355FF0C5B9E73B08D776765534152065BB96613';  
      MSComm1.Output   :=   'AT+CMGS=65'+   char(13);//发送   AT+CMGS=消息长度  
      MSComm1.Output   :=   sMsg+chr(26);   //这里是发送的消息,char(26是Ctrl+Z)  
      sleep(1000);   //延时1秒  
   
      //---------------------------------------  
      MSComm1.PortOpen   :=   false;   //关闭端口  
  end;  
  问题点数:100、回复次数:21Top

1 楼cjf1009(农民程序员)回复于 2005-02-05 09:22:59 得分 70

1、短信中心号码不用每次都写,设置一次之后就行了。  
  2、如果每次都用pdu方式发送,打开串口时设置'AT+CMGF=0'就可以了。  
  3、发送pdu字符串的长度,我不知道你怎么计算的,应该是这样:  
          SendLen   :=   (Length(PduStr)-2)   div   2;  
  4、  
      MSComm1.Output   :=   'AT+CMGS=65'+   char(13);//发送   AT+CMGS=消息长度  
   
      sleep(700);//这里最好加个延时******  
   
      MSComm1.Output   :=   sMsg+chr(26);   //这里是发送的消息,char(26是Ctrl+Z)  
  5、检查你的pdu字符串组合的是否正确。其实前面是中心号码,不要也罢Top

2 楼noahroom()回复于 2005-02-05 20:34:43 得分 0

您好:  
  您的短信问题我们可以帮您解决:  
  如果您需要手机短信开发接口以及相关手机短信软件,请登录我们的网站:  
  http://www.taobaozhe.com  
  诺亚软件Top

3 楼kuki84(天道酬勤)回复于 2005-02-07 16:12:36 得分 2

学习Top

4 楼GBlueMan(古)回复于 2005-02-07 18:27:07 得分 0

To   cjf1009(农民程序员)   :  
   
  1.短信中心号和发送方式即使每次都设置应该也不会出现那样的错误吧?  
   
  2.发送pdu字符串的长度,我是这样算的  
        sLen   :=   15   +   (length(MsgStr))   div   2   //MsgStr是发送消息的Unicode字符串  
  这样对吗?  
   
  3.pdu字符串组合的是否正确。因为在超级终端可以正确发送出去。  
  前面是中心号码不要也行吗?好像在超级终端发不出去的吧?而且我的程序里截断的比中心号好像多了一位?  
  Top

5 楼noahroom()回复于 2005-02-16 20:23:28 得分 0

您好:  
  您的短信问题我们可以帮您解决:  
  如果您需要手机短信开发接口以及相关手机短信软件,请登录我们的网站下载:  
  http://www.taobaozhe.comTop

6 楼cyblueboy83(爱情白痴—电脑迷)回复于 2005-02-16 23:18:09 得分 2

不懂,帮顶Top

7 楼GBlueMan(古)回复于 2005-03-01 11:35:49 得分 0

怎么还是不行??Top

8 楼noahroom()回复于 2005-03-03 16:01:13 得分 0

您好:  
  短信收发设备(短信猫)=750元/台  
  全国最低价,无需再询,立刻购买吧!  
  24小时订购热线:010-87416460  
  如需了解更多优惠信息,请登录我们的网站查询:  
  http://www.taobaozhe.comTop

9 楼caiso(十年磨一剑)回复于 2005-03-04 10:26:12 得分 2

顶一下Top

10 楼lyqili(fjngh)回复于 2005-03-04 10:39:57 得分 0

procedure   TmainForm.FormCreate(Sender:   TObject);  
  begin  
        configport;  
        configcom;  
        //callcount:=0;  
      pagecontrol1.ActivePage:=TabSheet2;  
      memo1.Clear;  
      memo2.Clear;  
      memo3.Clear;  
      memo4.Clear;  
      commconnect:=false;  
      netconnect:=false;  
      receiveconnect:=false;  
   
      N8.Enabled:=true;  
      N3.Enabled:=false;  
      N2.Enabled:=true;  
      clearbutton.Enabled:=true;  
      N5.Enabled:=false;  
      N6.Enabled:=true;  
   
    with   Tinifile.create('proj2000.ini')   do  
      try  
      ClientName:=ReadString('select',     'ClientName',   'SELECT');  
      finally  
      end;  
   
      showenable1:=true;  
      showenable2:=true;  
      showenable3:=true;  
      showenable4:=true;  
      try  
      startclient.Click   ;  
   
      comm1.StartComm;  
      finally  
      commdisplay;  
      end;  
      receivedisplay;  
  end;  
   
  有谁可以帮我看一下上面的程序阿。我做的是一个串口通讯的程序。可是当程序执行到comm1.StartComm;就出现死机现象了。我如果把这个语句给注释掉就不会再死机了。不知道是什么原因。有谁可以帮我一下吗。非常谢谢!!!!Top

11 楼liangyong007a((梦里有云,心中有天地)(探花秀))回复于 2005-03-04 11:00:20 得分 2

学习Top

12 楼yuti()回复于 2005-03-04 11:26:06 得分 20

不要用MSCOMM控件,它没有使用缓冲,建议使用SPCOMM控件,它是使用缓冲的,数据一般不会被截断.如果需要可以告诉我你的EMAIL地址,发给你一个.或者自己上网上搜一下,有许多的.Top

13 楼lyqili(fjngh)回复于 2005-03-04 11:33:54 得分 0

TO   yuti()    
    谢谢你!!!我用的就是SPCOMM阿。对了,忘了告诉你,我程序运行时,服务器端程序没有运行。要不我把程序给你发过去你看一下好吗?我看了很久的,可是看不出来是什么问题。或者你给我说一下,可能是什么原因造成的呢?Top

14 楼caiso(十年磨一剑)回复于 2005-03-04 16:05:15 得分 2

顶一下Top

15 楼maming2003(關機.睡覺!)回复于 2005-03-04 19:51:58 得分 0

看你的代码好像是没什么问题Top

16 楼GBlueMan(古)回复于 2005-03-04 23:25:35 得分 0

原因我已经找出来了,感谢各位参与,正如yuti()   所说,MSComm没有缓冲,在发送数据量大时要给予足够的延时,1秒是不够的,如果改成2秒以上就没有问题,希望我的问题能抛砖引玉:  
   
      MSComm1.Output   :=   'AT+CMGS=65'+   char(13);  
      MSComm1.Output   :=   sMsg+chr(26);    
      sleep(2000);     <----   这里要给2秒左右的延时才行  
   
      //---------------------------------------  
      MSComm1.PortOpen   :=   false;   //关闭端口  
  Top

17 楼GBlueMan(古)回复于 2005-03-04 23:34:31 得分 0

结贴!  
   
  lyqili只要麻烦你另起一贴讨论了,你先不try,看看系统给你什么错误,这样对你调试程序有帮助,调好了以后再try吧!Top

18 楼GBlueMan(古)回复于 2005-03-04 23:41:43 得分 0

怎么我结贴都结不了,分配的数学老是分不起啊????  
   
  另外,使用SPComm控件如果延时不够一样有问题,我都试过了!Top

19 楼noahroom()回复于 2005-03-07 21:48:52 得分 0

您好:  
  您的短信问题我们可以帮您解决:  
  如果您需要手机短信开发接口以及相关手机短信软件,请登录我们的网站下载:  
  http://www.taobaozhe.comTop

20 楼noahroom()回复于 2005-03-11 23:46:29 得分 0

您好:  
  短信软件开发接口(无任何限制,一次买入随便使用)=500元  
  短信收发设备(短信猫)=750元/台  
  全国最低价,无需再询,立刻购买吧!  
  24小时订购热线:010-87416460  
  如需了解更多优惠信息,请登录我们的网站查询:  
  http://www.taobaozhe.comTop

21 楼noahroom()回复于 2005-04-08 00:31:23 得分 0

您好:  
  短信收发设备(短信猫)(全国最低价)=750元/台  
  短信软件开发接口(无任何限制)=800元  
  我公司郑重承诺:诺亚短信开发接口与诺亚短信设备(短信猫)无任何绑定限制:即第一次买入后,以后无需再次购买此开发接口,请广大用户在购买时注意咨询,如有疑问,欢迎来电咨询!诺亚短信设备(短信猫)为全国最低价!      
  我公司还供应以下软件产品:  
  ●   诺亚短信开发接口   ●   诺亚短信通群发办公版    
  ●   诺亚短信防伪系统   ●   诺亚短信通群发广告版    
  ●   诺亚短信查询系统   ●   诺亚短信通群发网络版    
  ●   诺亚短信家校通版   ●   诺亚短信易综合版    
  如需了解更多优惠信息,请与我们联系:  
  北京诺亚软件有限公司  
  联系人:王先生  
  地     址:北京市海淀区远大路20号鹏安世纪大厦A座12A  
  邮     编:100089      
  电     话:010-87416460,010-51980693      
  传     真:010-51985499      
  邮     箱:beijingsms@126.com      
  QQ     号:397923974      
        MSN:noahsoft@hotmail.com    
  网     址:http://www.taobaozhe.comTop

相关问题

  • PC串口连手机模块发送短信(用MSComm控件)给分100
  • 使用MSComm控件来串口通讯,关于接收多字节时候会截断的问题
  • 串口通讯,用mscomm
  • MScomm串口控件问题?
  • MSCOMM串口通讯问题
  • 串口控键MSComm问题
  • 高分求助window2000下的串口通讯模块!
  • 如何在linux内核模块中对串口进行读写
  • 关于串口通讯控件(Mscomm)
  • mscomm控件读写串口的问题

关键词

  • 控件
  • 端口
  • 消息
  • 代码
  • sleep
  • 手机
  • mscomm
  • a215f0f653653
  • 截断
  • 串口

得分解答快速导航

  • 帖主:GBlueMan
  • cjf1009
  • kuki84
  • cyblueboy83
  • caiso
  • liangyong007a
  • yuti
  • caiso

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo