フォルダ内の全ファイルを自動的に呼び込んでPDFに保存するマクロ VBA

ソリッドワークスはVBAが使える。VBAはExcelで使ったことがあるのでなんとなくわかるがSolidWorksのオブジェクトの使い方を探さないといけない。使い方よりサンプルだ。 これ、相当以前からやりたかっがやっとでき … “フォルダ内の全ファイルを自動的に呼び込んでPDFに保存するマクロ VBA” の続きを読む

ソリッドワークスはVBAが使える。
VBAはExcelで使ったことがあるのでなんとなくわかるがSolidWorksのオブジェクトの使い方を探さないといけない。使い方よりサンプルだ。

これ、相当以前からやりたかっがやっとできた。
あるフォルダにある全図をPDFにできるようになった。うれしい。

で、
何をしてできたのかというと、googleしたのだが、
・マクロの操作を保存する方法
・ソリッドワークスのライブラリのヘルプ場所、サンプル探し
・ファイル一覧の方法
思い出せないので随時。

準備
ツールのユーザー定義で以下のダイアログを表示し、マクロにチェックを入れる。
1845ce89.png
マクロにチェックを入れると以下が見えるようになる。
99d222fe.png

—————————————————————-
全部自分でプログラムを書くのは面倒なのでやりたいことを操作してプログラムを作れせる。
適当なSLDDRW拡張子のファイルを呼び込んでおく。
Image.pngを押して、同じ名前でPDFファイルを保存する。(余計なこと、関係ないことをマウスで操作しないこと!!!。プログラムが煩雑になる)
以下が出来上がった。bdd88b78.pngを押すとマクロのファイルを指定して呼び出すことができる。
Dim swApp As Object

Dim Part As Object
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long

Sub main()

Set swApp = _
Application.SldWorks

Set Part = swApp.ActiveDoc
Part.ViewZoomtofit2
longstatus = Part.SaveAs3(“C:\Users\tanaka\Desktop\図面1\maru1.PDF”, 0, 0)
End Sub

!!注意、フォントの関係で\は¥のこと。!!!!!
この中で”C:\Users\tanaka\Desktop\図面1\maru1.PDF”の文字列が作れればほぼ完成している。

ついでに、ツールの参照設定でsolidworks????あたりを参照しておくと、コードを書くときに変数宣言時やイミディエイトでメソッドの使い方を教えてくれたり、メンバを一覧表示してくれたりする。
83ab1822.png
やらなくても動くが、やっておこう。

—————————————————————–
今呼び込んでいる図面をPDFで保存するマクロは以下です。ファイル名の拡張子SLDDRWをPDFに変えるだけ。
Dim swApp As Object

Dim Part As Object
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long

Sub main()

  Set swApp = _
  Application.SldWorks

  Set Part = swApp.ActiveDoc
  Part.ViewZoomtofit2
  ss = Part.GetPathName’今呼び込んでいる図面のパス名+ファイル名をssに入れる
  kk = Split(ss, “.”)’.文字で区切って、各文字列を配列に入れる。kkは配列になる。UBound(kk)で配列の個数
  ‘拡張子を取り外し。パス+ファイル名(拡張子なし)がssに入る
  ss = Left(ss, Len(ss) – Len(kk(UBound(kk))) – 1)
  longstatus = Part.SaveAs3(ss & “.PDF”, 0, 0)’拡張子はPDFとして保存
End Sub

この中で厄介なので現在の呼び込んでいるファイル名やパス名を取り出す方法。
これはマクロ記憶ではできない。
GetPathNameメソッドを探すのには苦労した。APIのドキュメントで見つけることができたが、使い方がわからず、サンプルを探して
Part.GetPathName がやっと見つかった。
あとは、
文字列の操作/処理。
http://www.geocities.jp/cbc_vbnet/function/mojireyu_function.html#instr
イミディエイトに入れながらすると文字列処理はなんとかなる。VBAの編集でイミディエイトが見えない場合は、Ctrl+d。

—————————————————————-
今、呼び込んでいる図面のパスにある全SLDDRWのファイルを順番に呼び込んでPDFで保存する。
Dim swApp As Object

Dim Part As Object
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long

Sub main()

    Set swApp = _
    Application.SldWorks
   
    Set Part = swApp.ActiveDoc
    Part.ViewZoomtofit2
    ss = Part.GetPathName ‘今呼び込んでいる図面のパス名+ファイル名をssに入れる
     ‘.文字で区切って、各文字列を配列に入れる。kkは配列になる。UBound(kk)で配列の個数
    kk = Split(ss, “.”) 

     ‘拡張子を取り外し。パス+ファイル名(拡張子なし)がssに入る
    ss = Left(ss, Len(ss) – Len(kk(UBound(kk))) – 1) 
     ‘ssの確認。イミディエイトのウィンドウにssのデータが書かれる。イミディエイトが見えない場合は、Ctrl+d
    Debug.Print ss
    jj = Split(ss, “\”) ‘\文字で区切って、各文字列を配列に入れる。
     ‘ファイル名の取り出し。最後の配列のデータをfnameに入れる。jj(0)が先頭のデータ。
    fname = jj(UBound(jj)) 
    pname = Left(ss, Len(ss) – Len(fname)) ‘パスの文字列、最後の¥も含む
    Debug.Print fname
    Debug.Print pname
    nn = Dir(pname)’1つ目のファイル名を取り出す。nnにファイル名が入る
    Do Until nn = “” ‘Dir()は全ファイルを取り出し終えたら””を返す
        If InStr(nn, “.SLDDRW”) Then ‘ファイル名に.SLDDRWを含む場合
            Debug.Print TypeName(nn), nn ‘TypeName関数はカッコ内のデータの型を返す
             ‘open_savePDF  sub/サブルーチンを呼び出す。サブルーチンにパス名+ファイル名を渡す
             open_savePDF pname & nn  ‘open_savePDFは自作のサブルーチン(関数のようなもの)
        End If
        nn = Dir()’次のファイル名を取り出す。
    Loop
End Sub

‘引数はパス名+ファイル名を受け取る。これは自作サブルーチン。ほとんどがマクロ記憶で
Sub open_savePDF(pf) 

    Set swApp = _
    Application.SldWorks
   
    Set Part = swApp.ActiveDoc
   ‘受け取ったpfパス名+ファイル名で開く
    Set Part = swApp.OpenDoc6(pf, 3, 0, “”, longstatus, longwarnings) 
    Set Part = swApp.ActiveDoc
    Dim myModelView As Object
    Set myModelView = Part.ActiveView
    myModelView.FrameLeft = 0
    myModelView.FrameTop = 21
    Set myModelView = Part.ActiveView
    myModelView.FrameState = swWindowState_e.swWindowMaximized
‘    swApp.ActivateDoc2 “maru3.kotae – シート1”, False, longstatus

    ss = Part.GetPathName ‘今呼び込んでいる図面のパス名+ファイル名をssに入れる
     ‘.文字で区切って、各文字列を配列に入れる。kkは配列になる。UBound(kk)で配列の個数
    kk = Split(ss, “.”) 
    ‘拡張子を取り外し。パス+ファイル名(拡張子なし)がssに入る
    ss = Left(ss, Len(ss) – Len(kk(UBound(kk))) – 1) 

    Debug.Print ss
    longstatus = Part.SaveAs3(ss & “.PDF”, 0, 0)
   
    Set Part = swApp.ActiveDoc
    Set Part = Nothing
    swApp.CloseDoc pf ‘パス名でも終了指定できる
End Sub

dir(パス名)を一度するれば、dir()とカッコ内になにも入れないと次のファイルを得ることができる。
closedocの引数がパスでもいいのが分かったのがこれ。

https://forum.solidworks.com/thread/33487

下がだいたい四角、上が丸の展開図  ロフト ベンド

ロフト ベンドは、シェル化する方法から板金に変換した方が簡単だ。ロフト ベンドは、角を丸くしないとできない。そんな経験。 下は真四角にするとロフトができなかった。四角の角を丸くしないといけません!ヘルプはこちら英語版なら … “下がだいたい四角、上が丸の展開図  ロフト ベンド” の続きを読む

ロフト ベンド
は、シェル化する方法から板金に変換した方が簡単だ。
ロフト ベンドは、角を丸くしないとできない。
そんな経験。

下は真四角にするとロフトができなかった。
四角の角を丸くしないといけません!
ヘルプはこちら
英語版ならいろいろある

直線を使って線をカットしている。
 

英語だけどこんなのもある。
 

相関線

直径の違う管が交差しているとどのような展開図になるのか?手書きなら簡単なことだが。ソリッドワークスでやってみた。 まずは、作成。 展開 両方を一挙に展開はできないようです。  

直径の違う管が交差しているとどのような展開図になるのか?
手書きなら簡単なことだが。
ソリッドワークスでやってみた。

まずは、作成。

展開

両方を一挙に展開はできないようです。

 

投影は、第一角法。第三角法は投写?

投影図の投影が気になる。
第三角法をしか使わない日本。
勉強では、第一角法を習い。図学というので投影という言葉があったような。

第三角法は、「影」では無い。
言葉を正確にとらえる文系の方は、投影図と聞けば映しだされた影を思うだろうな。

気にしすぎかな。
土日が休みで嬉しいわ。

アメリカにある西インド諸島より ましだ。

板金のはじめに使うスケッチの四角

板金のはじめに使うスケッチの四角  板金・ソリッドワークス ベースフランジを作るときに四角を書くが以下を使う。 さらに、 平面の原点を中心する。 いきなり、中点のある四角を押すと以下のようになる。 スケッチ編集のメッセー … “板金のはじめに使うスケッチの四角” の続きを読む

板金のはじめに使うスケッチの四角  板金・ソリッドワークス
ベースフランジを作るときに四角を書くが以下を使う。
さらに、
平面の原点を中心する。
ef30d20c.png
いきなり、中点のある四角を押すと以下のようになる。
スケッチ編集のメッセージで
「どっかの面を選べ!!!!!」と言われるのでたいていは平面を選ぶ。
08f06254.png

平面の原点を四角に中心にする。
7e50f9b6.png
これをするのは利点があるからだ。
ミラーなんかで
正面、平面、右側面をミラーの中心にできるからだ。
次図は、右側面をミラー面にしている。
b3ff951d.png

ここでも同じ事を書いていた。

被覆アーク溶接 手棒 被覆筒と電流の関係

被覆アーク溶接でフラックスの筒(被覆筒)は、電流で変わるという話。(電圧ではありません。被覆アーク溶接/手棒やTIG溶接の溶接機に電圧のつまみはない) 順に電流値が95A、75A、69Aと小さくなる。この動画は、私のでは … “被覆アーク溶接 手棒 被覆筒と電流の関係” の続きを読む

被覆アーク溶接で
フラックスの筒(被覆筒)は、電流で変わるという話。
(電圧ではありません。被覆アーク溶接/手棒やTIG溶接の溶接機に電圧のつまみはない)

順に電流値が95A75A69Aと小さくなる。
この動画は、私のではない。
thank you  “Kemppi Oy”
こちらの方です。古い順に並べたので上の方にあります。TIGが炭酸ガスアーク溶接(CO2)もあります。
3年以上前からある。TIGや被覆のプール(溶融池)の状態がよく見える。
(ところで、
手棒で69Aって低すぎ。交流溶接機で80Aくらいが下限かと思う。Φ3.2の溶接棒の話ですが。
Φ2.0とか使ったことがないのでわかりませんが、80A以下だとアークを保つのに技術がいります。)

まず、

95Aでは、
被覆は溶接棒の長手方向に直角に溶けている。アークも溶接棒の方向に飛んでいる。普通の人が普通に思う、アークの飛び方だ。
また、
溶接棒が溶けてそこからアークが出ている。ことに注目。アークで溶接棒が溶けて、時おり溶接棒の溶着金属が短絡して切れて(スパーク)アークが出る。

ほぼ溶接棒に直角に被覆筒ができている。
ある程度電流が高いとこうなる。いいかんじ。

 

75A。


69Aでは電流が低いので勢いがない(電圧も低い)ので溶接棒の方向にまっすくアークが飛ばない。
被覆が斜めになっている。電圧が低いとアークが飛びやすい(より母材に近い)所に飛ぶ。
このように溶接棒に直角に被覆筒ができるわけではない。

母材と被覆筒が平行だ。

アーク筒被覆筒の写真  中の心線(鉄)が見える。周りが被覆剤(フラックス・薬)。被覆剤は筒状になっている。grab2013-10-17_16-42-06_804

筒(被覆剤)が湿っていたり、強くおしすぎると、筒の一部割れる。
また、
なんかのわからないが筒が斜めになる。
そして、
変な方向へアークが出たりする。
そんなとき、
しっかり乾燥しとけとか、押すな!ということだが、溶接中はアークを飛ばしたい方向に回転させる。

次の写真は、
被覆筒の中にスラグがついたている。電流が低い時に突然アークが切れることがある。特に低水素系。
スラグでアークが止まるのかもしれない。

被覆筒の角を当てて溶接すると簡単です。
被覆アーク溶接棒ってなんでーと言う方はこちらの画像

隅肉(すみにく)のTIG溶接はなぜ電流を上げるのか?

簡単に書くと以下の2つ。
1.アークが集中しない。分散するから電流を上げて溶けやすくする。
2.両方の板の溶かす所が違う。電流が低いままだと溶けやすい方の板だけが溶けて穴
ここでは、
1.の「アークが集中しない」を解説?語る。
電流と電圧。どちらも電があるんでややこしい。
「流」と「圧」だけに集中。
。。。
電気は、流れやすい所を流れる。
電流が高いと電圧も比例して高いのが普通だ。
電圧が高いと飛びやすい。
圧とは圧力、電気のアツだから溶接ならアークが飛びやすいかどうかだ。

一方、
電流の流とは流量、電気の量だかから溶接の話だから熱だ。鉄が溶け量だ。
ちなみに電圧調節は半自動/炭酸ガスアー炭酸ガス溶接にしかない。炭酸ガスアーク溶接のアーク長は電圧ツマミで決まる。手棒、TIGは電流調節しかない。手棒、TIGの電圧はアーク長/人の手で決まる。TIGや手棒の機械は、アークが長くなると電圧が上がる/アークが切れないようなにする仕組みがある。さらに、電圧が高くなっても電流は大きく変わらない特性を持たせている(垂下特性図1のa,bのこと)。

アークも電気だから同じだ。

電気は通りやすい所、近い所に飛ぶ
こんなことはありえない。TIG溶接(アルゴン溶接)の絵。手溶接も同じ。
イメージとしては電極の先からアークがいかにもという方向で角部、目がけて直線で飛ぶ感じだがそうはいかない。
特に電流が小さい=電圧も低い
と次のようになる。
まず、やることは、
電極を角部に近づけることだ。
これは高度な技術となる。
電極を近づけるのがTIGの基本。
これができればいいのだが。。。
(炭酸ガスアーク溶接ならワイヤが近くまで行くので簡単ですよね。)
簡単には、隅肉溶接をするときは、電流を高めにする。
そうすることで電圧が上がるので勢いが増し、狙いの方向にアークが飛びやすくなる。
電流が高いと熱が上がり、溶ける量も増える。

それと、壁面がよく溶けて(溶接棒の代わりなる)結果的に隅が溶ける。溶けてスミが溶けやすくなる。
電流を高めにする方法はある。パルスを使うのだ、周波数は高く100Hz以上。高い方が集中する。
パルスの高低差を大きくする。通常、60Aでの溶接をパルスなら5Aと115Aにする。
(5+115)/2=60
3mm板厚程度で115Aは相当の勢いだ。
これは、一定の電流より一時的に電流が上がる=電圧が上がるため勢いが増すタイミングがあり、
隅肉のコーナーへ、青いXの図のようなタイミングがXではなく本当にある。

さて、
もともと、隅肉は溶けにくい所がある。
すみ肉の下の板は1枚板で大きく、溶接の裏側から冷やされるため電流(熱)を上げる必要がある。
下図は、下の板は熱が逃げる方向が2つ。立てている板の方は熱が逃げる方向が1つ。
特に、溶接している裏側は冷え冷えですよね。
だから、
下側の板は中にアークを飛ばしているので溶けにくく、立っている板の端なので溶けやすい。
よって、
下図の場合は下側の板の方を狙う。というか下の板の方に電極を近づける

溶接ができると
熱の逃げ方が変わる。
隅肉にビードがひければ、つながっているので熱の逃げ方が変わる。
少々の狙い位置が立て板の方にいっても穴は空きにくい。

————————————————————————-

一方、角溶接はよけいな所にアークが飛ばないので電流を下げても簡単に溶ける。
電極に近い所は常に母材の角、溶かしたい所が近いので簡単!!。
(アークが飛ぶ所が角に集中するんだな。すみ肉はどうしても分散、バラバラなんだな)
何となく溶接して、狙わなくても角部分が溶ける。
つまり、電極を極端に近づける必要がない。
(高度な技術がいらない)
アークが集中するから電流も平板に溶接するより低くしても大丈夫。
電流を下げると、ゆっくり溶けるのでなおさら簡単。
次の絵では、アークが鉄板の角の部分に当たっている。
電極からの距離が近いためだ。
もし、電極が離れていたり、狙いが悪くても、やはり電極に最も近いのは「母材の角」。
近い所にアークは飛ぶから狙いが悪く(つまり、ヘタ)ても大丈夫。
母材の角が先に溶けて溶接棒の代わりになり、簡単に溶接できる。(穴が開きにくい)。
素人でもできるというわけだ。

角溶接ならうまくいくという誰かさん。
狙いがあまくありませんか?
ホント、角溶接は簡単だわ。


どちらの板も同じように熱を逃がす。ので、両方の板が均一に溶けやすい=簡単。
アークが集中しやすい=熱が集中
という観点から
同じ材質、板厚で、
接合形式によって
電流値は、
以下のことが言えます。
右ほど電流を高くする。右ほどアークが分散する。
言い方を変えると、
左の方が電流を低くできる。左の方がアークが集中する。

例えば、
角溶接で40Aだったら、突合せ溶接で60A、すみ肉溶接で80A。
だから、
どれかある板厚の溶接をしておけば他の接合でも、同じ板厚なら電流値はだいたい想像できる。
なお、
TIGの場合は、熱が集中できるように極端に接近できるなら、上の差は縮まる。

さて、
ワイヤーが出てくる炭酸ガスアーク溶接の場合は、どうなんでしょう。
すみ肉の角部にワイヤーが当たるような短絡移行(ここの1分くらい。母材に当たってからアークが出る)なら
いったん、当たるんだからTIGとは話が違う。
ワイヤーが送られて角部に入ってくるで距離は縮まるし、溶融池(プール)にアークは飛びやすい。

ソリッドワークスで簡単に伸び値を入れて展開図を作るには

だいたい、
伸びは「板厚x08」くらいとしている。
(計算しにくいが、0.85。板厚が1mm以下だと0.9。3.2以上は0.8。だから0.85くらいがいいが覚えにくいので0.8)
「伸び」と「伸び代」は同じ意味で使ってる。
例えば、
t2.0なら1.6が片伸び。両伸びというか1曲げで3.2伸びる(両伸び)。
これを「ベンド展開長補正」に入れるとシックリきている。入れる値は両伸び!!!。
(AP100の両伸び=「ベンド展開長補正」です。
だから、AP100上でなくてもSolidWorksで展開図が書ける。)
伸びなのかどうなのかわからないが展開図では板厚分の処理が必要なのです。
伸びはこちらで。
何で、「両伸び」、「片伸び」があるんか?
単に、片伸びx2=両伸び
なのだが、
展開図では「両伸び」(展開長の計算)を使い。
曲げ加工では「片伸び」(バックゲージの設定)を使う。
(ええ、以上は余計かな。これ以上、書くと伸びの「ベンド展開長補正」の話から遠ざかるのでこのぐらいで)
ベンド展開長補正が両伸び
高さ50、底の長さ150。板厚2mmとしたら。
2.0*0.8=1.6が伸び。片伸び。両伸びだと3.2mm。
展開の長さは、200-3.2=196.8にする。
で、50mmで立ち上げる曲げ加工のバックゲージは、片伸びの1.6を使って50-1.6=48.4でバックゲージを設定して曲げる。
50x150
展開長測定

この伸び値でソリッドワークスで展開図を書いて寸法を求めたっから
ベンド展開長補正
が簡単ということ。
AP100があるならAP100の方の設定となるが、
単純にソリッドワークスで実際の展開図を得たいならこれを使うかな。
AP100と同じ条件でソリッドワークスでも展開図が書けるってわけ。
(でも、ソリッドワークスよりAP100の方が安いかも。よく知らないが。)
ちなみに、k係数というのもあるが、これは内Rの設定で変わる。
k係数は中立線の移動量らしいl。
上記の条件にするには、
K係数は、0.283だった。
初めは、0.8を入れたが全然展開長が違うので0.2にしたら近い値になったのでどんどん増やしてみて0.283がビンゴだった。ただし、内Rは0.2。
k係数は、内側(圧縮)してる側の割合なんかも?
現場的にはベンド展開長補正だね。
ただし、内Rを無視するので内Rによる曲げの抵抗が大きい場合はk係数を使うべきでしょう。
現場的には内Rはゼロ。AP60やAP100なんかもね。
もし、
AP100とソリッドワークスの展開長というか、展開図を同じにしたければ、
AP100にも伸びを両伸び、または片伸びで指定するが(両伸びが間違いにくいね)
AP100の両伸びとソリッドワークスと一致していることと
プラス
内Rが一致しないとだめ。

こっちにも以前書いている。

————————————————–
ソリッドワークス k値 伸び で検索すると
ソリッドワークスK値伸び
私の文書を読んでなんかよくわからないのでもう一度書いた次第です。
それにしても私のページが3つもある。
迷惑かな??。それとも、あんまり検索しないキーワードかもね。