求救: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;