总算最后时间把【智能水电表】的项目啃下来了,总体来说这个项目技术难点不是特别多,主要是一个实现串口通讯的问题,其次就是水电表数据协议的解析问题。目前已经开始在部署阶段了,利用休息时间将内容整理如下:
一、需求分析
1、水电表部署在家居中正常使用(当然水电表不是普通的家庭用表,而是智能家居用表,具有无线通信功能);
2、水电表通过无线通信协议将数据发送到家庭网关中;
3、家庭网关通过串口与PC机相连,通过串口通讯发给PC机接收;
4、PC机通过串口接收到网关传来的数据,进行解析显示,并存储在MySQL数据中(如何配置数据库已经在前面的文章给出,http://blog.csdn.net/rocket5725/archive/2010/01/05/5137152.aspx);
5、JSP页面读取MySQL中的数据,并显示;
6、烧录机顶盒内核,将JSP页面显示在电视机中。
二、串口编程
本项目的技术难点主要是获取串口数据,并依据现有的通信协议对数据包进行解析并显示。之前有做过类似的串口编程用于WSN,但是现在才发现代码冗余量太大,而且不易于扩展,现在将总体过程整理如下:
2.1 创建SerialPort实例
该步骤可以按照如下方式创建,当然也可以直接在工具箱中拖进SerialPort。
2.2 列举可用的串口名
窗口首次加载时,我们将获取计算机上所有可用的串口名称并将这些名称添加到ComboBox控件里面。双击窗体实现Form1_Load事件处理。
按照以下的方法经常会出现问题(比如不能获得正确的串口名称),后面通过查阅资料得出了以下的一个解决方案,首先需要引用Microsoft.VisualBasic,用以下遍历SerialPortNames,获得所有的串口:
注意还要添加DataReceived 事件:
2.3 打开串口
选择串口名后,用户点击【连接】按钮以打开所选择的端口,代码实现如下:
2.4 断开串口连接
断开串口连接只需要调用一个方法即可。