2020年12月20日日曜日

EAGLEのulpで苦労したとこ

はじめに

 この記事はMicro Mouse Advent Calendar 2020の20日目の記事です。

 昨日は_BIRDさんのロボトレースのショートカットコースをMATLABのPRMパスプランナーで生成する話でした。

 

 ブログを作ったもののアドベントカレンダーの記事しか書いてません。つまり1年ぶりの更新です。

 

ulpとは

 Autodeskの基板CADのEAGLEにはulp(User Language Programs)というプログラムを実行できる機能があります。ulpを使うと回路図や配線図を編集できたりいろいろテキストデータを吐けたりできます。KiCadだとPythonが使えたりしますけど同じような機能です。

 

きっかけ

 車のワイヤーハーネスの設計をしたんですが、外部のメーカに投げる設計図を書くわけです。配線図(いわゆる回路図)と、各コネクタの何番ピンが他のコネクタのどこに繋がっているかというコネクタ情報の表が必要なんですが、これを別々で書いて合っているかチェックしていたわけです。もちろん変更があったら両方変えなきゃなりません。

そんなことやってらんねーというわけで配線図をEAGLEで書いてulpで表情報をcsvで出力するプログラムを書きました。表を自動生成すればチェックいらないよねということです。 


使ってみた感想

大変でした。

BOMリストを吐くとか、部品名を置換するとかの簡単なものならすごくいいと思います。

ただ、ちょっと複雑なことをやろうとするのには向きません。


ulpの仕様

基本的にはc言語っぽく書けます。インタプリタなのでjavascriptっぽいなと感じました。(javascriptほとんどさわったことないですが)

細かいことはここに書いてあります。Fusion360のヘルプですがEAGLEのulpと同じだと思われます。

EAGLEに特化しているので、ループの部分が特殊です。(特殊じゃないかもしれないですが私は戸惑いました。)

例えば、回路図から部品名をすべてリストアップするという場合はオブジェクト階層に従って

schematic(SCH) {
  SCH.sheets(SH) {
    SH.nets(N) {
      N.segments(SEG) {
        SEG.pinrefs(P) {
          printf("%s\n", P.part.name);
        }
      }
    }
  }
}

 という感じにするとすべての部品名を出力してくれます。


苦労したとこ

2次元配列が使えない

もちろん3次元配列もだめです。1次元配列だけなので項目ごとに配列を作るはめになり、可読性が落ちました。

 

関数に配列を渡せない

想定外でした。配列はすべてグローバルになりました。

 

ソートがクソ

組み込みのソート関数があるんですが、複数の項目を名前でソートしようとするとこうなります。

numeric string Nets[], Parts[], Instances[], Pins[];
int n = 0;
int index[];
schematic(S) {
  S.nets(N) N.pinrefs(P) {
    Nets[n] = N.name;
    Parts[n] = P.part.name;
    Instances[n] = P.instance.name;
    Pins[n] = P.pin.name;
    ++n;
  }
  sort(n, index, Parts, Nets, Instances, Pins);
  for (int i = 0; i < n; ++i)
      printf("%s %s %s %s\n",
             Parts[index[i]], Nets[index[i]],
             Instances[index[i]], Pins[index[i]]);
}

 添字を格納する配列indexにソート後の添字を入れてくれるのでそれを使ってアクセスします。

 

 また、ソート仕様はJavaScriptと同じです。


 

名前に含まれる数字の桁数を数える
配列をコピーして最大桁数と同じになるように0を追加
ソートして添字配列indexで元の名前の配列にアクセス

という処理を実装しました。


デバッガーがない

printfデバッグです。


まとめ

部品情報をすべて出力するとか、部品名をすべて置換するとかの処理だったらulpはおすすめです。なにより簡単なダイアログも使えますし。

ただ例外処理が多かったりすると大変です。Pythonとかで書いたほうが楽だと思いました。

 

終わりに 

ulpのダメなとこをを紹介してばっかでしたが、便利な機能だと思います。

公開されてるulpから欲しい機能のものをダウンロードして、気に食わないとこだけ変えて使う、という使い方が楽だと思います。

http://eagle.autodesk.com/eagle/ulp 

 

 明日のMicro Mouse Advent Calendar 2020 21日目の記事はqtfdl94qさんの「拡大縮小ができるログViewerをelectronで雑に作る」です。

0 件のコメント:

コメントを投稿