摘要:本文开发一种基于电力线传输媒介的数据通信终端,该系统完全兼容HomePlug 标准,具有成本低、速度高、保密性好的诸多优势,能够用于构建电力线网络,实现诸如视频点播、VoIP、远程监控等数字化、智能化系统的高速信息交互。网络终端可以完成电力线数据包和以太网数据包的转换,因此便于如同开发一般以太网应用系统一样地实现电力线通信的应用系统开发。
电力线宽带通信技术(PowerLine Communication 简称PLC)是近几年来迅速发展起来的一种新兴的利用电力线网络作为载体的通信技术。运用嵌入式系统和电力线调制解调技术所构建的电力线网络通讯终端,人们可以很方便地在办公室、家庭内部、工业现场轻松地组建起局域网络,成为智能家庭、分布式工业过程控制的一种很好的系统构造方式,具有广阔的应用前景和市场。本应用系统利用电力线终端平台和路由器构建电力线家庭内部网络,实现家电、安全防范及三表的集中管理;对外通过宽带连接Internet,远程终端通过软件就可以对家用电器进行状态查询和控制。具体的构建方式,在每个房间和客厅、厨房中安放一个电力线通讯终端平台,挂载在电力线上形成家庭内部网络,集中管理所有的电器,同时利用电力线调制解调模块连接路由器,通过ADSL 上网的方式,把整个家庭内部网络与Internet 交互,使得远程终端可以通过Internet 网络访问家庭内部局域网。
一、系统的功能与设计
本应用系统实现的主要功能如下:1) 实时监控客厅中的温度,比如:在夏天如果超过33 度,系统会主动控制制冷空调打开;在冬天低于10 度则会打开制热空调。2) 住宅安防系统能够通过连接电力线通讯终端平台和与之互连的GPRS 上传安保信息,比如:当发生有人非法进入住宅,系统会实时通过Internet 网络向事先设置的报警接收终端,如110 报警台、物业服务公司监控室、业主办公室电话或业主手机等,发送预警信息。3) 主人可以通过远程终端访问家用电器,并且实行远程控制,比如开关日光灯、打开电饭煲,这样下班回家后就可以吃到香喷喷的米饭。
为了实现上述功能,利用CPU 模块上LPC2210 的GPIO(通用I/O)口连接继电器控制家用电器的开关,比如:电饭煲、空调和日光灯等;利用芯片外部中断连接安防系统,当系统报警时触发外部中断通知ARM CPU 使用GPRS 发送报警信息;同时,在硬件电路上安装有LED 灯、A/D 转换电路用以实时测试、显示当前各种家用电器的运行状态。该应用系统涉及到电力线通讯平台的编程和PC 的编程两方面。其中CPU 模块(下位机)作为服务器端,使用TCP 作为通讯协议,提供服务。在服务器端收到服务请求后,解析请求,根据不同的请求做出相应的服务。而PC 作为客户端发出服务请求,并且在收到服务器的响应后把具体内容在屏幕上显示出来。在本例中,客户端采用Qt 可视化编程环境。以下,首先介绍Qt 的相关知识,然后再具体分为服务器和客户端具体的对该应用设计进行分析。
二、Qt 介绍
Qt 是一个全面的C++应用程序开发框架。它包含一个类库和用于跨平台及国际化开发的工具。Qt 是一个全面的开发框架,它包括广泛的特征,性能与工具,可以开发高性能,跨平台的客户端,以及服务器端的应用程序。
同时Qt 对不同平台(Unix, Windows, and Mac)的专门API 进行了封装,如文件处理、网络(操作,协议),进程处理、线程、数据库访问等。统一的跨平台API 让程序员们集中精力致力于可增值的技术革新,而无须担心维护和管理现有应用程序多版本的基础结构与界面。Qt 已由成千上成商业与开放源应用程序开发员,在多个操作系统与编译器上进行了测试,奠定了高性能与资源性应用程序的基础。Qt 无须“虚拟器”,模拟层或大容量的运行时间环境。它如本地化的应用程序一样,直接写入低级的图形函数,因而Qt 程序能以源代码速度执行。通过使用 Trolltech 的双重授权模式,Qt 在商业支持并行之有效的框架下,呈现出开放源的所有优势:开放源优势包括一个活动的开放源开发员社团。由于Qt的不间断开发,以及完整的代码透明性,允许Qt 开发员进行“彻底深入地查看” ,进行自定义并扩展Qt 来满足其独特的需求。 商业产品的担保包括客户认可的产品支持,专门的Qt 开发小组,以及一个第三方工具、组件与服务的成长生态体系。
(1)信号
当某个信号其客户或所有者发生内部状态改变时,信号被一个对象发射。只有定义过这个信号的类及其派生类能够发射这个信号。当一个信号被发射时,与其相关联的槽将被立刻执行,就象一个正常的函数调用一样。信号-槽机制完全独立于 任何GUI 事件循环。只有当所有的槽返回以后发射函数(emit)才返回。 如果存在多个槽与某个信号相关联,那么,当这个信号被发射时,这些槽将会一个接一个地 执行,但是它们执行的顺序将会是随机的、不确定的,我们不能人为地指定哪个先执行、哪个后执行。信号的声明是在头文件中进行的,Qt 的signals 关键字指出进入了信号声明区,随后即可 声明自己的信号。
(2)槽
槽是普通的C++成员函数,可以被正常调用,它们唯一的特殊性就是很多信号可以与其相关联。当与其关联的信号被发射时,这个槽就会被调用。槽可以有参数,但槽的参数不能有缺省值。既然槽是普通的成员函数,因此与其它的函数一样,它们也有存取权限。槽的存取权限决定了谁能够与其相关联。同普通的C++成员函数一样,槽函数也分为三种类型,即public slots、private slots 和protected slots。
三、服务器端
在本应用中,电力线通讯终端平台连接家用电器作为服务器端,在实时显示用电器状态的同时,需要构建一个TCP 服务器来为远程终端提供服务,实现远程控制和报警的功能。在基于QF 操作系统的网络协议栈中,由QL4 接口类来实现对L4 协议(传输层)的解析和处理抽象。本应用中需要派生一个QTcp 类,实现传输层的TCP 协议。