はじめに
こんにちは!今回は、Excel VBAを使ってFemapのC型チャンネル材のビームのプロパティを自動的に作成する方法について解説します。Femapは、有限要素法(FEA)を活用するための強力なツールですが、手動でビームのプロパティを入力するのは時間がかかることがあります。そこで、Excel VBAを利用して効率化を図りましょう。
プロパティC型チャネル材のビームの作成コード
FEMAPはプロパティを作成するAPIも提供しています。これを使用することで様々なプロパティを作成することが出来ます。
ところで、ビームの作成前にマテリアルの作成が必要です。エクセルからマテリアルの作成する方法を次の関連記事で紹介していますので参考にしてください。
それでは、FEMAPで新しいC型ビームを作成するVBAコードの例を示します。
コードは、FEMAPを起動してから実行してください。
Sub CreatCBeam
'Femap model オブジェクトの作成
Dim f As Object
Set f = GetObject(,"femap.model")
'プロパティオブジェクトの作成
Dim pr As Object
Set pr = f.feProp
'リターンコードの格納先
Dim rc As Long
'形状の入力(C型断面の場合)
Dim shape(5) As Double
shape(0) = 150 '高さの入力。この場合、高さ150となる。
shape(1) = 75 '上面の幅。この場合、幅75となる。
shape(2) = 75 '下面の幅。この場合、幅75となる。
shape(3) = 12.5 '上面の板厚。この場合、12.5となる。
shape(4) = 12.5 '下面の板厚。この場合、12.5となる。
shape(5) = 9 '中央縦ウェブの板厚。この場合9となる。
'オリエンテーション方向の設定。0:右, 1:上, 2:左, 3:下
Dim orient As Long
orient = 0
pr.title = "150X75X9X12.5 C" 'タイトルの入力。この場合、「150X75X9X12.5 C」となる。
pr.matlID = 1 'マテリアルIDの入力。この場合1となる。
pr.Type = 5 'タイプの入力。ビームの場合5にする。
'プロパティの作成
rc = pr.ComputeStdShape(10, 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(今回はC型断面なので10にする)、断面定義パラメータ配列、オリエンテーション方向、断面評価方法、せん断中心オフセット変数、ねじれ定数計算、応力取り出し位置の7つです。
断面評価方法はLong型で指定します。0:自動、1:オリジナル、2:代替断面性能、3:Nastran PBEAMLです。
せん断中心オフセットはBooleanで指定します。Trueにするとせん断中心オフセットを計算します。
ねじれ定数計算はBooleanで指定します。Trueにするとねじれ定数計算されます。
応力取り出し位置もBooleanで指定します。Trueにするとオブジェクトに現在定義されている応力取り出し位置とオリエンテーションを使った計算になり、Falseにすると応力取り出し位置とオリエンテーションがデフォルトになります。 - 33行目,”.Put()”で生成したプロパティを指定したプロパティIDに登録します。
- 36~37行目はオブジェクトの解放です。なくても問題ありません。大きなプログラムを作る場合、不要なオブジェクトはこのように開放したほうが軽くなります。
- 39~43行目、プロパティが作成されなかった場合、リターンコードに0が返ります。
エクセルシートと連携させる例
エクセルシートに入力した値でC型チャネル材ビームのプロパティを作成する場合
エクセルで次のようなシートを用意します。
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
'形状の入力(C型断面の場合)
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(10, 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のプロパティ情報をエクセルに書き出すこともできます。C型ビームの場合は以下のような値を取得できます。
まず、下のようにエクセルシートを準備してください。
上記シートで取り出したいプロパティ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でビームのチャンネル材を自動的に作成することができます。VBAを活用することで、複数のビームを一括で作成したり、設定を素早く変更したりすることが可能です。興味ある方は挑戦してみてください。
チャンネル材を作るのに困ったら?まずはExcelにチャンネルを合わせましょう!
コメント