MPC2000 Reference Manual [JAPANESE] [ENGLISH]
【コマンド】   【CUnet】
【使い方】
CU_POST

CU_POST
CU_POST 28
【書   式】 【機   能】
CU_POST [n]|[VOID]

CUnetメールサーバ
【解   説】
CUnetメールサーバー起動コマンドです。
自動的に送られてきたCUnetメールを読み取り、転送命令にしたがってデータをP(n),MBK(n)に格納します。
また、要求にもとづいて(POST -n XXXコマンド)自己データを転送します。

CU_POSTコマンドは引数無しで実行すると、自動的に空きタスクを探しメールサーバを起動します。
引き当てられたタスク番号は、グローバル変数CUM_TASKに反映します。
また、引数を1〜31の間で、与えると、その番号のタスクでメールサーバを起動します。
引数にVOIDを与えるか、指定タスク番号とVOIDをORして与えると、実行状況を表示します。
なお、メールサーパはCTRL_Aによって停止します。

メールサーバの動作状態は以下のグローバル変数で監視することができます。
CUM_ERR(エラーに)ついてはOR更新、CUM_CNT(メールカウンタ)はインクリメント、
そのほかは、受信ごとに最新の値に更新されます。

CUM_TASK CU_POSTサーバの使用タスク番号
CUM_SRC 受信メールの相手アドレス
CUM_PNT 受信メールの種類 1: P(n) 2: MBK(n)
CUM_NUM 受信メールのP(n)もしくはMBK(n)のnの値
CUM_CNT 受信メールごとにインクリメント
CUM_ERR エラー各bitは以下のとおり。
BIT7: MAIL SEND ERROR
BIT6: 転送要求の応答が無い
BIT5: 通信停止
BIT4: 送信タイムアウト不正(通常0)
BIT3: 送信ブロック不正(通常0)
BIT2: 送信タイムアウト発生
BIT1: 送信相手不在
BIT0: 送信相手が受信待機となっていない

このコマンドを使用することにより、PCからMPC側の点データやMBKデータを書き換えたり、参照することができます。
これについては、USB-CUnetの資料を参照ください。

【参考資料】
メールの転送単位は、以下のとおりです。
P(n) 15個 Long型*4
MBK(n) 120個 Word型

メールのパケットは256byteで以下のような構成で最初の16byteをシステムエリアとして以下のように使い分けています。

256buffer= {Num(word)][Ary(byte)][Cmd(byte)][ 12byte reserved ]P(n)〜P(n+14]}

Numは、P(n)、MBK(n)、IN(n)の最初の場所nを示します。

Aryは P(n),Mbk(n),IN(n)の指定で、1でP(n),2でMbk(n)、3はIN(n)となります。
ただし、IN(n)の場合は1byteずつの扱いとなります。
33を指定するとバルク転送となり、一回の通信ですべての実I/O情報を得ることができます。(これはUSB-CUnetでのみ有効)
IN(n)ではnに負の値を指定するとメモリI/O領域を参照します。

Cmdは 引渡しか要求かの区別で、1で要求。2で引渡しです。
*Aryに33,Cmdに2を指定すると、I/Oの一括設定となりますので運用には注意が必要となります。

buffer = {
00 64 01 02 00 00 00 00 00 00 00 00 00 00 00 00 <--- 100番目 01 は、P(n)を示すので P(100)〜 02は相手への書き込み。
00 00 03 E8 00 00 03 E8 00 00 03 E8 00 00 03 E8 <--- P(100)= {1000,1000,1000,1000} *X,Y,Z,Uの順序です。
00 00 27 10 00 00 27 10 00 00 27 10 00 00 03 E8

} 合計256byte

Cmd==2の場合
CU_POSTは、送られてきたメールのAry,Numの値にしたがって自分のエリアにデータを書き込みます。
Cmd==1の場合
CU_POSTは、送られてきたメールのAry,Numの値にしたがって自分のエリアのデータを要求元に送り返します。

【サンプルプログラムについて】
SA2,SA4をそれぞれのMPC-2000システムにロードして実行します。
SA2側で、*xfを実行すると、SA2の点データがSA4に複写されます。(5000点で約30秒)
SA2側で、*rcvを実行すると、SA4の点データがSA2に複写されます。。(5000点で約30秒)
CU_POSTの引数を無くせば実行表示はなくなります。




==SA2==
10 CUNET 2 2 32
20 TIME 5
60 CU_POST VOID|25
65 PRINT CUM_TASK
70 END
80 *xf
90 FOR i=1 TO 5000
100 SETP i i i i i
110 NEXT
120 FOR i=1 TO 5000 STEP 15
130 POST 4 P(i)
140 NEXT
150 END
160 *rcv
170 FOR i=1 TO 5000 STEP 15
180 POST -4 P(i)
190 PRINT i
200 NEXT
#
==SA4==
10 CUNET 4 2 32
20 TIME 5
60 CU_POST
8-31
65 PRINT CUM_TASK
70 END
80 *xf
90 FOR i=1 TO 5000
100 SETP i i i i i
110 NEXT
120 FOR i=1 TO 5000 STEP 15
130 CUM_ERR=0
140 POST 2 P(i)
150 IF CUM_ERR!=0 THEN : PRINT "X_ERR" : END : END_IF
160 NEXT
170 END
180 *rcv
190 FOR i=1 TO 5000 STEP 15
200 POST -2 P(i)
210 PRINT i
220 NEXT
#
  [LASTMODIFY]2011-02-01 15:28:20 [CREATEDATE]2008-10-14 10:08:27
MPC2000 Reference Manual -R5.11-   (C)2007 ACCEL Corp. all right reserved.