数据远程采集系统介绍
系统主要由5部分组成:
设备 | 被监听的设备,这个设备通过UART来广播自身的运行状态 |
采集装置 | 树莓派ZeroW,接收设备广播包,存到数据库(定期打包),并上传云端 |
云端存储 | 阿里云对象存储OSS |
本地下载 | 每天自动下载云端的数据,并删掉过期的数据。在局域网共享数据文件夹 |
上位机 | 通过局域网共享的方式获取所需的数据文件,通过上位机进行数据分析 |
1 设备
本项目里使用的广播包约0.5~2s发一帧,每帧数据约50~400字节,大概是这个量级。
2 采集装置
树莓派ZeroW,这款自带WIFI模块,联网很方便,尺寸也很小,对安装环境的要求较低。
为了避免影响被监听的设备,独立供电,只用GND+RX两根线与设备进行通讯。
默认无通讯协议,只用数据帧的长度来过滤有效广播包,然后直接存储原始数据帧,这样可以提高通用性,后续在本地上位机上进行协议解析。
采用SQLite进行数据存储。数据库中每一条记录代表一帧广播数据(长度不够就补0),一般除了原始通讯数据以外还会把时间信息等其他的一些附带数据同时打包进记录中,便于后续分析。为了提高效率,可以每收到50-100帧数据后再统一插入到数据库中。数据库文件是后续上传等操作的最小单位,每隔一段时间生成一个新的数据库文件,这样一天的数据就可以被打包成若干的数据库文件。
已经存储完成的数据库文件会被放到<待上传>的文件夹中,如果采集装置不联网,那么这些数据库文件就在这个文件夹下一直存着了,如果联网的话,有个数据上传的程序会来扫描这个文件夹,如果找到数据库文件,就会把这些文件上传到云端,然后把数据库文件移到<已上传>的文件夹下。
采集装置上的程序都是用Python开发的。
3 云端存储
选用的是阿里云对象存储OSS,租了40个G的空间(费用5年45元)。用起来很方便,只要通过API函数(Python SDK--oss2)去访问就好了,阿里云的网站和APP上都可以直观地看到上传的数据文件。
4 本地下载
每天早上7点(0点-8点之间下载费用半价,0.25元/G)自动下载云端的数据,并删掉过期的数据。办公室的台式机一直开着,相当于一个服务器了,然后把数据文件夹共享给局域网中的用户,其他人就可以随时访问了。
如果着急要看最新的数据,可以台式机上手动运行下载数据的脚本。
下载脚本也是用Python写的。
5 上位机
上位机主要是做两个事,1、解析数据库中的原始记录,2、数据的统计分析等等。
这个上位机是之前另外一个项目中开发的(C#),它本身可以与设备通讯,进行协议解析,存储解析后的数据,显示数据,对数据统计分析。所以这个上位机天然具有处理原始数据的能力,只需要把原始数据库文件导入到上位机中,然后逐条处理记录就可以了。
局域网中的其他用户把原始数据库下载到本地后,用上位机进行处理。
不过采集到的数据怎么用是灵活的,可以自己写软件进行处理;或者用SQLite Expert直接查看原始数据,这个软件可以把数据导出到Excel中(Excel2007之前最大行数为65,535,之后的版本是最大1,048,576行,用SQLite Expert导出的时候要注意一下)。
后续不会讨论上位机相关的东西,主要是已经超过了数据远程采集的范围,然后涉及的内容也很多。