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

フットプリント作成用スクリプト Part.2 [Altium Delphi Script]

LCRとダイオードを一緒に作成中でしたがLCR自体もシルクで分類しますし
ダイオードも種類があるので、ダイオードは別に処理することにしました。

そのダイオードはリードタイプとフラットタイプとフラットタイプで長さの異なるタイプの
3つに分類しました。
具体的にはこのような感じです。

DIODE3.png

DIODE2.png

DIODE1.png

リードタイプで横幅や長さが異なるタイプもあったように思いますが出現頻度が少ないので
それは除外しています。


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

フットプリント作成用スクリプト [Altium Delphi Script]

フットプリントを作成できるDelphiスクリプトを作成中です。
IPCウィザードでも作成は可能ですが、何度も寸法を聞かれる割にはその情報が線分などで
表示されません。また、メカニカルレイヤなども指定できません。
それでは出来上がってから、自社用のスクリプトに修正するのに時間が掛かってしまいます。
そこで、メカニカルレイアやシルクのクリアランスなどをユーザーがプリセット可能なような
スクリプトを作成中です。

具体的には、以下のようなラインナップです。
これまでのものをよりカスタマイズし、それと区別するように末尾に_DWを付けて使い分けをします。
どれもパッドの輪郭をメカニカルレイヤにトラックで作図するので、寸法線も記入しやすくなります。
こちらの例のようにタブ切替でその形状をなるべく画像でチェックできるようにしました。

Del_So36_g.png

1.LCRD_DW
 チップLCRに2ピンのダイオードを追加しました。

2.SOT3_6_DW
 3ピンから6ピンまでのSOTで、3ピンはトランジスタ以外にダイオードも共用です。

3.SOP_DW

4.DFN_DW
 新規追加です。

5.QFP_DW

6.QFN_DW
 こちらも新規追加です。

7.AL_SMD_DW

8.TN_SMD_DW

9.AVR_DW

DFNとQFNは一緒のメニューにしようとも思いましたが、プログラムが複雑になるので別々で処理します。
今後はこれ以外にも作成できる種類を増やす予定です。


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

海外のDelphiスクリプトは [Altium Delphi Script]

Altium Designerで使用可能なスクリプトの殆どはDelphi(*.pas)です。
また確認した限りではAD14以降はスクリプト自体がプログラム内には同梱されていません。
海外のサイトでは2-4ヶ月に一つぐらいはアップされていますがどれも実務に使用できる
ものとは言い難いです。

APIで処理するのに情報が少ない上に、現状ではマイナーなDelphiだからでしょう。
国内では筆者以外は誰も作成されていないようです。

最初は空き時間に勉強していたとはいえ2ヶ月ぐらいは何もスクリプトが書けませんでした。
現在でも、楽々に作成できる訳ではありませんが、実用的なものが揃ってきました。
しかし、スクリプトで何ができるかを理解されていないAltium Designerのユーザーが多いことも
足かせになっているのではないでしょうか。

より現実的で自社用のフットプリントを作成できるスクリプトも作成中です。


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

フットプリントの寸法図 Part.2 [Altium Delphi Script]

フットプリント作成時にパッドの輪郭を四角形でメカニカルレイヤに配置するスクリプトを作成しました。
どんなパッドサイズでも四角形になるので寸法図を配置する場合に有利です。

パッドのxy座標とパッドのX方向、Y方向サイズを読み込んで処理しています。
但し、90度や270度に回転している場合はX方向、Y方向サイズが逆の寸法として認識しないと
四角形でトレースできません。(90度単位の回転にしか対応していません。)

パッド自体は貫通パッドではなくTopレイヤのみに対応しています。
寸法線の配置の都合で、PCBDOC上での作業を想定しています。既存のフットプリントを配置していても
フリーパッドと区別せずに四角形でトレースする動作をしてしまいます。

FP_Tool1.png

若干、特殊なので今のところはこのDelphiスクリプトのダウンロードの予定はありません。


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

Delphiの配列 [Altium Delphi Script]

VBでは配列Arrayが可能で、実際に宣言してみましたがエラーにはなりませんでした。
Delphiでは配列が利用可能か不明で利用できる関数のリストには含まれていませんでした。

しかし、こちらの情報によれば使用できるようです。
https://techdocs.altium.com/display/SCRT/Delphi+-+DelphiScript+differences

一次元配列の例だとこのような感じです。
x : array [1..2];

Altiumで二次元配列が可能かどうかは試していませんが、通常ならこのような感じで記述します。
y : array [1..2,1..10];

通常は0から始めますが便宜的に1からにしてあります。
末尾の;の前に「of integer」がいるのかもしれません。

ソートを使用するにはどうしても配列(特に、二次元配列)が必要になります。
これまでのスクリプトでは、まだ列の先頭の文字だけでソートしているだけなので配列のお世話には
なっていません。


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

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

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

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

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

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

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

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


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

能動的なスクリプト [Altium Delphi Script]

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

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

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

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


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

PnP内の紛らわしいパッド [Altium Delphi Script]

ピックアンドプレースファイルにてパッドだけで部品ではないフットプリントも出力されて
マウント業者としては紛らわしいデータです。

パターン設計者からすると(川上の)回路設計者から、わかりにくい部品表を貰うことが多いのですが
それと同じことを川下にも行っていることになります。

DelphiスクリプトでPnPファイルを生成するプログラミング内でそういったものは、部品とは別の
ものと区別できるフットプリント名で定義されていればIF文で除外できます。
(短めのフットプリント名の場合は誤検出するので他の項目とANDを取らないとNGです。)

データ生成工程のループを、その時だけは登録処理をしないで抜ける必要があるので
GOTO文を利用すればいいでしょう。
DelphiではVBAとは違って事前にLabelでラベル名を宣言してからその名前を利用するようです。

http://www.delphibasics.co.uk/RTL.asp?Name=Goto

Delphi_Prog_Goto.png

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

PnP内の認識マーク [Altium Delphi Script]

認識マークをフットプリントとして登録し、基板上に配置した場合の欠点としては
ピックアンドプレースファイル内にその情報が計上されてしまうことです。
回路設計会社側から提出される部品表に載っていないので問題なさそうですが、逆に情報が
一致していないという問題があります。

弊社では単純にランドを配置してクエリーでレジストなどの処理をしているのでそれには
当たりません。
しかし、放熱器などはフットプリントとして登録して配置しているので同様の現状となります。
回路図側にはREF番号やその型番がないのでPCB側で処理することが多いのですが、シルク文字も
非表示しにしているので、PnPファイルとしても不自然です。

PnPファイルをスクリプトで作成した場合は、コメントやフットプリント名などをIF文でチェック
すれば、それをNOTESなどの欄を作成し記載すればいいでしょう。
前出の放熱器の場合はNOTES欄に「Heatsink」となるように処理しています。
他の機構部品で基板上にREF番号がない場合も、実装するのであれば同様に処理する必要があるでしょう。

ランドだけのチェックポイントや半田ブリッジでスイッチするランドなどもプログラミングで
検出して記載可能です。
しかし、基板設計会社によってその各欄の法則が違うので自社でプログラムの修正が必要でしょう。

その後もマウント機のソフトウェアなどについて記載されているサイトをチェックしていますが
その準備中にすでに部品表があった方が良さそうです。
回路設計会社側からスムーズに正確な部品表が提出されていることを望みますが、そうでない場合は
やはりPnPにBOMを添付した方がいいでしょう。

PnP_Notes.png

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

PnP_Reportスクリプトの修正 [Altium Delphi Script]

色々修正してきましたが、今回はSimple BOMを出力するモードを追加しました。
「Run Process」をスクリプトに書き換えたものを三番目のラジオボタンの機能の中に
チェックボタンとして追加しました。
これで一段落ついた感じがします。

ラジオボタンの選択によって非表示とされ、全体は見えないのでDelphiスクリプトのプログラミング
時の画面のキャプチャー画像を載せておきます。
背景の黒い点はプログラミング時のボタンや文字など配置時の目安にするグリッドです。

PnP_Rep_V2_SCR.png

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

作成日時のヘッダー [Altium Delphi Script]

スクリプトで色々なピックアンドプレースファイルを作成できるようになりましたが
その素性をわかりやすくなるようにヘッダーをつけました。
しかし、それだけでは勿体ないので作成日を入れられるようにしようと試みました。

現状ではDelphiの情報は少ないので、そのコードと結果を2段で示しておきます。

PnPout.Insert(0,'Date : ' + DateToStr(Date))
Date : 2018/12/29

PnPout.Insert(1,'Time : ' + TimeToStr(Time))
Time : 21:15:30

Insertでファイルの0行目(0=先頭、1はその次)に日付をインサートする記述です。
通常はスクリプトで調べた情報を追記する形が多いのですが、そのデータソートすると
各項目を最初に入れられないので、最後に先頭に追加する形となります。


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

PnPファイルと一緒にBOM [Altium Delphi Script]

パターン設計が完了するとピックアンドプレースファイルを出力して一緒に送る場合が多いでしょう。
しかし、その時点で回路設計者から部品実装会社に部品表が提出されているとは限らないでしょう。
定番部品の部品手配が部品実装会社の場合は部品表が届いていないというのは不安です。

そこでPCBCAD側から部品表を出力して同梱する方がいいでしょう。
しかし、「Altium Designer」からの部品表出力はバージョンによっては自動ではなくて手順が必要です。
その代わりになるのが昔から地味ながら存在している「Simple BOM」です。
この「Simple BOM」を同梱すればいいでしょう。
ただ、AD18ぐらいからはこの「Simple BOM」がメニューからも消えてしまいました。
そこで、「Run Process」の情報をスクリプトに書き換えて処理します。

弊社ではガーバーデータのフォルダ内にFABという製造用フォルダを設けています。
その中にサブフォルダとしてBOMを作ってそこに入れています。

続きを読む


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

PnP_Reportスクリプト [Altium Delphi Script]

ピックアンドプレース(PnP)ファイルを生成する2つのスクリプトを合成してメニューで選べるように
しようとプログラミングしました。
スクリプトで出力することで、パターン設計をしているALtium Designerのバージョンに依存せず
安定したピックアンドプレース(PnP)ファイルを顧客に提出できます。

いざプログラミングを始めると、当初の考えとは違ってAD14風、AD18風、アドバンスという3つから
ラジオボタンで選択できるようにするのがベストだと感じました。

3つ目をアドバンスにしたのは省略するとADになるからで、ファイル名の作成時にADの文字を追加
しても違和感がありません。All Data(TOP/BOTの両面)の略とも取れます。

AD14では2行目が空白行になっているのでそれに準拠しました。チェックボタンでダミーの
Ref-xyとPad-xyを追加できますが内容はMid-xyと同じです。

AD18では2行目が空白行は止め、部品のセンターの名前がMid *ですがCenter*に変更しています。
3種類の中では一番コンパクトです。

アドバンスではSMDかどうかをチェックし「Type」という項目を設けて表示し、更にコメント欄を
左から3番目とし、フットプリント(2番目)の横に移動して部品の内容を再確認しやすくしてあります。
顧客によってはトップとボトムを別々のファイルにして欲しいという要望もありますがそれにも
チェックボタンひとつで対処ができます。


ファイル名は、それぞれ*_AD14、*_AD18、*_ADです。その*_ADのデータを各面で分割したものは
名前が長くなるので単純に*_TOP、*_BOTとしてあります。

このスクリプトはSummer09では動作しないようですが、それ以外のAD14-19までは問題なく
動作します。

PnP_Report.png


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

PnP関連のスクリプト2種の合成 [Altium Delphi Script]

2種類のPnP関連のスクリプトをその都度、選択するというは面倒です。
そこで、メニューフォームを作成してラジオボタンで選択する方がいいでしょう。

しかし、それだけでは済まないでしょう。
SMDの場合(SMD)
TOP/BOTを別のファイルとして出力するかの選択も必要でしょう。

通常の場合(Normal)
ADからのPnPと同じものにするのか、SMD/THD(IMD)を区別するためにTypeの項目を設けるのか。
(THD(IMD)とはディスクリート部品のことです。)

こちらでも、TOP/BOTを別のファイルとして出力するかの選択です。

恐らくSMD<--->Normalの切替がラジオボタンで、Typeの項目追加がチェックボタンに
なるでしょう。
TOP/BOTを別のファイルとしてどう出力するのか、プログラミングで悩むことでしょう。


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

PnP関連のスクリプト2種の改版完了 [Altium Delphi Script]

DelphiスクリプトによるPnP出力するこちらのマクロの再修正が完了しました。

SMD専用ですが、ディスクリートを含めた通常のPnPで、SMD/THDを区別をする2種類を用意しました。
PnP_ALL2.PAS
PnP_SMD2.PAS

Component.detailの部分は下記のようにしてREF番号とコメントを抽出して記載してあります。

******************************************************************
DET := Component.detail ;
// REF
DES := Copy (DET , 11 , Pos(' Comment:',DET) - 11 ) ;
// Comment
CMT := Copy (DET , Pos(' Comment:',DET) + 9 , (Pos(' Footprint: ',DET) - Pos(' Comment:',DET) - 9 )) ;
******************************************************************

これによりREF番号を調整するためのSCHとのリンクも不要です。
EXCELでコメント欄を修正するマクロも不要となりました。

危うく途中で断念するところでしたが粘ってよかったです。

プログラム的には、内容を追記する方式なのでREF番号がバラバラだったのでソートしました。
それに伴いヘッダー部分を後から追加する方式に変更しました。


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

SMD専用PnPスクリプトの改造 [Altium Delphi Script]

通常はREF番号の全部をピックアンドプレースファイルとして出力されますがこちらのスクリプトでは
SMDだけを出力してくれます。

以前にも触れたのですが、このスクリプトは項目名や順序や表記方法がオリジナルとは少し違っています。
その項目などはある程度は修正していたのですが、一番の欠点がフットプリントのREF番号ではなくて
SCH項目のREF番号なのです。
つまり、REF番号を手動で修正したコンポーネントの場合はここが違ってしまいます。
配置したものの全部が同じになっていることを確認できるものでないとNGで重複などが起きます。

また、オリジナルはフットプリント名が無かったのでその記述をしようと探し、やっとそれが下記の記述で
あることがわかりました。
Component.Pattern

他には、XY座標を小数第3位で丸めて(Round関数)、その後にmmの文字を挿入しました。
Rotationが360の場合は0に修正しました。

AD14.3での動作確認はしていますが、Summer09では動作しませんでした。


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

高速OPAMP周辺の浮遊容量 [Altium Delphi Script]

高速OPAMPで特性が出ないので入力部分のランドから部品面および半田面のべたGNDを
1mm程度は離すように言われたことがあります。
ポリゴンカットアウトで対応していました。
高速OPAMPは入力インピーダンスが高いのでその近辺のノイズを増幅してしまうから
なのかと勝手に理解していました。

Stray_OP_Ex.png

しかし、トラ技SPにて浮遊容量が0.5PF程度でもf特性の高い部分で落ち込みがでるとの
記載がありました。
毎回、計算するのが面倒なので単純に向き合った導体同士のコンデンサとして計算する
スクリプトを作成してみました。
0.6mmx1.5mmのランドの面積は0.9平方mmということで計算してみると0.022PFでした。
書籍に書かれているものに比べて一桁少ない値でしたが、実際には影響はでなくなり
改善しているのでこの値でも影響がでるのでしょう。
部品面は銅箔厚が断面積となるので部品面のべたの影響は少ないのかもしれません。

Stray_C_Scr.png



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

マイクロストリップラインの切り欠き率の続き [Altium Delphi Script]

Altium社のマイクロストリップラインの切り欠き率にはインサイド部分にも数値を入力する
ことが可能です。

通常は使用しないでしょうが、顧客によっては幅W部分を切り欠いた45度の部分でも維持したい
と言われる場合もあるでしょう。

それに対応するためにスクリプトにインサイド部分の切り欠き率をWを維持するように
計算できるようにしました。

以前のカット幅x(mm)は直接的に理解しにくいので削除しました。
その代わりに配置したD-x(mm)は、処理前のパターン幅です。
これはWより小さい値になっているので、これをWに戻すための比率がCriです。

パターン幅が狭い場合は、Criが100%を超える場合があります。
Altium Designer側では100%以上の設定はできません。
どうしてもコーナーでもWの幅を維持したい場合はCriを100%で処理した後で手動で
ポリ・リージョンを修正するしかないでしょう。

Chamfer_Rate_Scr2.png


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

マイクロストリップラインの切り欠き率のスクリプト [Altium Delphi Script]

前の記事でも触れたAltium社のマイクロストリップラインの切り欠き率の記事の中の
数式を利用してDelphiスクリプトを作成しました。

これで計算したパーセンテージを入力すれば、トラックのコーナー面取りが適正に(VSWRが1.1以内)
処理が可能となります。

記事ではMとなっているところをCr(Chamfer Rate)としてあります。
Cr = 52 + 65 * e (-1.35 * W/h)

これまではCr(M)の値は無条件に50%にしていましたが、実際に計算してみると60%台になる
場合(より余計にカット)もあります。

スクリプトでは、Crに併せてxの値(45度のセットバック値)も計算させています。

パターン幅が狭くて板厚が厚い場合はCr(M)の値が極端に大きくなります。
W/h が 0.25のように小さくないことも事前に調べておいてください。

Chamfer_Rate_Scr.png


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

クロスハッチング時のマイクロストリップラインの板厚 [Altium Delphi Script]

以前の記事を具体的なスクリプトにしました。
まずはハッチングの状態がべたの何割となっているのか係数kを求めます。
0.1mmパターンを0.2mm間隔で配置すると0.75(3/4)になります。
(0.1/0.2mmという倍の関係でも縦横ハッチングするので交点部分があり0.5ではありません。)

それに比例して静電容量は減ります。

こちらの記事のRやベクトルを考慮したJωを無視すればL/Cの平方根になります。
つまり静電容量の平方根の逆数だけZの値が大きくなるということです。
クロスハッチングの影響でLに変化がないということが前提ではあります。

それを考慮し逆算して目的のZmesh(小さい値)を算出して、その値を実現するように通常の手順で
マイクロストリップラインを算出すればいいのではないかという案です。

あまりクロスハッチングが荒いと誤差がでるかもしれないのでパターン幅とハッチング間隔は3倍以内
に制限しています。

FR-4で50オームで計算した場合に、通常0.3mmの板厚みが、1:2のクロスハッチング(0.75)の場合では
0.25mmで実現可能という結果になりました。

大した差ではないように感じますが多層基板で、どうしようもない場合は0.05mmの板厚軽減でも
ありがたいことでしょう。

Mesh.png

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