Mac, PCにおいて計測器をRS-232Cで制御する

  • 注意:以下でwiki word(新項目)とならないように大文字が小文字にわざとなっている場合があります.
  • 追記(2014/06/23)最近久しぶりに使ってみたところ、最新のOSX 10.9.3ではシリアルーUSB変換ケーブルのドライバーが動かないことが分かった。ATEN社からダウンロードできるドライバーは10.9.3では動かなかった。また、チップ製造元のProlific Technology社からのドライバーでもうまくいかなかった。ArvelのSRC06-USBは、販売元にはWindowsのドライバーしかないが、チップの製造会社のFTDI社からMac用ドライバーをダウンロードしたら、動作した。今はArvelのものを使っている。
  • 研究でRS-232C(シリアル)の付いた測定機器や制御装置を扱う必要がよくある.しかしレガシーI/OであるRS-232Cをもつパソコンは珍しくなった.そのためUSB-serialの変換ケーブルを使ってRS232Cへインターフェースするのが一般的になっている.最近REALbasic(現在はXojoになっている)のMac, Windows両方を使っているので(Macbook内で共存してる),ごくわずかの手直しで同じプログラムをMac, Windows両方で動かせるようになった.RS232Cを制御するプログラムはWindows用は作ったことはあるが,Macではハードルが高そうだったのでこれまでやらなかったが,結局Windows, MacどちらもUSB-serial変換ケーブルを使う点で全く同じ状況になっていることに気づいた.Xojoなら共通に使えるプログラムが作れそうだ.またUSB-serial変換のドライバーがMac用にも用意されているケースがあることも偶然発見した.そこで半日ほどXojoで遊んでみたところ,意外に簡単にMacからも計測器/制御装置を動かす事ができることが分かった。Windowsでも同じプログラムが動く。
  • まずUSB-serial変換器が必要.Mac用ドライバーも提供されていることが重要だが,前にRSから数個買った手持ちのATEN社製のUC-232Aは調べたところMac用ドライバーが提供されていた.ドライバーはhttp://www.atenjapan.jp/からダウンロードできる.このドライバーをインストールした.同様にWindows用もダウンロードして,インストール.Amazonでちょっと調べてみたところ,Mac用ドライバーを提供している製品はこれ以外にも結構ある.Windowsの場合はUSB-serial変換器をUSBポートに差して,コントロールパネル->システム->ハードウェア->デバイスマネージャ->ポートからUSB-シリアル変換器がどのポートにアサインされているかが確認できる.またプロパティからボーレートやパリティの設定もここで出来る.計測/制御器で指定されている値に設定しておく(実際はプログラムから変えることはできるが念のため).私の場合はCOM3となっていた.ポート番号はプロパティの詳細から強制的に変えることもできる.
  • テストにはシグマ光機のSHOT-6022軸ステージコントローラを使った.同じシグマ光機のXYステージのマイクロメーターヘッド部分をパルスモーターのついたアクチュエータで置き換えたものをコントロールする.これらはレーザー加熱用のDACの位置制御のために以前に買ったもの.1パルスで0.5micron移動する.これの設定は9600bps(デフォルト,max 19200pbsまで可), パリティ無, 1stop bit, フロー制御はハードウエア,またCR+LFをコマンドの最後に付ける必要がある.
  • プログラム作成にはXojoを使用した.serialのコントロールは標準で用意されている.serialコントロールをフォーム上に置いて,インスペクターで速度,パリティなどの設定を行う.WindowsもMacも全く同じ.
  • Windows側は今の場合COM3なので
    Serial1.SerialPort= System.SerialPort("COM3")
    if Serial1.Open then
      Serial1.Write "M:1+P1000"+Chr(13)+Chr(10)
      Serial1.Write "G"+Chr(13)+Chr(10)
    end if
    Serial1.SerialPort.Close
    などとする.Serial1.Openはture/falseを返す.M:1+P1000はSHOT-602のコマンドで,1軸+方向1000個パルスを送る設定であり,次のGコマンドが送られて初めて動く.Chr(13)+Chr(10)はCR+LFである.接続,設定などチェックして,これでX軸が実際に移動することを確認した.
  • Macの場合はポート番号のCOM3部分のみ変更する必要がある.Linuxと同様にここにはデバイスファイルを指定する.このファイル名を知るためにはターミナルを起動して,> ls /dev/ と 打ち込む.そうするとtty....というファイルが沢山でてくる.ここにUSB-serial変換器のデバイスファイルがあるはずである.私の場合はtty.UC-232ACというのがあったので,すぐに分かった.他の変換器ではtty.usb...とかの名前になっているそうである.なのでこの部分を
    Serial1.SerialPort= System.SerialPort("/dev/tty.UC-232AC")
    と変更することでMacからでもステージが動いた!
  • 実際にはデバイスファイル名を上のように調べて,コードに書き込む必要はない.使用できるポートの数は
    n = System.SerialPortCount
    で知ることができる.そして
    System.SerialPort(i).Name    ' i=0,1,..,n-1
    でその名前を知ることができる.なのでPopupmenuにAddrowでこの一覧を入れておいて,ユーザーにメニューから適切なポートを選んでもらうのがいいだろう.MacとWindowsで同じプログラムになる。XojoのExampleの中のSerialにそのような例がある.Windowsの場合も同様であるが,こちらの場合はCOM1, COM2, ...が返ってくる.

追記

  • XYステージを円状に動かせるようにプログラムしてみた.しかしうまく円にならない.どうもコマンド受け入れ不可状態でもデータ送信しているのが問題なようだ.うまくタイミングが合わせられないので、timerを使って強制的に待ち時間を入れてみた.時間を適当に長くすると円になった。
    • パルスは整数値で与えるために、差分を整数化して動かしていく最初のプログラムでは、最後が出発点に戻っていない。バックラッシュをチェックしたが、ほとんどないので、これは差分のところの誤差が積み重なってそうなるのだろう。数値計算の誤差の典型的な問題にはまっている。対策としては、最初から整数値化しないで、移動距離を計算する最後の最後で四捨五入で整数化(round)するとほぼ元の位置に戻った。
  • universal binaryでコンパイルして,Powerbook(OSX10.4, PowerPC)でも動作することを確認.古いMacなどを制御用やデータ−ロガーとして使えそうだ.
  • アジレントのデジボルと接続しようとしてハマる.どうも手持ちのシリアルケーブルが全てストレートなためのようだ。今の場合クロスが必要.一般的な傾向としては計測器側がオスだとクロス,メスだとストレートを選択すればいいようだ.シリアル/クロス変換のアダプタを1つ用意しておいた方がよさそう.
  • クロスのアダプターとケーブルを入手しました.これで接続してMacとアジレントのデジボルが通信できていることを確認.t-monitorの34401A版を作成してみる.Mac, Windowsどちらでも動いた.

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