20190225

FEMAPのVBA(APIプログラミング)を使った その2。

さくらのブログって、文字数制限あるのか。
「内容の文字数が長すぎます」ってエラーが返ってきた。
文字数至上主義の私にとっては寝耳に水。

全編10,000文字オーバーだったのが、分割されちゃった。ぐすん。

というわけで、二つに分かれます。

プロパティの編集

今回は、あまりいじらない。
来月以降にいじる。
マテリアルを新しく作っているので、プロパティに設定しないとダメ。だからその部分だけやる。

プロパティを新しく作る

プロパティのときも、一行追加するだけで作れる。マテリアルも何も設定されていない。
ただ、やはり、この程度の事をするだけらば、GUIで作ったほうがいい。

Sub Main
Dim App As femap.model
Set App = feFemap()

App.feProp.Put(1)

End Sub

プロパティにいろいろ設定することを考えると、下の書き方のほうが賢明。

Sub Main
Dim App As femap.model
Set App = feFemap()

Dim Plop1 As femap.Prop
Set Plop1 = App.feProp
Plop1.Put(Plop1.NextEmptyID()) ' 次の(空の)IDに、putする。

End Sub

新規に作ったプロパティに、新規に作ったマテリアルをセットする。

  1. マテリアルを作成
  2. 1で作ったマテリアルを、プロパティにセットする。
Sub Main
Dim App As femap.model
Set App = feFemap()

Dim Mat1 As femap.Matl
Set Mat1 = App.feMatl
Mat1.Ex = 100000
Mat1.Nuxy = 0.3
Mat1.Put(Mat1.NextEmptyID()) ' 次の(空の)IDに、putする。

Dim Plop1 As femap.Prop
Set Plop1 = App.feProp ' App.feAppMessage(1, "Material ID" & Mat1.ID)
Plop1.matlID = Mat1.ID
Plop1.Put(Plop1.NextEmptyID()) ' 次の(空の)IDに、putする。

End
Sub

line elementのbar element(バー要素)のプロパティを作るには。

3次元梁要素。断面形状の設定とかの設定をしたい。
line elementのbar elementのL形鋼とかH型(I型)鋼だとかを作りたい。

Sub Main
Dim App As femap.model
Set App = feFemap()
Dim Mat1 As femap.Matl
Set Mat1 = App.feMatl
Mat1.Ex = 100000
Mat1.Nuxy = 0.3
Mat1.Put(Mat1.NextEmptyID()) ' 次の(空の)IDに、putする。
Dim Plop1 As femap.Prop
Set Plop1 = App.feProp
Dim Plop2 As femap.Prop
Set Plop2 = App.feProp
Dim Plop3 As femap.Prop
Set Plop3 = App.feProp
' App.feAppMessage(1, "Material ID" & Mat1.ID)
Plop1.matlID = Mat1.ID
'''''''''''''''''''''''
'''ここまでは、さっきと一緒'''
'''''''''''''''''''''''

''''''''''''
''' H型鋼 '''
''''''''''''
Plop1.type = 2 ' これで、バー要素になった。
Dim danmen() As Varinat
ReDim danmen(5)
danmen(0) = 100.
danmen(1) = 75.
danmen(2) = 75.
danmen(3) = 8.
danmen(4) = 8.
danmen(5) = 5.
Plop1.ComputeStdShape(9, danmen, 0, 0, False, False, False ) ' H形鋼(9)の、断面形状情報はdanmenに入れたやつで(H100x75)、オリエンテーションは右(=0)で、断面プロパティの評価方法は自動(=0)、その他はFalse。とりあえず。動くかのtestなので。
Plop1.Put(Plop1.NextEmptyID()) ' 次の(空の)IDに、putする。
''''''''''''
''' □型鋼 '''
''''''''''''
Plop2.matlID = Mat1.ID ' Materialは、全部一緒。
Plop2.type = 2 ' バー要素。
''''''''''失敗例''''''''''''''''''''''''''''''
' □型鋼の断面形状の情報は3つだが。間違った長さの引数を入れても、断面形状の計算が始まらない。
' せっかく早く帰ったのに、下の様なコードを書いていたらまったく動かず。
' 20~翌0.10まで格闘して、「接点制限版じゃ一回しか断面計算できないんだ…」と思い始めていた。
' ReDim danmen(2)
' danmen(0) = 50.
' danmen(1) = 50.
' danmen(2) = 3.2
''''''''''失敗例''''''''''''''''''''''''''''''
ReDim danmen(5) ' あくまでも、断面形状の引数は5(0~5までの6つ。)□型鋼の断面形状の情報は3つ。
danmen(0) = 50.
danmen(1) = 50.
danmen(5) = 3.2' GUIで、6っぽいところに値があったから、まさかと思い入力したら。まさかだった。
Plop2.ComputeStdShape(2, danmen, 0, 0, False, False, False ) ' 角形鋼(2)、断面形状情報は縦・横・厚(□50x50x3.2)
Plop2.Put(Plop2.NextEmptyID()) ' 次の(空の)IDに、putする。
''''''''''''
''' L型鋼 '''
''''''''''''
Plop3.matlID = Mat1.ID ' Materialは、全部一緒。
Plop3.type = 2 ' バー要素。
ReDim danmen(5) ' 断面形状はL型。
danmen(0) = 50. ' 高さ
danmen(1) = 50. ' 幅
danmen(4) = 4. ' 厚さ下。
danmen(5) = 4. '
Plop3.ComputeStdShape(11, danmen, 0, 0, False, False, False ) ' L形鋼(11)、断面形状情報は縦・横・厚(□50x50x3.2)
Plop3.Put(Plop3.NextEmptyID()) ' 次の(空の)IDに、putする。

End Sub

これで、bar要素のプロパティはできたと思う。
下に、その他の値を入力したら、何になるのか書いた。

しかし、それ以上に、断面形状の引数の配列の、どのインデックスに数値を入力するのかが難しい。
特にL型とボックスなどの6つ長さ情報いらないやつ。
Lは[0,1,4,5]、□は[0,1,5]に入れるべし…そんなのわかるか!!

GUIをよく見て、狙いをさだめないと、断面形状の計算が始まりません。
→メッセージに何も表示されなかったら、正常に断面が入力されていない。
→断面の配列を使いまわすのであれば、初期化などについても、気を付けられたし。前のが残っちゃってたり。

proprtyのtype一覧
プロパティのタイプ入力すべきID
ロッド1
バー2
チューブ3
リンク4
ビーム5
スプリング6
DOFスプリング7
カーブドビーム8
ギャップ9
プロットオンリー10
プレート(線形)17
プレート(2次)18
平面ひずみ(線形)19
平面ひずみ(2次)20
軸対称(線形)23
軸対称(2次)24
ソリッド(線形)25
ソリッド(2次)26
質量27
質量マトリクス28
剛体29
剛性マトリクス30
カーブドチューブ31
平面プロットオンリー32
コンタクト34
軸対称シェル(線形)35
軸対称シェル(2次)36
2次ビーム37

↑のほかにも書いてあった。
2しか使ってないが。

ComputeStdShapeの引数
ComputeStdShape( シェイプID, 断面形状, オリエンテーション(右なら0), 断面プロパティの評価方法(自動なら0), せん断中心のオフセット, ねじれ定数の計算の有無(ありならTrue), stress_recovery  )

という感じで使うらしい。
これをやった後、Putすると、ちゃんと断面形状の設定されたプロパティができあがる。

シェイプID

シェイプIDには、数値を入れる。
シェイプID以外にも、FEMAP constantで用意されている。
→FSHP_Cとか、FSHP_Lとかでも代用可能。書かないが。

  • 標準断面
形状
1長方形バー
2長方形チューブ
5円形バー
6円形チューブ
9I型
10チャネル
11アングル
  • Nastran断面
形状
16Rod
17Tube
18L
19I
20Channel
22Box
23Bar
24Cross
25H

よくわからないのは書かなかったが、上記以外にももっとあった。
使ったのは2,9,11だけだけど。

その他は、適当。

断面形状の評価方法は自動(=0)。
Boolianなら、ほぼ容赦なくFalse。

断面形状

必要な数だけ、配列に入れて入力にする。
必要な数は、シェイプIDによって変わってくる。
そのシェイプをGUIで編集するときの順番通りに配列を作る。

これがものすごく難しかった。配列の大きさは、(5)で指定(0~5までの6個)でないと、計算されない。

posted by yuchan at 07:00 | Comment(0) | FEMAP
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: