回路図の配線を機械に委ねる、という考えかた

(注: このエントリは個人が趣味として行うような小規模プロジェクトを想定して書いています。)

さて突然ですがよくある回路図エディタで何か書こうと思った場合次のようなステップを踏むことが多いのではないでしょうか:

  1. 使う部品(主にIC)を作成する
  2. 大きな部品を大体の位置に配置する
  3. 配線しつつ細かな調整をする

ひどい場合には:

  1. 紙に手書きで完全に回路図を決定する
  2. 回路図エディタで「清書」する

いずれの場合にも書く物がかなりはっきりイメージ出来ている必要があり、基本的に労力を増やして可読性を上げているといえるでしょう。

どうしてこうなった

えー実際にはユーザ層の問題だと思うのですがー、それは置いておくとして、ここではもっと下のレイヤーであるソフト自身について考えてみます。

  1. 乏しい部品ライブラリ - 多くの場合データシートから手で入力する必要があります。たとえそれを一回しか使うことが無いとしても。
  2. ソフト間互換性の無さ - 他人への伝達には一旦画像を経由する必要があり、既存の物から派生する、ということが困難です。これについては文化的な要因も大きいでしょう。
  3. 編集操作自体の面倒さ - これがもっとも重要なので詳しく書きます。

基本的に既存のソフトは紙の延長で、昔からあることは全て出来るかわりに煩雑なものが多いと感じます。
とはいえマウス+キーボードという環境で手書きと同じことをしようとすると当然手書きの方が速いわけです。
コピペできることが唯一の相違点といってもいいでしょう。

しかしPCは紙にはない計算能力を持っているわけで、例え応答性や柔軟性で負けるとしてもトータルでより便利にすることは可能なはずです。
それを現在の限られた環境で活用するにはどうすればいいでしょうか。

改善への糸口

そもそも回路は部品間の接続が表現されていれば充分なのであって、それをどう二次元で表現するかというのは内容に影響を与えないはずなのです。

とはいえ

1 resistor "normal" "220" a:[2e] b:[3c]
2 transistor "NPN" "" e:[5Vcc] b:[7PA0] c:[GND]
...

のようなテキストと頭のなかのイメージは全然結びつかないわけで、二次元の表現形式は純粋に動作をイメージするために必要だということがわかります。


ここでブロック図を思い浮かべる人が多いのではないでしょうか。
そしてブロック図と回路図の対応を見てみると各ブロックの位置は比較的保存されるものの、配線の見た目は大幅に変化します。


つまり部品の位置はイメージ把握に重要だが、配線はそうでもない→自動化して少々おかしな配線でも問題ない、かもしれない、というわけです。

実装例

上記の考えに基づいて実際に配線を最短経路問題として自動処理するソフトを書いてみました。


例えばこの図は部品の位置とトポロジーのみから配線を生成しています。

ここから実際に試してみることができます:

あくまでもproof of conceptの段階なので実用上必須の機能のいくつも欠けていますが、感覚はつかんでもらえるのではないでしょうか。

さて

この方法は問題3を解決することができるかもしれません。そしてこれはwebアプリケーションとして実装されているので、問題1,2もどうにかすることができるかもしれません。


どうでしょう。可能性を感じませんか。