EXCEL VBAを使ってFEMAPのマテリアルを作成する方法

EXCEL×FEMAP

はじめに

FEMAPを使用していると、多くの要素に対して材料特性を設定する必要が出てきます。しかし手作業でこれを行うのは時間がかかります。そこでVBAを使って、FEMAPで効率的にマテリアルを作成する方法を紹介します。

マテリアル(等方性)の作成コード

FEMAPはAPIを提供しており、これをVBAで呼び出すことでさまざまな操作が可能です。
FEMAPで新しいマテリアルを作成するVBAコードの例を示します。
コードは、FEMAPを起動してから実行してください。

VB
Sub create_material
  
  'Femap model オブジェクトの生成
  Dim f As Object
  Set f = GetObject(,"femap.model")

  'マテリアルオブジェクトの作成
  Dim m As Object
  Set m = f.feMatl

  m.title = "Steel"  'タイトルの入力。この場合、タイトルに"Steel"という文字列を代入している。
  m.Type = 0          '材料のタイプの入力。0を代入することで等方性マテリアルとなる。
  
  m.Ex = 21000  '縦弾性率(ヤング率)の代入
  m.Gx = 80770  '横弾性率(せん断弾性率)の代入
  m.Nuxy = 0.3  'ポアソン比の代入
  
  m.Alphaxx = 11.7 '熱膨張率
  m.Kxx = 51.6     '熱伝導率
  m.Cp = 0.473     '比熱
  
  m.TensionLimit1 = 235     '引張の制限応力
  m.CompressionLimit1 = 235 '圧縮の制限応力
  m.ShearLimit = 136        'せん断の制限応力

  m.Density = 7.85  '比重
  m.Damping = 0.02  '構造減衰比
  m.RefTemp = 22    '基準温度

  m.put(1)  '指定したIDにマテリアルデータを入力|上書きする。この場合ID=1にマテリアルデータを入力|上書きしている。

End Sub

・4~5行目はFemapオブジェクトの作成です。FEMAPを起動していないときにこのコードを実行するとエラーとなるので注意が必要です。

・8~9行目でEntityオブジェクトのマテリアルオブジェクトを生成しています。

・11行目 m.Title = “title” はタイトルの代入です。String型で代入します。

・12行目 m.Type = 0 で材料のタイプを指定します。long型を代入します。0は等方性マテリアルで、他のマテリアルの場合は別の定数を入力します。

・15~28行目 各項目の値を代入できます。型はいずれもDouble型です。設定しない項目は省略しても大丈夫です。

・30行目 m.put(ID)で番号IDのデータに上書きします。カッコ内のIDはLong型で記入します。

エクセルシートと連携させる例

エクセルシートに入力した値でマテリアルを作成する場合

エクセルで次のようなシートを用意します。

上記シートに入力した各値でマテリアルを作成するコードは次のようになります。
※タイプはマテリアルの種類。ここでは等方性マテリアルを扱うので”0″を入力して下さい。

VB
Sub create_material
  
  'Femap model オブジェクトの生成
  Dim f As Object
  Set f = GetObject(,"femap.model")

  'マテリアルオブジェクトの作成
  Dim m As Object
  Set m = f.feMatl

  m.title = Cells(2,2) 'タイトルの入力。この場合、タイトルに"Steel"という文字列を代入している。
  m.Type = Cells(3,2)  '材料のタイプの入力。0を代入することで等方性マテリアルとなる。
  
  m.Ex = Cells(4,2)    '縦弾性率(ヤング率)の代入
  m.Gx = Cells(5,2)    '横弾性率(せん断弾性率)の代入
  m.Nuxy = Cells(6,2)  'ポアソン比の代入
  
  m.Alphaxx = Cells(7,2) '熱膨張率の代入
  m.Kxx = Cells(8,2)     '熱伝導率の代入
  m.Cp = Cells(9,2)      '比熱の代入
  
  m.TensionLimit1 = Cells(10,2)     '引張の制限応力の代入
  m.CompressionLimit1 = Cells(11,2) '圧縮の制限応力の代入
  m.ShearLimit = Cells(12,2)        'せん断の制限応力の代入

  m.Density = Cells(13,2)  '比重の代入
  m.Damping = Cells(14,2)  '構造減衰比の代入
  m.RefTemp = Cells(15,2)  '基準温度の代入

  m.put(Cells(1,2))  '指定したIDにマテリアルデータを入力|上書きする。

End Sub

もし、セルから値を取得する際にエラーが出る場合は、セルで値を取得する部分をLong型ならInt()などで囲むと良いです。

マテリアル情報をエクセルに書き出す例

FEMAPのマテリアル情報をエクセルに書き出すこともできます。この場合、.getメソッドを使用します。

まず、下のようにエクセルシートを準備してください。先述の例とほぼ同じです。

上記シートで取り出したいマテリアル情報のIDのみ入力します。
VBAのコードは次のようになります。

VB
Sub get_material
  
  'Femap model オブジェクトの生成
  Dim f As Object
  Set f = GetObject(,"femap.model")

  'マテリアルオブジェクトの作成
  Dim m As Object
  Set m = f.feMatl

 m.Get(Int(Cells(1,2)))  '指定したIDのマテリアルデータを取得する

  Cells(2,2) = m.title 'タイトルの出力
  Cells(3,2) = m.Type  '材料のタイプの出力
  
  Cells(4,2) = m.Ex   '縦弾性率(ヤング率)の出力
  Cells(5,2) = m.Gx   '横弾性率(せん断弾性率)の出力
  Cells(6,2) = m.Nuxy 'ポアソン比の代入
  
  Cells(7,2) = m.Alphaxx  '熱膨張率の出力
  Cells(8,2) = m.Kxx      '熱伝導率の出力
  Cells(9,2) = m.Cp       '比熱の出力
  
  Cells(10,2) = m.TensionLimit1     '引張の制限応力の出力
  Cells(11,2) = m.CompressionLimit1 '圧縮の制限応力の出力
  Cells(12,2) = m.ShearLimit        'せん断の制限応力の出力

  Cells(13,2) = m.Density '比重の出力
  Cells(14,2) = m.Damping '構造減衰比の出力
  Cells(15,2) = m.RefTemp '基準温度の出力

End Sub

・11行目 m.get(ID)で番号IDのデータを取得します。カッコ内のIDはLong型で記入します。セルの値を取得する際はInt(Cells(1,2))などのように、型を変換してあげると、エラーの可能性を減らせます。
このコードを実行すれば、エクセルシートにマテリアル情報を出力させることが出来ます。

おわりに

今回紹介したEXCEL VBAを使ったFEMAPのマテリアル自動作成は、複雑なモデルを扱う際の手作業を大幅に減らし、効率を向上させる強力なツールです。ぜひ、自身のプロジェクトに応じたカスタマイズを行ってみてください。

FEMAPでマテリアル設定しないまま解析したら、まるでゼリーで出来た家になっちゃったよ。

コメント

タイトルとURLをコピーしました