随着经济的发展以及国内工农业领域的自动化程度的提高,越来越多的场合需要远程监控和 *** 作的设备。基于GSM网络短信息设备的领域,GSM Modem是必不可少的设备,本文讨论目前应用广泛的基于Wavecom公司Q24PL001模块的GSM Modem嵌入式程序设计,以实现将短信数据通信报文封装进GSM Modem,从而简化上位机软件的工作量。
本文以OpenAT3.12嵌入式开发平台为例,讨论如何将远程控制和数据采集通信报文封装进以Q24PL001模块为主的GSM Modem。
1 OpenAT *** 作系统介绍
OpenAT是Wavecom公司为GPRS/GSM无线CPU开发的一款实时 *** 作系统,集成了内存分配、Flash管理、数据流管理、GPIO管理、总线管理、定时器管理等多种功能。底层为嵌入式API应用层,它包括程序初始化API、AT指令API、 *** 作系统API、标准API、流控API、总线API等,包含了建立在OpenAT基础之上的应用开发层函数库。应用开发层(简称ADL)函数库为开发人员提供了上层应用接口,简化了嵌入式应用的开发;同时还提供了嵌入式应用程序框架,包括消息解析器和服务声明机制。基于以上原因,OpenAT应用程序开发人员在开发应用程序时,更多的时间用于调用服务处理函数,使系统更专注于程序本身的优化。
2 GSM Modom的硬件结构和应用程序
GSM模块在工业领域中比较重要的一个应用就是用来做GSM Modem,这也是GSM模块一个最简单的应用。如图1所示,一个常规通用GSM Modem的系统结构包括电源、RS232接口、GSM模块、LED指示灯、SIM卡和天线等部分。
GSM Modem核心模块采用Wavecom公司的无线CPU模块Q24PL001。在Q24PL001模块中,OpenAT与应用程序的结构关系如图2所示。Q24PL001集成了ARM7内核的32位CPU,内嵌OpenAT *** 作系统内核,支持OpenAT嵌入式应用程序设计。
3 基于短信远程控制系统的结构
如图3所示,基于GSM网络的短信远程控制系统通常包括以下几个部分:GSM Modem、上位机监控终端、移动运营商的GSM网络和GSM终端等。
在一般产品设计中,GSM Modem作为发送GSM短信息的工具使用。PC机通过RS232串口与GSM Modem相连,根据通信协议处理短信数据将处理好的短信数据包打包,通过RS232串口发送一系列标准Ar指令控制GSM Modem,由其将短信数据包发送至终端系统。本文重点研究简化上位机软件,将数据处理过程交给GSM Modem嵌入式系统软件处理的方法。
4 GSM短信远程控制系统的通信报文设计
对于GSM远程通信系统,数据通信报文并无统一标准,设计者可以根据具体情况自由设计不同通信终端之间的数据通信报文。由于GSM网络的短信数据通信接收端可以通过普通手机实现短信接收,所以必须在短信数据通信报文设计中进行数据加密设计,以防止非法用户对GSM短信数据通信报文的破解和滥用,保证整个SMS短信控制系统的稳定性。为了便于介绍,在此以非加密的GSM短信数据通信报文为例,介绍GSM短信通信报文的设计。
一个常用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命令接收自上位机软件。
该数据通信协议发送时通过OpenAT嵌入式API函数adl_smsSend()函数发送。adl_smsSend函数定义如下:
adl smsSend(ptk SmsHandler,Telephone,Message,ADL_SMS_MODE_TEXT)
其中,ptk_SmsHandler为6.2节中短信声明返回句柄;Telephone参数为目标的SIM卡号码;Message为封装好的SMS短信数据通信报文;ADL_SMS_MODE_TEXT表明采用TEXT格式的短信传输。
6.4 数据通信协议的接收处理
对于GSM Modem接收到的短信数据报文的处理,相当于发送短信数据报文的解包过程,主要过程在GetSmsDataPackage()函数中实现。处理后数据发送至上位机软件格式为:
RES:0001,8,30RX1YX2YX3YX4YX5Y6Y7Y
返回数据通过串口发送至上位机,上位机软件直接接收该字符串,即完成短信数据的接收过程。
7 GSM Modem AT命令设计
利用OpenAT *** 作系统自定义AT命令设计接口,定义GSM Modem对上位机的数据通信接口。AT命令声明函数如下:
adl_atCmdSubscribe("AT+SETDIS",(adl_atCmdHandler_t)SetMode,ADL_CMD_TYPE_PARA∣ADL_CMD_TYPE_READ∣0x0041);
其中,参数"AT+SETDIS"为自定义的AT命令接口;SetMode为该AT命令的返回函数;第3个参数为当前AT命令的类型,ADL_CMD_TYPE_PARA为键入参数型,ADL—CMD—TYPE—READ为读参数型,0x0041为AT命令类型值,根据函数规定设置。
在SETDIS命令中,以“AT+SEDDIS=X,Y”类型为自定义命令的访问接口。在返回函数中,第1个参数X作为SMS通信协议的命令字参数,第2个参数Y作为SMS通信协议的数据报文内容参数。SMS数据报文目标接收终端SIM卡号码由“AT+SETTEL”命令预设,该命令定义如下:
adl_atCmdSubscribe("AT+SETTEL",(adl_atCmdHandler_t)SetTel,ADL_CMD_TYPE_PARA∣ADL_CMD_TYPE_READ∣0x0041)}
该命令用于首次设置GSM Modem,将所有接收终端SIM卡号存入Q24PL001内部Flash内,以ID号标识。
上位机通过串口键人“AT+SETDlS=0,"0R1Y2W3R4 Y5G6Y7W"”,则GSM Modem立即向相应ID为0的终端发出数据包为$S000000S0000AA100R1Y2W3R4Y5G6Y7W5B#完整数据。
8 上位机软件的 *** 作实现
相对于复杂的数据报文运算,以及复杂的AT命令发送GSM短信数据包的上位机软件系统来说,将短信数据报文封装进GSM Modem后,对GSM Modem的控制 *** 作变得简单,只需要一条简单的AT命令,即可实现非常复杂的短信数据包的传输。同样对于接收到的数据,GSMModem完成数据包解包后,立即通过RS232串口输出简洁的响应字符串,大大简化了上位机软件的处理。经过对GSM Modem进行短信协议报文封装后的上位机软件处理流程如图5所示。
结 语
在系统稳定性和实时性要求较高的通信领域中,相比在上位机软件中进行协议处理,将GSM Modem进行嵌入式报文封装处理简单而又高效。另外,在很多无人值守的服务端平台,只要保持GSM Modem开机,数据包数据处理即可以直接由GSM Modem完成,而无需上位机电脑开机,既方便了用户 *** 作,又保证了SMS通信系统的稳定性。该设计已经应用于南宁及深圳市智能交通诱导系统中,均取得较好的效果。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)