今回は,測定機器に一連の数列データの送信を,PyVISAパッケージのwrite_binary_values関数に,そのまま適用できないケースの例と,その対処方法を紹介します.
きっかけは,あるファンクション・ジェネレータに任意の波形データをBinaryデータとして送信しようとしたときでした.
その波形データは,
水平軸成分,垂直軸成分,水平軸成分,垂直軸成分,...
という具合に,水平軸成分と垂直軸成分が交互に繰り返される形式となっていました.
ところが,
水平軸成分: 4 [bytes](符号なし)
垂直軸成分: 2 [bytes](符号あり)
と,水平軸成分と垂直軸成分のバイト長さが異なっているのです.
PyVISAパッケージのwrite_binary_values関数は,エンディアンの指定ができるのですが,このケースのように,異なったバイト長さが混在した数列データには対応できません.
(そもそも,datatypeキーワード引数を使って,異なるバイト長さを指定できません)
このようなケースには,どうやって対処したら良いのでしょうか?
残念ながら,送信する数列データそのものを,write_binary_values関数で対応できる形式に,変換するしか手段がありません.
具体的には,送信する数列データを,バイト列(byte型のリスト)として変換して対処します.
Pythonでは,to_bytes関数を使うことで,エンディアン(と符号)を考慮して,整数値からバイト列に変換することができます.
つまり,水平軸成分は4[bytes]の数値xだとして,これを,ビッグエンディアンの符号なしのバイト列xbytesに変換するには,
xbytes = x.to_bytes(4, byteorder="big", signed=False)
とすれば,変数xbytesに,4[bytes]のバイト列が入力されます.
同様に,垂直軸成分は2[bytes]の数値yだとして,これを,ビッグエンディアンの符号ありのバイト列ybytesに変換するには,
ybytes = y.to_bytes(2, byteorder="big", signed=True)
とすることで,変数ybytesに2[bytes]のバイト列が代入されます.
上記の変換を,全ての数列データに行い,変換した結果を,前もって用意しておいたバイト列にコピー(代入)すれば,PyVISAパッケージのwrite_binary_values関数を,このバイト列を適用して,Binaryデータを送信することができるようになります.
(前の投稿で紹介したように,ここでのdatatypeキーワード引数は's'を設定すれば良く,エンディアンは設定してもしなくても良いです)
今回紹介したことは,複雑すぎて,よく分からなかったかもしれませんが,実際に,測定機器に一連の数列データをBinaryデータとして送信する際に,解決すべき事柄として発生した事例です.雰囲気だけ感じてもらえば結構です.
今回紹介したケースで困っていた人が,本ブログを読むことで,解決の糸口が見つかることになれば幸いです.
このブログを検索
アーカイブ
-
►
2022
(55)
-
►
4月 2022
(18)
- 025 PyVISAでコマンドを送受信した後でlast_statusの値をチェックする
- 026 PyVISAとExcelファイルで測定機器をコントロールする
- 027 Excelファイルから測定機器をコントロールするデータを読み込む
- 028 Excelファイルから測定機器をコントロールするデータを読み込む(その2)
- 029 Excelファイルから測定機器をコントロールするデータを読み込む(その3)
- 030 測定機器から得たデータをExcelファイルとして保存する
- 031 測定機器から得たデータをExcelファイルとして保存する(その2)
- 032 測定機器から得たデータをExcelファイルとして保存する(その3)
- 033 測定機器をコントロールするためのExcelファイルの読み書き時間
- 034 PyVISAとxlwingsのパッケージを使ってExcelから測定機器をコントロールする
- 035 ExcelからPythonスクリプトを実行する
- 036 ExcelからPythonスクリプトを実行する(その2)
- 037 PyVISAを使ってASCIIデータとBinaryデータを送受信する
- 038 PyVISAを使ってASCIIデータを送受信する
- 039 PyVISAを使ってBinaryデータを送受信する
- 040 PyVISAを使ってBinaryデータを送受信する(その2)
- 041 PyVISAを使ってBinaryデータを送受信する(その3)
- 042 PyVISAを使ってBinaryデータを送受信する(その4)
-
►
4月 2022
(18)
分類
- その他/雑談 (7)
- 環境構築/Python (5)
- 実機/オシロ (6)
- 実機/ファンクションジェネレータ (5)
- 紹介/Python (5)
- 紹介/PyVISA (12)
- 紹介/オブジェクト指向 (5)
- 紹介/スクリプト (10)
自己紹介
- メジャーメントラボ
- C++やC#を使って数値解析プログラムの開発を長年行ってきました.
今は,Pythonを使った自動処理システムの開発をメインに行っています.
0 件のコメント:
コメントを投稿