2023年11月5日日曜日

Thorlabs/Motion_Control on Python

毎度! 今日もPythonネタで、 どーもすいません。

ThorLABSのmotion Controlをpythonで動かしている。
Analyzer用で 回転モーターを用いて直交を探索するのに使用している。
左からコントローラー電源、TDC001モーターコントローラー(USB接続)、PRM1-Z7(回転モーター)

ThorLABS APT
 今までは、ThorLABS APTというソフトのwrapperでPythonで使用できるライブラリを使用してきた。こちらがそれ。

 モーターコントローラー/ドライバーは TDC001/PRM1-Z7の組み合わせ。discontinuedの商品。また、ThorLABS APTが使用しているActive XはMicrosoftは維持しない。もしかして将来はない?カモ。しかし、インストールは簡単で、ソーラボのAPTをインストールした後は、README.mdに従い、以下の操作をする。

 Copy APT.dll from the "APT installation path\APT Server" directory to one of the following locations:

        Windows\System32
        into the "thorlabs_apt" folder
        your python application directory

動作コマンドは、Exampleに従えば良い。
Example以外のコマンドは以下から探した。
なお、”move_to”,”move_by”,”move_home”,”position”のコマンドは使えると分かったが、move_to(角度の絶対値移動)は180degを超える所でCW,CCWを判断しないで常にCW方向に移動するので、絶対値移動は相対値移動に書き直して使用した。


ThorLABS Kinesis
ThorLABS の新しいソフトにKinesisがある。こちらは.NET対応。また、古い機種にも対応していると書いてはある。しかし、TDC001/PRM1-Z7の組み合わせでは回転モードにならないので、python版も使っていなかった。


本当にKinesis/TDC001/PRM1-Z7 の組み合わせでは並進モードしか作動しなくて回転モードでは動作しないのか? 興味本位だが ThorLABSの書いたKinesis python版を動かしてみたくなった。そこで、以下のページを参照して動作させてみる。
  https://github.com/Thorlabs/Motion_Control_Examples

このページのReadme.mdに
Python examples make use of the pythonNET and cTypes modules. 
と書いてある。.NETを使ってみたいと思い、pythonNETをインストールして.NETのCLI(コマンド・ライン・インタフェース)を使用できるようにしてみた。

■環境整備
まず、
64bit版Kinesisをインストール

②Requirementsの項
 Additionally, it is currently necessary to communicate with devices using serial commands via the FTDI chip present in all MotionControl devices. と書いてあるので、FTDIのdriverとやらもインストール

③Python Requirementsの項
 最後にpythonNETをインストール

これで、動作環境は整った。

■実行
GithubのExampleからPythonのKcube/KDC101 のPythonnet.pyをCopyした。

①ライブラリ
 自分の環境に合わせて、CLIのライブラリはKCubeからTCubeに変更
"C:\\Program Files\\Thorlabs\\Kinesis\\ThorLabs.MotionControl.KCube.DCServoCLI.dll
"C:\\Program Files\\Thorlabs\\Kinesis\\ThorLabs.MotionControl.TCube.DCServoCLI.dll"

②Motorシリアル番号,DeviceName
 serial_noを変更。
 DeviceSettingsName = "PRM1-Z7"に変更

それらしく、これをライブラリー化して出来上がり。


■現状の課題
①CLI(コマンド・ライン・インタフェース)Method?/Function?
 CLIのサンプルは例にある通りだが、それ以上のMethod?/Function?がわからない。最低以下の3つでどうにかなるが、相対移動が知りたい。Helpを見ながら試したところ、MoveRelativeでerrorは出なくなったが動作もしない。
DeviceのDisconnectがあるのは嬉しい。終了時にDeviceを切り離さないと、次回接続時に問題が生じることがある。接続状態のままプログラム終了すると新しいプログラムを立ちあげた時にアクセスできないことがしばしばある。
  MoveTo(角度の絶対値移動)
  Home(零度の位置に移動)
  Position(現在の角度は何度かを教えてくれる)

②Decimal入出力
 何となくしっくりこない。LabVIEWでプログラムを作った時にはbit表示を角度に直す時、最小分解能=3/2048(deg)をfloatで表示していたが、本ライブラリでは小数点以下3桁に限定されている。いい様な、悪い様な。
 面倒だがBitの値を推定して割掛けして角度に直している。無駄かな?最小分解能程度の表示がされているのでOKといえばOKなのだが。