该数据通信协议发送时通过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通信系统的稳定性。该设计已经应用于南宁及深圳市智能交通诱导系统中,均取得较好的效果。
上一页 [1] [2] [3] 下一页