SolidWorksのCAEを使って

「無題のファイルへのアクセス中に共有違反が発生しました。」と出てことごとく「解析実行」できない状態に。過去解析できてたはずの部品もそのエラー。

SolidWorks 無題 共有 違反 CAE」で検索したけど。

一時的に使うフォルダを知りたかったがわからなかった。tempで検索すると見つかった。

C:\Users\ログインユーザー名\AppData\Local\Temp

を片っ端から削除したら回復した。このフォルダやファイルは隠しファイルなので見えるようにしてからTempのフォルダやファイルをドラッグしてDelボタン。

参照スケッチとエンティティ変換の違い

 

大きな違いは「投影対象」。対象がスケッチとエンティティ/要素の違いです。参照スケッチはスケッチ単位で強固な関連付けです。エンティティ変換は線、点(エンティティ/要素)単位の拘束です。拘束は削除できます。

参照スケッチは、エンティティ変換/要素変換でも可能というか、基本、エンティティ変換を使うのが普通でしょう。平行の場合だけ。形状からスケッチが欲しい時に使うのがほとんどです。次の動画みたいなことしませんよね。

で、参照スケッチがいいのは、

あらぬ方向、位置へのスケッチをしたい場合はスケッチ全体をコピーし関連付ける。

だから、寸法の共有とか標準化という考えで作るものです。標準化?した参照スケッチから複数のフィーチャーを作るとか。

参照ジオメトリの重心

フィーチャーがある時は、参照ジオメトリに「重心」と「合致参照」が増えます。背の高い製品を設計する時は重心を表示します。

フィーチャーが無いと「使えない」色になっているなら「重心」の存在を意識できるが、「平面」から「点」」までしか存在しません。Solidworksさん「重心」使えない色にして常に表示してください。

重心の位置をスケッチで使う場合、「重心参照点」をフィーチャーツリーに追加します。「重心参照点」はフィーチャーですからこれを使ってスケッチする場合は参照ジオメトリの平面を作ります。スケッチで「重心参照点」と直線の端を一致させることができます。つまり、拘束も使える。

赤い矢印が「重心参照点」フィーチャーです。

話は変わって、重心位置に点を表示するマクロです。参照ジオメトリの原点があれば十分でしょう。CharGPTならすぐできるだろうとやってみたが、部品表はすぐできたが、調子に乗っていろいろ要求したので結構時間がかかった。部品表のマクロの時は、Solidworksマクロってマイナーすぎてどうせできないだろって思って、コマメにコードを書いてもらってからまとめるという方法だったかあな。質問は10回程度だった。いい時代です。プログラムってちょっとしたことを確認するだけで時間がかかるし、コードを書く時間も。書く手間が省けるだけですごいが、コピペで使える。

平面に平行な参照ジオメトリの平面を作って、そこに点をスケッチする。評価の質量特性で重心が一時的に表示されるので正しくスケッチされているか確認して下さい。

Option Explicit

Dim swApp As Object
Dim Part As Object
Dim MassProp As MassProperty
Dim MassCenter(2) As Double
Dim RefPlaneFeature As Object
Dim SketchMgr As Object
Dim SketchPoint As Object

Sub main()

    ' SolidWorksアプリケーションへの接続
    Set swApp = Application.SldWorks
    Set Part = swApp.ActiveDoc
    If Part Is Nothing Then
        MsgBox "モデルが開いていません"
        Exit Sub
    End If
    
    ' 質量プロパティオブジェクトを取得
    Set MassProp = Part.Extension.CreateMassProperty
    If MassProp Is Nothing Then
        MsgBox "質量プロパティを取得できませんでした。"
        Exit Sub
    End If
    
    ' 重心の位置を取得
    MassCenter(0) = MassProp.CenterOfMass(0) ' X座標
    MassCenter(1) = MassProp.CenterOfMass(1) ' Y座標
    MassCenter(2) = MassProp.CenterOfMass(2) ' Z座標
    
    '正面を選択
    Dim boolstatus As Boolean
    boolstatus = Part.Extension.SelectByID2("正面", "PLANE", 0, 0, 0, True, 0, Nothing, 0)

    ' 平面を挿入
    Set RefPlaneFeature = Part.FeatureManager.InsertRefPlane(swRefPlaneReferenceConstraint_Distance, MassCenter(2), 0, 0, 0, 0)

    If RefPlaneFeature Is Nothing Then
        MsgBox "参照平面の作成に失敗しました。"
        Exit Sub
    End If
    
    ' スケッチマネージャーを取得
    Set SketchMgr = Part.SketchManager
    
    ' 作成した参照平面を選択
    RefPlaneFeature.Select False
    
    ' 新しいスケッチを開始
    SketchMgr.InsertSketch True
    
    ' 重心の位置に点を作成
    Set SketchPoint = SketchMgr.CreatePoint(MassCenter(0), MassCenter(1), MassCenter(2))
    
    ' スケッチを閉じる
    SketchMgr.InsertSketch True
    
    MsgBox "重心の位置を通過する参照ジオメトリ平面上に点がスケッチされました。"

End Sub

図面の部品表をExcelファイルに保存するSolidworksのマクロ

これは、開いている図面で実行すると部品表/BOM(Bill Of Materials)をExcelファイルで保存します。Excelのファイル名は図面のファイル名と同じです。図面ファイルと同じフォルダに保存します。Excelのマクロも使ってます。

部品表のExcelファイルを移動して発注などに使っても図面の関係がわかるようにA1セルに図面ファイルのフルパスのファイル名を入れています。

完了したら、Solidworksでは完了のメッセージを開き、Windowsエクスプローラーで保存したExcelのファイルがあるフォルダを開きます。

Sub drdBOM_xls()

    ' SolidWorksアプリケーションのインスタンスを取得
    Dim swApp As SldWorks.SldWorks
    Set swApp = Application.SldWorks

    ' アクティブなドキュメントを取得
    Dim swModel As SldWorks.ModelDoc2
    Set swModel = swApp.ActiveDoc

    If swModel Is Nothing Then
        MsgBox "アクティブなドキュメントが見つかりません。"
        Exit Sub
    End If

    ' 部品表を保持する変数
    Dim swTable As SldWorks.TableAnnotation
    Dim foundBOM As Boolean
    foundBOM = False

    ' 図面シートまたはビューを取得し、すべてのビューを巡回
    Dim swView As SldWorks.View
    Set swView = swModel.GetFirstView

    Do While Not swView Is Nothing
        ' 各ビュー内のテーブル注釈を取得
        Dim swTableAnn As SldWorks.TableAnnotation
        Set swTableAnn = swView.GetFirstTableAnnotation

        ' テーブルアノテーションを巡回
        Do While Not swTableAnn Is Nothing
            ' 部品表かどうか確認
            If swTableAnn.Type = swTableAnnotationType_e.swTableAnnotation_BillOfMaterials Then
                Set swTable = swTableAnn
                foundBOM = True
                Exit Do
            End If
            Set swTableAnn = swTableAnn.GetNext
        Loop
        
        If foundBOM Then Exit Do
        Set swView = swView.GetNextView
    Loop

    ' 部品表が見つからなかった場合
    If Not foundBOM Then
        MsgBox "部品表が見つかりませんでした。"
        Exit Sub
    End If

    ' Excelアプリケーションのインスタンスを作成
    Dim xlApp As Object
    Dim xlBook As Object
    Dim xlSheet As Object
    Set xlApp = CreateObject("Excel.Application")
    Set xlBook = xlApp.Workbooks.Add
    Set xlSheet = xlBook.Sheets(1)

    ' Excelを表示
    xlApp.Visible = True

    ' 正規表現オブジェクトを作成してHTMLタグを削除する
    Dim regex As Object
    Set regex = CreateObject("VBScript.RegExp")
    regex.Global = True
    regex.IgnoreCase = True
    regex.Pattern = "<[^>]+>" ' HTMLタグにマッチするパターン

    ' 部品表の行数と列数を取得
    Dim rowCount As Long
    Dim colCount As Long
    rowCount = swTable.rowCount
    colCount = swTable.ColumnCount

    ' 部品表データをExcelに転送
    Dim i As Long, j As Long
    Dim rawText As String
    Dim cleanText As String
    For i = 0 To rowCount - 1
        For j = 0 To colCount - 1
            rawText = swTable.DisplayedText(i, j)
            '0001先頭が0から始まる文字を数値にしないために’を入れてセルで文字列にする
            If Left(rawText, 1) = "0" Or Left(rawText, 1) = "0" Then rawText = "'" & rawText
            ' HTMLタグを削除
            cleanText = regex.Replace(rawText, "")
            xlSheet.Cells(i + 1, j + 1).Value = cleanText
        Next j
    Next i
    'A1に図面のフォルダ名+ファイル名をコメントで追加
    xlSheet.Range("A1").AddComment swModel.GetPathName
    'Excelで保存するために図面のフルパス+ファイル名の拡張子だけを削除
    Dim ss As String
    ss = Mid(swModel.GetPathName, InStrRev(swModel.GetPathName, "."))
    ss = VBA.Replace(swModel.GetPathName, ss, "")
    
    ' Excelファイルの保存
     ' 警告を無効にする
    xlApp.Application.DisplayAlerts = False
    xlBook.SaveAs ss 'Excelファイルの保存
    'xlBook.SaveAs ss & ".csv"  'CSVファイルの保存。テキストです
     ' 警告を無効にする
    xlApp.Application.DisplayAlerts = True
    xlApp.Quit  'Excel終了

    ' クリーンアップ
    Set xlSheet = Nothing
    Set xlBook = Nothing
    Set xlApp = Nothing

    MsgBox "部品表がExcelにエクスポートされました。"
    ' エクスプローラーでExcelで保存したフォルダを開く
    ss = Mid(swModel.GetPathName, InStrRev(swModel.GetPathName, "\"))
    ss = VBA.Replace(swModel.GetPathName, ss, "")
    Shell "explorer.exe " & ss, VBA.vbNormalFocus
End Sub

とりあえずの状態ですが、いずれあるフォルダ以下にある全図面ファイルの部品表を自動的にExcelファイル保存するマクロ/コードを書きたいと思います。やっぱ自動化ですよね。DX(デジタルトランスフォーメーション)っていうやつです。

拡張子dotの意味

ソリッドワークス/SolidWorksでテンプレートを保存する時に何でdotなん????って思ってました。prt,asm,drwはいいのですが続くdot。

  • 部品の拡張子が*.prtdot
  • アセンブリの拡張子が*.asmdot
  • 図面の拡張子が*.drwdot

WordでもNormal.dotとかマクロ付きはNormal.dotmというテンプレートファイルがあるようです。これでピント!きた。予想ですが、

DOcument Templatesの略ではないかと?

SolidWorksの部品のテンプレート保存。Part Template

SolidWorksのアセンブリのテンプレート保存。Assembly Templates

SolidWorksの図面のテンプレート保存。これだけ日本語ね。図面テンプレート

ところで、

テンプレートは、ドキュメントプロパティとファイルプロパティのどちらも保存できる。特に、ファイルプロパティには重量と材料は追加しておきましょう。部品表を作る時に便利ですから。

下図の信号機の右がファイルプロパティ、その右がシステムプロパティとドキュメントプロパティ。

SolidWorks仕事始めファイルで設定、テンプレート

テンプレートとは日本語で型という意味です。テンプレートは、コンピュータの世界では実体はファイルでしょう。ファイルとしていろいろなことを設定できます。

まず、システムオプションです。これはテンプレートではありませんが、Solidworksの設定です。

さらに

テンプレートとといえばドキュメントテンプレートと部品表、図面シートでしょう。ドキュメントテンプレートは、部品、アセンブリ、図面の3種類があります。

「システムオプション」の「ファイル検索」には下図のように多くのテンプレートというファイルがあります。

この中にはフォルダが設定されてない空白なものもあります。例えば、「参照ドキュメン」です。使わないから空白なのです。

チャットGTP/ChatGTPに「有限要素法の簡易版が材料力学?」って聞いてみた

Solidworksでメッシュがあるから「これが要素ね」って何気なく考えてた。人に聞くって「今更何を聞く」って顔されそうで、ChatGTPがあるな~って興味本位で。

検索でも調べられるが正しくかどうか分からなくても語りかけてくれる感じが良かった。

この書式が私の書き込みです。

上の書式以外はChatGTPの返答です。

あなた:

材料力学と有限要素法の関係ですが、有限要素法の簡易版が材料力学という考えは正しい?
ChatGPT:

ChatGPT

「材料力学」と「有限要素法(FEM)」の関係を「有限要素法の簡易版が材料力学」と捉えるのは、厳密には正確ではありませんが、ある意味では近い概念です。

材料力学とは:

材料力学は、力や変形に対する材料の応答を解析する学問です。一般的に、単純な構造部材(ビーム、柱、プレートなど)の力学挙動を解析し、応力、ひずみ、変形を計算するための理論や公式が確立されています。材料力学は、特定の構造や条件に対して比較的単純な手法を使って解析が行われます。

有限要素法(FEM)とは:

有限要素法は、複雑な形状や荷重条件の構造物を解析するために開発された数値解析手法です。FEMでは、構造物を細かい要素に分割し、それぞれの要素の応力や変形を計算することで、全体の挙動を解析します。材料力学の理論をベースにしている部分もありますが、FEMはより複雑な問題を解くための汎用的な手法です。

関係性:

  • 材料力学は、FEMが扱う問題の一部に対して簡単かつ直接的な解法を提供します。例えば、単純な梁の曲げや引張、圧縮の問題は材料力学で解析できますが、より複雑な形状や境界条件ではFEMが必要になります。
  • FEMは材料力学の基礎理論を利用しつつ、より一般的で複雑な問題に対応できるように拡張したものと言えます。

結論:

「材料力学は有限要素法の簡易版」という表現は、材料力学が扱う特定のシンプルな問題において成り立つこともありますが、材料力学はそれ自体独立した学問であり、有限要素法の一部や簡易版とは異なります。両者は相補的な関係にありますが、アプローチのスコープや手法には違いがあります。

4o

あなた:
CAEではメッシュを作って計算させますがこれが有限要素ということですか
ChatGPT:

ChatGPT

はい、その通りです。CAE(Computer-Aided Engineering)でのメッシュ生成は、まさに「有限要素法(FEM)」の要素を作るプロセスであり、これが「有限要素」に相当します。

メッシュと有限要素の関係:

有限要素法では、複雑な形状や構造物を解析するために、解析対象を「有限要素」という小さな単位に分割します。これを「メッシュを作る」と呼びます。

  1. 有限要素(element):対象物を小さな部分に分割した個々の要素です。これらは直線的な三角形や四角形、または立体的な四面体や六面体などの単純な形状に分けられます。
  2. 節点(node):要素の各コーナーに配置される点で、要素間のつながりを示します。解析結果として、応力や変位などの物理量はこれらの節点で計算されます。
  3. メッシュ:有限要素の集合体です。解析対象全体を網目(メッシュ)状に小さな要素に分割することで、複雑な形状でも解析可能にします。

メッシュ生成の役割:

  • メッシュは、解析対象の形状や力の分布などに応じて最適化されます。複雑な部分や応力が集中しやすい部分には細かいメッシュを作り、単純な部分には粗いメッシュを作ることで、計算の精度と効率をバランスさせます。
  • 有限要素ごとに、力の平衡や材料の変形に基づいて応力やひずみを計算し、これらの結果を節点に集約して全体の解析結果を導き出します。

まとめ:

CAEでのメッシュ生成は、FEMにおける「有限要素」を構築する過程です。メッシュの要素に分けることで、コンピュータが複雑な問題を小さな要素ごとに処理し、全体の挙動を解析できるようにしています。

4o


感想。ChatGTPって優しい。

すみ肉溶接をSolidWorksでCAE

すみ肉溶接 cae solidworksで検索するとSolidWorksのヘルプが見つかります。

上図のフリーハンドの赤色の円のようにすみ肉溶接は、普通、完全溶け込み(フルペネ画像もあります)とはなりません。溶接部分は付いてるが、2つの板はスキマが空いてます。

溶接をやってる自分からすると同じ板厚でも図の場合は、縦側が溶けにくく、くの字になりやすい。水平の板は溶けやすく、仮付の段階で直角でなくなる。溶接は引っ張る

完全溶け込みにするなら開先加工、レ型にすればフルペネになるので、一つの塊、ソリッドとして解析すればいい。SimulationXpressで解析できる。SolidWorksを持ってればだれでもできる。リンクの検索の中でこちらによるとSimulationXpressはSolidWorksのStandardでも使える。

完全溶け込みだと、構造解析は簡単かと思います。どんな強度は鋼材の板厚が基本で、溶接部ののど厚だの溶け込みだのはCAEからすると余計な計算です。

SolidWorksでモデルと作る時は、完全溶込み溶接なら2つの板をのモデルを作る時に「結果にマージ」して、すみ肉溶接部分はフィレットでこれも「結果にマージ」すると一体物になって接触の設定はいらない。

T形のすみ肉溶接はボンドなど接触の設定がいる。接触セットや部材接触など何って感じです。

SimulationXpress接触の設定ができない。力、圧力の設定時にアラートが出て進めなくなる。下図は、SimulationXpressの途中で「メッセージ」が出て止まっている状態。

四角の赤枠のメッセージには、以下が書いてある。

SOLIDWORKS SimulationXpressは解析中の部品にマルチボディを検知しました。現在、ソフトウェアは、任意の単一ボディをサポートします。解析するボディを選択して下さい。選択されたボディ以外の全てのボディは非表示になります。

どれか1体のボディを選択すればSimulationXpressは解析を進めることができる。