How to determe the Fatigue Damage according Miner's Rule via rainflow counting
49 ビュー (過去 30 日間)
古いコメントを表示
Dear Matlab Users,
I have difficulties calculating the total accumulated fatique damage for a set of data (see Attachements). I have determined the histogram based on Rainflow counting, and determined the line for the SN-curve (maximum allowable stress per cycle). The SN-curve has only one slope in this case.
To calculate the total accumulated fatique damage according Miner's Rule, the number of cycles of the SN curve should be divided by the number of cycles of the histogram per stress range, and then be summed up.
My question is: How do I divide the values from the number of cycles of the SN-curve by the the values from the number of cycles of the histogram? How do I make the values of the same size? I want to divide the following (see script for clarification):
N=10.^(L_a1-m1*log(cigma_delta*(T/T_ref)^k)); with cigma_delta= [0:0.05:710]; % N-cycles SN-curve
by
C_7=histogram('BinEdges',edges','BinCounts',sum(hist,2), Orientation='horizontal') % Rainflow counting histogram
Thanks in advance!
0 件のコメント
採用された回答
VBBV
2024 年 3 月 28 日
編集済み: VBBV
2024 年 3 月 28 日
Use linspace function in this line and evaluate the damage
cigma_delta= linspace(1e-3,2*Yield,length(C_7.Values));
clear all, close all, clc
%% Hotspot stress rainflow counting
Data = readtable('Data_hotspotstress2.txt')
cigma_7= table2array(Data(:,[7]));
fs = 20;
t = seconds(0:1/fs:600-1/fs)';
%Max-min stress range
Range_cigma7=abs(max(cigma_7))+abs(min(cigma_7));
% Stress history
figure(1)
plot(t,cigma_7 )
title('Stress history')
xlabel('Time [s]')
ylabel('Stress [MPa]')
%% Rainflow counting: plots number of cycles occurring per stress
%Histogram rainflow counting
figure(2)
[C7,hist,edges] = rainflow(cigma_7','ext');
C_7=histogram('BinEdges',edges','BinCounts',sum(hist,2), Orientation='horizontal')
set(gca,'xscale','log')
set(gca,'yscale','log')
title('Rainflow counting for \sigma_7')
subtitle(['with a max/min stress difference of ', num2str(Range_cigma7), ' [Mpa]'])
ylim([0 1000])
xlabel('Cycle Counts log(N)')
ylabel('Stress Range log(S)')
%Straight line to visualise behaviour histogram:
hold on;
line([1, 5000], [180, 2], 'LineWidth', 1, 'Color', 'b');
%% SN-curve: plots maximum allowable number of cycles of each stress range
% The total stress fluctuation (i.e. maximum compression and maximum tension) should be considered to be
% transmitted through the welds for fatigue assessments.
% For N< 10^6 cycles and SCF<10
m1= 3; % slope, Hotspot detail parameter
L_a1= 11.764; % log a1
k= 0.25; % Thickness component
Yield= 355 % Yield stress steel
cigma_delta= linspace(1e-3,2*Yield,length(C_7.Values)); % Stress range in MPa
T= 0.015875; % Thickness through which a crack will most likely grow
T_ref= 0.032; % Reference thickness tubular joints
N=10.^((L_a1-log(cigma_delta*(T/T_ref)^k))/m1) %Number of cycles
% SN-curve hotspot detail
figure(3)
plot(N,cigma_delta)
set(gca,'xscale','log')
set(gca,'yscale','log')
title('SN-curve for \sigma_7')
ylim([0 1000])
xlabel('Cycle Counts log(N)')
ylabel('Stress Range log(S)')
% Combined plot SN-curve and stress histogram
figure(4)
C_7=histogram('BinEdges',edges','BinCounts',sum(hist,2), Orientation='horizontal')
hold on;
line([1, 5000], [180, 2], 'LineWidth', 1, 'Color', 'b');
hold on
plot(N,cigma_delta, 'Color', 'r')
set(gca,'xscale','log')
set(gca,'yscale','log')
title('SN-curve for \sigma_7')
xlim([1 10^7])
ylim([1 1000])
xlabel('Cycle Counts log(N)')
ylabel('Stress Range log(S)')
%% Fatigue Damage: Miner's sum
counts=histcounts(C7);
N./C_7.Values
その他の回答 (2 件)
Strider
2024 年 3 月 28 日
If you have X and Y coordinates of your SN curve you can intercept the curve for whatever stress values you have.
close all
% make a fake SN curve
X = 1000:1000:10e6;
Y = exp(flip(linspace(1,10,numel(X))));
semilogx(X,Y);
hold on
% intercept curve at a stress that you want
% you can do any amount of binning you want before this.
% wrap a function around this to go through all the bins you have
s = [20000]; % stress I know "Little n" at from rainflow
n = 100;
yq= sort([Y s]);
v = interp1(Y,X,yq,'linear');
idx = ismember(yq,s); % find where it is
N = v(idx); % "Big N"
scatter(N,s) % plot it to check intercept
d_i = n/N
0 件のコメント
AH
2024 年 4 月 19 日
You may want to take a look at the example Practical Introduction to Fatigue Analysis Using Rainflow Counting. In this example hysteresis and peak-valley filtering is aaplied to the dat as pre-processing steps before performing the rainflow counting.
0 件のコメント
参考
カテゴリ
Help Center および File Exchange で Vibration Analysis についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!