塔筒监测系统有四个功能模块,一个消息队列中间件和两个数据库组成,两个数据库分别是一个关系型数据库和一个时序数据库,下图解释了各个模块之间的关系:
网页端模块基于前端框架(Angular)实现,其余三个模块都统一采用Python语言实现,这样可以降低系统复杂度,方便系统部署和后续的升级维护。
消息队列中间件拟采用业界广泛使用的RabbitMQ,消息队列的使用可以很好的降低各个模块之间的耦合度,同时提高系统稳定性。
采用两种不同的数据库是为了存储系统种的两类不同业务数据,其中一类数据就是从传感器采集到的原始数据和讲过计算后的数据,这一类数据都和具体的一个时间点有关系,而且数据量很大,后续的很多报表分析也需要基于这类数据进行查询统计,所以采用一个时序数据库用来专门保存这一类数据。另外一类数据就是支持系统运行的各种配置信息,风机的基本信息,组织机构以及人员权限等基础数据,这类数据用一个典型的关系型数据库来存储。
通过光纤环网和每个风机的两个传感器进行通信,将采集到的原始数据直接发送到消息队列,同时还要监测风机的两个传感器以及通信模块是否工作正常,一旦出现通信故障则触发通信异常消息并发送到消息队列。
采集传感器数据有两种方式,一种是自动采集:按照设置好的频率从服务器端发起轮询每次采集一次数据;另外一种是手动实时采集:由操作员在网页端发起实时采集命令,采集模块开始对指定的风机持续采集数据。
系统开始运行后会为每个风机启用一个独立的任务执行自动采集工作,并自动启动,采集频率从关系数据库读取,一旦当前风机的配置信息发生修改,自动采集任务会从消息队列获得通知,然后自动采集任务会从数据库重新加载配置信息并重新启动。
塔筒监测系统最终是要通过塔筒的倾斜方位、倾斜角度、不均匀沉降量、塔筒刚度圆等数据来判断塔筒是否安全,所有这些数据都要依据从传感器采集到的原始数据经过专门的算法计算后得出。
计算引擎通过订阅方式从消息队列获得每一个新采集的传感器数据,结合塔筒高度和塔底基础半径就可以计算出倾斜方位、倾斜角度、不均匀沉降量等数据。
如果获得的传感数据是自动采集任务采集到的,则把计算后的数据和原始数据合并在一起保存到时序数据库。
如果获得的传感数据是实时采集任务采集到的,则把计算后的数据和原始数据合并在一起变成一个新的消息发送到消息队列中,这些消息或被网页端订阅并实时显示给操作员。