"OMEC controller" manual
Last modified: Sat May 03 22:08:35 2003
このプログラムの使用に伴って生じたあらゆる損害・不具合に対して私、伊藤弘毅は関知しません。
また、これはあくまで私個人が作成したものなので、シグマ光機はこのプログラムと一切の関わりを持ちません。
苦情などは私宛にお願いします。しかし、対処できるとは限りません。
0, 緒言
- このパッケージはシグマ光機の製品(群)である、オプトマイクコントローラを制御するためのLabVIEWプログラム(VI)です。
オプトマイク(OptMike)とは電動マイクロメータで、オプトマイクコントローラ(以下OMEC)とはそのオプトマイクを制御するための装置です
(これは非常に大雑把な説明です。詳しい型番や性能・機能などはカタログなどを参照して下さい)。
- GPIBを経由してこのOMECを制御するためにこれを作成しました。PCの作成環境は以下の通りです。
OS: Windows 2000 (with SP3)
LabVIEW: ver 6.1 ベースパッケージ
CPU: Celeron 1.7GHz
Mem: DDR SDRAM 256MB
私が実際に動作テストをしたのは以下の組み合わせに於いてです。
GPIB board: National Instruments PCI-GPIB(for Windows XP/2000) 778032-0112
OMEC: OMEC-2BF
1, 使い方
文字の区切り(デリミタ)は、ここではCR+LFを用いています。
起動・終了
- "OMEC.vi"を開くと起動します。左半分を"Control Panel"、右半分を"Axis Status"と名付けていますが、基本的に全ての操作は左半分で行います。
右半分は状態を表示するためのものです。ここでは"Axis"という言葉はオプトマイクということと同義です。
- LabVIEWの「実行」ボタンを押して開始します。「連続実行」を選択する必要はありません。
終了する時はLabVIEWの「実行停止」を押すか、右上の"Quit"ボタンを押します。
動かす
- まず装置(OMEC)のGPIBアドレスを指定します。左上"GPIB Adress"に適当な値を入れます。
- 次に隣の場所で動作速度を指定します。速度の初期値は最も速い31ですが、変更する必要がある時は"0-31"とあるところに0から31までの値を入力し、
"set"(青)を押します。
- 動かすオプトマイクを指定します。左中段"Axis"とある隣りに、動かすオプトマイクが接続されている箇所の番号を入力します。
- その下のスイッチで動かし方を指定します。"Motion"を選んだ場合、下で指定(スライドでも直接入力でも良い)した数値『だけ』動きます。
"Destination"を選んだ場合、下の数値『まで』動きます。現在位置は右の"Position"で確認できます。数値は0.001mm(1um)に対応していますが、
オプトマイク側が0.001mmの精度を保証しているというわけではありません。
- 右の"move"ボタン(緑)を押すと、先に決めた方法に従って移動し始めます。止めるにはその右の"stop"(薄赤)ボタンを押します。
他のボタンに比べて"stop"ボタンは戻り方が鈍いですが、あまり気にしないで下さい。
- その上の"Origin"とある周りは、原点設定のためのものです。原点には論理原点と機械原点の2種類があります。「論理原点を設定する」とは、
今いる位置を"Position 0"とすることです。「機械原点を設定する」とはオプトマイクの機械原点を探し、そこを"Position 0"と定めることです。
"Logical"は論理原点、"Mechanical"は機械原点に対応しますが、いずれかをスイッチで選択し、"set"(黄土色)ボタンを押すと原点設定が行われます。
オプトマイクを動かしすぎるとリミッタが作動してオプトマイクが停止してしまいますが、その時は機械原点設定を行う必要があります。
状態を見る
- 右半分はオプトマイクの状態を表します。ラベル横の"OMEC status"はOMECの状態を表すもので、動作中は"busy"と表示されます。
その時は"stop"ボタン以外は効きません。
- その下が各々の"Axis"の状態をモニタするパネルです。左の"Position"は現在位置を表します。先も述べたように、数値は0.001mmに対応します。
- その右"Axis status"は、オプトマイクの状態を表します。"Normal"と表示されているのが正常な状態です。リミッタが作動すると"+(-) side limit"
と表示されます。その時は機械原点設定を行う必要があります。オプトマイクが接続されていなければ"No optmike"と表示されます。
- その下"command status"は、送信されたコマンドについての情報が示されます。正常時には"Accepted"と表示されます。オプトマイクが接続されていないAxisに
命令を送ってしまった時には"Invalid axis"と表示されます。その他、何かトラブった時にはそれっぽいエラーメッセージが表示されますが、
原因はOMECが壊れているかこのプログラムのバグによるものです。その時は連絡して下さい。
- これらの状態は、左のパネルで選択した"AXIS"の情報のみ更新されていきます。例えば、"AXIS"をずっと"1"に設定していたならば、右の"AXIS2"パネルの情報は
起動時の値のまま変化しません。状態を得たい場合は、左の"AXIS"を知りたい番号のものに変え、何らかの操作を行ってください("stop"を押すのが適当でしょう)。
2, 内部の構造
実際に行っている処理を簡単に説明します。
- OMECのPCによる制御は、文字列の送信によって行われます。その内訳は大まかに5種類です。(移動、停止、状態取得要求、速度設定、原点設定)
- 直接に使用者が出せる命令は、移動("move"、緑ボタン)、停止("stop"、薄赤ボタン)、速度設定("set"、青ボタン)、
原点設定("set"、黄土色ボタン)の4種類です。以下これらをまとめて「色ボタン」と呼びます。
- 状態取得要求の命令(ステータスリクエスト)は、先の「色ボタン」による命令を行うと、続けて自動的にOMECに送るようにしました。これはまた後ほど述べます。
- ダイアグラムの一番外側に"Whileループmain"なるWhileループがありますが、これは待機して命令を待つだけのものです。"Quit"ボタンでループ(つまりVI)が終了します。
- そのひとつ内側に"ケースストラクチャmain"なるケースストラクチャがあります。「色ボタン」のいずれかが押されると、このストラクチャの
Trueのケースが実行されます。何も押されない待機状態の場合、Falseのケース(カラ)が実行されます。
これは、待機している時にはOMECに一切の命令を送らないための措置です。
- "ケースストラクチャmain"のひとつ内側には"シーケンスストラクチャmain"なるシーケンスストラクチャがあります。このVIの心臓部です。
- "シーケンスストラクチャmain"のシーケンス0の内側に、"ケースストラクチャcommand"なるケースストラクチャがあります。ここでOMECに送る文字列が選択され、
出力されます。この条件判定の端子にヘボなアイコンのsubVIが繋いでありますが、これは押された「色ボタン」の種類によって数値1から4の値を返すものです。
1が"move"、2が"set"(原点設定)、3が"set"(速度設定)、4が"stop"(停止)に対応しますが、それに応じて"ケースストラクチャcommand"の中身が実行されるわけです。
- "シーケンスストラクチャmain"のシーケンス1はただの待ち時間です。"stop"ボタンは若干反応が悪いので、そのために他のボタンの反応もここで鈍くします。
- "シーケンスストラクチャmain"のシーケンス2は、押された「色ボタン」を元に戻すためのものです。もともとボタンは制御器ですから、
何かの値によって変化させることができないわけなのですが、
ローカル変数を使えばそのような操作ができました。ですが、ちょっと気味が悪いです。他にいい方法はないもんなんでしょうか
- "シーケンスストラクチャmain"のシーケンス3は状態を取得するためのものです。中のやる気のない白いアイコンのsubVIは、OMECに状態取得要求を出し、
"wait"ミリ秒(デフォルトは250)だけ待った後、文字列を受け取ります。受け取った文字列は、直後のsubVIによって分類され、出力されます。
ここで、命令を出してから受け取るまでの待ち時間"wait"は短くすればするほど機敏な状態更新が可能になって傍目には気持ちがいいのですが、
あまり頻繁にコマンドを送りまくってもOMECがかわいそうなのでここでは250ms程度にしてあります。短くしすぎる(<50ms?)と動作が不安定になると思われます。
得た状態の出力先は、フロントパネルの右側になるのですが、フロントパネル左側で設定された"AXIS"の値によって、
出力先を振り分けます("ケースストラクチャaxis"の仕事)。ですから、"AXIS1"、"AXIS2"双方の情報が同時に更新されることはありません。
状態の情報が得たいなら、"AXIS"を設定した後適当な「色ボタン」("stop"が適当)を実行すれば最新の情報に更新されます。
そしてこの「状態取得要求~状態取得~表示」のプロセスは、OMECが"busy"状態で無くなるか、"stop"ボタンが押されるまで、
"Whileループstatus"によって繰り返されます。"stop"にはローカル変数を使用していますが、これは外側から"stop"の値を引っ張ってくると、
その値の変化の評価がWhileループ実行中には為されなかったための措置です。"stop"が押されるとループが終了し、
また"シーケンスストラクチャmain"の実行が始まるわけです。そしてそこで最終的な情報を得ます。
- LabVIEWドキュメントにはローカル変数の使用は奨めないとありましたが、いくつか使わざるを得ない箇所がありました。改善策などありましたら連絡してください。
伊藤 弘毅 (Hirotake Itoh)
hiroitoh@issp.u-tokyo.ac.jp