织梦CMS - 轻松建站从此开始!

罗索

当前位置: 主页>老古董>『SMS』>

在超级终端中使用AT指令发送短信,返回OK,实际上却收不到,为什

罗索客 发布于 2006-06-07 15:26 点击:次 
手机型号:西门子3568i 手机通过数据线与PC串口连接,连接正常。 使用Pdu模式发送\"中英文混合短信Hi\",自己给自己发短信。 信息中心号码绝对正确。 在超级终端中的输入如下:CR为回车 atCR OK at+cmgf=0CR OK at+cmgs=18CR 0891683108501305F011000B913169090528F5000
TAG:

手机型号:西门子3568i
手机通过数据线与PC串口连接,连接正常。
使用Pdu模式发送"中英文混合短信Hi",自己给自己发短信。
信息中心号码绝对正确。

在超级终端中的输入如下:<CR>为回车

at<CR>
OK

at+cmgf=0<CR>
OK

at+cmgs=18<CR>
> 0891683108501305F011000B913169090528F5000000104E2D82F165876DF7540877ED4FE10048
0069<ctrl+z>
+CMGS: 208

OK

但未收到短信。是什么原因?


回复人:charise(黑码) 一级(初级) 信誉:100 2004-11-17 23:49:26 得分:0

看看我的 http://www.51mis.com/sms/setup.exe
TOP
回复人:steven0731(南山猫) 一级(初级) 信誉:100 2004-11-18 14:08:49 得分:0

字段填写错误,应为
0891683108501305F011000B913169090528F50008A7124E2D82F165876DF7540877ED4FE100480069
数据编码方案字段应为08,有效期字段建议为A7,数据长度字段应为12
TOP
回复人:zoti(潇湘浪子) 一级(初级) 信誉:100 2004-11-18 22:31:33 得分:0

为什么我的手机返回的这样的呢?
at
OK
at+cmgs=0
ERROR
at+cmgs=37
ERROR

TOP
回复人:samp_miao(九天揽月) 一级(初级) 信誉:100 2004-11-22 10:05:35 得分:0

at+cmgs=18<CR>
>
长度错误,应该是 从目标数地址个数那个段开始(包含它),所有字符长度/2


TOP
回复人:samp_miao(九天揽月) 一级(初级) 信誉:100 2004-11-22 10:34:14 得分:20

at+cmgs=18<CR>
>
长度错误,应该是 从目标数地址个数'91'那个段开始(不包含它),后面所有字符长度/2

要用‘91’ 目标地址格式(TON/NPI) 用国际格式号码(在前面加‘+’)
这样的话,好像 你自己的地址要加上86,然后长度也就是0D(不是0B)了。
at+cmgs=30<CR>
> 0891683108501305F011000D91683169090528F5000000104E2D82F165876DF7540877ED4FE10048
0069<ctrl+z>
试一下应该行了。
TOP
回复人:samp_miao(九天揽月) 一级(初级) 信誉:100 2004-11-22 10:40:29 得分:0


如果是用7bit编码的话,后面信息的长度要算实际的长度,不是压缩后的长度。
TOP
回复人:hualianmao(花脸猫) 一级(初级) 信誉:100 2004-11-24 20:58:58 得分:0

非常感谢 samp_miao(九天揽月)!根据你的方法,我可以在超级终端中使用AT指令发送手机短信了。
不过却存在一个问题:
明明发送的内容是“中英文混合短信Hi”,但手机上收到的内容却是一些乱码。为什么?Pdu编码方法也是从网上找到的大家一致认为是正确的方法。代码如下:
AnsiString EncodeChinese(AnsiString InputStr) //Pdu中文编码
{
int cur;
AnsiString tempstr,returnstr;
WideString ws;
wchar_t mid[2];
ws=WideString(InputStr);
for(int i=1;i<=ws.Length();i++)
{
wcscpy(mid,ws.SubString(i,1).c_bstr());
cur=mid[0];
FmtStr(tempstr,"%4.4X",ARRAYOFCONST((cur)));
returnstr=returnstr+tempstr;
}
// s.SetLength(returnstr.Length());
// s=returnstr;
return returnstr;
}
既然编码方法是正确的,为什么收到的是乱码呢?

另外,在程序里面以Pdu模式向串口写入AT指令发送短信时,是否必须先要指定内容的长度,如“AT+CMGS=XX”?不指定长度而直接发送内容即“AT+CMGS="0891683108501305F011000D91683169090528F5000000104E2D82F165876DF7540877ED4FE10048"<CR>”可以吗?
TOP
回复人:hualianmao(花脸猫) 一级(初级) 信誉:100 2004-11-25 11:14:27 得分:0

up
TOP
回复人:hualianmao(花脸猫) 一级(初级) 信誉:100 2004-11-28 19:28:21 得分:0

up
TOP
回复人:samp_miao(九天揽月) 一级(初级) 信誉:100 2004-12-01 15:19:00 得分:0
这几天没有时间来留言,不好意思。

“AT+CMGS=XX”?不指定长度而直接发送内容即“AT+CMGS="0891683108501305F011000D91683169090528F5000000104E2D82F165876DF7540877ED4FE10048"<CR>”可以吗?
好像是不可以的,说明文档上的步骤就是我那个步骤。

以下是我用c++写的代码。


// strSrc : 源串
// strDst :编码后的串
int gsmEncodeUCS2(CString strSrc,CString &strDst)
{
int nSrcLength = strSrc.GetLength();

int nDstLength; // UNICODE宽字符数目
WCHAR wchar[128]; // UNICODE串缓冲区
CString strT;

strDst.Empty();

// 字符串-->UNICODE串
nDstLength = ::MultiByteToWideChar(CP_ACP, 0, strSrc, nSrcLength, wchar, 128);

// 高低字节对调,输出
for(int i = 0; i < nDstLength; i++)
{
// 先输出高位字节
strT.Format("%02X",
(UINT)(unsigned char)(TCHAR(wchar[i] >> 8)));
strDst += strT;

strT.Format("%02X",
(UINT)(unsigned char)(TCHAR(wchar[i] & 0xff)));
strDst += strT;
}
// 返回目标编码串长度
return 2 * nDstLength;
}
TOP
回复人:samp_miao(九天揽月) 一级(初级) 信誉:100 2004-12-03 16:39:00 得分:0
我也搞错了长度应该是从 “11”即中心号码后面开始算起。
所有的字符个数/2。
(admin)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/200606/6539.html]
本文出处: 作者:admin
顶一下
(1)
100%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容