新しい微気圧計の観測システムについて
---------- 綿田さんの案 ----------


すっきりタイムスタンプをデータの途中に入れ、かつ、バイナリデータを そのままをデータに書く方法です。 データの形式は固定長のバイナリブロックが単純連結された形式です。 (ブロック)(ブロック)(....)(ブロック) ここで(ブロック)とは固定長のバイナリファイルで(ブロック)は (ブロック 4096 バイト)=(ヘッダ部 64 バイト)+(データ部 4032 バイト) とわかれ、ヘッダ部には以下の情報を持たせます。

以下に I2, I4, S4 などと表現さている部分はそれぞれの要素のサイズが 整数2バイト、整数4バイト、文字2バイト、文字4バイト となっていることを示します。I1 は1バイト整数型 char です。

●「ヘッダ部」64バイト

(*) 2000 にしなかったのは 19xx 年のデータが存在するため。   年月日時分秒は ASCII 文字列形式 yymmddhhmmss でもかまいません。   そのときは msec は I4 となり、予備部が I16 としてヘッダー部の I4 整数型の   4 バイト整合配置を維持します。
(**) 閏秒も考慮にいれています。
(***) 直後のデータ部が保持するサンプルペアの数であって、1時間の積算ではないこと   に注意してください。0 以上 504 以下の任意の値が可能です。

●「データ部」 4032 バイト

圧力カウンタ値+温度カウンタ値 I4+I4 これがヘッダ部の計測数回繰り返されます。 データ部は最大 504 回の計測値を保持することが可能ですが、504 回以下で終えること も可能。その場合は計測値が入らないデータ部には 0x00 で埋められます。 一つ大切なことは、設定メニューを増やし、設定メニューの中に、分周値に加え、設置場 所記号も入力設定できるようにしておきます。

● 参考

参考までに、プログラムの書き方を示します。必ずこうしなければならないということで はありません。

ヘッダ部 64 バイトを構成する構造体と、4032 バイトのデータ部を構成する構造体を定義 して、さらにその二つをメンバーとするブロックを構成する構造体を定義します。

観測開始後

毎正時にヘッダを作成するというここだわらる必要がないのなら、4)は次行のように なります。

(4)504回のデータが集まれば(5)へ、もしくは観測終了なら(6)

1度に保持するデータサイズは4096バイト程度なので、メモリーも圧迫しませんし、 ファイルへの書き込み回数がぐっと減り高速、しかも、書き出し時以外はファイルは閉じ られているので、途中プログラム障害が発生しても、データファイルに影響がない。逆に、 障害発生直前のデータは最大 504 個まで失われます。 (1秒サンプルで8分強、10秒サンプルで84分) 読み込みプログラムも同様に順序良く書くことができます。これまた、高速にファイル アクセスすることが可能となります。 ファイル中の特定の時刻のデータの検索も、4096バイトのブロック構造体のメンバー であるヘッダ構造体を参照して検索できるので、高速になります。 ブロックサイズが4096バイトでは大きすぎるというときには、データ部の大きさを 変更して、ブロックサイズが512バイトになるように設計してもいいでしょう。