随着研究的深入,人们发现采用时间序列计算载荷谱太麻烦了,处理的工作量太大,我们不需要将每个时刻点的载荷都做运算,疲劳计算只需要提供幅值、均值和循环次数,鉴于此发展出了很多不同的计数方法,雨流法是最常见的处理方式,在ASTM E1049-85规范中记载了常见的4种计数方法。
传统的符合ASTM标准的载荷历程计数法主要有以下几种:
水平交叉计数(Level cross counting)
峰值计数(Peak counting)
样本幅值计数(Simple-range counting)
雨流计数(rainflow counting)
其中雨流计数法是最为主流的计数方法,也是公认效率最好的,.目前提出的各种雨 流计数的模型都是以找出循环过程中的滞后环的应力循环为原则,针对雨流法的学习,我发现了以下几类常见的处理方式:
就是在ASTM E1049-85规范中记载的常规的雨流计数的步骤,该算法在没有数据重新安排的情况下起作用,因此无需提前知道绝对最大值,可以进行实时的雨流计数。从原始谱出发采用三点雨流计数的方法,用连续的三个点判断是否形成迟滞环即可以记为1个cycle的范围。连续的三点形成两条线段,根据线段的长度判断是否形成迟滞环,如果形成记为1cycle,否则记为0.5cycle。假设连续三个点记为A、B、C,形成的线段分别是AB和BC,首先假设AB不是起始段,若AB>BC,不能形成迟滞环,则提取A、B的均值和幅值,并进行记录0.5cycle,之后将B的值给A,C的值给B,读取下一个点为C就可以下一个判断,传统方法由于第一阶段中会遗留部分不能构成应力循环 的数据点,称之为发散收敛波,因此要进行第二阶段 的计数.
参考文章Rainflow counts for fatigue analysis - MATLAB rainflow - MathWorks 中国
>


就是简化的三点雨流计数法,它是对载荷历程进行编辑,将全局最大的峰值或者谷值放在起始位置,但是这就要注意在拼接的时候不要出错,或者增添或者删减数据。将峰值和估值放在起始点,就不会出现起始段满足迟滞环条件,但是只能记作0.5cycle,所以只需要判断AB<=BC即可,为后面计算省了很多步骤。但是需要注意的是他的简化计算的优势也导致了他的操作的劣势,因简化的rainflow必须在计数之前重新安排时间序列,这使在线实时处理变得非常困难>。参考视频:疲劳与断裂



就是四点雨流计数法,依据时间序列读入时域数据的四个数据点,如果中间两个数据点构成的幅值被第一个和第四个点构成的幅值包含,则将中间这两个点构成的相对较小的载荷循环记作一次计数,并从原时域数据中删除中间这两个点,然后如法炮制的对剩余的数据点构成的新的载荷序列进行四点法雨流计数。如果中间两个点构成的幅值没有被第一和第四个点构成的幅值包含,则什么都不做,对下一个“四点”如法炮制的进行处理。当这套流程进行到最后的时候,会留下一个大的载荷循环“骨架”。按照“四点法计数”规则,在不做任何处理的情况下这个“骨架”无法再计数出任何新的结果。这个“骨架”我们习惯上称之为Residue。接着再将好多段Residue“首尾相接”进行雨流计数。这个时候,按照四点法雨流计数法则,本来数不出什么结果的,但拼接后的Residue又能贡献出新的载荷循环。而且,这些载荷循环都是幅值非常大的载荷循环,循环周次不多,但是实际形成的伪损伤数值可是不小的,因此不仅不能忽略,而且是要小心谨慎。对residue的循环计数处理,采用拼接的方法得到载荷谱,再继续雨流计数。最后对于无法再计完整循环的峰谷点,把相邻的两个数值记为半个循环。 参考文章【载荷数据处理-幅值域分析方法】雨流计数_操作稳定性测试__汽车测试网 (auto-testing.net)
>


就是改进的雨流实时计数模型(田 和 李, 2009),其是在第一种方法的基础上进行的补充改进,由于第一种方法可以做实时的雨流计数,他是经过第一阶段计数后, S点以前的遗留点构成发散波,s点以后的遗留点 构成收敛波.第二阶段计数实际是利用S的位置变 化把发散波和收敛波位置进行调整和对接,形成收 敛发散波,然后再进行处理.,但是碍于其进行完第一阶段的计数后残余的载荷情况复杂,容易发生对接不当,这处理不当可能会产生漏点,甚至会得出错误计数结果.所以改进的方法就是在进行完第一阶段的计数后,须在第二阶段处 理前进行可靠的数据对接处理,才能保证结果正确.对接处理方法如下:

标志位s前没有遗留点的处理流程如下:>

标志位s前至少有一个遗留点的处理流程如下:>

参考文献:
[1] 佚名. 田_李_2009_改进的雨流法实时计数模型.pdf[Z]([日期不详]).
[2] 佚名. 董 et al_2004_雨流计数法及其在程序中的具体实现.pdf[Z]([日期不详])
[3] MCINNES C H, MEEHAN P A. Equivalence of four-point and three-point rainflow cycle counting algorithms[J]. International Journal of Fatigue, 2008, 30(3): 547–559. DOI:10.1016/j.ijfatigue.2007.03.006.
[4] 佚名. ASTM e1049-85(2017) standard practices for cycle counting in fatigue analysi.pdf[Z]([日期不详]).
[5] HUANG J, WANG S, XU W, 等. A novel autoregressive rainflow—integrated moving average modeling method for the accurate state of health prediction of lithium-ion batteries[C]. . DOI:10.3390/PR9050795.
[6] AMZALLAG C, GEREY J P, ROBERT J, 等. Standardization of the rainflow counting method for fatigue analysis[J]. 1994. . DOI:10.1016/0142-1123(94)90343-3.
[7] RYCHLIK I. A new definition of the rainflow cycle counting method[J]. 1987. . DOI:10.1016/0142-1123(87)90054-5.
[8] SCHOOL OF INFORMATION ENGINEERING, SOUTHWEST UNIVERSITY OF SCIENCE AND TECHNOLOGY, MIANYANG 621010, CHINA, HUANG J. An improved rainflow algorithm combined with linear criterion for the accurate li-ion battery residual life prediction[J]. International Journal of Electrochemical Science, 2021: ArticleID:21075. DOI:10.20964/2021.07.29.
.
- ## 附录
现给出简化的三点雨流计数法MATLAB程序代码
%% rainflow计数法 %%
clear;clc
C=xlsread('load_F1');%%%%%%%%%在此修改加载的文件名,数据格式一直才可正确运算%%% %%%也可以自行添加一个随机列向量C作为载荷谱输入%%
B=C;A=C;
q=length(A);
%三点循环计数法;部分参考SAE ASTM标准
%% 步骤一 %%
%对载荷时间历程进行处理使它只包含峰谷峰谷交替出现
m=q;
for i=2:1:m-1
if A(i-1)<A(i)&&A(i)<A(i+1)
B(i)=NaN;
elseif A(i-1)>A(i)&&A(i)>A(i+1)
B(i)=NaN;
end
end
B(isnan(B))=\[\];
%% 步骤二 %%
%对载荷时间历程再造,使从最大(小)值拆开,前后拼接,使从最值开始最值结束
\[a,b\]=max(B);
n=length(B);
B1=B(b:n);
B2=B(1:b);
B=\[B1;B2\];
%% 步骤三 %%
%再只留波峰波谷,防止拼接处出现不合理的数据 ??
A=B;m=length(B);
for i=2:1:m-1
if A(i-1)<A(i)&&A(i)<A(i+1)
B(i)=NaN;
elseif A(i-1)>A(i)&&A(i)>A(i+1)
B(i)=NaN;
end
end
B(isnan(B))=\[\];n=length(B);
%%%%%%%%%%%%%%%%%%%%%%%% B为改造后载荷时间历程 n为B中波峰波谷的个数
%% 步骤四 %%
%画出改造好的载荷时间历程折线图
figure('Name','载荷谱');
plot(1:n,B,'-k')
legend('重组过的载荷时间历程'); %右上角标注
xlabel('时间') %x轴坐标描述
ylabel('载荷') %y轴坐标描述
xlim(\[0,10000\]);
ylim(\[0,20000\]);
xticks(0:1000:10000);
yticks(-20000:1000:20000);
grid on
%% 步骤五 %%
%雨流计数,输出结果矩阵c包括计数count、范围range、均值mean、单次循环载荷起点start、单词循环载荷终点end%
\[c,hist,edges,rmm,idx\] = rainflow(B);
TT = array2table(c,'VariableNames',{'Count','Range','Mean','Start','End'});%计数结果指标
%% 步骤六 %%
%绘制均值、幅值、循环次数的三维柱形图
figure('Name','三维图');
rainflow(B)
我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div
总的来说,我对ruby还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用
类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
我正在尝试设置一个puppet节点,但rubygems似乎不正常。如果我通过它自己的二进制文件(/usr/lib/ruby/gems/1.8/gems/facter-1.5.8/bin/facter)在cli上运行facter,它工作正常,但如果我通过由rubygems(/usr/bin/facter)安装的二进制文件,它抛出:/usr/lib/ruby/1.8/facter/uptime.rb:11:undefinedmethod`get_uptime'forFacter::Util::Uptime:Module(NoMethodError)from/usr/lib/ruby
我想了解Ruby方法methods()是如何工作的。我尝试使用“ruby方法”在Google上搜索,但这不是我需要的。我也看过ruby-doc.org,但我没有找到这种方法。你能详细解释一下它是如何工作的或者给我一个链接吗?更新我用methods()方法做了实验,得到了这样的结果:'labrat'代码classFirstdeffirst_instance_mymethodenddefself.first_class_mymethodendendclassSecond使用类#returnsavailablemethodslistforclassandancestorsputsSeco
我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>BootingWEBrick=>Rails3.2.1applicationstartingindevelopmentonhttp://0.0.0.0:3000=>Callwith-dtodetach=>Ctrl-CtoshutdownserverExiting/Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/actionmailer-3.2.1/lib/action_mailer
设置:狂欢ruby1.9.2高线(1.6.13)描述:我已经相当习惯在其他一些项目中使用highline,但已经有几个月没有使用它了。现在,在Ruby1.9.2上全新安装时,它似乎不允许在同一行回答提示。所以以前我会看到类似的东西:require"highline/import"ask"Whatisyourfavoritecolor?"并得到:Whatisyourfavoritecolor?|现在我看到类似的东西:Whatisyourfavoritecolor?|竖线(|)符号是我的终端光标。知道为什么会发生这种变化吗? 最佳答案
我已经从我的命令行中获得了一切,所以我可以运行rubymyfile并且它可以正常工作。但是当我尝试从sublime中运行它时,我得到了undefinedmethod`require_relative'formain:Object有人知道我的sublime设置中缺少什么吗?我正在使用OSX并安装了rvm。 最佳答案 或者,您可以只使用“require”,它应该可以正常工作。我认为“require_relative”仅适用于ruby1.9+ 关于ruby-主要:Objectwhenrun
我有一个具有一些属性的模型:attr1、attr2和attr3。我需要在不执行回调和验证的情况下更新此属性。我找到了update_column方法,但我想同时更新三个属性。我需要这样的东西:update_columns({attr1:val1,attr2:val2,attr3:val3})代替update_column(attr1,val1)update_column(attr2,val2)update_column(attr3,val3) 最佳答案 您可以使用update_columns(attr1:val1,attr2:val2
我不确定传递给方法的对象的类型是否正确。我可能会将一个字符串传递给一个只能处理整数的函数。某种运行时保证怎么样?我看不到比以下更好的选择:defsomeFixNumMangler(input)raise"wrongtype:integerrequired"unlessinput.class==FixNumother_stuffend有更好的选择吗? 最佳答案 使用Kernel#Integer在使用之前转换输入的方法。当无法以任何合理的方式将输入转换为整数时,它将引发ArgumentError。defmy_method(number)