“我是置顶”:本文仅供参考,禁止大作业抄袭!!! 这个代码还可以完善,还可以实现比如记录半循环之类的功能,加油!
2020年10月份左右因为课程原因接触了一下雨流计数法,该方法用于疲劳循环次数的计数,因为网上有很多原理和代码,我也懒得码字,把自己的课程报告发出来给大家参考一下。
这是原文讲雨流计数法法的,文章非常有用,全靠它救命,但是文章的细节大概有三到四处错误,我在本文的末尾已经修改了,大家可以参考,具体什么错了,我记不太清了,比如死循环,数据处理不当等,最后修改的结果就是三点法和四点法结果基本上一致,我觉得这也是合理的。雨流计数法的matlab实现,采用三点法与四点法_TANG 杰出的杰出的博客-CSDN博客_雨流计数法
这是我的课程报告。
一.题目
疲劳随机载荷的量化与模拟,以及雨流计数方法在Matlab中的实现,提供报告、可执行程序代码及结果分析。
①疲劳随机载荷的概念、量化、模拟及生成;
②雨流计数法的原理、流程及Matlab实现;
③上述疲劳随机载荷的雨流计数与统计分析。
二.疲劳随机载荷
2.1概述
疲劳破环是机械构件中常见的现象,据统计机械中的有80%的零部件损坏于疲劳破坏, 因此对构件可靠性及使用寿命的研究就至关重要。在交变应力工作下的构件,其破坏形式与 静载荷作用下截然不同。在交变应力下,构件内的最大应力虽低于材料的屈服极限,但经长 期交变应力作用之后,虽然是塑性较好的材料,断裂前没有明显的性变形,也会出现突然断 裂。
目前对破坏原因的分析是,由于构件外部形状中的突变及材料不均匀等原因,使构件某些局部的应力特别高,在长期交变应力作用下,应力高的点或材料有缺陷的点逐渐形成了非常细微的裂纹——疲劳源,裂纹尖端处严重应力集中,促使裂纹逐渐扩,当裂纹扩展到一定程度,在偶然的超载冲击下,构件就会发生突然脆性断。如果材料经受的重复应力值低于某特定值便不再发生破坏,便将该特定值称为持久极限。
近代的运输机械、农机和通用机械等它们所承受的载荷多是随机性的。各种机械零部件在随机载荷作用下的疲劳强度问题,在国内外已引起广泛的重视。近年来,在航空、汽车、农机、铁道等行业已作了大量的研究工作。所谓载荷谱是客观反映零部件或构件在各种工况下承受载荷(或应力)与它出现的累积频次关系图,疲劳随即在和谱表示随机载荷的统计特性。载荷谱不仅是疲劳强度计算的依据,也是模拟试验加载的依据。
2.2载荷的生成与处理
使用Matlab代码Load=randi([-300,300],n,1),可以生成n个随机载荷,图1和图2是生成的载荷图以及经过处理后的载荷图
图1-三点法处理后的数据
图2-四点法处理后的数据
CSDN参考的代码中,数据的处理会在出现图3的情况时,在后续的雨流计数中会出现错误,需要修正。
图3-有问题的数据
三.雨流计数法
3.1概述
机械的疲劳失效是机械失效的主要失效方式,因此对机械失效的主要研究是机械疲劳失
效。目前,机械疲劳失效的研究有两个方面:一方面,根据求出的载荷谱来确定加载程序在试验室或者试验台上对机械进行疲劳试验,得出机械(材料)在该工况下的实际寿命;另一方面,根据机械(材料)的特性与载荷谱并且用Miner准则来估计机械的疲劳寿命。无论是 做疲劳试验还是估计疲劳寿命,载荷谱的统计都是问题的关键。
利用实时测量系统进行雨流法测试,可对铁路钢轨、桥梁、机车、飞机、坦克、汽车和水下航行器等进行现场实时动态测量,获得大量载荷数据,运用雨流计数法等随机数据处理方法获得统计数据,从而可依此编制疲劳载荷谱,确定材料疲劳损伤的程度,计算疲劳寿命。进行疲劳设计、安全评价等运用这种测试方法,可立即得到测试结果,这将减轻测试人员的 劳动强度,缩短测试周期,降低测试费用,解决了复杂构件的试验问题。
雨流计数法又可称为“塔顶法”,是由英国的Matsuiski和End两位工程师提出的,距今已有50多年。雨流法取垂直向下的坐标表示时间,横坐标表示载荷。这时的应力-时间历 程与雨点从宝塔向下流动的情况相同,因而得名。雨流法的力学依据是转换后的塑性功相等。
雨流法是目前国内外最广泛的计数方法,该方法认为塑性的存在是疲劳损伤的必要条件,并且其塑性性质表现为应力-应变的迟滞回线。虽然名义应力处于弹性范围内,但从局部的、微观的角度来看,塑性变形仍然存在。把应变-时间历程数据记录转过 90°,时间坐标轴竖直 向下,数据记录犹如一系列屋面,雨水顺着屋面往下流,故称为雨流计数法。雨流法的计数 规则为:(1)重新安排载荷历程以最高峰值或最低谷值为起点(视二者的绝对值哪一个更大 而定);(2)雨流依次从每个峰(谷)的内侧向下流,在下一个谷(峰)处落下,直到对面有一个比其起点更高的峰值(或更低的谷值)停止;(3)当雨流遇到自上面屋顶流下的雨流时即行停止;(4)取出所有的全循环,并记录下各自的范围和均值。
图4-雨流计数法的原理
雨流计数法的主要功能是把经过峰谷值检测和无效幅值去除后的实测载荷历程数据以
离散载荷循环的形式表示出来。
3.2代码分析
①CSDN原始代码中,3点法的执行可能会跳不出循环,需要修正。
②四点法的原始代码,在执行中有原理上的错误,需要修正,修正后,四点法可以处理的数据如图4所示
图5-四点法可以处理的数据
图6-四点法不能处理的数据
四.结果分析
如图5所示,为三点法和四点法的均值-幅值-循环次数直方图,它们的结果总体一致,因为原理和数据的处理不同,余项会有所区别。
图7-结果
附录:
clear;clc
%% 三点法 %%
fprintf('三点法\n')
tic
%Load=xlsread('G:\桌面\随机数');%%在此修改加载的文件名,数据格式一直才可正确运算%%
Load=randi([-300,300],10000,1); %取样范围为(-300,300),取样点 10000 个。
Load1=Load;Load2=Load;
L3=length(Load2);
%三点循环计数法;部分参考SAE ASTM标准
%% 步骤一 %%
%对载荷时间历程进行处理使它只包含峰谷峰谷交替出现
m1=L3;
for i=2:1:m1-1
if Load2(i-1)<=Load2(i)&&Load2(i)<=Load2(i+1)
Load1(i)=NaN;
elseif Load2(i-1)>=Load2(i)&&Load2(i)>=Load2(i+1)
Load1(i)=NaN;
end
end
Load1(isnan(Load1))=[];
%% 步骤二 %%
%对载荷时间历程再造,使从最大(小)值拆开,前后拼接,使从最值开始最值结束
[a,b]=max(Load1);
n1=length(Load1);
B1=Load1(b:n1);
B2=Load1(1:b);
Load1=[B1;B2];
%% 步骤三 %%
%再只留波峰波谷,防止拼接处出现不合理的数据
Load2=Load1;m1=length(Load1);
for i=2:1:m1-1
if Load2(i-1) Load1(i)=NaN; elseif Load2(i-1)>Load2(i)&&Load2(i)>Load2(i+1) Load1(i)=NaN; end end Load1(isnan(Load1))=[];n1=length(Load1); % B为改造后载荷时间历程 n为B中波峰波谷的个数 %% 步骤四 %% %雨流计数记因素 1幅值F 2均值J 开启无脑循环模式 Amplitude=[];Mean=[]; while length(Load1)>=1 n1=length(Load1); if n1==1||n1==2 break elseif n1>2 for j=1:n1-2 s1=abs(Load1(j+1)-Load1(j)); s2=abs(Load1(j+1)-Load1(j+2)); e3=(Load1(j+1)+Load1(j+2))/2; if s1<=s2 Amplitude=[Amplitude;s1]; Mean=[Mean;e3]; Load1(j)=[]; Load1(j)=[]; n1=length(Load1); break; else continue; end end end continue end D1=Load1; %% 步骤五 %% %画图像 三维hist三维图像 X=[Mean,Amplitude]; subplot(2,2,1); %figure(2); hist3(X,[30 30]); xlabel('均值'); title('雨流计数法-三点循环计数运算逻辑'); ylabel('幅值'); zlabel('循环次数'); subplot(2,2,2); plot(D1,'r-*'); title('余项'); toc %% 四点法 %% fprintf('四点法\n') tic Load3=Load;Load4=Load; L4=length(Load3); %四点循环计数法 %% 步骤一 %% %对载荷时间历程进行处理使它只包含峰谷峰谷交替出现 for i=2:1:L4-1 if Load4(i-1)==Load4(i) Load3(i-1)=NaN; else continue end end Load3(isnan(Load3))=[]; Load4=Load3; L4=length(Load3); for i=2:1:L4-1 if Load4(i-1)<=Load4(i)&&Load4(i)<=Load4(i+1) Load3(i)=NaN; elseif Load4(i-1)>=Load4(i)&&Load4(i)>=Load4(i+1) Load3(i)=NaN; end end Load3(isnan(Load3))=[];n2=length(Load3); %% 步骤二 %% Amplitude=[];Mean=[]; while ex(Load3)==1||ex(Load3)==0 if ex(Load3)==1 for j=1:n2-3 if (Load3(j)<=Load3(j+2)&&Load3(j)<=Load3(j+1)&& Load3(j+1)<=Load3(j+3))||(Load3(j)>=Load3(j+2)&&Load3(j)>=Load3(j+1)&& Load3(j+1)>=Load3(j+3)) s1=abs(Load3(j+1)-Load3(j+2)); e3=(Load3(j+2)+Load3(j+1))/2; Amplitude=[Amplitude;s1]; Mean=[Mean;e3]; Load3(j+1)=[]; Load3(j+1)=[]; n2=length(Load3); break else continue end end else if ex(Load3)==0 break end end continue end D2=Load3; %% 步骤三 %% %画图像 三维hist三维图像 Y=[Mean,Amplitude]; subplot(2,2,3); %figure(2); hist3(Y,[30 30]); xlabel('均值'); title('雨流计数法-四点循环计数运算逻辑'); ylabel('幅值'); zlabel('循环次数'); subplot(2,2,4); plot(D2,'r-*'); title('残余项'); toc function re=ex(B) n=length(B);re=0; for j=1:n-3 if (B(j)<=B(j+2)&&B(j)<=B(j+1)&& B(j+1)<=B(j+3))||(B(j)>=B(j+2)&&B(j)>=B(j+1)&& B(j+1)>=B(j+3)) re=1; break else re=0; continue end end return