2009年3月3日火曜日

NI DAQmx を Agilent の後に。Visa.dll その2

Agilent Connection Expert 15 が既にインストールされている PC に、 NI DAQmx 8.7.1 を後からインストールします。Windows XP。

NI DAQmx のインストール時に、 Agilent がインストールした visa32.dll を上書きします。でも、もとのファイルは、名前を替えて自動的にバックアップがコピーされます。PyVISA(win32) は Agivisa32.dll を使うので影響受けていません。

NI DAQ インストール後、つまり visa32.dll が NI版に上書きされても、Agilent の Connection Expert 15 は機能しました。私の環境では、GPIB バスにつながった測定器の認識等、みてる限り問題なく動いています。動いているようです。


NIの製品については詳しく無いのですが、 NI DAQmx のCDには、3つの大物がいるようです。
  • NI DAQmx 8.7.1
  • NI Labview Signal Express 2.5.1
  • NI Measurement & Automation Explorer 4.4.1
インストール時の注意は、特になく、ほとんどデフォルトの選択で進めて問題ありませんが、「自分でプログラムを作る」のは、デフォルトの選択肢ではありません。サンプルのソースを展開するには、インストールオプションで、「サンプル」を選んでおく必要があります。よく分かってないので「サンプル」と書かれたプログラム(項目?)に一通りチェックを追加しました。
  • VC++ 2003 Measurement Studio サンプル
  • VC++ 2005 Measurement Studio サンプル
  • labwindows CVI サポート サンプル <このへんが Python + ctypes には合うのかも
  • .NET Freamwork 1.1 サンプル
  • .NET Freamwork 2.0 サンプル
  • MS Visual C サンプル
  • MS Visual Basic サンプル
インストールすると、デスクトップに Measurement & Automation というプログラムのショートカットがありました。そこで NI USB-6009 を接続すると、認識され、テストパネルとか言うので個々の信号を制御できました。この段階で、「ハード的に」問題ないレベルにセットアップが出来た、ですね。


では、Python と ctypes を使って NI USB-6009 の制御を試します。
すでに賢い人が作ったコードがありますので、それをもらって自分用に改造します。
SciPy の Cookbook にいいのがありますので Google検索 もらいます。
Numpy 、Python のバージョンに合う、自分のOS用のをインストールします。

Idle で実行して、コンソールで data と入力すると電圧値がアレイに入っています。びっくりです。プログラムでは、Numpy をインポートしてます。これは、アレイデータの初期化に使っているだけです。この人、多分 Matlab 使いですね。


NI DAQmx のAPI は、Help ファイルというかたちで、PC にインストールされます。
無い場合は、インストーラでなにか適当な場所にチェックしてみる。とか。

Cookbook のソースは、アナログディファレンシャル入力、デフォルト int32(-1)なので、それをシングルエンド(10****とか)に、と改造しようとしましたが、その int32(10****) の数字をさがしたり、USB-6009固有の、この設定はできないとか、ひっかかりました。
  • Measurement & Automation のテストパネルを使いましょう。
  • API の Help ファイルを見つけましょう。Docs? Documents? の下。
  • NI のディベロッパースフォーラムにも情報がたくさんあります。
  • 人に聞く時や、セミナー等では、「Pythonで」と言わない方がいいと思います。
慣れた人なら、NI DAQmx インストール時に言語は、日本語ではなく英語のほうがいいかもしれません。最近の Matlab もそうですが、全てのドキュメントが日本語に訳されていれば、問題ないのでしょうが、「英語のドキュメント日本語化されたメニューの項目」の対応がとりにくい等、いろいろ問題があります。ディベロッパーゾーンで見つかる情報も、やはり英語ですし。

先のシングルエンドの設定にも 2種類あって、USB-6009 に出来る方と、出来ない方、基準シングルエンドとか基準無しシングルエンド、とか、そういう日本語の表示と、API 説明文の中の略語の対応を、考えないといけない、とか。ちょっと、つまづくネタが増えます。

USB-6009 のドキュメントを探すときには、USB-6008 のドキュメントのほうが充実してますので、こちらも同時に検索するといいと思います。

コードは、その、いまのところ本当に「ちょっと」改造しただけなので、公開するのが恥ずかしいのでやめときます。





0 件のコメント: