So-net無料ブログ作成
前の20件 | -

プロジェクトファイルのバリアント [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) 

余計な文字の除去 [Computer]

PDFの回路図の文字列から処理するマクロでの話です。
PDFをCTRL+Aで全文字を選択してEXCELのマクロにコピペすると余計な文字列が含まれているようで
エラーになる場合があります。

そこで、一太郎に一旦貼り付けて、それを更にEXCELにコピペし直すとエラーがなくなります。
一太郎のエディタのモードではなくて本来の文章編集モードでの話しです。
恐らくWORDでも同様の効果が出るでしょう。

余計な見えない文字列を除去するには一旦、マイクロソフト系のソフトに貼り付けると
いいという話があるのでそれを流用してみました。


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

PDF回路図のIDFデータ化 [IDF]

これまで、回路図をPDF出力したものをピックアンドプレースPIKファイルすることにトライし
「Altium Designer」に読み込んで各ページごとに対応した配置をしていました。

しかし、他のPCBCADではそういう訳にはいきません。
QuadceptなどはIDFファイルを入力すればその座標に従って配置する機能があります。
そこで、同様にPDFの回路図の文字部分を読み込んでPIKではなくでIDF化して
読み込むという手があると思いつきました。

現状では特に必要性がないのでそのEXCELマクロは作成していません。
必要でしたらお知らせください。有料でお作りします。


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) 

ダミーSCHでバリアントを作成 [ALTIUM DESIGNER]

PCBで部品の実装、非実装をしたい場合はバリアントで処理しなくなります。
しかし、回路図がAltiumSCHで支給されていな場合はどうすればいいでしょうか。

AltiumPCB側のBOMの情報からスクリプトでSCH上に仮の部品を配置する方法もありますが
SCHではその手法が不明です。
また、デジグネータとコメントをペアで処理するにはDelphiの配列を利用する必要が
あるでしょう。

そこで適当な2ピンの部品をSCH側にAB***で等間隔で配置しておいてそれをリネームする
方法を思いつきました。

そこで利用できるのがWAS-ISファイルです。
バックアノテートファイルとして作成したWAS-IS(*.WAS)ファイルを読み込んでそれで
リネームするという手法です。

WAS-ISファイルを出力することが可能なのは以前の記事でもわかるように実験済みで
ORCADでも利用可能です。


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 Delphi Script]

これまでのスクリプトは基板上の情報を収集してそれを整理するものが殆どでした。
それはスクリプトというものの性質上、能動的には動作しないのではないかと勘違いして
いましたが、そうではないようです。
部品のREF番号を回転するスクリプトでは位置を勝手に移動している訳ですから。

今回のスクリプトでは基板上の部品のプロパティを操作しているので、色々とアイデアを
出しやすいでしょう。

今はまだ部品の位置を0.01mm単位で移動してインチ/ミリの影響による位置ズレを補正する
ぐらいしか浮かびませんが、他にもアイデアを考えておきます。

元のスクリプトがVBなのですが、慣れるとDelphiの方が処理しやすいのでそちらに移植する
ことも同時に必要です。


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) 
前の20件 | -