# 立筒仓物料管理系统
------
## 背景简介
随着物联网技术的发展和移动终端的普及,**立筒仓测量系统**的用户希望能够利用移动终端或者电脑时刻获取立筒仓信息和服务,想要实现用户的需求,就需要解决物联网硬件设备与各种操作系统和平台间信息如何交互问题。
![Image text](https://github.com/sdzjc070/Project_0001/blob/master/image/%E7%99%BB%E5%BD%95.png?raw=true)
### 1. **体系结构设计**
本项目设计出的物联网框架由四个层次构成:分别是设备感知层、基础服务层、数据传输层,软件应用层:
![Image text](https://github.com/sdzjc070/Project_0001/blob/master/image/%E6%9E%B6%E6%9E%84%E5%B1%82%E6%AC%A1%E5%9B%BE.png?raw=true)
**设备感知层**:由一系列传感器装置组成的测量设备和由无线模块组成的控制设备构成,用于搜集立筒仓内监控数据并发送。测量设备收集温度、湿度、激光测量传感器收集的数据,控制设备对测量数据进行计算并组装成指令信息使用串口发送出去。
**基础服务层**:为整套系统架构的核心,本论文将服务程序编写为Windows服务程序安装在企业办公电脑中,用于组装指令和解析数据,将数据保存在本地Sqlserver或者MySql数据库中。同时分别给Windows客户端程序和ReactNative手机程序提供API接口。并且本层接收应用层的远程控制请求,对获取到的立筒仓测量信息进行分析处理,提供给应用层进行数据访问和远程控制两大主要功能。
**数据传输层**:在传输层中有两套传输方式,由于Windows客户端安装在企业本地电脑中,所以利用Microsoft Message Queue消息队列传输消息。当用户利用手机通过互联网进行远程控制和访问数据时,使用MQTT方式传输,在此层中搭建MQTT代理服务器。这样设计的好处是保证了有网情况下,可以通过Windows客户端、手机等方式远程控制。无网情况下,可以直接使用Windows客户端进行操作,满足最低要求。避免了在无网环境下,设备不能使用的情况。
**软件应用层**:基于之前的第一层感应层和第二次服务层,系统获取到了料仓中的物理参数和数据分析之后的详细数据。为了能够通过应用程序实现远程控制,同时对数据进行更加人性化的展示,本框架设计了基于C#的Windows客户端和基于ReactNative的Android手机程序,同时为用户提供风格一致,操作简单的应用界面。通过数据分析计算,Windows客户端绘制出立筒仓物料形状的二维图像,更加直观的展现数据。
### 2. 开发环境
| 名称 | 说明 |
| -------- | -----: |
| IDE | VS2017 |
| 开发语言 | C# |
| 协议 | MQTT |
### 3. **Windows服务设计与实现**
Windows服务主要用于运行在Windows系统后台。解析无线模块接收到的硬件设备传来的指令和数据,将需要保存的数据保存在本地数据库中。组装控制信息指令通过无线通信模块发送给测量设备。Windows服务程序设计为开机启动,所以每时每刻给Windows客户端程序和手机程序提供访问接口。
![Image text](https://github.com/sdzjc070/Project_0001/blob/master/image/%E5%8A%9F%E8%83%BD%E6%A8%A1%E5%9D%97%E5%9B%BE.png?raw=true)
### 4. **Windows客户端设计与实现**
立筒仓测量系统Windows客户端,安装在企业计算机中,用户使用客户端通过消息队列向Windows服务程序发送和接收各种操作指令,并将获取到的信息显示在客户端页面中。用户通过客户端可远程控制工厂立筒仓中安装的测量设备,进行盘库和清洁镜头操作。实时监控盘库进度,清洁镜头进度等信息,以此方便用户获取立筒仓中物料的体积,温湿度等数据, 系统功能架构设计。
客户端提供给用户两个主要功能模块:
1、远程控制料仓盘库设备。用户可以控制设备进行盘库、清洁镜头操作。用户点击盘库或者清洁镜头按钮,控制设备进行操作,在这过程中客户端每隔半分钟向控制设备发送请求状态指令,获取实时的设备信息。等到设备回复当前状态之后,客户端更新软件界面,显示设备最新的状态和操作进度。当盘库完成,客户端自动获取设备的测量信息,并保存在数据库中。
2、历史数据查看与分析。用户可以查询历史记录,对测量数据进行评价和分析。用户可以查看不同设备的历史记录,并通过软件对测量的信息进行计算,展示出料仓中的物料表面形状。对一段时间内的数据信息进行统计,以图表的形式形象的展示给用户。
整个软件提供给用户方便的操作,代替人工对立体筒仓进行盘库,保证了人员的安全,提高了盘库的准确性。同时将测量结果保存在计算机数据库中,保证数据的安全,方便员工实时查看。其中数据分析功能,更好且直观的呈现给用户立体筒仓内物料的高度,料面的形状。
![Image text](https://github.com/sdzjc070/Project_0001/blob/master/image/%E5%AE%A2%E6%88%B7%E7%AB%AF%E5%8A%9F%E8%83%BD%E6%A8%A1%E5%9D%97.png?raw=true)
### 5. 功能展示
**4.1** 立筒仓测量
立筒仓远程控制测量,俗称盘库,盘库具体流程图:
![Image text](https://github.com/sdzjc070/Project_0001/blob/master/image/%E7%9B%98%E5%BA%93%E6%B5%81%E7%A8%8B%E5%9B%BE.png?raw=true)
**4.2**客户端主界面
![Image text](https://github.com/sdzjc070/Project_0001/blob/master/image/%E7%B3%BB%E7%BB%9F%E7%95%8C%E9%9D%A2%E5%9B%BE.png?raw=true)
**4.3**仓内数据实时监控
![Image text](https://github.com/sdzjc070/Project_0001/blob/master/image/%E5%AE%9E%E6%97%B6%E7%9B%91%E6%8E%A7.png?raw=true)
**4.4**历史测量数据管理
![Image text](https://github.com/sdzjc070/Project_0001/blob/master/image/%E6%95%B0%E6%8D%AE%E7%AE%A1%E7%90%86%E5%9B%BE.png?raw=true)
**4.5**仓内物料图像
![Image text](https://github.com/sdzjc070/Project_0001/blob/master/image/%E6%B5%8B%E9%87%8F%E4%BA%8C%E7%BB%B4%E5%9B%BE.png?raw=true)
### 6. 目录结构
> * MyTest 服务端代码
> * Warehouse 客户端代码