So-net無料ブログ作成

To Do List [PCB Design]

プログラミングしなければいけないリストを記載しておきます。
自分用の備忘録でもあります。

1.STEPファイルを載せたPCBDOCからそのSTEPファイルだけを除去して軽くするスクリプトの作成。

2.PCBDOCから余計なメカニカルレイヤをレイヤ指定して除去するスクリプト。

3.IDFからピックアンドプレースファイルを抽出するEXCELマクロ。

4.IDFを編集できるEXCELマクロ。



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

円弧関連のスクリプト [ALTIUM DESIGNER]

スクリプトにて円ではなくて円弧の場合は計算がややこしくなります。
円弧をArcとした場合に
円弧のセンター、半径、スタート、エンドの角度に関する自分用の覚書です。

Arc.XCenter
Arc.YCenter

Arc.Radius

Arc.StartAngle
Arc.EndAngle

Arc.LineWidth
Arc.Layer

これだけあれば計算はできますが、三角関数や円周率も必要です。


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

円弧の角度表示の自動修正 [ALTIUM DESIGNER]

円や円弧の位置を認識するためには始まりと終わりの角度が重要です。
そこでスタートとエンドが同じ値だとどうなのか調べていました。

円の場合は0から360度です。
しかし、180から180度などの数値は試したことがありませんがその結果は
0から360度に自動修正されます。
つまり、円は0度から始まるように修正されるということなのでしょう。

円弧にて、270度から90度というようなキリのいい円弧なら別ですが、そうではない場合は
演算するのが難しく、今後も検討しないとシルクチェックに応用しにくいです。


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

請求書などの和暦 [Computer]


見積、請求書は「わくわく帳票」というソフトウェアを利用しています。
令和に対応したバージョンは4000円弱なので以前に購入した価格に近い値になります。

検討とチェックをした結果、和暦を西暦に変更できるようなのでそれで対処する
ことにしました。

このソフトウェアでは他に不満はないのでこれで問題なくて、バージョンの必要性も
感じていません。

経理ソフトは平成のままなのですが、これは年度の関係もあるので
来年にならないとわからず、どうするか決めていません。


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

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

部品のシルク内に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) 

ネットリスト比較のマクロの修正 [EXCEL Macro]

ネットリスト同士を比較しているマクロの完成度は高いと思っていましたが
すべての情報が記載されているのでエラーが多い場合はそれをチェックするには見辛いようです。
NGかOK化の判断が難しいので色分けしているのが裏目のようです。

そこでどの列も問題ないものは行(REF番号)ごと削除してエラーのある行だけのエラーリストに
することが可能にしました。

一度は通常通りにその内容をなめて確認をしますが、厳密なチェックの場合はエラーリストにして
その部分を眺めるようにします。

コンピュータでチェックするとエラーをチェックする手間が省けます。
しかし、それだけを抽出したこのエラーリストはその分、時間を掛けてチェックした方がいいでしょう。


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

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

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

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

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

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

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

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


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

STEPファイルの除去 [Altium Delphi Script]

Make PCB LIbrary で作成したフットプリント集にスクリプトでSTEPファイルを
貼り付けることが殆どです。

しかし、STEPファイルを貼り付ける前のライブラリを保存し損ねていると無いPCBDOCに
戻せなくなります。

そこで、ライブラリからSTEPファイルを取り除くスクリプトまたは
PCBDOCからSTEPファイルを取り除くスクリプトが欲しくなりました。

また、これを応用して別のレイヤの情報も取り除ければいいと思います。

STEPファイルはスクリプト内では下記のように記述されます。
eComponentBodyObject

ただ、リンクされたものは、恐らく下記のように呼ばれるのではないでしょうか。
eEmbeddedObject


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

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

プログラミングではなくて手動でチェックする場合も検討してみました。
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) 

差動ペアの意味 [PCB Design]

パターン設計では差動ペアの配線の依頼もよくある筈です。
しかし、その意味が理解できないままパターン設計をされているかもしれません。
こちらの一番上段のこちらの図がその参考になります。
https://www.altium.com/documentation/18.0/display/ADES/((Differential+Pair+Routing))_AD

赤いノイズは両方の信号に対してプラス側の信号として重畳されます。
その信号がオペアンプに入力されるとマイナス側を反転してプラス側と平均を取ると考えます。
すると赤いノイズ部分が相殺されるので本来の信号のみがオペアンプから出力されるということになります。

ラインフィルタで4端子のものもこれに似た原理で、こういったコモンノイズに強く内部にある
トロイダルコアの磁力として相殺してくれます。


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

Edit Propertyのスクリプト [Altium VB Scripts]

前出の部品のプロパティを編集するスクリプトでユニークIDだけを独立させた
ラジオボタンに修正しました。

まだ、ストロークフォントの指定などもスクリプトで厳密に指定が可能になったので
その部分も指定しておきました。

コメント欄などは使用しない場合もありますが、デフォルトではなく予め指定して
おいた方がいいと考えて処理しています。

他のスクリプトでもストロークフォントをサンセリフに指定してあります。
TTフォントでは文字高を指定しても違うサイズになるのでこのことは重要です。

Edit_Prop_Menu2.png




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

プロジェクトファイルのバリアント [ALTIUM DESIGNER]

プロジェクトファイルの拡張子に.TXTを追加してエディタで編集できるようにして
バリアントを追加してみました。

プロジェクトファイル経由でバリアントが設定されるというのでファイル自体を弄くって
みました。
編集した.TXTを戻し忘れるとバリアントが表示されなくなるのでお気を付けください。
ただ、編集で処理する場面は殆どないでしょう。

Variant_Menu1.png

Variant_txt0.png

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

スクリプト内でデジグネータなどの非表示 [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) 

部品エリア内のREF番号の検出 [ALTIUM DESIGNER]

部品のシルク内にDesignatorのシルクを移動し忘れる場合をどう検出するかの課題の話です。
パッドの上にシルクが掛かっていればDRCでチェック可能です。
しかし、比較的大きな部品の場合はその内側にシルクを置き忘れます。

これを同検出するかをずっと検討した結果、思いついたのがDesignatorをシルクレイヤではなく
メカニカルレイヤにスクリプトで移動してDRCを掛けることです。
しかし、これでは大きな部品においては完全ではありません。

こちらの手順なら上手くいきそうです。
1.スクリプトでDesignatorの位置と文字高を調べてレポートにする。
2.PCBデータからIDF出力します。
 IDFは各部品のエリアを簡単な図形で認識しています。

3.EXCELマクロで両方のファイルを入力して1.の情報からDesignatorのシルクの占有場所を
 XY座標としてしらべます。
 同様に2.のIDFからそれに対応する部品の敷地を調べ、それが重複しているかどうかを調べます。

これなら処理はできそうですが、EXCELマクロでどうIDFの内容を分析できるかが難題です。


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

差動ペアのべたアース部分のクエリー [Altium Query]

通常は下記のようにされるでしよう。

InDifferentialPairClass('All Differential Pairs')
Inpoly

どうやら古いADのバージョンによっては部品面だけのこちらは動作しません。
InDifferentialPairClass('TopSide')
Inpoly

その場合は下記のようにすればいいでしょう。
InDifferentialPairClass('All Differential Pairs')
Inpoly and OnTop

複数の差動ペア名を記載すれば、使い分けが可能です。(ネット名ではありません。)
InDifferentialPair('DIFF_A','DIFF_B')
Inpoly

べたアースをどれぐらい逃げるかは、高周波の回路設計者はマイクロストリップラインの幅の2倍以上
とするのはご存知の筈ですが、デジタルの回路設計者の場合は知らない場合も多々あります。

こちらの図の場合は0.28mmのパターンで処理しているので最低限0.56mm以上のギャップが必要
となります。
0.6mm以上の数値をクエリーの下の図に記載してください。

こちらの右下の隣接パターン間隔の直近上位の値を記載してください。
https://www.pcb-noah.com/asp/wical/ical.aspx

べたアースが1mm以上または不要とする場合もありますが、その場合は外部ノイズがそのまま
差動ペアのストリップラインを襲います。
それのガードリングという意味ではべたアースが近傍にあった方がいいでしょう。

Strip_Delphi2.png

差動ペアの端にディスクリートのUSBコネクタのパッドがある場合はべたアースの逃げが広いと
逃げの円弧がいびつになるのでその数値にも注意が必要です。
差動ペアが部品面だけの場合は、半田面は通常通りのべたアースの逃げにした方がいいでしょう。
(ディスクリート部品のランドがある場合です。)


nice!(0)  コメント(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) 

ダミーSCHでバリアントを作成 Part.2 [EXCEL Macro]

バリアント用にダミーSCHをAltiumSCHで作成する話の続きです。
AltiumPCBでBOMとしてデジグネータだけをEXCELファイルとして出力しそれをEXCELマクロで
加工して*.WASで保存すればいいでしょう。

WASファイルは下記のように変えたいものと変えるものを半角スペースで区切れば
AB1をR1に、AB2をR2に変換してくれます。

AB1 R1
AB2 R2

コメント欄の変更はSCHとPCBのリンクで処理すればいいでしょう。
但し、ピン数が異なるのでネットリストなどのリンクはNGです。

EXCELマクロとしては、EXCELファイルを読み込んでその文字列をFor-Next文の回数iを
そのままREF番号の数字として利用できるので10-15分ぐらいで作成できました。

AltiumSCHではA2サイズに、四角で囲まれたフィルタの部品をAB1からAB1200として仮配置
してあります。
(シンボルは何でもいいのですが一番分かりやすいものを利用しました。)

マクロで作成したWAS-ISファイルを読み込めば番号が差し変わります。
後はバリアントとしての処理が可能ですが、接続状態が異なるので問題が出るかも
しれません。


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

IDFエディタがあれば [IDF]

先日のQuadcept関連の記事の絡みでIDFについて調べてみると
その前にIDFエディタがないことに気がつきました。

熱シミュレーションなどにIDFは使用されていますが、高さなどのオフセットでEXCELマクロで
修正したことがあります。
それ以外でも利用するためにまずは要素を分類してそれを編集できるようにしておけば
今後の役に立ちそうです。

但し、IDFはファイルが2つあるのが厄介で、拡張子にも方言があります。
名前などは片側のファイルを勝手に修正するとエラーになるでしょう。
両方を同時に連動するような編集の仕方が良いでしょう。


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