xdm1000 package
Subpackages
Submodules
xdm1000.config module
Kengo NAKADA: https://github.com/shimane-dev, https://github.com/kengo-nakada kengo.nakada@mat.shimane-u.ac.jp, kengo.nakada@gmail.com
- class xdm1000.config.Config(yaml_path=None)[source]
Bases:
object- BAUDRATE = 115200
- CLIENT_LOGGER_NAME = 'xdm1000_client'
- LOGGER_LEVEL = 'debug'
- PORT = '/dev/cu.usbserial-10'
- SERVER_HOST = '127.0.0.1'
- SERVER_IP = '127.0.0.1'
- SERVER_LOGGER_NAME = 'xdm1000_server'
- SERVER_PORT = 8000
- TIMEOUT = 2.0
xdm1000.server module
xdm1000.xdm1000_ctrl module
OWON XDM1000 / XDM1241 用の上位制御クラスである。 K.NAKADA, kengo.nakada@gmail.com
このファイルは利用者向けの測定器 API を提供する。SCPI 層は SCPI コマンドの 薄いラッパであり、本ファイルで mode/range/continuous 条件を上位 API として整理する。
- exception xdm1000.xdm1000_ctrl.DeviceBusyError[source]
Bases:
RuntimeError測定器が長時間測定中のため、競合する要求を拒否したことを表す。
- exception xdm1000.xdm1000_ctrl.DeviceWorkerError[source]
Bases:
RuntimeError測定ワーカープロセス側で例外が発生したことを表す。
- class xdm1000.xdm1000_ctrl.Xdm1000Ctrl(port=None, timeout=2.0, baudrate=115200, logger=None, log_level=None, config=None, use_process=True)[source]
Bases:
objectXDM1000 / XDM1241 を測定器として扱う上位制御クラスである。
SCPI の薄いラッパではなく、測定モード、レンジ、積分速度、 連続測定条件を保持する利用者向け API を提供する。use_process=True では worker プロセスを介して測定器へアクセスし、use_process=False では同一プロセス内で SCPI クラスを直接使う。
- close()[source]
接続または worker を閉じる。
worker プロセス利用時は shutdown RPC を試み、応答しない場合は terminate する。direct モードでは測定器を local に戻してから シリアル接続を閉じる。
- get_result(clear=False)[source]
直近の単発測定または連続測定結果を返す。
- Parameters:
clear – True の場合は、取得後に result store を None に戻す。
- Returns:
直近の測定結果 dict である。結果がまだない場合は None を返す。
- idn()[source]
*IDN? を返す。
- Returns:
測定器が返す識別文字列である。
- Raises:
DeviceBusyError – 連続測定中に呼ばれた場合に送出する。
- meas_continue(wait=None)[source]
現在設定で連続測定する。
set_continue_duration() または set_continue_count() で設定された終了条件に 到達するまで、現在の測定モードで繰り返し測定する。direct モードでは 同期的に測定ループを実行し、測定中の途中結果も result store に反映する。
- Parameters:
wait – 測定開始前に待つ秒数である。None の場合は待たない。
- Returns:
連続測定ジョブ ID を含む dict、または worker 側 result である。
- Raises:
ValueError – 連続測定の終了条件が未設定の場合に送出する。
DeviceBusyError – 既に測定中の場合に送出する。
- set_auto_range(enabled)[source]
オートレンジを設定する。
- Parameters:
enabled – True の場合はオートレンジを有効にし、False の場合は 現在保持している手動レンジへ戻す。
- Returns:
オートレンジ状態を含む dict、または worker 側 result である。
- Raises:
ValueError – 手動レンジ未設定の状態で False が指定された場合に送出する。
DeviceBusyError – 連続測定中に呼ばれた場合に送出する。
- set_mode(mode)[source]
測定モードを設定する。
- Parameters:
mode – ctrl API 上の測定モード名である。
- Returns:
設定した測定モードを含む dict、または worker 側 result である。
- Raises:
ValueError – 未対応の測定モードが指定された場合に送出する。
DeviceBusyError – 連続測定中に呼ばれた場合に送出する。
- set_range(value=None, index=None, range_value=None)[source]
現在の測定モードに対する手動レンジを設定する。
value は物理量指定である。数値は現在の測定モードの基本単位として 扱う。電圧系では V、電流系では A、抵抗系では Ohm、静電容量では F である。単位付き文字列は “500 mV” と “500mV” の両方を 受け付ける。
index は SCPI RANGE 離散番号を直接指定する。value、index、 range_value は同時に指定できない。range_value は旧 API 互換の 物理量指定であり、value と同じ意味で扱う。
xdm1000.xdm1000_scpi module
OWON XDM1241 / XDM1000 系デジタルマルチメータ用 SCPI ラッパである。 K.NAKADA, kengo.nakada@gmail.com
このファイルは pyserial 経由で USB-Serial 接続された XDM1241 に SCPI を送る。 XDM1041 / XDM2041 用として公開されている XDM1000 Series Programming Manual に 記載された SCPI コマンドを一通り薄く包む。
設計方針
低レベル SCPI の送受信だけを担当する。
config がないときはコンストラクタ引数を使う。
config とコンストラクタ引数が両方あるときは config を優先する。
logger 実体が無いときだけ x_logger / logging を使う。
pyserial.Serial() の引数は型を明示して、型エラーが出にくいようにする。
Python 3.6 で動く書き方を使う。
- class xdm1000.xdm1000_scpi.AverageStats(minimum, maximum, average, count)[source]
Bases:
objectCALCulate:AVERage:ALL? の結果を保持するクラスである。
測定器から取得した統計情報(最小値、最大値、平均値、サンプル数)を 構造化してカプセル化する。
- class xdm1000.xdm1000_scpi.Xdm1000Scpi(port=None, timeout=1.0, baudrate=115200, logger=None, log_level=None, config=None)[source]
Bases:
objectOWON XDM1241 に SCPI コマンドを送る低レベル制御クラスである。
pyserial を内包し、テキストベースの SCPI コマンドの送信、および クエリに対する応答文字列の受信と基本的な型変換(キャスト)を担当する。
- configure_capacitance(range_value='AUTO')[source]
静電容量測定 (CAP) のファンクションおよびレンジを設定する。
- Parameters:
range_value (str/float) – レンジ指定値
- configure_current_ac(range_value='AUTO')[source]
交流電流測定 (ACI) のファンクションおよびレンジを設定する。
- Parameters:
range_value (str/float) – レンジ指定値
- configure_current_dc(range_value='AUTO')[source]
直流電流測定 (DCI) のファンクションおよびレンジを設定する。
- Parameters:
range_value (str/float) – レンジ指定値
- configure_fresistance(range_value='AUTO')[source]
4線式抵抗測定 (FRES) のファンクションおよびレンジを設定する。
- Parameters:
range_value (str/float) – レンジ指定値
- configure_resistance(range_value='AUTO')[source]
2線式抵抗測定 (RES) のファンクションおよびレンジを設定する。
- Parameters:
range_value (str/float) – レンジ指定値
- configure_voltage_ac(range_value='AUTO')[source]
交流電圧測定 (ACV) のファンクションおよびレンジを設定する。
- Parameters:
range_value (str/float) – レンジ指定値
- configure_voltage_dc(range_value='AUTO')[source]
直流電圧測定 (DCV) のファンクションおよびレンジを設定する。
- Parameters:
range_value (str/float) – レンジ指定値 (例: ‘AUTO’, 5, 50)
- get_average_all()[source]
CALCulate:AVERage:ALL? を取得する。
統計機能によって蓄積された全データの要約を問い合わせる。
- Returns:
最小、最大、平均、数を格納したオブジェクト
- Return type:
- Raises:
ValueError – カンマ区切りの応答要素数が4個でなかった場合
- get_function(display=1)[source]
SENSe:FUNCtion? により現在の測定機能を取得する。
- Parameters:
display (int) – 表示番号。1 は主表示、2 は副表示。
- Returns:
測定器が返す測定機能文字列
- Return type:
str
- meas()[source]
MEAS? の応答を数値化して返す。
カンマ区切りで戻ってくる主表示および副表示の測定値文字列を分解し、 要素数に応じて単一の float または 2 要素のタプルとして返却する。
- Returns:
1要素の場合は単一の float、2要素の場合は (主表示, 副表示) の float タプル
- Return type:
float or tuple
- Raises:
ValueError – 要素数が 1 または 2 のいずれでもない予期せぬ応答パターンだった場合
- query(command)[source]
SCPI クエリを送信し、1 行の応答文字列を返す。
古い受信残余データとの混同を防ぐため、コマンド発行前に受信バッファをクリアする。 コマンド送信後、改行コードに到達するかタイムアウトするまで応答を読み出す。
- Parameters:
command (str) – 疑問符 (?) で終わる SCPI クエリ文字列
- Returns:
測定器から返ってきた、左右の空白や改行を取り除いた応答文字列
- Return type:
str
- Raises:
TimeoutError – 測定器からのレスポンスが空(タイムアウト)だった場合
- query_float(command)[source]
SCPI クエリ応答を float として返す。
- Parameters:
command (str) – SCPI クエリ文字列
- Returns:
浮動小数点数に変換された応答値
- Return type:
float
- query_int(command)[source]
SCPI クエリ応答を int として返す。
実数表記(例: “1.0”)で返ってきた場合でも安全に変換できるよう、 一度 float を経由してから整数へキャストする。
- Parameters:
command (str) – SCPI クエリ文字列
- Returns:
整数に変換された応答値
- Return type:
int
- set_auto_range(enabled=True)[source]
AUTO によりオートレンジを有効化する。
XDM1000 の Programming Manual では AUTO は有効化コマンドであり、 OFF パラメータ付きの汎用 AUTO OFF は定義されていない。False を指定した場合、 明示的なレンジは set_range() で設定する。
- Parameters:
enabled (bool) – True の場合のみ AUTO を送る。
- Raises:
ValueError – False が指定された場合。
- set_beeper(enabled)[source]
ブザーの ON/OFF を設定する。
- Parameters:
enabled (bool) – True でブザー有効 (ON)、False で無効 (OFF)
- set_function(function, display=1)[source]
SENSe:FUNCtion により測定機能を選択する。
- Parameters:
function (str) – SCPI の測定機能名。例: ‘VOLT’, ‘VOLT AC’, ‘CURR’, ‘RES’
display (int) – 表示番号。1 は主表示、2 は副表示。デフォルトは 1。
- set_range(range_value)[source]
RANGE により現在の測定機能のレンジを設定する。
- Parameters:
range_value (str/int/float) – RANGE に渡す値。例: 1, 2, ‘DEF’
xdm1000.xdm1000_worker module
XDM1000 デジタルマルチメータ用ワーカープロセス実装である。 K.NAKADA, kengo.nakada@gmail.com
本ファイルは、プロセス分離構成においてシリアルポートと SCPI 実体を保持する 子プロセス側ワーカーを定義する。ctrl 層は利用者向け API とプロセス間通信を 担当し、本ワーカーは command queue から受け取った要求を実機 SCPI 操作へ変換する。
SCPI 層は SCPI コマンドの薄いラッパであり、測定モード、レンジ、測定速度、 連続測定条件などの上位状態は本ワーカー側でキャッシュする。これにより、 親プロセスは直接シリアルポートを保持せずに測定状態と最新結果を参照できる。