MPC2000 Reference Manual [JAPANESE] [ENGLISH]
【コマンド】   【TCP/IP】
【使い方】
INPUT_TCP

INPUT_TCP 0 a$
INPUT_TCP CH a$
INPUT_TCP 5 EOL|10 c$
INPUT_TCP 3 CHR_C|54 a$
INPUT_TCP 3 TMOUT|10 a$
INPUT_TCP 2 a$
INPUT_TCP 2 CLR_BUF
【書   式】 【機   能】
INPUT_TCP [CH] [EOL|x] [CHR_C|x] [TMOUT|x] a$
INPUT_TCP [CH] CLR_BUF

TCP入力バッファ(TCP_Rn$)より文字列の読み取り
【解   説】
INPUT_TCPは TCP_Rn$より文字列を取り込みます。
nはTCP番号でTCP_R0$〜TCP_R7$の文字列に対応して0〜7までです。
デフォルトでターミネータはCRとなっていますが、EOL|m オプションで変更できます。mにはアスキーコードをセットします。
文字カウント取り込みの場合は、CHR_C|cntオプションを用います。cntは255以内の数値。
なお、対象文字列を読み取り終わると、rse_に6を返し、TCP_Rn$は初期化され、パケット待ち状態になります。

タイムアウトを必要とする場合は、TMOUT|xx オプションを用います。xxには秒単位で制限時間をいれます。
TMOUT|10の場合10秒以内でよみとれない場合は処理を打ち切ります。
タイムアウトしたかどうかは、rse_変数を参照します。rse_が1の場合タイムアウトとなったことを意味します。

CLR_BUFを引数に与えた場合は、バッファの文字列をすべて読み捨て、読み取り文字列のポインタをクリアします。
読み取り処理開始前に"INPUT_TCP [CH] CLR_BUF"の実行が必要です。


実際のTCP機器では、1メッセージ、1応答を守っていない場合もあり、TCP_R0$〜TCP_R7$の文字列処理だけでは対応できない場合があります。
こうした場合に、INPUT_TCPを用います。
次の例は、CR,LFで区切られた不特定数のメッセージが1つのパケットに収納された場合の対応例です。
INPUT_TCPはタイムアウト10秒で動作し、その場合のみDO〜LOOPから抜けます。そうでない場合は、順次メーセージを区切りで取り出し、部をNULLに置き換えます。
1つのパケットからデータを読み切ると、INPUT_TCPは自動的に受信バッファをクリアし次のパケットを受信するため、DO〜LOOPの中でパケットの区切りとは無関係にメッセージを読み出すことができます。
プログラム中の”DUMP C_TCP_MSG$”は切り出されたメッセージの表示のみです。実際には、この行の代わりに必要な処理を記述します。




DO
rse_=0
INPUT_TCP 0 EOL|10 TMOUT|10 C_TCP_MSG$
IF rse_==1 THEN
PRINT "timeout!" : BREAK
END_IF
e=LEN(C_TCP_MSG$)-1
POKE 0 (C_TCP_MSG$+e)
DUMP C_TCP_MSG$
PRINT "rse_" rse_
LOOP
  [LASTMODIFY]2019-09-30 16:59:02 [CREATEDATE]2019-02-26 16:20:44
MPC2000 Reference Manual -R5.11-   (C)2007 ACCEL Corp. all right reserved.