このページについて

このページではPDS5022というDSO(Digital Storage Oscilloscope)のファイルフォーマットを解説しています。 元ネタはOWON製デジタルオシロスコープ PDS5022を買ってみた。 というページの"オシロのバイナリデータの解析"というところです。 残念なことにこの有用なWebサイトは既に消えています(上記リンクはアーカイブページです)。

このオシロスコープについて

このオシロスコープは比較的安価なタイプです。 僕が買ったのはPDS5022SというSTN液晶を搭載したタイプで、秋月で3万1千円でした。
現在はPDS5022Tというタイプで、 これはTFT液晶を搭載したモデルです。 15年06月10日現在で、このモデルは3万400円で売っています。 すでにディスコンマークがついていますが、あと160台くらい有るようなので、しばらくは買えると思います。

このオシロは購入時期によって機能に差がありますが、CH1とCH2の簡単な演算(四則演算程度)や、FFT解析等を行うことが出来ます。 新品のオシロスコープとしては最安値のクラスだと思いますが、ちょっとしたアナログ回路には十分な性能だと思います (デジタル回路には使いづらいですが、デジタル回路を見れるオシロは値段が2桁くらい違いますしね)。

このオシロは低価格ということもあり、プロトコル解析などは出来ません。 が、USBでPCに接続することが出来、メーカー配布のソフトウェアを使用することによりバイナリファイルとして保存することが出来ます。 バイナリファイルから波形ファイルに変換してしまえば、あとは波形を適当な閾値でデジタル値に変換し、プロトコル解析を行うことが出来ます。

ファイルフォーマット

以下には独自解釈が含まれます。 解釈において不都合が生じた場合は適時解釈を変更してください。

ヘッダ

ADDRESS LENGTH 内容
0x00000000 6 "SPBV01"
ファイルフォーマット種別?(うしろ2文字はバージョン?)
0x00000001
0x00000002
0x00000003
0x00000004
0x00000005
0x00000006 4 UINT32 ファイル長
0x00000007
0x00000008
0x00000009

0x00000000 ファイルフォーマット識別子

4文字の"SPBV"と2文字の数字?

0x00000006 ファイル長

ヘッダや波形を含めたデータサイズ。

波形データ

ADDRESS LENGTH 内容
0x00000000 3 "CHn" チャンネル1 or チャンネル2を識別するための文字列 "CH1","CH2"のどちらか
0x00000001
0x00000002
0x00000003 4 UINT32 データバイナリ長
この長さに3バイト(Ch識別文字列分)を足した長さが実際のデータ長
0x00000004
0x00000005
0x00000006
0x00000007 4 UINT32 波形データ長
波形データの数を示す
0x00000008
0x00000009
0x0000000A
0x0000000B 4 UINT32 波形データ長
波形データの数を示す(オフセット0x7と同じデータ?)
0x0000000C
0x0000000D
0x0000000E
0x0000000F
0x00000010
0x00000011
0x00000012
0x00000013 1 UINT8(列挙型からのキャスト) 時間軸
0x00000014
0x00000015
0x00000016
0x00000017 4 INT32 表示オフセット量
0x00000018
0x00000019
0x0000001A
0x0000001B 1 UINT8(列挙型からのキャスト) 電圧軸
0x0000001C
0x0000001D
0x0000001E
0x0000001F 1 UINT8(列挙型からのキャスト) プローブのレンジ
0x00000020
0x00000021
0x00000022
0x00000023
0x00000024
0x00000025
0x00000026
0x00000027
0x00000028
0x00000029
0x0000002A
0x0000002B
0x0000002C
0x0000002D
0x0000002E
0x0000002F
0x00000030
0x00000031
0x00000032
0x00000033 波形データ長 * 2 INT16 波形RAWデータ

0x00000000 チャンネル識別子

この3文字でチャンネルを識別します。 date[0x00000002]から0x30(ASCII'0')を引いて数値とすることも出来ます。 文字列の配列長が3ですから、数値への変換でも複数桁数を気にする必要はないはずです。

0x00000003 データバイナリ長

波形データ本体の長さです。 この数値に3を足すと正確な長さになります。 例えばCH1のデータ長が12,548の場合、CH1の絶対位置は0x0000000Aですから、 CH2の絶対位置は12548と3を足して0x00003111となります。
CH2のデータ長も12,548の場合、0x0000000A+(3+12548)+(3+12548)で、CH2の次の位置は0x00006218になります。 しかし、ヘッダのファイル長には0x00006218と書いてあり、差は0ですから、残りのデータは存在しないとわかります。

0x00000007 波形データ長

波形データのサンプル数です。 波形データはINT16型なので、実際のデータサイズは 波形データ長 * 2 となります。

0x00000013 時間軸

オシロスコープで選択した時間軸の列挙型です。

5ns = 0, 10ns, 25ns, 50ns, 100ns, 250ns, 500ns, 1us, 2.5us, 5us, 10us, 25us, 50us, 100us, 250us, 500us, 1ms, 2.5ms, 5ms, 10ms, 25ms, 50ms, 100ms, 250ms, 500ms, 1s, 2.5s, 5s, 10s, 25s, 50s, 100s,

0x00000017 表示オフセット量

値に0.04を掛けた積がオフセット電圧[V]。 0xFFFFFFB5の場合値は-75なので、オフセット量は-3Vとなり、画面の中心から下に3V分移動した場所が0Vとなる。

0x0000001B 電圧軸

オシロスコープで選択した電圧軸の列挙型です。

5mV = 1, 10mV, 20mV, 50mV, 100mV, 200mV, 500mV, 1V, 2V, 5V,

電圧軸はプローブレンジに応じて修正する必要があります。 プローブがx1ならそのまま使用できますが、x10なら10倍に、x1000なら1000倍にする必要があります。

0x0000001F プローブレンジ

プローブレンジの列挙型です。

x1 = 0, x10, x100, x1000,

何らかの不具合を発見した場合や、改善点・変更リクエストは 青猫(@rian_y)までご連絡ください。

ホーム