recvs

Section: WIN SYSTEM (1W)
Updated: 2000.12.20
Index Return to Main Contents
 

名称

recvs - シリアルポートから種別つきデータを受信  

形式

recvs [-a] [-s] [-i my_ID] [-p host:port] [-b rate] device shmkey shmsize [ logfile ]

 

解説

recvs は、デバイス名 device のシリアルポートへ 送られるパケット種別付き win 形式のデータを受信し、パケット種別 コードを付けたままの形式で,キー  shmkey で与えられる共有メモリ・セグメントに(巡回的に)書き込みます。 そのキーをもつ共有メモリ・セグメントが存在しない場合は、大きさ  shmsize  (KB) の共有メモリ・セグメントが作られます。すでに存在している場合は、 そのサイズが  shmsize  (KB) よりも小さいとエラーになります。 recvs がサポートしているシリアルポートのデバイスは、Solarisのzshデバイス (/dev/zsh?) およびSolaris上のAurora Technologies社製マルチポート同期 シリアルボードの /dev/hdlcdrv/? デバイスです。

ログファイル名  logfile を指定すると、ここに動作ログがとられ、指定しないとログ情報は標準出力に 送られます。ログファイルは書き込みのたび毎にオープン/クローズされます。

recvs は引数なしで起動すると簡単な使用法を表示します。  

シリアル回線上のデータ形式

recvs が受信することのできる、パケット種別付きデータの形式は 以下のようなものです(詳しくは白山工業「データ変換装置LT8500通信プロトコル」を 見てください)。 データはシリアル回線上を HDLCフレームで伝送されます。

    (1)2バイトの送信局アドレス
    (2)1バイトのパケット番号(0〜255)
    (3)1バイトの「元の」パケット番号(0〜255)
    (4)1バイトのパケット識別コード
    (5)6バイトの時刻ヘッダー(年〜秒、各1バイト、BCD形式)
         西暦年の下2桁(00〜99)、月(01〜12)、日(01〜31)、
         時(00〜23)、分(00〜59)、秒(00〜59)
    (6)データ(win形式の1つまたは複数のチャネルブロック)

です。 (1)は送信局を識別するための番号で、上位バイト、下位バイトの順です。 (2)は送信元が 各パケットにつける、1ずつ増える番号です(255の次は0に戻ります)。 (3)には通常(2)と等しい値が入っていますが、再送パケットの場合には、 (2)には再送要求された元のパケットの番号が入っていて、それが 再送パケットであることを示します。 (4)には、"A1"(短周期データ)、"A2"(長周期データ)、"A8" (データ変換装置設定情報)、"A9"(データ変換装置動作情報)等が あります。 (5)と(6)については winformat(1W) の「秒ブロック」を参照して ください。  

再送プロトコル

送信側は発生したデータを上記の形式で HDLC フレームに入れて 送り出します。受信側はパケット番号を 監視していて、欠落したパケットの番号を送信元に送ることによって、 そのパケットの再送を要求します。 再送要求パケットは、相手の送信局アドレス(2バイト)と再送して欲しい パケット番号を内容とする、データ部分の長さ3バイトのパケットです (上記(1)〜(4)の部分があるのでパケットサイズとしては計8バイトです)。 送信元は再送要求されたパケットを 送り直します。送り側が sends(1W) である場合は、通常の過去最大128パケット まで遡った再送に応えますが、recvs は、通常最大で8パケットまでの連続した 欠落について再送要求します(これを決めるのは N_PACKET です)。
再送要求先は、HDLCデータを受信しているシリアルポートか、 指定されたホスト/UDPポート、またはその両方です。  

共有メモリ上の形式

recvs が共有メモリに書き込むデータは、1秒分ずつのブロック形式で、 パケット種別コードが付いています。 1ブロックの構造は次のようになっています。

    (1)4バイトのブロックサイズ(バイト)
    (2)4バイトの「書き込み時刻」
    (3)1バイトのパケット種別コード
    (4)6バイトの時刻ヘッダー(年〜秒、各1バイト、BCD形式)
         西暦年の下2桁(00〜99)、月(01〜12)、日(01〜31)、
         時(00〜23)、分(00〜59)、秒(00〜59)
    (5)データ(win形式の1つまたは複数のチャネルブロック)

(2)は1970年1月1日0時から数えた秒数で示され、order(1W) が データを時間順に整列させるときに、タイムアウトを設定するのに 利用されます。(3)〜(5)は上記HDLCフレーム中の(4)〜(6)がそれぞれ そのままコピーされたものです。
共有メモリ・セグメント全体の構成、およびその大きさを決める際の 注意事項については、recvt(1W)を参照してください。 なお、recvt(1W) は、連続して受け取ったデータパケットの 時刻が同じである限り共有メモリ上の1つのデータブロックを 拡張していきますが、recvs はそうしません。従って recvs では、 受信したパケットと共有メモリ上のデータブロックは必ず1対1に対応します。  

オプション

-a
Aurora Technologies社製マルチポート同期シリアルボードを利用する。 これを指定しないと、Solarisの標準シリアルポートが使われます。
-s
再送要求パケットをシリアル回線に送る。
-p
再送要求パケットをネットワーク経由でホスト host のUDPポート port へ 送る。
-i
再送要求パケットにセットする、自局アドレス my_ID (0〜65535)を10進数で 設定します。これを指定しないと、0 が使われます。
-b
シリアル回線の内部送信クロックのビットレート rate (bps)を設定します。 これを指定しないと外部クロックが使われます。
 

ソース

`recvs.c'
 

注意事項

recvs が受信して共有メモリに書き込んだ「パケット種別付き」の データを読むことができるのは、sends(1W), sendt_raw(1W) (-a オプション付き), extraw(1W), shmdump(1W)等です。
recvs は Solaris2.Xでのみテストされています。  

関連事項

winformat(1W), recvt(1W), sends(1W), sendt_raw(1W), extraw(1W), shmdump(1W)


 

Index

名称
形式
解説
シリアル回線上のデータ形式
再送プロトコル
共有メモリ上の形式
オプション
ソース
注意事項
関連事項