求救:PC串口连手机模块发送短信(用MSComm控件),消息总被截断!
我用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




