手机型号:西门子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
|
回复人:hualianmao(花脸猫) 一级(初级) 信誉:100 2004-11-28 19:28:21 得分:0
|
回复人: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) |