Proccess


BIOSプロセスリファレンス


【システムプロセスについて】

 本装置は標準でいくつかのプロセスを搭載しており、接続形態によってはそのまま利用することができます。
 (例えば、ソケットサーバプロセス+シリアルプロセス -> 標準ソケットサーバ)

 一方、システムプロセスおよびBIOSインタフェースを利用したユーザプログラムにより効果的に利用することが可能で、ユーザプログラムの中から本装置が標準的に搭載しているプロセスを呼び出し、メッセージのやり取りをすることが可能となっています。

 ユーザプログラムより呼び出すことのできるシステムプロセスには次のものがあり、各プロセスの名称と機能概要は以下の通りです。

システムプロセス名
プログラム名
機能概要
 FTPサーバプロセス  FtpSv FTPプロトコルのサーバ機能をサポートします。
ユーザプログラムからのデータはメッセージとして本プロセスに渡され、FTPクライアントのコマンド要求により転送されます。
FTPクライアントからのデータは、メッセージとしてユーザプログラムに渡されます。
 ソケットクライアントプロセス  SockCl TCPコネクションを利用したクライアントとして、能動的な接続切断およびデータの送受信をサポートします。
本プロセスは宛先に対して接続を行い、ユーザプログラムとの間でメッセージとして受け渡されるデータを接続先ノードに転送します。
 ソケットサーバプロセス  SockSv TCPコネクションを利用したサーバとして、受動的な接続切断およびデータの送受信をサポートします。
本プロセスはクライアントからの接続要求に対して接続を確立し、ユーザプログラムとの間でメッセージとして受け渡されるデータを接続先ノードに転送します。
 UDPスループロセス  SockUdp UDPを利用したデータの送受信をサポートします。
本プロセスは指定ポートでUDPソケットを作成し、ユーザプログラムとの間でメッセージとして受け渡されるデータを接続先ノードに送信/受信します。
 TELNETサーバプロセス  TelnetSv TELNETプロトコルのサーバ機能をサポートします。
デフォルトではコマンドインタプリタとして動作し、TELNETクライアントからの入力に応じて、プロセスの起動。状態の表示等を行います。
ユーザプログラムからのデータはメッセージとして本プロセスに渡され、TELNETクライアントの画面に表示されます。
 シリアルスループロセス  Serial シリアルインタフェースに対するデータの送受信をサポートします。
本プロセスは動作パラメータで指定されている通信パラメータにより、シリアルを初期化し、ユーザプログラムとの間で、メッセージとして受け渡されるデータの送受信を行います。
 SNMPエージェントプロセス  Snmp SNMPプロトコルのエージェント機能、MIBとしてMIB−Uの一部をサポートします。
ユーザプログラムにより、MIBデータベース自体の追加が可能となります。
SNMPマネージャからユーザ定義MIBへのアクセスがあるとメッセージにて通知、ユーザプログラムからの応答をメッセージにて受け取りSNMP応答を返送します。

【FTPサーバプロセス】

<動作>
 FTPプロトコルのサーバ機能をサポートします。送受信バッファをそれぞれ64キロバイトずつユーザプログラムエリアより確保します。

 FTPクライアントからのログイン時に、動作パラメータで設定されているユーザ名、パスワードを照合します。

 ユーザプログラムからメッセージで受け取ったデータは、クライアントからの取得要求(GET)により転送されます。動作パラメータでファイルターミネータが設定されている場合、データは複数のファイルに分割されます。

 デフォルトのデータ出力先プロセスは「 シリアルスループロセス 」です。ユーザプログラムから「 データ要求 」メッセージにより出力先プロセスを変更することができます。

 ユーザプログラムから、「 サーバオープン要求 」メッセージおよび「 サーバクローズ要求 」メッセージによりFTPサーバのログインユーザ名・パスワードを変更することができます。また、「 状態通知 」メッセージにより、FTPサーバの状態を知ることができます。

 FTPサーバでは以下の動作パラメータを参照します。詳しくは「BLC-200 セットアップマニュアル」を参照して下さい。
       ・自IPアドレス
       ・ユーザ名
       ・パスワード
       ・ファイルターミネータ

 FTPサーバプロセスは「 プログラム実行 」ファンクションで起動されると、動作パラメータの自IPアドレス、ウェルノーウンポート(21番)でLISTENします。またそのときの、ユーザ名とパスワードは動作パラメータの設定値に従います。「 データ要求 」メッセージによりFTPサーバプロセスからのデータを自プロセス宛に変更します。

<メッセージ>
 FTPサーバプロセスは以下のメッセージにより他のプロセスと連動します。
コード
メッセージ名
入出力
内容
MSG_SYSMSG システムメッセージ
Sys->Ftp
FTPサーバのソケットにイベントが発生した時に、システムが通知します。
MSG_PUTFILE
MSG_APPENDFILE
ファイル書込通知・追加/応答
Ftp->Usr
Usr->Ftp
FTPクライアントからPUT、APPENDコマンドを受け付けたときに通知します。
応答メッセージのパラメータにファイル終了通知を省略することができます。ファイル終了通知を省略した場合、FTPクライアントからのデータ受信が終了した時点で正常終了(226)をFTPクライアントに通知します。
MSG_GETFILE ファイル取得要求/応答
Ftp->Usr
Usr->Ftp
FTPクライアントからGETコマンドを受け付けたときに通知します。
MSG_LSTFILE ファイル一覧要求/応答
Ftp->Usr
Usr->Ftp
FTPクライアントからDIR、LSコマンドを受け付けたときに通知します。
ユーザプログラムは応答(ファイル一覧データ)を返す必要があります。
MSG_DELFILE ファイル削除要求
応答
Ftp->Usr
Usr->Ftp
FTPクライアントからDELETEマンドを受け付けたときに通知します。
ユーザプログラムは応答を返す必要があります。
MSG_CH_DIR ディレクトリ変更要求
応答
Ftp->Usr
Usr->Ftp
FTPクライアントからCDコマンドを受け付けたときに通知します。
ユーザプログラムは応答を返す必要があります。
MSG_PUTDATA データ通知
Ftp<->Usr
FTPクライアントから受信したファイルデータを通知します。
入力されたデータはFTPクライアントからの要求により送信します。ユーザプログラム
MSG_ENDFILE ファイル終了通知/応答
Ftp->Usr
Usr->Ftp
FTPクライアントから受信したファイルデータを全て通知した後に出力します。
応答メッセージのパラメータにより、ファイル受信結果をFTPクライアントに送信します。
MSG_GETSTAT 状態取得
Usr->Ftp

Ftp->Usr
Usr->Ftp
ユーザプログラムが「状態通知」が必要な場合に出力します(オプション0/1)。
FTPクライアントからSTATコマンドを受け付けたときに通知します(オプション2)。ユーザプログラムは「状態通知」で応答します。
MSG_PUTSTAT 状態通知
Ftp->Usr

Ftp->Usr
Usr->Ftp
ユーザプログラムから「状態取得」(オプション0/1)を受けているいる場合出力します。
本プロセスから「状態取得」(オプション2)を受けたら応答として出力します。
MSG_GETDATA データ要求
Usr->Ftp
FTPクライアントからの受信データの通知先プロセスを変更(自プロセス)します。
MSG_SVOPEN サーバオープン要求
Usr->Ftp
FTPサーバのリッスンソケットをオープンします。
オープンされているか、FTPクライアントから接続されている場合は「状態エラー」メッセージを要求元プロセスに通知します。
MSG_SVCLOSE サーバクローズ要求
Usr->Ftp
FTPサーバの全てのソケットをクローズします。
MSG_CONNECTED 接続完了通知
Ftp->Usr
FTPクライアントから接続されたとき通知します。
(ユーザプログラムから「状態取得」要求が登録されている場合に限ります。)
MSG_SVOPENED サーバオープン通知
Ftp->Usr
FTPサーバのリッスンソケットがオープンしたとき通知します。
(ユーザプログラムから「状態取得」要求が登録されている場合に限ります。)
MSG_SVCLOSED サーバクロース通知
Ftp->Usr
FTPサーバの全てのソケットがクローズしたとき通知します。
(ユーザプログラムから「状態取得」要求が登録されている場合に限ります。)
MSG_BUFFULL バッファ満杯通知
Usr<->Ftp
FTPサーバの持つ64キロバイトの送信データバッファが一杯になったときに通知します。
「バッファレディ通知」メッセージが通知されるまで「データ通知」メッセージを出力しないようにして下さい。
本メッセージが入力されると「バッファレディ通知」メッセージが入力されるまで、「データ通知」メッセージの出力は行いません。
MSG_BUFREADY バッファレディ通知
Usr<->Ftp
「バッファ満杯通知」メッセージが出力された後、FTPサーバの送信データバッファが空になったときに通知します。
本メッセージが入力されると、「データ通知」メッセージの出力を再開します。
MSG_PUTLOG ログ通知
Ftp->Tel
内部状態が変化したとき、コマンドの入力およびレスポンスの送信が行なわれたとき通知します。

<使用例>
 void ftp_execute(void)  /* FTPサーバプロセスの実行 */
 {
   char     prog[13];
   int      ftp_pid;
   TMsg     Smsg;

   memcpy((void *)&prog,(void *)&"FtpSv",6ul);
   ftp_pid = Exec(prog);
     /* Smsg 編集 MSG_GETDATA データ通知先プロセスを自プロセスに設定 */
   PutMsg(Smsg);*/
     /* Smsg 編集 MSG_GETSTAT 状態変化通知を要求(必要であれば) */
   PutMsg(Smsg);*/
 }

 void main(aPid)     /* FTPサーバプロセスからのメッセージ処理 */
 {
   TMsg     Rmsg;

     /* 初期化処理 */
   while(1) {
     /* ユーザ処理 */
     if(TimeWait(10) != 0 ) {
       GetMsg(&Rmsg);
       switch(Rmsg.cmd) {
         case MSG_SYSMSG:
           /* シリアル処理 */
           break;
        /* FTP PUT APPEND関連処理 */
         case MSG_PUTFILE:
         case MSG_APPENDFILE:
           /* メッセージ応答処理 MSG_RESPONSE+cmd 受け付けるとMSG_PUTDATAが来る */
           break;
         case MSG_PUTDATA:
           /* データ受信処理 */
           break;
         case MSG_ENDFILE:
           /* データ終了処理 メッセージ応答処理 MSG_RESPONSE+cmd/MSG_ERROR */
           break;
        /* FTP GET関連処理 */
         case MSG_GETFILE:
           /* メッセージ応答処理  ファイルサイズを応答し、MSG_PUTDATAでデータを送る */
           break;
        /* FTP DIR LS DELETE CD関連処理 */
         case MSG_LSTFILE:
         case MSG_DELFILE:
         case MSG_CH_DIR:
           /* メッセージ応答処理 MSG_RESPONSE+cmd */
           break;
        /* FTP STAT関連処理 */
         case MSG_GETSTAT:
           /* メッセージ応答処理 MSG_REQUEST+MSG_PUTSTAT */
           break;
        /* FTP フロー制御関連処理 */
         case MSG_BUFFULL:
           /* MSG_PUTDATAの送信を停止する処理 */
           break;
         case MSG_BUFREADY:
           /* MSG_PUTDATAの送信を再開する処理 */
           break;
        /* FTP 状態変化関連処理 */
         case MSG_CONNECTED:
         case MSG_SVOPEND:
         case MSG_SVCLOSED:
           /* 状態変化通知を受け取る処理 */
           break;
        /* エラーメッセージ処理 */
         default:
           if(Rmsg.prmlen > 4) Free(Rmsg.prm);
           Rmsg.dest = Rmsg.src;
           Rmsg.src = (short)aPid;
           Rmsg.rqrs = MSG_ERROR;
           Rmsg.prmlen = (Word)4;
           Rmsg.prm = (char **)(int)Rmsg.cmd;
           Rmsg.cmd = ERR_MSGCMD;
           PutMsg(&Rmsg);
           break;
       }
 }

【ソケットクライアントプロセス】

<動作>
 TCPのクライアントソケットを使用してデータの送受信を行います。

 本プロセスは動作パラメータで指定されている宛先IPアドレス、宛先ポート番号に対して接続を行いデータの送受信を待ちます。デフォルトのデータ出力先プロセスは「 シリアルスループロセス 」です。

 ユーザプログラムからメッセージで受け取ったデータは、そのまま接続ソケットから接続先へ送信されます。接続が確立されていないときにデータを受け取った場合、ソケットの接続動作を開始し「 バッファ満杯通知 」メッセージを返します。接続が確立されたときに、「 バッファレディ通知 」メッセージを出力します。

 接続ソケットから受信したデータは、そのまま出力先プロセスへメッセージで受け渡されます。

 ユーザプログラムから、「 接続要求 」メッセージおよび「 切断要求 」メッセージによりソケットの接続をコントロールすることができます。また、「 状態取得 」メッセージにより、接続状態を知ることができます。

 ソケットクライアントクライアントでは以下の動作パラメータを参照します。詳しくは「BLC-200 セットアップマニュアル」を参照して下さい。
       ・自IPアドレス
       ・自ポート番号
       ・宛先IPアドレス
       ・宛先ポート番号
       ・クライアント接続契機
       ・無通信監視タイマ
  クライアント接続契機は「0」に設定して下さい。「1」に設定すると常時接続動作を行ないます。
  無通監視タイマが「0」の場合は監視を行いません。「0」以外の場合はタイムアウトで切断します。

 ソケットクライアントプロセスは「 プログラム実行 」ファンクションで起動されると、未接続状態となります。(クライアント接続契機「0」)「 状態取得 」メッセージ、「 データ要求 」メッセージ、「 接続要求 」メッセージを発行して接続して下さい。

<メッセージ>
 ソケットクライアントプロセスは以下のメッセージにより他のプロセスと連動します。
コード
メッセージ名
入出力
内容
MSG_SYSMSG システムメッセージ
Sys->Scl
ソケットクライアントのソケットにイベントが発生した時に、システムが通知します。
MSG_PUTDATA データ通知
Usr<->Scl
ソケットクライアントから受信したデータを通知します。
入力されたデータはソケットの接続先に送信します。
MSG_GETSTAT 状態取得
Usr->Scl
ユーザプログラムが「状態通知」が必要な場合に出力します(オプション0/1)。
ソケットクライアントの状態が変化したときに、「状態通知」メッセージが出力されます。
MSG_GETDATA データ要求
Usr->Scl
ソケットからの受信データの通知先プロセスを変更します。
MSG_CONNECT 接続要求
Usr->Scl
指定された宛先に接続します。
MSG_CONNCLOSE 切断要求
Usr->Scl
接続されているソケットをクローズします。
MSG_CONNECTED 接続完了通知
Scl->Usr
宛先に接続できたとき通知します。
(ユーザプログラムから「状態取得」要求が登録されている場合に限ります。)
MSG_CONNCLOSED 切断完了通知
Scl->Usr
接続が切れたとき通知します。
(ユーザプログラムから「状態取得」要求が登録されている場合に限ります。)
MSG_BUFFULL バッファ満杯通知
Usr<->Scl
ソケットの4キロバイトの送信バッファが一杯になったときに通知します。「バッファレディ通知」メッセージ が通知されるまで「データ通知」メッセージしないようにして下さい。
本メッセージが入力されると、「バッファレディ通知」が入力されるまで、「データ通知」メッセージを出力しなくなります。
MSG_BUFREADY バッファレディ通知
Usr<->Scl
「バッファ満杯通知」を出力した後、ソケットの送信バッファが空になったときに通知します。
本メッセージが入力されると、「データ通知」メッセージの出力を再開します。
MSG_PUTLOG ログ通知
Scl->Tel
内部状態が変化したとき、コマンドの入力およびレスポンスの送信が行なわれたとき通知します。

<使用例>
 void scl_execute(void)  /* ソケットクライアントプロセスの実行 */
 {
   char     prog[13];
   int      scl_pid;
   TMsg     Smsg;

   memcpy((void *)&prog,(void *)&"SockCl",7ul);
   scl_pid = Exec(prog);
     /* Smsg 編集 MSG_GETDATA データ通知先プロセスを自プロセスに設定 */
   PutMsg(Smsg);*/
     /* Smsg 編集 MSG_GETSTAT 状態変化通知を要求(必要であれば) */
   PutMsg(Smsg);*/
     /* Smsg 編集 MSG_CONNECT 接続要求(ここで必要であれば) */
   PutMsg(Smsg);*/
 }

 void main(aPid)     /*ソケットクライアントプロセスからのメッセージ処理 */
 {
   TMsg     Rmsg;

     /* 初期化処理 */
   while(1) {
     /* ユーザ処理 */
     if(TimeWait(10) != 0 ) {
       GetMsg(&Rmsg);
       switch(Rmsg.cmd) {
         case MSG_SYSMSG:
           /* シリアル処理 */
           break;
        /* ソケットクライアント受信連処理 */
         case MSG_PUTDATA:
           /* データ受信処理 */
           break;
        /* ソケットクライアント フロー制御関連処理 */
         case MSG_BUFFULL:
           /* MSG_PUTDATAの送信を停止する処理 */
           break;
         case MSG_BUFREADY:
           /* MSG_PUTDATAの送信を再開する処理 */
           break;
        /* ソケットクライアント 状態変化関連処理 */
         case MSG_CONNECTED:
         case MSG_CONNCLOSED:
           /* 状態変化通知を受け取る処理 */
           break;
        /* エラーメッセージ処理 */
         default:
           if(Rmsg.prmlen > 4) Free(Rmsg.prm);
           Rmsg.dest = Rmsg.src;
           Rmsg.src = (short)aPid;
           Rmsg.rqrs = MSG_ERROR;
           Rmsg.prmlen = (Word)4;
           Rmsg.prm = (char **)(int)Rmsg.cmd;
           Rmsg.cmd = ERR_MSGCMD;
           PutMsg(&Rmsg);
           break;
       }
 }

【ソケットサーバプロセス】

<動作>
 TCPのサーバソケットを使用してデータの送受信を行います。

 本プロセスは動作パラメータで指定されている自IPアドレス、自ポート番号でサーバソケットを作成し、クライアントからの接続要求を待ちます。接続要求を受け付けると、サーバソケットをクローズし、データの送受信を待ちます。デフォルトのデータ出力先プロセスは「 シリアルスループロセス 」です。

 ユーザプログラムからメッセージで受け取ったデータは、そのまま接続ソケットから接続先へ送信されます。接続が確立されていないときにデータを受け取った場合、「 状態エラー 」メッセージを返します。

 接続ソケットから受信したデータは、そのまま出力先プロセスへメッセージで受け渡されます。

 ユーザプログラムから、「 サーバオープン要求 」メッセージおよび「 サーバクローズ要求 」メッセージによりサーバソケットをコントロールすることができます。また、「 状態通知 」メッセージにより、サーバの状態を知ることができます。

 ソケットサーバでは以下の動作パラメータを参照します。詳しくは「BLC-200 セットアップマニュアル」を参照して下さい。
       ・自IPアドレス
       ・自ポート番号

 ソケットサーバプロセスは「 プログラム実行 」ファンクションで起動されると、動作パラメータで指定されているポート番号でリッスンポートをオープンします。「 状態取得 」メッセージ、「 データ要求 」メッセージを発行して下さい。
 また、「 サーバクローズ要求 」メッセージでクローズして、「 サーバオープン要求 」メッセージにてリッスンポート番号を変更することができます。

<メッセージ>
 ソケットサーバプロセスは以下のメッセージにより他のプロセスと連動します。
コード
メッセージ名
入出力
内容
MSG_SYSMSG システムメッセージ
Sys->Ssv
ソケットサーバのソケットにイベントが発生した時に、システムが通知します。
MSG_PUTDATA データ通知
Usr<->Ssv
ソケットから受信したデータを通知します。
入力されたデータはソケットの接続先に送信します。
MSG_GETSTAT 状態取得
Usr->Ssv
ユーザプログラムが「状態通知」が必要な場合に出力します(オプション0/1)。
ソケットサーバの状態が変化したときに、「状態通知」メッセージが出力されます。
MSG_GETDATA データ要求
Usr->Ssv
ソケットからの受信データの通知先プロセスを変更します。
MSG_SVOPEN サーバオープン要求
Usr->Ssv
ソケットサーバのリッスンソケットをオープンします。
オープンされているか、クライアントから接続されている場合はエラーを要求元プロセスに通知します。
MSG_SVCLOSE サーバクローズ要求
Usr->Ssv
ソケットサーバのソケットをクローズします。
MSG_CONNECTED 接続完了通知
Ssv->Usr
クライアントから接続されたとき通知します。
(ユーザプログラムから「状態取得」要求が登録されている場合に限ります。)
MSG_SVOPENED サーバオープン通知
Ssv->Usr
ソケットサーバのリッスンソケットがオープンしたとき通知します。
(ユーザプログラムから「状態取得」要求が登録されている場合に限ります。)
MSG_SVCLOSED サーバクロース通知
Ssv->Usr
ソケットサーバのソケットがクローズしたとき通知します。
(ユーザプログラムから「状態取得」要求が登録されている場合に限ります。)
MSG_BUFFULL バッファ満杯通知
Usr<->Ssv
ソケットの4キロバイトの送信バッファが一杯になったときに通知します。「バッファレディ通知」メッセージが通知されるまで「データ通知」メッセージを出力しないようにして下さい。
本メッセージが入力されると、「バッファレディ通知」メッセージが入力されるまで、「データ通知」メッセージを出力しなくなります。
MSG_BUFREADY バッファレディ通知
Usr<->Ssv
「バッファ満杯通知」を出力した後、ソケットの送信バッファが空になったときに通知します。
本メッセージが入力されると、「データ通知」メッセージの出力を再開します。
MSG_PUTLOG ログ通知
Ssv->Tel
内部状態が変化したとき、コマンドの入力およびレスポンスの送信が行なわれたとき通知します。

<使用例>
 void ssv_execute(void)  /* ソケットサーバプロセスの実行 */
 {
   char     prog[13];
   int      ssv_pid;
   TMsg     Smsg;

   memcpy((void *)&prog,(void *)&"SockSv",7ul);
   ssv_pid = Exec(prog);
     /* Smsg 編集 MSG_GETDATA データ通知先プロセスを自プロセスに設定 */
   PutMsg(Smsg);*/
     /* Smsg 編集 MSG_GETSTAT 状態変化通知を要求(必要であれば) */
   PutMsg(Smsg);*/
 }

 void main(aPid)     /*ソケットサーバプロセスからのメッセージ処理 */
 {
   TMsg     Rmsg;

     /* 初期化処理 */
   while(1) {
     /* ユーザ処理 */
     if(TimeWait(10) != 0 ) {
       GetMsg(&Rmsg);
       switch(Rmsg.cmd) {
         case MSG_SYSMSG:
           /* シリアル処理 */
           break;
        /* ソケットサーバ受信連処理 */
           break;
         case MSG_PUTDATA:
           /* データ受信処理 */
           break;
        /* ソケットサーバ フロー制御関連処理 */
         case MSG_BUFFULL:
           /* MSG_PUTDATAの送信を停止する処理 */
           break;
         case MSG_BUFREADY:
           /* MSG_PUTDATAの送信を再開する処理 */
           break;
        /* ソケットサーバ 状態変化関連処理 */
         case MSG_CONNECTED:  /* MSG_GETSTATを発行しておくと接続されるとこのメッセージが来ます 
         case MSG_SVOPENED:
         case MSG_SVCLOSED:
           /* 状態変化通知を受け取る処理 */
           break;
        /* エラーメッセージ処理 */
         default:
           if(Rmsg.prmlen > 4) Free(Rmsg.prm);
           Rmsg.dest = Rmsg.src;
           Rmsg.src = (short)aPid;
           Rmsg.rqrs = MSG_ERROR;
           Rmsg.prmlen = (Word)4;
           Rmsg.prm = (char **)(int)Rmsg.cmd;
           Rmsg.cmd = ERR_MSGCMD;
           PutMsg(&Rmsg);
           break;
       }
 }

【UDPスループロセス】

<動作>
 UDPのソケットを使用してデータの送受信を行います。

 本プロセスは動作パラメータで指定されている自IPアドレス、自ポート番号でUDPソケットを作成し、データの送受信を待ちます。デフォルトのデータ出力先プロセスは「 シリアルスループロセス 」です。

 ユーザプログラムからメッセージで受け取ったデータは、そのままUDPソケットから宛先へ送信されます。
 UDPソケットから受信したデータは、そのまま出力先プロセスへメッセージで受け渡されます。

 ユーザプログラムから、「 サーバオープン要求 」メッセージおよび「 サーバクローズ要求 」メッセージによりUDPソケットをコントロールすることができます。また、「 状態通知 」メッセージにより、状態を知ることができます。

 本プロセスは「 バッファ満杯通知 」メッセージ、「 バッファレディ通知 」メッセージは発行しません。ユーザプログラムから、「 データ通知 」メッセージを受け取ると、その時点でLAN回線に送信します。
 本プロセスに「 バッファ満杯通知 」メッセージを発行した場合、システムのUDPソケットの受信キューからの取り出しは停止しますが、UDPプロトコル上でフロー制御は不可能なため、ユーザプログラムの処理が間に合わない場合は、UDPパケットが消滅する場合があります。

 UDPスルーでは以下の動作パラメータを参照します。詳しくは「BLC-200 セットアップマニュアル」を参照して下さい。
       ・自IPアドレス
       ・自ポート番号
       ・宛先IPアドレス
       ・宛先ポート番号
       ・USER001.cfg(ユーザパラメータファイル)

 UDPスループロセスは「 プログラム実行 」ファンクションで起動されると、動作パラメータで設定されている自ポート番号でUDPソケットを作成します。UDP送信は、動作パラメータに設定されている宛先IPアドレスおよび、USER001.cfgに設定されている宛先IPアドレス、ポート番号の複数に同一データが送信されます。USER001.cfgファイルの設定が無い場合は、動作パラメータの宛先のみになります。UDP受信データは、登録されている宛先IPからの受信のみを許可します。ただし、ブロードキャストアドレスが設定されている場合は、全ての受信を許可し、IPブロードキャストアドレスが設定されている場合は、ネットワークアドレス(255でない部分)グループからの受信を許可します。
 また、「 サーバオープン要求 」メッセージにて自ポート番号の変更、宛先アドレスの指定方法を変更することができます。
   「 サーバオープン要求 」メッセージの動作モードで2を指定した場合、「 データ通知 」メッセージを発行する際に宛先アドレスの設定が必要になります。送信するデータの先頭6バイトに設定して下さい。
   また「 データ通知 」メッセージを出力する際、データの先頭6バイトに送信元アドレスを設定しています。

<メッセージ>
 UDPスループロセスは以下のメッセージにより他のプロセスと連動します。
コード
メッセージ名
入出力
内容
MSG_SYSMSG システムメッセージ
Sys->Udp
UDPソケットにイベントが発生した時に、システムが通知します。
MSG_PUTDATA データ通知
Usr<->Udp
UDPソケットから受信したデータを通知します。
入力されたデータはUDPソケットから送信します。
MSG_GETSTAT 状態取得
Usr->Udp
UDPソケットの状態が変化したときに、通知メッセージが出力されます。
MSG_GETDATA データ要求
Usr->Udp
UDPソケットからの受信データの通知先プロセスを変更します。
MSG_SVOPEN サーバオープン要求
Usr->Udp
UDPソケットをバインドします。
バインドされている場合でも処理を行います。
MSG_SVCLOSE サーバクローズ要求
Usr->Udp
UDPソケットをクローズします。
MSG_SVOPENED サーバオープン通知
Udp->Usr
UDPソケットがバインドされたとき通知します。
(ユーザプログラムから「状態取得」要求が登録されている場合に限ります。)
MSG_SVCLOSED サーバクローズ通知
Udp->Usr
UDPソケットがクローズされたとき通知します。 (ユーザプログラムから「状態取得」要求が登録されている場合に限ります。)
MSG_BUFFULL バッファ満杯通知
Usr->Udp
本メッセージが入力されると、「バッファレディ通知」メッセージが入力されるまでUDPソケットからのデータ受信、および「データ通知」メッセージの出力を停止します。
MSG_BUFREADY バッファレディ通知
Usr->Udp
本メッセージが入力されると、UDPソケットからの受信および「データ通知」メッセージの出力を再開します。
MSG_PUTLOG ログ通知
Udp->Tel
内部状態が変化したとき、コマンドの入力およびレスポンスの送信が行なわれたとき通知します。

<使用例>
 void udp_execute(void)  /* UDPスループロセスの実行 */
 {
   char     prog[13];
   int      udp_pid;
   TMsg     Smsg;

   memcpy((void *)&prog,(void *)&"SockUdp",8ul);
   udp_pid = Exec(prog);
     /* Smsg 編集 MSG_GETDATA データ通知先プロセスを自プロセスに設定 */
   PutMsg(Smsg);*/
     /* Smsg 編集 MSG_GETSTAT 状態変化通知を要求(必要であれば) */
   PutMsg(Smsg);*/
     /* Smsg 編集 MSG_SVOPEN 再度BINDを要求(必要であれば) */
   PutMsg(Smsg);*/
 }

 void main(aPid)     /* UDPスループロセスからのメッセージ処理 */
 {
   TMsg     Rmsg;

     /* 初期化処理 */
   while(1) {
     /* ユーザ処理 */
     if(TimeWait(10) != 0 ) {
       GetMsg(&Rmsg);
       switch(Rmsg.cmd) {
         case MSG_SYSMSG:
           /* シリアル処理 */
           break;
        /* UDP 受信連処理 */
         case MSG_PUTDATA:
           /* データ受信処理 */
           break;
        /* UDP 状態変化関連処理 */
         case MSG_SVOPENED:
         case MSG_SVCLOSED:
           /* 状態変化通知を受け取る処理 */
           break;
        /* エラーメッセージ処理 */
         default:
           if(Rmsg.prmlen > 4) Free(Rmsg.prm);
           Rmsg.dest = Rmsg.src;
           Rmsg.src = (short)aPid;
           Rmsg.rqrs = MSG_ERROR;
           Rmsg.prmlen = (Word)4;
           Rmsg.prm = (char **)(int)Rmsg.cmd;
           Rmsg.cmd = ERR_MSGCMD;
           PutMsg(&Rmsg);
           break;
       }
 }

【TELNETサーバプロセス】

<動作>
 TELNETプロトコルのサーバ機能の一部をサポートします。通常動作モードで起動した場合、複数のTELNETクライアントからの接続を受付ます。同時に接続できるTELNETクライアントの本数は8本です。

 TELNETクライアントからのログイン時に、動作パラメータのユーザ名、パスワードを照合します。

 ユーザプログラムからメッセージで受け取ったデータは、そのまま最初に接続されたTELNETクライアントに送信されます。接続が確立されていないときにデータを受け取った場合、「 状態エラー 」メッセージを返します。

 TELNETクライアントからのデータは、本プロセスのコマンドインタプリタへの入力になります。従いましてTELNETクライアントからの任意のデータをユーザプログラムへ通知することは行いません。
 本プロセスはユーザプログラムをデバッグするための代わり使用することが可能です。

 ユーザプログラムから、「サーバオープン要求」メッセージおよび「サーバクローズ要求」メッセージによりTELNETサーバの制御が可能です。また、「状態通知」メッセージによりTELNETサーバの状態を知ることができます。

 TELNETサーバでは以下の動作パラメータを参照します。詳しくは「BLC-200 セットアップマニュアル」を参照して下さい。
       ・自IPアドレス
       ・ユーザ名
       ・パスワード

 TELNETサーバプロセスは「 プログラム実行 」ファンクションで起動されると、23ポート番号でリッスンソケットを作成します。
 「 サーバオープン要求 」メッセージにてコネクションの制御が可能です。

<サポートコマンド>
 TELNETサーバプロセスはTELNETクライアントからの入力として以下のコマンドをサポートします。コマンドの大文字・小文字の区別はありません。
コマンド
内容
フォーマット
EX
プログラムを起動します。 EX プログラム名
LS
格納プログラム一覧を表示します。 LS [-l] [-a]
PS
実行中プログラム一覧を表示します。 PS
KL
実行中のプログラムを停止します。 KL プログラム名
ST
装置の状態情報を表示します。 ST
MD
装置の内部メモリをダンプします。 MD [開始アドレス [b/w/l]]
TR
トレースモードに入ります。 TR [プロセスID1 プロセスID2---]
QT
TELNETの接続を切断します。 QT

<メッセージ>
 TELNETサーバプロセスは以下のメッセージにより他のプロセスと連動します。
コード
メッセージ名
入出力
内容
MSG_SYSMSG システムメッセージ
Sys->Tel
TELNETサーバのソケットにイベントが発生した時に、システムが通知します。
MSG_PUTDATA データ通知
Usr->Tel
入力されたデータはTELNETサーバの最初の接続先に送信します。
MSG_PUTSTAT 状態要求
TELNETサーバプロセスが出力した「状態SYUTOKUさーなteソケットクライアントの状態が変化したときに、通知メッセージが出力されます。
MSG_GETSTAT 状態取得
Usr->Tel
TELNETクライアントの状態が変化したときに、「状態通知」メッセージが出力されます。
MSG_SVOPEN サーバオープン要求
Usr->Tel
TELNETサーバのリッスンソケットをオープンします。
オープンされてるか、TELNETクライアントから接続されている場合は「状態エラー」メッセージを要求元に通知します。
MSG_SVCLOSE サーバクローズ要求
Usr->Tel
ソケットサーバの全てのソケットをクローズします。
MSG_CONNECTED 接続完了通知
Tel->Usr
TELNETクライアントから接続されたとき通知します。
(ユーザプログラムから「状態取得」要求が登録されている場合に限ります。)
MSG_SVOPENED サーバオープン通知
Tel->Usr
TELNETサーバのリッスンソケットがオープンしたときに通知します。
(ユーザプログラムから「状態取得」要求が登録されている場合に限ります。)
MSG_SVCLOSED サーバクローズ通知
Tel->Usr
TELNETサーバの全てのソケットがクローズしたときに通知します。
(ユーザプログラムから「状態取得」要求が登録されている場合に限ります。)
MSG_BUFFULL バッファ満杯通知
Tel<->Usr
ソケットの4キロバイトの送信バッファが一杯になったときに通知します。「バッファレディ通知」メッセージが通知されるまで「データ通知」メッセージを出力しないようにして下さい。
本メッセージが入力されると、「バッファレディ通知」メッセージが入力されるまで、「データ通知」メッセージを出力しなくなります。
MSG_BUFREADY バッファレディ通知
Tel<->Usr
「バッファ満杯通知」を出力した後、ソケットの送信バッファが空になったときに通知します。
本メッセージが入力されると、「データ通知」メッセージの出力を再開します。
MSG_PUTLOG ログ通知
Usr->Tel
入力された情報をトレースモードのTELNETクライアントに送信します。

<使用例>
 void telnet_execute(void)  /* TELNETサーバプロセスの実行 */
 {
   char     prog[13];
   int      tel_pid;
   TMsg     Smsg;

   memcpy((void *)&prog,(void *)&"TelnetSv",9ul);
   udp_pid = Exec(prog);
     /* Smsg 編集 MSG_GETSTAT 状態変化通知を要求(必要であれば) */
   PutMsg(Smsg);*/
 }

 TELNETサーバプロセスから「 データ通知 」メッセージが送られてくることはありません。
 以下のような処理にてデバッグプログラムがらTELNETプロンプトにメッセージを送ります。
 {
   TMsg     Smsg;

     /* Smsg 編集 MSG_PUTDATA デバッグ情報を入れます */
   PutMsg(Smsg);*/
 }

【シリアルスループロセス】

<動作>
 シリアルインタフェースに対するデータの送受信を行います。

 本プロセスは動作パラメータで指定されている通信パラメータによりシリアルを初期化し、データの送受信を待ちます。また、ソケットクライアント→ソケットサーバ→FTPサーバの順にプロセスが起動されているか否かを調べ、受信データの出力先プロセスを決定します。

 ユーザプログラムからメッセージで受け取ったデータは、そのままシリアルインタフェースに出力します。

 シリアルインタフェースから受信したデータは、そのまま出力先プロセスへメッセージで受け渡されます。動作パラメータのレコードターミネータが設定されている場合、受け渡されるデータはレコード単位に区切られます。

 シリアルスルーでは以下の動作パラメータを参照します。詳しくは「BLC-200 セットアップマニュアル」を参照して下さい。
       ・シリアル通信パラメータ
       ・レコードターミネータ

 本プロセスは「 プログラム実行 」ファンクションで起動されると、動作パラメータで指定の設定されているパラメータでシリアルをオープンします。
 「 データ要求 」メッセージにて通知先プロセスを変更して下さい。

<メッセージ>
 本プロセスは以下のメッセージにより他のプロセスと連動します。
コード
メッセージ名
入出力
内容
MSG_SYSMSG システムメッセージ
Sys->232
シリアルの受信バッファにデータが存在するとき、システムが通知します。
MSG_PUTDATA データ通知
232<->Usr
シリアルから受信したデータを通知します。
入力されたデータはシリアルへ出力します。
MSG_GETDATA データ要求
Usr->232
シリアルインタフェースからの受信データの通知先プロセスを変更します。
MSG_GETSTAT 状態取得
Usr->232
状態通知が入力されると、制御線状態と送受信バッファのデータ量を「状態通知」メッセージで返します。
MSG_PUTSTAT 状態通知
232->Usr
制御線情報と送受信バッファのデータ量を出力します。
MSG_BUFFULL バッファ満杯通知
Usr<->232
シリアルの64キロバイトの送信バッファが一杯になったときに通知します。「バッファレディ通知」メッセージが通知されるまで「データ通知」メッセージをしないようにして下さい。
本メッセージが入力されると、「バッファレディ通知」メッセージが入力されるまで、「データ通知」メッセージを出力しなくなります。
MSG_BUFREADY バッファレディ通知
Usr<->232
「バッファ満杯通知」を出力した後、シリアルの送信バッファが空になったときに通知します。
本メッセージが入力されると、「データ通知」メッセージの出力を再開します。

<使用例>
 void rs_execute(void)  /* シリアルスループロセスの実行 */
 {
   char     prog[13];
   int      rs_pid;
   TMsg     Smsg;

   memcpy((void *)&prog,(void *)&"Serial",7ul);
   rs_pid = Exec(prog);
     /* Smsg 編集 MSG_GETDATA データ通知先プロセスを自プロセスに設定 */
   PutMsg(Smsg);*/
 }

 void main(aPid)     /* シリアルスループロセスからのメッセージ処理 */
 {
   TMsg     Rmsg;

     /* 初期化処理 */
   while(1) {
     /* ユーザ処理 */
     if(TimeWait(10) != 0 ) {
       GetMsg(&Rmsg);
       switch(Rmsg.cmd) {
         case MSG_SYSMSG:
           /* ソケット処理 */
           break;
        /* シリアル 受信処理 */
         case MSG_PUTDATA:
           /* データ受信処理 */
           break;
        /* シリアル フロー制御処理 */
         case MSG_BUFFULL:
           /* MSG_PUTDATAの送信を停止する処理 */
           break;
         case MSG_BUFREADY:
           /* MSG_PUTDATAの送信を再開する処理 */
           break;
        /* エラーメッセージ処理 */
         default:
           if(Rmsg.prmlen > 4) Free(Rmsg.prm);
           Rmsg.dest = Rmsg.src;
           Rmsg.src = (short)aPid;
           Rmsg.rqrs = MSG_ERROR;
           Rmsg.prmlen = (Word)4;
           Rmsg.prm = (char **)(int)Rmsg.cmd;
           Rmsg.cmd = ERR_MSGCMD;
           PutMsg(&Rmsg);
           break;
       }
 }

【SNMPエージェントプロセス】

<動作>
 SNMPのソケット(コマンド受信用、トラップ送信用)を使用してSNMPの要求の受信、SNMPの応答、TRAPの送信を行います。

 本プロセスは動作パラメータで指定されているSNMP設定を有効にしておく必要があります。

 動作パラメータで指定されている自IPアドレス、自ポート番号でUDPソケットを作成し、データの送受信を待ちます。デフォルトの受信データの出力先はありません。「 SNMPアプリ登録 」ファンクションで登録されたプロセスを出力先とします。

 SNMPマネージャから受信したSNMPコマンドパケットを解析して、カーネルの管理するMIB以外へのアクセスの場合ユーザプログラムへメッセージを送ります。
 ユーザプログラムからの応答メッセージを受けてSNMP応答パケットを組み立てて応答します。
 ユーザプログラムからのトラップ要求メッセージにより、指定された宛先にSNMPトラップパケットを送信します。

 SNMPエージェントでは以下の動作パラメータを参照します。詳しくは「BLC-200 セットアップマニュアル」を参照して下さい。
       ・SNMP設定
       ・自IPアドレス
       ・自ポート番号
       ・トラップ送信先IPアドレス
       ・Contact
       ・Name
       ・Location
       ・TRAP設定

 SNMPエージェントプロセスの起動は動作パラメータの「SNMP設定」を有効にすることで行います。
 起動された時点でSNMPエージェントは動作しますが、カーネル実装MIBしか対象になっていません。

 「 SNMPアプリ登録 」ファンクションによりユーザプログラムと連結されます。

<メッセージ>
 SNMPエージェントプロセスは以下のメッセージにより他のプロセス(SNMPのプライベートMIBなどを管理するエージェントプロセス)と連動します。
コード
メッセージ名
入出力
内容
MSG_SYSMSG システムメッセージ
Sys->Snmp
SNMPソケットにイベントが発生した時に、システムが通知します。
MSG_GETREQ GET-REQUEST要求
Snmp->Usr
Usr->Snmp
GET-REQUEST要求を通知します。
応答によりGET-RESPONSEを作成してSNMPソケットから送信します。
MSG_GETNEXTREQ GET-NEXTREQUEST要求
Snmp->Usr
Usr->Snmp
GET-NEXTREQUEST要求を通知します。
応答によりGET-RESPONSEを作成してSNMPソケットから送信します。
MSG_SETREQ SET-REQUEST要求
Snmp->Usr
Usr->Snmp
SET-REQUEST要求を通知します。
応答によりGET-RESPONSEを作成してSNMPソケットから送信します。
MSG_GETBULKREQ GET-BULKREQUEST要求
Snmp->Usr
Usr->Snmp
GET-BULKREQUEST要求を通知します。
応答によりGET-RESPONSEを作成してSNMPソケットから送信します。
MSG_TRAPSEND TRAP送信要求
Usr->Snmp
Snmp->Usr
TRAP送信要求が通知されると、SNMPソケットからトラップを送信します。
送信結果をメッセージで応答します。

<使用例>
 void snmp_execute(void)  /* SNMPプロセスと連結 */
 {
   int      snmp_pid;

   RegSnmpApl( &snmp_pid, 1000 );
 }

 void main(aPid)     /* SNMPプロセスからのメッセージ処理 */
 {
   TMsg     Rmsg;

     /* 初期化処理 */
   while(1) {
     /* ユーザ処理 */
     if(TimeWait(10) != 0 ) {
       GetMsg(&Rmsg);
       switch(Rmsg.cmd) {
         case MSG_SYSMSG:
           /* シリアル処理 */
           break;
        /* SNMPからの要求受信処理 */
         case MSG_GETREQ:
         case MSG_GETNEXTREQ:
         case MSG_SETREQ:
         case MSG_GETBULKREQ:
           /* データ受信処理 */
           break;
        /* SNMPからの応答受信処理 */
         case MSG_TRAPSEND:
           /* 応答(送信結果)を確認 */
           break;
        /* エラーメッセージ処理 */
         default:
           if(Rmsg.prmlen > 4) Free(Rmsg.prm);
           Rmsg.dest = Rmsg.src;
           Rmsg.src = (short)aPid;
           Rmsg.rqrs = MSG_ERROR;
           Rmsg.prmlen = (Word)4;
           Rmsg.prm = (char **)(int)Rmsg.cmd;
           Rmsg.cmd = ERR_MSGCMD;
           PutMsg(&Rmsg);
           break;
       }
 }