SigmaCanvasはじめました

技術紹介

デモにしろ製品にしろ,最近作っている大抵のシステムは,

  1. イーサネット(UDPパケット)とかPCIe経由とかでデータを取得
  2. 必要に応じて取得したデータを加工
  3. 必要に応じて複数のデータをマージ,あるいは分割
  4. データを表示したり,保存したり

という組み合わせで構成されています.で,RECONF研でのデモ展示の準備のために,また一つこういうシステムを作りながら思ったわけです.私は,これから先,あと何回UDPの受信プログラム(よくWebに掲載されてるサンプルみたいなの)やJFrameの適当GUIを作るのだろうか…

システムを構成する要素を部品化,それらの組み合わせでシステムを実現できるフレームワークがあれば,きっと,もう二度とJFrameほげほげと書かなくてすむに違いない!!

というわけで,名付けてSigmaCanvasという名前のツールを作り始めてみました.

まあ,なんというか,欲しいのは,L○bViewとかM○tLab+SysG○nみたいなツールなわけですが…高くて買えないんだもの…

何ができるか

システムの構成をXMLで記述してフレームワークSigmaCanvasにくわせるとシステムができます.たとえば定義ファイルはこんな感じ.

<?xml version="1.0" encoding="UTF-8"?>
<sigmacanvas>
  <item id="r" class="sigmacanvas.tools.UDPReceiver">
      <parameter key="bufsize" value="2048"/>
      <parameter key="port" value="16384"/>
  </item>
  <item id="c0" class="sigmacanvas.tools.ConvByteToShort">
    <parameter key="size" value="128"/>
    <parameter key="offset" value="8"/>
  </item>
  <item id="c1" class="sigmacanvas.tools.ConvAnyValueToDouble">
    <parameter key="conv" value="(d:AnyVal) => ((d.asInstanceOf[Short].toDouble / 4096.0) * 2.048) / 220.0 * 1000.0 / 0.6"/>
    <parameter key="cond" value="(i:Int) => i % 2 == 0"/>
  </item>
  <item id="c2" class="sigmacanvas.tools.ConvAnyValueToDouble">
    <parameter key="conv" value="(d:AnyVal) => ((d.asInstanceOf[Short].toDouble / 4096.0) * 2.048) * 3 / 6"/>
    <parameter key="cond" value="(i:Int) => i % 2 == 1"/>
  </item>
  <item id="v" class="sigmacanvas.tools.Simple2DViewer"/>
  <item id="v0" class="sigmacanvas.tools.HexDump"/>
  <connect src="r" dest="c0"/>
  <connect src="c0" dest="c1"/>
  <connect src="c0" dest="c2"/>
  <connect src="c1" dest="v"/>
  <connect src="c2" dest="v"/>
  <connect src="r" dest="v0"/>
</sigmacanvas>

で,実行すると,受信したパケットを標準出力にダンプしつつ,データを変換してグラフにする,というようなシステムが起動します.

a74f4d0ab10743cb81e3197f9a2e7a28

これ,ちなみに,exStickでUSB扇風機の電圧と電流を計測しているところです.ブラシモータのブラシが切れるときって電流0になるんだなー,とか回転数変わると0になる周期が変わるなー,とか,見てると結構楽しいです.

システム構成の可視化

定義したシステムは目でみて確認することもできます.シンプルですが,こんな感じ.

0990f2936eab7536572e67f7a3427bb3

そのうち,もっと格好いいツールにしたいですね.

今後は…

まずは,ドッグフードたべつつ,

  • XMLを手書きしなくてすむように,(よくあるツールみたいな)グラフィカルエディタによるシステム設計の実現,
  • PCIeその他の入出力I/Fも接続できるような部品を用意する

とか,その他いろいろ,夢が広がり中です.

コメント

タイトルとURLをコピーしました