N
NameNick
Unregistered / Unconfirmed
GUEST, unregistred user!
1.怎样用GSM模块(手机modem)发中文短讯,英文的我已实现。
2.发中文必须在pdu模式中发,我只发一个"中"字,它的unicode码为4E2D,
短讯中心号码为:+8613800851500按PDU规则变换后得到683108801505F0,
被叫号码为:13885083464变换后得到3188053864F4,最后PDU包为:
0891683108801505F011000D91683188053864F4000800044E2D发送时包尾加ctrl-z字符.
我用超级终端发成功了!但在我的程序中仍然没有成功,modem不返回任何值.
在级终端里成功后会返回成功发送的长度,请帮我查一下.
给手机modem发at命令我用的是串口控件"mscomm".
下面代码中的"comm"就是mscomm控件.上面我提到的只发一个"中"字的例子的
delphi代码如下:
procedure TFormMain.Button1Click(Sender: TObject);
var
cmd:string;
i,j:integer;
ba:array of byte;
begin
//清空接收缓冲区
comm.InBufferCount:=0;
comm.InputLen:=0;
//设置短讯中心号码
comm.output:='AT+CSCA=+8613800851500'+cnReturn;
sleep(1000);
memo1.Lines.add(comm.input);
//检查是否支持sms服务
comm.output:='AT+CSMS=0'+cnReturn;
sleep(1000);
memo1.Lines.add(comm.input);
//设置modem为pdu模式
comm.output:='AT+CMGF=0'+cnReturn;
//Set PDU mode
sleep(1000);
memo1.Lines.add(comm.input);
//设置字符集
cmd:='AT+CSCS="GSM"'+cnReturn;
comm.output:=cmd;
sleep(1000);
memo1.Lines.add(comm.input);
//开始发命令长度为17
comm.output:='AT+CMGS=17'+cnReturn;
sleep(1000);
memo1.Lines.add(comm.input);
//下面是设置pdu包数据,这里为一个固定的包,它在超级终端里测试过正常
cmd:='0891683108801505F011000D91683188053864F4000800044E2D'+'1A';
//这个包中每两位为一个字节,把他们放到一个字节数组中
setlength(ba,length(cmd) div 2-1);
i:=1;
j:=0;
while i<length(cmd)do
begin
ba[j]:=strtoint('$'+cmd+cmd[i+1]);
inc(j);
inc(i,2);
end;
//把pdu包送给modem
comm.Output:=ba;
sleep(1000);
memo1.lines.add(comm.input);
end;
2.发中文必须在pdu模式中发,我只发一个"中"字,它的unicode码为4E2D,
短讯中心号码为:+8613800851500按PDU规则变换后得到683108801505F0,
被叫号码为:13885083464变换后得到3188053864F4,最后PDU包为:
0891683108801505F011000D91683188053864F4000800044E2D发送时包尾加ctrl-z字符.
我用超级终端发成功了!但在我的程序中仍然没有成功,modem不返回任何值.
在级终端里成功后会返回成功发送的长度,请帮我查一下.
给手机modem发at命令我用的是串口控件"mscomm".
下面代码中的"comm"就是mscomm控件.上面我提到的只发一个"中"字的例子的
delphi代码如下:
procedure TFormMain.Button1Click(Sender: TObject);
var
cmd:string;
i,j:integer;
ba:array of byte;
begin
//清空接收缓冲区
comm.InBufferCount:=0;
comm.InputLen:=0;
//设置短讯中心号码
comm.output:='AT+CSCA=+8613800851500'+cnReturn;
sleep(1000);
memo1.Lines.add(comm.input);
//检查是否支持sms服务
comm.output:='AT+CSMS=0'+cnReturn;
sleep(1000);
memo1.Lines.add(comm.input);
//设置modem为pdu模式
comm.output:='AT+CMGF=0'+cnReturn;
//Set PDU mode
sleep(1000);
memo1.Lines.add(comm.input);
//设置字符集
cmd:='AT+CSCS="GSM"'+cnReturn;
comm.output:=cmd;
sleep(1000);
memo1.Lines.add(comm.input);
//开始发命令长度为17
comm.output:='AT+CMGS=17'+cnReturn;
sleep(1000);
memo1.Lines.add(comm.input);
//下面是设置pdu包数据,这里为一个固定的包,它在超级终端里测试过正常
cmd:='0891683108801505F011000D91683188053864F4000800044E2D'+'1A';
//这个包中每两位为一个字节,把他们放到一个字节数组中
setlength(ba,length(cmd) div 2-1);
i:=1;
j:=0;
while i<length(cmd)do
begin
ba[j]:=strtoint('$'+cmd+cmd[i+1]);
inc(j);
inc(i,2);
end;
//把pdu包送给modem
comm.Output:=ba;
sleep(1000);
memo1.lines.add(comm.input);
end;