Download presentation
Presentation is loading. Please wait.
1
SRS解析への考察B 衝撃試験解析手法 by ke-ta
2
SRS解析とは? Shock Response Spectrum (SRS) 訳:衝撃応答スペクトル
ある供試体が受けた衝撃に対するダメージポテンシャルを評価解析する手法の1つ。 試験する供試体が、あらゆる固有振動数をもった物体から構成されていると仮定し、これを数学モデルに置き換え衝撃に対する応答を固有振動数ごとに計算し、その最大値を周波数軸上にプロットしたもの。
3
SRSの概念 SRSは、データを数学モデルに当てはめる 入力 出力 m k c 各固有振動数ごとに最大加速度応答が得られる。
G 入力 出力 Aデータ t m k c Aデータ G G Bデータ Bデータ t Cデータ f G Cデータ 各固有振動数ごとに最大加速度応答が得られる。 t 等価比較が可能となる。 数学モデル上でのピーク等が分かる。 そこで、ある数学モデルを仮定する。この数学モデルに同等の衝撃を印加する(計算上)。 別々の試験にて取得されたデータA,B,C (供試体に加えられた衝撃結果) このままでは、比較も出来無いし、どういった結果を意味しているのかよくわからない。 供試体のダメージ評価ができる
4
FFTとの違い? FFTは周波数の成分分解 SRSは数学モデルを仮定した周波数解析 入力 FFT 出力 入力 SRS 出力
入力した波形にて、数学モデル上に衝撃を印加し、最大応答を見る。不可逆計算となる。 入力 SRS 出力 t f
5
数学モデル バネ・マス・ダンパモデル 運動方程式 m x k c 固有角振動数 u 衝撃印加 減衰比 Qは、ユーザが規定するパラメータ
H2Aユーザマニュアル等では、 Q=10となっている。
6
計算の流れ 1.Qを任意に決定する 2.解析したい数学モデルのωnを決定する 3.衝撃データを入力する 4.各時間ごとの加速度応答を求める
5.加速度応答の絶対最大値を求める この点(絶対最大値)が、ωn=100時の加速度応答となる 入力 Q=10 出力 ωn=100 t t 周波数グラフを作るには、各ωnについて繰り返し解いていく。
7
計算例1 422K Half Sin波の750GをSRSにかけたもの
8
計算例2 とある試験との比較 スペックアウトしているような…?(^^;
9
どの衝撃が厳しいのか?1/2 Half Sin波 どの衝撃が厳しいのか?→SRS解析 80G/3ms 50G/11ms 50G/6ms
10
どちらの衝撃が厳しいのか?2/2 Half Sin波 100Hz以上であれば、80G/3msの方が厳しい条件となる
11
ソースコード perl #!/usr/bin/perl # 以下は変更する必要なし # SRSの算出 # csv2srs (version $Id: eodv,v /05/22 02:22:33 fukuda Exp $) # # # Usage: # example: # 特に無し # options: # > csv2srs.pl hogehoge.csv # csv2srs.pl hogehoge.csv #(1) my $tt,$bs,$bb,$ymax; # Libraries $delt = 1.00E-06; # でるtt $g = ; # [m/s2] $PI = ; $Q = 10; $fmax = 10000; # [Hz] $fbgn = 1; # [Hz] $zi = 1/(2*$Q); $wn = 0.0; $m = 1; $k = 0; $cnt = 0; $df = 0; # Δ[Hz] $i = 0; $aa = 0; $oct = 100; $c = 1; &show_usage(); if ($opt eq "-h") { ($opt) # Code begin # オプションがない場合 } exit; if ($#ARGV == -1){ # オプションが1つある場合 if ($#ARGV == 0){ print "Error:ファイル名を指定してください\n"; close(IN); @line = <IN>; # 対象ファイルのオープン open(IN,"<$ARGV[0]") || die "Error: can't open $ARGV[0]\n"; # SRS算出 if ($cnt == -1){$cnt++; next;} # 時間[sec]/加速度取得[m/s2] # ヘッダ情報を飛ばす foreach $cnt = -1; # インクリメント処理 $dg[$cnt+1] = (split(/\,/,$_))[1]; $dt[$cnt+1] = (split(/\,/,$_))[0]; $cnt++; print $disp; $disp = sprintf("f[Hz],G[g],Q=%f\n",$Q); # ヘッダ出力 # 計算 $wn = 2*$PI*(10**($j*$aa)); { for($j=$fbgn;$j<=$oct;$j++) $aa = &log10(($fmax))/$oct; $disp = sprintf("%f,%e\n",$wn/(2*$PI),$ymax); # 結果出力 $ymax = &cal_acc(); $C[0] = $D[0] = $ymax = 0; # 初期化 sub cal_acc() for($i=1;$i<$cnt;$i++) #print $disp; #$disp = sprintf("#,time,応答G,αn,βn,Cn,Dn,Cn-1,Dn-1,a'(tn),b'(tn),c'(tn),d'(tn),An,Bn,An-1,Bn-1,Mn(tn),Mn-1(tn)\n"); # ヘッダ-debug # α,β計算・例外 #$A[$i] = $B[$i] = $C[$i] = 0; # 加速度計算 $beta[$i] = (($dg[$i]*$dt[$i+1] - $dg[$i+1]*$dt[$i])/($delt))*$g; $alpa[$i] = (($dg[$i+1] - $dg[$i])/($delt))*$g; # 一般解計算 $D[$i] = -$beta[$i]/($wn*$wn) + 2*$zi*$alpa[$i]/($wn*$wn*$wn); $C[$i] = -$alpa[$i]/($wn*$wn); # 特解計算 $bb = &fa($tt)*&fd($tt)-&fb($tt)*&fc($tt); $tt = $dt[$i]; $bs = &fd($tt)*(&fM($i-1,$tt)-&fM($i,$tt))-&fb($tt)*($C[$i-1] - $C[$i]); # yy出力 $B[$i] = $bs/$bb/exp(-$zi*$wn*$tt) + $B[$i-1]; $bs = -&fc($tt)*(&fM($i-1,$tt)-&fM($i,$tt))+&fa($tt)*($C[$i-1] - $C[$i]); $A[$i] = $bs/$bb/exp(-$zi*$wn*$tt) + $A[$i-1]; #$yy[$i] = &fM($tt) + $A[$i]*&fa($tt) + $B[$i]*&fb($tt); if(abs($yy[$i]) > $ymax){$ymax = abs($yy[$i]);} # ymaxの算出 $yy[$i] = -(&fM($i,$tt)+($A[$i]*&fa($tt) + $B[$i]*&fb($tt))*exp(-$zi*$wn*$tt))*$wn*$wn/$g; #$disp = sprintf("%d,%e,%e,%e,%e,%e,%e,%e,%e,%e,%e,%e,%e,%e,%e,%e,%e,%e,%e\n",$i,$dt[$i],$yy[$i],$alpa[$i],$beta[$i],$C[$i],$D[$i],$C[$i-1],$D[$i-1],&fa($tt),&fb($tt),&fc($tt),&fd($tt),$A[$i],$B[$i],$A[$i-1],$B[$i-1],&fM($i,$tt),&fM($i-1,$tt)); # 出力-debug return $ymax; if ($#ARGV == 1){ # オプションが2つある場合 # Sub code begin sub fa() return $C[$_[0]]*$_[1] + $D[$_[0]]; sub fM() #return exp(-$zi*$wn*$_[0])*cos(sqrt(1-$zi*$zi)*$wn*$_[0]); return cos(sqrt(1-$zi*$zi)*$wn*$_[0]); }else{ return 1; if($_[0] == 0){ #return exp(-$zi*$wn*$_[0])*sin(sqrt(1-$zi*$zi)*$wn*$_[0]); return 0; sub fb() return sin(sqrt(1-$zi*$zi)*$wn*$_[0]); sub fd() return $wn*(-$zi*cos(sqrt(1-$zi*$zi)*$wn*$_[0])-sqrt(1-$zi*$zi)*sin(sqrt(1-$zi*$zi)*$wn*$_[0])); #return $wn*exp(-$zi*$wn*$_[0])*(-$zi*cos(sqrt(1-$zi*$zi)*$wn*$_[0])-sqrt(1-$zi*$zi)*sin(sqrt(1-$zi*$zi)*$wn*$_[0])); sub fc() return log($n)/log(10); my $n = shift; sub log10 { #return $wn*exp(-$zi*$wn*$_[0])*(-$zi*sin(sqrt(1-$zi*$zi)*$wn*$_[0])+sqrt(1-$zi*$zi)*cos(sqrt(1-$zi*$zi)*$wn*$_[0])); return $wn*(-$zi*sin(sqrt(1-$zi*$zi)*$wn*$_[0])+sqrt(1-$zi*$zi)*cos(sqrt(1-$zi*$zi)*$wn*$_[0])); print "Usage:\n"; print "> eodv [-h]\n"; print "EoDV(放電末期電圧)を抽出・可視化する\n"; print "\n"; sub show_usage() print " make : Level-2を更新する\n"; print " h : 利用方法を提示する\n"; print "options:\n"; print "eodv -h #(1) HELP\n"; print "example:\n";
12
計算反省点 Excelにてcsv保存すると表示されている有効数字に短縮される
参考PDFと参考Excelの計算式が異なる。ただし、解いているものは一緒 Expを掛け算にしていた(式ミス)。 割と計算の有効桁数がシビアに効いてくるため、定数の桁にも注意が必要 Perlには、常用対数log10がない 底変換の式にて代用
Similar presentations
© 2024 slidesplayer.net Inc.
All rights reserved.