小 T 导读:上海嘉柒智能科技有限公司致力于电力行业线下线上一体化运维,为此提供整体解决方案。业务包含电力运维,智慧路灯,隧道一体化等。其电力运维平台数据库使用的是TDengine,采用TDengine后,存储空间大为节省。
业务场景
嘉柒智能的电力运维平台嘉能云,专注于线下线上联合运维,具有海量设备接入能力、数据分析和计算能力,其中电力运维平台数据库使用的是TDengine,在数据层面包含有:数据采集,数据传输,数据存储,数据分析。
数据采集:设备多种多样,生产研发采集设备及通讯管理机的厂家也非常多,这种场景特别适合TDengine的“一个设备一张表”模式。厂家的设备都是根据规约来生产的,电力规约通常有电力协议有许多比如(IEC101、103、104国内电力调度协议)、61850(国际通用),还有一些其他的比如Modbus-RTU、CDT等。而这些协议包含几种数据:遥测、遥信、遥脉、遥控、遥调等,这些数据都由一个或多个点表(点表包含测点类型及测点数量多有不同)上报,采集频率一般是五分钟(根据被监控设备的重要性及其需要的反应时间来确定),随着设备量的增加,数据量还是相当庞大的。
遥信:要求采用无源接点方式,即某一路遥信量的输入应是一对继电器的触点,或者是闭合,或者是断开。通过遥信端子板将继电器触点的闭合或断开转换成为低电平或高电平信号送入RTU 的YX 模块。遥信功能通常用于测量下列信号,开关的位置信号、变压器内部故障综合信号、保护装置的动作信号、通信设备运行状况信号、调压变压器抽头位置信号。自动调节装置的运行状态信号和其它可提供继电器方式输出的信号;事故总信号及装置主电源停电信号等。在TDengine中,此种类型的数据比较适合使用bool类型。
遥测:遥测往往又分为重要遥测、次要遥测、一般遥测和总加遥测等。遥测功能常用于变压器的有功和无功采集;线路的有功功率采集;母线电压和线路电流采集;温度、压力、流量(流速) 等采集;周波频率采集和其它模拟信号采集。在TDengine中,此种类型的数据比较适合使用float类型。
遥控:采用无源接点方式,要求其正确动作率不小于99. 99 %。所谓遥控的正确动作率是指其不误动的概率,一般拒动不认为是不正确,遥控功能常用于断路器的合、分和电容器以及其它可以采用继电器控制的场合。在TDengine中,此种类型的数据比较适合使用bool类型。
遥调:采用无源接点方式,要求其正确率大于99. 99 %。遥调常用于有载调压变压器抽头的升、降调节和其它可采用一组继电器控制具有分级升降功能的场合。在TDengine中,此种类型的数据比较适合使用float类型。
遥脉:遥脉往往是累积量,通常用于尖峰平谷时期的电度量采集(分为有功电度、无功电),电压暂升、暂降等。在TDengine中,此种类型的数据比较适合使用double类型。
系统设计
数据传输:数据传输方式,多采用RJ45口传输,或者sim卡无线传输,这取决于监控站允许的网络环境,如果是串口,则加一个转换设备将串口转为网口数据
数据分析:嘉能云电力运维平台,针对不同站具体的情况,提供相应的数据分析服务。常见的数据分析有:模拟量越限、异常开关、电气火灾、用电分析等等,紧急情况将第一时间通知到电力运维负责人。TDengine的降频和流式计算功能,为此种场景,提供了极大的方便。
数据存储:接入站点众多,每个站点有多个设备,每个设备有多个测点,采集时间间隔小。在这样的情况下,数据量已经非常庞大了,必须要有一个可靠性高,能快速插入、查询大量数据的数据库。考虑到数据库的方便使用,数据库性能,以及语言环境;我们开始尝试使用TDengine,并且用python作为执行快速插入/查询的client。
本平台支持公网接入或平台接入两种接入方式: 公网接入数据解析,数据传输皆在云端完成,平台将云端数据通过消息队列订阅下来,且在订阅服务中,植入TDengine操作代码,将接收到的设备三遥数据直接存入TDengine,避免数据流转时间过长。平台直接接入设备,嘉能云平台具备协议解析能力,能直接将设备上传的字节流数据解析出来,再存入TDengine。
数据存储结构:在TDengine数据库中,存储方式我们采用站名为数据库名,表名为设备名,一个设备一张表,以冻结时间为主键,以点表测点标识符为字段名的模式。
由于接入设备各不相同,在接入设备之前,我们为每个设备创建物模型,相同物模型的设备归为一类,相同站归为一组,再通过数据库同步到TDengine生成相应的设备表。使用TDengine的超级表,可以实现对同一类设备的统一管理。
Show databases;
select * from da00012829 limit 1\G;
数据量写入:在决定使用TDengine之前,我根据:
1)十个站一千个设备;
2)五分钟采集上报一次;
3)一个设备两百个测点;
4)云端接入的情况,
做了一下简单测试:一千个设备一千张表,每张表200个field,也就是20万个测点值要分一千次,存入TDengine,经持续的插入测试,数据并无丢失,且运行稳定。
下面是Log记录:
数据查询和展示
数据查询:在数据查询方面,用于数据分析的数据查询,我们觉得数据分析完全在代码层处理是非常慢的,尤其是在数据密度大,分析数据时段长的时候,这会很影响用户体验,TDengine除了可以快速插入数据,另外一个重要的点就是可在数据库层面将数据预处理(过滤、填充、时间段筛选、数据查询密度等),且速度快。
查询举例:观察一个月内的电压情况,查询出相关设备的电流电压,以及产生的告警;综合分析。根据采集间隔计算:时间范围30天43200分钟,密度为5min一个点,则是8640个值,三相电压则一次返回三组数据。
在接口中嵌入TDengine时序稀释数据查询代码示例,做到即时查询即时返回:
部分设备测点同比分析示例:
使用感受
TDengine确实是一款不错的时序数据库,开源、高效的存储和查询,存储空间大为节省。最开始只是关注插入和查询性能,数据的压缩率确实给了不少的惊喜,大约11%,节省了不少的存储空间。
connection的人性化、轻量级的软件、每种语言的样例程序,在安装包中都/examples中都可以找到。
未来优化建议
TDengine数据库的链接对象处理机制还有待提升,希望2.0版本之后能够改变。
在数据库查询方面:希望查询能够更加灵活,且能更多的分担代码计算的压力,这也将使TDengine在项目中的地位越重。
作者简介:张灏,上海嘉柒智能科技有限公司研发工程师, 主要从事电力运维平台开发与应用及底层数据接入,近年专注于数据应用与能耗分析。