如何入门机械故障诊断?

admin 泰里仪器网 2025-03-13 14:49 0 阅读

一、如何入门机械故障诊断?

故障诊断其实就干三件事情:

1.数采:采集原始数据,研究轴承一般是使用振动数据;

2.数据预处理和特征提取:预处理保存平滑处理、降噪等;特征提取分三个域,时域特征、频域特征、时频域特征。分别都有对应的算法。

3.搭建模型,基于提取到的特征数据进行故障识别、诊断。

故障诊断常用的数据集就是美国西储大学轴承数据集。在我的专栏里有链接。

好了,下面推荐入门的两本书籍,这两本书都配套源码,不仅可以学习理论,而且可以上手操作:

第一本:

第二本:

其中,第一本书有配套的光盘,可以用Matlab直接跑代码。

建议用书里的算法,基于西储大学的数据集,把代码都跑一遍,搞懂代码背后的算法。

比看20篇注水论文好使

二、ecu诊断接口故障?

汽车ECU检测接口故障指的是通讯电路有问题。其故障的原因是调节器脏污、受潮,导致充电电压过高;电源极性接反;在充电的同时接通起动机。

发动机在运转过程中,蓄电池接头松脱致使发电机直接向ECU供电;工作过程中的油污、水、灰尘引起电源线路连接部位漏电搭铁等。

三、大佬们,没有故障数据怎么做故障诊断啊?求救!?

在使用深度学习对机械系统或电气系统进行故障诊断时,如果没有大量的故障样本,可以使用Simulink 生成故障样本数据。当然也可以使用更多的其他的优秀软件进行故障样本生成,还可以使用数字孪生技术等等,但 Simulink 相对来说还是比较简单的。本例说明如何使用 Simulink 模型生成故障和健康数据用于开发状态监测算法,使用传动系统模拟齿轮故障、传感器漂移故障和轴磨损故障运行环境为MATLAB R2021B。

传动系统模型

传动系统模型使用MATLAB Simscape Driveline模块对简单的传动系统进行建模,传动系统由扭矩驱动器、驱动轴、离合器和连接到输出轴的高低档齿轮组成。

传动系统包括一个监测外壳振动的振动传感器,套管模型将轴角位移转换为套管上的线性位移,外壳被建模为一个质量弹簧阻尼系统,并且从外壳测量振动(外壳加速度)。

故障建模

传动系统包括振动传感器漂移、齿轮齿故障和轴磨损的故障模型。通过在传感器模型中引入偏移,可以很容易地对传感器漂移故障进行建模。 偏移量由模型变量 SDrift 控制,SDrift=0 表示没有传感器故障。

轴磨损故障由可变子系统建模。在这种情况下,子系统变换会改变轴阻尼,轴阻尼由 ShaftWear 控制,当ShaftWear=0 时表示没有轴故障。

通过在驱动轴旋转的固定位置注入扰动扭矩来模拟齿轮齿故障

轴位置以弧度为单位,当轴位置在 0 左右的小窗口内时,会对轴施加干扰力。扰动的大小由模型变量ToothFaultGain 控制,ToothFaultGain=0 表示没有齿轮齿故障。

模拟故障和健康数据

通过改变模型变量SDrift、ToothFaultGain 和 ShaftWear,可为不同的故障类型创建振动数据。使用一组 Simulink.SimulationInput 对象来定义许多不同的仿真场景,例如

toothFaultArray = -2:2/10:0; % 齿轮齿故障增益
sensorDriftArray = -1:0.5:1; % 传感器漂移偏移值
shaftWearArray = [0 -1];       % 轴磨损程度

% 创建一个包含所有值组合的 n 维数组
[toothFaultValues,sensorDriftValues,shaftWearValues] = ...
    ndgrid(toothFaultArray,sensorDriftArray,shaftWearArray);

for ct = numel(toothFaultValues):-1:1
    %为每个值组合创建一个 Simulink.SimulationInput
    siminput = Simulink.SimulationInput(mdl);
    
    % 修改模型参数
    siminput = setVariable(siminput,'ToothFaultGain',toothFaultValues(ct));
    siminput = setVariable(siminput,'SDrift',sensorDriftValues(ct));
    siminput = setVariable(siminput,'ShaftWear',shaftWearValues(ct));
    
    % 将模拟输入收集到一个数组中
    gridSimulationInput(ct) = siminput;
end

同样,为每个模型变量创建随机值组合,确保包含 0 值。

rng('default'); % 重置随机种子以实现可重复性
toothFaultArray = [0 -rand(1,6)];    
sensorDriftArray = [0 randn(1,6)/8]; 
shaftWearArray = [0 -1];              

[toothFaultValues,sensorDriftValues,shaftWearValues] = ...
    ndgrid(toothFaultArray,sensorDriftArray,shaftWearArray);

for ct=numel(toothFaultValues):-1:1
    siminput = Simulink.SimulationInput(mdl);
    
    siminput = setVariable(siminput,'ToothFaultGain',toothFaultValues(ct));
    siminput = setVariable(siminput,'SDrift',sensorDriftValues(ct));
    siminput = setVariable(siminput,'ShaftWear',shaftWearValues(ct));
    
    randomSimulationInput(ct) = siminput;
end

定义 Simulink.SimulationInput 对象数组后,使用generateSimulationEnsemble 函数运行仿真。 generateSimulationEnsemble 函数返回一个状态标志,指示模拟是否成功完成。

% 运行模拟并创建ensemble以管理模拟结果
if ~exist(fullfile(pwd,'Data'),'dir')
    mkdir(fullfile(pwd,'Data')) % Create directory to store results
end
runAll = true;
if runAll
   [ok,e] = generateSimulationEnsemble([gridSimulationInput, randomSimulationInput], ...
        fullfile(pwd,'Data'),'UseParallel', true);
else
    [ok,e] = generateSimulationEnsemble(gridSimulationInput(1:10), fullfile(pwd,'Data')); %#ok<*UNRCH>
end

ens = simulationEnsembleDatastore(fullfile(pwd,'Data'));

处理模拟结果 ,SimulationEnsembleDatastore创建了一个指向模拟结果的集成对象

ens

ens =simulationEnsembleDatastore with properties:DataVariables: [6×1 string]IndependentVariables: [0×0 string]ConditionVariables: [0×0 string]SelectedVariables: [6×1 string]NumMembers: 208LastMemberRead: [0×0 string]

ens.SelectedVariables

ans = 6×1 string array "SimulationInput" "SimulationMetadata" "Tacho" "Vibration" "xFinal" "xout"

仅读取 Vibration 和 Tacho 信号以及 Simulink.SimulationInput 进行分析

ens.SelectedVariables = ["Vibration" "Tacho" "SimulationInput"];
data = read(ens)

data=1×3 tableVibration Tacho SimulationInput___________________ ___________________ ______________________________[40272×1 timetable] [40272×1 timetable] [1×1 Simulink.SimulationInput]

从返回的数据提取振动信号并绘图

vibration = data.Vibration{1};
plot(vibration.Time,vibration.Data)
title('Vibration')
ylabel('Acceleration')

模拟的前 10 秒包含传动系统启动的数据,丢弃。

idx = vibration.Time >= seconds(10);
vibration = vibration(idx,:);
vibration.Time = vibration.Time - vibration.Time(1);

Tacho 信号包含驱动轴和负载轴旋转脉冲,丢弃前 10 秒的 Tacho 数据,并在 tachoPulses 中找到轴旋转时间

tacho = data.Tacho{1};
idx = tacho.Time >= seconds(10);
tacho = tacho(idx,:);
plot(tacho.Time,tacho.Data)
title('Tacho pulses')
legend('Drive shaft','Load shaft')
idx = diff(tacho.Data(:,2)) > 0.5;
tachoPulses = tacho.Time(find(idx)+1)-tacho.Time(1)

tachoPulses = 8×1 duration array2.8543 sec6.6508 sec10.447 sec14.244 sec18.04 sec21.837 sec25.634 sec29.43 sec

Simulink.SimulationInput.Variables 属性包含用于模拟的故障参数的值

vars = data.SimulationInput{1}.Variables;
idx = strcmp({vars.Name},'SDrift');
if any(idx)
    sF = abs(vars(idx).Value) > 0.01; 
else
    sF = false;
end
idx = strcmp({vars.Name},'ShaftWear');
if any(idx)
    sV = vars(idx).Value < 0;
else
    sV = false;
end
if any(idx)
    idx = strcmp({vars.Name},'ToothFaultGain');
    sT = abs(vars(idx).Value) < 0.1; 
else
    sT = false
end
faultCode = sF + 2*sV + 4*sT; 

sdata = table({vibration},{tachoPulses},sF,sV,sT,faultCode, ...
    'VariableNames',{'Vibration','TachoPulses','SensorDrift','ShaftWear','ToothFault','FaultCode'})  

ens.DataVariables = [ens.DataVariables; "TachoPulses"];

ens.ConditionVariables = ["SensorDrift","ShaftWear","ToothFault","FaultCode"];

并行处理

reset(ens)
runLocal = false;
if runLocal
  
    while hasdata(ens)
        data = read(ens);
        addData = prepareData(data);
        writeToLastMemberRead(ens,addData)
    end
else
    n = numpartitions(ens,gcp);
    parfor ct = 1:n
        subens = partition(ens,n,ct);
        while hasdata(subens)
            data = read(subens);
            addData = prepareData(data);
            writeToLastMemberRead(subens,addData)
        end
    end    
end

使用 hasdata 和 read 命令绘制集合中的振动信号

reset(ens)
ens.SelectedVariables = "Vibration";
figure, 
ct = 1;
while hasdata(ens)
    data = read(ens);
    if mod(ct,10) == 0
        vibration = data.Vibration{1};
        plot(vibration.Time,vibration.Data)
        hold on
    end
    ct = ct + 1;
end
hold off
title('Vibration signals')
ylabel('Acceleration')

分析仿真数据

时间同步平均为例,代码较为简单

ens.SelectedVariables = ["Vibration","TachoPulses"];
reset(ens)
data = read(ens)

vibration = data.Vibration{1};

np = 2^floor(log(height(vibration))/log(2));
dt = vibration.Time(end)/(np-1);
tv = 0:dt:vibration.Time(end);
y = retime(vibration,tv,'linear');

tp = seconds(data.TachoPulses{1});
vibrationTSA = tsa(y,tp);
figure
plot(vibrationTSA.ttTime,vibrationTSA.tsa)
title('Vibration time synchronous average')
ylabel('Acceleration')
np = numel(vibrationTSA);
f = fft(vibrationTSA.tsa.*hamming(np))/np;
frTSA = f(1:floor(np/2)+1);            % TSA 
wTSA = (0:np/2)/np*(2*pi/seconds(dt)); 
mTSA = abs(frTSA);                     
figure
semilogx(wTSA,20*log10(mTSA))
title('Vibration spectrum')
xlabel('rad/s')

四、故障诊断和故障预测与健康管理有什么区别?

故障诊断包含两个方面的内容:一是故障检测,即对系统的运行状态进行检测,并提取有效信息;二是故障定位,即在发现系统异常后对系统进行分析、诊断,查明故障原因和故障部位。

故障诊断不一定是找根本原因。根本原因是相对于领域而言的,机理上的根本原因(如疲劳失效)与操作上的根本原因(如具体到部位与受力状态)不同。另外,很多根本原因在物理世界中不一定能直接修正。故障诊断更重要的目的是探索恢复措施。一个故障可能由多种原因的共同作用引起,此时建议找到直接原因。例如,轴不对中、轴承偏心是产生工频振动和倍频振动的直接原因;基础不均匀沉降、壳体扭曲是轴不对中、轴承偏心的直接原因,也是工频振动和倍频振动的间接原因。

PHM包括对设备运行状态的识别、研判和预报,需要充分利用特征量和各种经验知识(包括设备结构,失效机理,运动学或动力学原理,设计、制造、安装、运行、维修知识等),以研判设备状态是否正常,并定位故障原因、部位及严重程度。例如,旋转机械(包括发电机、汽轮机、压缩机、泵、通风机、电动机等)的故障指设备的功能异常或动态性能劣化导致其不符合技术要求,包括失稳、异常振动和噪声、工作转速和输出功率变化,以及介质的温度、压力、流量异常等。设备故障原因不同,现象也不同。根据设备的特有信息,可以对故障进行诊断。但是,设备故障往往不是由单一因素造成的,而是多种因素共同作用的结果。因此,需要对旋转设备的故障诊断进行全面、综合的分析。旋转设备的故障诊断过程与医疗诊断过程类似,基于病理学原理,结合病情、病史、检查结果(体温、验血、心电图等)进行综合分析才能得出诊断结果,并提出治疗方案。

根据数据分析内容,可以将PHM分为6个主题:传感器数据处理、状态监测、健康管理、故障诊断、故障预测和运维优化。这些主题基于设备及环境的监测数据和设备的全维历史数据(这里称为设备档案模型)。

具体可参考这本书,书中内容包括工业大数据概论、工业大数据分析与挑战、工业大数据分析的工程方法、生产质量分析(PQM)、 生产效率优化(PEM)、其他分析主题、工业大数据分析算法、工业大数据平台技术、工业大数据分析案例等。

小术晓术:重磅新书《工业大数据分析实践》:好方法、真案例、重实操!

五、汽车故障诊断仪是怎么诊断出故障的?

汽车诊断仪器只能诊断非机械类的故障,传感器类、通讯类,控制执行器类基本都能检查到他们的共同点是都有电,所以能检测,也可以推算出部分非电子类的故障点,比如三元催化器损坏,不是直接检测是通过传感器接受到得数据分析出来的可能,只是可能还需要技师进一步的确认才可以确定,检测范围也要看实际需求一些很简单的故障就不需要专门做检测线路,这样也会加大成本和维修难度,主要是合理话考虑,并不是每一台车都一样,故障诊断仪器只是提取原车电脑提供的数据和故障代码,并不具备检测发动机的故障功能,只是提取数据而和做一些原电脑设定有的匹配,触动和记录。

六、设备故障诊断方法?

1.

了解故障模式与类型 故障是设备或零部件丧失了规定功能的状态。

常见的故障模式有以下几类:

属于机械零部件材料性能方面的故障,包括疲劳、断裂、裂纹、蠕变、过度变形、材质劣化等。

属于化学、物理状况异常方面的故障,包括腐蚀、油脂劣化、绝缘绝热劣化、导电导热劣化、蒸发、等。

2.

故障诊断的方法与步骤

七、燃油诊断泵故障原因?

原因:

1、油箱油不充足挡仪表中的燃油油位警告灯点亮是,由于液位过低,燃油泵电机得不到充分的冷却和润滑,会造成电机过热甚至不工作。长期这样的话就会造成汽油泵损坏加快;

2、汽油品质过差,汽油中还有杂质或者异物,汽油泵过脏是,这些杂质进入了汽油泵的内部轴承中就会加快轴承的磨损,导致汽油泵损坏;

3、汽油滤清器长期不更换,汽油滤清器堵塞,汽油泵内部长期处于高负荷状态导致汽油泵损坏。

八、ABS故障诊断分析?

abs的故障诊断包括:

1、初步检查;

2、故障自诊断;

3、快速检查;

4、故障指示灯诊断。通常情况下,只要按照上述4个步骤进行诊断与检查,就会迅速找到abs系统的故障点。故障自诊断是汽车装用电控单元后给修理人员提供的快速自动故障诊断法,在整个诊断与检查中占有极为重要的地位。abs是防抱死制动系统,其作用就是在汽车制动时,自动控制制动器制动力的大小,使车轮不被抱死,处于边滚边滑的状态,以保证车轮与地面的附着力在最大值。

九、汽车故障诊断原理?

故障自诊断模块监测的对象是电控汽车上的各种传感器(如空 气流量传感器)、电子控制系统本身以及各种执行元件(如继电器)。

在汽车运行过程中监测上述3种元件的输人信号,当某一信号超出 了预设的范围且这一现象在一定的时间内不会消失时,故障自诊断 模块便判断为这一信号对应的电路或元件出现故障,并把这一故障 以故障码的形式存人内部存储器,同时点亮仪表盘上的故障指示灯。

十、康佳电视故障诊断?

1、故障观象:三无,指示灯也不亮。

  分析与检修:开机指示灯不亮,按压本机面板键及遥控器按键均不起作用,说明整机无法工作,分析原因,认为是电源异常所致。

  2、故障现象:图像、伴音、亮度经常性时有时无。

  分析与检修:根据图像、伴音、亮度经常性时有时无的现象分析,说明机内存在着严重的接触不良现象。

The End
上一篇 仓库台账属会计档案吗? 下一篇 货物入账流程?

相关阅读