秋月のANDDIOモジュールを使った制御

  • (2016/04/21) ラマン装置で電源等のコントロールで、ANDDIOを使うことにした。そのため、専用ケースに組み込む予定。そのために秋月でParallax製のUSBシリアル変換アダプタ(M-06812)を買ってみた。既にドライバーをインストールしているFTDIのチップのためか、なにもインストールしなくても、Macですぐ使えた。ANDDIOデジタルIOモジュールは、基板に固定用穴がないので、ケースに固定するときに困る。両側にあるシリアル端子両脇の穴を使って、L金具で固定するしかなさそう。
  • (2014/09/02)アジレントのデジタルマルチメーターの制御を後ろに追加
  • (2014/06/27)意外かもしれないが、Macでもシリアルインターフェースが付いている計測器等を制御することができるが、多くのメーカーはそうとは宣伝していないのが現実である。以前別項でRS232Cによる計測器の制御について書いているので、RS-232Cが付いている計測器の制御はそちらを参考にしてください。計測器以外の制御(電源やレーザーのON/OFFなど)をすることを考えて、秋月電子通商からANDDIOデジタルIOモジュールを買った。まずテストしてみる。

秋月電子通商のANDDIOデジタルIOモジュール

  • このモジュールはRS-232CでPCに接続して、14個のチャンネルを入出力制御できるユニットである。例えばスイッチの状態を読んだり、電源のON/OFF制御などに応用できる。ただ、電源の制御などでは外部にリレー等の回路が必要であり、外部電源も必要となる。また、ユニット自体に電源が必要である。インターフェースはRS-232Cであるが、USBシリアル変換ケーブルを使うことで、PCはもちろん、Macからでも制御できるはず。マニュアルにはMacで使えるかどうかについて書いてはいない。

とりあえずMacから動かせるかどうかの確認

  • まず電源が必要なので、手持ちのDC12 V電源アダプターを使う。モジュールにはレギュレーターが付いているので、DC8-30 Vの電源アダプターが使える。モジュールに電源用のソケットがついてないので、手持ちのプラグ部品に電線をハンダ付けして、モジュールに電源を接続する。同時に秋月からエレコムのUSBシリアル変換ケーブル(UC-SGT)を買ったが、現在使っているOS X 10.9.3でドライバーがうまく動かない。仕方ないのでArvelのUSBシリアル変換ケーブルに替えた。そちらはチップメーカーからダウンロードしたドライバーで問題なく動く。
  • Mac上ではXojo(Realbasicの後継)でプログラムを作成する。最初にシリアルコントロールを新しいウインドウに貼付ける。インスペクターを使って、通信の設定をする。9600 baud, 8 data bit, No parity, 1 stop bitとし、XON,CTS,DTRは全てoffにする。次にPopupmenuをウインドウに貼付けて、openイベント時に以下のプログラムを設定。
    me.ListIndex = -1
    dim i, count as Integer
    count = System.SerialPortCount
    for i = 0 to count - 1
       me.AddRow( System.SerialPort( i ).Name )
    next
    これはシリアルデバイスを読んで、その一覧をメニューに入れるので、起動後にポップアップメニューを開くと、インストールしたドライバーに対応するデバイスが出てくるはず。最初にそれを選択する必要がある。出てこない時はUSBシリアル変換ケーブルがつながってないか、ドライバーがちゃんとインストールされていない。次にPopupmenuでchangeイベントが起こった時に以下を入力する。
    if me.ListIndex = -1 then return
    Serial1.SerialPort = System.SerialPort( me.ListIndex )
    if not Serial1.Open then
       MsgBox "Couldn't open the device: " + Str( Serial1.LastErrorCode )
    end
    これは選択された時(changeイベントが起こるので)、選択されたデバイスをシリアルポートに設定している。 次にPushbuttonを2個貼付けて、1つにはactionイベントで以下を入力。
    Serial1.Write "AHN"+Chr(13)  
    AHNはモジュールに対するコマンドで、1つ目のモジュール(A)で、チャンネルNをHigh(5 V)にすることを意味する。最後にCR(chr(13))が必要となる。Serial1.Writeは意味通りで、シリアルデバイスにAHN+CRを書き込む命令。 もう1つのボタンにはactionイベントで以下を入力。
    Serial1.Write "ALN"+Chr(13) 
    こちらは出力をLowにする。 ウィンドウがcloseするイベントには
    Serial1.Close
    Quit
    を入れておく。これはシリアルポートを閉じている。
  • さてテストする。ポートの出力の確認のために、チャンネルNとGND端子の間にLEDを取り付けておく。NにしているのはGNDから近くてLEDをそのまま付けられるというだけの理由。プログラムをビルドして、実行する。まずPopupmenuからシリアルデバイスを選択する。最初のPushbuttonを押すと、LEDが点灯した(下の写真)。2つ目のボタンを押すと、LEDが消灯し、プログラムからモジュールが制御できているのが分かった。これでMacで使えることが証明された。後は実際の実験用に外部回路を作るが、来月から忙しいので、部品だけは買っておいて、しばらくはお休み。手持ちのレーザーのON/OFFはTTLレベルの信号でできるので、特に外部回路はいらないようだ。現在、顕微ラマン測定ではCCD検出器制御装置が持っているI/Oを使って色々と制御しているが、かなり古いので壊れると困る。しかしそれらの制御をこちらのボードに移すことができそうだ。そちらはWindowsマシンで、かつラマン測定自体の制御ではVisual Basicを使っているので、それで作成する必要ことになる。
akizuki_IOunit.png
  • 上の写真はデジタルIOモジュール(左側)とArvelのUSBシリアル変換ケーブル(赤く光っているところ)。ちょうど、MacからチャンネルNの出力ONにしたところで、そのチャンネルに差した緑LEDが光っている(中央下部)。左下のケーブルはモジュールへの電源を供給するケーブル。

Macを使った装置制御2(アジレントのデジタルマルチメーター34401A)

  • デジタルマルチメーター34401AはインターフェースがRS-232C(とGPIB)であり、USBシリアル変換ケーブルを使うことで、Macから制御できる。上記同様、ArvelのUSBシリアル変換ケーブルを使った。
  • 同様にXojo(Realbasicの後継)でプログラムを作成する。最初にシリアルコントロールを新しいウィンドウに貼付ける。インスペクターで通信の設定。9600 baud, 8 data bit, No parity, 2 stop bitとし、DTRをONにする。多分マルチメーター側でも同じ設定にしないといけない。次にPopupmenuを貼付けて、Openイベント時に以下のプログラムを設定。
    me.ListIndex = -1
    dim i, count as Integer
    count = System.SerialPortCount
    for i = 0 to count - 1
       me.AddRow( System.SerialPort( i ).Name )
    next
    これはシリアルデバイスを読んで、その一覧をメニューに入れるので、起動後にポップアップメニューを開くと、インストールしたドライバーに対応するデバイスが出てくるはず。私の場合は、usbserial-FTF05D9Iがリストに入っているので、それを選択。出てこない時はUSBシリアル変換ケーブルがつながってないか、ドライバーがちゃんとインストールされていない。
  • マルチメーターに命令を送る時には最後にCR+LFを付けないといけない。面倒なのでcrlfという変数をshared propertiesとしてstring型で登録する。そしてevent handlersでOpenイベントの時に以下を書き込む。
     dim d as new Date
     timer1.mode=0
     crlf = chr(13)+chr(10)
    Timerコントロールを使って一定時間毎にデジボルからデータを取り込むようにするので、timer1はそのコントロールである。Timerコントローラーをウィンドウに貼付ける。InspectorからModeはMultiple, Periodは1000 (ミリ秒単位)としておく。Periodを変えると測定間隔を変えられるが、測定精度で設定した積分時間よりも短くするとマルチメーター側でエラーが生じて、電圧の読みもおかしくなる。下の設定どおりだと0.5秒は大丈夫だが、それより短いとエラーが出る。もっと短時間で測定するためには精度を下げる必要がある。
  • 次にPopupmenu(serial port用)でChangeイベントが起こった時に以下を入力する。
     if me.ListIndex = -1 then return
     Serial1.SerialPort = System.SerialPort( me.ListIndex )
     Serial1.Write "SYST:REM"+crlf
     Serial1.Write "*RST"+crlf
    これは選択されたデバイスをシリアルポートに設定している。 Serial1.Writeは意味通りで、シリアルからデバイスに命令を渡している。SYST:REMはマルチメーターをリモートモードに、RSTはリセットする。
  • 1つボタンを貼付けて、Actionイベントで以下を入力。表示用にTextareaをウィンドウに貼っておく。nlineもshared propertiesでinteger型で登録。nlineはTextareaを自動的にスクロールさせるために使っている。CONF:VOLT:DC 0.1,0.00001は、測定をDCV, 0.1 Vレンジで、0.00001精度で測ることを指定。SENS:VOLT:DC:NPLC 10は積分時間の関係の設定、TRIG:SOUR IMMはトリガーの設定。この場合はただちに測定を開始する。最初の日時も書き込んでいる。
     dim t as string
     dim d as new Date
     
     Serial1.Write "*CLS" + crlf   ' clear errors
     TextArea1.AppendText(Left(d.LongTime,Len(d.LongTime))+crlf)
     nline = nline + 1
     TextArea1.ScrollPosition = nline
     
     if (timer1.mode=2) then
       timer1.mode =0
     else
       Serial1.Write "CONF:VOLT:DC 0.1,0.00001"+crlf
       Serial1.Write "SENS:VOLT:DC:NPLC 10"+crlf
       Serial1.Write "TRIG:SOUR IMM"+crlf
       timer1.mode =2
     end if
  • Timer1のActionイベントで実際に測定する。以下を書き込む。
     dim emf as double
     
     Serial1.Write "READ?"+crlf
     emf =val(Serial1.Read(17))   '17 byte ??
     emf = emf *1000.0  ' Convert to mV unit
     TextArea1.AppendText(str(emf) +crlf)
     nline = nline + 1
     TextArea1.ScrollPosition = nline
  • 最後にウィンドウがcloseするイベントには以下を書き込む。
    Serial1.Close
    Quit
  • これでDC電圧を読んで、Textareaに書き込むことができるはず。端折ったので上記だけではよく分からない方も多いと思います。参考のためにソースを置いておきます。これはもう少し機能が追加されていて、いくつかの熱電対の温度へ変換、室温補正、データ取得間隔の変更、データのセーブが可能となっている。下がそのキャプチャー画像。
    Xojo-program.png

トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2014-09-02 (火) 11:45:33 (1176d)