BIOSプロセスリファレンス
【システムプロセスについて】
本装置は標準でいくつかのプロセスを搭載しており、接続形態によってはそのまま利用することができます。
(例えば、ソケットサーバプロセス+RS-232Cプロセス -> 標準ソケットサーバ)
一方、システムプロセスおよびBIOSインタフェースを利用したユーザプログラムにより効果的に利用することが可能で、ユーザプログラムの中から本装置が標準的に搭載しているプロセスを呼び出し、メッセージのやり取りをすることが可能となっています。
ユーザプログラムより呼び出すことのできるシステムプロセスには次のものがあり、各プロセスの名称と機能概要は以下の通りです。
システムプロセス名
| プログラム名
機能概要
| |
FTPサーバプロセス
| FtpSv
| FTPプロトコルのサーバ機能をサポートします。
ユーザプログラムからのデータはメッセージとして本プロセスに渡され、FTPクライアントのコマンド要求により転送されます。
FTPクライアントからのデータは、メッセージとしてユーザプログラムに渡されます。
|
ソケットクライアントプロセス
| SockCl
| TCPコネクションを利用したクライアントとして、能動的な接続切断およびデータの送受信をサポートします。
本プロセスは宛先に対して接続を行い、ユーザプログラムとの間でメッセージとして受け渡されるデータを接続先ノードに転送します。
|
ソケットサーバプロセス
| SockSv
| TCPコネクションを利用したサーバとして、受動的な接続切断およびデータの送受信をサポートします。
本プロセスはクライアントからの接続要求に対して接続を確立し、ユーザプログラムとの間でメッセージとして受け渡されるデータを接続先ノードに転送します。
|
UDPスループロセス
| SockUdp
| UDPを利用したデータの送受信をサポートします。
本プロセスは指定ポートでUDPソケットを作成し、ユーザプログラムとの間でメッセージとして受け渡されるデータを接続先ノードに送信/受信します。
|
TELNETサーバプロセス
| TelnetSv
| TELNETプロトコルのサーバ機能をサポートします。
デフォルトではコマンドインタプリタとして動作し、TELNETクライアントからの入力に応じて、プロセスの起動。状態の表示等を行います。
ユーザプログラムからのデータはメッセージとして本プロセスに渡され、TELNETクライアントの画面に表示されます。
|
RS-232Cスループロセス
| Serial
| RS-232Cインタフェースに対するデータの送受信をサポートします。
本プロセスは動作パラメータで指定されている通信パラメータにより、RS-232Cを初期化し、ユーザプログラムとの間で、メッセージとして受け渡されるデータの送受信を行います。
|
SNMPエージェントプロセス
| Snmp
| SNMPプロトコルのエージェント機能、MIBとしてMIB−Uの一部をサポートします。
ユーザプログラムにより、MIBデータベース自体の追加が可能となります。
SNMPマネージャからユーザ定義MIBへのアクセスがあるとメッセージにて通知、ユーザプログラムからの応答をメッセージにて受け取りSNMP応答を返送します。
|
【FTPサーバプロセス】
<動作>
FTPプロトコルのサーバ機能をサポートします。送受信バッファをそれぞれ64キロバイトずつユーザプログラムエリアより確保します。
FTPクライアントからのログイン時に、動作パラメータで設定されているユーザ名、パスワードを照合します。
ユーザプログラムからメッセージで受け取ったデータは、クライアントからの取得要求(GET)により転送されます。動作パラメータでファイルターミネータが設定されている場合、データは複数のファイルに分割されます。
デフォルトのデータ出力先プロセスは「
RS-232Cスループロセス
」です。ユーザプログラムから「
データ要求
」メッセージにより出力先プロセスを変更することができます。
ユーザプログラムから、「
サーバオープン要求
」メッセージおよび「
サーバクローズ要求
」メッセージによりFTPサーバのログインユーザ名・パスワードを変更することができます。また、「
状態通知
」メッセージにより、FTPサーバの状態を知ることができます。
FTPサーバでは以下の動作パラメータを参照します。詳しくは「BLC-101 セットアップマニュアル」を参照して下さい。
・自IPアドレス
・ユーザ名
・パスワード
・ファイルターミネータ
FTPサーバプロセスは「
プログラム実行
」ファンクションで起動されると、動作パラメータの自IPアドレス、ウェルノーウンポート(21番)でLISTENします。またそのときの、ユーザ名とパスワードは動作パラメータの設定値に従います。「
データ要求
」メッセージによりFTPサーバプロセスからのデータを自プロセス宛に変更します。
<メッセージ>
FTPサーバプロセスは以下のメッセージにより他のプロセスと連動します。
コード
| メッセージ名
| 入出力
内容
| |
MSG_SYSMSG
| システムメッセージ
| Sys->Ftp
| FTPサーバのソケットにイベントが発生した時に、システムが通知します。
|
MSG_PUTFILE MSG_APPENDFILE
| ファイル書込通知・追加/応答
| Ftp->UsrUsr->Ftp
| FTPクライアントからPUT、APPENDコマンドを受け付けたときに通知します。
応答メッセージのパラメータにファイル終了通知を省略することができます。ファイル終了通知を省略した場合、FTPクライアントからのデータ受信が終了した時点で正常終了(226)をFTPクライアントに通知します。
|
MSG_GETFILE
| ファイル取得要求/応答
| Ftp->UsrUsr->Ftp
| FTPクライアントからGETコマンドを受け付けたときに通知します。
|
MSG_LSTFILE
| ファイル一覧要求/応答
| Ftp->UsrUsr->Ftp
| FTPクライアントからDIR、LSコマンドを受け付けたときに通知します。
ユーザプログラムは応答(ファイル一覧データ)を返す必要があります。
|
MSG_DELFILE
| ファイル削除要求 応答
| Ftp->UsrUsr->Ftp
| FTPクライアントからDELETEマンドを受け付けたときに通知します。
ユーザプログラムは応答を返す必要があります。
|
MSG_CH_DIR
| ディレクトリ変更要求 応答
| Ftp->UsrUsr->Ftp
| FTPクライアントからCDコマンドを受け付けたときに通知します。
ユーザプログラムは応答を返す必要があります。
|
MSG_PUTDATA
| データ通知
| Ftp<->Usr
| FTPクライアントから受信したファイルデータを通知します。
入力されたデータはFTPクライアントからの要求により送信します。ユーザプログラム
|
MSG_ENDFILE
| ファイル終了通知/応答
| Ftp->UsrUsr->Ftp
| FTPクライアントから受信したファイルデータを全て通知した後に出力します。
応答メッセージのパラメータにより、ファイル受信結果をFTPクライアントに送信します。
|
MSG_GETSTAT
| 状態取得
| Usr->Ftp Ftp->UsrUsr->Ftp
| ユーザプログラムが「状態通知」が必要な場合に出力します(オプション0/1)。
FTPクライアントからSTATコマンドを受け付けたときに通知します(オプション2)。ユーザプログラムは「状態通知」で応答します。
|
MSG_PUTSTAT
| 状態通知
| Ftp->Usr Ftp->UsrUsr->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アドレス、宛先ポート番号に対して接続を行いデータの送受信を待ちます。デフォルトのデータ出力先プロセスは「
RS-232Cスループロセス
」です。
ユーザプログラムからメッセージで受け取ったデータは、そのまま接続ソケットから接続先へ送信されます。接続が確立されていないときにデータを受け取った場合、ソケットの接続動作を開始し「
バッファ満杯通知
」メッセージを返します。接続が確立されたときに、「
バッファレディ通知
」メッセージを出力します。
接続ソケットから受信したデータは、そのまま出力先プロセスへメッセージで受け渡されます。
ユーザプログラムから、「
接続要求
」メッセージおよび「
切断要求
」メッセージによりソケットの接続をコントロールすることができます。また、「
状態取得
」メッセージにより、接続状態を知ることができます。
ソケットクライアントクライアントでは以下の動作パラメータを参照します。詳しくは「BLC-101 セットアップマニュアル」を参照して下さい。
・自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アドレス、自ポート番号でサーバソケットを作成し、クライアントからの接続要求を待ちます。接続要求を受け付けると、サーバソケットをクローズし、データの送受信を待ちます。デフォルトのデータ出力先プロセスは「
RS-232Cスループロセス
」です。
ユーザプログラムからメッセージで受け取ったデータは、そのまま接続ソケットから接続先へ送信されます。接続が確立されていないときにデータを受け取った場合、「
状態エラー
」メッセージを返します。
接続ソケットから受信したデータは、そのまま出力先プロセスへメッセージで受け渡されます。
ユーザプログラムから、「
サーバオープン要求
」メッセージおよび「
サーバクローズ要求
」メッセージによりサーバソケットをコントロールすることができます。また、「
状態通知
」メッセージにより、サーバの状態を知ることができます。
ソケットサーバでは以下の動作パラメータを参照します。詳しくは「BLC-101 セットアップマニュアル」を参照して下さい。
・自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ソケットを作成し、データの送受信を待ちます。デフォルトのデータ出力先プロセスは「
RS-232Cスループロセス
」です。
ユーザプログラムからメッセージで受け取ったデータは、そのままUDPソケットから宛先へ送信されます。
UDPソケットから受信したデータは、そのまま出力先プロセスへメッセージで受け渡されます。
ユーザプログラムから、「
サーバオープン要求
」メッセージおよび「
サーバクローズ要求
」メッセージによりUDPソケットをコントロールすることができます。また、「
状態通知
」メッセージにより、状態を知ることができます。
本プロセスは「
バッファ満杯通知
」メッセージ、「
バッファレディ通知
」メッセージは発行しません。ユーザプログラムから、「
データ通知
」メッセージを受け取ると、その時点でLAN回線に送信します。
本プロセスに「
バッファ満杯通知
」メッセージを発行した場合、システムのUDPソケットの受信キューからの取り出しは停止しますが、UDPプロトコル上でフロー制御は不可能なため、ユーザプログラムの処理が間に合わない場合は、UDPパケットが消滅する場合があります。
UDPスルーでは以下の動作パラメータを参照します。詳しくは「BLC-101 セットアップマニュアル」を参照して下さい。
・自IPアドレス
・自ポート番号
・宛先IPアドレス
・宛先ポート番号
UDPスループロセスは「
プログラム実行
」ファンクションで起動されると、動作パラメータで指定の設定されているポート番号でUDPソケットを作成します。このとき宛先も動作パラメータに設定されているアドレスになります。
また、「
サーバオープン要求
」メッセージにて自ポート番号の変更、宛先アドレスの指定方法を変更することができます。
「
サーバオープン要求
」メッセージの動作モードで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-101 セットアップマニュアル」を参照して下さい。
・自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);*/
}
【RS-232Cスループロセス】
<動作>
RS-232Cインタフェースに対するデータの送受信を行います。
本プロセスは動作パラメータで指定されている通信パラメータによりRS-232Cを初期化し、データの送受信を待ちます。また、ソケットクライアント→ソケットサーバ→FTPサーバの順にプロセスが起動されているか否かを調べ、受信データの出力先プロセスを決定します。
ユーザプログラムからメッセージで受け取ったデータは、そのままRS-232Cインタフェースに出力します。
RS-232Cインタフェースから受信したデータは、そのまま出力先プロセスへメッセージで受け渡されます。動作パラメータのレコードターミネータが設定されている場合、受け渡されるデータはレコード単位に区切られます。
RS-232Cスルーでは以下の動作パラメータを参照します。詳しくは「BLC-101 セットアップマニュアル」を参照して下さい。
・RS-232C通信パラメータ
・レコードターミネータ
本プロセスは「
プログラム実行
」ファンクションで起動されると、動作パラメータで指定の設定されているパラメータでRS-232Cをオープンします。
「
データ要求
」メッセージにて通知先プロセスを変更して下さい。
<メッセージ>
本プロセスは以下のメッセージにより他のプロセスと連動します。
コード
| メッセージ名
| 入出力
内容
| |
MSG_SYSMSG
| システムメッセージ
| Sys->232
| RS-232Cの受信バッファにデータが存在するとき、システムが通知します。
|
MSG_PUTDATA
| データ通知
| 232<->Usr
| RS-232Cから受信したデータを通知します。
入力されたデータはRS-232Cへ出力します。
|
MSG_GETDATA
| データ要求
| Usr->232
| RS-232Cインタフェースからの受信データの通知先プロセスを変更します。
|
MSG_GETSTAT
| 状態取得
| Usr->232
| 状態通知が入力されると、制御線状態と送受信バッファのデータ量を「状態通知」メッセージで返します。
|
MSG_PUTSTAT
| 状態通知
| 232->Usr
| 制御線情報と送受信バッファのデータ量を出力します。
|
MSG_BUFFULL
| バッファ満杯通知
| Usr<->232
| RS-232Cの64キロバイトの送信バッファが一杯になったときに通知します。「バッファレディ通知」メッセージが通知されるまで「データ通知」メッセージをしないようにして下さい。
本メッセージが入力されると、「バッファレディ通知」メッセージが入力されるまで、「データ通知」メッセージを出力しなくなります。
|
MSG_BUFREADY
| バッファレディ通知
| Usr<->232
| 「バッファ満杯通知」を出力した後、RS-232Cの送信バッファが空になったときに通知します。
本メッセージが入力されると、「データ通知」メッセージの出力を再開します。
|
<使用例>
void rs_execute(void) /* RS-232Cスループロセスの実行 */
{
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) /* RS-232Cスループロセスからのメッセージ処理 */
{
TMsg Rmsg;
/* 初期化処理 */
while(1) {
/* ユーザ処理 */
if(TimeWait(10) != 0 ) {
GetMsg(&Rmsg);
switch(Rmsg.cmd) {
case MSG_SYSMSG:
/* ソケット処理 */
break;
/* RS-232C 受信処理 */
case MSG_PUTDATA:
/* データ受信処理 */
break;
/* RS-232C フロー制御処理 */
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-101 セットアップマニュアル」を参照して下さい。
・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->UsrUsr->Snmp
| GET-REQUEST要求を通知します。
応答によりGET-RESPONSEを作成してSNMPソケットから送信します。
|
MSG_GETNEXTREQ
| GET-NEXTREQUEST要求
| Snmp->UsrUsr->Snmp
| GET-NEXTREQUEST要求を通知します。
応答によりGET-RESPONSEを作成してSNMPソケットから送信します。
|
MSG_SETREQ
| SET-REQUEST要求
| Snmp->UsrUsr->Snmp
| SET-REQUEST要求を通知します。
応答によりGET-RESPONSEを作成してSNMPソケットから送信します。
|
MSG_GETBULKREQ
| GET-BULKREQUEST要求
| Snmp->UsrUsr->Snmp
| GET-BULKREQUEST要求を通知します。
応答によりGET-RESPONSEを作成してSNMPソケットから送信します。
|
MSG_TRAPSEND
| TRAP送信要求
| Usr->SnmpSnmp->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;
}
}