投稿

11月, 2023の投稿を表示しています

PiMagの自動・外部制御にむけて(1)

イメージ
PiMag(ポータブル40テスラ装置)にはraspberry piが搭載されていて、そこにに置いた自作pythonプログラムで制御しています。そこでtkinterというpython標準のGUIを使用しています。そのGUI特有の機能を使っています。 問題は外部でリモートコントロールしたり、自動計測することを考えたときに、GUIベースなのは微妙と言うことです。今のソフトはtkinterの機能を駆使しているので、フレキシブルじゃないです。そこで 「テキスト設定ファイル」に値を読み書きすることを基本とする、というプログラムにしようと思います。ボタンを押しても、まずはテキストファイルの値を書き換え、それを別のプログラムが参照して次の動きを作る、ということです。 そうすれば、GUIのボタンを押さなくても、外部からテキストファイルを書き換えることで、ボタンを押すようなことができそうです。 そのテキストファイルは複数のプログラムが参照する可能性があるので、ファイルを安全に読み書きできる必要があります。 ファイル名readerwriter.pyとして下記を作ります。 from filelock import FileLock def safe_write(filename, content): lock_file = filename + ".lock" with FileLock(lock_file): with open(filename, 'w') as f: f.write(content) def safe_read(filename): lock_file = filename + ".lock" with FileLock(lock_file): with open(filename, 'r') as f: return f.read() 実行結果は下記です。 これを応用して、望みのプログラムを作ろうと思います。

フォルダ内のファイルリストの取得

import glob flist = sorted(glob.glob(loc + '.dat/*.csv'))

Python: Load data function for general files

ほとんどどんなオシロスコープのデータでも読み込めるfunction import numpy as np import matplotlib.pyplot as plt import itertools def load_scope_data(flist, j): # This loads data from oscilloscope # It takes file name and returns data list # NaN data is ... fname1 = flist[j] for i, k, m in itertools.product(range(100) , [None, '\t', ','] , ['utf-8', 'shift-jis']): try: dat = np.loadtxt(fname1 , encoding = m , skiprows = i , delimiter= k).T except ValueError: # print(f'fail') # print(i, k, m) pass else: print(f'load successful: {fname1}') print(f'skiprows = {i}, encoding = {m}, delimiter = {k}') print(dat.shape) break num = len(dat) fig, ax ...