手机端
or

欢迎您加入我爱方案网QQ群

1.智能产品外包服务群(311606115)
2.嵌入式项目开发群(491609563)

基于Web的智能居家生活系统监控软件关键技术及实现

徐永晋; 陶万强| 智能居家系统,Web监控,自定义控件,ActiveX,Ajax| 2010-11-29
1240 收藏
分享到: 
每日精选
热门推荐

【中心议题】

  • 介绍了一种基于Web的智能居家生活系统监控软件
  • 论述该软件的关键技术及实现方法

【解决方案】

  • 联合使用ASP.NET2.0的自定义控件技术以及ActiveX技术
  • 模块化软件开发

1 系统简介

家居生活系统集成及网络通信系统结构如图1所示。家庭局域网是一种混合型网络,家庭内部设备通过不同的数据链路,采用不同的通信方式与家庭网关相连。用户要对家电设备进行操控,只需通过手机或电脑向家居服务平台发出指令,家居服务平台把该指令转换成访问家庭网关的协议送网关,再由网关将其转化为特定设备的控制命令送达设备;对于家电设备主动上传的信息,家庭网关会把它组成协议数据后送家居服务平台,家居服务平台通过广域网送客户端程序,对于报警信息还可通过短信平台直接送至用户手机。

在具体实现中,使用一台PC作为Web服务器,通过以太网与自行设计的家庭网关连接,Web服务器与网关采用TCP协议,网关作为TCP的服务器端,其他作为TCP的客户端,在传输本协议数据前必须先建立TCPServer-client连接。家居设备通过家庭内部网络与家庭网关相连。

 

2 系统设计关键技术

在基于Web的智能居家生活系统的监控软件实现中,采用了ASP.NET2.0的自定义控件技术和ActiveX控件技术进行程序设计。利用ASP.NET自定义控件开发技术为不同设备设计的操作模块,可根据用户需求和系统实际配置在Web界面中进行动态加载、显示、控制相应的家居系统设备。利用ActiveX技术可对通信协议进行封装,同时ActiveX的事件触发机制可实现页面信息的实时更新。

2.1 Web服务器搭建

Web服务器是实现Web功能的引擎,向浏览器提供所有的内容,HTML页面、ActiveX控件等。使用最多的Web server服务器软件有2:微软的信息服务器(IIS)Apache,本系统采用IIS5.1作为Web服务器。在浏览器显示ASPX页面的整个过程中, IIS负责处理与.NETFramework交互的工作。

当用户在浏览器上请求调用ASP.NET页面后,IIS将接收这个请求,并识别出将要请求的文件类型为ASPX文件,然后让ASP.NET模块(aspnet_isap.i dll)来处理它; aspnet_isap.i dll接收请求,将所请求的页面实例化为一个ASPX对象,并调用该对象的显示方法;该方法动态生成HTML,并返回给IIS, IIS再将HTML发送给浏览器。

2.2 家庭网关

在智能家居生活系统中,考虑到设备种类的多样性、同类设备个数的差异性,采用了类似于TCP/IP的多级地址分配方案。在本应用中,使用三级地址编码方案,利用分级的地址对家庭内部设备进行细分和识别。

协议数据单元由协议头和SDU组成。其中,协议头包括命令字、请求标志、响应标志、源地址、目的地址等控制信息; SDU中包括相应的设备及状态信息。家庭网关椐据目标地址决定相对应的物理设备,SDU中包含的协议数据转换成设备可接收的操作命令发送给相应的物理设备。

2.3 Web程序设计

本软件的设计主体采用自定义控件加ActiveX来实现,在页面中调用自定义控件和ActiveX控件。其中ActiveX控件负责与家庭网关的命令发送和信息接收;在自定义控件中,维护用户操作界面并调用Active接口函数来访问网关,再根据反馈回的Active事件和参数维护自定义控件UI。程序内部实现原理如图2所示。

 

下面分别介绍加载ActiveX的方法和自定义控件作用及实现。

 

2.3.1 加载ActiveX

ActiveXMicrosoft提出的采用COM(Component ObjectModel)DCOM(Distributed ComponentObjectModel)使软件组件在网络环境中进行交互的一组技术集。

作为针对Web应用开发的技术,ActiveX控件被广泛应用于Web服务器以及客户端应用的各个方面。

在本文中,利用ActiveX技术实现与居家系统中家庭网关的通信与控制。在应用中使用ActiveX控件时,需要将其嵌入在Web浏览器中,而要使用ActiveX控件,需要先创建控件实例并进行初始化,然后才能调用ActiveX的方法和属性。在页面中实例化ActiveX的代码如下所示:

<object id=" IDSUGWCab" classid=" clsid: 76688813-64de-4cd1-87b2-360eab8655e1" codebase="Bin/SUGWUIFAX. cab"></object>

ActiveX控件在应用中的运行过程如下:当客户端浏览器发出请求时,Web服务器向用户浏览器回传内嵌ActiveX控件的页面。用户浏览器接收到服务器信息后,在解释的过程中,先在本地的注册表内进行查询,如果该ActiveX控件已经存在,就通过注册表中的相关信息直接使用该控件;否则,就根据页面中提供的信息从服务器上下载并自动完成在本地的注册与安装。

上述运行过程在原理上和使用上都没有问题,但是由于当前网络中不安全因素使得浏览器厂商常常小心地将ActiveX控件标记为不安全,从而在页面中会出现警告显示控件数据不安全之类的警示信息或者屏蔽ActiveX的运行。为了消除这个错误,在设计时需要在ActiveX中实现IObjectSafety接口。另外,为了实现ActiveX控件的自动下载并减小文件的大小,通常需要将ActiveX通过微软的makeCAB工具包将ActiveX打包成cab文件。

2.3.2 自定义控件

(1)基本设计

考虑到模块化编程和代码复用的需要,及为了简化软件开发的流程,本文中,对于特定的物理设备都设计相应的自定义控件与之对应。采用自定义控件来实现,不仅减少了代码,而且在页面的设计中也可以更方便地根据用户的定制来实现不同界面,以提供更好的用户体验。

通常在Web设计中使用到的都是html的标准控件,或者特定的开发平台提供的控件,ASP.NET提供的以“asp:”开头的控件。但是,在实际应用中可能经常需要使用同一种类型的功能,或者经常使用若干个控件的集合,在这种情况下,自定义控件就显示出它模块化编程的便利性。其实, ASP. NET中提供的以“asp:”开头的控件也是一种特殊的自定义控件,只不过是在开发平台中以标准控件的形式提供给用户。

 

ASP.NET,所有的标准控件都可以作为自定义控件的基类。如果所需的控件只是对某个标准控件做少量的修改或补充,则可以把标准控件作为基类。

在本应用中,因对应的物理设备的差异性和复杂性,无法找到合适的原型,故将自定义控件从.NETSystem.Web.UI.WebControls.CompositeControl类中派生。

CompositeControl.NET 2.0中新增的类,它适合派生多个控件合成的复合控件,因为它会自动为子控件创建命名容器,同时也扩展了对子控件呈现的管理。

设计自定义控件时,首先需要根据设计的需要考虑用户界面的设计以及需要提供的与页面交互的属性。对于本应用中使用的组合控件,由于需要多个子控件,故应先重写CreateChildControls()方法,在这个方法中,先把CompositeControl中的Controls集合(Control类继承)清空,然后,初始化所需要使用到的子控件,并使用Controls.Add()方法将它们加到Control集合中。在子控件初始化成功后,还需要将控件的ChildControlsCreated属性设为true,以避免重复调用CreateChildControls( )方法。由于在CreateChildControls()中定义的控件,只能依次呈现各个子控件,为了对子控件的布局进行符合应用要求的控制,本文还重写了RenderContents()方法,并在其中利用css对控件的实现进行控制。

由于自身状态的维护和实现与页面的交互需要,自定义控件需要公开属性和事件。属性和事件对于桌面程序而言很早就被使用,但是与普通的桌面程序不同的是,由于HTTP是一种没有状态的断开式连接模式,也就是说,客户端向服务端发出请求,服务端作出响应后就不再维持此次请求客户端的信息。而被浏览器解释的HTMLXHTML,作为一种标记语言,也没有状态。在. net之前,编程人员通常采用隐藏输入域、cookie或建立服务器端客户文件等方法来实现状态的维护。现在,.NET引入视图状态(ViewState)来保存和读取控件的状态信息。在本质上,控件的ViewState属性是一个特殊的控件属性,类型为StateBag,在每一个新的页面周期,OnInit时控件的属性就会加载ASPX中声明时定义的初值,LoadViewState时会用从ViewState中读取到的值来覆盖它。然而,除非在上一个页面生命周期中以编程的方式改变了属性,否则ViewState还是初值。由于Control已经写好了将StateBag存取到真正的ViewState的方法,而自定义控件派生于CompositeContro,l故可以直接使用ViewState属性来维护控件状态,并公开部分属性以实现与页面的交互。

(2)自定义控件中的Ajax

本应用中的实现和普通文本中的Ajax有些不同。

Jesse James Garrett的定义中, Ajax中是Asynchronous javascript and XML的缩写,但是在本文中,本应用更侧重于对设备的实时控制和实时反映,故采用的是类似于Ajax的实现方法。

 

在自定义控件内部,通过嵌入JavaScript文件来实现对ActiveX控件函数的调用,同时这样做还有一个附带的好处就是:将控件相关的资源封装在一起可以减少控件与软件项目之间的耦合。在.NET开发中,只需在控件项目中添加所需的. js文件,将其“生成操作”属性修改为“嵌入的资源”,在控件项目的AssemblyInfo. cs中添加. js文件的设置即可。常用做法如下: [assembly:WebResource( "MicrowaveOven. MicrowaveOven. js", "text/javascript")]

通过嵌入JavaScript文件,可以在控件内部实现界面的维护和对ActiveX函数的调用,并可利用JavaScriptDOM技术来管理自定义控件的用户界面。在最后的生成页面中,控件中嵌入的js资源文件通常以类似于<script src=" /WebResource. axd? d=QfRKDnWw93T08KaF3ioSKQ2&amp;t=633313193233609691"type=" text/javascript"></script>的形式存在。值得注意的是,这个WebResource. axd事实上是不存在

,它只是IIS中的一个ISAPI影射。

在引用JavaScript之后,因为状态维护的需要,就需要实现JavaScript程序同控件. cs文件中的变量之间的交互。在.NET,页面文件中的JavaScript程序可以通过数据绑定语法实现对页面后台. cs文件中变量的引用,但是在自定义控件中既没有aspx文件,而且. cs文件和. js文件也是分离的(.NET不支持在分离的JavaScript文件中引用后台变量),这样就必须通过其他的方法来实现JavaScript文件中的程序对. cs文件中变量的访问。本文采用的方法是,在自定义控件内部声明若干个hidden对象,利用这些hidden对象作为“中介”来实现. js文件和. cs文件之间的“通信”,从而实现状态的维护。

最后当ActiveX中有反馈信息时,在页面的JavaScript代码中激发后台事件,在后台事件中修改自定义控件的属性,这样页面刷新后,由于控件的页面生命周期的关系,控件就可以反映出反馈的设备应答信息。与在自定义控件内部的情况有点类似,这里也在页面中添加相应的hidden对象,不同的是,这里使用的是.NET提供的asp:Button控件,该事件的调用将会引起页面的刷新。

从本应用的实现过程可以看出其与Ajax的相同之处就是利用JavaScriptDOM技术来实现控件自身的维护,减少与服务器端的交互。不同的是,Ajax是通过XMLHttpRequest对象来实现与服务器端数据的交换,而本应用是通过JavaScriptDOM来调用ActiveX,发出设备控制命令,并当有设备响应时才刷新控件。

3 结束语

本文结合国家科技部863项目“家庭生活支援多机器人系统”(项目编号: 2007AA041604)中的实际设计,讨论了一种利用ASP.NET自定义控件技术和ActiveX技术实现智能居家生活系统监控软件的实现方法。采用该方法,代码可复用性强,可以提高软件开发速度,适应当前软件开发模块化的趋势,提高了可靠性;同时对其他类似的Web控制系统有一定的参考意义。

点赞

深圳市中电网络技术有限公司 Copyright© www.52solution.com 粤ICP备10202284号