Hitachi

OpenTP1 Version 7 分散トランザクション処理機能 OpenTP1 プロトコル TP1/NET/OSI-TP編


RECEIVE − メッセージの受信(データ操作言語)

〈このページの構成〉

形式

DATA DIVISION(通信記述項)の指定

CD  通信記述名
   FORINPUT|I-O}
 〔STATUS  KEY  IS  データ名1〕
 〔SYMBOLIC  TERMINAL  IS  データ名2〕
 〔MESSAGE  DATE  IS  データ名3〕
 〔MESSAGE  TIME  IS  データ名4〕
 〔SYNCHRONOUS  MODE  IS {SYNC|ASYNC|データ名6}〕
 〔WAITING  TIME  IS  データ名11〕.

DATA DIVISION(データ記述項)の指定

01  一意名1.
    02  データ名A   PIC 9(4)  COMP.
    02  データ名B   PIC X(2).
    02  データ名C   PIC X(n).

PROCEDURE DIVISION(通信文)の指定

RECEIVE  通信記述名
    〔FIRSTSEGMENT
          INTO 一意名1.

機能

次に示すCALLインタフェースの機能を実現します。

セグメントを受信する領域(一意名1で示す領域)の形式を次に示します。

[図データ]

UAPで値を設定する項目

●FOR 句

次のどちらかの値を設定します。

INPUT

一方送信メッセージの受信

I-O

同期型メッセージの受信

●SYMBOLIC TERMINAL 句

非同期型メッセージ(中間セグメントまたは最終セグメント)の受信,または,同期型メッセージの受信の場合,データ名2に入力元の論理端末名称を設定します。先頭セグメントの受信時に返された論理端末名称を設定してください。論理端末名称は最大8バイトの長さです。8バイトに満たない場合,論理端末名称の後ろを空白で埋めてください。

非同期型メッセージ(先頭セグメント)の受信処理終了後,SYMBOLIC TERMINAL句にはOpenTP1から値が返されます。

●SYNCHRONOUS MODE 句

非同期型でメッセージを受信するか,同期型でメッセージを受信するかを設定します。

SYNC

同期型メッセージの受信

同期型メッセージの受信のとき設定します。

ASYNC

非同期型メッセージの受信

一方送信メッセージの受信のとき設定します。

データ名6

次の値を設定したデータ項目

'1':同期型メッセージの受信

'0'または'△':非同期型メッセージの受信

省略した場合は,ASYNC(非同期型メッセージの受信)が設定されます。

●WAITING TIME句

RECEIVE文を実行してから終了するまでの,最大時間を設定したデータ項目を設定します。同期型メッセージを受信する場合に設定します。

データ名11

監視時間をHHMMSS00(HH:時 MM:分 SS:秒 00は固定)の形式で設定したデータ項目を設定します。指定できる値の範囲は10秒〜10分で,10秒単位です。

省略した場合は,2分を設定します。

注意事項

監視時間の精度は秒単位です。また,タイマ定義(mcfttim -t)のbtimオペランドで指定する時間の間隔でタイムアウトが発生したかどうかを監視しています。このため,設定した監視時間と実際にタイムアウトを検出する時間には秒単位の誤差が生じます。そのため,タイミングによっては,設定した監視時間よりも短い時間で起動することがあります。監視時間が小さくなるほど,誤差の影響を受けやすくなりますので,監視時間は3秒以上の値の設定を推奨します。

●データ名B

MCFで使用する領域です。

●FIRST

先頭セグメントを受信する場合に設定します。

OpenTP1から値が返される項目

●STATUS KEY句

ステータスコードを受け取りたい場合に設定します。省略した場合は,ステータスコードを受け取りません。データ名1にステータスコードが返されます。

●SYMBOLIC TERMINAL句

非同期型メッセージ(先頭セグメント)の受信の場合,入力元の論理端末名称を受け取りたいときに設定します。省略した場合は,論理端末名称を受け取れません。データ名2にメッセージ入力元の論理端末名称が返されます。論理端末名称は最大8バイトの長さです。8バイトに満たない場合,論理端末名称の後ろが空白で埋められます。

中間セグメントまたは最終セグメントを受信する場合は,ここで返された論理端末名称をSYMBOLIC TERMINAL句に設定します。

●MESSAGE DATE句

メッセージを受信した日付を受け取りたい場合に設定します。省略した場合は,メッセージを受信した日付を受け取れません。データ名3にメッセージを受信した日付がYYMMDD(YY:西暦下2けた MM:月 DD:日)の形式で返されます。

●MESSAGE TIME句

メッセージを受信した時刻を受け取りたい場合に設定します。省略した場合は,メッセージを受信した時刻を受け取れません。データ名4にメッセージを受信した時刻がHHMMSS00(HH:時 MM:分 SS:秒 00は固定)の形式で返されます。

●データ名A

受信したセグメントの長さ+4が返されます。

●データ名C

受信したセグメントの内容が返されます。

ステータスコード

ステータスコード

意味

00000

正常に終了しました。

71000

先頭セグメントを受信するRECEIVE文を2回以上実行しています。中間セグメントまたは最終セグメントを受信する場合は,FIRSTを設定しないでRECEIVE文を実行してください。

71001

メッセージの最終セグメントを受信したあとで,次のセグメントを受信するRECEIVE文を実行しています。直前に実行したRECEIVE文でメッセージはすべて受信しました。

このステータスコードが返されたあとに,再びRECEIVE文を実行した場合は,ステータスコード72000が返されます。

71002

メッセージキューからの入力処理中に障害が発生しました。

メッセージキューが閉塞されています。

メッセージキューが割り当てられていません。

MCFが終了処理中のため,メッセージの受信を受け付けられません。

71108

メッセージ受信に必要な管理テーブルが確保できませんでした。

プロセスのローカルメモリが不足しています。

72000

<MHPの実行でリターンした場合>

  • 非同期型メッセージの先頭セグメントを受信するRECEIVE文を実行する前に,中間セグメントまたは最終セグメントを受信するRECEIVE文を実行しています。先頭セグメントを受信する場合は,FIRSTを設定してRECEIVE文を実行してください。

  • ステータスコード71001が返されたあとで,再びRECEIVE文を実行しています。

<SPPの実行でリターンした場合>

SPPでは非同期型メッセージを受信するRECEIVE文を実行できません。

72001

SYMBOLIC TERMINAL 句に設定した論理端末名称が間違っています。

SYMBOLIC TERMINAL句に設定した論理端末名称は,定義されていません。

RECEIVE文を実行できない論理端末を設定しています。

72013

一意名1のサイズを超えるセグメントを受信しました。

一意名1のサイズを超える部分は切り捨てられました。

72016

WAITING 句に設定した値が間違っています。

72020

SYNCHRONOUS MODE句に設定した値が間違っています。

72024

FOR 句に設定した値が間違っています。

72036

データ名Cのサイズが不足しています。5バイト以上の領域を確保してください。

73001

データ名11に60秒を加算した時間が経過しましたが,MCF通信プロセスからの応答がありません。

入力元の論理端末でMCF通信プロセスの内部障害が発生しました。

73005

データ名11に設定した時間が経過しましたが,論理端末からの応答がありません。

73010

入力または出力メッセージの編集UOCで障害が発生しました。

メッセージの読み込み時に障害が発生しました。

73018

データ名11に設定した監視時間が間違っています。

73020

RECEIVE文で設定した論理端末は停止中です。

77350

サービスプリミティブの発行順が間違っています。

サービスプリミティブの連結数が超過しています。

77433

相手からのメッセージによって,ダイアログが未確立になりました。

77436

相手からのメッセージによって,ダイアログを解放中です。

77437

相手からのメッセージによって,ハンドシェイクが応答待ちになりました。

77491

相手からのメッセージによって,エラー処理中です。

上記以外

プログラムの破壊などによる,予期しないエラーが発生しました。