数控机床时序数据存储与查询系统研究*
2019-08-06陆世民李作康王禹林
陆世民,李作康,刘 璐,刘 文,王禹林
(南京理工大学 机械工程学院, 南京 210094)
0 引言
当前,基于数控机床数据进行机床状态监测以及健康预警和故障诊断研究已成为提升机床可靠性的一大途径[1-2]。对机床状态数据有效存储和管理是开展机床状态监测以及健康预警和故障诊断研究的工作基础[3-4]。众多学者都对数控机床数据存储和管理技术进行研究,刘自然等人基于TDMS数据逻辑方式设计了一套多通道海量振动数据快速存储和查询系统,实现对海量数据的快速存储,但仅研究了振动数据,缺少对多种不同种类数据的研究[5]。刘东洪建立基于Hadoop的机床运行状态信息采集与存储系统,实现对多种不同类型数据的分布式存储[6];徐帆基于以太网的数控群集监控系统,提出一种跨平台的数控集群系统[7],但上述研究都缺少对数据库的实际需求分析和数据库读写和查询功能测试,岳宇宾等基于VisualC++使用Access2003数据库开发了磨床工艺数据管理软件,虽然满足了用户需求,但数据库选型较老,稳定性较差[8],王海涛等根据不同机床技术参数不同,把机床属性抽象为8类,进而通过Access2003建立数据库,但缺少实际应用测试[9]。综上所述,目前开展的数据存储和管理技术研究存在使用数据库较为老旧,缺少数据库分析以及数据功能测试的问题,因此有必要对机床运行状态数据特点、新型数据库和数据存储及测试技术进行研究。
1 数据采集及存储方案
数控机床时序数据存储与查询系统用于机床运行状态监测以及健康预警和故障诊断研究。根据前期调研,该数控机床运行稳定,性能可靠,其较为常见的故障位置为砂轮电主轴的轴承、各进给轴控制系统和上下料装置。因此有必要对这些关键组件状态重点监测。
1.1 存储内容分类
大部分数控机床数据都是机床在某个时间点的状态值,是较为规范的时序数据,虽然单个数据缺少研究意义,但对一段时间的数据进行研究却可以得到很多有用信息。如图1所示,根据研究任务以及数据采集和存储频率差异将数据分成高频数据和低频数据。高频数据是机床关键组件的状态数据,由于运行状态实时变化,需要较高的采集频率。具体包括设备号、数据采集时间、进给轴数据(负载率、位置、温度和进给倍率)、砂轮电主轴数据(编程速度、实际速度、角度、温度、进给倍率和进给速度)、关键点振动以及内置PLC状态(冷却组件状态、机床门状态、润滑状态、上下料机械臂状态等)。
低频数据写入时间间隔从几分钟到几天不等,还需细分成机床状态数据、故障数据、工件数据和砂轮数据。
(1)机床状态数据:存储机床状态信息,便于厂家了解设备生产情况,包括机床号、机床状态(加工、维修和停机)、状态开始时间和状态持续时间等。
(2)故障数据:记录机床故障情况,为健康预警和故障诊断研究提供数据支撑,包括设备号、故障时间、故障编号、故障优先级和故障附加信息等。
(3)工件数据:统计工件信息和各个加工阶段所需时间,便于厂家生产管理,具体包括加工设备号、工件型号、加工阶段和加工时间等。
(4)砂轮数据:存储砂轮型号和砂轮更换时间,便于厂家结合加工过程数据,改进工艺,延长砂轮使用时间,具体包括设备号、砂轮型号、开始时间和结束时间等。
图1 机床运行状态数据分类
1.2 数据采集及存储方案设计
数据采集通过GNC61数控系统内置Socket服务器实现。GNC61数控系统内置通信Server,它与NC内核采用基于共享内存的高速连接,可以读取CNC内核的PLC子系统、硬件子系统和HMI子系统数据。
数据采集方式如图2所示,数据采集客户端创建Socket,设置数控机床IP和端口号,建立和数控系统Socket Server的通讯,根据通信server要求发送xml形式的请求字符串,通信Server解析请求,将所需信息再以xml形式发送给客户端,客户端解析xml格式的信息,得到所需的各项数据。
图2 运行状态数据采集流程
根据数据采集方式和数据存储要求将采用图3所示数据采集及存储方案。数据采集及存储程序按设定频率不断循环。数据采集及存储客户端首先采集机床运行状态,根据结果将机床状态录入机床状态数据库,如果机床未加工并发生故障,采集故障数据,对比故障发生时间和故障号等信息判断是否是新的故障,将新的故障数据入机床故障数据库,开始新的循环。如果机床正在加工,对砂轮数据进行采集,对比前后两次数据,判断砂轮是否更换,如果砂轮数据更新则录入砂轮数据库,然后进行加工过程数据采集和录入。最后加工过程结束,将工件信息录入工件数据库。
图3 机床运行状态数据采集及存储方案
2 数据库分析
由于加工过程数据表是所有表格中数据量最大、数据种类最多且存储频率最高的,因此主要对加工过程数据分析表进行分析。
(1)支持持续的高并发写入,加工过程数据表需存储机床主轴状态、进给轴状态等信息,单次写入数据多,同一时间可能还有其他数据表进行存储,因此,数据库单次存储写入上限还将增加。同时机床状态实时变化,对采集频率要求很高,较高的单次写入量和采集频率都对数据写入能力提出要求。此外,历史数据将长期保存,数据索引不断增加,可能导致数据写入能力下降,因此需要数据库具备持续的高并发写入能力[10-11]。
(2)时序数据写入优化,加工过程数据是较为规范的时序数据。时序数据具有写多于读、顺序写和修改少的特点。有必要针对时序数据库进行优化,提高运行效率。
(3)时序数据查询优化,因开展健康预警和故障诊断研究,有必要对故障发生前一段时间的机床运行状态数据进行研究,同时为显示当前产量、平均加工时间等信息,需统计相关表格数据再反馈给前端。因此数据库需要对时序数据查询进行优化,增加查询方式并缩短查询时间。
综合考虑时序数据持续高并发写入、写入优化和数据查询的要求,选择基于PostgreSQL的第三方插件TimescaleDB存储机床运行状态数据。
TimescaleDB通过独特的设计理念优化关系型数据库PosrgreSQL在时序数据存储与查询方面的性能。TimescaleDB提供给用户一张Hypertable,Hypertable由多个按照特定时间间隔和可选的其他分区键分割的存储单元chunk组成。chunk由系统自动划分,数据写入时只需建立一个chunk的索引,确保当前索引能加载在内存中,使其具有持续的高写入能力。Chunk可通过增加服务器扩大规模,使TimescaleDB保持良好的横向扩展能力。此外,TimescaleDB利用智能管理的元数据,减少时序数据查询延时。
3 数据存储和测试
3.1 TimescaleDB数据库建立
数据库建立包括建立PostgreSQL数据库和转换成Hypertable。建立PostgreSQL数据库需录入表格各项参数,包括表格名称、列名称和数据类型等,设置主键和外键,表格主键为自增长序列,确保主键唯一性。
转换成Hypertable需选择用于划分chunk所需列,结合课题需要选择存储数据采集时间的列名称。此外还需建立索引,索引会消耗存储资源,但有助于快速查询所需数据。机床健康预警和故障诊断研究需要根据机床设备号和故障时间查询所需数据,因此以设备号在前采集时间在后的形式建立联合索引。
3.2 数据库写入及查询测试
测试流程如图4所示,数据库端生成测试数据、导出数据到硬盘,数据采集及存储客户端采集数据、进行格式转换并写入数据库表格。
图4 数据采集及存储测试流程
受硬件及时间限制,将模拟30台机床正常加工,每隔0.05s采集一台机床数据,因此单台机床采集频率为1.5s/次,采集时间为2018年1月1日零点至2018年1月15日零点,数据量共计23192001条。
数据采集数据及存储客户端使用python编写,使用关系数据库框架SQLAlchemy完成数据录入、查询操作,主要功能包括:程序初始化,连接数据库,进入循环定时程序,以0.05s/次的频率读取硬盘数据,数据处理,写入加工过程数据表。
表1所示为采用三种不同循环定时方式采集数据所需时间。数据量为10000条,采集频率为0.05s/次,理论时间为500s,但是基于while循环和Threading模块的Timer控件实际所用时间分别是532s和531s,远大于理论时间。因为方法1和方法2每隔0.05s启动数据采集及存储程序,此时计时功能停止,待数据读写完毕,计时功能重新工作,经过0.05s再次启动数据读写,实际单次循环时间由等待时间0.05s和数据读写时间组成,超过0.05s。使用定时任务框架APScheduler时数据采集及存储程序每隔0.05s启动,此时计时功能保持运行,从而实现数据采集及存储程序严格按设定频率进行,因此将采用APScheduler框架实现循环定时执行程序功能。
表1 机床加工过程数据录入时间
为检验TimescaleDB数据查询效果,结合实际需要分别对基于TimescaleDB数据库和PostgreSQL数据库建立的加工过程数据表进行复杂条件查询测试,两个加工过程数据表除使用数据库不同,表格名称、表格索引及表格数据都保持一致。将查询指定设备号的主轴日平均温度数据,为减少误差,进行10次测试,每次测试随机更换设备号。
数据查询测试结果如图5所示,基于PostgreSQL数据库的数据查询所需时间范围在9.8s~10.8s,平均时间为10.2s,而基于TimescaleDB数据库的数据查询所需时间范围在6.5s~7.5s之间,平均时间为7.0s。可看出,在同等条件下,TimescaleDB数据库的数据查询所需时间相比较PostgreSQL数据库的数据查询所需时间更短,在本次查询测试中平均缩短了31.3%的查询时间。
图5 TimescaleDB数据库和PostgreSQL数据库查询时间对比
4 状态监测界面
为实现远程监控功能,降低监控端成本,使用ES6语言建立如图6所示基于B/S架构的状态监测方案,网页端实时显示状态信息,其中实时数据通过数据采集客户端采集处理后直接上传到网页端,历史数据则通过数据库查询处理后上传到网页端。健康预警、故障诊断平台还将对多组历史数据进行特征提取和神经网络训练,并基于实时数据对机床状态判断,将结果实时反映在网页端。
图6 机床状态监测流程
单台机床监控界面如图7所示,将实时显示机床坐标、主轴状态、工件加工过程、各轴温度、机床健康情况等信息,用户可以在直观查看机床的各项指标,从而实现对机床加工状态的有效监测,并及时对机床故障情况采取针对性措施,从而减少损失,提高机床运行效率。
图7 单台机床状态监测界面
用户可通过浏览器端查询数据库数据,为确保数据库数据安全,将建立用户登录验证机制,通过对用户密码通过加盐算法加密,从而防止除用户本人外其他用户恶意登陆,同时建立用户权限管理制度,对普通用户仅开放数据库查询权限,而专业管理人员拥有写入、删除等修改数据库操作相关权限,降低由于误操作导致数据库数据被修改的风险。
5 总结
(1)根据数据采集频率和机床状态监测以及健康预警和故障诊断研究需求对机床运行状态数据进行分类,建立机床运行状态数据采集及存储方案。
(2)基于加工过程数据表对数据库需求分析,提出采用基于Postgresql对时序数据优化的TimescaleDB控件完成数据存储。
(3)根据TimescaleDB控件建立数据库,通过Python编写数据采集及存储客户端程序,使用定时任务框架APScheduler实现严格按照设定频率循环定期执行程序功能,通过查询测试证明TimescaleDB数据库相比较PostgreSQL缩短了查询时间。
(4)基于ES6语言建立网页端界面,实现机床运行状态实时监测功能,并建立数据库安全机制,降低数据库数据被盗和修改风险。