文档详情

基于电力线传输媒介的通信终端设计

宝路
实名认证
店铺
DOC
89.76KB
约10页
文档ID:21919498
基于电力线传输媒介的通信终端设计_第1页
1/10

基于电力线传输媒介的通信终端设计2010 年 11 月 8 日 14:28 维库开发网 摘要:本文开发一种基于电力线传输媒介的数据通信终端,该系统完全兼容 HomePlug 标准,具有成本低、速度高、保密性好的诸多优势,能够用于构建电力线网络,实现诸如视频点播、VoIP、远程监控等数字化、智能化系统的高速信息交互网络终端可以完成电力线数据包和以太网数据包的转换,因此便于如同开发一般以太网应用系统一样地实现电力线通信的应用系统开发电力线宽带通信技术(PowerLine Communication 简称 PLC)是近几年来迅速发展起来的一种新兴的利用电力线网络作为载体的通信技术运用嵌入式系统和电力线调制解调技术所构建的电力线网络通讯终端,人们可以很方便地在办公室、家庭内部、工业现场轻松地组建起局域网络,成为智能家庭、分布式工业过程控制的一种很好的系统构造方式,具有广阔的应用前景和市场本应用系统利用电力线终端平台和路由器构建电力线家庭内部网络,实现家电、安全防范及三表的集中管理;对外通过宽带连接 Internet,远程终端通过软件就可以对家用电器进行状态查询和控制具体的构建方式,在每个房间和客厅、厨房中安放一个电力线通讯终端平台,挂载在电力线上形成家庭内部网络,集中管理所有的电器,同时利用电力线调制解调模块连接路由器,通过 ADSL 上网的方式,把整个家庭内部网络与 Internet 交互,使得远程终端可以通过 Internet 网络访问家庭内部局域网。

一、系统的功能与设计本应用系统实现的主要功能如下:1) 实时监控客厅中的温度,比如:在夏天如果超过 33 度,系统会主动控制制冷空调打开;在冬天低于10 度则会打开制热空调2) 住宅安防系统能够通过连接电力线通讯终端平台和与之互连的 GPRS 上传安保信息,比如:当发生有人非法进入住宅,系统会实时通过 Internet 网络向事先设置的报警接收终端,如 110 报警台、物业服务公司监控室、业主办公室或业主等,发送预警信息3) 主人可以通过远程终端访问家用电器,并且实行远程控制,比如开关日光灯、打开电饭煲,这样下班回家后就可以吃到香喷喷的米饭为了实现上述功能,利用 CPU 模块上 LPC2210 的 GPIO(通用 I/O)口连接继电器控制家用电器的开关,比如:电饭煲、空调和日光灯等;利用芯片外部中断连接安防系统,当系统报警时触发外部中断通知 ARMCPU 使用 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 协议处理抽象本应用中需要派生一个 QTcp 类,实现传输层的 TCP 协议一般基于 TCP 的网络应用程序都要继承 QTcp 类,然后在 ESTABLISHED 状态中添加 子状态完成特定的功能在服务器端,利用量子框架实现一个 QServer 类,是一个活动对象,继承自 QTcp 类QServer 活动对象同客户端 TCP Socket 连接后,进入 ESTABLISHED 状态中,通过调用Recvfrom 函数接收客户端的请求,然后解析请求的服务类型,根据不同请求做出不同的服务。

其软件流程图如图 1 所示:图 1 QServer 活动对象状态流程图服务器端需要提供的具体服务包括:(1)当接收到客户端打开家用电器的请求是,使用 GPIO 口发出电平信号,通过继电器打开相关的电器2)监控客厅中的温度,在夏天如果超过 33 度,则会主动控制制冷空调打开在冬天低于 10 度就会打开制热空调并及时地把空调开关的信息通过 TCP 协议传送给远程的终端3)当有人触发了安防系统,发生外部中断时,使用服务器向客户端发送报警信号并通过 GPRS 给 110 报警台、物业服务公司监控室、业主办公室或业主等,发送预警信息四、 PC 客户端PC 机作为远程客户端,主要的工作是向服务器发出服务请求,并且在收到服务器的响应或者报警信号后把收到的具体内容在屏幕上显示以达到远程控制和报警的功能在本例中,我采用的是 Qt 的可视化编程环境以下介绍客户端的具体功能以及实现:在客户端可视化界面上按下日光灯或者电饭煲按钮,就可以向服务器端发送一个开关家用电器的请求,在服务器端收到请求后就会去执行;同理,按下 A/D 按钮,就可以发送一个读取 A/D 的请求,在收到服务器端采集的 A/D 数值后,客户端就会在屏幕上显示;温度的测量则是每隔两秒就会发送一个请求,读取当前的温度,显示在屏幕上,并且判断是否要打开空调,并从服务器端读取其状态信息,更新空调的开关状态栏,显示在文本框中;当服务器端安防系统检测到有人入侵时,就会向客户端发送报警信号,客户端需要相应修改当前的安防系统状态为报警。

首先使用 Qt 的工具 Qt Designer 设计界面然后进入具体的客户端编程阶段,构造一个窗体类为 TcpClient 类,具体的软件编写如下:TcpClient::TcpClient(QWidget *parent): QWidget(parent){ui.setupUi(this);adsocket= new QTcpSocket(this); //用以传输 A/D 数据的 TCP 通道tempsocket= new QTcpSocket(this); //用以传输温度数据的 TCP 通道applincesocket= new QTcpSocket(this); //用以控制家用电器的 TCP通道securitysocket = new QTcpSocket(this); //用以安防系统报警的 TCP通道QTimer *temptimer = new QTimer(this); //2S 的定时器connect(temptimer,SIGNAL(timeout()),this,SLOT(temp_update()));temptimer->start(2000);connect( adsocket,SIGNAL( connected() ),this, SLOT( ad_request() ) );connect( adsocket,SIGNAL( readyRead() ), this, SLOT( ad_readresult() ) );connect( tempsocket,SIGNAL( connected() ),this,SLOT( lm_request() ) );connect( tempsocket,SIGNAL( readyRead() ),this,SLOT( lm_readresult() ) );connect(appliancesocket,SIGNAL( connected() ), this,SLOT( appliance_request() ) );connect(securitysocket,SIGNAL( readyRead() ),this,SLOT( security_readresult() ) );}动态分配四个 QTcpSocket(Qt 内部对于 TCP 协议的封装类)对象,分别用该类的对象指针adsocket、tempsocket、appliancesocket、securitysocket 来指向这四个对象。

然后定义一个 QTimer 对象,用来实现 2 秒的定时接着对一些信号和槽进行连接,从而完成各个组件之间的通讯,其中: QTimer 对象的 timeout 信号和 temp_update()槽连接、adsocket 对象的connected 信号和 ad_request()连接,adsocket 对象的 readyRead 信号和 ad_readresult()槽同理连接其他的几个 QTckSocket 对象的信号和槽以下,具体描述如何实现温度检测和空调自动控制的功能(其他功能的实现类似,就不赘述):(1)定时器每隔 2S 触发一次,客户端使用tempsocket 连接服务器端后发送测温请求2)接收到服务器的温度数据后在界面上显示,并且根据要求决定是否需要启动空调3)利用appliancesocket 发送开启或者关闭空调的命令并根据服务器端的执行结果修改空调开关状态栏显示五、结论在实际的测试中,服务器端运行在实验室,连接有日光灯、电饭煲和空调客户端运行在。

下载提示
相似文档
正为您匹配相似的精品文档