So-net無料ブログ作成
Altium VB Scripts ブログトップ
前の20件 | -

スクリプト内でデジグネータなどの非表示 [Altium VB Scripts]

基板上のDesignatorやCommentなどを非表示したいことも稀にあるでしょう。
基板上に配置した部品をComponentとすると
Designatorを表示、非表示するには下記のようにします。

Component.NameOn = True
Component.NameOn = False

同様にCommentを表示、非表示するには

Component.CommentOn = True
Component.CommentOn = False

となります。

DesignatorやCommentなどを非表示にするなんてと思っていらっしゃる方もおられる
でしょうがそうでもないのです。
その話は今後の記事にて。


nice!(1)  コメント(0) 

シルクの文字を修正 [Altium VB Scripts]

文字を45度回転するスクリプトなどを加工すると文字を一括編集するプログラムに変更が
可能です。

ストロークフォントの指定方法も見つかったので下記のように処理することができます。

種類のラジオボタン
1.デフォルト
2.サンセリフ
3.セリフ
4.TTF(Arialなど)

サイズのラジオボタンまたは入力ボックス
1.文字高
2.太さ

デジグネータとコメントの選択ボタン
1.デジグネータのみ
2.コメントのみ
3.両者を変更

配置レイヤ、ポジション、HIDEオン/オフ

ざっと思いつくのはこれぐらいです。


nice!(0)  コメント(0) 

2つのスクリプトを合成 [Altium VB Scripts]

部品のプロパティを編集するスクリプトと部品の座標を丸めるスクリプトを合体させて
一つのメニューフォームで処理することにしました。

詳しくは下記のブログ記事の機能です。
1.SCHのREF番号の修正
2.コメント欄の空にするスクリプト
3.部品の座標の丸めをするスクリプト

どちらのスクリプトもパターン設計後ではなく、ラフレイアウト後やパターンを引き始める
時に利用することを想定しています。

部品の座標を丸めるのはデフォルトを0.001mmにしているとはいえ、危険なのでチェックボタンを
オンにしないと利用可能にならないような仕様にしてあります。

メニューフォーム内には記載はありませんが、部品の回転角度は360度を無条件に0度に修正します。
これでピックアンドプレースファイルの出力時に顧客からつっこみが入らなくなるでしょう。
併せてプリミティブロックのロックし忘れ防止のために再ロックを無条件に掛けます。

左側のプロパティ修正欄はわかりやすいように項目名を規則的にしてあります。
デフォルトはSCHリンク用のデジグネーターをフットプリントのデジグネーターと同じにするものに
してあるので誤って操作させても支障はないでしょう。

このスクリプトは時期を見てダウンロードできるようにしたいと思います。

Edit_Prop_Menu.png

nice!(0)  コメント(0) 

部品のプリミティブのロック [Altium VB Scripts]

スクリプト内の部品をComponentとすれば
下記の記述でプリミティブロックが外れます。

Component.PrimitiveLock = false

これでは使い勝手が悪いのでロックし忘れを防ぐ為に
下記のようにする方が安全でしょう。

Component.PrimitiveLock = True

詳しくはこちらの情報を参考にしてください。

http://wiki.altium.com/plugins/viewsource/viewpagesrc.action?pageId=3899914



nice!(0)  コメント(0) 

部品の座標の丸めをするスクリプト [Altium VB Scripts]

前出の能動的なスクリプトの案として提案した記事の内容を実現しました。

基板上の部品のブロック移動などを重ねるとその座標がグリッドから少しだけ外れます。
インチ/ミリの計算の誤差なのかもしれません。

それを修正するスクリプトが完成しました。
プログラミング内では四捨五入という概念はないので丸めというRound関数を使用します。
四は切り捨てしても問題ありませんが、五は1~9の真ん中なので1/2の確率で切り捨て切り上げを
しないといけないからです。

メニュー付のスクリプトとして丸める桁を小数第0から3位までにしました。
ミリ系なので1mm、0.1mm、0.01mm、0.001mmの4つの中から選べます。
デフォルトは0.001mmにしてあります。

併せて部品の回転角度が360度の場合は、0度に修正するようにしています。

設計完了してから移動するとまずいのでラフレイアウトが完了した時点、またはパターン配置
直前に使用するといいでしょう。
ピックアンドプレースファイルで出力時の座標を丸めるスクリプトも用意しているので
気にせずにそのスクリプトで処理する方がいいかもしれません。


nice!(0)  コメント(0) 

シルクの文字を45度回転するには Part.7 [Altium VB Scripts]

スクリプトはほぼ完成したと思っていましたが、別の案が浮かびました。
現状では別名保存して処理しています。
面倒な場合もあるでしょうからデジグネータを移動するのではなく別のレイヤにコピーするという
処理であれば利用しやすいでしょう。

例えばシルクレイヤのTOP/BOT用のそれに対応したものとしてメカニカルレイヤの11-12などに
配置するということです。

これまでのように作業が可能なのか、メニューフォームがこれまでのものと互換性を持ちながら
機能追加できるかどうかを検討中です。

個々にスペシャルストリングスを配置しても部品配置後でフットプリント内に無い情報なので
表示されません。
単純にテキストとして配置することは可能です。
どちらにしても部品を移動すると連動はしていないので文字が取り残されます。

コメント欄の文字をデジグネーターと同じ文字にして別のレイヤに配置することは可能です。
これであれば部品と連動しているので移動時に文字が取り残されることはありません。
しかし、すでにコメント欄の文字を型番名などとしてガーバーデータとして利用する場合は
NGです。
別名保存してマウント図として利用する分には問題ないでしょう。


nice!(1)  コメント(0) 

スクリプト内でフォントを変更 [Altium VB Scripts]

スクリプトでフォントの高さや太さを変更していますが、これまでは設定されたフォントの
高さや太さを変えているだけでフォント自体は変更していませんでした。
TTFは設定は可能なのですがストロークフォントにすることが探してもどれなのか不明だったからです。

配置した部品をComponentとすると

Component.Comment.UseTTFonts = False

これで逆説的にストロークフォントになることがわかりました。

また、それらしいFontNameはTTF用のようで、駄目でFontIDで指定するようです。
Default、Sans Serif、Serifがそれぞれ1、2、3 に対応していました。

Sans Serifで文字高1mmで太さを0.2mmとするには下記のようになります。

Component.comment.FontID = 2
Component.Comment.Size = MMstocoord(1)
Component.Comment.Width = MMstocoord(0.2)

これで基板上に配置した部品のプロパティ画面の中でわからないものはほぼ無くなりました。
スクリプト作りで疑問があると困るのですが、これですっきりしました。


nice!(1)  コメント(0) 

コメント欄を空にするスクリプト [Altium VB Scripts]

たまにコメント欄を空にする場合があります。
ネットリストのコメント行を手修正またはEXCELマクロなどで一括修正しそれを
読み込めばいいのですが手順が面倒です。

スクリプトであれば非常に簡単です。
基板上の部品をComponentとすれば、下記のように空""を代入すれば可能です。

Component.Comment.text = ""

部品のプロパティの修正に関するスクリプトが続いているので単独のスクリプトではなくて
メニューフォーム付のスクリプトで色々な機能を同時に実現できるようにした方が便利でしょう。

部品のプロパティ内のSCHとリンクさせる項目も修正が可能になります。
デジグネーターと同期させたり余計な情報を空白にしたりできます。


nice!(1)  コメント(0) 

SCHのREF番号修正 [Altium VB Scripts]

PCB側のプロパティの右下にはSCH系のDesignatorが記載されています。
部品をコピーして使用するとPCB上のREF番号は修正してもそのSCH系へのバックアノテート
またはリンク用も修正しないといけなくなります。

リセットするなどの手はありますがスクリプトで修正する方がスマートです。

基板上の部品をCompDesとするならば、VBでは下記のように記述すれば修正が可能です。
折角なのでユニークIDも空""を代入します。

CompDes.sourceDesignator = CompDes.Name.Text
CompDes.sourceUniqueid = ""

他の欄も空白にするようにその情報を調べています。


nice!(1)  コメント(0) 

シルクの文字を45度回転するには Part.6 [Altium VB Scripts]

マウント図として使えるようにTOPとBOTにある部品のDesignatorをシルクレイヤから
メカニカルレイヤに移動し45度回転させるスクリプトの話の続きです。

文字数ではなく部品のセンター位置と文字の基準位置との関係で処理をしています。
sin、cos、アークtanを使用すればXY方向のオフセット計算ができますが
半田面では一部分の計算が異なるので絶対値Absも使用しています。
どれも関数があるか心配でしたが、アークTan(タンジェント)はAtnという呼び名で
Altiumでも利用可能な関数でした。

三角関数がラジアンで処理されるので45度回転させる場合はそれに足算をしたいのですが
変換してからなので複雑なコーディングになります。

CompDes_Pos.png

基準位置が中心ではないディスクリートの抵抗アレーなどは計算したオフセット値が
大幅に異なるのでREF番号シルクが大幅に離れた位置になります。
そこでオフセット値の絶対値が1.5mmを超えた場合は実験的に決めたオフセット値を
数式に置き換えたもので対応しました。
文字数の増加とオフセット値は線形ではないので一部分にべき乗を使って調整しました。
また文字高さが0.6mmと0.8mmではその値も異なりXY方向でも異なるので複雑です。
その部分だけを示しておきます。

Checkbox3がチェックされるのは0.6mmのことで、DLnは文字数です。

If Checkbox3.checked then
 OFx = 0.08 + 0.1 * (DLn ^1.2)
OFy = OFx
Else
OFx = 0.18 + 0.1 * (DLn ^1.2)
OFy = OFx + 0.05
End if

Silk_Rot6.png

これでプログラミングは一応、終わりました。

nice!(0)  コメント(0) 

スクリプト内のデジグネータ [Altium VB Scripts]

基板上の部品をCopmponentとするとデジグネータはCopmponent.Designatorだと思ってしまいます。
しかし、そうではありません。

これはではCopmponent.Detailから文字列を抽出して代用していました。
しかし、デジグネータを回転するスクリプトの完成直後に色々な資料を探していて
Copmponent.Name.*ではないかと探していました。

Copmponent.Nameでは駄目で、Copmponent.Name.Stringも違っていました。
結局、Copmponent.Name.Textが正解でした。

デジグネータがCopmponent.Nameで始まるというのはこれまでは想像もしていませんでした。
これにより他のスクリプトも一部修正する羽目になります。


nice!(0)  コメント(0) 

シルクの文字を45度回転するには Part.5 [Altium VB Scripts]

マウント図として使えるようにTOPとBOTにある部品のDesignatorをシルクレイヤから
メカニカルレイヤに移動し45度回転させるスクリプトの話の続きです。

文字数をチェックしてそれに応じたXYオフセットを検討しました。

三角関数で処理しようとしましたが、数字の文字幅が1の場合とそれ以外では横幅が
違うようです。
つまり、文字数だけではなくてその中の数字の種類で四角に換算する図形が異なるという
ことです。

そこで作図である程度の数値を設定し、実際に動作させて更に微調整をしました。

文字数は2文字から4文字まで対応しています。
抵抗であればR1からR999まで対応します。
それ以外はElseでXY共に0.5mmにしてあります。

該当するものはCR以外にダイオードDも対象としました。
Lも可能ではありますがフェライトなどの材料で製造されているので小さいデバイスは
少なそうなので対象外にしました。

チップCRなどが0603ぐらいになると文字高0.8mmでは斜めの文字同士が重なるので文字高0.6mm
になるSmallサイズのチェックボックスも設けました。
それぞれにオフセット値を記載しているので複雑です。

部品がセンター位置で登録されていればそれと文字の基準位置との関係で処理しようとしています。
sin、cos、アークtanを使用すればXY方向のオフセット計算ができそうです。

Silk_Rot5.png

nice!(1)  コメント(0) 

シルクの文字を45度回転するには Part.4 [Altium VB Scripts]

マウント図として使えるようにTOPとBOTにある部品のDesignatorをシルクレイヤから
メカニカルレイヤに移動し45度回転させるスクリプトの話の続きです。

メニューフォームの中で文字高は選択しないで45度に変化させるものは0.8mmに固定したので
選択用のラジオボタンは無くしました。

リセット用のチェックボタンで角度を0度にするだけではなくてレイヤもシルクレイヤに戻します。
文字の基準点がAltium独自で左下なので45度にすると少し位置がずれます。
それを補正する為にXY方向共に0.5mmずつオフセットさせています。

例えばTOP側では下記のように記述しています。
元の生座標をミリ系にし、オフセット値との合計をまた生座標に戻しています。

Compdes.name.XLocation = MMstocoord(CoordToMMs(Compdes.name.XLocation) + 0.5)
Compdes.name.YLocation = MMstocoord(CoordToMMs(Compdes.name.YLocation) - 0.5)

C10、R10などの3文字では丁度いいのですが、C1、R100などの2文字、4文字ではまだズレを
感じます。
文字数でオフセット値を変えた方がいいのか検討中です。

Silk_rot4.png

nice!(1)  コメント(0) 

シルクの文字を45度回転するには Part.3 [Altium VB Scripts]

マウント図として使えるようにTOPとBOTにある部品のDesignatorをシルクレイヤから
メカニカルレイヤに移動するスクリプトの話の続きです。

メニューフォーム付きのスクリプトに変更しました。
移動できるレイヤもラジオボタンで変更できます。
文字の高さも変更可能です。
角度をリセットするチェックボタンも配置しました。
また、細かくて狭い場所にあるCRだけシルクを回転すればいいのではないかと思うように
なりました。

Silk_Rot3.png
nice!(0)  コメント(0) 

シルクの文字を45度回転するには Part.2 [Altium VB Scripts]

TOPとBOTにある部品のDesignatorをシルクレイヤからメカニカルレイヤに移動する
スクリプトができました。
その為、オリジナルのPCBDOCは事前に別名保存してから編集する必要があります。

最初にシルクをセンターに配置し、それからレイヤ移動と角度を45度と半田面シルクを315度に
回転することで部品のセンター近くに配置できます。

メカニカルレイヤは16までの好きなレイヤに配置が可能です。
現状では12と13にしてあります。
(メカニカル17以上はスクリプトはまだ拡張されていないようで対応できません。)

ドラフトマンでは45度のDesignatorは無視されるようで、通常の表示になります。
しかし、メカニカルレイヤのものはそのまま表示できます。

その部分だけをVisual Basicで記述するとこうなります。

If CompDes.Layer = eTopLayer then 'Top

CompDes.Name.Rotation = 45
CompDes.Name.layer = eMechanical12

End if

If CompDes.Layer = eBottomLayer then 'Bot

CompDes.Name.Rotation = 315
CompDes.Name.layer = eMechanical13

End if


nice!(0)  コメント(0) 

シルクの文字を45度回転するには [Altium VB Scripts]

図研のマウント図で文字が45度になっているそうです。
知り合いの会社では、Altiumのマウント図でもそれに準拠して欲しいという要望がクライアントから
あったようです。

現状ではフットプリントライブラリの時点でスペシャルストリングスの.Designatorを
別のメカニカルレイヤに配置して処理されているようです。

設計済みのデザインファイルを別名保存して、スクリプトでシルクレイヤの文字を別のレイヤに
移動して45度回転させる方法があるのではないでしょうか。
(別名保存しないで元のファイルに別のレイヤで配置することも可能でしょうが複雑な図面に
なります。)

半田面シルクはレイヤベアに相当するレイヤに移動する必要があります。
このスクリプトを作成するかどうかの判断はまだしていません。


nice!(0)  コメント(0) 

センター割振りではない四角形のスクリプト [Altium VB Scripts]

またもや欲しいスクリプトが浮かびました。

センター割振りで四角形を配置するスクリプトも重要ですが作成する頻度の高いコネクタなどは
回転対称を避ける為なのかセンター割振りではないことが殆どです。
この場合はこれまでのスクリプトでは対応できず二重に配置して削除することで対応していました。

入力項目が多いとNGなのでX方向は従来通りに1箇所だけとし、Y方向だけをY1、Y2というように
2分割で入力すればいいのではないでしょうか。
Y1、Y2を足しトータルのY方向サイズも表示させ、作成ミスを減らすようなメニューも必要でしょう。

縦横がそういう位置関係でない場合は後から90度回転させることで対応しようと思っています。

プログラミング自体は簡単そうですがメニューをどれだけ簡単にするかが配慮しなければいけない
点です。
ラジオボタンをチェックすることで回転できるともっと楽なのですがその機能がAPIに
あるかどうかは不明です。


タグ:Altium Designer
nice!(0)  コメント(0) 

Netlistのレポート [Altium VB Scripts]

「Altium Designer」でもPCBパネルでNETにすればネット名を表示できますが、大規模な場合は
スクロールが大変です。
NET***やN000*** という場合は太いパターンで処理することはないので邪魔です。

海外のCA IdiotサイトのこちらのVBスクリプトを利用するとレポートでTXTファイルとなるので
編集や保存が可能です。

別ファイルなので必要な時にだけそのファイルをアクティブにして見るなどの操作が可能です。
邪魔なファイルはその場で削除するなどの仮編集をしておくといいでしょう。
通常はこのレポートファイルは保存しないまま設計の序盤で破棄しています。


nice!(0)  コメント(0) 

ADでのDelphiとVB [Altium VB Scripts]

プログラムとしては「Delphi」と「Visual Basic」とは全く異なります。
しかし、「Altium Designer」のスクリプトに於いては文法の違いはありますがAPI部分では
少しの違いだけです。

VBに関してはDelphiほどの文献が無いのですがAPI部分に関しては
Call文を前に付ければいいことが多いようです。

Delphiにて下記の場合は
PCBServer.SendMessageToRobots.....

VBに於いてはこのような記述になります。
Call PCBServer.SendMessageToRobots.....

これ以外の部分は当然ながらそれぞれのプログラム様式に準拠します。

nice!(0)  コメント(0) 

REF番号の表示位置リセット [Altium VB Scripts]

REF番号の表示位置は設計途中では邪魔なので部品の中心に配置または移動しているものを
リセットしたくなります。

こちらのサイトに3種類あります。
以前にそのひとつを紹介しているかもしれません。

すべてをリセットするもの、選択したものをリセットするもの、そしてこれがマウスで
クリックしたものだけをリセットするものです。

最初にすべてをリセットし、段々と好みの位置に移動する筈です。

続きを読む


nice!(0)  コメント(0) 
前の20件 | - Altium VB Scripts ブログトップ