基于GSM的学生成绩发布系统的设计
2014-10-21李育阳
李育阳
【摘 要】为了快速、低成本地实现成绩信息发布,本文设计了一套基于PC机、GSM硬件设备的短消息成绩发布系统,在实际使用中,节约了大量人力、物力。
【关键词】GSM;PDU;AT;成绩发布
0 引言
在独立学院中,为了进一步“以学生为本”,做好服务,常需要将成绩通知其家长,特别是学业预警等信息更需要及时通知到家长,以期学校与家长共同努力督促学生顺利完成学业。现在各学院基本上都是采用Web网上查询成绩和通过邮寄信件通告家长。Web 查询的优势是速度快,成本低,省时省力,但缺陷也很明显,就是受控于硬件和网络,这在一些条件较差地区基本上很难实现,也不能体现服务的主动性;而邮寄信件存在着成本过高、耗费人力较多等缺点。随着通信技术的发展和手机的普及,使用短信服务(Short Message Service, SMS)发布成绩信息具有了实现的环境条件。
实现短消息通讯的途径主要有:通过移动网关(短信中心SMSC)发送短消息,到相关电信部门申请网关,不需要附加的硬件,适天大型的网络通讯公司;利用计算机通过AT指令集控制GSM硬件设备(手机或短信猫GSM Modem)发送短消息,适合于中小项目应用;通过服务提供商SP接入进行短信发送,对网站及网络的依赖性较强,较少应用于项目开发。对于学生成绩发布,具有简单、灵活,对外界依赖很小的计算机控制GSM设备发送短消息的方式最为适合。
1 系统框架
系统主要由短消息发送服务器、短消息发送设备(手机或GSM Modem)组成。其中短消息发送服务器与成绩管理数据库服务器通过网络或数据文件达到共享数据的目的,例如EXCEL、DBF等数据文件,这样使成绩发布系统具有良好的独立性和扩充性。
在此系统中,短消息发送设备通过RS232、RS485或USB连接线与短消息发送服务器的串口相联,短消息发送服务器将从成绩管理数据库中获得的成绩数据进行组合、打包生成适合短消息发送设备发送的PDU数据包,通过AT指令集写入串口缓存,由短消息发送设备通过GSM网络将该PDU数据包发送出去,通过收到消息的家长或学生的手机进行解码显示。具体如图1所示。
图1 基于SMS的学生成绩发布系统框架
2 中文短消息的發送原理
2.1 PDU编码
发送短信息有Block 模式、PDU(Protocol Data Unit)模式Text文本模式,后两种基于AT指令集。Block模式因其必须基于制造商提供的驱动进行开发,Text 模式只适于发送英文信息,可以使用任何字符集的PDU模式最适合成绩发布。
PDU串表面上是一串ASCII码,由0-9、A-F这些数字和字母组成。它们是8位字节的十六进制数,或者BCD码十进制数。PDU串不仅包含可显示的消息本身,还包含很多其他信息,如SMS服务中心号码、目标号码、回复号码、编码方式和服务时间等。发送和接收的PDU串结构是不完全相同的[1-2]。下面仅以发送信息编码来举例说明:SMSC号码是+8613800280500,对方号码是13989191641,消息内容是“Hello!”。从手机发出的PDU串可以是:08 91 68 31 08 20 08 F0 11 00 0D 91 68 31 89 19 19 46 F1 00 00 00 06 C8 32 9B FD 0E 01,对照规范,以上数据信息的含义见表1。
表1 PDU串数据信息说明
2.2 AT指令
AT指令是ETSI规范的、用于在电脑上对连接在串口上的手机进行操作控制的控制命令集合。用户可以通过AT指令进行呼叫、短信、电话本、数据业务、传真等方面的控制。其格式一般以“AT”开头,命令后面加上“=”和执行参数表示执行某种操作,如果后缀为“?”即构成读取命令,用于列举出当前设置,例如“at+csca?”则获得当前短消息中心号码。本系统中用到的主要命令见表2所示[3]:
表2 常用AT指令
3 系统实现
因系统内的成绩数据不需要存储历史数据,数据量较小,所以数据库使用ACCESS,系统可以不依赖网络,具有良好的独立性。终端开发工具使用面向对象的可视化开发工具Delphi。对于串口通信,Delphi可以使用第三方控件Spcomm来完成。Spcomm控件具有丰富的与串口通信密切相关的属性及事件,提供了对串口的各种操作,且编程简单、通用性强、可移植性好。
在Delphi7.0中安装Spcomm串口通信控件的方法为:选择Delphi7.0的“Component”菜单,点击“Install Component...”菜单项,然后在弹出的Into existing package属性页中Unit file name输人框中选择Spcomm.pas文件,单击两次 “OK”按钮后,就可以将Spcomm控件安装到Delphi7.0的System组件页上。
Spcomm控件具有以下基本属性、方法、事件:①CommName属性,计算机串口端口号的名字;②Parity属性:奇偶校验位信息;③BaudRate:设定支持串口通信用的波特率;④SendDataEmpty属性:表示发送缓存是否为空;⑤StartComm方法:用来打开通信串口,开始通信;⑥StopComm方法:用来停止通信串行口的所有进程,关闭串口;⑦WriteCommData(pDataToWrite:PChar;dwSizeofDataToWrite:Word)方法是带有布尔型返回值的函数,该函数通过一个写线程向串行口输出缓冲区发送数据;⑧OnReceiveData(Buffer:Pointer;BufferLength:Word) 事件:当输入缓冲区收到数据时,该事件被触发,从而对串口收到的数据进行处理。
基于GSM的学生成绩发布系统框图如图2所示,其中利用Spcomm串口控件通过短消息實现成绩发布的主要源代码:
procedure SendScore;
var
SendScore,StrScore : String;
begin
comScore.StartComm ;//打开串口
comScore.writecommdata(pchar('AT'+#13#10),length('AT'));
comScore.writecommdata(pchar('at+csca?'+#13#10),length(' at+csca?'));//获取短消息中心号
comScore.writecommdata(pchar(' at+csms=1'+#13#10),length(' at+csms=1'));//选择短消息业务
comScore.writecommdata(pchar(' at+cmgf=0'+#13#10),length(' at+cmgf=0'));//选择短消息使用PDU模式
……
SendScore:=PduScore(StrScore);{将成绩字符串StrScore经过PDU编码,例如短信中心号为:13800280500,成绩为高等数学:88;政治:90.,发送给移动电话13989191641,则返回SendScore”0891683108200505F011000B813189191946190008A91C9AD87B4965705B66003A00380038003B653F6CBB003A00390030002E”,长度为42}
……
comScore.writecommdata(pchar('at+cmgs=42'+#13#10),length(' at+cmgs=42'));//
comScore.writecommdata(pchar(#62+SendScore+#26),length(SendScore)+2);//具体短消息内容以>命令开始,结束以Ctrl+Z结束
……
End;
4 总结
目前,该系统在期末成绩发布工作中已成功使用,平均每小时可以发布600名学生成绩信息,达到了很好的效果。与邮寄信件相比,节省了人力、物力,实现了无纸办公,同时获得了Web网络发布的及时与快捷的优点,也为学院树立了良好的服务形象。
【参考文献】
[1]龚建伟.Visual C++/Turbo C串口通信编程实践[M].北京:电子工业出版社,2004,10:266-286.
[2]雷勇.PDU分析与手机短信控件开发[J].电力系统通信,2004,24(12):23-261.
[3]Siemens Corporation.AT Command Set Siemens Engines Version 03.10[S].2002.
[责任编辑:杨玉洁]