基于Android的温室环境无线监控系统的设计与实现第5章下.docx

上传人:b****6 文档编号:7952973 上传时间:2023-05-12 格式:DOCX 页数:15 大小:191.49KB
下载 相关 举报
基于Android的温室环境无线监控系统的设计与实现第5章下.docx_第1页
第1页 / 共15页
基于Android的温室环境无线监控系统的设计与实现第5章下.docx_第2页
第2页 / 共15页
基于Android的温室环境无线监控系统的设计与实现第5章下.docx_第3页
第3页 / 共15页
基于Android的温室环境无线监控系统的设计与实现第5章下.docx_第4页
第4页 / 共15页
基于Android的温室环境无线监控系统的设计与实现第5章下.docx_第5页
第5页 / 共15页
基于Android的温室环境无线监控系统的设计与实现第5章下.docx_第6页
第6页 / 共15页
基于Android的温室环境无线监控系统的设计与实现第5章下.docx_第7页
第7页 / 共15页
基于Android的温室环境无线监控系统的设计与实现第5章下.docx_第8页
第8页 / 共15页
基于Android的温室环境无线监控系统的设计与实现第5章下.docx_第9页
第9页 / 共15页
基于Android的温室环境无线监控系统的设计与实现第5章下.docx_第10页
第10页 / 共15页
基于Android的温室环境无线监控系统的设计与实现第5章下.docx_第11页
第11页 / 共15页
基于Android的温室环境无线监控系统的设计与实现第5章下.docx_第12页
第12页 / 共15页
基于Android的温室环境无线监控系统的设计与实现第5章下.docx_第13页
第13页 / 共15页
基于Android的温室环境无线监控系统的设计与实现第5章下.docx_第14页
第14页 / 共15页
基于Android的温室环境无线监控系统的设计与实现第5章下.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

基于Android的温室环境无线监控系统的设计与实现第5章下.docx

《基于Android的温室环境无线监控系统的设计与实现第5章下.docx》由会员分享,可在线阅读,更多相关《基于Android的温室环境无线监控系统的设计与实现第5章下.docx(15页珍藏版)》请在冰点文库上搜索。

基于Android的温室环境无线监控系统的设计与实现第5章下.docx

基于Android的温室环境无线监控系统的设计与实现第5章下

(4)数据显示与绘制曲线

在Android系统下,Android的UI操作不是线程安全的,当多个线程同时操作UI时,会导致线程安全问题,因此Android界面的UI操作都是只能在主线程中执行。

监控终端的数据显示和曲线的绘制在主线程进行,但是在Android机制中,如果一条消息处理超过一定时间,Android就会抛出无响应的消息,为了避免数据处理时间过长和使监控终端开发简单化,在数据显示和曲线绘制部分采用Handler消息传递机制。

Handler主要是实现在新启线程中发送消息,在主线程中接收消息和处理消息[50],如图5.10是通过Handler进行数据显示和绘制的执行过程图。

图5.10Handler执行过程图

如图5.10所示数据处理线程通过sendMessage()方法把Message对象发送到MessageQueue消息队列当中,Looper对象从MessageQueue队列读取Message对象,然后把消息对象送给Handler处理,每个线程只能有一个Looper对象。

在主线程中,温室环境数据通过Handler来接收数据处理线程发来的信息,通过Message获取Bundle对象,从而获取对应的有效数据,最后对温室数据进行显示和绘制曲线。

myMessageHandler=newHandler(){

@Override

publicvoidhandleMessage(Messagemsg){

Bundleb=msg.getData();

envirfo=(Envirfo)b.get("envirfo");

datadisplay(envirfo);

curvedrawing(envirfo);

super.handleMessage(msg);}};

数据的曲线绘制功能是采用Android系统上制作图表的框架AChartEngine。

AchartEngine框架使用简单,如图5.11所示是封装的图表类Curve的成员方法和属性。

图5.11曲线类的方法和属性

如图5.11所示,在Curve类中定义了多个属性和方法,renderer描述的是图表的样式,如曲线的颜色、标题等样式;dataset描述的图表统计数据;draw方法是绘制曲线方法,根据传入的数据对象进行曲线绘制。

3.配置温室环境监控信息

监控终端可以对温室环境监控信息进行配置,其中配置的温室环境监控信息包括温室环境范围修改信息、温室设备状态修改信息、温室监控模式修改信息。

监控终端对温室环境监控信息进行修改之后,向远程服务端发送请求,修改远程服务端数据库中的数据。

监控终端对温室环境监控信息修改后,先把修改信息存储到缓存中,然后由数据上传线程优先把修改信息发送到远程服务端。

4.数据信息的上传

上传的数据分为两大类,分别是温室环境参数数据和配置的温室环境监控信息,上传数据的线程需要对上面两种数据进行分时上传,因此在上传时需要对这两种数据设置上传的优先级。

通过分析知道,配置的温室环境监控信息是最重要的,同时考虑到温室环境监控信息修改频率比较低,因此这两种数据上传的优先级最高的是配置的温室环境监控信息,其次是温室环境因子信息。

配置的温室环境监控信息中的三种数据按温室环境范围修改信息、温室设备状态修改信息、温室监控模式修改信息来上传。

如图5.12是数据上传线程的流程图。

图5.12数据上传流程图

从图5.12中可以看出,当缓存中同时有温室环境因子信息和温室环境监控修改信息时,优先上传温室环境监控修改信息,在数据上传线程中的关键代码如下所示:

if(AlterData.equipmentsize()==0&&AlterData.houseparasize()==0&&AlterData.housemodesize()==0){

if(ReceiveData.size()!

=0){

state=HttpClientUtil.postRequest(receiveurl,ReceiveData.getData());

}

}else{

if(AlterData.houseparasize()!

=0){

state=HttpClientUtil.postRequest(receiveurl,AlterData.gethouseparaData());}

if(AlterData.equipmentsize()!

=0){

state=HttpClientUtil.postRequest(receiveurl,AlterData.getequipmentData());}

if(AlterData.housemodesize()!

=0){

state=HttpClientUtil.postRequest(receiveurl,AlterData.gethousemodeData());}

}

为了能够准确的知道数据是否正确的上传,在代码中添加了校验符state,当数据正确上传后,返回对应上传成功的整数,然后移除缓存中刚上传的数据,当返回-1时,表示没有上传成功,数据需要继续上传。

5.设备控制功能

监控终端具有控制温室设备的功能,温室环境调节设备控制器就是串口继电器,通过控制继电器来控制温室设备。

监控终端通过串口发送开关指令到ZigBee协调器,然后再传输到温室环境调节设备控制器,该控制器使用16路串口继电器便于系统的维护和升级。

当数据处理线程发现温室环境处于紧急状态时,触发设备控制事件,对串口继电器进行操作,并返回操作状态。

对串口继电器操作,有多种组合方式,本文使用“组开”和“组关”模式,如表5.5所示是串口继电器发送帧格式说明。

表5.5串口继电器发送帧格式说明

帧首

设备类

命令

参数0

参数1

参数2

校验和

0x00

0x5A

0x05(组开)

校验和

0x00

0x5A

0x06(组关)

校验和

如表5.5所示,指令发送到串口继电器的帧格式,其命令列的0x05代表一次能使几个继电器吸合,0x06一次能使几个继电器断开,具体哪一个由参数0-2决定,无效的参数建议设置成0x00。

例如当要吸合串口继电器中的Y15、Y13、Y11、Y9、Y6、Y5、Y4、Y3,其他关闭,则参数0的指令为“01111000”,参数1的指令为“10101010”,参数2为“00000000”。

参数0-2的数据在监控终端登录后获取的温室信息,其指令存储在远程服务端设备表中,存储方式统一,如设备表控制为[1xxxxxxx:

xxxxxxxx:

xxxxxxxx]表示打开Y7,其他状态不变。

当监控终端接收到远程服务端的控制命令或现场控制命令后,对命令进行解析,然后发送命令到设备控制器,继电器完成操作后,会立即返回设备状态,让监控终端能够检验操作是否成功。

6.信息的接收与处理

监控终端通过短信接收的信息包括三种,分别为温室环境范围修改信息、温室设备状态修改信息、温室监控模式修改信息。

其流程图如图5.13所示。

图5.13接收控制信息处理流程

在接收到信息时,先要对信息进行分析,如果是温室环境范围修改信息就通知终端修改环境参数范围;如果是设备状态修改信息,查看是控制哪个设备,然后通过串口发送命令到协调器调节温室环境调节设备控制器;如果是监控模式修改信息就通知终端修改监控模式。

在对接收短信进行监听时,需要在AndroidManifest.xml文件中添加监听权限和注册广播,其代码如下所示。

name=".SMSBroadcastReceiver">

priority="1000">

name="android.provider.Telephony.SMS_RECEIVED"/>

name="android.permission.SEND_SMS">

name="android.permission.RECEIVE_SMS">

name="android.permission.READ_SMS">

如上面代码,注册了SMSBroadcastReceiver,当系统接收到短信后就会立即触发onReceive方法,其分析短信的关键代码如下:

Bundlebundle=intent.getExtras();

Objectmessages[]=(Object[])bundle.get("pdus");

SmsMessagesmsMessage[]=newSmsMessage[messages.length];

for(intn=0;n

smsMessage[n]=SmsMessage.createFromPdu((byte[])messages[n]);

}

5.3远程服务端软件设计

本节将对远程服务端功能模块进行设计,对数据进行持久化设计与实现,对远程服务端各个基本功能进行详细设计,并编程实现。

5.3.1远程服务端功能模块设计

根据第三章远程服务端的框架设计和开发方案分析,远程服务端采用MVC分层模式,图5.14是其远程服务端基本功能图。

图5.14远程服务端的基本功能图

如图5.14所示,为系统远程服务端的基本功能图,根据功能将其分为系统管理模块、接收数据与存储模块、查询模块。

在查询功能模块中又包括实时数据查询、曲线绘制、设备/传感器的查询、设备的工作状态、温室作物的信息以及历史数据查询;系统管理功能模块中包括监控终端信息管理、温室信息管理、设备/传感器信息管理、环境参数信息管理以及用户信息管理;数据接收与存储模块包括温室环境数据和配置的温室环境监控信息的接收与存储。

5.3.2数据库设计与数据持久化实现

在对各个功能模块进行设计之前,需要对远程服务端的数据库进行设计和创建,并对使用Hibernate工具持久化进行详细介绍,为实现远程服务端的功能做好准备。

1.数据库的设计

数据库是温室环境无线监控系统关键部分,温室监控系统的温室环境数据、温室设备信息、作物信息、传感器信息、温室信息、温室环境参数范围信息等都需要存储,以帮助远程服务端对温室的管理。

利用数据库可以实现对温室设备状态、传感器信息的统一管理,温室管理人员可以很方便的对温室进行管理,保证温室作物的生长。

以下是对系统的远程服务端数据库表的定义。

(1)温室信息表:

温室信息表包括自动标识、温室名称、温室中监控终端的号码、温室监控模式、温室一些说明,温室信息表的结构如表5.6所示。

表56温室信息表

字段名

字段类型

描述

HOUSE_ID

INT

自动标签

HOUSE_NAME

VARCHAR

温室名称

HOUSE_NUMBER

VARCHAR

终端号码

HOUSE_AUTO

TINYINT

监控模式

HOUSE_COMMENT

VARCHAR

温室表述

(2)温室环境参数范围设置表:

温室环境参数范围表包括自动标识、温室ID、温室的温度范围、湿度范围、光照强度范围、CO2范围。

这些数据能够帮助监控终端查看温室的环境因子数据是否异常,其表的结构如表5.7所示。

表5.7环境参数范围设置表

字段名

字段类型

描述

HOUSE_PARA_RANGE_ID

INT

自动标签

HOUSE_ID

INT

温室ID

TEMPERATURE_MAX

DOUBLE

温度最大值

TEMPERATURE_MIN

DOUBLE

温度最小值

HUMIDIY_MAX

DOUBLE

湿度最大值

HUMIDIY_MIN

DOUBLE

湿度最小值

CARBONDIOXIDE_MAX

DOUBLE

CO2最大值

CARBONDIOXIDE_MIN

DOUBLE

CO2最小值

LIGHTINTENSITY_MAX

DOUBLE

光照强度最大值

LIGHTINTENSITY_MIN

DOUBLE

光照强度最小值

(3)区域表:

为了更精确的控制温室环境,对温室进行分区域,温室分为5部分,即A、B、C、D、E。

其表结构如表5.8所示。

表5.8区域表

字段名

字段类型

描述

AREA_ID

INT

自动标签

AREA_NAME

VARCHAR

区域

(4)温室设备表:

温室设备表包括自动标签、设备序列号、设备名称、设备类型、设备工作状态、设备对应的温室ID、区域ID和设备控制指令。

温室设备表主要帮助温室监控系统控制温室的环境,通过调节设备工作状态来调节环境,其表的结构如表5.9所示。

表5.9温室设备表

字段名

字段类型

描述

EQUT_ID

INT

自动标签

EQUT_CODE

VARCHAR

设备序列号

EQUT_NAME

VARCHAR

设备名称

EQUI_TYPE

VARCHAR

设备类型

EQUT_STATUS

TINYINT

设备工作状态

HOUSE_ID

INT

温室ID

AREA_ID

INT

区域ID

EQUT_INSTRUCTION

VARCHAR

设备控制指令

(5)温室传感器信息表:

传感器信息表包括自动标签、传感器序列号、温室ID、传感器名称、传感器类型、传感器区域ID、传感器说明。

该表记录温室内传感器信息,管理员可以管理这些数据,其表结构如表5.10所示。

表5.10温室传感器信息表

字段名

字段类型

描述

SENSOR_ID

INT

自动标签

SENSOR_CODE

VARCHAR

传感器序列号

HOUSE_ID

INT

温室ID

SENSOR_NAME

VARCHAR

传感器名称

SENSOR_TYPE

VARCHAR

传感器类型

AREA_ID

INT

传感器区域ID

SENSOR_COMMENT

VARCHAR

传感器说明

(6)温室环境参数信息表:

温室环境参数信息表包括自动标签、传感器ID、温室ID、环境参数值、数据的时间。

该表就是存储监控终端发送来的数据信息,其表的结构如表5.11所示。

表5.11温室环境参数信息表

字段名

字段类型

描述

INFO_ID

INT

自动标签

SENSOR_ID

INT

传感器ID

HOUSE_ID

INT

温室ID

INFO_VALUE

DOUBLE

环境参数值

INFO_DATA

DATATIME

时间

(7)作物信息表:

作物信息表包括自动标签、温室ID、农作物名称、农作物类型、农作物栽种时间、农作物收成时间等信息,其表结构如表5.12所示。

表5.12作物信息表

字段名

字段类型

描述

CROP_ID

INT

自动标签

HOUSE_ID

INT

温室ID

CROP_NAME

VARCHAR

农作物名称

CROP_TYPE

VARCHAR

农作物类型

CROP_PLAN_TIME

DATA

农作物栽种时间

CROP_HAVE_TIME

DATA

农作物收成时间

CROP_HAVE_OPERATER

VARCHAR

农作物收成人

CROP_HAVE_WEIGHT

VARCHAR

农作物收成重量

CROP_COMMENT

VARCHAR

农作物说明

CROP_STATUE

VARCHAR

农作物的状态

(8)管理人员登录表:

管理人员登录表包括自动标签、用户名、密码、级别。

该表主要记录管理人员的相关信息,其表结构如表5.13所示。

表5.13管理人员登录表

字段名

字段类型

描述

USER_ID

INT

自动标签

USER_NAME

VARCHAR

用户名

USER_PASSWORD

VARCHAR

密码

USER_GRADE

VARCHAR

级别

(9)监控终端信息表:

监控终端信息表包括自动标签、温室ID、终端登录名、登录密码。

该表主要记录远程监控终端的信息,其表结构如表5.14所示。

表5.14监控终端信息表

字段名

字段类型

描述

AUSER_ID

INT

自动标签

HOUSE_ID

INT

温室ID

AUSER_NAME

VARCHAR

终端登录名

AUSER_PASSWORD

VARCHAR

登录密码

2.数据持久化实现

通过第三章对远程服务端的方案分析,系统的远程服务端使用Hibernate对数据库数据进行持久化,Hibernate持久化框架图如图5.15所示。

图5.15Hibernate持久化框架

如图5.15所示,Hibernate持久化框架演示了Hibernate如何访问关系数据库。

Hibernate从配置文件中读取和数据库相关的信息,通过Hibernate的API对数据库进行相关操作。

在对数据库进行持久化时,首先需要对其进行配置,其配置流程如下:

(1)在MyEclipse中,先使用MyEclipsedatabaseExplorer来连接温室监控系统的数据库(house),配置连接驱动、URL等设置,连接成功。

(2)使用MyEclipse中的HibernateCapabilities功能,远程服务端采用Struts2、Hibernate、Spring整合开发,因此需要在Spring配置文件配置数据源,定义数据源bean,并使用COP0数据源实现,其配置代码如下:

destroy-method="close">

mysql:

//localhost/house"/>

(3)在MyEclipsedatabaseExplorer窗口连接数据库,通过数据库中的表导出实体类和hbm.xml配置文件。

通过Hibernate对数据进行访问时,必须先获取SessionFactory对象,设计直接以配置文件方式对SessionFactory对象进行管理,因此在Spring容器中也要统一配置SessionFactoryBean,其代码如下所示:

com/house/domain/Auser.hbm.xml

com/house/domain/Crops.hbm.xml

com/house/domain/Envirfo.hbm.xml

……..

5.3.3远程服务端基本功能实现

1.接收数据与存储模块

在本章第一节对监控终端与远程服务端的框架进行了整合,并详细分析其数据传输格式。

接收数据与存储模块主要实现接收监控终端发来的数据,并对数据进行识别和存储。

监控终端首先要登录,其远程服务端响应监控终端的登录请求在Servlet中实现,其关键代码如下:

Stringuser=request.getParameter("user");

Stringpass=request.getParameter("pass");

//获取系统的业务逻辑组件

AuctionManagerauctionManager=(AuctionManager)getCtx().getBean("mgr");

intuserId=auctionManager.validLogin(user,pass);

response.setContentType("text/html;charset=GBK");

if(userId>0)

{request.getSession(true).setAttribute("userId",userId);}

try{JSONObjectjsonObj=newJSONObject().put("userId",userId);

//输出响应

response.getWriter().println(jsonObj.toString());}

catch(JSONExceptionex)

{ex.printStackTrace();}

当监控终端登录成功后,通过HouseParametersServlet请求获取温室监控所需数据。

监控终端上传的数据有温室环境因子信息和温室环境监控修改信息,远程服务端对不同请求分别通过ReceiveDataServlet、AlterDataEquipmentServlet、AlterDataHoueseParaServlet、AlterDataHouseModeServlet四个类来实现,完成数据库的操作。

2.查询模块

系统查询模块实现的主要功能包括设备状态、实时数据、历史数据、温室信息、温室农作物信息、设备/传感器信息等,其查询模块的流程图如图5.16所示。

图5.16查询模块处理流程图

用户请求后,请求先直接转到Spring事务处理层,然后通过调用对应的业务逻辑类,再通过DAO类对数据库进行操作并最终显示到JSP页面上。

(1)温室实时数据查询:

远程服务端的实时数据查询使用了Ajax技术,通过异

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2