(57)【要約】【課題】    特定のプログラミング言語に限定されることがなく、スクリプト言語などインタプリタ型の言語も使えるようにする。【解決手段】  異なる種類の機器が接続されたネットワークシステムにおいて、次の手順で処理する。（１）呼び出す側の機器が、通常の関数呼び出しと同様の書式を用いて記述した文字列を用いて（Ｓ１）、機器名称と機能名称を特定する機能の呼び出し電文を作成して送信する（Ｓ２）。（２）呼び出された機器は、受信した機能呼び出し電文の文字列を実行直前に解釈して（Ｓ１２）前記電文で指定された機能を実行する（Ｓ１７）。【選択図】図３
2005215783.tif 000002
【特許請求の範囲】
【請求項１】
異なる種類の機器が接続されたネットワークシステムにおいて、次の手順で処理することを特徴とするネットワークシステムの分散処理方法。
（１）呼び出す側の機器が、機器名称と機能名称と０個以上の引数が区切り記号をはさんで順番に並べられた通常の関数呼び出しの書式で記述された文字列を用い、機能呼び出し電文を作成して送信する。
（２）呼び出された機器は、受信した機能呼び出し電文の文字列を実行直前に解釈して前記電文で指定された機能を実行する。
【請求項２】
呼び出す側の機器が、前記機能呼び出し電文を作成して送信する時、呼び出される機器のデータレジスタを表す変数名称を特定した文字列を、呼び出し機能のパラメータとして呼び出し電文内に付加することを特徴とする請求項１に記載のネットワークシステムの分散処理方法。
【請求項３】
ＣＰＵと、ＲＡＭと、ＲＯＭと、Ｉ／Ｏと、ネットワークインターフェースとを備えてネットワークに接続された機器において、
機器名称と機能名称と０個以上の引数が区切り記号をはさんで順番に並べられた通常の関数呼び出しの書式で記述された文字列を用いて、機能呼び出し電文を作成し送信する手段と、
受信した機能呼び出し電文の文字列を実行直前に解釈して前記電文で指定された機能を実行する手段と、
を備えたことを特徴とするネットワークシステムの分散処理装置。
【請求項４】
前記機能呼び出し電文を作成して送信する時は、呼び出される機器のデータレジスタを表す変数名称を特定した文字列を、呼び出し機能のパラメータとして呼び出し電文内に付加することを特徴とする請求項３に記載のネットワークシステムの分散処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ネットワークシステムに接続された複数の機器が処理を分散して実行する分散処理方法および装置に関する。
【背景技術】
【０００２】
ＰＬＣ（Programmable Logic Controller）やＰＣ（Personal Computer）など異なる種類の機器が混在して接続されたネットワークシステムにおいては、ある特定の機器が他の機器に様々な機能を提供するような分散処理システムが形成されることがある。各機器はEthernet(登録商標)などの共通する通信ネットワークインターフェースデバイスを備えており、通信ソフトウェアとしてはいわゆるＢＳＤ  Socket（ソケット）によるＴＣＰ／ＩＰ通信やＵＤＰ／ＩＰ通信をさせるライブラリ等を備えている。ＰＬＣは一般的に外部機器と接続されることがあり、それらを制御することができる。ＴＣＰ／ＩＰなどのネットワークに対応した機器が他の機器に対してソフトウェアから利用可能な機能を遠隔手続き呼び出しとして提供する方法には、Remote Procedure Call（ＲＰＣ）やRemote Method Invocation（ＲＭＩ）など種々の技術があることが広く知られている。
【０００３】
ＲＰＣとは、遠隔地にあるコンピュータ上のプログラムを、ネットワークを介して呼び出すことを可能にするプロトコルのことであり、ＰＲＣを実装するにはサービスを提供する機器のソフトウェアやサービスを利用するソフトウェアをＣ言語で記述する必要がある。ＲＭＩとは、Ｊａｖａ（登録商標）による分散オブジェクト環境のことであり、各機器に分散オブジェクトを実装して、他の機器に特定の機能を提供するときは、そのサービスを利用する側もＪａｖａを実装する必要がある。いずれにしても、サービスを提供する側とサービスを利用する側との間にあるデータはバイナリフォーマットで規定されており、通常は同一のプログラミング言語を使用して実装しなければならない。
【０００４】
ＲＰＣと同様な機能を持ち、異種のプログラミング言語間で利用可能にするプロトコルとしては、ＳＯＡＰなどのＸＭＬやＨＴＴＰを基礎としたテキストベースのプロトコルも存在する。テキストベースのデータフォーマットであれば、多くのプログラミング言語で開発が可能になるが、この場合、ＨＴＴＰプロトコルをハンドリングしたり、ＸＭＬを解釈するミドルウェアが、それぞれのプログラミング言語において新たに必要となる。ＳＯＡＰでＲＰＣを利用するには、通常のプログラミング言語で記述するような書式ではなく、ＸＭＬの書式に従う必要がある。
【０００５】
また、ＰＬＣのような組み込み型の機器では、各機器が提供する機能を利用するための動作を記述する言語として、書き直しや再実行が容易なプログラミング言語を使えるようにすることが望ましい。このようなプログラミング言語として、汎用計算機等で用いられるスクリプト言語が挙げられる。スクリプト言語は、ＷＷＷサーバー上でＣＧＩを記述する場合に使われるなど、インターネットで広く用いられている。スクリプト言語としては、Perl、Ruby、Python（登録商標）などがよく知られている。上記のようなネットワークシステム上で、スクリプト言語を使ってＰＬＣに接続された外部機器を制御するようなサービスアプリケーションを実装する場合、そのスクリプト言語でサブルーチンやライブラリを実装することが出来れば特に問題はないが、一般的に、デバイスを操作するようなコードはスクリプト言語では記述することができない。スクリプト言語が拡張機能をサポートしていれば、デバイスを操作する部分はその機器が直接実行可能（ネイティブ）なコードを吐き出すコンパイル型言語であるＣ言語やＣ＋＋言語などを用いて別個のモジュールとして作成される。例えば、Microsoft（登録商標） Windows（登録商標）上で動作するPythonでは、Windows用のネイティブなダイナミックリンクライブラリ（Dynamic Link Library；ＤＬＬ）をＣ言語で作成して、Pythonから呼べるようにするための拡張モジュールを作る必要があった。また、通常、スクリプト言語では、Ｃ言語で記述されたＲＰＣやＪａｖａ言語で記述されたＲＭＩのような遠隔手続き呼び出しを直接使うことはできない。
このように、従来のネットワークシステムにおける分散処理方法は、機能を提供する側の機器と機能を利用する側の機器とで同一のプログラミング言語を使用するか、テキストベースのプロトコルを使用する、という手順がとられていた。
【非特許文献１】Jim  Farley 著、小俣  裕一  監訳「Ｊａｖａ分散コンピューティング」株式会社オライリー・ジャパン、１９９８年９月発行
【発明の開示】
【発明が解決しようとする課題】
【０００６】
従来の方法では、機器のサービスを記述するプログラミング言語が、Ｃ言語やＪａｖａ言語などの特定の言語に制約されており、スクリプト言語を使用する場合にもＣ言語等のプログラミング言語を使ってネイティブコードのライブラリ（ＤＬＬ）を作らなければならないという問題があった。ＳＯＡＰを用いる場合には、機能呼び出しの書式が通常のプログラミング言語の関数呼び出し書式と大幅に異なるので、学習時間など開発者の負担が増し、また、機器に対してメモリや記憶媒体容量などの追加のリソースを必要とするので、開発期間が増加し機器の製造コストを増大させる要因となっていた。
本発明はこのような問題点に鑑みてなされたものであり、プログラミング言語の制約を減らして開発者の選択肢を増やすとともに、コストを殆ど増加させずに他の機器からの機能呼び出しをすることができる方法および方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
上記問題を解決するため、本発明は、次のようにしたものである。請求項１に記載の発明は、異なる種類の機器が接続されたネットワークシステムにおいて、次の手順で処理することを特徴としている。
（１）呼び出す側の機器が、機器名称と機能名称と０個以上の引数が区切り記号をはさんで順番に並べられた通常の関数呼び出しの書式で記述された文字列を用い、機能呼び出し電文を作成して送信する。
（２）呼び出された機器は、受信した機能呼び出し電文の文字列を実行直前に解釈して前記電文で指定された機能を実行する。
また請求項２に記載の発明は、呼び出す側の機器が、前記機能呼び出し電文を作成して送信する時、呼び出される機器のデータレジスタを表す変数名称を特定した文字列を、呼び出し機能のパラメータとして呼び出し電文内に付加することを特徴としている。
また請求項３に記載の発明は、ＣＰＵと、ＲＡＭと、ＲＯＭと、Ｉ／Ｏと、ネットワークインターフェースとを備えてネットワークに接続された機器において、機器名称と機能名称と０個以上の引数が区切り記号をはさんで順番に並べられた通常の関数呼び出しの書式で記述された文字列を用いて、機能呼び出し電文を作成し送信する手段と、受信した機能呼び出し電文の文字列を実行直前に解釈して前記電文で指定された機能を実行する手段と、を備えたことを特徴としている。
また、請求項４に記載の発明は、前記機能呼び出し電文を作成して送信する時は、呼び出される機器のデータレジスタを表す変数名称を特定した文字列を、呼び出し機能のパラメータとして呼び出し電文内に付加することを特徴としている。
【発明の効果】
【０００８】
請求項１、３に記載の発明によると、特定のプログラミング言語に限定されることがなく、ソケット通信ができるプログラミング言語であれば、コンパイル型言語だけでなく、スクリプト言語などインタプリタ型の言語からでも使用することができるので、開発者が使い慣れた言語を採用することができる。その際に、スクリプト言語をＣ／Ｃ＋＋言語等で拡張することなく、そのスクリプト言語によるシンプルなライブラリの実装のみですむようになる。また、請求項２、４に記載の発明によると、関数名だけでなく変数名も使用することができるので、サーバー機器の動作制御をプログラムで細かく記述することができる。
【発明を実施するための最良の形態】
【０００９】
以下、本発明の方法の具体的実施例について、図に基づいて説明する。
【実施例１】
【００１０】
図１は、本発明の方法を実施するネットワークシステムの接続状況と機器の内部構成を示す図である。図において、複数の機器１１０、１２０、１３０がネットワーク１５０を介して接続されており、相互に情報を交換できるようになっている。機器１１０は、ＣＰＵ１１１とＲＡＭ１１２、ＲＯＭ１１３、ネットワークインターフェース１１４、Ｉ／Ｏ１１５などから構成されており、Ｉ／Ｏ１１５に接続された外部機器１４０を制御することができるようになっている。これらの機器１１０、１２０、１３０はネットワーク１５０に接続された図示しない他の機器とも通信をすることができる。ここで述べている機器は、具体的にはＰＬＣやＰＣなどが該当する。これらの機器の各々は動作状態に応じて呼び方が異なり、自身の機能を他の機器に提供するときはその機器をサーバーと呼び、サーバーからサーバーの機能を呼び出すときはその機器をクライアントと呼ぶ。これらの呼称は相対的なものであり、サーバーとなる機器は他の機器のクライアントにもなりうるし、クライアントとなる機器は他の機器のサーバーにもなりうる。このように各機器の役割は限定されるものではなく、相対的に決まる。
【００１１】
図２は上記の機器の一つがサーバー機器となり、他の一つがクライアント機器となって１対１で接続されている時のそれぞれの処理の流れを説明する図である。
サーバー機器３３０は、３つのルーチンと２つのタスクを持っており、ＴＣＰソケットを使って特定のＴＣＰポート番号で受信待ち状態のソケット受信タスク３３３と、クライアントからの機能呼び出し要求を受け付けることが可能なサービス実行タスク３３１が起動していれば、クライアント機器３１０のコマンドを待機する待機状態になる。ソケット受信タスク３３３は、データを受信したら直ちにコマンド解析ルーチン３３２を実行する。コマンド解析ルーチン３３２では、受信したデータを機能呼び出しのコマンド文字列として解釈する。機能呼び出しのコマンドは、サーバー機器名称、機能名称、および０個以上の引数といった要素から成り、個々の機能により図４のような形態のいずれかの書式で記述することが予め取り決められている。
クライアント機器３１０も３つのルーチンと２つのタスクを持っており、常時はシーケンスプログラムを実行するシーケンス実行タスク３１１と、サーバーに対する機能呼び出しの結果を受信するためのソケット受信タスク３１５が起動されている。シーケンス実行タスク３１１は、ＴＣＰソケットを使って、所望のサーバー機器３３０のＴＣＰポート番号と同じ番号で待機状態のソケットと接続する。サーバー機器３３０のソケットと接続に成功すれば、クライアント機器３１０は任意のタイミングでサーバー機器３３０の機能を呼び出すことができる。
【００１２】
次に図３のフローチャートを用いて処理の流れについて説明する。この図の２つの流れのうち、左側はクライアント機器３１０の処理、右側はサーバー機器３３０の処理の流れを示している。
この図において、まずクライアント機器３１０がサーバー機器３３０の機能Ａを呼び出したい場合について説明する。このときは、前述した図４のコマンド書式のうち、機能Ａに対応したいずれかの書式にしたがって機器名称と機能名称を指定してコマンド文字列を記述する（Ｓ１）。そして前述の接続済みソケットを用いて、ソケットの送信コマンドを実行し、サーバー機器３３０にコマンド文字列を送信する（Ｓ２）。
サーバー機器３３０は、ソケットを通じてクライアントからデータを受信すれば（Ｓ１１）、コマンドの文字列を解釈する（Ｓ１２）。受信したコマンド文字列が図４に示す書式のいずれかであれば、「．」、「（）、「」」、「，」のような文字を区切り子としてコマンド解析ルーチン３３２を呼び出し、サーバー機器３３０の名称や機能名称のほか０個以上の引数などの要素に分解することができる。
【００１３】
次にサーバー機器３３０が、受信したコマンド文字列から得られたサーバー機器の名称と自身の機器名称とを照合し（Ｓ１３）、一致しなければクライアント機器３１０に対して機器不一致エラーを示す文字列データを合成する（Ｓ１８）。同様に、サーバー機器３３０は、受信したコマンド文字列から得られた機能名称と自身が提供する機能名称とを照合し（Ｓ１４）、一致しなければクライアント機器３１０に対して機能不一致エラーを示す文字列データを合成する（Ｓ１８）。機器と機能が条件に合致したら、サービス実行タスク３３１が機能し、その結果として戻り値を得る（Ｓ１５）。戻り値が数値であればそれを文字列に合成する（Ｓ１６）。エラーの場合も正常呼び出しの場合も、クライアント機器３１０に向かってソケットを使って戻り値を送信する（Ｓ１７）。クライアント機器３１０は、サーバー機器３３０から戻り値を受信したら（Ｓ３）、その戻り値を解析して（Ｓ４）機能呼び出しを終了する。サーバー機器３３０内の機能の呼び出しは、次のようにして行なわれる。まず、機能名称から機能への実体を取得する。機能の実体は、端的には、メモリ上に配置された関数のアドレスで表される。機能名称から機能の実体もしくは実体の参照を取得する方法は、プログラミング言語によって異なり、以下その説明をする。なお、ここではＪａｖａ言語を例にして説明する。
【００１４】
Ｊａｖａ言語では、サーバーの機能を提供する基本となるのは、サービスメソッドを定義しているサービスクラスのインスタンスである。サービスクラスのインスタンスは、サービスプロセス起動時に生成するか、クライアントから送られるコマンド実行要求を受けた後で生成してもよい。Ｊａｖａ言語にはリフレクションと呼ばれる機構が備わっており、図４のＪａｖａ言語で機能を呼び出す時のコードのように、機能名称から機能への実体を取得して実行することが容易に実現できる。Ｊａｖａ以外のプログラミング言語でも、同様の仕組みを独自に実装することによって同様に実現することができる。Ｃ言語では、図５に示すような機能名称と機能の実体である関数アドレスを組にしたテーブルを作成しておき、クライアントから指定された機能名称文字列が一致する要素から関数アドレスを取得することによって実現することができる。
【００１５】
図６は文字列の書式の例を示しており、引数を持たないコマンド文字列の書式４１０、引数を１つ持つコマンド文字列の書式４１１、引数を複数個持つコマンド文字列の書式４１２を例示している。このように、サービスの機能が引数を伴う場合には、引数の型情報が必要になる。型情報にはサーバー機器とクライアント機器とで一致するように、前もって共通の仕様書があればよい。Ｊａｖａ言語では、クラス（Class）またはインターフェース（Interface）を定義したソースファイルが該当し、Ｃ言語では関数のプロトタイプ宣言が該当する。クライアントがコマンドを実行すると、引数文字列を前述の約束に従った変数型の数値であると解釈して数値に変換したのち、サーバー機器が機能実体の呼び出しを実行する時に渡される。
【００１６】
上記引数には、変数名称を指定することも可能であり、指定された変数名称は、サーバー機器内のメモリ上のデータを表している。機能名称や型情報と同様に、変数名称も前もって定義された共通の仕様書に基づいていれば、サーバー機器が何であれ共通の変数を使用することができる。サーバー機器は、自身が持つ各種の変数のうち、外部からの参照や変更を許可するものに関しては、図７に示すように、これら変数名称の文字列と、変数のアドレスを組にしたテーブルを作成する。クライアント機器はこの変数名を指定してコマンド文字列を記述し、サーバー機器はクライアント機器から指定された変数名称文字列が一致する変数アドレスを取得する。例えば、サーバー機器のエラー発生状態を指し示す変数名称として「ErrorStatus」という変数名を仕様書に定義しておく。変数名を指定してサーバー機器の変数の値を取得する機能がgetValueという名称である場合、サーバー機器に送信するコマンド文字列は、"server.getValue(ErrorStatus)"のようになる。サーバー機器では、変数名称として「ErrorStatus」を上記のように図７のテーブルから検索し、変数アドレスを取得する。変数アドレスが判ればメモリを参照することによってその数値を取り出し、文字列に変換した後クライアント機器に送信する。
【産業上の利用可能性】
【００１７】
ソケット通信は異なる機器間だけでなく、同一機器内の異なるタスク間でも利用できるため、異なるプログラム言語で記述された同一機器内の複数のタスクの間で機能呼び出しをするときにも適用できる。例えば、一般にハードウェアを操作できないスクリプト言語を、ハードウェアを操作できるように拡張するという用途にも適用できる。
【図面の簡単な説明】
【００１８】
【図１】本発明の方法を適用するネットワークシステムの構成を示す図
【図２】クライアント機器とサーバ機器の処理分担を説明するブロック図
【図３】本発明の方法の処理手順を示すフローチャート
【図４】プログラムコード
【図５】機能テーブル
【図６】コマンド書式を示す図
【図７】変数テーブル
【符号の説明】
【００１９】
１１０、１２０、１３０  機器、            １５０  ネットワーク、
３１０  クライアント機器、                ３３０  サーバー機器、
４１０  引数を持たないコマンド文字列、    ４１１  引数を１つ持つコマンド文字列、
４１２  引数を複数個持つコマンド文字列
【図１】
2005215783.tif 000003
【図２】
2005215783.tif 000004
【図３】
2005215783.tif 000005
【図４】
2005215783.tif 000006
【図５】
2005215783.tif 000007
【図６】
2005215783.tif 000008
【図７】
2005215783.tif 000009