KiCadのBOM出力プラグイン書いてみた

目次

この記事はQiita の KiCad Advent Calendar 2015の 8 日目です。 ← 7日目(kinichiro さん)・8 日目・9 日目(starfort-jp さん)→

KiCad 4.0 では、プラグインを使用して BOM を出力するようになりました。この変更によりユーザがプラグインを作成して BOM の内容を簡単に変更できるようになりました。

ネットを見回すと、BOM 情報を元にDigi-KeyMOUSERなどの情報を参照してコストを計算するプラグインKiCostなどが有ります。

ここまでの高機能は必要ありませんが、部品の発注(買い物)と実装を少しだけ便利にする BOM プラグインを書いて使っています。標準の BOM 出力プラグインに毛が生えた程度の簡単なものですが、自分ではとても楽をできている気がします。

ここではプラグインと言ってもただのフィルタープログラムで、「こんなだったらもっと便利なのを作れるぞ」という切っ掛けにしてもらえたらと思います。

プラグインを作成する言語

KiCad のディレクトリを見ると、CSV 形式の BOM ファイルを出力するためのプラグインなど何種類かのプログラムが標準で添付されています(注 1)。これらのプラグインは全て XSLT で書かれていて、私には理解不能です。

そこで基本に戻ってKiCad のドキュメントを参照すると、次のように書かれており XML ファイルを読めればどの言語で書いても良いことがわかりました。

中間ネットリストファイルに後処理のフィルタリングをすることで、部品表 (BOM) ファイルのような他形式のファイルを生成できます。この変換はテキストからテキストへの変換なので、この後処理フィルタは、Python や XSLT など、入力として XML を扱える処理系で記述できます。

KiCad の標準的なスクリプト言語は Python ですが片言しか話せないので、今回は Ruby を使用してプラグインを作成しました。

中間ネットリストファイルの構造

中間ネットリストファイルは、普通の XML ファイルです(注 2)。この大まかな構造は、次のように 5 つの大きなエレメントからなっています。

<?xml version="1.0" encoding="utf-8"?>
<export version="D">
  <design>
    ...
  </design>
  <components>
     <comp ref="P1">
      <value>CONN_4</value>
      <libsource lib="conn" part="CONN_4"/>
      <sheetpath names="/" tstamps="/"/>
      <tstamp>4C6E2141</tstamp>
    </comp>
    ...
  </components>
  <libparts>
    ...
  </libparts>
  <libraries>
    ...
  </libraries>
  <nets>
    ...
  </nets>
</export>

BOM ファイルの出力に必要な部分は、主に<components>エレメントです。この中に部品のリファレンスや値が入っています。<libparts>エレメントには部品の説明などが入っているので、詳しい説明入りの BOM ファイルを作成するなどに使えそうです。

プラグインを書いてみた

今回は単純に<components>エレメントの情報を使って部品の注文(買い物)と実装を少しだけ便利にする BOM プラグインを書いてみました。

部品の注文には、部品名と個数が必要です。そこで注文用には同じ部品を数え上げて、部品ごとの個数を BOM ファイルに出力するようにしました。 注文(買い物)用のBOM。部品と必要数を表にしています。

部品を実装する時に多くの方は同じ部品、例えば 1k の抵抗を 5 つとかまとめて実装しているのではないでしょうか。そこでリファレンスの番号に関係なく同じ値の部品でグループを作るようにソートして BOM ファイルに出力するようにしました。 実装用のBOM。リファレンス順でなく、同じ部品がグループを作るように並べています。

実装用と注文用の BOM ファイルを CSV 形式で個別に書き出しても良いのですが、結局表示するときには Excel を使用するので一つの Excel ファイル内で別シートとして書き出すようにしました。Excel 形式での書き出しにはaxlsxライブラリを使用しました。

こうして書き上げたプラグインは Gist で公開しているbom2excel.rbを参照してください。

プラグインのインストールと BOM 出力

今回書いたプラグインは外部ライブラリーを使用しているので次のコマンドで必要な外部ライブラリー(axlsx)をインストールしておきます。

sudo gem install axlsx

プラグインを使用するには、KiCad にプラグインを登録します。

  1. Eeschema を起動して BOM アイコンをクリックする。

  2. Add Plugin ボタンをクリックしてプラグインを選択する。

  3. Command line 欄を次のように編集する。

    /???/bom2excel.rb “%I” “%O.xlsx”

???の部分はプラグインを置いてある場所に依存して変わります。 EeschemaのBOMアイコンをクリックすると表示されるダイアログ。ここでプラグインの登録とBOMの作成を行います。

これでプラグインが KiCad に登録されたので、Generate ボタンをクリックすると BOM ファイルがプロジェクトディレクトリ内に作成されます。

こんな簡単なプラグインですが、この BOM リストで部品の買い物と実装がだいぶ楽になりました。ただ実装するときにも必要な部品の個数が必要なのと、買い物の時にあまり馴染みのないリファレンスのプレフィックスだと「何だったかな?」となるので名前で表示するように今後の Python の勉強を兼ねて改良したいと考えています。

最後に

このように KiCad 4.0 では、慣れた言語で自由に BOM 作成プラグインを作成できるようになりました。私の作成したプラグインは非常に簡単なものですが、今後 KiCost のようにより便利なプラグインがたくさん出てくることを期待しています。

脚注と参照

  1. Linux 版ではプラグインが/usr/lib/kicad/pluginsに、Windows ではC:\Program Files\KiCad\bin\pluginsに有ります。
  2. 中間ネットリストファイルの構造 – Eeschema