ACTWRECV

Section: User Commands (1)
Updated: 2010-12-20
Index Return to Main Contents
 

名前

actwrecv - ACTプロトコルでカプセルされた win形式データを受信し、(やや特殊な)win形式ファイルとして保存する  

書式

actwrecv -r port(s) -C file [-D dir] [-R file] [-O file] [-B dir] [-c hr] [-I] [-v[0-3]]  

説明

本プログラムの目的は、ACTプロトコルでカプセル化され、 ACT形式のUDPパケットとして送信されてくるwin形式データを受信し、 この内容をwin形式ファイルでディスク装置に保存することである (win形式に関しては winformat(1)を参照のこと)。

保存されるwin形式ファイルはチャンネル毎、 日付毎のディレクトリに分割して保存される。 win形式ファイルの時間の単位は分単位と時間単位から選択できる。 便宜上、actwrecvの生成するwin形式ファイルは ブロック毎の圧縮が行われない固定長のファイルとなる。

actwrecvの基本的な動作は、 ACT受信動作とwinデータ収録動作のセットから成る。 これに加え、オプションとして、win転送動作と例外win出力動作、 受信ビットマップ記録動作を行わせることができる。

actwrecvで収録を行うには、予め受信すべきwinデータの情報を チャンネルリストファイルに記述しておくことが必要になる。 またactwrecvで収録できるwinデータには下記のような制限がある。

*
カプセル化される前のwin形式UDPパケットは、 A0タイプのwinヘッダを持ったものであること (白山工業の一部製品が生成する、 A1タイプのwinヘッダを持ったwinデータは収録できない)。
*
1秒1チャンネルのみで構成されていること (複数の秒ブロックを持つwinデータや、秒ブロック内に 複数のチャンネルブロックを持つwinデータは収録できない)。

actwrecvは、チャンネル毎に、 指定された最大保存日数分までのデータを保存する (厳密には、最大保存日数分のデータを保証するため、 最大保存日数+1日分のデータを管理する)。 既に最大保存日数+1日分の日付ディレクトリが存在しているときに 新たな日付のデータが到着すると、 actwrecvは現在保存されているデータの中でもっとも古い日付と、 新たに到着したデータの日付を比較する。 新たに到着したデータの日付のほうが古ければこのデータは 破棄される(ACTプロトコルでは、送信側の状況によっては より古い日付のデータが後から到着することもありうる)。 新たに到着したデータの日付のほうが新しければ、 もっとも古い日付の日付ディレクトリ名をこの日付にリネームし、 新たに到着したデータをこのディレクトリに対して上書きで収録する。 以上の仕組みにより、長期間の連続運用では、 常に指定日数分の最新データが保持されることが期待される。  

オプション

-r port(s)
受信を行うUDPポート番号を指定する。数値をカンマで連結し、 複数ポート(16個まで)を指定することもできる。
-C file
チャンネルリストファイルのパスを指定する。
-D dir
winデータ収録動作の基準ディレクトリのパスを指定する。 -Dオプションが省略されるとwin収録動作は行われない。
-R file
win転送動作の制御ファイルのパスを指定する。 -Rオプションが省略されるとwin転送動作は行われない。
-O file
例外winデータ出力動作の出力ファイルのパスを指定する。 -Oオプションが省略されると、例外winデータ出力動作は行われない。
-B dir
受信ビットマップの基準ディレクトリのパスを指定する。 -Bオプションが省略されると、受信ビットマップ記録動作は行われない。
-c hr
受信ビットマップ記録の更新周期を、1〜24の時間単位の整数値で記述する。 -cオプションが省略された場合、デフォルトとして1時間が採用される。 -Bオプションが省略された場合、この指定は無視される。
-I
-Iオプションが指定されると、winデータ収録動作で過去の日付の ディレクトリが再利用を行う際に、データファイルの初期化を行う。
-v[0-3]
デバッグ用メッセージ出力のスイッチ。 -v1ではACT受信動作に関するデバッグメッセージを、 -v2ではwinデータ収録動作に関するデバッグメッセージを、 -v3ではその両方を出力する。 -vが省略されるか-v0が指定された場合、 デバッグメッセージは出力されない。 数字なしで-vだけが指定された場合は-v1と等価。
 

詳細説明

 

ACT受信動作

ACTプロトコルでは、受信側は送信側に対して 個々の受信データの受信完了を通知する義務を持つ。 これに対して送信側は、受信完了が確認できないデータについては 可能な限り繰り返し再送を試みる。 このため、ネットワークの不調や断線、受信側の停止等があっても、 最後にはすべてのデータを受信・収録できることが期待される。

-Dオプションが指定されていた場合、actwrecvは、 データのディスク装置への収録が成功するか、 そのデータが収録対象ではないと判断されたときに、 このデータを「受信完了」と判断する。 -Dオプションが指定されておらず -Rオプションが指定されていた場合、actwrecvは、 win転送処理が終了したときに、このデータを「受信完了」と判断する。 -Dオプションも-Rオプションも指定されなかった場合、 actwrecvはACT受信動作を行わず、すぐに終了する。  

チャンネルリストファイル

ユーザはチャンネルリストファイルを用いて actwrecvが収録すべきデータのチャンネルの情報を指定する。 チャンネルリストファイルは、一行毎にスペースまたはタブ区切りで、 4個または5個の要素が記述されたテキストファイルである。 チャンネルリストファイル中の空行は無視される。 また`#'から行末までの記述はコメントと見做され、無視される。 以下にチャンネルリストファイルの記述の一例を示す。

# 観測点XXXX
# 要素1 要素2 要素3 要素4 要素5
  D000  200   sps   14    min  # 上下成分
  D001  200   sps   14    min  # 南北成分
  D002  200   sps   14    min  # 東西成分
  D003  1     spm   28    hr   # 気温
  D004  1     spm   28    hr   # 気圧

# 観測点YYYY
# ...

各要素は以下のような意味とフォーマットを持つ。

第1要素:winチャンネル番号
収録の対象となるデータのwinチャンネル番号を、4桁の16進数で記述する。 チャンネルリストファイル中のwinチャンネル番号の重複は許可されない。
第2要素:チャンネルブロック内のサンプル数
このチャンネルのwinデータのチャンネルブロック内のサンプル数を、 10進の整数で指定する。 これが一致しない場合、到着したデータは収録されない。
第3要素:データの生成頻度を示すキーワード
現在、`sps'と`spm'の二種類のキーワードがサポートされている。 `sps'は`sample per second'の略で、これが指定されるとactwrecvは、 このチャンネルのデータは秒毎に生成されると想定する(`sps'のエイリアスとして `Hz'も使用できる)。生成されるwin形式ファイルは、秒ブロックが60個 (分単位の場合)または3600個(時間単位の場合)並べられたものとなる。 `spm'は`sample per minute'の略で、これが指定されるとactwrecvは、 このチャンネルのwinデータは分毎に生成されると想定する。 生成されるwin形式ファイルは、秒ブロックが1個(分単位の場合) または60個(時間単位の場合)並べられたものとなる。
第4要素:最大収録日数
このチャンネルのデータが保存される日数を10進の整数で指定する。
第5要素:生成されるwin形式ファイルの時間単位を示すキーワード
現在、`hr'(時間)と`min'(分)の二種類のキーワードが サポートされている。 `hr'が指定されると、このチャンネルのwinデータは、 1時間あたり1ファイルのwin形式ファイルに分割されて収録される。 `min'が指定されると、このチャンネルのwinデータは、 1分あたり1ファイルのwin形式ファイルに分割されて収録される。 第5要素は省略可能であり、省略された場合、第3要素が`sps'なら`min'、 `spm'なら`hr'が指定されたものとして処理される。

 

winデータ収録動作

actwrecvは、チャンネルリストファイルにチャンネルの記述があり、 かつ、チャンネルブロック内のサンプル数がファイルの記述と一致する winデータのみを収録する。 データが収録されるwin形式ファイルは、ファイルの対象の時間帯の 最初のデータの到着時に生成または準備される。 各データはファイルの該当部分をブロック単位で上書きして収録される。 各win形式ファイルは、以下のファイル構造に従って配置される。
(basedir)/(format)/(ch)/(date)/(file)
(basedir)
オプションで指定された収録基準ディレクトリ。
(format)
データの収録形式のディレクトリ。 チャンネルリストファイルの第2要素と第3要素を連結したもの(`200sps' `1spm'等) がディレクトリ名となる(`Hz'で指定した場合にもこの名称には`sps'が使用される)。
(ch)
チャンネルディレクトリ。チャンネル番号を 4桁の16進数(A-Fは大文字)で表記したものがディレクトリ名となる。
(date)
日付ディレクトリ。 日付をYYMMDD形式の6文字で表した文字列がディレクトリ名となる。
(file)
生成されるwin形式ファイル。各日付毎ディレクトリに、 時間単位なら00.win23.winの24ファイル、 分単位なら0000.win2359.winの1440ファイルが配置される。

(basedir)は、actwrecv起動時に予め用意され、 書込み可能である必要がある。 (format)以下のディレクトリは、存在しなければ、 必要に応じてactwrecvが自動的に生成する。 新規に生成されたwin形式ファイルは、 全ての秒ブロックヘッダの日付が00年01月01日00時00分00秒、 チャンネルがFFFEとなっており、また全てのサンプルの値が0となっている。

最大収録日数を超えると、前述のように、 新規のデータは以前のデータの上書きで保存される。 このとき未受信の秒ブロックがあると、このwin形式ファイルは、 この部分に過去のデータの混じったものになる。 過去のデータを取り除くには、wed(1)等のツールを使用して、 日付で収録ファイルをフィルタする。 このような処理が望ましくない場合は、 起動オプションに -I を指定することができる。 この場合actwrecvは日付の再利用時に、 この日付ディレクトリの下の全ファイルの全秒ブロックを、 新規に生成されたのと同様の内容に初期化する (ただし、それだけのディスクI/O負荷が生じる)。

全ての記録を保存するには、 ユーザの側で定期的にデータをアーカイブする必要がある。 一方で、actwercvはディスクの残容量をチェックしないので、 最大収録日数の指定が大き過ぎると ディスクを使いきってしまうおそれがある。 ユーザは、ディスク容量とアーカイブの頻度のバランスを考慮し、 適切な保存日数を選択しなければならない。 参考までに、毎秒Nサンプルのspsデータの受信で、 1チャンネル、1日あたりに必要なディスク容量は以下の通りである (actwrecvは、最大で、 最大収録日数+1個の日付ディレクトリを使用することに注意)。


   [N]   [容量]
  1000  約350Mバイト
   200  約 70Mバイト
   100  約 35Mバイト
    10  約  5Mバイト
     1  約1.6Mバイト

万一、ディスクを使いきってしまった場合に、 システムに悪影響が及ばないよう、 winデータ収録動作の基準ディレクトリは システムのパーティションとは異なる 専用のパーティションに配置されるのが望ましい。 このやり方はディスク装置でRAID等を使用する上でもメリットがあるだろう。  

win転送動作

actwrecvは、受信したACTパケットにカプセル化されていた内容を、 指定されたIPアドレスとポート番号へ、 UDPパケットとして転送する機能を有している。この機能を使用するには、 -Rオプションを用いてwin転送動作の制御ファイルを指定する。 転送機能はデータの重複をチェックしないので、 ACTの送信側でデータの再送が発生すると、 同じデータが複数回転送されることになる。 転送には以下の四つのカテゴリがあり、 ユーザはwin転送制御ファイルでカテゴリ毎に転送の有無と宛先を指定できる。
I. RELAY_ALL
すべての受信ACTデータのカプセル化されていた内容をそのまま転送する
II. RELAY_A0
受信ACTデータのカプセル化されていた内容が A0タイプのヘッダを持つwin形式のデータであれば、 シーケンス番号を自前の連番に書き直した上でこれを転送する
III. RELAY_A0_IRREG
受信ACTデータのカプセル化されていた内容が A0タイプのヘッダを持つwin形式のデータで、 チャンネルリストに記述がない等で収録の対象とならなかった場合、 シーケンス番号を自前の連番に書き直した上でこれを転送する
IV. RELAY_NOT_A0
受信ACTデータのカプセル化されていた内容が A0タイプのヘッダを持つwin形式ではなかったものについて、 その内容をそのまま転送する

IIとIIIの転送動作に、 転送先からの(winスタイルの)再送要求に応答する機能はない。 そのような動作を期待するのであれば、 この転送機能ではローカルホスト内の適当なポートへ転送させておき、 relay(1)等を使用してwin受信装置へ再転送させればよいだろう。  

win転送動作制御ファイル

このファイルには、転送カテゴリ毎のwin転送動作の宛先を、 以下の書式で記述する。
変数名=(IPアドレス):(UDPポート番号)
記述可能な変数名はUDPADDR_RELAY_ALLUDPADDR_RELAY_A0UDPADDR_RELAY_A0_IRREGUDPADDR_RELAY_NOT_A0の4種類で、 それぞれ上記のカテゴリに対応している。 記述が省略されたり、右辺が空または書式に反する指定だった場合、 そのカテゴリでは転送動作は行われない。  

例外winデータ出力動作

actwrecvは、通常の収録動作では収録の対象とならなかった (A0タイプのヘッダを持つ)受信winデータを、 指定されたwin形式ファイルへ出力する機能を有している。 収録動作の対象とならず、この機能の対象となる winデータには、 以下のようなものがある。
*
複数の秒ブロックを持つwinデータ
*
秒ブロック内に複数のチャンネルブロックを持つwinデータ
*
秒ブロックのタイムスタンプがカレンダー的に不正なwinデータ (13月00日等。正の閏秒のデータもこのカテゴリに分類される。)
*
チャンネルリストに記述のないチャンネルのwinデータ
*
チャンネルブロック内のサンプル数が チャンネルリストの記述と一致しないwinデータ
*
既にこのチャンネルに 最大収録日数+1個の日付ディレクトリが存在しているとき、 これらのうち最も古い日付よりも過去のタイムスタンプを持つwinデータ

(秒の値が60以上となる)正の閏秒のデータは、 actwrecvの通常の収録機能では収録できないが、 この機能を使用すれば別途回収できる。 この出力は、-Oオプションで指定されたファイルに対する、 単純な秒ブロックの追記の形で行われる。 重複のチェックや時間順にソートする機能などは実装されていない。 ACT送信側で再送が生じた場合には、同じデータが繰り返し追記される ことになる。指定のファイルが存在しない場合、 actwrecvはこのファイルを新規に作成する。 ファイルは追記のたびにオープン(生成)・クローズされるので、 ユーザはactwrecvの実行中も、 このファイルを名前変更またはアンリンクしてよい。  

受信ビットマップ記録動作

actwrecvは、データの受信状況を簡潔に確認するための手段として、 ビットマップ形式のコンパクトな受信記録ファイルを生成する機能を 有している。 actwin_absent.sh(1)はこの受信記録ファイルの内容を、 ユーザ向けにテキストでグラフ表示する。 受信記録ファイルは、チャンネル毎、日付毎に、 -Bオプションで指定された基準ディレクトリの下に、 以下のファイル構造で生成される。
(basedir)/(format)/(ch)/(file)
(basedir)
-Bオプションで指定された受信記録の基準ディレクトリ。
(format)
データの収録形式のディレクトリ。 チャンネルリストファイルの第2要素と第3要素を連結したもの (`200sps' `1spm'等)がディレクトリ名となる。
(ch)
チャンネルディレクトリ。 チャンネル番号を4桁の16進数(A-Fは大文字)で表記したものが ディレクトリ名となる。
(file)
日ごとの受信記録ファイル。 記録対象の日付に対して YYMMDD.rcvbmp のファイル名で生成される。

受信記録は常時最新に更新されるわけではなく、 いったんメモリ上に蓄えられ、デフォルトでは1時間毎に更新される。 この更新頻度は-cオプションで、1〜24の範囲で変更できる。 受信記録をすぐに最新に更新したい場合には、 actwrecvに対してSIGHUPを送信する。 過去の受信記録ファイルを自動で消去する機能はない。 最大収録日数の指定とも無関係で、 ユーザが消去しない限りファイルは蓄積するので、 十分なディスク容量を確保するか、 定期的にファイルを削除する等の対応が必要になる (受信記録ファイルのサイズは、1チャンネル、1日あたり、 spsデータなら約12kバイト、spmデータなら約0.2kバイトである)。  

動作の終了

actwrecvは、(kill(1)コマンド等で) SIGTERMシグナルを受信するか、 (フォアグラウンド実行時のCtrl-C等で) SIGINTシグナルを受信すると終了する。 終了時にはまず受信を停止し、 次に受信済みデータの転送・収録・受信完了通知を処理したのち、 プロセスを終了する。  

終了ステータス

actwrecvは常に終了ステータス1で終了する。  

バグ・注意事項

大量のデータを受信するには、 相応の転送速度で動作するディスク装置が必要となる。 書き込みが着信に追いつかない場合は、 送信側に未送信データが大量に蓄積される結果になることが予想される。 また、システムにとって過大なディスクI/O負荷が発生し、 win転送動作や他のプログラムの動作に悪影響を与える可能性も考えられる。

デーモンとして動作させる機能が未実装。

例外winデータ出力機能の使用時に、チャンネルリストファイルに誤りが あった場合、大量のデータが例外出力ファイルに出力されてしまう危険がある。 この可能性に対するフェールセーフがない。

累積で2048を超えるACT送信側とは通信を行えない。 同時にデータを受信するにはACT送信側は2048以下でなくてはならない。 ACTの送信側で装置や送信プログラムのリセットが生じた場合、この新規の 動作はactwrecvからは別個のクライアントとして数えられてしまう。 したがって、送信側でリセットが頻繁に行われるような場合には データが受信できなくなる可能性がある (その場合、actwrecvを再起動すればよい)。  

関連項目

actw_hdprep(1), actwin_absent.sh(1), relay(1), wed(1), winformat(1)


 

Index

名前
書式
説明
オプション
詳細説明
ACT受信動作
チャンネルリストファイル
winデータ収録動作
win転送動作
win転送動作制御ファイル
例外winデータ出力動作
受信ビットマップ記録動作
動作の終了
終了ステータス
バグ・注意事項
関連項目

This document was created by man2html, using the manual pages.
Time: 07:14:56 GMT, December 21, 2010