转载请注明出处(Cooper的专栏 http://blog.youkuaiyun.com/cooper_lyt)
前几天写了一个用delphi串口通信程序,收发AT指令使用GSM模块发短信
delphi写串口通信程序还是很方便的,大体有两种方法1,使用API读串口,2使用ActiveX控件mscomm。由于时间关系和兼容问题本人使用的后者(使用API可能在不同的windows版本上出现问题)。
1.调试GSM模块 ,到网上下一个串口调试工具,注意应该有你的GSM模块所使用的波特率支持(我一开始下的就不支持我的GSM模块所使用的波特率),装好后发下at指令做测试,注意,每条at指令后都要有回车,短信结束为ctrl+z,在串口调试工具中可以发16进制的1a来实现,关于具体的指令大家可以到网上查一下,注意,不同的GSM模块的指令可能不同但收发短信的应该都是一样的。
2.短信的格式
要用at指令设置短信的格式
AT+CMGF=0 (0-PDU;1-文本)
短信有两种格式1.文本:所见及所得的,只能用来发英文短信 2,pdu格式: 要对短信进行编码,发送中文短信,编码方式参见:(http://www.delphifans.com/infoview/Article_49.html),编码的程序代码我有时间会发上来,现在找不到合适的空间。
短信格式的不同使用at指令的步骤也不同
- AT+CMGF=1(文本)格式的步骤:
-
- MsComm.Output:= 'AT+CSCA="+8613800240500"' +#13; //设置短信中心号码
- MsComm.Output:= 'AT+CMGF=0' +#13; //设置短信格式。
- MsComm.Output:= 'AT+CSCS="GSM"'+#13; //设置猫的模式,某些gsm模块不用此指令
- MsComm.Output:= 'AT+CMGS="1347XXXXXX"' + #13 ; //发送短信,目标号码
- SleepEx(900,true); //等到gsm回映 '>' 要单写一个方法等待,这里只是测试代码
- MsComm.Output:= msg + #26 //时发送短信内容ctrl+z结束
- //......写代码判断是否发送成功
由于PDU格式会将短信中心号码和目标号都发编码到短信中去所以省下了不少步骤,
- s:= '中文测试';
- MsComm.Output:= 'AT+CMGF=0' +#13; //设置短信格式
- MsComm.OutPut := 'AT+CMGS=' + inttostr(GetSMSLen('+8613800240500', n, s)) + #13; //重要。。先发送编码的长度给gsm模块,
- SleepEx(900,true); //等待返回'>'用自己的代码替换
- MsComm.OutPut := MadeSMS('+8613800240500', n, s) + #26; //发送编码后的短信
3.短信的长度
使用pdu格式的短信长度是有限制的如果短信内是中文的话那么长度为128(注意不是128个字,而是长度为128),而英文的更长一些(到底有多长未测试,但是肯定比中文的长),而普通的文本格式的短信长度也没有测试(在中国不可能使用这种格式)。那位大虾知道可以告诉我一下我来补上呵。