一个常用GSM短信数据通信报文设计格式如下:
其中,以$S作为短信数据通信报文的帧头字节;6个字符作为接收端的认证密码;S/T代表本报文的发送方为GSMModem(S)或短信终端(T);报文内容受短信数据长度的限制,一般在100字节以下;以#作为报文的结束符。
基于如上报文定义,一条上位机发出的SMS报文示例如下:
$S000000S0000AA100RlY2W3R4Y5G6Y7W5B#
其中,$S为数据帧头;000000为SMS终端默认的认证密码;S表明本数据来自GSM Modem;0000为服务器设备ID编号;AA表示当前数据命令;10为十六进制数据0x10,表示当前数据内容长度字节;0R1G2W3R4G5G6Y7W为报文内容;5B为校验码;#为结束符。
同理,短信终端返回至GSM Modem的SMS报文示例为:
$S888888T0055CC1930RX1YX2YX3YX4YX5Y6Y7YXEF#
其中,$S为数据帧头;888888为SMS上位机服务器端默认的认证密码;T表明数据来自短信终端;0055为终端设备ID编号;CC表示当前返回数据命令;19为十六进制数据0x19,表明当前返回数据内容长度字节;30RX1YX2YX3YX4YX5Y6Y7YX为返回数据内容;EF为校验码;#为结束符。
5 GSM Modem短信数据通信报文处理流程
采用常规的上位机软件来进行设计,将数据通信报文整理好后再根据一系列的
AT命令组合发送至GSM Modem,同时还需要解析来自若干个SMS终端的数据通信报文。常规上位机服务器端软件处理短信数据的流程如图4所示。
上位机软件数据处理过程中,需要不停地对GSMModem进行操作,响应GSM Modem接收到的数据,处理发送数据包。在整个过程中,GSM Modem只作为数据传输工具,不参与任何的数据处理;而一般的SMS远程监控通信系统的通信报文多达几十乃至上百条,会导致上位机软件工作量非常大。为了便于上位机程序简化开发,结合Q24PL001模块自身支持OpenAT嵌入式软件的特点,将短信数据通信报文的发送处理和接收解析流程嵌入GSMModem内,只保留一些简单的
AT命令接口给上位机软件控制,大大减小了上位机软件的工作量。
6 基于OpenAT的通信协议报文封装
OpenAT嵌入式操作系统是为广泛的基于GSM/GPRS的模块系统应用而设计的,用于实现嵌入式的短信数据通信协议报文封装,可以大大提高GSM Modem硬件系统的资源利用率。基于OpenAT的程序设计流程分为SIM卡服务声明、短信服务声明、发送数据包处理和接收数据包数据解析等部分。
6.1 SlM卡初始化程序
在OpenAT嵌入式程序中,启动SIM卡初始化的声明函数为adl_simSubscribe(bpt_SimInitHandler," ")。其中,bpt_SimInitHandler为SIM卡
声明返回函数:
其中,事件ADL_SIM_EVENT_FULL_INIT表明SIM的初始化完成。
6.2 短信服务初始化程序
在OpenAT嵌入式程序设计中,当返回函数返回状态为ADL_SIM_EVENT_FULL_INIT时,表明系统SIM卡初始化过程成功完成,系统可以进入短信声明流程。短信功能声明函数为:
ptk_SmsHandler=adl_smsSubscribe((adl_smsHdlr_f)bpt_SmsDataHandler,\(adl_smsCtrlHdlr_f)bpt_SmsCtrlHandler,ADL_SMS_MODE_TEXT);
其中,ptk_SmsHandler为短信声明函数返回句柄;bpt_SmsDataHandler为短信数据处理返回函数;bpt_SmsCtrlHandler为短信发送状态事件返回函数;ADL_SMS_MODE_TEXT参数表示采用TEXT模式进行短信数据传输。bpt_SmsDataHandler短信数据返回函数定义如下:
在该函数中,smsTel为接收到的短信电话号码,smsTimeLength为TEXT模式下的短信时间戳,smsText为接收到的短信数据内容。
SmsCtrlHandler短信发送事件返回状态定义如下:
其中,ADL_SMS_EVENT_SENDING_OK事件表明短信发送成功。
6.3 SMS通信协议发送实现
对示例通信报文$S000000S0000AA100R1Y2W3R4Y5G6Y7W5B#来说,报文的头和尾以及S服务器标志为固定字节;000000为终端访问密码,从Q24PL001模块内部Flash中调用;服务器ID码0000及终端SIM卡号码,同样从内部Flash中通过OpenAT嵌入式API函数adl_flhRead函数调用;命令字AA为固定命令字节;报文内容通过
AT命令接收自上位机软件。
上一页 [1] [2] [3]