といった仕様により、次のような特徴をもっています。
チャネルヘッダー | 1チャネル・1秒分データ |
4B | 可変長 |
チャネルブロック(可変長) |
1つのチャネルブロックのサイズは、チャネルヘッダーを読むことにより、 知ることができます。チャネルヘッダーは次の形式です。
チャネル番号 | サンプル | サンプリング |
サイズ情報 | レート(Hz) | |
2B | 0.5 B | 1.5 B |
チャネルヘッダー(4 B) |
4バイトのチャネルヘッダーのうち、前の2バイトはチャネル の固有番号です。16進数4桁で 0000〜FFFF になります。
後ろの2バイトのうち、上位の4ビットは 後続する1秒分のデータのサンプルサイズの情報を示します。 とりうる値は 0〜5 です。5 は WIN_pkg-3 で初めて導入されました。0 は 0.5 バイト(4ビット)長を表し、1〜3 については、それぞれ 1〜3 バイト長を表 します。4 と 5 については4 バイト長を表わし、4 は0〜3と同じく差分値、5 は値そのものが入っている事を示します。
サンプルサイズ情報 | サンプルサイズ(B) | 差分値 |
0 | 0.5 | Yes |
1 | 1 | Yes |
2 | 2 | Yes |
3 | 3 | Yes |
4 | 4 | Yes |
5 | 4 | No |
下位12ビットはサンプリングレート(Hz)で、とりうる値は 1〜4095です。このチャネルヘッダーに後続するデータブロックには、 そのチャネルの1秒分のデータが入っています。このうち 先頭のサンプルだけは、常に4バイト長で、第2サンプル以降は、 前のサンプルとの差分値([当サンプル値]−[前サンプル値])が、 いずれもチャネルヘッダーに記されたサンプルサイズ情報に従ったサンプルサ イズで、(サンプリングレート−1)個、入っています。 ただし、サンプルサイズ情 報が 5 の時は、すべてのサンプルで差分を取らず、値そのものが入ります。こ れは差分を取ったときに値が 4 バイト整数値で表す事が出来る範囲を越 える場合がある事、4バイトの場合差分を取っても圧縮効果が無い上に差分を 取るという演算が入る事に対応して導入されました。今後はサンプルサイズ情 報として、4 の時は代わりに 5 を使う事が推奨されます。
先頭の | 最初の | 最後の | |
サンプル | 差分 | ... | 差分 |
4 B | (*B) | (*B) | |
データブロック(可変長) | |||
(サンプルサイズ(*B) はチャネルヘッダーに指定) |
サンプリングレートが 1Hz のときは、データブロックは4バイトの 先頭サンプルだけで、差分データはありません。サンプルサイズ は 0.5〜4 バイト、つまり 4, 8, 16, 24 または 32 ビット長で、 いずれの場合も2の補数表示です。なお、サンプルサイズが 0.5 バイトの とき、サンプリングレートが偶数だと、データブロックの最後の1バイトの 下位4ビットに未使用の空きができます。
サンプルサイズとしては、このチャネルの1秒分の差分データを表現 できるだけの、できるだけ小さいサイズがとられます。たとえば、1秒分の 差分データが -8〜7 の範囲に入っていれば、サンプルサイズは 0.5バイト になります。同様に -128〜127 なら1バイト、-32768〜32767 なら 2バイト、というふうになります。差分をとるのは、直流オフセット のためにサンプルサイズが大きくなることを避けるためです。 サンプルサイズは 毎秒のチャネルヘッダーに書いてあるので、動的に変わります。これにより データは内容に応じて圧縮されることになります。 適正にゲイン設定されていると、平常時のサンプルサイズは 0.5〜1 バイト になるのが普通です。 同一チャネルのサンプリングレートが動的に変動することは可能 ですが、あまり一般的ではありません。アナログテープ記録 からAD変換したデータの場合などは、サンプリングレートの変動を そのまま記述することができます。ただし、win フォーマットを読む プログラムの方で、同一チャネルのサンプリングレートは一定である ことを仮定しているかもしれません。
win フォーマットの「秒ブロック」は、時刻を記述した秒ヘッダーの 後ろに、上述のようなチャネルブロックを1個以上並べたものです。
秒ヘッダー | 第1チャネル | 最終チャネル | |
年月日時分秒 | ブロック | ... | ブロック |
BCD 各 1B | (1秒分) | (1秒分) | |
6 B | 可変長 | 可変長 | |
秒ブロック(可変長) |
この秒ブロックが、win フォーマットの基本フォーマットです。 win フォーマットは伝送・保存のためのさまざまな媒体上で 取り扱うことができますが、媒体によりいくらかフォーマットが 異なります。以降では、(1)ディスク/テープ上、 (2)IPのUDPパケット上、(3)共有メモリ上、(4)専用線上、 のそれぞれでの win フォーマットについて説明します。
ブロック | 秒ブロック | ブロック | 秒ブロック | ||
サイズ | ... | サイズ | |||
4B | 可変長 | 4B | 可変長 | ||
1ファイル(可変長) |
ここで「ブロックサイズ」が表すのは、バイト単位で、後続する 秒ブロックの大きさに4(「ブロックサイズ」の占める大きさ)を 加えたものです。win フォーマットのファイルの大きさ(秒数)に 制限はありません。ただし、オンライン連続データのバッファリング をする場合は、1分ごとにファイルを分割して います(wdisk(1W)、pmon(1W)、events(1W)、wtape(1W) など)。
win フォーマットのファイルを編集するプログラムとして、
があります。ファイルの連結は、cat(1) でできます。
EXABYTE や DAT のようなテープ媒体上に連続記録するプログラムとして、 書き込み用の wtape(1W) と読み出し用の rtape(1W) があります。 これらの扱うフォーマットは基本的にディスクファイルと同じで、 10分ごと(X9分59秒とX0分00秒の間)に1つの テープマークが挿入されます。なお、テープでは 可変長の1秒分を1レコードとして読み書きしますので、テープ装置は 「可変レコード長」を扱えるものであることが必要です。
パケット | パケット | 識別 | 秒 | 秒 | 秒 | 秒 | |
番号 | 番号 | コード | ブロック | ブロック | ... | ブロック | ブロック |
(再送用) | '0xA0' | のサイズ | のサイズ | ||||
1B | 1B | 1B | 2B | 可変長 | 2B | 可変長 | |
1パケット (可変長) |
「秒ブロックのサイズ」にはそれ自身の2バイトも含みます。 1パケットのサイズは、最大1472バイト(IPパケットのサイズにして 1500バイト)です。伝送効率のために、 通常パケットサイズはこの範囲でなるべく大きくなるように、 データを詰め込んで生成されます。 プロトコルについては、 recvt(1W) を参照してください。 このほか、1パケットに1秒分だけを収容する次のような 旧型のフォーマットもあります。
パケット | パケット | 秒 | |
番号 | 番号 | ブロック | |
(再送用) | |||
1B | 1B | 可変長 | |
1パケット (可変長) |
このフォーマットは、古いプログラムとの互換性を保つための もので、前述の新しいフォーマットとは、3バイト目の値で判別 することができます。 recvt(1W) は両方のフォーマットを受け入れることが できます。
ブロック | 書き込み | 秒 |
サイズ | 時刻 | ブロック |
4B | 4B | 可変長 |
1ブロック (可変長) |
と、含まない形式
ブロック | 秒 | |
サイズ | ブロック | |
4B | 可変長 | |
1ブロック (可変長) |
があります。「ブロックサイズ」には、それ自身の4バイトも 含みます。共有メモリセグメント中では、このようなデータブロック が羅列されています。詳しくは、 それぞれ recvt(1W) および order(1W) を参照してください。
FLAG | 観測点 | パケット | パケット | 秒 | 観測点 | FCS | FLAG |
ID | 番号 | 番号 | ブロック | ステータス | |||
(再送用) | |||||||
1B | 1B | 1B | 1B | 可変長 | 1B | 2B | 1B |
1パケット(フレーム) (可変長) |
秒ブロックには、1〜3チャネルのデータが含まれます。1フレームは 通常 1024 バイトを超えない大きさです。
媒体 | 機能 | プログラム | 機種 |
ADC→IP | 変換 | adt | PC98 |
テレメータ系→IP | 変換 | epo2en他* | PC98 |
専用線→IP | 中継 | hdlc | PC98 |
専用線→専用線 | 中継 | hdlc | PC98 |
IP→IP | 中継 | relay | WS |
IP→メモリ | 受信 | recvt | WS |
メモリ→メモリ | 時間順ソート | order | WS |
メモリ→メモリ | チャネル選択 | raw_raw | WS |
メモリ→IP | 送信 | send_raw他 | WS |
メモリ→ディスク | 保存 | wdisk | WS |
ディスク→8mm | 保存 | wtape | WS |
8mm→ディスク | 再生 | rtape | WS |
ディスク→画面 | 検測 | win | WS |
・プログラム dewin(1W) で単一チャネルを切り出す、 ・プログラム win(1W) で画面表示部分を切り出す。の方法があります。
open_win_format(iunit,file) winフォーマットファイルのオープン close_win_format(iunit) winフォーマットファイルのクローズ write_win(iunit,idx,idate,nch,nchan_tbl,nsamplea,ibuf,i_end) winフォーマットファイルの書き込み(1秒分) read_win(iunit,idx,idate,nch,nchan_tbl,nsamplea,ibuf,i_end) winフォーマットファイルの読み込み(1秒分) read_win_start_time(iunit,idx,idate,i_end) winフォーマットファイル中の時刻の読み出し(1秒分)これらについては、 fortran(1W) を参照してください。