(57)【要約】【課題】  分散処理システムの分散オブジェクトの開発においてネットワーク制御の開発を不要とする。【解決手段】  マスターサーバとスレーブサーバとを含む分散処理システムにおいて、分割方法及び計算範囲に関わりなくマスターサーバとスレーブサーバとの間の通信を制御するためのネットワーク制御情報を記憶し、計算タスクを入力された所定の分割数で分割した所定の計算範囲の分割計算タスクにネットワーク制御情報を付加することによってスレーブサーバで計算させるための分散オブジェクトを生成してスレーブサーバに送信し、スレーブサーバは、受信した分散オブジェクトのそれの計算範囲における計算処理を分割方法に応じた処理によって実行し、その計算処理結果をマスターサーバに送信し、マスターサーバは、スレーブサーバから受信した計算処理結果を結合して数値制御データを求める。【選択図】          図６
2006106863.tif 000002
【特許請求の範囲】
【請求項１】
計算タスクの分散処理を統括するマスターサーバと、
当該マスターサーバとネットワークを介して接続され、数値制御型工作機械を使用した材料の加工刃による切削加工により加工品を製作するための加工刃のパスの数値制御データを計算により導出するための計算タスクが所定の分割方法及び所定の分割数によって分割された分割計算タスクの計算処理を実行する複数のスレーブサーバと、を含む分散処理システムであって、
前記マスターサーバは、
前記計算タスクを分割するための所定の分割数の入力を受け付ける分割数入力手段と、
前記分割方法及び前記計算範囲に関わりなく前記マスターサーバと前記スレーブサーバとの間の通信を制御するためのネットワーク制御情報を記憶するネットワーク制御情報記憶手段と、
前記計算タスクを入力された前記所定の分割数で分割した所定の計算範囲の分割計算タスクに前記ネットワーク制御情報を付加することによって前記スレーブサーバで計算させるための分散オブジェクトを生成する分散オブジェクト生成手段と、
前記分散オブジェクトに含まれる前記ネットワーク制御情報に基づいて、前記分散オブジェクトを前記スレーブサーバに送信する分散オブジェクト送信手段と、を有し、
前記スレーブサーバは、
前記分散オブジェクトを前記ネットワーク制御情報に基づき前記マスターサーバから受信する分散オブジェクト受信手段と、
受信した前記分散オブジェクトに含まれる前記分割計算タスクの前記計算範囲における計算処理を前記分割方法に応じた処理によって実行することによって計算処理結果を導出する分散オブジェクト処理手段と、
前記導出された計算処理結果を前記ネットワーク制御情報に基づいて前記マスターサーバに送信する計算処理結果送信手段と、を有し、
前記マスターサーバは、
前記計算処理結果をそれに対応する前記ネットワーク制御情報に基づいて前記スレーブサーバから受信する計算処理結果受信手段と、
受信した計算処理結果をそれに対応する前記分割方法及び計算範囲に基づいて結合し、前記計算タスクに対する処理結果を得ることによって前記数値制御データを求める計算処理結果結合手段と、を有することを特徴とする分散処理システム。
【請求項２】
請求項１に記載の分散処理システムにおいて、前記分割方法は複数の分割方法であり、いずれか１つの分割方法に対して少なくとも１つの他の分割方法がさらに組み合わされて前記計算タスクを分割することを特徴とする分散処理システム。
【請求項３】
請求項１または２に記載の分散処理システムにおいて、
前記分散オブジェクト生成手段は、オブジェクト指向言語によって記述されたオブジェクトによって前記マスターサーバが機能させられることにより実装されるものであり、
前記分散オブジェクト処理手段は、オブジェクト指向言語によって記述された分散オブジェクトによって前記スレーブサーバが機能させられることにより実装されるものであり、及び
前記ネットワーク制御情報記憶手段は、オブジェクト指向言語によって記述されたオブジェクトによって前記マスターサーバが機能させられることにより実装されるものであることを特徴とする分散処理システム。
【請求項４】
請求項１から３のいずれか１項に記載の分散処理システムにおいて、
前記分散オブジェクト生成手段は、前記マスターサーバを前記ネットワーク制御情報記憶手段として機能させるオブジェクトを生成するクラスを基底クラスとして継承することによって生成されたオブジェクトによって前記マスターサーバが機能させられることにより実装されるものであることを特徴とする分散処理システム。
【請求項５】
請求項４に記載の分散処理システムにおいて、
前記ネットワーク制御情報記憶手段を実装するオブジェクトは、ネットワークの構成に応じてユニークであることを特徴とする分散処理システム。
【請求項６】
請求項５に記載の分散処理システムにおいて、
前記加工品は、部品の金型であることを特徴とする分散処理システム。
【請求項７】
請求項６に記載の分散処理システムにおいて、
前記加工刃のパスは、前記金型の輪郭の内側のボリュームを加工刃で切削するための塗りつぶしパス、前記金型の輪郭に沿ったパスで必要な輪郭を削り残すように加工刃で切削するための等高線仕上げパスを含むことを特徴とする分散処理システム。
【請求項８】
計算タスクの分散処理を統括するマスターサーバと、
当該マスターサーバとネットワークを介して接続され、数値制御型工作機械を使用した材料の加工刃による切削加工により加工品を製作するための加工刃のパスの数値制御データを計算により導出するための計算タスクが所定の分割方法及び所定の分割数によって分割された分割計算タスクの計算処理を実行する複数のスレーブサーバと、を含む分散処理システムで実施される分散処理方法であって、
前記マスターサーバが、前記計算タスクを分割するための所定の分割数の入力を受け付けるステップと、
前記マスターサーバが、前記分割方法及び前記計算範囲に関わりなく前記マスターサーバと前記スレーブサーバとの間の通信を制御するためのネットワーク制御情報を記憶するステップと、
前記マスターサーバが、前記計算タスクを入力された前記所定の分割数で分割した所定の計算範囲の分割計算タスクに前記ネットワーク制御情報を付加することによって前記スレーブサーバで計算させるための分散オブジェクトを生成するステップと、
前記マスターサーバが、前記分散オブジェクトに含まれる前記ネットワーク制御情報に基づいて、前記分散オブジェクトを前記スレーブサーバに送信するステップと、
前記スレーブサーバが、前記分散オブジェクトを前記ネットワーク制御情報に基づき前記マスターサーバから受信するステップと、
前記スレーブサーバが、受信した前記分散オブジェクトに含まれる前記分割計算タスクの前記計算範囲における計算処理を前記分割方法に応じた処理によって実行することによって計算処理結果を導出するステップと、
前記スレーブサーバが、前記導出された計算処理結果を前記ネットワーク制御情報に基づいて前記マスターサーバに送信するステップと、
前記マスターサーバが、前記計算処理結果をそれに対応する前記ネットワーク制御情報に基づいて前記スレーブサーバから受信するステップと、
前記マスターサーバが、受信した計算処理結果をそれに対応する前記分割方法及び計算範囲に基づいて結合し、前記計算タスクに対する処理結果を得ることによって前記数値制御データを求めるステップと、を有することを特徴とする分散処理方法。
【請求項９】
請求項８に記載の分散処理方法において、前記分割方法は複数の分割方法であり、いずれか１つの分割方法に対して少なくとも１つの他の分割方法がさらに組み合わされて前記計算タスクを分割することを特徴とする分散処理方法。
【請求項１０】
請求項８または９に記載の分散処理方法において、
前記マスターサーバが前記分散オブジェクトを生成するステップは、オブジェクト指向言語によって記述されたオブジェクトによって前記マスターサーバが機能させられることにより実行されるものであり、
前記スレーブサーバが前記分散オブジェクトを処理するステップは、オブジェクト指向言語によって記述された分散オブジェクトによって前記スレーブサーバが機能させられることにより実行されるものであり、及び
前記マスターサーバが前記ネットワーク制御情報を記憶するステップは、オブジェクト指向言語によって記述されたオブジェクトによって前記マスターサーバが機能させられることにより実行されるものであることを特徴とする分散処理方法。
【請求項１１】
請求項８から１０のいずれか１項に記載の分散処理方法において、
前記マスターサーバが前記分散オブジェクトを生成するステップは、前記マスターサーバに前記ネットワーク制御情報を記憶するステップを実行させるオブジェクトを生成するクラスを基底クラスとして継承することによって生成されたオブジェクトによって前記マスターサーバが機能させられることにより実行されるものであることを特徴とする分散処理方法。
【請求項１２】
請求項１１に記載の分散処理方法において、
前記マスターサーバに前記ネットワーク制御情報を記憶するステップを実行させるオブジェクトは、ネットワークの構成に応じてユニークであることを特徴とする分散処理方法。
【請求項１３】
計算タスクの分散処理を統括するマスターサーバと、
当該マスターサーバとネットワークを介して接続され、数値制御型工作機械を使用した材料の加工刃による切削加工により加工品を製作するための加工刃のパスの数値制御データを計算により導出するための計算タスクが所定の分割方法及び所定の分割数によって分割された分割計算タスクの計算処理を実行する複数のスレーブサーバと、を含むコンピュータに所定の機能を実現させるプログラムであって、当該プログラムは、
前記マスターサーバが、前記計算タスクを分割するための所定の分割数の入力を受け付ける機能と、
前記マスターサーバが、前記分割方法及び前記計算範囲に関わりなく前記マスターサーバと前記スレーブサーバとの間の通信を制御するためのネットワーク制御情報を記憶する機能と、
前記マスターサーバが、前記計算タスクを入力された前記所定の分割数で分割した所定の計算範囲の分割計算タスクに前記ネットワーク制御情報を付加することによって前記スレーブサーバで計算させるための分散オブジェクトを生成する機能と、
前記マスターサーバが、前記分散オブジェクトに含まれる前記ネットワーク制御情報に基づいて、前記分散オブジェクトを前記スレーブサーバに送信する機能と、
前記スレーブサーバが、前記分散オブジェクトを前記ネットワーク制御情報に基づき前記マスターサーバから受信する機能と、
前記スレーブサーバが、受信した前記分散オブジェクトに含まれる前記分割計算タスクの前記計算範囲における計算処理を前記分割方法に応じた処理によって実行することによって計算処理結果を導出する機能と、
前記スレーブサーバが、前記導出された計算処理結果を前記ネットワーク制御情報に基づいて前記マスターサーバに送信する機能と、
前記マスターサーバが、前記計算処理結果をそれに対応する前記ネットワーク制御情報に基づいて前記スレーブサーバから受信する機能と、
前記マスターサーバが、受信した計算処理結果をそれに対応する前記分割方法及び計算範囲に基づいて結合し、前記計算タスクに対する処理結果を得ることによって前記数値制御データを求める機能と、をコンピュータに実現させることを特徴とするプログラム。
【請求項１４】
請求項１３に記載のプログラムにおいて、前記分割方法は複数の分割方法であり、いずれか１つの分割方法に対して少なくとも１つの他の分割方法がさらに組み合わされて前記計算タスクを分割することを特徴とするプログラム。
【請求項１５】
請求項１３または１４に記載のプログラムにおいて、
前記マスターサーバが前記分散オブジェクトを生成する機能は、オブジェクト指向言語によって記述されたオブジェクトによって前記マスターサーバが機能させられることにより実行されるものであり、
前記スレーブサーバが前記分散オブジェクトを処理する機能は、オブジェクト指向言語によって記述された分散オブジェクトによって前記スレーブサーバが機能させられることにより実行されるものであり、及び
前記マスターサーバが前記ネットワーク制御情報を記憶する機能は、オブジェクト指向言語によって記述されたオブジェクトによって前記マスターサーバが機能させられることにより実行されるものであることを特徴とするプログラム。
【請求項１６】
請求項１３から１５のいずれか１項に記載のプログラムにおいて、
前記マスターサーバが前記分散オブジェクトを生成する機能は、前記マスターサーバに前記ネットワーク制御情報を記憶するステップを実行させるオブジェクトを生成するクラスを基底クラスとして継承することによって生成されたオブジェクトによって前記マスターサーバが機能させられることにより実行されるものであることを特徴とするプログラム。
【請求項１７】
請求項１６に記載のプログラムにおいて、
前記マスターサーバに前記ネットワーク制御情報を記憶する機能を実行させるオブジェクトは、ネットワークの構成に応じてユニークであることを特徴とするプログラム。
【請求項１８】
計算タスクの分散処理を統括するマスターサーバと複数のスレーブサーバとがネットワークを介して接続された分散処理システムにおいて、数値制御型工作機械を使用した材料の加工刃による切削加工により加工品を製作するための加工刃のパスの数値制御データを計算により導出するための計算タスクが所定の分割方法及び所定の分割数によって分割された分割計算タスクの計算処理を前記スレーブサーバで実行するための分散オブジェクト生成方法であって、
前記計算タスクを分割するための所定の分割数の入力を受け付けるステップと、
前記分割方法及び前記計算範囲に関わりなく前記マスターサーバと前記スレーブサーバとの間の通信を制御するためのネットワーク制御情報を記憶するステップと、
前記計算タスクを入力された前記所定の分割数で分割した所定の計算範囲の分割計算タスクに前記ネットワーク制御情報を付加することによって前記スレーブサーバで計算させるための分散オブジェクトを生成するステップと、を有することを特徴とする分散オブジェクト生成方法。
【請求項１９】
請求項１８に記載の分散オブジェクト生成方法において、前記分割方法は複数の分割方法であり、いずれか１つの分割方法に対して少なくとも１つの他の分割方法がさらに組み合わされて前記計算タスクを分割することを特徴とする分散オブジェクト生成方法。
【請求項２０】
請求項１８または１９に記載の分散オブジェクト生成方法において、
前記分散オブジェクトを生成するステップは、オブジェクト指向言語によって記述されたオブジェクトによって前記マスターサーバが機能させられることにより実行されるものであり、及び
前記ネットワーク制御情報を記憶するステップは、オブジェクト指向言語によって記述されたオブジェクトによって前記マスターサーバが機能させられることにより実行されるものであることを特徴とする分散オブジェクト生成方法。
【請求項２１】
請求項１８から２０のいずれか１項に記載の分散オブジェクト生成方法において、
前記分散オブジェクトを生成するステップは、前記マスターサーバに前記ネットワーク制御情報を記憶するステップを実行させるオブジェクトを生成するクラスを基底クラスとして継承することによって生成されたオブジェクトによって前記マスターサーバが機能させられることにより実行されるものであることを特徴とする分散オブジェクト生成方法。
【請求項２２】
請求項２１に記載の分散オブジェクト生成方法において、
前記マスターサーバに前記ネットワーク制御情報を記憶するステップを実行させるオブジェクトは、ネットワークの構成に応じてユニークであることを特徴とする分散オブジェクト生成方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、分散処理システムに関し、より詳しくは、三次元ＣＡＭシステムなどの大量のデータを効率的に計算するための分散オブジェクトを効率的に生成して計算処理する分散処理システム、および当該分散オブジェクトの生成方法に関する。
【背景技術】
【０００２】
近年、携帯電話などの電子機器を始めとして、製造業に求められる製造リードタイムに関しては、市場競争の激化によって短サイクル化が続いている。それに伴い、製品の筐体を製造するための金型を極めて短期に製作する必要性が高まってきている。その一方で、それらの金型は非常に複雑な三次元形状をしていることが多く、金型の製作に時間を要する一因となっている。
【０００３】
データベース化された設計情報および図形などの視覚情報を基にして、コンピュータ内部で設計モデルを作成し、これに基づいてＮＣ（数値制御型）工作機械やロボットなどを制御して生産工程を自動化するシステムがコンピュータ援用製造システム（ＣＡＭ，computer-aided manufacturing）である。ＣＡＭは、通常ＣＡＤシステムと組み合わせて使用され、ＣＡＤで得られた設計情報に製造工程情報を加えて製造業務全体のシステム化を行う。これらの設計から製造までを一貫してコンピュータ処理するためのシステムを、まとめてＣＡＤ／ＣＡＭを呼ぶこともある。
【０００４】
複雑な形状をしている金型は、それの製作の短期化の要請と合わせ、ＣＡＤ／ＣＡＭに適したアプリケーションである。この場合、金型は、ＮＣ工作機械を使用した材料の加工刃による切削加工によって製作される。ここでは、まず金型は、ＣＡＤによって設計され、三次元形状モデルで表わされた形状データとして具体化される。ＮＣ工作機械においては、切削刃を種々の走査方法及びそれに応じたＮＣパスによって、材料に対して走査させる。ここで、そのような切削加工においては、精度や製作の容易さの観点から、材料を高さ方向に対して固定し、切削刃を二次元的に走査することによって切削することが多い。そして、高さをごくわずかずつ変化させ、そのそれぞれにおいて切削刃を二次元的に走査することを多段階的に行っていく。さらには、切削刃の形状や半径、ＮＣパスの物理的意味などが異なる複数の走査方法で、同じ材料に対して何度も切削刃の走査を行うことも通常である。このような方法によって、複雑な三次元形状の金型を、切削刃の走査の組み合わせにより、人手によらず、機械的に削り出すことができる。
【０００５】
切削刃の走査のためのＮＣパスは、金型の三次元形状モデルから計算によって求める必要がある。しかも、複雑な形状の金型を切削刃によって削り出すためには、極めて多くの高さ方向の段階の形状処理のためのＮＣパスを求める必要がある。この計算は、ＮＣパスのデータは極めて高精度であることと相まって、膨大な計算量を必要とする。従来、このようなＮＣパスのデータの計算に多くの時間を費やしており、これが金型製作の短期化に対して障害となっていた。実際、三次元ＣＡＭに求められる科学技術計算は、サブミクロン単位の極めて高い精度が要求されるようになっており、それぞれの形状処理の計算量も大きく増加してきている。そして、ＣＡＭシステムのＮＣパスデータ生成に関しても、演算精度の高精度化と計算時間短縮の両立が求められている。従って、ＮＣパスデータを、コンピュータによる計算によって、より短時間に求めることができるようになれば、金型の製作期間をより短縮することができる。
【０００６】
コンピュータに大量のデータの計算をさせる場合、コンピュータの計算能力などの計算機資源が問題となってくる。１台のコンピュータの計算能力は高くなっているが、それでも、上述のようなアプリケーションにおいて十分な計算能力が得られてはいない。近年、そのような大量のデータの計算に特に適したコンピュータアーキテクチャーとして、計算タスクを分散処理する分散処理システムが脚光を浴びている。一般的な分散処理システムは、計算タスクの分散処理を統括するマスターサーバと、当該マスターサーバとネットワークを介して接続され、分散された計算タスクの計算処理を実行する複数のスレーブサーバとが接続された構成をしている。このような構成とすることによって、膨大な計算量を必要とする計算タスクを個々のスレーブサーバに分割計算タスクとして分散させて処理させ、それぞれからの計算処理結果を再びマスターサーバで結合することによって、全体として、膨大な量の１つの計算タスクを短時間に処理することができる。
【発明の開示】
【発明が解決しようとする課題】
【０００７】
金型を製作するための切削刃の走査方法には、その機能に応じていくつか種類がある。そのような操作方法のための切削刃のパスとしては、例えば、塗りつぶし、等高線仕上げなどがある。塗りつぶしとは、ある高さ範囲における輪郭線の内側のボリュームを、１つ以上の塗りつぶしパスに沿った切削加工により削り取る工程である。等高線仕上げとは、１つの輪郭線に対して等高線に沿ったパスで切削加工を行い、必要な輪郭を削り残す行程である。他にも切削刃の走査方法には何種類かあり、その細かい部分の設定を含めると、多数の種類が存在する。これらを適切に設計するには、ＣＡＭ分野の高い技術が必要である。
【０００８】
分散処理システムによって計算タスクを分散処理するためには、そのようなＣＡＭ分野の技術に加えて、分散処理の技術や、ネットワーク制御の技術が必要となる。分散処理のためには、まず、機能に応じた分割方法によって計算タスクを適切に分割する必要がある。その上で、分割された計算タスクをそれぞれのスレーブサーバに対して送信し、スレーブサーバからの計算処理結果を受信して、それを結合する必要がある。ここで、計算タスクの適切な分割形態は機能ごとに異なっており、それを適切に処理するためには、その機能の技術と分散処理の技術の双方が必要となる。ここに、分散処理システムの計算処理を高速に行わせるための一つの対策として、できるだけ多くの分割方法を用いることによって、計算タスクの分割数を大きくする手法がある。分割方法を多くするために、できるだけ下位の機能に基づいて多様な分割方法で計算タスクを分割することが考えられる。しかし、下位の機能に基づき計算タスクを分割するためには、多くの開発工数が必要とされる。また、分割方法を多様にするためには、機能特有の処理ロジックなどの、ますます高い開発者の専門性が求められることになる。
【０００９】
一方、開発の困難さを低減し、開発工数を増加させないためには、上位の機能に基づいたままで分割すればよい。このようにすると、下位の機能の処理も含めて分割されることになるため、下位の機能に関する分割処理のための開発を行う必要がなくなり、開発工数を抑えることができる。しかし、上位の機能に基づいて分割しようとすると、下位の機能に基づく処理に要する処理時間が分からないため、上位の機能に基づいて分割するときでも、下位の機能に基づく処理時間を事前に予測して、できるだけ均等な処理時間となるように分割する必要が生じてくる。しかしこのようにしても、一定以上の処理時間の均等化は極めて困難であり、結果として、各スレーブサーバに均等な計算量を割り当てることができなくなっていた。よって、計算タスクをより下位の機能に基づいて分割する必要性が高まってきていた。
【００１０】
その一方で、分割された計算タスクおよびそれの計算処理結果を、ネットワークを介してマスターサーバとスレーブサーバとの間で通信・同期させる分散処理制御のためには、通信のタイミングパターンを網羅した制御を行わせる必要があり、ネットワーク特有のタイミングによるデッドロックの発生の回避などの極めて高いネットワーク処理の技術が求められることになる。これは、計算タスクの分割をより多様な機能に基づいて分割しようとすると、それの通信・同期処理も複雑になって、ネットワーク処理も複雑となることから、まずます顕著になってくる。スレーブサーバへの計算タスクの配信は、独立したデータ形式の分散計算オブジェクトの形態とされて送信されることが通常である。分散計算オブジェクトは、適切に分割された計算タスクに加えてネットワーク制御情報も含んでいなければ、ネットワークを介して通信することができない。しかし、分割形態に対応する機能の開発者にとっては、計算タスクを分割してネットワーク制御情報を付加することによって分散計算オブジェクトを生成することは非常に困難なことであり、これが開発工数を押し上げる要因となっていた。
【００１１】
図１は、三次元形状モデルで表わされた金型の形状を切削加工により製作するためのパスの集合体を求めるための計算タスクの分割方法の一例を表わす概念図である。同図の直方体は、三次元形状モデルである。同図では、三次元形状モデルに関する計算タスクを高さ方向に分割する概念が表わされている。この分割方法によると、高さ範囲１０１、高さ範囲１０２というように、高さ方向（Ｚ方向）に三次元形状モデルを輪切りにされ、その断面において、三次元形状モデルは、輪郭線１０１Ａ、輪郭線１０２Ａという輪郭を有している。このように分割するためには、まず、分割後に並列的に計算でき、実際に分散処理できる形態に分割する必要がある。また、分割したものをネットワークを通じて配信処理するために、適切なネットワーク制御情報を付加する必要もある。
【００１２】
図２は、従来の分散計算オブジェクトを生成するためのフロー図である。まず、開発者は、三次元形状モデル、工具モデル、加工条件からなる計算タスクに適した分割方法を特定する（ステップＳ２０１）。次に、分割方法に応じた、分割による配信の同期、結合による返信の同期のための送受信同期方法を特定する（ステップＳ２０３）。ここで送受信同期方法を特定するためには、ＣＡＤの技術に加えて分散処理の技術が必要とされる。次に、計算タスクをその分割方法に応じて分割する（ステップＳ２０５）。次に、分割計算タスクに、送受信同期方法に応じたネットワーク制御情報を付加する（ステップＳ２０７）。ここでネットワーク制御情報を付加するためには、ＣＡＤの技術に加えてネットワーク制御の技術が必要とされる。
【００１３】
図３は、このような従来の分散計算オブジェクトの生成方法に関して、分割方法の数と全体の計算時間との関係、および分割方法の数と開発工数との関係を表わすグラフである。その上側の(i) 分割方法の数と全体の計算時間のグラフでは、分割方法の数が多くなると分散処理システム全体の計算時間が小さくなることを表わしている。これは多くの分割方法を用いることによって、より好適な分割が行えるようになるからである。その下側の(ii) 分割方法の数と開発工数分散数と計算時間のグラフでは、分割方法の数が多くなると、開発が複雑化し、開発工数が大きくなることを表わしている。
【課題を解決するための手段】
【００１４】
上記の課題は以下の特徴を有する本発明によって解決される。すなわち、請求項１に記載の発明は、計算タスクの分散処理を統括するマスターサーバと、当該マスターサーバとネットワークを介して接続され、数値制御型工作機械を使用した材料の加工刃による切削加工により加工品を製作するための加工刃のパスの数値制御データを計算により導出するための計算タスクが所定の分割方法及び所定の分割数によって分割された分割計算タスクの計算処理を実行する複数のスレーブサーバと、を含む分散処理システムであって、
前記マスターサーバは、前記計算タスクを分割するための所定の分割数の入力を受け付ける分割数入力手段と、前記分割方法及び前記計算範囲に関わりなく前記マスターサーバと前記スレーブサーバとの間の通信を制御するためのネットワーク制御情報を記憶するネットワーク制御情報記憶手段と、前記計算タスクを入力された前記所定の分割数で分割した所定の計算範囲の分割計算タスクに前記ネットワーク制御情報を付加することによって前記スレーブサーバで計算させるための分散オブジェクトを生成する分散オブジェクト生成手段と、前記分散オブジェクトに含まれる前記ネットワーク制御情報に基づいて、前記分散オブジェクトを前記スレーブサーバに送信する分散オブジェクト送信手段と、を有し、
前記スレーブサーバは、前記分散オブジェクトを前記ネットワーク制御情報に基づき前記マスターサーバから受信する分散オブジェクト受信手段と、受信した前記分散オブジェクトに含まれる前記分割計算タスクの前記計算範囲における計算処理を前記分割方法に応じた処理によって実行することによって計算処理結果を導出する分散オブジェクト処理手段と、前記導出された計算処理結果を前記ネットワーク制御情報に基づいて前記マスターサーバに送信する計算処理結果送信手段と、を有し、
前記マスターサーバは、前記計算処理結果をそれに対応する前記ネットワーク制御情報に基づいて前記スレーブサーバから受信する計算処理結果受信手段と、受信した計算処理結果をそれに対応する前記分割方法及び計算範囲に基づいて結合し、前記計算タスクに対する処理結果を得ることによって前記数値制御データを求める計算処理結果結合手段と、を有することを特徴とする。
【００１５】
請求項２に記載の発明は、さらに、前記分割方法は複数の分割方法であり、いずれか１つの分割方法に対して少なくとも１つの他の分割方法がさらに組み合わされて前記計算タスクを分割することを特徴とする。
【００１６】
請求項３に記載の発明は、さらに、前記分散オブジェクト生成手段は、オブジェクト指向言語によって記述されたオブジェクトによって前記マスターサーバが機能させられることにより実装されるものであり、前記分散オブジェクト処理手段は、オブジェクト指向言語によって記述された分散オブジェクトによって前記スレーブサーバが機能させられることにより実装されるものであり、及び前記ネットワーク制御情報記憶手段は、オブジェクト指向言語によって記述されたオブジェクトによって前記マスターサーバが機能させられることにより実装されるものであることを特徴とする。
【００１７】
請求項４に記載の発明は、さらに、前記分散オブジェクト生成手段は、前記マスターサーバを前記ネットワーク制御情報記憶手段として機能させるオブジェクトを生成するクラスを基底クラスとして継承することによって生成されたオブジェクトによって前記マスターサーバが機能させられることにより実装されるものであることを特徴とする。
【００１８】
請求項５に記載の発明は、さらに、前記ネットワーク制御情報記憶手段を実装するオブジェクトは、ネットワークの構成に応じてユニークであることを特徴とする。
【００１９】
請求項６に記載の発明は、さらに、前記加工品は、部品の金型であることを特徴とする。
【００２０】
請求項７に記載の発明は、さらに、前記加工刃のパスは、前記金型の輪郭の内側のボリュームを加工刃で切削するための塗りつぶしパス、前記金型の輪郭に沿ったパスで必要な輪郭を削り残すように加工刃で切削するための等高線仕上げパスを含むことを特徴とする。
【００２１】
請求項８から１２に記載の方法の発明および請求項１３から１７に記載のプログラムの発明についても、それらはそれぞれ上記の請求項のいずれかに対応しており、それと同じ特徴を有している。
【００２２】
請求項１８に記載の発明は、計算タスクの分散処理を統括するマスターサーバと複数のスレーブサーバとがネットワークを介して接続された分散処理システムにおいて、数値制御型工作機械を使用した材料の加工刃による切削加工により加工品を製作するための加工刃のパスの数値制御データを計算により導出するための計算タスクが所定の分割方法及び所定の分割数によって分割された分割計算タスクの計算処理を前記スレーブサーバで実行するための分散オブジェクト生成方法であって、前記計算タスクを分割するための所定の分割数の入力を受け付けるステップと、前記分割方法及び前記計算範囲に関わりなく前記マスターサーバと前記スレーブサーバとの間の通信を制御するためのネットワーク制御情報を記憶するステップと、前記計算タスクを入力された前記所定の分割数で分割した所定の計算範囲の分割計算タスクに前記ネットワーク制御情報を付加することによって前記スレーブサーバで計算させるための分散オブジェクトを生成するステップと、を有することを特徴とする。
【００２３】
請求項１９に記載の発明は、さらに、前記分割方法は複数の分割方法であり、いずれか１つの分割方法に対して少なくとも１つの他の分割方法がさらに組み合わされて前記計算タスクを分割することを特徴とする。
【００２４】
請求項２０に記載の発明は、さらに、前記分散オブジェクトを生成するステップは、オブジェクト指向言語によって記述されたオブジェクトによって前記マスターサーバが機能させられることにより実行されるものであり、及び前記ネットワーク制御情報を記憶するステップは、オブジェクト指向言語によって記述されたオブジェクトによって前記マスターサーバが機能させられることにより実行されるものであることを特徴とする。
【００２５】
請求項２１に記載の発明は、さらに、前記分散オブジェクトを生成するステップは、前記マスターサーバに前記ネットワーク制御情報を記憶するステップを実行させるオブジェクトを生成するクラスを基底クラスとして継承することによって生成されたオブジェクトによって前記マスターサーバが機能させられることにより実行されるものであることを特徴とする。
【００２６】
請求項２２に記載の発明は、さらに、前記マスターサーバに前記ネットワーク制御情報を記憶するステップを実行させるオブジェクトは、ネットワークの構成に応じてユニークであることを特徴とする。
【００２７】
上記の発明は、ソフトウェアを用いることにより、その全部または一部をソフトウェアによる情報処理がハードウェア資源を用いて具体的に実現されるものとして実施することができる。サーバなどの物理的構成を表わす用語は、装置の具体的形態や具体的呼称を限定するものではなく、その一般的な機能を備えた物理的構成を表わすためのものである。上記システムの発明は、それぞれの構成要素の有する機能が逐次的に実行される方法の発明として把握することもできる。その場合において、各構成要素は記載された順序に実行されるものに限定されるものではなく、全体としての機能が矛盾なく実行され得る限りにおいて、自由な順序でそれを実行することができる。１つの手段が有する機能が２つ以上の物理的構成によって実現されてもよく、２つ以上の手段が有する機能が１つの物理的構成によって実現されてもよい。１つのステップが有する機能が２つ以上のステップによって実現されてもよく、２つ以上のステップが有する機能が１つのステップによって実現されてもよい。これらの発明は、所定のハードウェアにおいて本発明の機能を実現するためのプログラムとしても成立し、それを記録した記録媒体としても成立する。また本発明は、搬送波上に具現化されたコンピュータ・データ信号であって、そのプログラムのコードを備えたものとしても成立しうる。
【発明の効果】
【００２８】
本発明によると、マスターサーバとスレーブサーバとを含む分散処理システムにおいて、分割方法及び計算範囲に関わりなくマスターサーバとスレーブサーバとの間の通信を制御するためのネットワーク制御情報を記憶し、計算タスクを入力された所定の分割数で分割した所定の計算範囲の分割計算タスクにネットワーク制御情報を付加することによってスレーブサーバで計算させるための分散オブジェクトを生成してスレーブサーバに送信し、スレーブサーバは、受信した分散オブジェクトのそれの計算範囲における計算処理を分割方法に応じた処理によって実行し、その計算処理結果をマスターサーバに送信し、マスターサーバは、スレーブサーバから受信した計算処理結果を結合して数値制御データを求めるため、計算タスクを分散処理システムで計算処理するための分散オブジェクトを生成する際にネットワーク制御に関する開発が不要となり、開発工数を削減することができるという効果が得られる。
【００２９】
さらに本発明によると、分散オブジェクトの生成は、オブジェクト指向言語によって記述されたオブジェクトによってマスターサーバが機能させられることにより実行されるものであり、分散オブジェクトの処理は、オブジェクト指向言語によって記述された分散オブジェクトによってスレーブサーバが機能させられることにより実行されるものであり、及びネットワーク制御情報の記憶は、オブジェクト指向言語によって記述されたオブジェクトによってマスターサーバが機能させられることにより実行されるものであるため、オブジェクト指向設計の特徴である、ソースコードの利用性、生産性、保守性、拡張性などを高レベルに維持することができるという効果が得られる。
【００３０】
さらに本発明によると、分散オブジェクトの生成は、マスターサーバをネットワーク制御情報の記憶のために機能させるオブジェクトを生成するクラスを基底クラスとして継承することによって生成されたオブジェクトによってマスターサーバが機能させられることにより実行されるものであるため、ＣＡＭの開発者は、そのような基底クラスを継承することによって、ネットワーク制御に関する機能を開発することなく、分散オブジェクトにそれを含ませることができるという効果が得られる。
【００３１】
さらに本発明によると、ネットワーク制御情報の記憶を実行させるオブジェクトは、ネットワークの構成に応じてユニークであるため、ネットワーク構成が変わらない限り、ネットワーク制御に関する開発を行う必要がなく、開発工数を削減することができるという効果が得られる。
【００３２】
さらに本発明によると、マスターサーバとスレーブサーバとを含む分散処理システムにおいて分散処理が実行される分散オブジェクトの生成方法において、分割方法及び計算範囲に関わりなくマスターサーバとスレーブサーバとの間の通信を制御するためのネットワーク制御情報を記憶し、計算タスクを分割するための所定の分割数の入力を受け付け、分割方法及び計算範囲に関わりなくマスターサーバとスレーブサーバとの間の通信を制御するためのネットワーク制御情報を記憶し、計算タスクを入力された所定の分割数で分割した所定の計算範囲の分割計算タスクにネットワーク制御情報を付加することによってスレーブサーバで計算させるための分散オブジェクトを生成するため、計算タスクを分散処理システムで計算処理するための分散オブジェクトを生成する際に、ネットワーク制御に関する開発が不要となり、開発工数を削減することができるという効果が得られる。
【発明を実施するための最良の形態】
【００３３】
これから図面を参照して本発明の実施形態について、構成、動作の順に説明する。図４は、本発明の一実施形態に係る分散処理システム２０の構成を表わすシステム構成図である。分散処理システム２０は、大きく、マスターサーバ２１と、それとネットワークを介して接続されたスレーブサーバ２２で構成される。マスターサーバ２１は、計算タスクを分割して分散計算オブジェクトを生成し、それに接続されたスレーブサーバ２２で分散計算オブジェクトの計算処理を実行させるための分散処理を統括する構成要素であり、分散処理機能やネットワーク制御などを行うための情報を含んだ分散オブジェクトの生成機能を実現するプログラムがハードディスクなどの記憶装置に記憶され、それを実行するＣＰＵ、メモリなどの処理手段を有し、ネットワーク等のインターフェースなどを有するコンピュータの形態である。
【００３４】
スレーブサーバ２２は、マスターサーバ２１からの指令に基づき、それに割り当てられた分割計算タスクの計算処理を実行する構成要素であり、計算処理機能やネットワーク制御機能などを実現するプログラムがハードディスクなどの記憶装置に搭載され、それを実行するＣＰＵ、メモリなどの処理手段を有し、ネットワーク等のインターフェースなどを有するコンピュータが複数台数クラスタ接続された形態である。実際にはスレーブサーバ２２は、多数の、例えば１００台以上位の大規模のスレーブサーバがクラスタ接続される。
【００３５】
分散処理システム２０は、オペレータによる操作を容易にするために、さらにＷｅｂサーバ２３、クライアント２４にインターネットなどのネットワークを介して接続されていてもよい。オペレータは、クライアント２４を使用することにより、直接あるいはＷｅｂサーバ２３を介して、マスターサーバ２１の操作を行うことができる。
【００３６】
Ｗｅｂサーバ２３は、ＷＷＷに分散処理システム２０の操作のためのＷｅｂページを提供すための構成要素であり、Ｗｅｂサーバ機能やネットワーク制御機能などを実現するプログラムがハードディスクなどの記憶装置に記憶され、それを実行するＣＰＵ、メモリなどの処理手段を有し、インターネットなどのネットワーク等のインターフェースなどを有するコンピュータの形態である。
【００３７】
クライアント２４は、端末用クライアントコンピュータであり、同様のものが複数設置されていてもよい。それはネットワークアクセス機能などを実現するプログラムがハードディスクなどの記憶装置に記憶され、それを実行するＣＰＵ、メモリなどの処理手段を有し、インターネットなどのネットワーク等のインターフェースなどを有するコンピュータの形態である。クライアント２４を通じて、オペレータはＷｅｂサーバ２３や配信サーバ２１ａにアクセスすることができる。
【００３８】
図５は、本発明の一実施形態に係る分散処理システム２０の分散処理の概念を表わす概念図である。計算タスクは、マスターサーバ２１において、複数のデータに分割される（ステップＳ５０１）。分割された計算タスクは分割計算タスクとなり、スレーブサーバ２２の受入可能ないずれかのスレーブサーバへと送信される（ステップＳ５０３）。ここではまず、スレーブサーバ２２Ａに分割計算タスクが送信され、スレーブサーバ２２Ａが分割計算タスクを受信する（ステップＳ５０５）。スレーブサーバ２２Ａは分割計算タスクを受入可能でなくなったため、次のスレーブサーバ２２Ｂに分割計算タスクが送信され、スレーブサーバ２２Ｂが分割計算タスクを受信する（ステップＳ５０７）。スレーブサーバ２２Ａが分割計算タスクの計算処理を実行し（ステップＳ５０９）、スレーブサーバ２２Ｂが分割計算タスクの計算処理を実行する（ステップＳ５１１）。スレーブサーバ２２Ａが分割計算タスクの計算処理を実行し（ステップＳ５０９）、スレーブサーバ２２Ｂが分割計算タスクの計算処理を実行する（ステップＳ５１１）。スレーブサーバ２２Ａが計算処理結果をマスターサーバ２１に送信し（ステップＳ５１３）、スレーブサーバ２２Ｂが計算処理結果をマスターサーバ２１に送信する（ステップＳ５１５）。マスターサーバ２１は、スレーブサーバ２２から計算処理結果を受信する（ステップＳ５１７）。そしてマスターサーバ２１は、計算処理結果のデータを結合し、全体の計算処理結果を構成する（ステップＳ５１９）。
【００３９】
これからマスターサーバ２１とスレーブサーバ２２の間の処理について説明する。まず、それの構成について説明する。図６は、マスターサーバ２１とスレーブサーバ２２の構成を表わす構成図である。マスターサーバ２１は、分割情報入力手段２１ａ、分割情報記憶手段２１ｂ、計算モデル入力手段２１ｃ、計算モデル記憶手段２１ｄ、ネットワーク制御情報記憶手段２１ｅ、分散オブジェクト生成手段２１ｆ、分散オブジェクト配信手段２１ｇ、計算処理結果受信手段２１ｈ、および計算処理結果結合手段２１ｉから構成される。スレーブサーバ２２は、分散オブジェクト受信手段２２ａ、分散オブジェクト処理手段２２ｂ、および計算処理結果送信手段２２ｃから構成される。それぞれの構成要素は、ハードディスクなどの記憶装置に記憶されたその機能を実現するプログラムが、ＣＰＵ、メモリなどの処理手段によって実行され、データバス、ネットワーク等のインターフェースなどを介して他の構成要素に結果を伝達することによって構成として具体化されるものである。それぞれの構成要素の機能については、以下の動作フローの説明において説明する。
【００４０】
これからマスターサーバ２１とスレーブサーバ２２の間の処理の動作フローについて図面を参照して説明する。図７Ａおよび図７Ｂは、マスターサーバ２１とスレーブサーバ２２の間の処理を表わす動作フロー図である。まずオペレータは、分割方法、分割数を分割情報入力手段２１ａから入力する（ステップＳ７０１）。分割方法には、例えば、高さ方向の範囲で分割、（同じ高さにおける）ＸＹ平面上のオフセットの長さでの分割、複数のＸ−Ｙ領域での分割、加工条件（例えば、Φ６荒、Φ３荒、Φ６仕上、など）での分割、などがある。後述の加工条件に対応して、それぞれの分割方法が定められるが、１つの加工条件に対して複数の分割方法を適用してもよい。分割方法が１つしか使用されない場合は、分割数のみの入力で構わない。また、分割数に代えて、計算タスクをそれぞれどの範囲で分割するかを入力してもよい。これによっても最終的な分割数が決定されるため、ここでの分割数という用語は、分割範囲のような分割の仕方を特定するものを広く含むものとする。入力は、クライアント２４からネットワークを通じて行うことができる。この際に、Ｗｅｂサーバ２３が提供するＷｅｂページを介して行うこともできる。次に、分割情報記憶手段２１ａが、入力された分割方法、分割数を記憶する（ステップＳ７０３）。次にオペレータは、三次元形状モデル、工具モデル、加工条件を計算モデル入力手段２１ｃから入力する（ステップＳ７０５）。三次元形状モデルは、金型の三次元形状をＢ−スプライン曲面などの表現手法で表わしたものである。工具モデルは、工具の切削特性や切削形状などを表わしたものである。加工条件は、工具の種類、工具の直径、工具の有効長、シャンクホルダーの形状、加工種類（等高線、走査線、天面）、切削条件（Ｚピッチ、シフトピッチ、工具移動高さ、送り速度、形状の残し代、アプローチ速度）などを表わしたものである。なおこの加工条件は、スレーブサーバ２２の分散オブジェクト処理手段２２ｂにてパスのＧコード（加工機の工具軌跡を制御する情報）を生成する際に使用される。入力は、クライアント２４からネットワークを通じて行うことができる。この際に、Ｗｅｂサーバ２３が提供するＷｅｂページを介して行うこともできる。その次に、計算モデル記憶手段２１ｄが、入力された三次元形状モデル、工具モデル、加工条件を含む計算モデルを記憶する（ステップＳ７０７）。
【００４１】
その次に、分散オブジェクト生成手段２１ｆが、分割方法、分割数に基づき計算モデルに関する計算タスクを複数のオブジェクトに分割し、ネットワーク制御情報記憶手段２１ｅが記憶しているネットワーク制御情報を付すことによって分散オブジェクトを生成する（ステップＳ７０９）。分割は、分割された計算タスクのそれぞれに対する計算処理を並列的に実行できるような方法で行う。なお、計算タスクから分散オブジェクトが生成されるが、ここでは、独立してネットワークを通じて伝達され、スレーブサーバ２２において自律的に計算処理を行うことができるようなまとまりをオブジェクトと呼んでいる。なお分散オブジェクトは、好適には、オブジェクト指向言語によって記述されたオブジェクトである。このような方法で分散計算オブジェクトを記述することによって、オブジェクト指向設計の特徴である、ソースコードの利用性、生産性、保守性、拡張性などを高レベルに維持することができる。
【００４２】
複数のオブジェクトへの分割は、三次元形状モデルなどで表現された計算タスクを、直接分割することは必ずしも必要ではない。例えば、マスターサーバ２１によって、ネットワーク上の特定のパスに計算タスクが置かれている場合には、分割範囲だけを特定することによって、スレーブサーバ２２は、計算処理の実行時にそのパスから分割範囲の計算タスクを読み出すことができる。従って、このようにする場合には、分割するということは分割範囲を定めることと同義である。よって、分割は、分割範囲の特定および計算タスクのパスの特定によって行われると好適である。こうすることによって、少ないデータ量で計算タスクの分割を表現することができ、ネットワークを通じてスレーブサーバ２２に送信する際のネットワークオーバーヘッドを最低限に抑えることが可能となる。
【００４３】
分散オブジェクトには、計算タスク全体のなかのどの部分が分割されたものであるのかを表わす分割ＩＤが付される。分割ＩＤは種々の形態を取ることができ、例えば、分割の順番を表わす番号でもいいし、どの計算範囲かを表わす分割範囲でもよい。分割を分割範囲の特定によって行っている場合には、その分割範囲はそのまま分割ＩＤとして機能することができる。このように、分割された計算タスクに分割ＩＤを付すことによって、スレーブサーバ２２で分散計算オブジェクトに対して計算処理が実行された後に、その計算処理結果を結合して全体の計算タスクに対する計算処理結果を得ることができる。
【００４４】
ネットワーク制御情報記憶手段２１ｅが記憶しているネットワーク制御情報は、分割方法及び計算範囲に関わりなく、マスターサーバ２１とスレーブサーバ２２との間の通信を制御するための情報であり、好適には、ネットワークの構成に応じてユニークである。このようにすることによって、計算モデルを変更して他の分散処理を行わせる場合に、ネットワークの構成が変わらない限り、ネットワーク制御情報を変更する必要がなくなる。これによって、ＣＡＭの機能開発者は、ネットワーク制御の開発を行う負担から解放され、開発工数を大幅に削減することができる。好適にはネットワーク制御情報は、マスターサーバに分散オブジェクトのネットワーク制御を行わせるようにオブジェクト指向言語によって記述されたオブジェクト（これ以降、「ネットワーク制御オブジェクト」と呼ぶ。）である。そして、分散オブジェクトもオブジェクト指向言語によって記述されたオブジェクトであり、分散オブジェクトは、ネットワーク制御オブジェクトを生成するクラスを基底クラスとして継承することによって生成されたオブジェクトである。このようにすることにより、ＣＡＭの機能開発者は、ＣＡＭの機能を実装したオブジェクトを開発すれば、後は、ネットワーク制御オブジェクトを生成するクラスを基底クラスとして継承させるだけで、ＣＡＭの計算処理機能に加えてネットワーク制御機能を併せ持った分散オブジェクトを生成することができ、開発工数を大幅に削減することが可能となる。ネットワーク制御情報は、自己（マスターサーバ２１）のアドレスや相手方（スレーブサーバ２２）のアドレスなどを含む制御情報である。
【００４５】
分散計算オブジェクトには、塗りつぶしパスの計算、等高線仕上げ加工の計算などのそれぞれの機能に応じた関数が実装される。これによって、任意の計算範囲で、そのような計算処理を行うことが可能となる。ここで、機能の分散化の実装の手順について説明する。まず、所定の機能に関して、分散処理のための送受信するデータの整理を行う。計算処理を実施したい所定の機能（加工種類）が定まると、分散処理に関係なく、どのようなインプットデータを入力して、どのようなアウトプットデータを出力するのかが定まる。次に、それを分散処理する際にマスターサーバ２１からスレーブサーバ２２に送信されるインプットデータには、計算開始前に一度だけスレーブサーバに伝達すればいいものと、それぞれの分散計算オブジェクトに対して毎回伝達しなければならないものとがある。スレーブサーバ２２からマスターサーバ２１に送信されるアウトプットデータとしては、スレーブサーバ側で生成された計算処理結果がある。
【００４６】
具体的な一例として、等高線仕上げパスの計算について考える。すると、その機能のインプットデータとしては、高さの範囲、Ｚピッチ、削り残しデータ（以前の処理でどこまで削り残されているのかという情報）、三次元形状モデル、が考えられる。マスターサーバ２１からスレーブサーバ２２に送信されるインプットデータには、計算開始前に一度だけスレーブサーバに伝達すればいいものとしては、削り残しデータを特定する工程番号などが挙げられ、それぞれの分散計算オブジェクトに対して毎回伝達しなければならないものとしては、高さの値などが挙げられる。スレーブサーバ２２からマスターサーバ２１に送信されるアウトプットデータとしては、インプットデータに示された高さの値における等高線仕上げパスが挙げられる。このようにして、まず、必要なデータのＩ／Ｏを定義し、それらの処理を実装する関数を分散計算オブジェクトに含ませる。
【００４７】
次に、Ｉ／Ｏを作るための機能に関して、分散処理のためのデータの整理を行う。まず、所定の機能に対するインプットデータを、分散処理のためにどのような分割方法で分割するのかを定める。次に、それを分散処理する際に、スレーブサーバ２２でどのようなメイン処理を行うのかを定める。その次に、そのメイン処理の計算処理結果をマスターサーバ２１においてどのようなデータ結合方法で結合するのかを定める。それぞれの計算処理結果が結合されたものが、その機能のアウトプットデータとして出力される。
【００４８】
具体的な一例として、等高線仕上げパスの計算について考える。データ分割方法としては、高さ方向で分割するものとする。このためには、インプットデータとしては、高さの範囲、Ｚピッチから生成された高さの配列が考えられる。この配列の要素の数だけ、分散計算オブジェクトが生成されるようにする。
【００４９】
それを分散処理する際に、スレーブサーバ２２においてその機能が実施するメイン処理としては、工程番号から削り残しデータを読み込む処理、指定された高さ範囲の等高線仕上げパスの生成計算処理が考えられる。従って、それらの処理を実装する関数を分散計算オブジェクトに含ませる。そのメイン処理の計算処理結果である指定された高さ範囲の等高線仕上げパスは、マスターサーバ２１において高さ範囲に応じて配列に格納されることによってデータ結合が実施される。全体の高さ範囲にわたる配列に格納された等高線仕上げパスが、その機能（等高線仕上げパスの計算）のアウトプットデータとして出力される。
【００５０】
上述の例では、機能として等高線仕上げパスの計算に関して説明をしたが、他の機能として、塗りつぶしパスの計算などについても、同様にして分散処理を行わせることができる。ここで、開発者が実質的に行う必要のある開発は上記の機能の分散化の処理である。ネットワーク制御処理は、上記の機能を実現するクラスにネットワーク機能を有するクラスを継承させることによって実現できるため、個別に開発を行わなくてもよい。
【００５１】
その次に、分散オブジェクト配信手段２１ｇが、スレーブサーバ２２に対して分散オブジェクトをネットワークを介して配信する（ステップＳ７１１）。マスターサーバ２１は、ネットワーク上のスレーブサーバ２２の受入可能状況を常にモニターしており、受入可能であるスレーブサーバ２２に対して分散オブジェクトを次々と配信する。
【００５２】
その次に、分散オブジェクト受信手段２２ａが、マスターサーバ２１から配信される分散オブジェクトをネットワークを介して受信する（ステップＳ７１３）。その次に、分散オブジェクト処理手段２２ｂが、受信した分散オブジェクトに対する計算処理を分割方法に応じた処理によって実行する（ステップＳ７１５）。分散オブジェクトは、好適には分割範囲と計算タスクのパスの情報を有しており、スレーブサーバ２２は、マスターサーバ２１によってネットワーク上のパスに置かれた計算タスクの分割範囲の部分を読み出し、それに基づいて計算処理を実行する。ここで計算処理を実行する際には、計算モデル記憶手段２１ｄが、スレーブサーバ２２からの読み出しに応答して、三次元形状モデル、工具モデル、加工条件をスレーブサーバ２２に送信する（ステップＳ７１７）。ただし、工具モデルや加工条件が全体の計算タスクにおいて同一である場合は、最初に一度だけそれらをスレーブサーバ２２に送信すれば十分である。
【００５３】
次に、計算処理結果送信手段２２ｃが、計算処理が完了した分散オブジェクトの計算処理結果を、ネットワークを介して計算処理結果受信手段２１ｈに送信する（ステップＳ７１９）。スレーブサーバ２２が計算処理結果をマスターサーバ２１に送信する際には、ネットワーク制御情報を使用して適切に配信する。計算処理結果受信手段２１ｈが、計算処理結果送信手段２２ｃから送信された計算処理結果を受信する（ステップＳ７２１）。次に計算処理結果結合手段２１ｃが、受信した計算処理結果を結合し、計算タスクに対する処理結果を得る（ステップＳ７２３）。計算処理結果の結合の際には、それの分割ＩＤに基づいて適切に結合する。
【００５４】
上記の動作は、すべての計算タスクが分割されて処理されるまで、連続的に行われる。これによって、計算タスク全体に対する計算処理結果が得られることになる。
【００５５】
次に、上記の加工条件に含まれる加工種類について詳しく説明する。図８は、三次元形状モデルで表わされた金型の形状を切削加工により製作するためのパスの集合体を求めるための計算タスクの種々の分割方法を表わす概念図である。同図の直方体は、三次元形状モデルが表わす形状である。同図では、（ｉ）高さ方向で分割、（ｉｉ）輪郭線ごとに分割、（ｉｉｉ）Ｘ−Ｙ領域で分割、の３種類の分割方法が示されている。まず、「（ｉ）高さ方向で分割」の項には、三次元形状モデルに関する計算タスクを高さ方向に分割する概念が表わされている。この分割方法によると、高さ範囲８０１、高さ範囲８０２というように、高さ方向（Ｚ方向）に三次元形状モデルを輪切りにしている。ここでは、このような分割方法によって、塗りつぶしという加工種類のための塗りつぶしパスの計算をする。塗りつぶしとは、ある高さ範囲における輪郭線の内側のボリュームを、１つ以上の塗りつぶしパスに沿った切削加工により削り取る工程である。同図では、輪郭線８０１Ａの内側のボリュームが塗りつぶしパス８０１Ｂおよび８０１Ｃによって削り取られ、輪郭線８０２Ａの内側のボリュームが塗りつぶしパス８０２Ｂおよび８０２Ｃによって削り取られる。図９は、三次元形状モデルの輪郭と塗りつぶしパスの関係を示す概念図である。図９を参照すると、上部のＺ断面のグラフには、輪郭９０１の形状が示されている。下部のＸ−Ｙ平面のグラフには、輪郭９０１をＸ−Ｙ平面に投影した輪郭９０２が示されており、輪郭９０１の谷に対応する輪郭９０２の内側のボリュームを削り取るための塗りつぶしパス９０３が示されている。なお、この高さ方向での分割により、後述の等高線仕上げパスの計算を行わせることもできる。
【００５６】
高さ方向の分割は、具体的には以下のように行われる。例えば、携帯電話機の金型の等高線仕上げ等高線仕上げ加工のパスの計算を高さ方向の分割で行うこととする。具体的な金型の大きさの一例を挙げると以下のとおりである。
金型の厚み：  ３５ｍｍ
等高線仕上げ加工の加工範囲：  １０．７５ｍｍ
層の厚み（Ｚピッチ）：  ３ミクロン
層の数：  １０，７５０÷３＝３，５８４= ３，５８４層
この金型に対するパスの計算を１層あたり１つの分散計算オブジェクトに分割して実施するとしたら、分散計算オブジェクトの数は以下のとおりとなる。
分散計算オブジェクト数：  ３，５８４個
このように、一般的な金型では高さ方向の加工単位の層ごとに計算タスクを分割することによって、並列的に処理することが可能な数千個程度の分散計算オブジェクトに分割することができる。この場合のネットワークオーバーヘッドは数秒程度であって問題になる数値ではない一方、分割方法が単純な高さ方向であり、分割単位と加工単位とが一致しているので、分割数を多くしながらも、分割処理を容易に行うことができる。一般的に高さ方向の計算量は、その場所によって大きく異なるが、１つの層を１つの分散計算オブジェクトとすることで計算タスクを極めて細粒化させることができるため、それぞれのスレーブサーバの負荷をほぼ均一にすることができる。なお、複数の加工単位の層をまとめて１つの分散計算オブジェクトとすることも容易にできる。この際に、加工単位の層は必ずしも隣接している必要はなく、大まかな計算量の予測に基づいてそれぞれが同様の計算量の分散計算オブジェクトとなるように加工単位の層を組み合わせるようにしてもよい。
【００５７】
次に、図８の「（ｉｉ）輪郭線ごとに分割」の項には、三次元形状モデルに関する計算タスクを輪郭（輪郭線）ごとに分割する概念が表わされている。この分割方法によると、輪郭線８１１、輪郭線８１２というように、ある高さ範囲における輪郭線ごとに三次元形状モデルを分割している。ここでは、このような分割方法によって、等高線仕上げという加工種類のための等高線仕上げパスの計算をする。等高線仕上げとは、１つの輪郭線に対して等高線に沿ったパスで切削加工を行い、必要な輪郭を削り残す行程である。図１０は、三次元形状モデルの輪郭と等高線仕上げパスの関係を示す概念図である。図１０を参照すると、上部のＺ断面のグラフには、ある高さの断面１００１と、輪郭１００２の形状が示されている。輪郭１００２は、３つの山を有しており、その内の左側と右側の２つの山が、ある高さの断面１００１より高い頂部を有している。下部のＸ−Ｙ平面のグラフには、ある高さの断面１００１によって輪郭１００２の左側の山を切断した断面をＸ−Ｙ平面に投影した輪郭断面線１００３およびそれを削り残すための等高線仕上げパス１００４が示されており、同じく右側の山を切断した断面をＸ−Ｙ平面に投影した輪郭断面線１００５およびそれを削り残すための等高線仕上げパス１００６が示されている。なお、分割方法を、所定の高さ範囲ごととすることもできる。
【００５８】
次に、図８の「（ｉｉｉ）Ｘ−Ｙ領域で分割」の項には、三次元形状モデルに関する計算タスクをＸ−Ｙ領域ごとに分割する概念が表わされている。この分割方法によると、Ｘ−Ｙ領域８２１、Ｘ−Ｙ領域８２２というように、Ｘ−Ｙ領域ごとに三次元形状モデルを分割している。Ｘ−Ｙ領域は、正方形や長方形の形状に限られず、任意の形状とすることができる。また、このＸ−Ｙ領域での分割は、上記の（ｉ）高さ方向で分割、（ｉｉ）輪郭線ごとに分割、のそれぞれの分割方法と容易に組み合わせることができ、分割数をさらに大きくすることができる。ここでは、このような分割方法によって、図示しないが、塗りつぶしパスや等高線仕上げパス等の種々の加工パスの計算などを行うことができる。
【００５９】
次に、図示していないが、工具直径などの加工条件によって分割することも可能である。この分割方法によると、例えば、Φ６荒加工、Φ３荒加工、Φ６仕上げ加工などの、加工条件工程によって分割する。この場合、Φ６荒加工の計算は、Φ３荒加工の計算の前に行わなくてはならないため、Φ３荒加工とΦ６仕上げ加工とを同時に計算することが可能である。また、この加工条件による分割は、上記の（ｉ）高さ方向で分割、（ｉｉ）輪郭線ごとに分割、（ｉｉｉ）Ｘ−Ｙ領域で分割、のそれぞれの分割方法と容易に組み合わせることができ、分割数をさらに大きくすることができる。上述した分割方法以外の分割方法によって分散計算オブジェクトを生成することもできる。
【００６０】
上記の実施形態は、本発明を説明するための例示であり、本発明をこの実施形態に限定する趣旨ではない。上記の実施形態では、金型の製作方法に関して説明してきたが、本発明の分散処理システムは、各種の設計データの計算、各種のシミュレーションなどの、それ以外の大規模な計算タスクの分散処理などの用途にも適用することができる。本発明は、その要旨を逸脱しない限りにおいて、種々の実施形態で実施することができる。
【実施例】
【００６１】
次に、本発明の分散処理システムを実現する、オブジェクト指向言語であるＣ＋＋によって記述されたプログラムリストを示して説明する。プログラムリスト中には、その動作についての説明を注釈文として入れている。
【００６２】
（１）StartUpZCMDistributedCalculation()関数
分散処理システムのメインフローを制御する関数である。すべての分散処理は、この関数のフローで共通制御される。必要なスレーブサーバの数は最低獲得数であり、これに満たない場合は、それが獲得できるまで待つ。要求数は、資源が許す限りにおいて獲得できる最大数である。この関数のインプットデータは、計算機の必要数（デフォルト＝１）、計算機の要求数（デフォルト＝１０００）、機能のインプットデータ（デフォルトは機能ごとに指定）である。この関数のアウトプットデータは、機能のアウトプットデータ（機能ごとに指定）である。
【００６３】
次に、分散処理システム２０のメインフローについて図面を参照して説明する。図１１は、分散処理システム２０のメインフローを制御するStartUpZCMDistributedCalculation関数の動作を表わす動作フロー図である。StartUpZCMDistributedCalculation関数のメンバーである種々の関数により、分散処理が以下のような流れで実行されている。まず、CheckOut()関数により、計算機のチェックアウト（計算機を資源から獲得）が行われる（ステップＳ１１０１）。これによって、分散オブジェクトの受入が可能である計算機が必要数確保される。次にDivideDataAndCreateObject()関数によりデータ分割（分散オブジェクト生成）が行われる（ステップＳ１１０３）。これによって分散オブジェクトが生成される。次にPreProcess()関数により、分散計算前準備が行われる（ステップＳ１１０５）。次にSendAndWaitData関数により、データ送信および待受け（分散計算のメイン）が行われる（ステップＳ１１０７）。次に、PostProcess()関数により、後片付け処理（計算後に一度だけスレーブサーバに渡したい情報を送付）が行われる（ステップＳ１１０９）。次に、BindData()関数により、データ結合（分散オブジェクトからアウトプットを生成）が行われる（ステップＳ１１１１）。最後に、CheckInAndDeleteObject()関数により、全計算機のチェックイン（計算機を資源に返却）が行われる（ステップＳ１１１３）。
【００６４】
（１）StartUpZCMDistributedCalculation()関数のプログラムリスト
I3DDB_Int
CZCMDistributedControl::StartUpZCMDistributedCalculation(I3DDB_Int NeedValue,
I3DDB_Int RequirementValue)
{
I3DDB_Int   Status = I3DDB_NOERROR;
//チェックアウト（マスターサーバ２１に接続し、スレーブサーバ２２を資源から確保する。）
{
ERR_LOG(I3DDB_NOERROR, 0, "チェックアウトを開始します");
m_vPCInfo = CheckOut(NeedValue, RequirementValue);
}
//データ分割（実装ごとに固有の関数が実行される。データ分割を行い、分散計算オブジェクトを生成する。ここで、機能ごとに、実装された分割処理が呼び出される。関数は仮想化しているため、共通制御される。）
{
ERR_LOG(I3DDB_NOERROR, 0, "データ分割を開始します。");
Status = DivideDataAndCreateObject(m_vPCInfo);
if(Status != I3DDB_NOERROR)
{
return Status;
}
}
//分散計算前準備（計算前に一度だけスレーブサーバに伝達すれば十分な情報をスレーブサーバに送信する。）
{
PreProcess();
}
//データ送信&待ちうけ(各実装で共通。これは分散処理システムのメイン処理である。分散計算オブジェクトが、最適なタイミングで、計算が終了して次に分散計算オブジェクトの受入が可能なスレーブサーバに送信され、そこからの計算処理結果が回収される。）
{
ERR_LOG(I3DDB_NOERROR, 0, "分散計算を開始します");
Status = SendAndWaitData();
if(Status != I3DDB_NOERROR)
{
return Status;
}
}
//後片付け（計算前に一度だけスレーブサーバに伝達すれば十分な情報をスレーブサーバに送信する。）
{
PostProcess();
}
//データ結合（実装ごとに固有の関数が実行される。関数を仮想化しているため、共通制御される。）
{
ERR_LOG(I3DDB_NOERROR, 0, "データ結合を開始します。");
Status = BindData();
if(Status != I3DDB_NOERROR)
{
return Status;
}
}
//全計算機のチェックイン（マスターサーバ２１に接続し、スレーブサーバ２２を資源に返却する。）
{
ERR_LOG(I3DDB_NOERROR, 0, "チェックインを開始します");
CheckInAndDeleteObject();
}
return I3DDB_NOERROR;
}
【００６５】
（２）CheckOut()関数
マスターサーバ２１に接続し、スレーブサーバ２２を資源から確保する関数である。プログラムリストは省略する。
【００６６】
（３）DivideDataAndCreateObject()関数
制御オブジェクトのデータ分割処理を行う関数である。分散管理クラスに「データ分割」、「結合」を実装するものである。「層数を計算」、「層の数だけ分散オブジェクト生成」、「高さの値をセット」、「分散管理クラスに格納（push_back)」といった処理を行う。この関数のインプットデータは、機能ごとの機能インプットデータである。この関数のアウトプットデータは、分散オブジェクトである。このクラスによって、分散計算オブジェクトが生成される。分散計算オブジェクトは、数千個にも及ぶことがある。基本クラスを承継した、機能ごとの分散計算オブジェクトクラスが持つ同名の仮想関数が実行される。これの親クラスには関数の実体はない。
（３）DivideDataAndCreateObject()関数のプログラムリスト
I3DDB_Int
CZCMDistributedControlFinishContouring::DivideDataAndCreateObject(vector<CPersonalComputerInfo> vPCInfo)
{
I3DDB_Int   i;
//分散計算オブジェクトを生成
__int64 DecreaseHeight = (m_MaxHeight - m_ZPitch) - m_MinHeight;
//層の数
int NumLayer = DecreaseHeight / m_ZPitch;
__int64 DecreasePitch = m_ZPitch;
//分散オブジェクト数（高さの範囲をＺピッチで割り、等高線仕上げの層の数を得る。携帯電話のＣＡＶＩ／ＣＯＲＥの場合、およそ、３０００〜１００００層となる。）
int NumDistributedObject = NumLayer + 1;
__int64 StartHeight = m_MaxHeight - m_ZPitch;
__int64 EndHeight = StartHeight;
for(i = 0 ; i < NumDistributedObject ; i++)
{
if(i != NumDistributedObject - 1)
{
StartHeight = EndHeight;
EndHeight -= DecreasePitch;
}
else
{
StartHeight = EndHeight;
EndHeight = m_MinHeight;
}
CZCMDistributedObjectFinishContouring* DistributedObject = new CZCMDistributedObjectFinishContouring();
if(DistributedObject == NULL)
{
ERR_LOG(I3DDB_MALLOC_ERROR, 0, "メモリが獲得できませんでした");
return I3DDB_MALLOC_ERROR;
}
//１層ごとに、分散計算オブジェクトを１つ作成し、高さの範囲を格納する。それぞれの分散計算オブジェクトに、計算に必要なインプットデータが渡された上で生成される。
DistributedObject->SetProcessNumber(m_ProcessNumber);
DistributedObject->SetStartHeight(StartHeight);
DistributedObject->SetEndHeight(EndHeight);
DistributedObject->SetElementReferenceManager(m_ElementReferenceManager);
m_vDistributedObject.push_back(DistributedObject);
}
return I3DDB_NOERROR;
}
【００６７】
（４）PreProcess()関数
計算前準備を行う関数である。計算処理の開始前に、一度だけスレーブサーバに伝達すれば十分な情報をスレーブサーバに送信する関数である。そのような情報としては、Ｚ方向の地図データであるＺ−Ｍａｐなどの情報がある。プログラムリストは省略する。
【００６８】
（５）SendAndWaitData()関数
分散処理システムのメイン処理である。空いているスレーブサーバに分散計算オブジェクトを送信する。スレーブサーバ側から計算処理結果を受信する。
【００６９】
（５）SendAndWaitData()関数のプログラムリスト
I3DDB_Int
CZCMDistributedControl::SendAndWaitData()
{
I3DDB_Int Status = I3DDB_NOERROR;
I3DDB_Int i;
I3DDB_Int NumDistributedObject = m_vDistributedObject.size();
//それぞれの処理をメインとして待ちうけ
CZCMListeningSocket* ListeningSocket = new CZCMListeningSocket(0);
CI3DAutoPtr<CZCMListeningSocket*> apListeningSocket(&ListeningSocket);
//待ち受け開始
ListeningSocket->ListenData();
CString LocalIP;
unsigned int Port;
ListeningSocket->GetSockName(LocalIP, Port);
//データ送信、計算開始、待ちうけ
{
for(i = 0 ; i < NumDistributedObject ; i++)
{
if(g_vAccessiblePCInfo.size() != 0)
{
//投げる先のPCの設定
m_vDistributedObject[i]->SetPersonalComputerInfo(g_vAccessiblePCInfo.front());
g_vAccessiblePCInfo.erase(g_vAccessiblePCInfo.begin());
m_vDistributedObject[i]->SetId(i);
m_vDistributedObject[i]->SetReplyPort(Port);
m_vDistributedObject[i]->SetDynamicBufferFlagForInput();
//実装ごとに固有の関数が実行される。空いているスレーブサーバ２２があれば、それに向けて次の分散計算オブジェクトを配信する。SendData()内部で、相手先のサーバへの接続、データ送受信時のデッドロック回避制御、データの圧縮送受信、通信中エラー状態の監視制御、送信後の接続切断、などのネットワーク処理をすべて実行するため、各機能開発者は、ネットワーク制御をまったく意識する必要がない。
Status = m_vDistributedObject[i]->SendData();
if(Status != I3DDB_NOERROR)
{
return Status;
}
}
else
{
i--;
}
//待ち受け。同時に分散計算オブジェクトが計算された結果である計算処理結果の受信を行う。受信した場合、相手方のスレーブサーバ２２は、「受入可能」状態へと変更される。PeekMessage内部で、相手方サーバからの接続受入、データ送受信時のデッドロック回避制御、送信された圧縮データの解凍、通信中のエラー状態の監視制御、全データ受け取り後に接続切断、などのネットワーク関係の処理を全て実行するため、各機能開発者は、ネットワーク制御をまったく意識する必要がない。
MSG msg;
while(::PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)) 
{
if(!theApp.PumpMessage()){
mainLoop = false;
::PostQuitMessage(1); 
break; 
} 
}
}
}
//全ての計算が終わるまで待ち受ける
{
while(mainLoop)
{
if(NumCalcEnd == m_vDistributedObject.size())
{
mainLoop = false;
}
MSG msg;
while(::PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)) {
if(!theApp.PumpMessage()){
mainLoop = false;
::PostQuitMessage(1); 
break; 
} 
}
} 
mainLoop = true;
}
return I3DDB_NOERROR;
}
【００７０】
（６）PostProcess()関数
計算後片付けを行う関数である。計算処理の開始後に、一度だけスレーブサーバに伝達すれば十分な情報をスレーブサーバに送信する関数である。プログラムリストは省略する。
【００７１】
（７）BindData()関数
分散計算オブジェクトの処理結果である計算処理結果のデータ結合処理を行う関数である。この関数のインプットデータは、全分散計算オブジェクトである。この関数のアウトプットデータは、最終的な機能の計算処理結果である。ここで、単体計算のアウトプットデータと、分散計算のアウトプットデータが一致する。
【００７２】
（７）BindData()関数のプログラムリスト
I3DDB_Int
CZCMDistributedControlFinishContouring::BindData()
{
//パスレイヤーを合体させる
int NumDistributedObject = m_vDistributedObject.size();
for(int i = 0 ; i < NumDistributedObject ; i++)
{
CZCMDistributedObjectFinishContouring* DistributedObject 
= dynamic_cast<CZCMDistributedObjectFinishContouring*>(m_vDistributedObject[i]);
vector<CICMPathLayer*> vPathLayer = DistributedObject->GetPathLayer();
int NumPathLayer = vPathLayer.size();
for(int j = 0 ; j < NumPathLayer ; j++)
//等高線仕上げパスの結合処理では、各スレーブサーバ２２で生成された計算処理結果（１層の等高線仕上げパス）をＺ高さの高い順に１つの配列に格納する処理を実行する。
{
m_vPathLayer.push_back(vPathLayer[j]);
}
DistributedObject->ClearPathLayer();
//終了高さに達した場合はそれ以後のデータは不要
if(DistributedObject->GetReachedFinishLevel() == true)
{
break;
}
}
return I3DDB_NOERROR;
}
【００７３】
（８）CheckInAndDeleteObject()関数
全計算機のチェックインをする関数である。すなわち、マスターサーバ２１に接続し、スレーブサーバ２２を資源に返却する。プログラムリストは省略する。
【００７４】
ここまでは、メインフローの関数とそれのメンバー関数を説明してきた。これから、分散オブジェクトのクラス構造について説明する。
（９）CZCMDistributedControlクラス
分散処理機能を実現するクラス構造である。各個別の機能は、このクラスを継承して分散計算オブジェクトを生成する。これによって、チェックイン・チェックアウトなどの共通関数、各サーバのＩＰアドレスや性能情報などの共通変数が利用可能になり、データ分割とデータ結合を、機能に適した内容を実装するだけで分散処理を行うことができるようになる。
【００７５】
（９）CZCMDistributedControlクラスのプログラムリスト
//分散計算管理クラス
class CZCMDistributedControl
{
public:
CZCMDistributedControl(){};
virtual ~CZCMDistributedControl();
//共通関数
I3DDB_Int      StartUpZCMDistributedCalculation(I3DDB_Int NeedValue = 1, I3DDB_Int RequirementDistributedValue = DISTRIBUTED_MAX);//分散計算メイン
//分散クラスごとに実装する処理//
virtual   I3DDB_Int   DivideDataAndCreateObject(vector<CPersonalComputerInfo> vPCInfo);//データ分割しオブジェクト生成
virtual   I3DDB_Int   BindData();                     //データ結合
protected:
vector<CZCMDistributedObject*>   m_vDistributedObject;
vector<CPersonalComputerInfo>   m_vPCInfo;//チェックアウトPC情報
private:
//制御用関数（実装者は意識する必要なし)//
vector<CPersonalComputerInfo>   CheckOut(I3DDB_Int NeedValue, I3DDB_Int RequirementValue);//分散計算機の確保
void         CheckInAndDeleteObject(I3DDB_Int TargetId = -1);      //分散計算機の解放
I3DDB_Int      SendAndWaitData();                  //データ送信&待ちうけ
I3DDB_Int      PreProcess();   //分散前処理
I3DDB_Int      PostProcess();   //分散後処理
//継承したクラスは機能ごとのインプット、アウトプットデータを
//メンバーとして加えます
};
【００７６】
（１０）CZCMDistributedControlFinishContouring()関数
等高線仕上分散計算の制御オブジェクトを定義する関数である。分散管理クラスを作るメンバー関数である。この関数は、CZCMDistributedControlを継承した分散管理クラスを作成する。
【００７７】
（１０）CZCMDistributedControlFinishContouring()関数のプログラムリスト
//仕上げ分散計算 制御側
//共通クラスを継承する
class CZCMDistributedControlFinishContouring : public CZCMDistributedControl
{
//コンストラクタ、デストラクタを作成する
public:
CZCMDistributedControlFinishContouring(int ProcessNumber, __int64 MaxHeight, __int64 MinHeight, __int64 ZPitch,
CICMElementReferenceManager* ElementReferenceManager)
: m_ProcessNumber(ProcessNumber), m_MaxHeight(MaxHeight), m_MinHeight(MinHeight),
m_ZPitch(ZPitch), m_ElementReferenceManager(ElementReferenceManager){};
virtual ~CZCMDistributedControlFinishContouring();
//分散クラスごとに実装する処理。//
//仮想として実装を定義する。「データ分割」「データ結合」を作成する。これはＩ／Ｆ定義のみであり、中身は空でも構わない。
virtual   I3DDB_Int   DivideDataAndCreateObject(vector<CPersonalComputerInfo> vPCInfo);   //データ分割しオブジェクト生成
virtual   I3DDB_Int   BindData();                                             //データ結合
//アクセサ
vector<CICMPathLayer*> GetPathLayer() const;
private:
//インプット（単体計算のインプットをメンバーに持たせる）
int         m_ProcessNumber;   //工程番号
__int64      m_MaxHeight;      //加工範囲最大高さ
__int64      m_MinHeight;      //加工範囲最小高さ
__int64      m_ZPitch;         //Zピッチ
//インプットだが計算には不要（単体計算のインプットをメンバーに持たせる）
CICMElementReferenceManager* m_ElementReferenceManager;
//アウトプット（単体計算のアウトプットをメンバーに持たせる）
vector<CICMPathLayer*> m_vPathLayer; //全仕上げパス
};
【００７８】
（１１）CZCMDistributedObjectクラス
分散オブジェクト基底クラス構造である。各個別の機能は、このクラスを継承して分散計算オブジェクトを生成する。これによって、送受信するサーバ間のネットワーク制御や共通データ（エラー情報、相手のサーバ情報、分散計算オブジェクトＩＤなど）の送受信が自動的に行われることに加えて、インプットデータ、アウトプットデータが適切なタイミングで送受信され、メイン処理実行も最適なタイミングで実行されるなどの、分散計算オブジェクトの制御処理のすべてが実現される。
【００７９】
（１１）CZCMDistributedObjectクラスのプログラムリスト
//分散オブジェクト基底クラス
class CZCMDistributedObject
{
public:
CZCMDistributedObject();
virtual ~CZCMDistributedObject();
enum   ChangeBufferReceptionState{OFF = 0, CBSending, CBReply};
//分散計算制御用アクセサ
void      SetIsMain(I3DDB_Bool   IsMain);
I3DDB_Bool   GetIsMain() const;
void      SetDistributedType(ZCMDistributedType DistributedType);                     //分散計算タイプを登録する
ZCMDistributedType GetDistributedType() const;
void      SetDistributedReceivedStatus(ZCMDistributedReceivedStatus DistributedReceivedStatus);   //分散計算送信状態を登録する
ZCMDistributedReceivedStatus GetDistributedReceivedStatus() const;
void      SetPersonalComputerInfo(CPersonalComputerInfo PCInfo);                     //PC情報を登録する
CPersonalComputerInfo GetPersonalComputerInfo() const;
void      SetDistributedPort(I3DDB_Int Port);                                    //送信ポート番号を登録する
I3DDB_Int   GetDistributedPort() const;
void      SetReplyPort(I3DDB_Int Port);                                       //返信ポート番号を登録する
I3DDB_Int   GetReplyPort() const;
void      SetCBReplyPort(I3DDB_Int Port);                                       //返信ポート番号を登録する
I3DDB_Int   GetCBReplyPort() const;
void      SetReplyFlag(I3DDB_Bool ReplyFlag);                                    //返信するか否か
I3DDB_Bool   GetReplyFlag() const;
void      SetId(const I3DDB_ULong &Id);                                       //分散オブジェクトのId
I3DDB_ULong   GetId() const;
ChangeBufferReceptionState GetCBReceptionState();                                    //チェンジバッファ用用受信時の状態
void      SetCBReceptionState(const ChangeBufferReceptionState ReceptionState);
IncsCM::Long   GetBufferSize();                                                //測定後のバッファサイズ
void      SetBufferSize(const IncsCM::Long BufferSize);   
I3DDB_Bool   GetDynamicBufferFlag();
void      SetDynamicBufferFlag(const I3DDB_Bool Flag);
//全分散クラス共通処理//
I3DDB_Int   SendData();                              //データ送信（ConnectServer->Serialize--> Flush)
I3DDB_Int   ReplyData();                           //データ返信（分散側=>メイン側へ返信）
void      ErrorProcess();                           //エラーを（メインPCに）通知する
//シリアライズ・デシリアライズ
void      SerializeMyself(CArchive*& Archive);      //共通メンバーをSerializeする
void      DeserializeMyself(CArchive*& Archive);      //共通メンバーをDeserializeする
//各属性の分散オブジェクト生成
CZCMDistributedObject* CreateDistributedObject();
void      CopyCommonMember(CZCMDistributedObject*& Object);
//分散クラスごとに実装する処理//
virtual void      SerializeInputData(CArchive*& Archive); //インプットデータをシリアライズする
virtual void      SerializeOutputData(CArchive*& Archive); //アウトプットデータをシリアライズする
virtual void      DeserializeInputData(CArchive*& Archive); //インプットデータをデシリアライズする
virtual void      DeserializeOutputData(CArchive*& Archive); //アウトプットデータをデシリアライズする
virtual int         StartUpZCMCalculation();      //分散計算メイン処理
protected:
//分散計算制御用共通メンバー
//MainかSlaveか//
I3DDB_Bool               m_IsMain;
//分散計算機能の識別//
//分散計算オブジェクトの制御に必要な情報は、基底クラス側だけが定義しており、各機能側は、これらのデータを一切意識する必要がない。
ZCMDistributedType         m_DistributedType;
//計算の結果を管理するための変数//
ZCMDistributedReceivedStatus   m_DistributedReceivedStatus;
//接続するための変数//
CPersonalComputerInfo      m_PCInfo;               //相手先のPCデータ(メイン側なら分散計算機の情報、分散側ならメイン計算機の情報）
//ポート//
I3DDB_Int               m_DistributedPort;   //Connectするポート
I3DDB_Int               m_ReplyPort;      //返信用に伝えるときに使用する変数
I3DDB_Int               m_CBReplyPort;      //チェンジバッファ用返信ポート
//返信するか//
I3DDB_Bool               m_ReplyFlag;
//分散オブジェクト固有のID
I3DDB_ULong               m_Id;
ChangeBufferReceptionState   m_CBReceptionState;               //チェンジバッファ用受信状態
IncsCM::Long            m_BufferSize;                  //バッファサイズ
private:
//継承したクラスは機能ごとのインプット、アウトプットデータを
//メンバーとして加えます
};
【００８０】
（１２）CZCMDistributedObjectFinishContouring()関数
等高線仕上分散計算の分散計算オブジェクトを定義する関数であり、分散管理クラスを作るメンバー関数である。この関数は、CZCMDistributedObjectを継承した分散管理クラスを作成する。
【００８１】
（１２）CZCMDistributedObjectFinishContouring()関数のプログラムリスト
//仕上げ分散計算 分散オブジェクト
//共通クラスを継承する
class CZCMDistributedObjectFinishContouring : public CZCMDistributedObject
{
public:
CZCMDistributedObjectFinishContouring();
virtual ~CZCMDistributedObjectFinishContouring();
//分散クラスごとに実装する処理
//親クラスが定義する仮想関数をすべて定義する。Ｉ／Ｆ定義のみで中身は空で構わない。
virtual void      SerializeInputData(CArchive*& Archive); //インプットデータをシリアライズする。インプット送信データを生成する。
virtual void      SerializeOutputData(CArchive*& Archive); //アウトプットデータをシリアライズする。アウトプット送信データを生成する。
virtual void      DeserializeInputData(CArchive*& Archive); //インプットデータをデシリアライズする。インプット受信データを生成する。
virtual void      DeserializeOutputData(CArchive*& Archive); //アウトプットデータをデシリアライズする。アウトプット受信データを生成する。
virtual int         StartUpZCMCalculation();//分散計算メイン処理。スレーブサーバ２２側で実行するメイン処理である。
//アクセサ
//メンバー変数へのアクセサなどを自由にしている。
void   SetProcessNumber(int ProcessNumber);
void   SetStartHeight(__int64 StartHeight);
void   SetEndHeight(__int64 EndHeight);
void   SetPathLayer(vector<CICMPathLayer*> vPathLayer);
void   SetElementReferenceManager(CICMElementReferenceManager* ElementReferenceManager);
int      GetProcessNumber() const;
__int64 GetStartHeight() const;
__int64 GetEndHeight() const;
bool   GetReachedFinishLevel() const;
vector<CICMPathLayer*> GetPathLayer() const;
void   ClearPathLayer();
private:
//インプット。分散用のインプットデータをメンバーに持たせる。
int         m_ProcessNumber;//工程番号
__int64      m_StartHeight;      //計算開始高さ（計算する高さの範囲）
__int64      m_EndHeight;      //計算終了高さ（計算する高さの範囲）
//アウトプット。分散用のアウトプットデータをメンバーに持たせる。
vector<CICMPathLayer*>   m_vPathLayer;   //領域内の仕上げパス（生成されるアウトプットデータ（等高線仕上げパス））
bool      m_ReachedFinishLevel;   //計算終了高さに達した場合TRUE
//インプットだが計算には不要（通信も行わない）。計算過程で必要なデータをメンバーに持たせている。
CICMElementReferenceManager* m_ElementReferenceManager;
ICMProcessCondition   m_ProcessCondition;
CICMLevelMilling*   m_LevelMilling;
};
【００８２】
（１３）CZCMDistributedObjectFinishContouring::StartUpZCMCalculation()関数
分散オブジェクトのメイン計算処理の関数である。分散オブジェクトクラスに「前準備」「メイン計算」「後片付け」を実装する。「指定された高さの等高線仕上げパス計算」、「パスレイヤーを回収」、「LevelMillingの不要なデータをクリア」といった処理を行う。
【００８３】
（１３）CZCMDistributedObjectFinishContouring::StartUpZCMCalculation()関数のプログラムリスト
I3DDB_Int
CZCMDistributedObjectFinishContouring::StartUpZCMCalculation()
{
int Status;
//範囲指定仕上げパス計算
if(m_ReachedFinishLevel == false)
{
//個々の分散計算オブジェクトが有するインプットデータを基にしてアウトプットデータを生成するメイン処理が各スレーブサーバ２２で分散処理される。メイン処理は、単体計算と同じ関数モジュールをコールすれば足りるため、開発工数はほぼゼロである。
Status = m_LevelMilling->DoCalcFinishContouring(m_ReachedFinishLevel, true, m_StartHeight, m_EndHeight);
if(IncsCM::ICM_NOERROR != Status)
{
//高さの幅を渡すと、その範囲の等高線仕上げパスを生成する、等高線仕上げパスの関数である。単体計算と分散処理の違いは、単体計算は高さの全範囲が対象であるのに対し、分散処理は１層の高さの範囲のみが対象であるという、入力値の違いのみである。内部処理は同一である。
return Status;
}
}
//パスレイヤー回収。LevelMillingの不要なデータをクリアする。
m_vPathLayer = m_LevelMilling->GetPathLayer();
m_LevelMilling->ClearPathLayer();
return I3DDB_NOERROR;
}
【００８４】
上記にプログラムリストを示した関数、クラス構造によって、本発明の分散処理システム２０をマスターサーバ２１およびスレーブサーバ２２上に実装することができる。上記の実施例は、本発明を説明するための例示であり、本発明をこの実施例に限定する趣旨ではない。本発明は、その要旨を逸脱しない限りにおいて、種々の実施例で実施することができる。
【図面の簡単な説明】
【００８５】
【図１】三次元形状モデルで表わされた金型の形状を切削加工により製作するためのパスの集合体を求めるための計算タスクの分割方法の一例を表わす概念図である。
【図２】従来の分散計算オブジェクトを生成するためのフロー図である。
【図３】従来の分散計算オブジェクトの生成方法に関して、分割方法の数と全体の計算時間との関係、および分割方法の数と開発工数との関係を表わすグラフである。
【図４】図４は、マスターサーバ２１とスレーブサーバ２２Ｘの構成を表わす構成図である。
【図５】本発明の一実施形態に係る分散処理システム２０の分散処理の概念を表わす概念図である。
【図６】マスターサーバ２１とスレーブサーバ２２の構成を表わす構成図である。
【図７Ａ】マスターサーバ２１とスレーブサーバ２２の間の処理を表わす動作フロー図である。
【図７Ｂ】マスターサーバ２１とスレーブサーバ２２の間の処理を表わす動作フロー図である。
【図８】三次元形状モデルで表わされた金型の形状を切削加工により製作するためのパスの集合体を求めるための計算タスクの種々の分割方法を表わす概念図である。
【図９】三次元形状モデルの輪郭と塗りつぶしパスの関係を示す概念図である。
【図１０】三次元形状モデルの輪郭と等高線仕上げパスの関係を示す概念図である。
【図１１】分散処理システム２０のメインフローを制御するStartUpZCMDistributedCalculation関数の動作を表わす動作フロー図である。
【符号の説明】
【００８６】
２１  マスターサーバ
２２  スレーブサーバ
２３  Ｗｅｂサーバ
２４  クライアント
２１ａ  分割情報入力手段
２１ｂ  分割情報記憶手段
２１ｃ  計算モデル入力手段
２１ｄ  計算モデル記憶手段
２１ｅ  ネットワーク制御情報記憶手段
２１ｆ  分散オブジェクト生成手段
２１ｇ  分散オブジェクト配信手段
２１ｈ  計算処理結果受信手段
２１ｉ  計算処理結果結合手段
２２ａ  分散オブジェクト受信手段
２２ｂ  分散オブジェクト処理手段
２２ｃ  計算処理結果送信手段
【図１】
2006106863.tif 000003
【図２】
2006106863.tif 000004
【図３】
2006106863.tif 000005
【図４】
2006106863.tif 000006
【図５】
2006106863.tif 000007
【図６】
2006106863.tif 000008
【図７Ａ】
2006106863.tif 000009
【図７Ｂ】
2006106863.tif 000010
【図８】
2006106863.tif 000011
【図９】
2006106863.tif 000012
【図１０】
2006106863.tif 000013
【図１１】
2006106863.tif 000014