发动机缸孔镗孔加工表面粗糙度预测的实现
发动机缸孔镗孔加工表面粗糙度预测的实现
mw1950pub
由创刊于1950年的《金属加工》(包括冷加工和热加工两刊)和金属加工在线(mw1950.com)共同运营,汇聚新闻、技术、产品、市场等内容,纸媒、网媒、活动与服务四位一体,是该领域一流的信息服务平台和推广服务平台。
☞ 这是金属加工(mw1950pub)发布的第 17032 篇文章
编者按
机加工过程中为保证产品质量,传统的方法是通过频繁抽检、过程能力管控等方法来实现。随着机器学习以及各种预测模型框架的发展,通过分析采集到的过程参数来实时预测质量结果成为可能。以缸孔表面粗糙度的预测为例,介绍整个数据采集、分析及建模过程,通过对表面粗糙度的预测为其他尺寸、形状特性的预测积累经验。
2.1 预测原理 预测模型建立过程如图 1 所示。机械加工过程中 有经验的操作人员可以通过观察机床的振动、加工过程中的切屑形式、切削液的温度以及感受环境的温度来判断加工过程是否正常,因此我们可以通过各种传感器来收集加工过程中不同阶段的振动、功率、温度和切削液流量的变化等 来评估加工出来产品的质量是否与正常产品有区别。如果通过大数据统计这些已知的过程变量并且收集足够的对应的产品测量数据,就可以通过机器学习的方法找到这些变量与产品质量的关系,从而通过实时收集这些过程数据计算出将来产品的质量。
2.2 表面粗糙度预测实现方法
本文以发动机缸孔镗孔表面粗糙度的在线预测 为例进行介绍。图 2 为缸孔加工的刀具布置,其中 直径为 138.5mm 的孔径要求表面粗糙度值 Ra =1.8 μ m (即 D 刀 1-1 和 2 加工阶段),是加工过程中的关键 参数。为保证加工合格并且刀具寿命最大化,在该 项目实施前,采取每加工 30 件人工抽检 1 件的检测 策略。
( 1 )系统拓扑 图 3 为预测系统的拓扑示意, 展示了从传感器收集、模型训练到预测提醒的关键 流程步骤。其中数据收集过程中收集到的数据集中 存储在内部文件服务器,模型训练时使用高性能的 AI 服务器对数据进行处理并对原始数据加参数形成 预 测模型。模型形成后调用模型并输入实时采集到 的过程数据进行表面粗糙度预测,然后把预测结果 通过邮件服务发送给相关工程师。设备与网路配置 如图 4 所示。
( 2 )实现过程简述 主要过程如下。 1 )振动采集。通过在机床主轴布置振动传感器 (见图 5 ),利用吉兰丁振动数据采 集卡按照时序采集加工过程中的振动数据,保存图2中D刀1-1加工阶段关键点的振动速度有效值,数据采集之后通过对连续数据进行时序分析,找到从上料设备获取的对应需要预测的产品零件号,匹配之后得到零件振动数据。一个振动方向多个零件关键预测点的振动曲线如图6所示。
图
5
机床主轴振动传感器
2)功率采集。通过增加主轴功率采集模块,采 集到主轴功率信息。图 7 是一个缸孔加工精加工工步 单轴的功率时序信号,图 8 是精加工刀具不同位置信 号对应多个加工过程复合展示的功率信息。加工过 程分为 4 个阶段,参考图 2 中的缸孔加工刀具布置, 通过对加工时序分析,图 8 中第 1 、 3 阶段功率曲线是 加工表面粗糙度值 Ra =1.8 μ m 的缸孔特征时产生的, 这两个阶段对加工质量具有影响力。对时序数据进 行分析,匹配零件号之后获取到加工过程中关键预 测点的功率信息。
3)温度和刀具寿命采集。数据采集工业电脑上配置的Python脚本通过Snap7插件采集加工设备上的温度信息、对应时序的工件号并保存为原始数据表,为后续模型建立提供温度、零件号等数据 [3] 。简单示例代码如下,其中Data为需要采集的温度以及预测中需要用到的零件号等信息。
import snap7
import struct
PLCIP·= "146.91.114.180"
PLCRACK =0#normally 0
PLCSLOT =2 #S200 =1, s7-300=2
readdbaddress=902
read dbstartnum=10
read_dblength=20
def plc_read_data():
plc =snap7.client.Client()
plc.connect(PLCIP,PLCSLOT,PLCSLOT)
dbread_902 = p1c.db_read(read_dbaddress,
read_dbstartnum,
read_dblength)
Data =struct.unpack(">16s",dbread_902[0:16])
plc.disconnect()
ToolLife=Data[0:2]
Temperatruel=Data[3:4]
PN=Data[4:16]
4)实际质量标签数据采集。本文案例验证的是 表面粗糙度数据,通过人工采集方式(见图 9 )来获 取表面粗糙度质量标签数据,采集后的数据录入记 录软件或者直接录入表格,获得以零件号为索引的 表面粗糙度质量标签(实际表面粗糙度值),生成 的数据示例见表 1 ,其中 SN 指零件号, Date Inspect 指录入日期, Time Inspect 指录入时间, RaCylinder4 一列为相应孔号的缸孔表面粗糙度值 Ra ( μ m )。
通过python脚本对所有收集到的数据(振动、 功率、温度、刀具寿命和表面粗糙度)在每个工件 加工完成后自动进行汇总,会获得以零件号为索引 的原始加工过程参数信息记录表。训练阶段收集到 的数据带有质量标签,预测阶段无需质量标签。
5)相关性分析、提取强相关数据,合并汇总 获取 AI 学习基本参数表。对原始加工过程参数信息 记录表进行相关性分析,找到影响表面粗糙度质量 的强相关过程参数,为下一步实施预测选定关键过 程参数。使用 Minitab 对所有采集到过程参数进行分 析后,可以看到当前样本量下各个过程参数与表面 粗糙度的相关程度,具体示例见表 2 。过程参数中, Sp1 指主轴 1 , Sp2 指主轴 2 , VibrationX/Y/Z Rms 分 别指 X 轴 / Y 轴 / Z 轴振动速度有效值, Power Mean 指功 率平均值, Power Peak 指功率峰值。通常选取相关 程度> 0.5 的参数作为预测表面粗糙度的输入参数, 例如可以选取主轴 1 各方向的振动以及主轴 1 的功率 平均值作为表面粗糙度预测模型的输入参数。
6)机器学习,获得模型。通过以上操作,已经 可以实时获得加工过程中的过程数据以及对应的质 量标签,也通过相关性分析找到了相关性强的多个 过程参数,因此通过机器学习可以分层给过程数据 增加参数,拟合出一个线性的预测模型,然后再使 用这个模型对每次加工的过程数据进行运算,获取 预测出来的质量结果。
建立模型使用的编程语言为Python,使用的 模型框架为 TensorFlow2.0 。其中为了训练以及预 测建立了一个 Forecast 的类,类中定义了预测的孔 号 self.holes 、增加参数的网络层数与数量( lay1 , lay2 , lay3 )、层数、训练次数 epochs_num (可 以在调用类时人工定义数量)以及模型保存时的 标记 mark_model 。定义了两个学习函数:其一是 FitRaAandSensor 函数,用于训练原始数据并构建、 保存训练后的模型;其二是 Forecast_im 函数,负 责对收集到的原始传感器数据进行预测,预测后会 输出一个含有预测结果的表格“ Forecast_current. csv ”,表格后续可以通过相关 Python 的编程发邮 件到工程师,以便于工程师及时对现场问题进行响 应。程序如下。
class Forecast_1(object):
def __init__(self,holes,lay1,lay2,lay3,epochs_num,mark_
model):
print("ini Forecast")
# self.inputshape = inputshape
self.holes = holes
self.lay1 = lay1
self.lay2 = lay2
self.lay3 = lay3
self.epochs_num = epochs_num
self.mark_model = mark_model
self.envluelist_cy4 = ["Sp1 VibrationX Rms D-2", "Sp1
VibrationZ Rms D-2",
"Sp1 VibrationX Rms D-3", "Sp1 VibrationY Rms D-3",
"Sp1 VibrationZ Rms D-3", "Sp2 VibrationX Rms D-3"]
global input_shape_len
input_shape_len = len(self.envluelist_cy4)
def FitRaAndSensor(self):
d a t a = p d.r e a d_c s v("R o u g h_S t u d y_D a t a.c s v",
encoding="ANSI")#Rough_Study_Data
LENTH_DF = int(len(data))
hole = self.holes
if hole == 4:
x = data.loc[:LENTH_DF - 1,self.envluelist_cy4]
x = x * 1.0
x.take(np.random.permutation(LENTH_DF - 1))
x_test = data.loc[LENTH_DF - 1:, self.envluelist_cy4]
x_test = x_test * 1.0
y = data.loc[:LENTH_DF - 1, [’RaCylinder4’]]
y_test = data.loc[LENTH_DF - 1:, [’RaCylinder4’]]
model = tf.keras.Sequential()
model_name = "model" + "_hole_" + str(self.holes) + "_"
+ str(self.lay1) + "_" + str(self.lay2) + "_"
+ str(self.lay3) + "_" + str(self.epochs_num)
+ "_" + self.mark_model + ".ckpt"
FitSwitch = "y"
if FitSwitch.upper() == "Y":
model.add(tf.keras.layers.Dense(self.lay1,
input_shape=(input_shape_len,),
activation=’relu’)) # 10 means x 个数
model.add(tf.keras.layers.Dropout(0.1))
model.add(tf.keras.layers.Dense(self.lay2, activation=’relu’))
model.add(tf.keras.layers.Dropout(0.1))
if self.lay3 > 2:
model.add(tf.keras.layers.Dense(self.lay3, activation=’relu’))
#sigmoid
model.add(tf.keras.layers.Dropout(0.1))
model.add(tf.keras.layers.Dense(1))
model.compile(optimizer=’adam’,
loss=’mse’)
model.fifit(x, y, epochs=self.epochs_num)
print(y_test)
print("*" * 50)
print(model.predict(x_test))
model.save_weights(’../QualityRaForecast2022/model_
path/’ + model_name)
# model.save("model_1.h5")
xx = data.loc[:, self.envluelist_cy4]
data["ForecaseCy4"]=model.predict(xx)
data.to_csv("evaluated_cy4.csv")
del model
def Forecast_im(self):
data = pd.read_csv("SensorData.csv", encoding="ANSI")
model_name = "model" + "_hole_" + str(self.holes) + "_"
+ str(self.lay1) + "_" + str(self.lay2) + "_"
+ str(self.lay3) + "_" + str(self.epochs_num)
+ "_" + self.mark_model + ".ckpt"
model = tf.keras.Sequential()
model.add(tf.keras.layers.Dense(self.lay1,
input_shape=(input_shape_len,),
activation=’relu’)) # nums of x
model.add(tf.keras.layers.Dropout(0.1))
model.add(tf.keras.layers.Dense(self.lay2, activation=’relu’))
model.add(tf.keras.layers.Dropout(0.1))
if self.lay3 > 2:
model.add(tf.keras.layers.Dense(self.lay3, activation=’relu’))
model.add(tf.keras.layers.Dropout(0.1))
model.add(tf.keras.layers.Dense(1))
model.compile(optimizer=’adam’,
loss=’mse’)
model.load_weights(model_name)
d f_f o r e c a s t_a l l = p d.r e a d_c s v("S e n s o r D a t a.c s v",
encoding="ANSI")
data_forecast_all =df_forecast_all.loc[:, self.envluelist_cy4]
df_forecast_all["Forecast_CY4"] = model.predict(data_
forecast_all)
df_forecast_all.to_csv("forecast_current.csv")
训练过程中的自动验证界面如图10所示,预测 偏差在 0.1 左右,要求表面粗糙度值 Ra =1.8 μ m 的训 练验证集的预测偏差在 10% 上下,基本满足预测需 求,但仍需要持续改进。
7)实时预测展示。运行模型通过过程参数预测 质量,并对超差进行报警提示。实时预测反馈邮件 如图 11 所示。本预测模型定期可以进行自动学习, 长时间收集到的质量标签数据越多,建立的模型会 越精确。
通过机器学习获得模型后可以实现初步的在线质量预测,当前过程中检测频次从原来30件抽检1件降低到了90件抽检1件。后续随着预测精度的提高,有望继续减少人工抽检频率,大幅提高生产效率与质量水平。
使用本文介绍的方法,可以在线监控加工过程中的功率、振动和温度等相关过程参数,通过机器学习等方法找到过程参数与缸孔表面粗糙度的关系,从而通过实时采集过程参数来预测出缸孔镗孔的具体表面粗糙度值。这种方法可以提前或者及时发现质量问题,降低废品率,以及降低批量生产过程中的抽检频率,从而降低生产成本。本文虽仅以表面粗糙度为例进行介绍,但这种预测方法是基于加工过程中基础的过程参数来做质量预测,发动机零部件批量生产过程中的几何公差的变化均会在这些过程参数上有所体现,因此本文介绍的方法可以拓展到加工过程中其他几何误差的预测,具有很高的实用性和推广价值。
-End-
☞来源: 金属加工 ☞责任 编辑:徐裴裴 ☞ 校对:王瑞艳 ☞审核人:吴晓兰 ☞媒体合作: 010-88379790-801 ☞ 金属加工杂志唯一投稿网址: http://tougao.mw1950.cn/
投稿须知
《金属加工(冷加工)》杂志投稿范围:航空航天、汽车、轨道交通、工程机械、模具、船舶、医疗器械及能源行业的金属零部件的加工工艺方案、工装夹具设计/制造方案、刀具设计/加工方案、智能制造(编程设计、优化)方案,以及机械设备或者工具的维修与改造方案等。
投稿请联系:韩景春,010-88379790-518
投稿须知:请点击 《金属加工(冷加工)》杂志投稿规范
-
2023年血糖新标准公布,不是3.9-6.1,快来看看你的血糖正常吗? 2023-02-07
-
2023年各省最新电价一览!8省中午执行谷段电价! 2023-01-03
-
GB 55009-2021《燃气工程项目规范》(含条文说明),2022年1月1日起实施 2021-11-07
-
PPT导出高分辨率图片的四种方法 2022-09-22
-
2023年最新!国家电网27家省级电力公司负责人大盘点 2023-03-14
-
全国消防救援总队主官及简历(2023.2) 2023-02-10
-
盘点 l 中国石油大庆油田现任领导班子 2023-02-28
-
我们的前辈!历届全国工程勘察设计大师完整名单! 2022-11-18
-
关于某送变电公司“4·22”人身死亡事故的快报 2022-04-26
