Design(J)]プログラミングしなければいけないリストを記載しておきます。自分用の備忘録でもあります。1.STEPファイルを載せたPCBDOCからそのSTEPファイルだけを除去して軽くするスクリプトの作成。2.PCBDOCから余計なメカニカルレイヤをレイヤ指定して除去するスクリプト。3.IDFからピックアンドプレースファイルを抽出するEXCELマクロ。4.IDFを編集できるEXCELマクロ。PCB(J)]スクリプトにて円ではなくて円弧の場合は計算がややこしくなります。円弧をArcとした場合に円弧のセンター、半径、スタート、エンドの角度に関する自分用の覚書です。Arc.XCenterArc.YCenterArc.RadiusArc.StartAngleArc.EndAngleArc.LineWidthArc.Layerこれだけあれば計算はできますが、三角関数や円周率も必要です。PCB(J)]円や円弧の位置を認識するためには始まりと終わりの角度が重要です。そこでスタートとエンドが同じ値だとどうなのか調べていました。円の場合は0から360度です。180から180度などの数値は試したことがありませんがその結果は0から360度に自動修正されます。円は0度から始まるように修正されるということなのでしょう。円弧にて、270度から90度というようなキリのいい円弧なら別ですが、そうではない場合は演算するのが難しく、今後も検討しないとシルクチェックに応用しにくいです。(J)]見積、請求書は「わくわく帳票」というソフトウェアを利用しています。令和に対応したバージョンは4000円弱なので以前に購入した価格に近い値になります。検討とチェックをした結果、和暦を西暦に変更できるようなのでそれで対処することにしました。このソフトウェアでは他に不満はないのでこれで問題なくて、バージョンの必要性も感じていません。経理ソフトは平成のままなのですが、これは年度の関係もあるので来年にならないとわからず、どうするか決めていません。Scripts(E/J)]部品のシルク内にDesignatorのシルクを移動し忘れる場合をどう検出するかの話の続きです。デジグネータのシルクを四角形としてスクリプトで処理しようと考えています。最小値である左下のXY座標と最大値である右上のXY座標から四角形として認識すればいいと最初は考えていましたがそれだと一部分が掛かっている場合が組み合わせによっては検出できません。そこで四角形としたシルクの四隅を左下からABCDとして座標を計算させています。配置された部品自体はシルクなどのトラックの数値を個別にチェックして同様に四角形として認識させます。その数値内に四隅のシルクの座標が入っていたらエラーとしてレポートすればいいという考え方です。デジグネータの座標と文字高で計算しますが、座標は部品面の場合は左下の数値です。角度によって最小最大値とは違うので処理する必要があります。シルクが0度(水平の場合)では、文字高の0.8倍と文字数を掛け合わせたものが横幅と推測します。(0.8倍というのは、サンセリフの場合の複数の文字から計算した平均値です。3.2(mm)左下のXY座標が、もし0、0であれば右上は3.2、1(文字高そのもの)という意味です。半田面の場合はX座標が反転されるので角度との絡みで複雑になります。その場合も部品面視で処理します。Macro(J)]ネットリスト同士を比較しているマクロの完成度は高いと思っていましたがすべての情報が記載されているのでエラーが多い場合はそれをチェックするには見辛いようです。NGかOK化の判断が難しいので色分けしているのが裏目のようです。そこでどの列も問題ないものは行(REF番号)ごと削除してエラーのある行だけのエラーリストにすることが可能にしました。一度は通常通りにその内容をなめて確認をしますが、厳密なチェックの場合はエラーリストにしてその部分を眺めるようにします。コンピュータでチェックするとエラーをチェックする手間が省けます。それだけを抽出したこのエラーリストはその分、時間を掛けてチェックした方がいいでしょう。Scripts(E/J)]部品のシルク内にDesignatorのシルクを移動し忘れる場合をどう検出するかの話の続きです。バッドに掛かったデジグネータのチェックはクエリーで可能ですが、単純にQFPなどの部品の内側のシルク内にあるデジグネータは距離が大きいのでクリアランスで指定できずDRCエラーとして上がってきません。クリアランスチェックではシルクやメカニカルレイヤをクエリーで指定できたとしても電気的な要素ではないので弾かれてしまいます。そこでシルクのライン(トラック)をスクリプトで部品ごとに調べて最小のXY座標と最大のXY座標を調べてその占有エリアとし、それとデジグネータの左下の座標から推察したエリアがその占有エリア内にあればエラーとなるのではないかというアルゴリズムです。SMDに対応したピックアンドプレーススクリプト(海外サイト)を検討しているとシルクで使用しているトラックの座標を検出することが可能なのでこの案も現実的になってきました。(残念ながらこの海外のスクリプトは入手できないようです。SCHリンクのデジグネータとコメントを利用しているのが難点だと思っていました。弊社ではそれを改善しました。)CRを非表示し手動でチェックするスクリプトとこのスクリプトを同じメニュー(フォーム)で作成中なので出来上がるまではリリースできそうもありません。作成したフットプリント集にスクリプトでSTEPファイルを貼り付けることが殆どです。STEPファイルを貼り付ける前のライブラリを保存し損ねていると無いPCBDOCに戻せなくなります。そこで、ライブラリからSTEPファイルを取り除くスクリプトまたはPCBDOCからSTEPファイルを取り除くスクリプトが欲しくなりました。これを応用して別のレイヤの情報も取り除ければいいと思います。STEPファイルはスクリプト内では下記のように記述されます。eComponentBodyObjectただ、リンクされたものは、恐らく下記のように呼ばれるのではないでしょうか。Scripts(E/J)]プログラミングではなくて手動でチェックする場合も検討してみました。DRCでチェックできる2012以下のシルクのデジグネータだけ非表示にすればいいのではないかという案を思いつきました。すれば大物だけが表示されるのでそれを目でチェックすればいいということです。そこで登場するのがスクリプトで特定のデジグネータだけを非表示するというプロセスです。CRだけを非表示にするとチップアルミ電解コンデンサやチップタンタルコンデンサやR3216以上の抵抗も非表示になってしまいます。CRだけというのはDesignatorの最初のアルファベットを検出して二番目が数字ならOKです。次に大きな部品は高さ情報で制限すれば良さそうですが高さを記載していないとNGです。そこで思いついたのがパッドサイズを判定するということです。パッドのXYサイズの内どちらか大きい方を判定してそれが2mm未満なら非表示としています。PX、PYのサイズということでチェックしてそれをミリにします。CoordToMMs(Pad.TopYsize)しかし、ディスクリートのCRはパッドが1.4-1.6mmぐらいですから非表示になってしまいます。そこでパッドがMultilayerの場合はディスクリート部品と判定してSMDは非表示にしますがディスクリート部品は表示することにしました。その判定方法は下記のようにします。最初にSMDとしておいてIF文でチェックしてディスクリートならFalseにする方が2行で済みます。"False"最後にIF文でCRかどうか、パッドサイズの制限とSMDかどうかどうかで判定します。全表示させる場合に認識マークなどを部品として処理している場合は表示されてしまうのが難点です。放熱器などの機構部品も同様です。Design(J)]基板設計では差動ペアの配線の依頼もよくある筈です。その意味が理解できないままパターン設計をされているかもしれません。こちらの一番上段のこちらの図がその参考になります。https://www.altium.com/documentation/18.0/display/ADES/((Differential+Pair+Routing))_AD赤いノイズは両方の信号に対してプラス側の信号として重畳されます。その信号がオペアンプに入力されるとマイナス側を反転してプラス側と平均を取ると考えます。すると赤いノイズ部分が相殺されるので本来の信号のみがオペアンプから出力されるということになります。ラインフィルタで4端子のものもこれに似た原理で、こういったコモンノイズに強く内部にあるトロイダルコアの磁力として相殺してくれます。PCB(J)]プロジェクトファイルの拡張子に.TXTを追加してエディタで編集できるようにしてバリアントを追加してみました。プロジェクトファイル経由でバリアントが設定されるというのでファイル自体を弄くってみました。編集した.TXTを戻し忘れるとバリアントが表示されなくなるのでお気を付けください。編集で処理する場面は殆どないでしょう。Scripts(E/J)]基板上のDesignatorやCommentなどを非表示したいことも稀にあるでしょう。基板上に配置した部品をComponentとするとDesignatorを表示、非表示するには下記のようにします。Falseとなります。DesignatorやCommentなどを非表示にするなんてと思っていらっしゃる方もおられるでしょうがそうでもないのです。その話は今後の記事にて。PCB(J)]部品のシルク内にDesignatorのシルクを移動し忘れる場合をどう検出するかの課題の話です。パッドの上にシルクが掛かっていればDRCでチェック可能です。比較的大きな部品の場合はその内側にシルクを置き忘れます。これを同検出するかをずっと検討した結果、思いついたのがDesignatorをシルクレイヤではなくメカニカルレイヤにスクリプトで移動してDRCを掛けることです。これでは大きな部品においては完全ではありません。こちらの手順なら上手くいきそうです。1.スクリプトでDesignatorの位置と文字高を調べてレポートにする。2.PCBデータからIDF出力します。IDFは各部品のエリアを簡単な図形で認識しています。3.EXCELマクロで両方のファイルを入力して1.の情報からDesignatorのシルクの占有場所をXY座標としてしらべます。同様に2.のIDFからそれに対応する部品の敷地を調べ、それが重複しているかどうかを調べます。これなら処理はできそうですが、EXCELマクロでどうIDFの内容を分析できるかが難題です。Query(J)]通常は下記のようにされるでしよう。Pairs')Inpolyどうやら古いADのバージョンによっては部品面だけのこちらは動作しません。InDifferentialPairClass('TopSide')Inpolyその場合は下記のようにすればいいでしょう。OnTop複数の差動ペア名を記載すれば、使い分けが可能です。(ネット名ではありません。)InDifferentialPair('DIFF_A','DIFF_B')Inpolyべたアースをどれぐらい逃げるかは、高周波の回路設計者はマイクロストリップラインの幅の2倍以上とするのはご存知の筈ですが、デジタルの回路設計者の場合は知らない場合も多々あります。こちらの図の場合は0.28mmのパターンで処理しているので最低限0.56mm以上のギャップが必要となります。0.6mm以上の数値をクエリーの下の図に記載してください。こちらの右下の隣接パターン間隔の直近上位の値を記載してください。https://www.pcb-noah.com/asp/wical/ical.aspxべたアースが1mm以上または不要とする場合もありますが、その場合は外部ノイズがそのまま差動ペアのストリップラインを襲います。それのガードリングという意味ではべたアースが近傍にあった方がいいでしょう。差動ペアの端にディスクリートのUSBコネクタのパッドがある場合はべたアースの逃げが広いと逃げの円弧がいびつになるのでその数値にも注意が必要です。差動ペアが部品面だけの場合は、半田面は通常通りのべたアースの逃げにした方がいいでしょう。(ディスクリート部品のランドがある場合です。Scripts(E/J)]文字を45度回転するスクリプトなどを加工すると文字を一括編集するプログラムに変更が可能です。ストロークフォントの指定方法も見つかったので下記のように処理することができます。配置レイヤ、ポジション、HIDEオン/オフざっと思いつくのはこれぐらいです。Scripts(E/J)]部品のプロパティを編集するスクリプトと部品の座標を丸めるスクリプトを合体させて一つのメニューフォームで処理することにしました。詳しくは下記のブログ記事の機能です。1.SCHのREF番号の修正2.コメント欄の空にするスクリプト3.部品の座標の丸めをするスクリプトどちらのスクリプトもパターン設計後ではなく、ラフレイアウト後やパターンを引き始める時に利用することを想定しています。部品の座標を丸めるのはデフォルトを0.001mmにしているとはいえ、危険なのでチェックボタンをオンにしないと利用可能にならないような仕様にしてあります。メニューフォーム内には記載はありませんが、部品の回転角度は360度を無条件に0度に修正します。これでピックアンドプレースファイルの出力時に顧客からつっこみが入らなくなるでしょう。併せてプリミティブロックのロックし忘れ防止のために再ロックを無条件に掛けます。左側のプロパティ修正欄はわかりやすいように項目名を規則的にしてあります。デフォルトはSCHリンク用のデジグネーターをフットプリントのデジグネーターと同じにするものにしてあるので誤って操作させても支障はないでしょう。このスクリプトは時期を見てダウンロードできるようにしたいと思います。Scripts(E/J)]スクリプト内の部品をComponentとすれば下記の記述でプリミティブロックが外れます。falseこれでは使い勝手が悪いのでロックし忘れを防ぐ為に下記のようにする方が安全でしょう。True詳しくはこちらの情報を参考にしてください。Macro(J)]バリアント用にダミーSCHをAltiumSCHで作成する話の続きです。AltiumPCBでBOMとしてデジグネータだけをEXCELファイルとして出力しそれをEXCELマクロで加工して*.WASで保存すればいいでしょう。WASファイルは下記のように変えたいものと変えるものを半角スペースで区切ればAB1をR1に、AB2をR2に変換してくれます。R2コメント欄の変更はSCHとPCBのリンクで処理すればいいでしょう。数が異なるのでネットリストなどのリンクはNGです。EXCELマクロとしては、EXCELファイルを読み込んでその文字列をFor-Next文の回数iをそのままREF番号の数字として利用できるので10-15分ぐらいで作成できました。AltiumSCHではA2サイズに、四角で囲まれたフィルタの部品をAB1からAB1200として仮配置してあります。(シンボルは何でもいいのですが一番分かりやすいものを利用しました。)マクロで作成したWAS-ISファイルを読み込めば番号が差し変わります。後はバリアントとしての処理が可能ですが、接続状態が異なるので問題が出るかもしれません。(J)]先日のQuadcept関連の記事の絡みでIDFについて調べてみるとその前にIDFエディタがないことに気がつきました。熱シミュレーションなどにIDFは使用されていますが、高さなどのオフセットでEXCELマクロで修正したことがあります。それ以外でも利用するためにまずは要素を分類してそれを編集できるようにしておけば今後の役に立ちそうです。IDFはファイルが2つあるのが厄介で、拡張子にも方言があります。名前などは片側のファイルを勝手に修正するとエラーになるでしょう。両方を同時に連動するような編集の仕方が良いでしょう。(J)]PDFの回路図の文字列から処理するマクロでの話です。PDFをCTRL+Aで全文字を選択してEXCELのマクロにコピペすると余計な文字列が含まれているようでエラーになる場合があります。そこで、一太郎に一旦貼り付けて、それを更にEXCELにコピペし直すとエラーがなくなります。一太郎のエディタのモードではなくて本来の文章編集モードでの話しです。WORDでも同様の効果が出るでしょう。余計な見えない文字列を除去するには一旦、マイクロソフト系のソフトに貼り付けるといいという話があるのでそれを流用してみました。露地メロン栽..日本語で失礼します。