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

Round multiple part coordinates [Altium VB Scripts(E/J)]

I created a script that rounds part coordinates in PCBDOC.
The language of this script was created with VB.
This simply rounds the individual XY coordinates to the menu digits.

Adj_Pos.png

A part of the code is shown below.
Rd : menu digits
**********************************

Dim CompDes
Dim Rd
:
:
Set CompDes = Iterator.FirstPCBObject
:
:
Compdes.x = MMstocoord(Round(CoordToMMs(Compdes.x),Rd))
Compdes.y = MMstocoord(Round(CoordToMMs(Compdes.y),Rd))
:
:
Set CompDes = Iterator.NextPCBObject


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

Rotates characters 45 degrees [Altium VB Scripts(E/J)]

This is an approach that allows PCBDOC to be used as a mount diagram.

This script rotates the Designator of the parts in Toplaye or Botlayer
by 45 degrees.

Silk_Rot6.png



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

Script to edit Property [Altium VB Scripts(E/J)]

The script for editing the part properties is complete.
A stroke font can also be specified.
You can make the comment field the same as the footprint or reset it.

Coordinates can also be rounded by the number of digits.

Edit_Prop_Menu2.png




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

SilkOverlay DRC [Altium VB Scripts(E/J)]

The script to check the characters in the parts area is complete.
Corresponds to the case where a circle is used for silk, but the arc is ignored.
The results are in report format and are also sorted.

DRC_Util_Form_Result.png


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

デジグネータの横幅 [Altium VB Scripts(E/J)]

自作スクリプトでのシルクチェックの場合はデジグネータの文字列全体を四角形として処理し
ています。

サンセリフの場合は文字高の0.8倍ぐらいが横幅になっているので文字数を調べて掛ければ
文字列の横幅となります。
しかし、1だけ横幅が極端に狭くなるので計算通りの結果になりません。

これまでは面倒なのでこういったことには目を瞑って処理していました。
しかし、文字列の中から1がいくつ含まれているかを計算し、それを考慮した文字幅に処理が
できるでしょう。
1の場合の文字幅を0.7mmにするか0.75mmするかを悩みます。
またアルファベットとの組み合わせでプロポーショナルな動作をするので計算で処理するのは
難しそうです。


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

部品エリア内のREF番号の検出 Part.6 [Altium VB Scripts(E/J)]

部品のシルク内にDesignatorのシルクを移動し忘れる場合をどう検出するかの話の続きです。

シルクに円を使用されている場合はその中心と半径から左下と右上の座標を計算することで
処理しています。
レポート形式での処理も可能になりました。
しかし、円ではなくて円弧にはまだ対応できていません。

具体的に図で示すと、左側のように通常は問題ないのですが、右側の赤いラインを部品の外形と
認識してしまうのでU11がそのエリア内にあるということでエラーになってしまいます。

円弧の始まりと終わりを認識して円弧の左下、右上の座標を計算しないといけないので演算が
難しそうです。

Des_Rect_Pos6.png

Des_Rect_Pos6_2.png

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

シルクの向きのチェック [Altium VB Scripts(E/J)]

Designatorの向きは部品面の場合、通常は0度(360度)または90度とするのが一般的でしょう。
(半田面は0度と270度)
通常の製図で使用する向きに準拠するのがいいでしょう。

単体のスクリプトにすることも可能ですが、シルクエリア内にDesignatorが入り込んでいるかを
チェックするスクリプトも作成中なのでそれに機能を追加すれば良さそうです。

面付けの都合で天地を逆にしたい場合もあるようなのでそれもUpshide downのモードとして
設ける必要があります。
(通常の基板のシルクのまま、基板全体を180度逆にしたような状態です。)

レポートのエラーの項目を増やしたり、ラジオボタンの表示/非表示の修正などプログラミングは
ややこしくなりますが可能でしょう。

VB_Scr_SilkTBN.png


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

部品エリア内のREF番号の検出 Part.5 [Altium VB Scripts(E/J)]

部品のシルク内にDesignatorのシルクを移動し忘れる場合をどう検出するかの話の続きです。

シルクレイヤのトラックばかりに注目していましたが、ディスクリートの電解コンデンサなど
円弧の場合もあります。
そこでトラックと円弧の両方で最小、最大値を計算する必要が出てきました。

最初にトラックだけでプログラミングして後から円弧も足せるような手法でプログラミング中です。

スクリプト自体はある程度は動作していますが、まだエラーリスト化のプログラミングまでは
到達していません。

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

Script内の文字列ソート [Altium VB Scripts(E/J)]

Delphiでは集計した文字列をソートすることが可能です。
しかし、Delphiで利用できる関数にsortは入っていませんでした。
VBの方も調べてみましたが同じくsortの記載はありませんでした。

VBスクリプトで実際にsortを使用してみると動作しました。
次にInsertも利用したいのですが、こちらは頭にCallをつけないと動作しませんでした。

つまりDocumentという文字列の場合は下記のようにします。
Document.Sort
Call Document.Insert(0,"ABC" )
Call Document.Insert(1,"DEF" )
Call Document.Insert(2,"GHI" )


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

VBスクリプトでの文字修正 [Altium VB Scripts(E/J)]

Altiumのスクリプト内で尚且つVBスクリプトでは制限が多くあります。
Dimの後にasを指定するとエラーになります。

そんな訳で大文字小文字の修正はないと思っていたらUcase、Lcaseがそれでした。
一般的にはUpperCase、LowerCaseと呼ばれているので気がつきませんでした。

VBAを含めても知らなかったのが「StrReverse」という関数です。
これはABCという文字列ならばCBA
というように逆する関数です。

WeekdayName関数では曜日が日本語で表示されますが
画面上では文字化けします。
英語のままがいいのですが、修正するのはAltiumのVBの場合は面倒なので止めています。


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

Space関数の使用 [Altium VB Scripts(E/J)]

VBAのスクリプトにてTAB区切りでは画面上でのレポートファイルでは見辛いのです。
そこで文字数を調整した方が便利です。

その時に利用できそうなのがSpace関数です。
Space(10) とすれば半角スペースを10個分を挿入することになります。

長いフットプリント名などは文字数を事前にLen関数で数えて調整する必要があります。
例えば40文字に固定するならば文字数から逆算した数値をSpace関数に入れて列を揃えることに
なります。

ただ、引き算をしてマイナスになった場合はエラーになるので注意が必要です。
ABS関数でマイナスにならないようにできますが、列が上手く揃わなくなります。

自社のフットプリントであれば文字数は想定できますが、会社によってはプリフィックス
サフィックスを足して長い文字列で管理されている場合があります。

Space_Sample.png

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

AltiumのVBスクリプトのForm [Altium VB Scripts(E/J)]

まだ記事にしていないようなのでフォームありのVBについて記載しておきます。
見本となるスクリプトの殆どがDelphiでさらにVBでフォームを使用したものが
見つかりませんでした。
こういう風にすると動作しました。

基本となるMainというスクリプト内でフォームであるForm1をShowで表示します。
最後のチャンセルボタンButton2などでCloseします。

フォームの話には関係ありませんがOKボタンなどのButton1でスクリプトを動作させる
プログラムを記述します。
そのボタンをClickすれば動作するという意味です。

Sub Main ()
Form1.Show
End Sub
:
:
:
Sub Button1Click(Sender)
動作用プログラム
End Sub
:
:
:
Sub Button2Click(Sender)
Form1.Close
End Sub


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

部品エリア内のREF番号の検出 Part.4 [Altium VB Scripts(E/J)]

部品のシルク内にDesignatorのシルクを移動し忘れる場合をどう検出するかの話の続きです。
デジグネータのシルクを四角形としてスクリプトで処理しようと考えています。

最小値である左下のXY座標と最大値である右上のXY座標から四角形として認識すればいいと
最初は考えていましたがそれだと一部分が掛かっている場合が組み合わせによっては検出できません。
そこで四角形としたシルクの四隅を左下からABCDとして座標を計算させています。

配置された部品自体はシルクなどのトラックの数値を個別にチェックして同様に四角形と
して認識させます。
その数値内に四隅のシルクの座標が入っていたらエラーとしてレポートすればいいという考え方です。

デジグネータの座標と文字高で計算しますが、座標は部品面の場合は左下の数値です。
また角度によって最小最大値とは違うので処理する必要があります。
シルクが0度(水平の場合)では、文字高の0.8倍と文字数を掛け合わせたものが横幅と推測します。
(0.8倍というのは、サンセリフの場合の複数の文字から計算した平均値です。)

つまり、文字高が1mmでR100というシルクであれば文字数が4個なので1(mm) x 0.8 x 4 = 3.2(mm)
左下のXY座標が、もし0、0であれば右上は3.2、1(文字高そのもの)という意味です。

半田面の場合はX座標が反転されるので角度との絡みで複雑になります。
その場合も部品面視で処理します。

Des_Rect_Pos4.png

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

部品エリア内のREF番号の検出 Part.3 [Altium VB Scripts(E/J)]

部品のシルク内にDesignatorのシルクを移動し忘れる場合をどう検出するかの話の続きです。

バッドに掛かったデジグネータのチェックはクエリーで可能ですが、単純に
QFPなどの部品の内側のシルク内にあるデジグネータは距離が大きいのでクリアランスで
指定できずDRCエラーとして上がってきません。

クリアランスチェックではシルクやメカニカルレイヤをクエリーで指定できたとしても
電気的な要素ではないので弾かれてしまいます。

そこでシルクのライン(トラック)をスクリプトで部品ごとに調べて最小のXY座標と
最大のXY座標を調べてその占有エリアとし、それとデジグネータの左下の座標から推察した
エリアがその占有エリア内にあればエラーとなるのではないかというアルゴリズムです。

SMDに対応したピックアンドプレーススクリプト(海外サイト)を検討しているとシルクで使用して
いるトラックの座標を検出することが可能なのでこの案も現実的になってきました。
(残念ながらこの海外のスクリプトは入手できないようです。SCHリンクのデジグネータと
コメントを利用しているのが難点だと思っていました。弊社ではそれを改善しました。)

CRを非表示し手動でチェックするスクリプトとこのスクリプトを同じメニュー(フォーム)で
作成中なので出来上がるまではリリースできそうもありません。


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

部品エリア内のREF番号の検出 Part.2 [Altium VB Scripts(E/J)]

プログラミングではなくて手動でチェックする場合も検討してみました。
DRCでチェックできる2012以下のシルクのデジグネータだけ非表示にすればいいのではないかと
いう案を思いつきました。
そうすれば大物だけが表示されるのでそれを目でチェックすればいいということです。

そこで登場するのがスクリプトで特定のデジグネータだけを非表示するというプロセスです。
CRだけを非表示にするとチップアルミ電解コンデンサやチップタンタルコンデンサや
R3216以上の抵抗も非表示になってしまいます。

まず、CRだけというのはDesignatorの最初のアルファベットを検出して二番目が数字ならOKです。
次に大きな部品は高さ情報で制限すれば良さそうですが高さを記載していないとNGです。
そこで思いついたのがパッドサイズを判定するということです。
パッドのXYサイズの内どちらか大きい方を判定してそれが2mm未満なら非表示としています。

PX、PYのサイズということでチェックしてそれをミリにします。
PXsize = CoordToMMs(Pad.TopXsize)
PYsize = CoordToMMs(Pad.TopYsize)

しかし、ディスクリートのCRはパッドが1.4-1.6mmぐらいですから非表示になってしまいます。
そこでパッドがMultilayerの場合はディスクリート部品と判定してSMDは非表示にしますが
ディスクリート部品は表示することにしました。
その判定方法は下記のようにします。最初にSMDとしておいてIF文でチェックしてディスクリートなら
Falseにする方が2行で済みます。

SMD_Comp = "True"
If Pad.Layer = eMultilayer then SMD_Comp = "False"

最後にIF文でCRかどうか、パッドサイズの制限とSMDかどうかどうかで判定します。

全表示させる場合に認識マークなどを部品として処理している場合は表示されてしまうのが
難点です。
放熱器などの機構部品も同様です。


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

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

基板上の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(E/J)]

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

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

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

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

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

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

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


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

2つのスクリプトを合成 [Altium VB Scripts(E/J)]

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

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

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

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

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

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

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

Edit_Prop_Menu.png

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

部品のプリミティブのロック [Altium VB Scripts(E/J)]

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

Component.PrimitiveLock = false

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

Component.PrimitiveLock = True

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

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



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

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

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

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

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

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

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

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


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