はじめに
こんにちは!今回は、Excel VBAを使ってFemapのI型ビームのプロパティを自動的に作成する方法について解説します。Femapは、有限要素法(FEA)を活用するための強力なツールですが、手動でビームのプロパティを入力するのは時間がかかることがあります。そこで、Excel VBAを利用して効率化を図りましょう。
プロパティI型ビームの作成コード
FEMAPはプロパティを作成するAPIも提供しています。これを使用することで様々なプロパティを作成することが出来ます。
まず、ビームを作成する前にマテリアルの作成が必要です。エクセルを用いてマテリアルを作成する方法は次の関連記事を参考にしてください。
それでは、FEMAPで新しいI型ビームを作成するVBAコードの例を示します。
コードは、FEMAPを起動してから実行してください。
Sub CreatIBeam
'Femap model オブジェクトの作成
Dim f As Object
Set f = GetObject(,"femap.model")
'プロパティオブジェクトの作成
Dim pr As Object
Set pr = f.feProp
'リターンコードの格納先
Dim rc As Long
'形状の入力(I型断面の場合)
Dim shape(5) As Double
shape(0) = 400 '高さの入力。この場合、高さ400となる。
shape(1) = 400 '上面の幅。この場合、幅400となる。
shape(2) = 400 '下面の幅。この場合、幅400となる。
shape(3) = 16 '上面の板厚。この場合、16となる。
shape(4) = 16 '下面の板厚。この場合、16となる。
shape(5) = 12 '中央縦ウェブの板厚。この場合12となる。
'オリエンテーション方向の設定。0:右, 1:上, 2:左, 3:下
Dim orient As Long
orient = 0
pr.title = "400X400X12/16 I" 'タイトルの入力。この場合、「400X400X12/16 I」となる。
pr.matlID = 1 'マテリアルIDの入力。この場合1となる。
pr.Type = 5 'タイプの入力。ビームの場合5にする。
'プロパティの作成
rc = pr.ComputeStdShape(9, shape, orient, 0, True, True, False) '引数は順に形状ID, 断面定義パラメータ、向き、断面評価方法、せん断中心オフセット計算、ねじれ定数計算、応力取り出し位置
pr.Put(1) 'プロパティID 1 にここで作成したプロパティを登録する。
'オブジェクト開放
Set pr = Nothing
Set f = Nothing
if rc = 0 then
MsgBox "プロパティ作成に失敗しました"
else
MsgBox "プロパティを作成しました"
End If
End Sub
- 4~5行目はFemapオブジェクトの作成です。FEMAPを起動していないときにこのコードを実行するとエラーとなるので注意が必要です。
- 8~9行目でEntityオブジェクトのプロパティオブジェクトを生成しています。
- 12行目はリターンコードを受け取るのに使用する変数の作成です。Long型にします。
- 15~21行目は形状の入力です。Double型で入力します。
- 24~25行目はオリエンテーション方向の入力。Long型です。0~3まで整数を入力します。
0:右、1:上、2:左、3:下、になります。 - 27行目はタイトルの代入。String型を使います。
- 28行目はマテリアルIDの代入。Long型です。
- 29行目,”.Type”でタイプの入力です。今回はビームの作成なので「5」を指定します。
- 32行目の”.ComputeStdShape()”でプロパティの生成です。引数は左から順に形状ID(今回はI型断面なので9にする)、断面定義パラメータ配列、オリエンテーション方向、断面評価方法、せん断中心オフセット変数、ねじれ定数計算、応力取り出し位置の7つです。
断面評価方法はLong型で指定します。0:自動、1:オリジナル、2:代替断面性能、3:Nastran PBEAMLです。
せん断中心オフセットはBooleanで指定します。Trueにするとせん断中心オフセットを計算する。
ねじれ定数計算はBooleanで指定します。Trueにするとねじれ定数計算されます。
応力取り出し位置もBooleanで指定します。Trueにするとオブジェクトに現在定義されている応力取り出し位置とオリエンテーションを使った計算になり、Falseにすると応力取り出し位置とオリエンテーションがデフォルトになります。 - 33行目,”.Put()”で生成したプロパティを指定したプロパティIDに登録します。
- 36~37行目はオブジェクトの解放です。なくても問題ありません。大きなプログラムを作る場合、不要なオブジェクトはこのように開放したほうが軽くなります。
- 39~43行目、プロパティが作成されなかった場合、リターンコードに0が返ります。
エクセルシートと連携させる例
エクセルシートに入力した値でI型ビームのプロパティを作成する場合
エクセルで次のようなシートを用意します。
A2からJ2までが入力欄です。
上記シートに入力した各値でプロパティを作成するコードは次のようになります。
Sub CreatIBeam
'Femap model オブジェクトの作成
Dim f As Object
Set f = GetObject(,"femap.model")
'プロパティオブジェクトの作成
Dim pr As Object
Set pr = f.feProp
'リターンコードの格納先
Dim rc As Long
'形状の入力(I型断面の場合)
Dim shape(5) As Double
shape(0) = Cells(2,4) '高さの入力
shape(1) = Cells(2,5) '上面の幅。
shape(2) = Cells(2,6) '下面の幅。
shape(3) = Cells(2,7) '上面の板厚。
shape(4) = Cells(2,8) '下面の板厚。
shape(5) = Cells(2,9) '中央縦ウェブの板厚。
'オリエンテーション方向の設定。0:右, 1:上, 2:左, 3:下
Dim orient As Long
orient = Cells(2,10)
pr.title = Cells(2,3) 'タイトルの入力。
pr.matlID = Cells(2,2) 'マテリアルIDの入力。
pr.Type = 5 'タイプの入力。ビームの場合5にする。
'プロパティの作成
rc = pr.ComputeStdShape(9, shape, orient, 0, True, True, False) '引数は順に形状ID, 断面定義パラメータ、向き、断面評価方法、せん断中心オフセット計算、ねじれ定数計算、応力取り出し位置
pr.Put(Cells(2,1)) 'ここで指定した番号IDに作成したプロパティを登録する。
'オブジェクト開放
Set pr = Nothing
Set f = Nothing
if rc = 0 then
MsgBox "プロパティ作成に失敗しました"
else
MsgBox "プロパティを作成しました"
End If
End Sub
プロパティ情報をエクセルに書き出す例
Femapのプロパティ情報をエクセルに書き出すこともできます。I型ビームの場合は以下のような値を取得できます。
まず、下のようにエクセルシートを準備してください。
上記シートで取り出したいプロパティIDの番号のみ入力します。
VBAのコードは次のようになります。
このコードを実行すれば、各空欄にプロパティの情報を取り出すことが出来ます。
Sub GetBeamProperty()
On Error GoTo OUT1
'FEMAP model オブジェクトの生成
Dim f As Object
Set f = GetObject(,"femap.model")
On Error GoTo OUT2
'プロパティオブジェクトの生成
Dim pr As Object
Set pr = f.feProp
Dim rc As Long 'リターンコード
pr.Get(Int(Cells(1,2))) 'セルB1で入力したプロパティIDの取得
Cells(2,2) = pr.matlID 'マテリアルIDの取得
Cells(3,2) = pr.title 'タイトルの取得
Cells(4,2) = pr.Type 'タイプの取得。ビーム要素なら5になる。
'もし取得したプロパティがビームなら、次の項目も取得する
If pr.Type = 5 Then
Cells(5,2) = pr.pval(40) '一般断面の高さ
Cells(6,2) = pr.pval(41) '一般断面の上板幅
Cells(7,2) = pr.pval(42) '一般断面の下板幅
Cells(8,2) = pr.pval(43) '一般断面の上板厚
Cells(9,2) = pr.pval(44) '一般断面の下板厚
Cells(10,2) = pr.pval(45) '一般断面の中央部板厚
Cells(11,2) = pr.pval(0) '端点Aの断面積
Cells(12,2) = pr.pval(5) '端点AのY有効断面積
Cells(13,2) = pr.pval(6) '端点AのZ有効断面積
Cells(14,2) = pr.pval(1) '端点AのI1
Cells(15,2) = pr.pval(2) '端点AのI2
Cells(16,2) = pr.pval(16) '端点Aの中性軸オフセットY
Cells(17,2) = pr.pval(17) '端点Aの中性軸オフセットZ
Else
MsgBox "このプロパティ " & Cells(1,2) & " はビームではありません。"
End If
'オブジェクト開放
Set pr = Nothing
Set f = Nothing
Exit Sub
OUT1:
MsgBox "FEMAPを起動してください"
Exit Sub
OUT2:
MsgBox "不明なエラー"
End Sub
- 15行目の”.get(プロパティID)”でプロパティを取得します。取得した値をInt()で囲ってますが、なくてもよいこともあります。Int()で型を指定したほうがエラー防止にはよいです。(他もセルから値をとるときは同様)
- 23~35行目の”.pval(番号)”で各種情報を取得します。取得したい情報によって番号は決まっており、ビームの場合は上記コメントの通りです。
おわりに
今回は、Excel VBAを使ってFemapでI型ビームのプロパティを作成する基本的な方法について説明しました。手動作業を自動化することで、設計作業の効率が大幅に向上します。ぜひ、他のプロパティや設定もVBA経由で自動化して、設計プロセスの改善を図ってみてください!
I型ビームの作成を自動化し時間短縮は、私(I)の
作業時間短縮につながっていると悟ったんだ。
コメント