基于电力线传输媒介的通信终端设计
首先使用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 发送开启或者关闭空调的命令。并根据服务器端的执行结果修改空调开关状态栏显示。
五、结论
在实际的测试中,服务器端运行在实验室,连接有日光灯、电饭煲和空调。客户端运行在寝室中。本应用在实现所有功能的基础上,电力线终端作为服务器连续开机一周,并进行高流量的负荷测试,能够稳定运行,所有功能均表现正常,没有发生故障。从而验证了本终端的稳定性和该智能家居应用的可行性。
评论