通过串口连接电脑发短信的问题 ( 积分: 300 )

  • 主题发起人 主题发起人 jjweb
  • 开始时间 开始时间
J

jjweb

Unregistered / Unconfirmed
GUEST, unregistred user!
我先在超级终端里测试。
我输入
AT+CMGS=23
> 089111000B910000A71100310033003600300037003000320038003800340034 (^Z)
但提示错误。

手机号码 13607028844 信息是 节日快乐
我转换成的PDU码是 089111000B910000A71100310033003600300037003000320038003800340034
长度是15+8
请告诉为什么错了?
 
我先在超级终端里测试。
我输入
AT+CMGS=23
> 089111000B910000A71100310033003600300037003000320038003800340034 (^Z)
但提示错误。

手机号码 13607028844 信息是 节日快乐
我转换成的PDU码是 089111000B910000A71100310033003600300037003000320038003800340034
长度是15+8
请告诉为什么错了?
 
不懂,帮你提前!
 
你的pdu编码是错误的.
http://www.delphibbs.com/delphibbs/dispq.asp?lid=2991449

AT+CMGS=45
发送到13607028844,内容为:Happy new year!
0891683108200105F011000D91683106078248F40008AA1E004800610070007000790020006E00650077002000790065006100720021
 
TO anewed
按照你说的做,也还是错误。我执行的命令如下

at+csca="+8613010166500"
OK
at+cmgf=0
OK
at+cmgs=45
>0891683108200105F011000D91683106078248F40008AA1E004800610070007000790020006E00650077002000790065006100720021(^Z)
+CMS ERROR:28

不知道是什么错误?
 
pdu的不难,有公式换算的.
function TextToSms(SmsCenter: string; TargetMs: string; Text: string): Tpdu;
var
smsc,targ,leng,data : string;
ses1 : string;
i,d,e,j,k,n : integer;
a,b,c : array [1..8] of byte;
smsh : integer;
jump : boolean;
res : Tpdu;
ttt : WideString;
begin
if (Text = '') or (Length(TargetMs) < 11) then Exit;
ttt := text;
ses1:=smscenter;
// if Length(Ses1) >= 11 then
smsc:=ses1[2]+ses1[1]+ses1[4]+ses1[3]+ses1[6]+ses1[5]+ses1[8]+ses1[7]+ses1[10]+ses1[9]+'F'+ses1[11];
// else
// smsc:= '';
ses1:=targetms;
// if Length(Ses1) >= 11 then
targ:='68'+ses1[2]+ses1[1]+ses1[4]+ses1[3]+ses1[6]+ses1[5]+ses1[8]+ses1[7]+ses1[10]+ses1[9]+'F'+ses1[11];
// else
// Targ:= '';
ses1:=text;

j:=0;
d:=ord(ses1[1]);

c[8]:=round((d and 128)/128);
c[7]:=round((d and 64)/64);
c[6]:=round((d and 32)/32);
c[5]:=round((d and 16)/16);
c[4]:=round((d and 8)/8);
c[3]:=round((d and 4)/4);
c[2]:=round((d and 2)/2);
c[1]:=round((d and 1));
jump:=false;
for i:=2 to length(ses1) do
begin
j:=j+1;
if j=8 then
begin
j:=0;
jump:=true;
end;

d:=ord(ses1);

a[8]:=round((d and 128)/128);
a[7]:=round((d and 64)/64);
a[6]:=round((d and 32)/32);
a[5]:=round((d and 16)/16);
a[4]:=round((d and 8)/8);
a[3]:=round((d and 4)/4);
a[2]:=round((d and 2)/2);
a[1]:=round((d and 1));

if jump=false then
begin
for e:=1 to 8-j do
begin
b[e]:=c[e];
end;

k:=0;

for e:=8-j+1 to 8 do
begin
k:=k+1;
b[e]:=a[k];
end;

n:=128*b[8]+64*b[7]+32*b[6]+16*b[5]+8*b[4]+4*b[3]+2*b[2]+b[1];
if n>0 then data:=data+inttohex(n,2);

end;

jump:=false;

for e:=1 to 8-j do
begin
c[e]:=a[e+j]
end;

for e:=8-j to 8 do
begin
c[e]:=0;
end;
end;
n:=128*c[8]+64*c[7]+32*c[6]+16*c[5]+8*c[4]+4*c[3]+2*c[2]+c[1];
if n>0 then data:=data+inttohex(n,2);
leng:=inttohex(length(ttt)*2,2);
// res[1]:='0011000D91'+targ+'000801'+leng+data;
//0001 ---flash sms
res[1]:='0011000D91'+targ+'000801'+leng+encode2(ttt);
smsh:=round(length(res[1])/2-1);
res[2]:=inttostr(smsh);
result:=res;
 
to jjweb,
因为我所给出的pdu包含了短信中心号码, 更新后的pdu如下:

at+csca="+8613010166500"
OK
at+cmgf=0
OK
at+cmgs=45
>0891683110106605F011000D91683106078248F40008AA1E004800610070007000790020006E00650077002000790065006100720021(^Z)
 
TO anewed
您第二次给的PDU码0891683110106605F011000D91683106078248F40008AA1E004800610070007000790020006E00650077002000790065006100720021
输入后提示ERROR,不知道是什么问题
我的手机是西门籽3618的,我是通过红外线和笔记本连接的,红外线我用的是COM4口
 
to: jjweb,
http://anewed.anyp.cn上有相关的pdu编码文章, 你可以看看, 应该有所帮助.
 
我看了关于PDU编码的文章,我认为我的PDU玛没错,但总是提示错误
您能提供一个正确的PUD码吗?让我在超级终端上测试测试。
接收号码是 13507026099
短信中心是 8613010166500
发送内容是 节日快乐

 
to jjweb,

AT+CMGS=23
0891683110106605F011000D91683105076290F90008AA08828265E55FEB4E50
 
anewed
还是不对哦 ,您有QQ或者MSN吗
 
后退
顶部