3.1 总体架构
主程序的流程图如图2 所示。上电开机后程序进入初始化(如判断是否有预设密码),在主窗体中有代表几个不同类型的图标,点击不同的图标按钮可以进入相应的子菜单中,对子菜单进行操作。
图2 主程序的流程图
3.2 主窗体
主窗体要求简单、直观。主窗口只显示分成的几个类型及所需的操作按钮。为了更直观的表示各个类型,分别使用相应的图标来表示,以示区别,并在图标上方的中间显示该类型的名称,并且把选中状态的类型显示为浮动状态。主窗口界面如图3所示。
图3 主窗体界面
3.3 子窗体
3.3.1 "设置"子窗体
"设置"子窗体的界面如图4 所示。
图4 "设置"子窗体界面
(1) 修改密码。
修 改密码时,首先比较用户输入的原密码经过加密后与从Config.xml文件读出的相应信息进行比较,若不同则提示用户重新输入,若相同则再次比较用户两 次输入的新密码,只有两次输入一致才把新密码替换原始密码,然后将新密码加密后重新写入Config.xml文件中,下次登录时使用。修改密码流程图如图 5所示。
图5 修改密码流程图
(2) 添加/移除设备。
加载Config.xml数据并相应填入Combox控件中,选择Combox控件中的的设备名称,然后点击"添加"或"移除"按钮对设备进行增删,并修改Config.xml中对应的值。
(3) 设置服务器参数可以点击"查看IP和端口"从Config.xml中获取IP和端口;点击"修改IP和端口"修改Comfig.xml中的对应信息,并与服务器进行重新连接。
3.3.2 "电器"子窗体
在"电器"子窗体中点击对应的电器设备弹出相应的设备控制面板(如热水器)对该设备进行控制。热水器面板中的初始化函数对设备的温度和状态进行采集并把采集的数据显示到相应的控件上。热水器控制面板界面如图6所示。
图6 热水器控制面板界面
点 击"确定"按钮,根据左边NumericUpDown控件的数值和CheckBox控件来控制热水器的温度和开关、点击"查看水温" 按钮可以从右边的 TextBox控件和CheckBox控件中看到当前热水器的温度和开关状态、点击"返回" 按钮退出。热水器控制程序流程图如图7所示。
图7 热水器控制程序流程图
3.3.3 "抄表"子窗体
可实现抄录电表、水表和煤气表的读数。因为抄表系统只需实现读操作,而没有写操作,所以TextBox是只读属性。界面如图8所示。
图8 "抄表"子窗体
3.4 Internet远程控制
把 家庭网关接入Internet并在"设置"子窗体的"Server"选项卡(见图4)中输入设置服务器的IP 地址和端口号,然后启动网络通信模块,创建 Winsock套接字,绑定IP地址和端口号,服务器了保存了该系统的套接字。以后远程用户通过Internet从服务器获得保存在服务器端该系统 Winsock 套接字并与处于侦听状态的套接字连接,从而对该系统进行控制。 远程控制主机通过浏览器在远端可以实时地控制家用设备,从而实现远程控制的目标。
家庭网关的网络模块主要有两大功能:一方面负责对远程用户控制命令的接收和分析,再根据结果控制家居设备;另一方面通过Internet将用户需要获取的家居设备状态送到远程浏览器。
下面以对热水器的控制为例进行说明。热水器的远程控制界面如图9所示。
图9 热水器的远程控制界面
(1) 获取热水器的状态。
获取热水器的状态是由"获取"按钮来处理的,它获取热水器的在当前的温度和开关状态,并显示在文本框和复选框。
(2) 设置热水器的状态。
设置热水器的状态是由"设置"按钮来处理的,它设置热水器的开关和热水器的要加热到的温度。
发送数据到设备的核心代码如下:
3.5 文件的读写操作
在 文件操作的过程中,因为这里并不是为了纯文本的操作,而只是为了要提取或存储配置的信息,所以需要精确地定位到对应的信息在文件中的位置,为了实现这个要 求,本设计对XML(可扩展标记语文)文件进行了读写操作。XML具有易于编辑、便于管理、适于存档、容易查询等诸多优点。
其中有一个只对文件进行读操作,采用的方法是对XML 文件进行反序列化操作,把XML 文件加载到内存中去。
4 结语
本 文介绍了嵌入式智能家庭网关的软件设计过程,主体界面采用的是Microsoft Visual Studio 编写,应用于硬件上采用触摸屏作为输入输 出设备的系统。Internet远程控制功能给居家生活带来更多安全、舒适和便利。为现代智能家庭常用的一些设备的统一管理提供一个可行的管理框架和实现 方案。