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网络空调控制系统是其应用的一个实例,其它网络家电,嵌入相应协议后就可使用。通过较长时间的可靠性试验和用户试用,目前系统运行稳定,用户反映良好。
评论