}
3.3 PC端软件设计
相对于Arduino端软件设计而言,PC端软件设计稍微简单些,但由于需要匹配Arduino端的Socket程序,其设计还是比较麻烦的,需要不断的调试程序,寻找bug。最终找到一个比较可行又可靠的设计方案。
PC端的程序设计核心主要由以下四大模块。
3.3.1 多窗体设计
本系统PC监控端有以下三个界面组成:
其一是用户登入界面,用户输入用户名与密码,将输入结果与数据库内的用户表做校对,正确后将进入教室用电一览表界面,否则显示一个提示信息,提示用户重新输入。该界面如图3.7所示图3.7 登入界面
其二是教室用电一览表界面,在该界面中,将依据控制临时表及传感器中的信息来显示一栋楼的教室用电情况,教室名称后的0-3的数据,分别表示教室内的日光灯、电风扇的使用状态,如下表3.2所示。当单击教室按钮后,将进入教室用电控制界面,并将教室名称传递过来。单击退出按钮后,退出系统。该界面中阈值温度的改变,仅会作用于没有进行强制控制的教室。教室用电一览表界面如下图3.8所示。
表3.2 日关灯及风扇状态编码
数据 高位 低位 日光灯状态 电风扇状态
0 0 0 关 关
1 0 1 关 开
2 1 0 开 关
3 1 1 开 开
图3.8 教室用电一览表
其三是教室用电控制界面,该界面是由教室用电一览表见面进入,并接受从中传递而来的教室名。进入该界面后会对传入的教室名称进行解析,获取到该教室的IP,从而达到控制该教室内用电器的功能。该界面有7个按钮组成及一个下拉列表来控制教室内的用电器。如下图3.9所示。
图3.9 教室控制界面
3.3.2 多线程编程
由于在UDP端口监听程序中,Receive方法将会时不时的产生阻塞,等待接收远端的数据,不利于前端界面的交互响应。故本系统需要新建一个线程,用于UDP通信中的端口监听。
在此基础上,由于UDP通信是无连接通信,通信不是非常可靠的,但其在系统资源利用率高的优势下,我仍然选择了UDP协议。同时,为了通信的可靠性,我不得另建一个是启动线程,若两端UDP端口监听端口,系统会自动发送远程监控信息包给对应Arduino控制板,从新建立如图3.10的UDP监听通信环,以防UDP监听通信失败,Arduino控制板处于监听等待,而PC端监听线程则处于无限制阻塞当中,造成系统崩溃。
同时,本系统还建立了一个断开连接线程。当用户退出本系统时,会关闭连接通信线程,启动该断开连接线程。当所有教室都断开连接后,会退出该系统。
线程创建及使用方法如下代码所示,以下代码表示新建了一个线程,该线程运行用户定义的read()方法。
//新建一个线程,启动read方法
Thread th = new Thread(new ThreadStart(read));
th.Name = "udpListener";
th.Start();
th.IsBackground = true;
3.3.3 数据库编程
本系统开发使用了一个数据库UniversityGraduationDesign,创建了一个登入用户表userTable,一个临时教室控制表controlTemp。
userTable包含了用户ID userID,用户名userName,用户密码password以及权限authority。其中用户ID及用户密码用于登入系统,权限用于设置本系统的权限,暂时为了二个级别,一个级别为最高级,可对系统做任何操作;另一个为一般浏览权限,只能查看教室用电信息,无法远程控制教室内的用电设备。 Arduino教室节能装置的开发+文献综述(9):http://www.751com.cn/zidonghua/lunwen_5583.html