食用菌监控系统数据中心的设计与实现
食用菌的工厂化生产效益非常好,但是由于在食用菌栽培过程中,受空气中
的二氧化碳浓度和相对湿度,温度以及光照强度等环境因素影响很大,种植风险
也非常高。为了使食用菌处在适宜的环境下生长,从而有效地提高食用菌的产量
和品质,本课题应运而生。
这篇论文研究基于食用菌监控系统的数据中心的设计与实现。使用到了异步
套接字技术,Protobuf 和 JSON 编解码技术,使用 Python 作为开发语言,Microsoft
SQL Server 作为后台数据库,使用了 Windows Server 作为系统服务器,设计和
实现了一个数据存储、命令发送、策略自执行的数据中心系统。
论文的重点在于对本系统的整体架构的说明、各成员模块的分析与介绍,以
及对数据库做详细设计说明。此外本文还将对选题的背景、研究意义、主要研究
内容和研究成果、开发过程中使用的工具与技术做简要介绍。
关键词:食用菌 数据中心 Protobuf SQL Server 数据库 种植策略
系统概要 3
1.1 选题背景和研究意义 .3
1.2 研究内容与成果 .3
1.3 系统开发及运行环境简介 .5
1.4 开发工具 .5
1.4.1 SQL Server .5
1.4.2 Eclipse5
1.4.3 Python .5
1.5 开发技术 .6
1.5.1 JSON 6
1.5.2 Google Protocol Buffer6
1.5.3 select .7
2. 系统分析与设计 8
2.1 数据库分析与设计 .8
2.1.1数据库需求分析.8
2.1.2数据库设计.8
2.2 数据中心服务程序分析与设计 .14
2.2.1数据中心服务需求分析.14
2.2.2数据中心服务程序架构设计.14
2.2.3 Protobuf 通信协议设计 .16
2.2.4 JSON 通信协议设计 .18
3.系统实现 . 20
3.1 上行数据处理模块 .20
3.1.1模块内数据收发流程.20
3.1.2执行种植策略.22
3.2 下行数据处理模块 .23
3.3 策略管理模块 .25
3.4 数据存储模块 .27
3.5 任务管理模块 .29
3.6 日志记录模块 .31
4.运行环境部署与测试 . 33
署 .33
4.2 数据中心部署 .34
4.2.1 Python 安装34
4.2.2 Protobuf Python 模块安装.35
4.2.3 Pyodbc 模块36
4.3 系统测试 .36
4.3.1控制命令的发送与接收功能.37
4.3.2采集数据的接收与存储.37
4.3.3种植策略的载入与执行.38
5.总结和展望 . 40
参考文献 . 41
致 谢 42
成功种植案例表(tb_good_case),其用途为,在用户结束了一批次蘑菇的
种植时,如果其认为该批次比较满意,并希望记录下该批次的相关信息,可通过
本表来记录。其中记录图片、记录描述、环境数据、操作历史,记录的均为相关
数据存储路径,提供给用户下载和打印。
表 2-12 系统配置表
数据项 类型 说明
conf_key int 传感器 ID 的采集频率
conf_value int 心跳包发送频率
系统配置表(tb_system)内记录本套系统的系统配置参数,通过键值对的
形式存储,涉及的配置项包括但不仅限于:下位机心跳包发送频率,传感器采集
频率等。
根据数据中心服务程序的功能需求,针对不同功能设计了不同的数据库操作
接口,接口申明如下所示:
def transfor_absolute_time( state = POLICY_RUNNING)
def transfor_room_absolute_time( room_id, state = POLICY_RUNNING)
def get_threshold( room_id, datetime)
def new_plant( plant_name)
def insert_room( room_id, room_description)
def insert_sensor( sensor_id, sensor_type, room_id, position = '', state = ON)
def update_sensor(sensor_id, room_id, new_room_id, sensor_type, position = '',
state = ON)
def insert_instance( room_id, sense_time)
def insert_sensor_data( instance_id, sensor_id, value)
def insert_controller( controller_id, controller_type, room_id, state = OFF)
def view_controller( controller_id)
def update_controller( controller_id, state)
2.2 数据中心服务程序分析与设计
2.2.1 数据中心服务需求分析
根据项目需求,系统需要具备以下基本功能:
1) 支持人机交互层向数据采集层发送多种控制命令;
2) 支持人机交互层动态对本服务程序进行参数配置;
3) 支持人机交互层动态配置系统运行日志的记录;
4) 实现本系统动态调用用户预输入的策略,用于配置系统内环境参数约束;
5) 实现本系统对数据库的多种操作 API,包括对数据库内表的增删改查;
6) 确保本系统功能的高扩展性特点,设计一套针对本系统的协议栈;
7) 实现本系统多种日志记录功能;
8) 实现本系统以 RPC 形式开放多种功能函数;
9) 实现数据库定期备份[14]功能;
10) 实现本系统与数据采集层再启动后部分信息同步功能,如:时间同步,配置
同步等;
11) 实现本系统与数据采集层间对多种命令与回馈信息的收发功能;
12) 保证本系统的稳定性,当数据库连接异常时,系统需对数据进行一定程度的
暂存[11]。
2.2.2 数据中心服务程序架构设计
根据对数据中心服务程序的需求分析,最终设计本系统主体部分共由六模块
和四队列组成,如图 2-2 所示。六模块分别为:上行处理模块,下行处理模块,
任务管理模块,策略载入模块,数据插入模块以及日志管理模块。四队列分为:
上行任务队列,下行任务队列,缓存数据队列以及当前执行策略队列。
上下行任务队列内存储了待发送的任务。队列内的任务来源均包括下行处理
模块和上行处理模块,两个队列内部任务的删除则各有一个模块负责。上行任务
队列由上行任务管理模块维护,下行任务队列由下行任务管理模块维护。这样设 计可以避免多线程编程中的资源竞争带来的各种问题,减少对共享资源加解锁的
麻烦。
当前种植策略队列存放了各房间当前应执行的策略信息。这些策略信息被用
于上行处理模块对采集数据的评判标准,也是上行处理模块自动的向数据采集层
发送控制命令的依据。当前种植策略由策略载入模块负责维护。
数据缓存队列内存储了大量采集数据。这些采集数据由上行处理模块负责从
队列尾端插入,并由数据插入模块周期性从队列首部弹出并存入数据库。
上行处理模块主要用于与数据采集层通信。通信内容包括各类控制命令与请
求的发送与应答,以及采集数据的推送等。上行处理模块将接收并解析来自数据
采集层的各类消息,针对不同的消息,模块将执行不同的操作。
下行处理模块主要用于与人机交互层通信。通信内容包括各类控制命令与请
求的发送与应答。下行处理模块将接收并解析来自人机交互层的请求与命令,结 合系统与数据采集层见的通信协议,构造相应的任务,插入到下行任务队列。
原文链接:http://www.jxszl.com/jsj/qrs/2520.html