随着经济的迅猛发展及生活质量的不断提高,人们对居住环境的舒适度、安全性以及操作的便捷性等要求也越来越高。比如在炎热的酷暑,希望一上班就能享受到空调带来的凉爽;人们旅游在外时,希望能将家中的灯、电视机打开一段时间再关闭以造成有人在家的假象,提高家居的安全性;当小偷破坏车主的汽车防盗报警系统时,能触发另一系统自动给正在外地办事的车主手机或当地警察报警;还有半小时就下班了,现在就将家中电热器打开烧水等等。再比如,现在很多商用空调(如电信基站用的空调)安装在遥远、偏僻、荒芜人烟的场合,这些地方的气候条件非常恶劣,且终年无人职守,要确保里面的设备能正常稳定运行,就必须时刻监控机房中的环境温度、湿度、空调运行状况,当遇到空调发生故障时应能及时、自动向控制中心或值班人员手机报警等。
在这些应用中,通过有线网络(如有线Internet网络和PSTN网络)需要专用网线,实现起来不经济也不方便。由于GSM网络覆盖范围广,用户无需另外组网,且用户数量无限制,因此比起传统的有线集群系统具有无法比拟的优势,加上GSM的SMS功能不受时间、地点的局限,使得利用GSM网络构筑的网络家电的应用前景越来越广。为此,公司于2004年立项并成功开发出基于GSM网络的网络家电-GSM网络空调系统。
2 系统简介
系统示意如图1。
图中系统可分为4部分;(1) PC(包括一个通过串口连接的无线调制调解器)或手机,通过GSM网络发送或接收数据;(2)GSM网络;(3) GSM网关,是PC和家电通讯的桥梁;(4) 网络家电,可以是网络空调、冰箱、电热器具、电动窗帘等(下以空调为例)。
在该系统中,1台PC可带任意多个网关,通讯时根据网关的电话号码(SIM卡号)来识别;1个网关可带128台(受485总线限制)网络家电,根据网络家电的地址来识别。网络家电的高位地址表示家电的类别,如空调为1、热水器为2等,而低位地址是由网关根据各类家电已登陆注册的台数按顺序自动分配的。
网关是整个系统的技术关键,因此下面介绍GSM网关的设计。
3 GSM网关硬件设计
图2是GSM网关原理图。其中D101为89C58单片机;D106、D107一起组成外扩RAM,主要用于存贮网关下所有空调的即时状态信息;GP101的型号为TC35模块,与单片机通过RS232(D102)连接。该模块是西门子为嵌入式设备设计的GSM双频通讯核心模块,支持语音通讯、数据通讯和短信功能,具有GSM07.05定义的标准AT命令接口;D105为EEPROM,用于存储通讯密码、电话号码、空调信息码等,同时起到外部Watchdog作用;X102通过485总线(D101)接网络空调。
由于GSM模块在拨号及收发短信时有较强的射频干扰,因此在设计PCB时应注意抗干扰问题。
4 GSM网关软件设计
4.1 Modem初始化
4.1.1 将Modem给单片机的返回结果码初始化为数字模式(用“ATV0”命令),可简化程序。如在数字模式时铃声的返回为“2r”;而在参数V的默认设置时返回结果为字符模式,因此铃声的返回就变成“RINGr”。(r为回车符,下同)。
4.1.2 因需发送汉字,短信必须采用PDU(protocol description unit)模式(用“AT+CMGF=0r”命令)。PDU模式支持所有的手机。PDU串仅由数字或大写字母的ASCII符组成。中文或中英文混合短信须用UCS2编码方式,短信内容需转化成Unicode码。
4.1.3 在收到新短信时要求Modem提示(用“AT+CNMI=1,1,0,0,1r”命令)以便及时处理。
4.1.4 单片机在收到规定次数的打铃信号后,要求手工摘机(用“ATS0=0r”)
4.2 数据通讯
网关与空调之间,网关是主机空调是从机;PC与网关之间,PC是主机网关是从机。
PC用数据拨号方式(TC35分语间拨号和数据拨号,见参考资料4)和网关建立连接后,必须先验证通讯密码,如密码不对,系统将挂机。密码通过后,用户可对本网络所辖空调进行开停、设置、查询等操作;PC会每隔一定时间发一个命令给网关以表明系统连接正常,如在规定时间内网关没有收到任何数据,则网关认为PC出现故障(如PC突然断电),网关将挂机;PC还可设置网关报警电话号码、通讯密码、短信密码、信息服务中心码等。
网关收到PC命令后,先判断该命令是给空调的还是给网关本身的,如是给空调的,则转发给空调,待空调返回后最终将返回结果发给PC。在转发PC命令给空调时,须等待正在进行的网关扫描空调的命令发送完毕且已返回或延时一段时间才能执行,否则将降低通讯成功率。
PC与网关之间采用UART口通讯,波特率为9600(TC35的波特率是自适应的)。当收到PC一帧正确数据后,对数据的处理我们将其视为一个任务。
程序采用任务堆栈结构,最大任务数10个,超出的部分自动丢弃(一般任务数不会超过3个)。每增加一个新任务,任务压栈:任务数加1,并记下该任务的命令、地址。程序检查目前有无待处理的任务,如有,则依次弹栈处理,每处理1个,任务数减1,直到任务都处理完毕。这些任务包括处理PC命令,转发PC命令给空调,处理空调返回数据,回应PC命令,网关扫描空调,容错处理等。
网关处理完所有任务后(任务数为0),才对已登陆的空调状态进行轮询扫描,同时,每隔一定时间查询一次是否有新空调加入网关,如有,则由网关自动分配空调地址(低位)使其登陆,登录是以信息码区分的,所以不会出现不同空调具有相同地址的情况。
由于既要与PC通讯又要与空调通讯,因此我们将与空调的通讯采用I/O口模拟,波特率为1200。空调数量越多,网关轮询一遍所需时间越长,按照我们的协议100台空调轮询一遍的时间约在550ms*100即1min左右,但这已能满足空调等家电实时性要求不高的场合。网关将轮询时得到的空调状态保存在外扩RAM中,当PC要求刷新所有空调状态时,网关将这些数据按每15台一组整体打包发给PC,这样既提高了PC的查询速度,又保证了空调状态的实时性。
通过PC设定报警电话(如PCModem模块的SIM卡号)后,在网关查询到某台空调发生故障且网关Modem处于不忙状态时,网关会主动向该电话拨号,连接成功后可由PC自动查询到空调故障。也可以短信形式向用户报警。
4.3 短信处理
4.3.1读短信
收到PC或用户发来的新短信时,TC35模块会告知网关该短息的index,如index=0x31(ASCII符),则通过“AT+CMGR=1r”命令可读到该信息的内容。如SMSC的号码是13800765500(顺德地区信息服务中心码),发送方手机号码为13690673365,信息内容为“123空调10开”(123为密码,10为空调低位地址),则网关收到的短信PDU串可以为:08 91683108705605F0 840D 91683196603763F5 0008 4060915135930010 0031003200337A7A8C03003100305F00
单片机读到上述短信后,需要进行以下几项工作:
(1)记录发送方手机号码(上表第6、7部分),以便回复短信;
(2)根据短信编码方式(第8部分),对短信内容进行解析。因编码方式有7位、8位和16位(USC2),解码程序也就不一样(程序略);
(3)进行密码校验,如密码不正确,则直接将其删除;
(4)进行密码校验通过,且短信内容符合相关约定,则将短信命令以特定协议格式转发给相应空调,并将该短信删除。因此,网关收到上面短信后,就将开机命令发给10号空调;
(5)在规定时间内,空调未返回执行结果,网关将重发。如重发3次仍没返回,则识系统通讯故障。
4.3.2写短信
仍以上述短信为例。空调收到网关的开机命令后执行开机操作,并将执行结果返回给网关。如网关判断该返回是回应短信的,则网关以中文短信形式将结果发到PC或用户手机上(此例中号码为13690673365),从而方便而又廉价地实现了对空调的双向短信控制。发触的PDU串为:08 91683108705605F0 1100 0091 6831966037635F 00 0801 107A7A8C03003100305F00
发送短信的格式如表1
经测试(小灵通手机除外),回复短信时,为简化程序,上述第1、2、4、5、6、7、9、10、11部分可用表中的固定字段。
由于网关是用单片机控制来实现短信收发的,因此在对信息内容编码时,需用到GB2312到Uni-code编码的转换表,即对每个GB2312字符,根据它是中文字符还是英文字符分别进行查表转换,这样也就要求单片机的ROM容量要在60k以上。我们使用的单片机才32k ROM,没有外扩,因此程序中的汉字列表只能根据实际使用需要选择2000个左右的常用汉字,这已能满足绝大多数家电控制的要求。
5 结束语
由GSM模块TC35及单片机构成GSM网关,可以很好的完成短消息收发和数据通信,由此构成的GSM网络空调控制系统是其应用的一个实例,其它网络家电,嵌入相应协议后就可使用。通过较长时间的可靠性试验和用户试用,目前系统运行稳定,用户反映良好。