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)[ソース]

ベースクラス: 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
classmethod load_yaml(yaml_path)[ソース]

クラスとして使う

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[ソース]

ベースクラス: RuntimeError

測定器が長時間測定中のため、競合する要求を拒否したことを表す。

exception xdm1000.xdm1000_ctrl.DeviceWorkerError[ソース]

ベースクラス: RuntimeError

測定ワーカープロセス側で例外が発生したことを表す。

class xdm1000.xdm1000_ctrl.Xdm1000Ctrl(port=None, timeout=2.0, baudrate=115200, logger=None, log_level=None, config=None, use_process=True)[ソース]

ベースクラス: object

XDM1000 / XDM1241 を測定器として扱う上位制御クラスである。

SCPI の薄いラッパではなく、測定モード、レンジ、積分速度、 連続測定条件を保持する利用者向け API を提供する。use_process=True では worker プロセスを介して測定器へアクセスし、use_process=False では同一プロセス内で SCPI クラスを直接使う。

close()[ソース]

接続または worker を閉じる。

worker プロセス利用時は shutdown RPC を試み、応答しない場合は terminate する。direct モードでは測定器を local に戻してから シリアル接続を閉じる。

disconnect()[ソース]

close の別名である。

get_result(clear=False)[ソース]

直近の単発測定または連続測定結果を返す。

パラメータ:

clear -- True の場合は、取得後に result store を None に戻す。

戻り値:

直近の測定結果 dict である。結果がまだない場合は None を返す。

get_state()[ソース]

現在の状態を返す。

戻り値:

測定モード、レンジ、連続測定状態、worker 生存状態などを含む 状態 dict である。

idn()[ソース]

*IDN? を返す。

戻り値:

測定器が返す識別文字列である。

例外:

DeviceBusyError -- 連続測定中に呼ばれた場合に送出する。

is_running()[ソース]

長時間測定中なら True を返す。

meas(wait=None)[ソース]

現在設定で 1 回測定する。

meas_continue(wait=None)[ソース]

現在設定で連続測定する。

set_continue_duration() または set_continue_count() で設定された終了条件に 到達するまで、現在の測定モードで繰り返し測定する。direct モードでは 同期的に測定ループを実行し、測定中の途中結果も result store に反映する。

パラメータ:

wait -- 測定開始前に待つ秒数である。None の場合は待たない。

戻り値:

連続測定ジョブ ID を含む dict、または worker 側 result である。

例外:
  • ValueError -- 連続測定の終了条件が未設定の場合に送出する。

  • DeviceBusyError -- 既に測定中の場合に送出する。

set_auto_range(enabled)[ソース]

オートレンジを設定する。

パラメータ:

enabled -- True の場合はオートレンジを有効にし、False の場合は 現在保持している手動レンジへ戻す。

戻り値:

オートレンジ状態を含む dict、または worker 側 result である。

例外:
  • ValueError -- 手動レンジ未設定の状態で False が指定された場合に送出する。

  • DeviceBusyError -- 連続測定中に呼ばれた場合に送出する。

set_continue_count(count)[ソース]

連続測定の最大測定回数を設定する。None で無効化する。

set_continue_duration(duration)[ソース]

連続測定の最大測定時間を設定する。None で無効化する。

set_continue_interval(interval)[ソース]

連続測定の測定間隔を設定する。

set_integration_speed(speed)[ソース]

内部測定速度を設定する。speed は F/M/S である。

set_mode(mode)[ソース]

測定モードを設定する。

パラメータ:

mode -- ctrl API 上の測定モード名である。

戻り値:

設定した測定モードを含む dict、または worker 側 result である。

例外:
  • ValueError -- 未対応の測定モードが指定された場合に送出する。

  • DeviceBusyError -- 連続測定中に呼ばれた場合に送出する。

set_range(value=None, index=None, range_value=None)[ソース]

現在の測定モードに対する手動レンジを設定する。

value は物理量指定である。数値は現在の測定モードの基本単位として 扱う。電圧系では V、電流系では A、抵抗系では Ohm、静電容量では F である。単位付き文字列は "500 mV" と "500mV" の両方を 受け付ける。

index は SCPI RANGE 離散番号を直接指定する。value、index、 range_value は同時に指定できない。range_value は旧 API 互換の 物理量指定であり、value と同じ意味で扱う。

stop()[ソース]

現在実行中の測定に停止要求を出す。

この API は即時 kill ではない。連続測定ループが次に停止要求を 確認した時点で終了する。停止対象がない場合は何もしない。

wait_until_done(poll_interval=0.2)[ソース]

running が終わるまで待つ。

パラメータ:

poll_interval -- get_state() を呼び直す間隔である。

戻り値:

running が False になった時点の状態 dict である。

xdm1000.xdm1000_ctrl.main(config_path='xdm1000_example.yml')[ソース]

ctrl クラス単独の動作確認用サンプルである。

パラメータ:

config_path -- 動作確認に使う設定ファイルパスである。

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)[ソース]

ベースクラス: object

CALCulate:AVERage:ALL? の結果を保持するクラスである。

測定器から取得した統計情報(最小値、最大値、平均値、サンプル数)を 構造化してカプセル化する。

class xdm1000.xdm1000_scpi.Xdm1000Scpi(port=None, timeout=1.0, baudrate=115200, logger=None, log_level=None, config=None)[ソース]

ベースクラス: object

OWON XDM1241 に SCPI コマンドを送る低レベル制御クラスである。

pyserial を内包し、テキストベースの SCPI コマンドの送信、および クエリに対する応答文字列の受信と基本的な型変換(キャスト)を担当する。

close()[ソース]

シリアルポートを閉じる。

ポートが開いている場合のみ閉じ、リソースのリークを防止する。

configure_capacitance(range_value='AUTO')[ソース]

静電容量測定 (CAP) のファンクションおよびレンジを設定する。

パラメータ:

range_value (str/float) -- レンジ指定値

configure_continuity()[ソース]

導通テスト のファンクションを設定する。

configure_current_ac(range_value='AUTO')[ソース]

交流電流測定 (ACI) のファンクションおよびレンジを設定する。

パラメータ:

range_value (str/float) -- レンジ指定値

configure_current_dc(range_value='AUTO')[ソース]

直流電流測定 (DCI) のファンクションおよびレンジを設定する。

パラメータ:

range_value (str/float) -- レンジ指定値

configure_diode()[ソース]

ダイオードテスト のファンクションを設定する。

configure_frequency()[ソース]

周波数測定 (FREQ) のファンクションを設定する。

configure_fresistance(range_value='AUTO')[ソース]

4線式抵抗測定 (FRES) のファンクションおよびレンジを設定する。

パラメータ:

range_value (str/float) -- レンジ指定値

configure_period()[ソース]

周期測定 (PER) のファンクションを設定する。

configure_resistance(range_value='AUTO')[ソース]

2線式抵抗測定 (RES) のファンクションおよびレンジを設定する。

パラメータ:

range_value (str/float) -- レンジ指定値

configure_temperature_rtd()[ソース]

RTD 温度測定 (TEMP) のファンクションを設定する。

configure_voltage_ac(range_value='AUTO')[ソース]

交流電圧測定 (ACV) のファンクションおよびレンジを設定する。

パラメータ:

range_value (str/float) -- レンジ指定値

configure_voltage_dc(range_value='AUTO')[ソース]

直流電圧測定 (DCV) のファンクションおよびレンジを設定する。

パラメータ:

range_value (str/float) -- レンジ指定値 (例: 'AUTO', 5, 50)

disconnect()[ソース]

サーバー停止時に呼ばれる解放用エイリアスである。

close() と同様の処理を行う。

get_auto_range()[ソース]

AUTO? によりオートレンジ状態を取得する。

戻り値:

オートレンジ有効なら True。

戻り値の型:

bool

get_average_all()[ソース]

CALCulate:AVERage:ALL? を取得する。

統計機能によって蓄積された全データの要約を問い合わせる。

戻り値:

最小、最大、平均、数を格納したオブジェクト

戻り値の型:

AverageStats

例外:

ValueError -- カンマ区切りの応答要素数が4個でなかった場合

get_beeper()[ソース]

ブザー状態を取得する。True が ON、False が OFF である。

戻り値:

ブザー設定の状態

戻り値の型:

bool

get_function(display=1)[ソース]

SENSe:FUNCtion? により現在の測定機能を取得する。

パラメータ:

display (int) -- 表示番号。1 は主表示、2 は副表示。

戻り値:

測定器が返す測定機能文字列

戻り値の型:

str

get_rate()[ソース]

測定速度を取得する。

戻り値:

現在の測定速度文字 ('F', 'M', または 'S')

戻り値の型:

str

idn()[ソース]

*IDN? により機器識別文字列を取得する。

戻り値:

機器の製造元、モデル名、シリアル、バージョン情報を含む文字列

戻り値の型:

str

local()[ソース]

SYSTem:LOCal により SCPI mode を終了し、ローカル操作へ戻す。

これにより、フロントパネルの物理ボタン操作が再び有効化される。

meas()[ソース]

MEAS? の応答を数値化して返す。

カンマ区切りで戻ってくる主表示および副表示の測定値文字列を分解し、 要素数に応じて単一の float または 2 要素のタプルとして返却する。

戻り値:

1要素の場合は単一の float、2要素の場合は (主表示, 副表示) の float タプル

戻り値の型:

float or tuple

例外:

ValueError -- 要素数が 1 または 2 のいずれでもない予期せぬ応答パターンだった場合

meas_main()[ソース]

MEAS1? により主表示の測定値を取得する。

戻り値:

主画面に表示されている最新の測定数値

戻り値の型:

float

meas_raw()[ソース]

MEAS? の応答を文字列のまま返す。

戻り値:

デバイスから返却されたカンマ区切りの生の測定データ文字列

戻り値の型:

str

meas_sub()[ソース]

MEAS2? により副表示の測定値を取得する。

戻り値:

副画面に表示されている最新の測定数値

戻り値の型:

float

query(command)[ソース]

SCPI クエリを送信し、1 行の応答文字列を返す。

古い受信残余データとの混同を防ぐため、コマンド発行前に受信バッファをクリアする。 コマンド送信後、改行コードに到達するかタイムアウトするまで応答を読み出す。

パラメータ:

command (str) -- 疑問符 (?) で終わる SCPI クエリ文字列

戻り値:

測定器から返ってきた、左右の空白や改行を取り除いた応答文字列

戻り値の型:

str

例外:

TimeoutError -- 測定器からのレスポンスが空(タイムアウト)だった場合

query_float(command)[ソース]

SCPI クエリ応答を float として返す。

パラメータ:

command (str) -- SCPI クエリ文字列

戻り値:

浮動小数点数に変換された応答値

戻り値の型:

float

query_int(command)[ソース]

SCPI クエリ応答を int として返す。

実数表記(例: "1.0")で返ってきた場合でも安全に変換できるよう、 一度 float を経由してから整数へキャストする。

パラメータ:

command (str) -- SCPI クエリ文字列

戻り値:

整数に変換された応答値

戻り値の型:

int

remote()[ソース]

SYSTem:REMote により SCPI remote mode に入る。

これにより、フロントパネルの操作がロックされ上位 PC からの制御を受け付ける。

reset()[ソース]

*RST により機器設定をデフォルトに戻す。

set_auto_range(enabled=True)[ソース]

AUTO によりオートレンジを有効化する。

XDM1000 の Programming Manual では AUTO は有効化コマンドであり、 OFF パラメータ付きの汎用 AUTO OFF は定義されていない。False を指定した場合、 明示的なレンジは set_range() で設定する。

パラメータ:

enabled (bool) -- True の場合のみ AUTO を送る。

例外:

ValueError -- False が指定された場合。

set_beeper(enabled)[ソース]

ブザーの ON/OFF を設定する。

パラメータ:

enabled (bool) -- True でブザー有効 (ON)、False で無効 (OFF)

set_calc_function_average()[ソース]

統計計算機能 (AVERage) を有効化する。

set_function(function, display=1)[ソース]

SENSe:FUNCtion により測定機能を選択する。

パラメータ:
  • function (str) -- SCPI の測定機能名。例: 'VOLT', 'VOLT AC', 'CURR', 'RES'

  • display (int) -- 表示番号。1 は主表示、2 は副表示。デフォルトは 1。

set_range(range_value)[ソース]

RANGE により現在の測定機能のレンジを設定する。

パラメータ:

range_value (str/int/float) -- RANGE に渡す値。例: 1, 2, 'DEF'

set_rate(speed)[ソース]

測定速度を設定する。speed は F, M, S のいずれかである。

パラメータ:

speed (str) -- 'F' (Fast), 'M' (Medium), 'S' (Slow / Low speed)

write(command)[ソース]

SCPI コマンドを送信する。

末尾に改行コード LF (n) が付加されていない場合は自動で補完し、 ASCII エンコードを施してシリアルバスへフラッシュする。

パラメータ:

command (str) -- 測定器へ送信する SCPI コマンド文字列

xdm1000.xdm1000_scpi.main(config_path='xdm1000_example.yml')[ソース]

SCPI クラス単独の動作確認用サンプルである。

ローカルの設定ファイルを読み込み、インスタンス化を行ってから 直流電圧 (DCV)・ミディアムレートの設定を行い、10回の主表示測定値を 連続して取得・出力するスタンドアロンデモ。

パラメータ:

config_path (str) -- 読み込む yaml 設定ファイルのパス。デフォルトは 'xdm1000_example.yml'

xdm1000.xdm1000_worker module

XDM1000 デジタルマルチメータ用ワーカープロセス実装である。 K.NAKADA, kengo.nakada@gmail.com

本ファイルは、プロセス分離構成においてシリアルポートと SCPI 実体を保持する 子プロセス側ワーカーを定義する。ctrl 層は利用者向け API とプロセス間通信を 担当し、本ワーカーは command queue から受け取った要求を実機 SCPI 操作へ変換する。

SCPI 層は SCPI コマンドの薄いラッパであり、測定モード、レンジ、測定速度、 連続測定条件などの上位状態は本ワーカー側でキャッシュする。これにより、 親プロセスは直接シリアルポートを保持せずに測定状態と最新結果を参照できる。