2023年11月5日日曜日

Thorlabs/Motion_Control on Python

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

ThorLABSのmotion Controlをpythonで動かしている。
Analyzer側に回転モーターを取付け、Polarizerとの直交条件を探索している。
左からコントローラー電源、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方向に移動するので、絶対値移動は相対値移動(move_by)に書き直して使用した。


■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. 
と書いてある。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なのだが。

■使用した感想
Python版の「Kinesis」「 APT」は使用した感じから、以下のような差があった。

「ThorLABS Kinesis」を使用したバージョンは単体で動作するようだ。単体というのは、「windowsにインストールしたプログラムをsettingしなくても、アクチュエータの種類を書き込むので何をドライブしているか理解して動作させている。」という意味で使っている。

            self.KDC101 = KCubeDCServo.CreateKCubeDCServo(serial_no)
            m_config = self.KDC101.LoadMotorConfiguration(serial_no,.....
            m_config.DeviceSettingsName = "PRM1-Z7" 


「ThorLABS APT」を使用したバージョンは、あらかじめwindows側でプログラムが動作できるようにして置く必要がある。TDC001/PRM1-Z7で動作する様に条件設定が必要である。Python版のソフトウエアではアクチュエータが何であるかの指定がない。ドライバーのSerial Numberは入力するが、アクチュエータの種類の入力はない。インスタンスはSN由来のコレ一発。
            self.apt_TDC001 = apt.Motor(SN) 

てことは、ドライバーを識別するが、細かな条件はインストールしたプログラムが動作する条件が前提で、そこから情報を引っ張て来ているのでPython版上ではアクチュエータが何でも気にしていない。と理解した。なので、ActiveXが利用できなくなるとこれも使用できないと思われる。

2023年10月26日木曜日

2023年4月18日火曜日

Python 少しの進歩


Pythonを始めて少しだけ書けるようになった。
嬉しくなって、出来のよさそうなのをGitHubに上げてみた。

第1号は、顕微鏡のソフトでスケールを表示できるようにしたもの。
自分ではなかなかの出来栄えと思う。

と、言っても Google先生に教えてもらっただけなんで、オリジナルの部分は? あるかなどうかな 怪しい。
Google先生は ChatGPTより正しい答えを教えてくれる。
お金を払っていないversionだから?  ChatGPTは間違いも平気ですからね。”I apologize for it . “が常套句なんで。

リンクはこちらです。

誰か、感想をくれないかな~!




2022年9月27日火曜日

OptiPlex7060 MFF を整備する CPU速度0.79GHzで固定の呪縛から解放せよ!

PCの話題が続く。
Optiplex 7060 MFF


 今回は、格安でHDDなしのPCを購入して別途準備したSSDを装着してWindows10/11をインストールしてみた。
 これでTVでDAZNサッカーを見る予定。現在使用中のAppleTVは使いやすいが中継の途中でしばしば止まるので代替機を探していた。

 お下がりSSD(LENOVO IdeaPadから摘出したmSATAを2.5inchケースに収納)にWindows10がインストールできた。選択の余地もなくWindows10PRO。
仕組みを知らなかったが、多分BIOS?に情報が記録されているのか?
以下のHPには、「マザーボードにキーが紐付けされている」と記載がある。



■購入したPC
 購入したPCは DELL OptiPlex7060MFF Corei-8500T 8GB Wireless Card付 
HDDなし NVMeストレージなし ACアダプタなし 外部アンテナなし。
 電源スイッチ周辺は傷があったがその他は奇麗なもの。家庭で使用するにはWirelessカードがついていないと、Bluetoothと無線LANが使えないので不便になる。なので カード付きの個体を購入した。(USBのbluetooth/wifiのアダプタを購入する方法もあるが外付けよりスマートなんで。インテル9560NGW,AX210NGW等が搭載されたWifiカードを買う方法もあるが新品は高め) 12千円程度で入手。NVMeカードが装着できるスロットもあるので、のちに購入予定。

memoryにはマーライオンの様な模様 余裕があるなぁ。


■現在の問題点と思うこと
①CPUの速度が0.79GHzで固定されて、全く上がらない。WebページではBIOSのFactory設定に戻すと解消するとあった。が、最新版のBIOSをインストールしても、Factory設定 BIOSのDefault設定しても変わらない。BIOSのComfigulationを見ると最大が0.8MHzとある。SpeedStep Enable/Disableをクリックしても変わらない。これが一番の問題。
 90Wアダプタにすると良い様な記述も見られた。(BIOS起動時に表示されるPower不足のCautionを無視してF3キーを押してしまうと、低速に固定されるという記述。英語だったので、斜め読みした程度。どうもOptiplex 3060/5060/7060以前の個体特有の問題か?Webを見ると上記以前の個体でみんな質問している。DELLのHPではまともな回答ができていないように見えた。DELLのBIOS or M/Bが怪しいと思い始めた。大学にあるOptiplex3070 は同じAlertが出たが、速度は正常に2.2GHzの基本速度になる。3070以降(Core-i5第9世代)は発生していないかもしれない。検索しても3070以降の個体はヒットしない。)

Optiplex stuck 0.79GHz で検索
  典型例はこちら2件↓



②Bluetoothのキーボードとマウスが インストール時点(BIOS)では機能しない。(USBとBluetoothは位置づけが違うBTはBIOSでサポートされていないようだ。) OSインストール後は機能する BIOSの設定を変えたくてF2キーを押しても反応しない。 これは2番目の問題(面倒)

③DAZN視聴後や、長時間放置後に、マウスやキーボードは動作するが、クリックできない。動作中も時々ある(現在IntelのVideoDriverをインストールしてみたが同じ症状。)スリープから回復しない? → LogiCool Optionsが悪さをしているというのをWebページで見つけて、アプリを削除した。現在も時々発生。

④DP→HDMI変換コネクタが機能しない。良くわからないうちに慌ててしまって2つ購入する羽目に。結果的にこれは勘違いだった。

■CrystalDiskで速度を計測
 mSATAのSSDなんで、SATAIII (6Gbps)から600MB/s程度が最大。
SAMSUNG128
M.NVMe 512@20230528

■CPU 0.79GHz 速度固定問題解決!
 2.1GHzのCPUなのに速度が上がらない問題は、65W→90Wアダプタに変更して解決した。めでたし。
 Core-i5の比較的高いCPUなのに遅いので、これが元で、DELLのOPTIPLEXのマイクロを手放している人が多いし、ジャンクとしてよく売られているし、中古の値段も他社の同世代Mini-ITXボードの躯体より安い気がする。
 以下に4ケースのアダプタとOptiplexの組み合わせの結果を示す。
  ①7060/新規90Wアダプタ          〇
  ②7060/購入した65Wアダプタ        ×
  ③7060/65Wアダプタ@3070正常動作確認品 ×
  ④3070/65Wアダプタ@3070正常動作確認品 〇

 

新規購入の90Wアダプタ
CPU速度の0.79GHzの呪縛から解放された
基本速度 2.11GHzに注目

試しに、自宅の65Wアダプターに戻した。
基本速度 0.79GHzになる
65Wに戻したとき、BIOS画面で65WはUnderpowerなので、
90W以上に変更する様にアラートがでる。
F3キーを押すと無視して起動画面に移行できる。
アダプターが古いという情報もあるが真偽は定かでない。


3070で正常動作している65Wアダプタを7060につけてみた。
やっぱり0.79GHz 
ただし、BIOSのアラートは出なかった。

3070/65Wアダプタの組み合わせは正常
i5-9500Tで2.21GHz

 散々書いた後で気がついた! 7060は90W仕様だった。失礼しました。3070と同じケースに入っているが、何故か電力要求が違う!
よく見ると90W仕様だった。
失礼

2022年8月5日金曜日

Old PC にNVMe/PCIe を Installする

 
Dell Optiplex 3020 SFF

仕事で使用している計測用のPC(Dell Optiplex 3020 SFF) がHDD仕様で、HDDアクセスが頻繁に発生して、起動には10分程度かかる。  あり得ないこと。
 日本語inputしようとするだけで、10秒程度のタイムラグが発生する。 これもありえない。
 CPUはi5-4570?で500GBのHDDが遅いと言っても絶対に変だ。


 比較として、子供のお下がりで現在自分で使用しているLenovoのidea-Pad Yoga13 2191 は2012年頃の製品でi5-3317Uなのに、オンボードのmSATA SSDが載っているので、非常に快適だ。


 で、使い始めて直ぐにイヤになったので、SSDを入れたくなった。
 Dell Optiplex 3020 SFFという小型のPCには2.5インチのSATA SSDを追加収納するスペースがない。代わりにPCIe×16,PCIe×1のスロットが1つずつあるので、そこに刺すNVMeとアダプタを購入してSSD化を考えた。


■Optiplex 3020 SFFのNVMe/PCIe上ブート
 後で知ったのだが、古いPCでは、BIOSからNVMe/PCIe上に書き込まれたWindows10のBootイメージを認識できなくて、USB上に置いたCloverEFIのBootイメージを立ち上げてから、NVMe/PCIe上のWindows10のBootイメージを読み込むようだ。ここにある図がその関係を良く表していると思う。


■参考にしたHP
(NVMeブート非対応な古いMotherBoardで)
  NVMeからブートすることはできるのか?


自分の環境と全く一緒なので、心強く思った。
大いに参考にさせて頂いた。


また、以下のページも同様に参考にさせて頂いた。

古いNVME非対応PCにNVME無理やり搭載高速化
  https://ameblo.jp/okadatk/entry-12459241851.html
クローンしたHDD/SSDが起動しない時に、成功した対処法


■SSD
 Transcend、SanDisk、Western Digital、Crucialの大手ブランドでは専用の無料のOSクローンソフトがあるので、購入する時考慮した。
無くても、Macrium Reflect8というのがある。
今回、Macrium Reflect8の方がサクサク動いたのでこちらを使用した。
今回はCrucial のm.2 NVMe Type 2280を購入
            Crucial P1シリーズ 500GB
            インターフェース: NVMe/PCIe Gen3 x4
            フォームファクタ: M.2 Type 2280
            速度:読込速度最大1,900 MB/s、書込速度最大950 MB/s


■PCIeアダプタ
 PCIe×16が早いだろうという理由で選択。念のためHeatSink付のものにした。


■その他
 起動用のUSBメモリ(4GB)....Clover EFI Boot Imageを保存するため


■作業
①HardWare購入とInstall
②SSDのformatはgptにする
③HDDのClone作成(Macrium Reflect8使用)
④USBメモリにClover EFIのISOイメージをインストール(Rufus使用)
⑤BIOSの起動設定をUSBメモリ/UEFIに変更し起動
⑥その他、HDD相当がないとbiosでエラーに引っかかって起動しないので古いHDDはそのまま付けて置いた。USBの内容はHDDにしても良い。別の個体ではHDDにCloverBootをインストールした。

以上の作業がすんなり行けばNVMe/PCIe 環境に移行できる。


■問題発生
私は、その間に以下の問題が発生して、③~⑤は何度やり直したことか?
 クローンが出来ない問題。(元のHDDのエラーのため)
 Clover FEIで起動ができない問題(BIOSを何度も設定)
 起動Diskが認識できない問題(bcdeditを使用して問題回避)

 特に、③のクローン作業が進まなかった。巡回冗長検査(CRC)エラー というのが起きてクローン作業が停止し、全くクローンが出来なかった。今考えると、HDDアクセス常時100%近かったのは、HDDにエラーがあったからと思う。
 色々な点で確信がなかったので、別のマシンからCloneを作成して、現在の機器構成で起動できることを確かめてから、Widows10の新規インストールに切り替えた。
 その他、bcdeditを使用して、起動ディスクのパーティション情報の書換えを何度も試みた。


■結果
 どうにかこうにか1週間ほどかけて移行した。作業時間を考えると、新品のPCを買った方が良かったとも言える。
 結果は、上が更新後のNVMe/PCIe のもの。
 自己満足に過ぎないが、スペック上、SEQ/Read/Writeが500MB/s越えなのでSSD/SATAより早い。SSD/SATAに比較して特筆する点はそこになる。実際の起動や体感速度はSSD/SATAと同程度なので、SEQ/Read/Writeの数値で満足するしかない。(笑)

OPTIPLEX3020 NVMe/PCIeに更新後
OPTIPLEX3020 HDD
参考 SSD/mSATA (IDEA PAD)