はじめに
このガイドでは、Excel VBAを使用してFemapのノードに境界条件を付与する方法について詳しく説明します。手動での設定は時間がかかり、エラーが発生しやすいですが、VBAを活用することで効率的かつ正確に作業を進めることができます。本ガイドを通じて、ExcelとFemapを連携させる手法を学び、設計業務の自動化を実現しましょう。
ノードに境界条件を付与するVBAコード
まず、ノードに拘束をつける前に、BCセットを作成する必要があります。VBAを使ってBCセットを作成する方法はこちらをご覧ください。
基本的なVBAコードの例
以下のコードは、Excel VBAを使用してFemapのノードに境界条件を付ける方法の例です。
Sub makeBCNode()
'Femap model オブジェクトの生成
Dim f As Object
Set f = GetObject(, "Femap.model")
'BCセットオブジェクトの作成
Dim bcSet As Object
Set bcSet = f.feBCSet
'BCNodeオブジェクトの生成
Dim bcNode As Object
Set bcNode = f.feBCNode
'その他必要な変数
Dim bcSetId As Long '境界条件を付与するBCセットのID
Dim nodeId As Long '境界条件を付与するノードのID
Dim condArray(5) As Boolean 'ノードに付与する境界条件
Dim rc As Long 'リターンコードの格納用
'変数に値を入力
bcSetId = 1 'この例では境界条件を付与するBCセットIDを1とする
nodeId = 1 'この例では、境界条件を付与するノードIDを1とする
condArray(0) = True 'この例では、境界条件としてX方向並進を拘束する。(拘束しない場合はFalseを代入する)
condArray(1) = True 'この例では、境界条件としてY方向並進を拘束する。(拘束しない場合はFalseを代入する)
condArray(2) = True 'この例では、境界条件としてZ方向並進を拘束する。(拘束しない場合はFalseを代入する)
condArray(3) = True 'この例では、境界条件としてX軸方向の回転を拘束する。(拘束しない場合はFalseを代入する)
condArray(4) = True 'この例では、境界条件としてY軸方向の回転を拘束する。(拘束しない場合はFalseを代入する)
condArray(5) = True 'この例では、境界条件としてZ軸方向の回転を拘束する。(拘束しない場合はFalseを代入する)
'境界条件を付与するBCセットをアクティブにする
bcSet.Active = bcSetId
'ノードに境界条件を設定する
rc = bcNode.Add(-1 * nodeId, condArray(0), condArray(1), condArray(2), condArray(3), condArray(4), condArray(5))
'オブジェクト開放
Set bcNode = Nothing
Set bcSet = Nothing
Set f = Nothing
End Sub
詳細な説明
- 3~4行目。fはFemapモデルオブジェクトを参照します。GetObject関数を使用して、現在実行中のFemapアプリケーションに接続します。
- 7~8行目。bcSetは境界条件セットオブジェクトを参照します。f.feBCSetを使用して新しいBCセットを作成します。
- 11~12行目。bcNodeは境界条件ノードオブジェクトを参照します。f.feBCNodeを使用して新しいBCノードを作成します。
- 15行目。bcSetIdは境界条件セットのIDを格納します。
- 16行目。nodeIdは境界条件を付与するノードのIDを格納します。
- 17行目。condArrayは各方向の境界条件を格納する配列です。
- 18行目。rcはリターンコードを格納します。
- 21~28行目。各変数に値を代入しています。この部分で代入しているものを変更することで、任意のBCセットの任意のノードに、好きな高速条件を与えることができます。
- 31行目。境界条件を付与するBCセットをアクティブにします。
- 34行目。bcNode.Addメソッドを使用して、指定したノードに境界条件を設定します。-1 * nodeIdはノード番号の符号を反転させています。こうすることで、このメソッドでノード1つ1つに対し高速条件を適用させることができます。
- 37~39行目。使用したオブジェクトを開放し、メモリをクリアします。
Excelと連携させる例
ノードの高速状態はよう数字で表されます。
各数字の有無が、特定の自由度を示しています。
1 | X方向の並進(移動) |
2 | Y方向の並進(移動) |
3 | Z方向の並進(移動) |
4 | X軸方向の回転 |
5 | Y軸方向の回転 |
6 | Z軸方向の回転 |
ノードの自由度、Degrees of Freedom (DOF)
たとえば、「123」と設定されている場合、そのノードはX,Y,Z方向の移動が拘束されていることを意味します。「456」ならばX,Y,Z軸周りの回転が拘束されていることを意味します。
そこで、次のようなエクセルのシートを準備します。
このエクセルに対応するコードを記載します。
Sub makeBCNode()
'Femap model オブジェクトの生成
Dim f As Object
Set f = GetObject(, "Femap.model")
'BCセットオブジェクトの作成
Dim bcSet As Object
Set bcSet = f.feBCSet
'BCNodeオブジェクトの生成
Dim bcNode As Object
Set bcNode = f.feBCNode
'その他必要な変数
Dim bcSetId As Long '境界条件を付与するBCセットのID
Dim nodeId As Long '境界条件を付与するノードのID
Dim condString As String '境界条件の文字列
Dim condArray(5) As Boolean 'ノードに付与する境界条件
Dim rc As Long 'リターンコードの格納用
'変数に値を入力
bcSetId = Cells(2, 1)
nodeId = Cells(2, 2)
condString = Str(Cells(2, 3))
If InStr(condString, "1") > 1 Then
condArray(0) = True
Else
condArray(0) = False
End If
If InStr(condString, "2") > 1 Then
condArray(1) = True
Else
condArray(1) = False
End If
If InStr(condString, "3") > 1 Then
condArray(2) = True
Else
condArray(2) = False
End If
If InStr(condString, "4") > 1 Then
condArray(3) = True
Else
condArray(3) = False
End If
If InStr(condString, "5") > 1 Then
condArray(4) = True
Else
condArray(4) = False
End If
If InStr(condString, "6") > 1 Then
condArray(5) = True
Else
condArray(5) = False
End If
'境界条件を付与するBCセットをアクティブにする
bcSet.Active = bcSetId
'ノードに境界条件を設定する
rc = bcNode.Add(-1 * nodeId, condArray(0), condArray(1), condArray(2), condArray(3), condArray(4), condArray(5))
'オブジェクト開放
Set bcNode = Nothing
Set bcSet = Nothing
Set f = Nothing
End Sub
内容は基本的なVBAコードで説明したものとほぼ同じですが、1点大きく異なります。
Excelで拘束状態に1~6の数字を入力させています。これを文字列として取り出し、各数字の有無でそれぞれの拘束状態を判別し、設定するように工夫しています。
おわりに
このガイドを通じて、Excel VBAを使用してFemapのノードに境界条件を付与する方法を学んでいただけたと思います。手動での設定に比べて、VBAを活用することで作業の効率化と正確性が向上します。これからも、VBAを活用して設計業務の自動化を進め、より高度な解析や設計に取り組んでいただければ幸いです。
これでノードの境界条件を設定するのは簡単だね。ノードは自由度を奪われて泣いてるかもしれないね。
コメント