JP2007102796A - モーションコントロールシステム - Google Patents
モーションコントロールシステム Download PDFInfo
- Publication number
- JP2007102796A JP2007102796A JP2006272878A JP2006272878A JP2007102796A JP 2007102796 A JP2007102796 A JP 2007102796A JP 2006272878 A JP2006272878 A JP 2006272878A JP 2006272878 A JP2006272878 A JP 2006272878A JP 2007102796 A JP2007102796 A JP 2007102796A
- Authority
- JP
- Japan
- Prior art keywords
- driver
- stream
- component
- motion
- motion control
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G05—CONTROLLING; REGULATING
- G05B—CONTROL OR REGULATING SYSTEMS IN GENERAL; FUNCTIONAL ELEMENTS OF SUCH SYSTEMS; MONITORING OR TESTING ARRANGEMENTS FOR SUCH SYSTEMS OR ELEMENTS
- G05B19/00—Programme-control systems
- G05B19/02—Programme-control systems electric
- G05B19/18—Numerical control [NC], i.e. automatically operating machines, in particular machine tools, e.g. in a manufacturing environment, so as to execute positioning, movement or co-ordinated operations by means of programme data in numerical form
- G05B19/19—Numerical control [NC], i.e. automatically operating machines, in particular machine tools, e.g. in a manufacturing environment, so as to execute positioning, movement or co-ordinated operations by means of programme data in numerical form characterised by positioning or contouring control systems, e.g. to control position from one programmed point to another or to control movement along a programmed continuous path
-
- G—PHYSICS
- G05—CONTROLLING; REGULATING
- G05B—CONTROL OR REGULATING SYSTEMS IN GENERAL; FUNCTIONAL ELEMENTS OF SUCH SYSTEMS; MONITORING OR TESTING ARRANGEMENTS FOR SUCH SYSTEMS OR ELEMENTS
- G05B19/00—Programme-control systems
- G05B19/02—Programme-control systems electric
- G05B19/18—Numerical control [NC], i.e. automatically operating machines, in particular machine tools, e.g. in a manufacturing environment, so as to execute positioning, movement or co-ordinated operations by means of programme data in numerical form
- G05B19/416—Numerical control [NC], i.e. automatically operating machines, in particular machine tools, e.g. in a manufacturing environment, so as to execute positioning, movement or co-ordinated operations by means of programme data in numerical form characterised by control of velocity, acceleration or deceleration
-
- G—PHYSICS
- G05—CONTROLLING; REGULATING
- G05B—CONTROL OR REGULATING SYSTEMS IN GENERAL; FUNCTIONAL ELEMENTS OF SUCH SYSTEMS; MONITORING OR TESTING ARRANGEMENTS FOR SUCH SYSTEMS OR ELEMENTS
- G05B2219/00—Program-control systems
- G05B2219/20—Pc systems
- G05B2219/23—Pc programming
- G05B2219/23262—DDE direct data exchange, DLL dynamic library linking
-
- G—PHYSICS
- G05—CONTROLLING; REGULATING
- G05B—CONTROL OR REGULATING SYSTEMS IN GENERAL; FUNCTIONAL ELEMENTS OF SUCH SYSTEMS; MONITORING OR TESTING ARRANGEMENTS FOR SUCH SYSTEMS OR ELEMENTS
- G05B2219/00—Program-control systems
- G05B2219/20—Pc systems
- G05B2219/23—Pc programming
- G05B2219/23265—Select device driver for actuator, sensor
-
- G—PHYSICS
- G05—CONTROLLING; REGULATING
- G05B—CONTROL OR REGULATING SYSTEMS IN GENERAL; FUNCTIONAL ELEMENTS OF SUCH SYSTEMS; MONITORING OR TESTING ARRANGEMENTS FOR SUCH SYSTEMS OR ELEMENTS
- G05B2219/00—Program-control systems
- G05B2219/30—Nc systems
- G05B2219/34—Director, elements to supervisory
- G05B2219/34208—Motion controller
-
- G—PHYSICS
- G05—CONTROLLING; REGULATING
- G05B—CONTROL OR REGULATING SYSTEMS IN GENERAL; FUNCTIONAL ELEMENTS OF SUCH SYSTEMS; MONITORING OR TESTING ARRANGEMENTS FOR SUCH SYSTEMS OR ELEMENTS
- G05B2219/00—Program-control systems
- G05B2219/30—Nc systems
- G05B2219/34—Director, elements to supervisory
- G05B2219/34216—Programmable motion controller
-
- G—PHYSICS
- G05—CONTROLLING; REGULATING
- G05B—CONTROL OR REGULATING SYSTEMS IN GENERAL; FUNCTIONAL ELEMENTS OF SUCH SYSTEMS; MONITORING OR TESTING ARRANGEMENTS FOR SUCH SYSTEMS OR ELEMENTS
- G05B2219/00—Program-control systems
- G05B2219/30—Nc systems
- G05B2219/34—Director, elements to supervisory
- G05B2219/34263—OLE object linking and embedding, OPC ole for process control
-
- G—PHYSICS
- G05—CONTROLLING; REGULATING
- G05B—CONTROL OR REGULATING SYSTEMS IN GENERAL; FUNCTIONAL ELEMENTS OF SUCH SYSTEMS; MONITORING OR TESTING ARRANGEMENTS FOR SUCH SYSTEMS OR ELEMENTS
- G05B2219/00—Program-control systems
- G05B2219/30—Nc systems
- G05B2219/34—Director, elements to supervisory
- G05B2219/34287—Plc and motion controller combined
-
- G—PHYSICS
- G05—CONTROLLING; REGULATING
- G05B—CONTROL OR REGULATING SYSTEMS IN GENERAL; FUNCTIONAL ELEMENTS OF SUCH SYSTEMS; MONITORING OR TESTING ARRANGEMENTS FOR SUCH SYSTEMS OR ELEMENTS
- G05B2219/00—Program-control systems
- G05B2219/30—Nc systems
- G05B2219/36—Nc in input of data, input key till input tape
- G05B2219/36035—Special language, task programming, oop object oriented programming
-
- G—PHYSICS
- G05—CONTROLLING; REGULATING
- G05B—CONTROL OR REGULATING SYSTEMS IN GENERAL; FUNCTIONAL ELEMENTS OF SUCH SYSTEMS; MONITORING OR TESTING ARRANGEMENTS FOR SUCH SYSTEMS OR ELEMENTS
- G05B2219/00—Program-control systems
- G05B2219/30—Nc systems
- G05B2219/36—Nc in input of data, input key till input tape
- G05B2219/36036—Motion, graphical motion control language gmcl
-
- G—PHYSICS
- G05—CONTROLLING; REGULATING
- G05B—CONTROL OR REGULATING SYSTEMS IN GENERAL; FUNCTIONAL ELEMENTS OF SUCH SYSTEMS; MONITORING OR TESTING ARRANGEMENTS FOR SUCH SYSTEMS OR ELEMENTS
- G05B2219/00—Program-control systems
- G05B2219/30—Nc systems
- G05B2219/36—Nc in input of data, input key till input tape
- G05B2219/36037—Application programming interface associates component code with driver function
-
- G—PHYSICS
- G05—CONTROLLING; REGULATING
- G05B—CONTROL OR REGULATING SYSTEMS IN GENERAL; FUNCTIONAL ELEMENTS OF SUCH SYSTEMS; MONITORING OR TESTING ARRANGEMENTS FOR SUCH SYSTEMS OR ELEMENTS
- G05B2219/00—Program-control systems
- G05B2219/30—Nc systems
- G05B2219/43—Speed, acceleration, deceleration control ADC
- G05B2219/43167—Distributed motion control
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02P—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN THE PRODUCTION OR PROCESSING OF GOODS
- Y02P90/00—Enabling technologies with a potential contribution to greenhouse gas [GHG] emissions mitigation
- Y02P90/02—Total factory control, e.g. smart factories, flexible manufacturing systems [FMS] or integrated manufacturing systems [IMS]
Landscapes
- Engineering & Computer Science (AREA)
- Human Computer Interaction (AREA)
- Manufacturing & Machinery (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Automation & Control Theory (AREA)
- Stored Programmes (AREA)
- Vehicle Body Suspensions (AREA)
- Processing Or Creating Images (AREA)
- Programmable Controllers (AREA)
- Debugging And Monitoring (AREA)
Abstract
【課題】システムを実施するのに使用する実際のモーションコントロールハードウェアとは独立したアプリケーションが開発されるモーションコントロールのためのシステムが提供される。
【解決手段】このシステムは、コンポーネントファンクションを含むアプリケーションプログラムインターフェイスと、ドライバファンクションを含むサービスプロバイダーインターフェイスとを使用するソフトウェアシステムを備えている。システムプログラマーは、コンポーネントファンクションをコールするアプリケーションを書き込む。コンポーネントファンクションに関連するコードは、これらのファンクションをドライバファンクションに関連付ける。ハードウェアデザイナーは、所与のモーションコントロールハードウェア製品においてドライバファンクションを実施するドライバコードを書き込む。
【選択図】図2
【解決手段】このシステムは、コンポーネントファンクションを含むアプリケーションプログラムインターフェイスと、ドライバファンクションを含むサービスプロバイダーインターフェイスとを使用するソフトウェアシステムを備えている。システムプログラマーは、コンポーネントファンクションをコールするアプリケーションを書き込む。コンポーネントファンクションに関連するコードは、これらのファンクションをドライバファンクションに関連付ける。ハードウェアデザイナーは、所与のモーションコントロールハードウェア製品においてドライバファンクションを実施するドライバコードを書き込む。
【選択図】図2
Description
本発明は、モーションコントロールシステムに係り、より詳細には、ハードウェア独立のモーションコントロールソフトウェアの形成を容易にするインターフェイスソフトウェアに係る。
モーションコントロールデバイスの目的は、物体を所望の仕方で運動することである。モーションコントロールデバイスの基本的コンポーネントは、コントローラと、機械的システムである。この機械的システムは、コントローラにより発生された信号を物体の運動へと変換する。
機械的システムは、一般に、ドライブ及び電気モータを含むが、液圧システムや振動システムのような多数の他のシステムを使用し、コントロール信号に基づき物体を運動させることができる。更に、モーションコントロールデバイスは、物体の運動の多軸制御を行えるように、複数のドライブ及びモータを含むこともできる。
本発明は、少なくとも1つのドライブ及び電気モータを備え、その回転シャフトが運動されるべき物体にある形態で接続されるような機械的システムにおいて特に重要であり、この用途について以下に詳細に述べる。しかし、本発明の原理は、一般に、コントロール信号に基づいて運動を発生するいかなる機械的システムにも適用できる。従って、本発明の範囲は、以下の詳細な説明ではなく、請求の範囲に基づいて決定すべきである。
コントローラ、ドライブ及び電気モータより成る機械的システムにおいては、運動されるべき物体にモータが物理的に接続され、モータシャフトの回転が物体の運動へと変換される。ドライブは、制御された仕方でモータシャフトを回転するための電力をモータに与えるための電子的な電力増幅器である。コントロールコマンドに基づき、コントローラは、物体が所望の仕方で運動されるようにドライブを予想可能な仕方で制御する。
これら基本的なコンポーネントは、通常、特定の作業を遂行するために大型のシステムに配置される。例えば、あるコントローラは、多軸システムでは多数のドライブ及びモータに関連して動作し、被加工片に対し所定の経路に沿ってツールを移動させる。
更に、上記の基本的コンポーネントは、しばしば、ホストコンピュータ又はプログラム可能なロジックコントローラ(PLC)に関連して使用される。ホストコンピュータ又はPLCは、高レベルのプログラム言語を使用して、コントローラへ送られるコントロールコマンドを発生することができる。従って、ホストコンピュータで実行されるソフトウェアは、コントローラをプログラミングするタスクを簡単化するように設計される。
モーションコントロールデバイスを製造する会社は、慣習的に、その会社が製造するハードウェアに専用のソフトウェアを製造するというハードウェア指向の会社である。これらのソフトウェア製品は、低レベルプログラムと称される。この低レベルプログラムは、通常、所与のモーションコントロールデバイスに特有なモーションコントロールコマンド言語と直接作用する。このような低レベルプログラムは、ハードウェアに対して実質的に完全な制御をプログラマーに与えるが、これらプログラムは、ハードウェアに大きく依存している。
低レベルプログラムとは対照的に、ファクトリオートメーションアプリケーションとも称される高レベルソフトウェアプログラムは、モーションコントロールデバイスを含む多数の入力/出力(I/O)デバイスを、ファクトリフロア環境を自動化するのに使用される複雑なシステムへと合成するアプリケーションプログラムをファクトリシステムデザイナーが開発できるようにする。これらのファクトリオートメーションアプリケーションは、I/Oデバイスが高レベルプログラムによりサポートされる限り、いかなる数のI/Oデバイスを所与のシステムに使用することもできる。他のソフトウェア開発者により開発されるカスタムアプリケーションは、ファクトリオートメーションプログラムによって与えられる簡単なモーションコントロール機能の利点を取り入れるように開発することができない。
更に、これらのプログラムでは、プログラマーがシステムの各モーションコントロールデバイスに対して高度に制御を行うことができない。ファクトリオートメーションアプリケーションで開発された各プログラムは、そのアプリケーションのコンテクスト内で実行されねばならない。
以下の説明においては、本発明の出願日現在で一般に入手できる多数の文書を引用する。これら多数の文書について、本出願人は、厳密な出版日を知らない。
従って、これら文書の引用は、それらが公知技術であると自認するものと考えてはならず、本出願人は、必要に応じてこれら文書が公知技術であるかどうか設定するに必要な手続きを取るものとする。
上記したように、個々のモーションコントロールデバイスをプログラミングするか、又は多数のモーションコントロールデバイスを含むシステムの開発を助けるために、多数のソフトウェアプログラムが現存する。
以下は、現在商業的に入手できる高レベルソフトウェアプログラムを開示する文書のリストである。(a)Software Products For Industrial Automation,iconics 1993;(b)The complete,computer-based automation tool(IGSS),Seven Technologies A/S;(c)OpenBatch Product Brief,PID,Inc.;(d)FIX Product Brochure,Intellution(1994);(e)Paragon TNT Product Brochure,Intec Controls Corp.;(f)WEB 3.0 Product Brochure,Trihedral Engineering Ltd.(1994);及び(g)AIMAX-WIN Product Brochure,TA Engineering Co.,Inc.。次の文書はシュミレーションソフトウェアを開示する。(a)ExperTune PID Tuning Software,Gerry Engineering Software;及び(b)XANALOG Model NL-SIM Product Brochure,XANALOG。
以下のリストは、低レベルプログラムに関連した文書を示す。(a)Compumotor Digiplan 1993-94 catalog,page 10-11;(b)Aerotech Motion Control Product Guide,page 233-34;(c)PMAC Product Catalog,page 43;(d)PC/DSP-Series Motion Controller C Programming Guide,page 1-3;(e)Oregon Micro System Product Guide,page 17;(f)Precision Microcontrol Product Guide。
又、本出願人は、ウインドウズプログラミング環境に使用するためにマイクロソフトにより定義されたWOSAと称するソフトウェアモデルも知っている。WOSAモデルは、ウインドウズ95内の本の第348−351ページに説明されている。又、WOSAは、「WOSA Backgrounder: Delivering Enterprise Services to the Windows-based Desltop」と題する論文にも説明されている。WOSAモデルは、基礎的なハードウェア又はサービスとは独立したAPIレイヤと、ハードウェア独立であるがサービス従属であるSPIレイヤとを設けることにより、異なるサービスプロバイダーへのプログラミングの複雑さからアプリケーションプログラマーを隔離する。WOSAモデルは、モーションコントロールデバイスとは何ら関係をもたない。
又、本出願人は、プリンタ等のハードウェアに対しドライバが設けられ、ワードプロセッサのようなアプリケーションプログラムにより、ユーザが所与のプリンタに関連したドライバを選択して、その所与のプリンタにおいてアプリケーションプログラムで印刷を行えるようにする一般的なプログラミング習慣も知っている。
この解決策は、既存の各ハードウェア構成に対するプログラミングの複雑さからアプリケーションプログラマーを隔離するが、この解決策は、基本的な増分的ステップでハードウェアを制御する能力をアプリケーションプログラマーに与えるものではない。プリンタの例においては、アプリケーションプログラマーは、設けられたプリンタドライバを用いてプリンタの各ステップモータを制御することができず、むしろ、プリンタドライバは、高レベルコマンドのグループを実施するに必要な所定のシーケンスでプリンタの多数のステップモータを制御する。
従って、プリンタ等に現在使用されているソフトウェアドライバモデルは、モーションコントロールデバイスのための一連のコントロールコマンドを開発するのに適用できない。
以上の説明から明らかなように、本発明の1つの主たる目的は、物体を運動するための改良された方法及び装置を提供することである。
本発明の更に別の特定の目的は、モーションコントロールデバイスを設計し、展開する方法及び装置であって、次の特徴の有利な組合せを示す方法及び装置を得ることである。
(a)ハードウェア独立であるが、基本的運動オペレーションをプログラムすることのできる高レベルモーションコントロールプログラムを形成できる;
(b)多数のハードウェア構成に対するプログラミングの複雑さを高レベルプログラマーから隠す;
(c)付加的なハードウェア構成をサポートするように容易に拡張できる;そして
(d)工業標準の高レベルプログラム環境を透過的にサポートする。
(b)多数のハードウェア構成に対するプログラミングの複雑さを高レベルプログラマーから隠す;
(c)付加的なハードウェア構成をサポートするように容易に拡張できる;そして
(d)工業標準の高レベルプログラム環境を透過的にサポートする。
本発明は、その1つの形態において、所望の物体経路を示す一連のコンポーネントファンクションより成る高レベルモーションコントロールアプリケーションプログラムを開発し、これらコンポーネントファンクションをドライバファンクションと相関し、制御されている特定のハードウェア構成に対してソフトウェアドライバを選択し、制御されているハードウェア構成に関連したソフトウェアドライバ及びドライバファンクションからコントロールコマンドを発生し、そして所望の物体経路に沿って物体を移動するようにコントロールデータに基づいてモーションコントロールデバイスを制御するという段階を備えた物体移動方法に係る。
本発明は、別の形態においては、所望の経路に沿って物体を移動するようにモーションコントロールデバイスを制御するための一連のコントロールコマンドを発生する方法に係る。一連のコンポーネントファンクションより成るアプリケーションプログラムは、所望の経路に沿って物体を移動するためにモーションコントロールデバイスにより実行されねばならない一連のモーションステップを定義する。コンポーネントファンクションは、該コンポーネントファンクションをドライバファンクションに関連付けるコードを含む。ドライバファンクションは、所与のモーションコントロールデバイスにおいてモーションステップを実行するためのドライバコードを含むソフトウェアドライバに関連されるか又はそれを含む。コントロールコマンドは、所与のモーションコントロールデバイスに関連したドライバコード及びアプリケーションプログラムに基づいて発生される。
ドライバファンクションとは個別のコンポーネントファンクションを使用することにより、特定のモーションコントロールデバイスに対してプログラミングする複雑さからプログラマーを隔離する。又、この構成は、関連するソフトウェアドライバを有するモーションコントロールデバイスに対し変更を伴わずに所与のアプリケーションプログラムを使用できるようにする。
ドライバファンクションは、コアドライバファンクションと拡張ドライバファンクションにグループ分けされる。全てのソフトウェアドライバは、コアドライバファンクションをサポートしなければならず、又、ソフトウェアドライバは、1つ以上の拡張ドライバファンクションをサポートしてもよいが、これは必要ではない。
ソフトウェアドライバが拡張ドライバファンクションをサポートしない場合には、拡張ドライバファンクションに関連した機能は、通常は、コアドライバファンクションのある組合せを用いてシュミレーションすることができる。この場合に、本発明の方法は、拡張ドライバファンクションのどれがソフトウェアドライバによりサポートされないかを決定し、そして可能であれば、コアドライバファンクションの組合せを置き換えるという段階を含む。ある場合には、拡張ドライバファンクションの機能は、コアドライバファンクションを用いてエミュレートすることができず、そしてこの機能は、プログラマーには単に使用できないものである。
拡張ドライバファンクションをエミュレートするためのコアドライバファンクションの使用は、何も存在しないという機能を与えるが、好ましい解決策は、各拡張ドライバファンクションをサポートするソフトウェアドライバを設けることである。拡張ドライバファンクションがサポートされ、エミュレートされないときには、実行されるタスクは、通常は、迅速且つ正確に遂行される。
更に、エミューレートされる拡張ドライバファンクションの使用を簡単化するために、本発明の方法は、更に、所与のハードウェア構成に対するソフトウェアドライバによりどの拡張ドライバファンクションがサポートされないか決定し、サポートされない拡張ドライバファンクション及びサポートされる拡張ドライバファンクションの両方のファンクションポインタテーブルを開発し、そして拡張ドライバファンクションがコールされるたびにテーブルを調べて、拡張ドライバファンクションをエミューレートしなければならないかどうか決定するという段階を備えている。このように、サポートされない拡張ドライバファンクションをエミュレートするのに使用されるコアドライバファンクションのシーケンスをコールするプロセスが最適化される。
コントロールコマンドが上記のように発生されるときには、それらを使用してモーションコントロールデバイスをリアルタイムで制御することもできるし、後で使用するようにそれらをファイルに記憶することもできる。好ましくは、本発明の方法は、ストリームコードを含む多数のストリームを与える段階を備えている。各ストリームは、コントロールコマンドの行先に関連し、そして所与のストリームのストリームコードは、その所与のストリームに関連した行先へコントロールコマンドをいかに転送すべきかを指示する。従って、ユーザには、コントロールコマンドの行先を指示する1つ以上のストリームを選択する機会が与えられる。
ハードウェア特有の複雑さからプログラマーを隔離する助けとして、本発明の方法は、特定のモーションコントロールデバイスに関連したドライバを選択し、及び/又はモーションコントロールシステムを定義するのに必要な単位を、所与のモーションコントロールデバイスに使用される単位の特定のシステムへと変換するといった付加的な管理的段階を含む。
添付図面を参照すれば、図1には、本発明に原理に基づいて構成されそしてそれを実施するモーションコントロールシステムが番号10で示されている。このシステム10は、パーソナルコンピュータ部分12を備え、該部分は、ハードウェアバス14と、複数のモーションコントロールハードウェアコントローラ16a、16b及び16cと、運動されるべき1つ以上の物体(図示せず)と対話する機械的なシステム18a、18b及び18cとを有する。
システム10のパーソナルコンピュータ部分12は、ここに述べるようにプログラムすることのできるいかなるシステムでもよいが、好ましい実施形態では、マイクロソフトウインドウズ環境で実行することのできるシステムである。このようなシステムは、通常、図1に示すハードウェアバス14に加えて、シリアルポートを備えている。
ハードウェアバス14は、コンピュータ12がハードウェアコントローラ16と通信するのに必要な物理的な接続を与える。ハードウェアコントローラ16は機械的システム18を予想可能な仕方で動かすように制御する。機械的システム18は、モータ等を備え、その出力シャフトは、運動されるべき物体に接続される。ハードウェアコントローラ16a、16b及び16cと、機械的システム18a、18b及び18cの組合せは、各々、モーションコントロールデバイス20a、20b及び20cを形成する。
ハードウェアバス14、ハードウェアコントローラ16、及び機械的システム18は、この技術で良く知られたものであり、ここでは、本発明を完全に理解するのに必要な程度にのみ説明する。
パーソナルコンピュータ部分12は、アプリケーションユーザ24が、モーションコントロールデバイス20を制御するソフトウェアアプリケーション26を形成できるようにするソフトウェアシステム22を備えている。
より詳細には、ユーザ24により入力されたデータ及びアプリケーションプログラム26の内容に基づいて、ソフトウェアシステム22は、コントロールコマンドを発生し、これらのコマンドは、28a、28b、28c及び28dで示すような1つ以上のストリームによって送信される。ストリーム28は、所与のモーションコントロールデバイスを所望の仕方で実行するように制御するのに必要なハードウェア特有のコマンド言語を組み込んだコントロールコマンドを送信する。以下に詳細に述べるように、ストリーム28は、コントロールコマンドが適当なチャンネル(即ち、PCバス、シリアルポート)を経て適当なモーションコントロールデバイス28に到達できるようにする通信プロトコルを実施する。
システム22を使用し、アプリケーションプログラム28は、例示的なハードウェアコントローラ16のいずれに特有のコードも含まないように開発される。
通常の場合には、アプリケーションプログラム26、ひいては、プログラム26を形成したユーザ24は、モーションコントロールデバイス20から完全に分離される。従って、ユーザ24は、ハードウェア特有のコマンド言語、又はこれらデバイス20の各々に関連した通信プロトコルに関して何も知る必要がなく、アプリケーションプログラム26が形成されたときに1つ以上のハードウェアコントローラ16のコマンド言語が定義されないことも考えられる。
ソフトウェアシステム22は、アプリケーションプログラム26をハードウェアコントローラ16から完全に分離できるエレメントの組合せを含む。以下の説明において、ソフトウェアシステム22のフレームワークは、物体を運動させる方法、及び/又はコントロールコマンド発生する方法に関して説明する。この一般的な説明の後に、システム22の各コンポーネントを特定の動作環境において詳細に説明する。
I.物体を運動するようにモーションコントロールデバイスを制御するためのコントロールコマンドを発生する方法
最初に、ほとんどの状態において、このセクションに述べる方法は、通常は、少なくとも2人のそしておそらくは3人の別々のソフトウェアプログラマーである労働者、即ちソフトウェアシステムデザイナー、モーションコントロールデバイスの複雑な問題に精通しているハードウェアデザイナー、及びモーションコントロールシステムデザイナーを伴うが、必ずしもそうでなくてもよいことに注意されたい。上記のアプリケーションユーザ24は、通常は、モーションコントロールシステムデザイナーであり、そしてソフトウェアシステムデザイナー及びハードウェアデザイナーの役割は、以下の説明から明らかとなろう。
最初に、ほとんどの状態において、このセクションに述べる方法は、通常は、少なくとも2人のそしておそらくは3人の別々のソフトウェアプログラマーである労働者、即ちソフトウェアシステムデザイナー、モーションコントロールデバイスの複雑な問題に精通しているハードウェアデザイナー、及びモーションコントロールシステムデザイナーを伴うが、必ずしもそうでなくてもよいことに注意されたい。上記のアプリケーションユーザ24は、通常は、モーションコントロールシステムデザイナーであり、そしてソフトウェアシステムデザイナー及びハードウェアデザイナーの役割は、以下の説明から明らかとなろう。
ソフトウェアシステムデザイナーは、ソフトウェアシステム22を開発する。
ソフトウェアシステムデザイナーは、最初に、モーションコントロールを実行するのに用いられる1組のモーションコントロールオペレーションを定義する。モーションコントロールオペレーションは、特定のモーションコントロールデバイスハードウェア構成体に特に関連したものではなく、全てのモーションコントロールデバイスハードウェア構成体が機能するために実行しなければならない抽象的なオペレーションである。
モーションコントロールオペレーションは、基礎的なオペレーション或いは非基礎的なオペレーションのいずれかである。基礎的なオペレーションとは、モーションコントロールにとって必要なオペレーションで、他のモーションコントロールオペレーションの組合せを用いてシュミレーションできないオペレーションである。基礎的なオペレーションは、例えば、GET POSITION(位置を得る)及びMOVE RELATIVE(相対的移動)を含み、これらは、モーションコントロールにとって必要なもので、他のモーションコントロールオペレーションを用いてシュミレーションすることができない。非基礎的なオペレーションとは、基礎的なオペレーションの定義を満たさないモーションコントロールオペレーションである。非基礎的なオペレーションは、例えば、CONTOURMOVE(輪郭移動)を含み、これは、基礎的なモーションコントロールオペレーションの組合せを用いてエミュレートできるものである。
上記のような1組のモーションコントロールオペレーションが与えられると、ソフトウェアシステムデザイナーは、次いで、多数のドライバファンクションより成るサービスプロバイダーインターフェイス(SPI)を定義する。基礎的なオペレーションにはコアドライバファンクションが組み合わされ、一方、非基礎的なオペレーションには拡張ドライバファンクションが組み合わされる。モーションコントロールオペレーションと同様に、ドライバファンクションは、特定のハードウェア構成体に関連したものではなく、基本的に、ドライバファンクションは、一般的な意味でモーションコントロールオペレーションを実施するのに必要なパラメータを定義するが、特定の値等をこれらパラメータに付随させるものではない。
ソフトウェアシステムデザイナーは、次いで、1組のコンポーネントファンクションより成るアプリケーションプログラミングインターフェイス(API)を定義する。これらのコンポーネントファンクションについては、ソフトウェアシステムデザイナーは、コンポーネントファンクションの少なくとも幾つかをドライバファンクションの少なくとも幾つかに関連させるコンポーネントコードを書き込む。コンポーネントファンクションとドライバファンクションとの関係は、1対1である必要はなく、例えば、あるコンポーネントファンクションは、管理的な目的で設けられ、それに対応するドライバファンクションをもたない。しかしながら、ほとんどのコンポーネントファンクションは、それに関連したドライバファンクションを有する。
従って、ソフトウェアプログラム22により実施される全体的なソフトウェアモデルは、コンポーネントファンクションより成るAPIと、ドライバファンクションより成るSPIとを含み、APIは、コンポーネントファンクションに関連したコンポーネントコードによりSPIに関連される。
システム22がコントロールコマンドを発生するためには、少なくとも更に2つのコンポーネントが必要となる。即ち、それらは、アプリケーションプログラム26と、図1に30a、30b及び30cで示されたドライバのような少なくとも1つのソフトウェアドライバである。
ソフトウェアドライバ30は、通常は、ハードウェアデザイナーにより開発され、その各々は、単一のモーションコントロールデバイスに関連付けされる。ハードウェアデザイナーは、ドライバファンクションの少なくとも幾つかに関連したモーションコントロールオペレーションを実行するために関連するモーションコントロールデバイスを制御するコントロールコマンドをいかに発生するか指示するドライバコードを書き込む。
例示的ソフトウェアシステム22においては、ソフトウェアドライバ30a、30b及び30cが、各々、モーションコントロールデバイス20a、20b及び20cに関連付けされる。モーションコントロールデバイス20a、20b及び20cの各々に対してソフトウェアドライバが存在するので、これらデバイス20a、20b及び20cは、サポートされるモーションコントロールデバイスのグループを形成する。
上記のソフトウェアシステム22のフレームワークを入念に検討すると、このシステム22の全てのコンポーネントの中で、ソフトウェアドライバ30のみがハードウェアに依存することが示される。
モーションコントロールシステムのデザイナー、通常は、ユーザ24は、アプリケーションプログラム26を開発する。アプリケーションプログラム26は、物体を所望の仕方で運動するようにモーションコントロールデバイスを制御するのに必要なモーションコントロールオペレーションを定義するよう構成された一連のコンポーネントファンクションを備えている。アプリケーションプログラム26は、モーションコントロールコンポーネント35をプログラミングすることによりシステム22を使用する何らかのアプリケーションである。アプリケーションは、OLEオートメーションによるか、又はAPIを形成するカスタムOLEインターフェイスのいずれかを使用することにより、システム22をプログラムすることができる。
上記したように、コンポーネントコードは、多数のコンポーネントファンクションをドライバファンクションに関連させ、そしてドライバファンクションは、モーションコントロールオペレーションを実行するのに必要なパラメータを定義する。従って、適切に順序付けされたコンポーネントファンクションでは、アプリケーションプログラム26は、物体を所望の仕方で移動するに必要なロジックを含む。
アプリケーションプログラム26が書き込まれそしてソフトウェアドライバ30が設けられると、ユーザ24は、サポートされるモーションコントロールデバイス20a、20b及び20cのグループから少なくとも1つのモーションコントロールデバイスを選択する。次いで、ドライバアドミニストレータモジュール32を用いて、ユーザ24は、その選択されたモーションコントロールデバイスに関連したソフトウェアドライバを選択する。このドライバアドミニストレータモジュール32は、各ストリームをインストールし、取り出し、登録しそして設定するのに使用される。
現在実施されているように、ドライバアドミニストレータ32は、1つのソフトウェアドライバしか選択できないようにする。ソフトウェアシステム22の将来のバージョンでは、ドライバアドミニストレータは、ユーザが1つ以上のソフトウェアドライバを選択できるようにする。
従って、ソフトウェアシステム22は、アプリケーションプログラム26に含まれたコンポーネントファンクション、コンポーネントファンクションに関連したコンポーネントコード、及び選択されたソフトウェアドライバ28に関連したドライバコードに基づいて、コントロールコマンドを発生する。
上記のように、コントロールコマンドが発生されるときに、それらは、モーションコントロールデバイスへ直接送信され、このデバイスをリアルタイムでコントロールするか、或いは後で使用するために出力ファイルに記憶される。ソフトウェアシステム22は、ストリーム28を用いて、コントロールコマンドの所望の行先への送信を処理する。
例示的なシステム22において、コントロールコマンドの行先は、出力ファイル34及び/又はコントローラ16の1つ以上である。他の考えられる行先は、デバッグモニタ又はウインドウ、或いは特定の状態に対して定義された他のカスタム出力メカニズムを含む。ソフトウェアシステムデザイナー、又はある場合には、ハードウェアシステムデザイナーは、コントロールコマンド行先16及び34の所与の1つにコントロールコマンドをいかに転送するかを決定する各ストリーム28のストリームコードを送信する。ドライバアドミニストレータ32を用いて、ユーザ24は、コントロールコマンド行先16及び34の1つ以上を選択し、そしてその後の実行時に、システム22は、選択されたコントロールコマンド行先16及び/又は34に関連したストリーム28の送信ストリームコードに基づき選択されたコントロールコマンド行先16及び/又は34へコントロールコマンドを転送する。
16及び34のような多数のコントロールコマンド行先は、データをシステム22へ返送することができる。コントロールコマンド行先からシステム22へ返送されるデータは、応答データと称する。従って、ソフトウェアシステムデザイナーは、更に、応答データをコントローラ16からシステム22へいかに転送するか決定するデータ応答ストリームコードをストリーム28a、28b及び28cの各々に対して書き込む。従って、システム22は、ストリーム28に含まれたデータ応答ストリームコードに基づいてコントローラ16により送られる応答データを処理する。
再び図1を参照すれば、図示されたように、システム22は、モーションコントロールコンポーネント35及びドライバスタブモジュール36を更に備えている。モーションコントロールコンポーネントモジュール35は、コンポーネントファンクションをドライバファンクションに関連付けるソフトウェアシステム22の部分である。従って、モーションコントロールコンポーネントモジュール35は、アプリケーションプログラム26に含まれたコンポーネントファンクションとドライバファンクションとを関連させるコンポーネントコードを含む。
ドライバスタブモジュール36は、システム22により実施される基本的ソフトウェアモデルを実施する必要はなく、最小の努力で種々のモーションコントロールハードウェア構成を受け入れるための著しく大きい融通性をシステム22に与える。
より詳細には、ドライバスタブモジュール36が使用されるときには、ハードウェアデザイナーは、全てのドライバファンクションを実施するためのドライバコードを開発する必要がなく、逆に、ハードウェアデザイナーは、コアドライバファンクションを実施するためのドライバコードを書き込まねばならないが、拡張ドライバファンクションを実施するためのドライバコードを書き込む必要はない。ソフトウェアシステムデザイナーは、拡張ドライバファンクションの機能をエミュレートするのに使用されるコアドライバファンクションの組合せを識別するスタブコアをモーションコントロールドライバスタブ36に与える。
モーションコントロールコンポーネント24は、選択されたソフトウェアドライバ30に対し、その選択されたドライバ30がどの拡張ファンクションをサポートするか決定する。ここでは、非サポートの拡張ドライバファンクションと称されるサポートされない拡張ファンクションに対し、モーションコントロールコンポーネント35は、ドライバスタブモジュール36を参照して、非サポートの拡張ドライバファンクションの機能をエミュレートするためのコアドライバファンクションの適切な組合せを決定する。従って、システム22は、コアドライバファンクションの適切な組合せを用いて、非サポートの拡張ドライバファンクションを実施するのに必要なコントロールコマンドを発生する。
拡張ドライバファンクションをいつエミュレートする必要があるかを決定するプロセスは、各々の拡張ファンクションのポインタを含むファンクションポインタテーブルをモーションコントロールコンポーネント35に与えることによって最適化することができる。ファンクションポインタテーブルを形成するときは、モーションコントロールコンポーネント35は、選択されたドライバモジュール30をチェックして、それが各拡張ファンクションをサポートするかどうか調べる。選択されたドライバモジュール30が拡張ファンクションをサポートする場合には、モーションコントロールコンポーネントモジュール35は、選択されたドライバモジュール30により実施されるファンクションのポインタを、拡張ファンクションに対応する位置に記憶する。選択されたドライバモジュール30が拡張ファンクションをサポートしない場合には、モーションコントロールコンポーネントモジュール35は、ドライバスタブモジュール36に配置された拡張ファンクション実施に対するポインタを記憶する。拡張ファンクションのドライバスタブモジュール36実施は、選択されたドライバモジュール30により実施される複数のコアファンクションへのコールを含む。
それ故、ドライバスタブモジュール36は、モーションコントロールシステムデザイナーが、ハードウェアデザイナーによる最小の時間及び努力で、コアファンクションのみを実施するためのドライバコードを含むワーキングソフトウェアドライバ28を使用できるようにする。従って、コアドライバファンクションを実施するために開発されたソフトウェアドライバ28は、拡張ドライバファンクションを所望の通りに実施するためのドライバコードを開発することにより改良することができる。
拡張ドライバファンクションを実施するように特に設計されたドライバコードの使用は、一般に、拡張ドライバファンクションをエミュレートするためのドライバスタブモジュール36に依存するのが好ましく、即ち拡張ドライバファンクションを実施するために特に書き込まれたドライバコードは、コアドライバファンクションの組合せでのドライバファンクションのエミュレーションよりもそのドライバファンクションのより最適な実施をほとんど常時に得ることになる。
再び図1を参照すれば、図示されたように、システム22は、更に、ドライバアドミニストレータCPLアプレット38及びDDEサーバ40を備えている。
ドライバアドミニストレータCPLアプレット38は、ユーザ24がドライバアドミニストレータモジュール32と通信するところのユーザインターフェイスを形成する。DDEサーバ40は、アプリケーションプログラム26がモーションコントロールコンポーネントモジュール35と通信するところのソフトウェアインターフェイスを与える。
II.モーションコントロールコンポーネント
図2ないし10を参照して、モーションコントロールコンポーネント35について以下に説明する。モーションコントロールコンポーネント35は、モーションコントロールオペレーションを実行するようにシステム22をプログラミングする各アプリケーションにより使用される。APIの主要セットは、このコンポーネントにより実施される。動作時に、モーションコントロールコンポーネント35は、ドライバアドミニストレータ32と対話して、現在ドライバを得ると共に、ドライバ30及びドライバスタブ36と対話して、モーションコントロールオペレーションを実行する。システム22を使用するアプリケーションのみがモーションコントロールコンポーネント35と対話する。
図2ないし10を参照して、モーションコントロールコンポーネント35について以下に説明する。モーションコントロールコンポーネント35は、モーションコントロールオペレーションを実行するようにシステム22をプログラミングする各アプリケーションにより使用される。APIの主要セットは、このコンポーネントにより実施される。動作時に、モーションコントロールコンポーネント35は、ドライバアドミニストレータ32と対話して、現在ドライバを得ると共に、ドライバ30及びドライバスタブ36と対話して、モーションコントロールオペレーションを実行する。システム22を使用するアプリケーションのみがモーションコントロールコンポーネント35と対話する。
このセクションは、モーションコントロールコンポーネント35の設計を3つの主たる部分において説明する。先ず、コンポーネント35に作用する全ての2進モジュールをコンポーネント35とのインターアクションに沿って説明する。
次いで、モーションコントロールコンポーネント35を実施するのに使用される全てのC++オブジェクト間のインターアクションを示すためにモジュールインターアクションマップを詳細に描く。次いで、コンポーネント35が実行することを要求されるある重要なプロセスの間に行われる特定のインターアクションを表示することによりオブジェクトインターアクションマップがテストされる。
図2に示すモジュールインターアクションマップは、全ての2進モジュール、及びそれらとモーションコントロールコンポーネント35とのインターアクションを表示する。モジュールインターアクションマップから明らかなように、アプリケーションのみがモーションコントロールコンポーネント35と通信する。この点から、コンポーネント35は、ドライブアドミニストレータ32、ドライバ30、及びドライバスタブ36のコンポーネント間の全てのインターアクションを整合する。
モジュールインターアクションマップを分断し、そしてモーションコントロールコンポーネント35を実施するのに使用される全てのC++オブジェクト間で行われるインターアクションを追加することにより、図3に示すオブジェクトインターアクションマップが形成される。
この図の各オブジェクトを以下に説明する。CCmpntDispオブジェクトは、エクスポーズされたインターフェイス方法をディスパッチするのに使用されるディスパッチオブジェクトである。ディスパッチプロセス中に、全ての生のデータが適当なC++形態に変換される。例えば、OLEコンポーネント間を通過したデータの集合は、通常、生のメモリブロックにパッケージされる。
CCmpntDispオブジェクトは、出て行くデータをパッキングし、そして到来するデータをアンパッキングするように注意を払う。データパッキングは、生及びネーティブなC++フォーマットの間でデータを変換することを含む。
CDriverAdminオブジェクトは、ドライバアドミニストレータコンポーネントと直接通信するのに使用される。OLEに関連した全ての細部は、このクラスにカプセル化される。
CDriverMgrオブジェクトは、適当なドライバファンクションをコールする前に行われる全てのユニットマッピングをコントロールするのに使用される。CUnitMapperオブジェクトは、ユニット間で実際のマッピングを行うのに使用される。
CUnitMapperオブジェクトは、部分座標システム(PCS)とマシン座標システム(MCS)との間にユニットをマップするのに使用される。このオブジェクトにより両方向のユニットマッピングが行われる。
Cdriverオブジェクトは、コア及び拡張の両ドライバファンクションを含むSPIテーブルを形成するのに使用される。ドライバサポートのレベルに基づき、SPIテーブルの拡張ファンクションは、ドライバスタブ36又はドライバ30のいずれかで実施されるファンクションを指す。
図4ないし8の以下の説明は、モーションコントロールコンポーネント35において生じる全ての主たるシナリオ又はオペレーションについて述べる。各シナリオマップは、含まれる全てのオブジェクト、及びそれらが生じるシーケンスにおいてそれらの間で行われるインターアクションを表示する。
図4に示すように、アプリケーションがモーションコントロールコンポーネント35を使用できる前に、CoCreateInstance OLEファンクションを用いてオブジェクトのインスタンスを形成し、そしてコンポーネント35により実施されるエクスポーズされた初期化カスタムインターフェイス方法をコールするインスタンスを初期化しなければならない。図4は、初期化方法がコールされるときに行われる事象のシーケンスを示す。
初期化の間に、次のステップが生じる。先ず、アプリケーションは、標準的なOLEファンクションCoCreateInstanceをコールすることによりモーションコントロールコンポーネント35のインスタンスを形成しなければならない。アプリケーションは、ロードされると、コンポーネント35のエクスポーズされた初期化方法をコールしなければならない。最初にロードされたときに、コンポーネント35は、既に記憶された登録データをロードする。次いで、コンポーネント35は、システムを初期化するためのCCmpntDispを指令する。このCCmpntDispは、使用すべき現在ドライバを得るようにCDriverAdminに指令する。CDriverAdminは、先ず、標準的なOLE CoCreateInstanceファンクションを用いてドライバアドミニストレータ32にロードする。次いで、ドライバアドミニストレータを初期化する。次いで、使用すべきドライバ及びそれらのSPIサポート情報についてドライバアドミニストレータに問い合わせする。最後に、ドライバアドミニストレータはドライバ及びサポート情報をコンポーネント35に返送し、そして使用した全てのインターフェイスをドライバアドミニストレータコンポーネント32から解除する。
アクティブなドライバ30及びそれらのサポート情報を受け取ると、モーションコントロールコンポーネント35は、ドライバ30をCDriverMgrへ通し、そしてシステムを初期化するように指令する。この初期化中に、CDriverMgrは、CUnitMapperを初期化する。又、初期化の間に、CDriverMgrは、使用される各ドライバに対してCDriverを初期化する。各CDriverを初期化した後に、サポート情報を使用して、各CDriverオブジェクト内に各SPIテーブルが作られる。SPIテーブルを作るときには、全てのコア及びサポートされた拡張SPIインターフェイスがドライバから問い合わせされる。又、SPIテーブルを作るときには、CDriverは、ドライバ30によりサポートされない全てのインターフェイスにドライババス36から問い合わせする。
図5を参照すると、モーションコントローラコンポーネント35が初期化されると、アプリケーション26は、それに対してオペレーションを実行する。コンポーネント35において実行できるオペレーションには2つの形式があり、即ちコアドライブファンクションを使用するオペレーションと、拡張ドライブファンクションを使用するオペレーションである。その2つの間の相違が、コンポーネント35を使用するアプリケーションに完全に見えなくても、内部のインターアクションは2つの間で相違する。これらの相違について、以下に述べる。
次のインターアクションは、コアドライバファンクションのみを使用するオペレーションをコンポーネント35が実行するときに行われる。先ず、アプリケーションは、オペレーションを要求し、そして全ての関連パラメータをコンポーネント35へ通さねばならない。次いで、コンポーネント35は、オペレーションを実行するためのCCmpntDispを指令する。次いで、CCmpntDispは、オペレーションを実行するようにCDriverMgrに指令し、全ての関連パラメータをそこに通す。オペレーションを実行する前に、CDriverMgrは、CUnitMapperを使用して、全てのユニットをマシン座標システム(MSC)へ変換する。次いで、CDriverMgrは、オペレーションを実行するようにCDriverオブジェクトに指令し、そして新たにマップされたパラメータをそこに通す。CDriverオブジェクトは、その内部SPIテーブルを使用して、ドライバコンポーネントにより実施されるコアドライブファンクションと直接通信する。
図6は、ドライバ30によりサポートされない拡張SPIを使用することになるオペレーションを実行するようコンポーネント35が指令されたときに生じる事象のシーケンスを示す。次のステップは、オペレーションが要求されたときに生じる。
先ず、アプリケーションは、オペレーションを要求し、全ての関連パラメータをコンポーネント35に通さねばならない。次いで、コンポーネント35は、オペレーションを実行するようにCCmpntDispに指令する。CCmpntDispは、次いで、オペレーションを実行するようにCDriverMgrに指令し、そして全ての関連パラメータをそこに通す。オペレーションを実行する前に、CDriverMgrは、CUnitMapperを使用して、全てのユニットをマシン座標システム(MCS)に変換する。次いで、CDriverMgrは、オペレーションを実行するようにCDriverオブジェクトに指令しそして新たにマップされたパラメータをそこに通す。CDriverオブジェクトは、その内部SPIテーブルを使用して、ドライバコンポーネントにより実施されるコアドライバファンクションと直接通信する。
上記で簡単に述べたように、システム22を使用するときには、多数の形式のユニット及び2つの異なる座標システムが使用される。ユニットマッピングのプロセスは、測定値を部分座標システムとマシン座標システムとの間で変換することを含む。図7は、このプロセスを示し、次のステップは、オペレーションが要求されたときに生じる。
先ず、アプリケーションは、オペレーションを要求し、全てのパラメータをコンポーネント35に通さねばならない。全てのパラメータは、PCSにあることに注意されたい。次いで、コンポーネント35は、オペレーションを実行するようにCCmpntDispに指令する。CCmpntDispは、次いで、オペレーションを実行するようにCDriverMgrに指令し、そしてPCSパラメータをそこに通す。CDriverMgrは、全ての測定を行い、CUnitMapperを用いて、それらをMCSに変換する。新たにマップされたパラメータは、次いで、Cdriverへ通される。Cdriverは、オペレーションを実行するようにドライバ又はドライバスタブコンポーネントに指令する。モーションコントロールコンポーネント35を用いてアプリケーションが終了すると、エクスポーズされた解除方法をコールすることにより全てのリソースを解放するようにコンポーネント35に指令する。このプロセスは、図8に示されている。クリーンアッププロセス中に、次のステップが生じる。
先ず、アプリケーションは、その解除方法をコールすることによりその全てのリソースを解除するようにコンポーネント35に指令しなければならない。呼び出し時に、コンポーネント35は、CCmpntDispオブジェクトへコールを通す。CCmpntDispオブジェクトは、CDriverMgrにそれが使用するリソースを解除するように指令する。CDriverMgrは、各CDriverオブジェクトにそのいずれかのリソースを解除し、次いで、CDiverオブジェクトを削除するように指令する。先ず、CDriverオブジェクトは、それが使用するいずれかのインターフェイスをドライバコンポーネントから解除する。次いで、CDriverオブジェクトは、それが使用するいずれかのインターフェイスをドライバスタブコンポーネントから解除する。
図9は、モーションコントロールコンポーネント35に関連したインターフェイスマップである。図10は、拡張ドライバファンクションをエミュレートする必要があるかどうかに関連したデータをいかに記憶するかを示すデータマップである。
III.ソフトウェアドライバ
ドライバ30は、ドライバアドミニストレータ32及びコンポーネント35の両方により使用される。その主たる目的は、サポートされる特定のハードウェアに対しモーションコントロールコマンドを発生する機能を実施することである。
ドライバ30は、ドライバアドミニストレータ32及びコンポーネント35の両方により使用される。その主たる目的は、サポートされる特定のハードウェアに対しモーションコントロールコマンドを発生する機能を実施することである。
例えば、CompumotorAT6400モーションコントロールハードウェアを制御するのに使用されるAT6400ドライバは、AT6400コマンドコードを発生する。システム22の初期化段階中に、ドライブアドミニストレータ32は各ドライバ30と通信し、ユーザがドライバの構成を追加、除去又は変更できるようにする。システム22を使用するアプリケーションが実行されるときには、コンポーネント35は、ドライバ30と通信し、適当なモーションコントロールオペレーションを実行するように指令する。
このセクションは、一般的なドライバ30の完全な設計について説明する。全てのドライバは、ここに述べる基本的設計から設計される。このセクションは、3つの部分に分けられる。先ず、ドライバ30と対話する全ての2進モジュールを記述するモジュールインターアクションマップについて述べる。次いで、モジュールインターアクションマップは、ドライバの全ての内部がエクスポーズされるオブジェクトインターアクションマップとして描かれる。このマップには、ドライバを構成する全てのC++オブジェクト及びそれらのインターアクションとが示される。次いで、多数のシナリオマップが描かれる。各シナリオマップは、あるプロセス中に含まれるC++オブジェクト間で行われるインターアクションを表示する。最後に、このセクションは、ドライバコンポーネント、使用する全てのデータ構造体、及び使用する各C++クラスの定義によりエクスポーズされるインターフェイスを説明する。
図11を参照すれば、モジュールインターアクションマップは、全ての2進モジュール、及びそれとドライバ30とのインターアクションを表示する。ドライバと直接対話する2つのモジュール、即ちモーションコントロールコンポーネント35及びドライバアドミニストレータ32がある。ドライバアドミニストレータ32は、ドライバの設定を問合せ、それを変更し、そしてコンポーネント35は、システムのある位置へ移動するようなモーションコントロールオペレーションを実行するようにドライバに指令する。図11には、ここで「レジストリ」と称する標準的なウインドウズ登録データベースが42で示されている。
ドライバを実施するのに使用される全てのC++オブジェクト間で行われるインターアクションを含ませることによりモジュールインターアクションマップを細部へと分断すると、オブジェクトインターアクションマップが形成される。ドライバ30のオブジェクトインターアクションマップが図12に示されている。
この図の各オブジェクトについて、以下に説明する。
CDriverDispは、エクスポーズされたインターフェイス方法をディスパッチするのに使用されるディスパッチオブジェクトである。ディスパッチプロセス中に、全ての生のデータが適当なC++形態に変換される。例えば、OLEコンポーネント間に通過したデータの集合が通常は生のメモリブロックにパッケージされる。CDriverDispオブジェクトは、出て行くデータをパッキングしそして到来するデータをアンパッキングするように注意を払う。データノパッキングは、生とネーティブのC++形態の間でデータを変換することを含む。
CDriverDispは、エクスポーズされたインターフェイス方法をディスパッチするのに使用されるディスパッチオブジェクトである。ディスパッチプロセス中に、全ての生のデータが適当なC++形態に変換される。例えば、OLEコンポーネント間に通過したデータの集合が通常は生のメモリブロックにパッケージされる。CDriverDispオブジェクトは、出て行くデータをパッキングしそして到来するデータをアンパッキングするように注意を払う。データノパッキングは、生とネーティブのC++形態の間でデータを変換することを含む。
CStreamMgrオブジェクトは、ドライバに登録された1組のストリームを管理する役割を果たす。ストリームは、追加、除去及びイネーブルすることができる。イネーブルされたストリームのみが、送られるデータとなる。登録された各ストリームのCLSID及びイネーブル状態は、登録データベースに記憶される。ストリームと通信するときには、CStreamMgrを用いて、コマンドストリングが全てのイネーブルされたストリームへ送られる。
CComandMgrオブジェクトは、ストリームに送られるコマンドを構成しそしてストリームから受け取った応答を抽出するのに使用される。CComandMgrは、CResponse、CCommandList及びCStreamオブジェクトを管理するコントロールオブジェクトである。
CCommandListオブジェクトは、モーションコントロールコマンド言語を形成するコマンドの完全なリストを記憶する。このようなコマンドは、テキストリソースとして記憶されるか、又はテキストファイルに記憶される。
CCommandオブジェクトは、コマンドストリングを形成し、これらは、CStreamへ送られる。構成された各コマンドは、完全なモーションコントロールコマンドストリングである。
CResponseListオブジェクトは、予想される応答のパージングフォーマットで初期化されるCResponseオブジェクトを構成する。
CResponseオブジェクトは、CStreamによって返送される生の応答ストリングを変換し、そしてそれらをC++データ形式へと変換する。例えば、位置データを含む応答ストリングが1組の二重の値に変換される。
CStreamオブジェクトは、基本的なストリームコンポーネントと直接通信するのに使用される。
図14ないし20は、ドライバ30に生じる全ての主たるシナリオ即ちオペレーションを記述するシナリオマップを含む。各シナリオマップは、含まれる全てのオブジェクトと、それらが発生するシーケンスでそれらの間に生じるインターアクションとを表示する。
ドライバ30には2つの形式のオペレーションが生じる。先ず、ドライバアドミニストレータ32は、ストリームを追加し又はドライバを構成するといったオペレーションを開始する。次いで、モーションコントロールコンポーネント35は、アプリケーションが実際に実行されるときにドライバにおいてオペレーションを開始する。以下の説明は、ドライバアドミニストレータにより指令されたオペレーションで始めて、各見地について述べる。ドライバアドミニストレータによりドライバにおいて行われる全てのオペレーションは、ドライバを使用するときにそれらが発生する順序で説明する。
ドライバが使用される前にそれをOLEシステムに登録しなければならない。
ドライバを登録するために、ドライバアドミニストレータは、先ず、登録されるモジュールが実際にドライバ30であるかどうかを照合し、次いで、ドライバを登録するためにDLLRegisterServerエクスポートファンクションをコールする。システム22の各モジュールは、DLLGetModuleTypeと称するファンクションをエクスポートする。このファンクションは、モジュールがドライバ30コンポーネントであることを照合するのに用いられる。
図13は、ドライバを登録するときに行われるインターアクションを示す。
図13に示す登録プロセス中に、次のステップが生じる。先ず、ドライバアドミニストレータは、ストリームコンポーネントを含むDLLをロードし、モジュールがドライバ30であることを照合しなければならない。これを行うために、ドライバアドミニストレータは、ドライバによりエクスポートされたDLLGetModuleTypeファンクションをコールする。ファンクションが、上位バイトに値XMC_DRIVER_MTを含む値を返送する場合には、ドライバアドミニストレータは、そのエクスポートされたファンクションDLLRegisterServerをコールするように進んでドライバを登録する。コールされたときに、DLLRegisterServerを実施すると、全てのOLE2.0登録情報がウインドウズ登録データベースに書き込まれる。
図13に示す登録プロセス中に、次のステップが生じる。先ず、ドライバアドミニストレータは、ストリームコンポーネントを含むDLLをロードし、モジュールがドライバ30であることを照合しなければならない。これを行うために、ドライバアドミニストレータは、ドライバによりエクスポートされたDLLGetModuleTypeファンクションをコールする。ファンクションが、上位バイトに値XMC_DRIVER_MTを含む値を返送する場合には、ドライバアドミニストレータは、そのエクスポートされたファンクションDLLRegisterServerをコールするように進んでドライバを登録する。コールされたときに、DLLRegisterServerを実施すると、全てのOLE2.0登録情報がウインドウズ登録データベースに書き込まれる。
図14を参照すれば、ドライバが登録された後に、ドライバアドミニストレータは、OLE CoCreateInstanceファンクションを用いてコンポーネント35をロードすることができる。初期化プロセス中に、ドライバは、全ての登録データをロードし、CDriverDisp及びCStreamMgr C++オブジェクトの両方を初期化する。
初期化の間に、次のステップが生じる。
ドライバコンポーネントをロードする前に、ドライバアドミニストレータは、CLSIDについてドライバモジュールに問い合わせしなければならない。ドライバのエクスポートファンクションDLLGetCLSIDをコールし、CLSIDを返送する。ドライバアドミニストレータは、CLSIDを得ると、標準的なOLEファンクションCoCreateInstanceをコールすることによりドライバのインスタンスを形成することができる。最初にロードされるときに、ドライバは、既に記憶された登録データをロードする。次いで、ドライバはシステムを初期化するようにCDriverDispオブジェクトに指令する。それが通知されるときに、CDriverDispオブジェクトは、それ自身を初期化し、そしてCStreamMgrにそれ自身を初期化するよう指令する。その初期化中に、CStreamMgrは、全てのストリーム設定を登録データベースからロードする。例えば、CLSID及びドライバに既に登録された全てのストリームのイネーブル状態がロードされる。
ドライバコンポーネントをロードする前に、ドライバアドミニストレータは、CLSIDについてドライバモジュールに問い合わせしなければならない。ドライバのエクスポートファンクションDLLGetCLSIDをコールし、CLSIDを返送する。ドライバアドミニストレータは、CLSIDを得ると、標準的なOLEファンクションCoCreateInstanceをコールすることによりドライバのインスタンスを形成することができる。最初にロードされるときに、ドライバは、既に記憶された登録データをロードする。次いで、ドライバはシステムを初期化するようにCDriverDispオブジェクトに指令する。それが通知されるときに、CDriverDispオブジェクトは、それ自身を初期化し、そしてCStreamMgrにそれ自身を初期化するよう指令する。その初期化中に、CStreamMgrは、全てのストリーム設定を登録データベースからロードする。例えば、CLSID及びドライバに既に登録された全てのストリームのイネーブル状態がロードされる。
ドライバの初期化の後に、ドライバアドミニストレータは、それにおいてオペレーションを実行する。例えば、ドライバアドミニストレータは、ストリームを追加又は除去するようにドライバに要求する。図15は、ドライバが新たなストリームを追加するよう要求されたときに発生する事象のシーケンスを示す。ストリームを追加するときに、次のステップが生じる。
先ず、ドライバアドミニストレータは、新たなストリームを追加するようにストリームに指令し、追加されるべきストリームのCLSIDをドライバへ通す。
次いで、ドライバは、CLSIDをCDriverDispオブジェクトへ通しそしてそれをストリームに加えるように指令する。CDriverDispオブジェクトは、この情報をCStreamMgrへ通し、そしてそれをストリームに加えるように指令する。最終ステップにおいて、CStreamMgrは、モジュールが有効なストリームコンポーネント28であると仮定し、そしてCLSIDを登録データベースの情報のドライバセットに追加する。
初期化の後に、ドライバに要求される別のオペレーションは、現在の設定についてそれに問い合わせすることである。サポートするハードウェアの名前のようなドライバに関する情報を表示する前に、ドライバアドミニストレータは、その情報についてドライバに問合せしなければならない。例えば、図16は、ドライバに登録されたストリームのエミュレーションに対しドライバに問い合わせするプロセスを示す。情報についてドライバに問い合わせするときには、次のステップが生じる。
先ず、ドライバアドミニストレータは、ドライバのストリームのエミュレーションを問い合わせるのに使用するインターフェイス方法をコールする。次いで、ドライバは、CDiverDispにストリームエミュレーションを形成するよう指令する。CDiverDispオブジェクトは、次いで、CStreamMgrにストリームエミュレーションを準備するよう指令する。CStreamMgrは、登録データベースをチェックし、その内部状態がレジストリに記憶されたデータと同期するように確保する。次いで、ストリームを追加又は除去するような全てのストリームマネージメントオペレーションをフェイルさせるロックをセットする。CStreamMgrは、ストリームのリストを準備し、CStreamオブジェクトを用いてそれらをメモリにロードする。CStreamオブジェクトは、OLE CoCreateInstance APIを用いてストリームコンポーネントをロードする。
ドライバアドミニストレータは、ドライバを用いて実行した後に、そのエクスポーズされた解除方法をコールすることによってドライバを解除しなければならない。この方法をコールすると、使用される全てのリソースを解除するようにドライバに指令する。図17は、ドライバコンポーネントを解除するプロセスを示す。クリーンアッププロセスの間に、次のステップが生じる。
先ず、ドライバアドミニストレータは、ドライバコンポーネントに、その解除方法をコールすることによりそれ自身をクリーンアップするように指令する。これが呼び出されると、ドライバコンポーネントは、コールをCDriverDispオブジェクトへ通す。CDriverDispオブジェクトは、次いで、CStreamMgrに全てのデータをセーブするように指令する。CStreamMgrは、各ストリームの状態を含む全てのデータを登録データベースにセーブする。最後に、ドライバは、全ての内部データを登録データベースにセーブする。
ドライバがシステム22に首尾良くインストールされそしてドライバアドミニストレータを用いて構成された後に、モーションコントロールコンポーネント35により使用する準備ができる。コンポーネント35は、コンポーネント35を用いるアプリケーションから要求されたモーションコントロールオペレーションを実行するときにドライバ30を使用する。以下の説明は、コンポーネント35が指令したオペレーションであって、ドライバにおいて実行することのできるオペレーションについて述べる。
ドライバを使用する前に、それをコンポーネント35により初期化しなければならない。このオペレーションは、システムがコマンドを送信及び受信するよう準備されねばならないので、ドライバアドミニストレータにより使用されるときにドライバにおいて行われるドライバ初期化とは異なる。データ通信の準備をするために、ストリームを初期化しそしてオープンしなければならない。図18は初期化プロセスを示す。次のステップは、初期化プロセス中に生じる。
先ず、コンポーネント35は、ドライバにそれ自身を初期化するように指令する。これは、通常は、2ステップのプロセスである。第1ステップにおいて、コンポーネント35は、標準的なOLE CoCreateInstanceファンクションを用いてドライバのインスタンスを形成する。次いで、ドライバによりエクスポーズされた初期化方法がコールされ、データ送信に対してドライバが準備される。初期化方法がコールされたときには、ドライバは、先ず、登録データベース42に記憶された内部データをロードする。次いで、ドライバは、内部システムを初期化するようにCDriverDispに指令する。CDriverDispは、次いで、ストリームを初期化するようCStreamMgrに指令する。次いで、CStreamMgrは、全てのCLSIDのセット、及びドライバに登録された全てのストリームに対するイネーブル状態を含む全てのデータを登録データベースからロードする。次いで、CStreamMgrは、各イネーブルストリームに対して新たなCStreamオブジェクトを形成することにより、各イネーブルストリームをロードする。各CStreamオブジェクトを形成するときには、基本的なストリームに対するCLSIDがCStreamオブジェクトに通される。各CStreamオブジェクトが形成されそしてストリームコンポーネントに付随されるときには、標準的なOLE CoCreatelnstanceファンクションをコールすることによりコンポーネント35をロードする。CStreamMgrが実行されると、CDriverDispは、CCommandMgrにそれ自身を初期化するよう指令する。その初期化プロセス中に、CCommandMgrは、CCommandListを初期化し、そしてロードする。更に、CCommandMgrは、初期化を行うときには、CCommandListに対応するCResponseListをロードする。
システムが初期化されると、モーションコントロールコンポーネント35は、幾つかのコマンドオペレーションを実行するようにドライバに指令することができる。コマンドオペレーションは、システムの特定の位置へ移動したり現在位置についてシステムに問い合わせするといった標準的なモーションコントロールオペレーションである。図19は、あるオペレーションを実行するようにドライバに指令するプロセスを示す。あるオペレーションを実行するようにドライバに指令するときには、次のステップが生じる。
先ず、コンポーネント35は、ある位置へ移動したり、又は現在位置についてシステムに問い合わせするといったオペレーションを実行するようにドライバに指令する。次いで、ドライバは、オペレーションを実行するようにCDriverDispオブジェクトに指令する。CDriverDispオブジェクトは、適当なコマンドを構成するようにCCommandMgrに指令する。コマンドに関連したパラメータは、CCommandMgrに通される。例えば、ある位置へ移動するようドライバに指令するときには、位置情報がCCommandMgrに通される。次いで、CCommandMgrは、CResponseListにCResponseオブジェクトを形成するように要求する。CResponseListは、応答フォーマットを探し、そしてそれを使用して、CCommandMgrに返送される新たなCResponseオブジェクトを形成する。次いで、CCommandMgrは、CCommandListにコマンドを形成するよう指令する。コマンドに関連したパラメータは、CCommandListに通される。CCommandListは、新たなCCommandオブジェクトを形成し、生のコマンドストリングを探し、これとコマンドパラメータを、そのコマンドストリングを構成するCCommandへ通す。
CCommandMgrは、次いで、CCommandListにより返送されたCCommandオブジェクトと、既に形成されているCResponseオブジェクトをCStreamMgrオブジェクトへ通す。CStreamMgrオブジェクトは、オブジェクトを処理するように指令される。CStreamMgrは、CCommand及びCResponseオブジェクトを全てのイネーブルCStreamオブジェクトに通す。CStreamオブジェクトは、生のテキスト形態の全コマンドストリングに対しCCommandオブジェクトに問い合わせする。生のテキストコマンドは、ストリームコンポーネントに通される。次いで、CStreamオブジェクトは、応答を待機し、生のテキストコマンドをバッファへ読み込む。次いで、生のテキスト応答がCResponseオブジェクトへ通される。次いで、CRETONNEオブジェクトがCStreamMgrへ返送され、これをそのオブジェクトをCCommandMgrへ返送し、そしてこれはそのオブジェクトをCDriverDispオブジェクトへ返送する。最終的に、CResponseは、CDriverDispオブジェクトへ返送され、これは、次いで、CResponseに応答を一般的なC++形式に変換するように指令する。この一般的な形式は、モーションコントロールコンポーネント35へ返送される。
コンポーネント35がドライバを用いて終了されると、ドライバは、その解除方法をコールすることにより解除されねばならない。ドライバを解除すると、ドライバにより使用された全てのリソースが解放される。図20は、ドライバを解除するプロセスを示す。次のステップは、ドライバにより使用される全てのリソースをクリーンアップしそして解放するときに生じる。
先ず、コンポーネント35は、ドライバの解除方法をコールしなければならない。これがコールされると、ドライバは、使用されたリソースを解除するようにCDriverDispオブジェクトに指令する。次いで、CDriverDispは、使用されたリソースを解放するようCStreamMgrに指令する。
次いで、CStreamMgrは、全てのアクティブなCStreamオブジェクトを解放する。各CStreamオブジェクトは、使用された全てのストリームコンポーネントインターフェイスを解除する。次いで、CDriverDispは、CCommandMgrにその全てのリソースを解放するよう指令する。
クリーンアップの間に、CCommandMgrは、CCommandListオブジェクトを解放する。そのクリーンアップを完了するために、CCommandMgrは、CResponseListオブジェクトを解放する。
IV.ストリーム
このセクションは、ドライバ30のコンポーネントと、モーションコントロールデバイス20及び/又は出力ファイル34のような行先出力位置との間のデータ搬送レイヤとして使用されるストリームコンポーネント28について述べる。
このセクションは、ドライバ30のコンポーネントと、モーションコントロールデバイス20及び/又は出力ファイル34のような行先出力位置との間のデータ搬送レイヤとして使用されるストリームコンポーネント28について述べる。
例えば、PCバスに接続されたモーションコントロールハードウェアを使用するときには、ドライバ30のコンポーネントは、PCバスストリームコンポーネント28と通信する。
ストリームコンポーネント28の設計は、3つの部分において説明する。先ず始めに、モジュールインターアクションマップは、含まれるモジュールをストリームに関して説明すると共に、それらが互いにいかに対話するかについて説明する。次いで、オブジェクトインターアクションマップは、モジュールインターアクションマップを更に詳細な図に分割し、これは、モジュール間に生じるインターアクションを示すだけでなく、ストリームコンポーネント28内でC++オブジェクト間で行われるインターアクションも示す。次いで、オブジェクトインターフェイスマップは、多数のシナリオマップを通して実行することにより「テスト」される。各シナリオマップは、あるオペレーション中に生じる他のインターアクションを示す。
図22に示すモジュールインターアクションマップは、ストリームコンポーネント28と対話する全てのモジュールを示す。インターアクションは、2つの異なる観点から始まる。先ず、ドライバアドミニストレータ32は、ストリームをインストールし、除去し及び構成するときにストリームコンポーネント28と対話する。次いで、その使用時に、各ドライバ30は、行先へデータを送信し及び行先からデータを検索する間にストリームと対話する。例えば、ドライバがテキストファイルストリームにデータを書き込むときには、ストリームは、データをファイルに書き込むように注意を払う。又は、ドライバがPCバスストリームからデータを読み取る場合には、ストリームは、ハードウェアから実際に読み取りそしてデータをドライバへ戻す。
ドライバは、ドライバに特に接続されたストリームのみと通信する。接続されると、ストリームは、PCバス、シリアルI/O接続、テキストファイル又はデバッグモニタと同様に、行先オブジェクトと通信するのに使用される。
図22に示すストリームコンポーネント28は、各ドライバに対しデータ搬送レイヤとして動作するオブジェクトである。各ストリームは、ストリームの形式を定義する異なるターゲットを有する。現在ストリームターゲットは、次の通りである。
PC Bus/WinNT − このウインドウズNTストリームは、ウインドウズNT.SYSデバイスドライバを使用して、PCバスに接続されたモーションコントロールハードウェアと直接通信する。
PC Bus/Win95 − このウインドウズ95ストリームは、ウインドウズ95 VxDを使用して、PCバスに接続されたモーションコントロールハードウェアと直接通信する。
PC Bus/Win3.1 − このウインドウズ3.1ストリームは、PCバスに接続されたモーションコントロールハードウェアと直接通信する。
Serial − このストリームは、COMM APIを使用して、シリアルポートに接続されたモーションコントロールハードウェアと通信する。
Text File − このストリームは、書き込みのみであり、全てのデータをテキストファイルに送信する。
Debug Monitor − このストリームは、書き込みのみであり、全てのデータをデバッグモニタに送信する。
Custom − これは、データを未知の位置に送信するカスタムストリームである。
PC Bus/Win95 − このウインドウズ95ストリームは、ウインドウズ95 VxDを使用して、PCバスに接続されたモーションコントロールハードウェアと直接通信する。
PC Bus/Win3.1 − このウインドウズ3.1ストリームは、PCバスに接続されたモーションコントロールハードウェアと直接通信する。
Serial − このストリームは、COMM APIを使用して、シリアルポートに接続されたモーションコントロールハードウェアと通信する。
Text File − このストリームは、書き込みのみであり、全てのデータをテキストファイルに送信する。
Debug Monitor − このストリームは、書き込みのみであり、全てのデータをデバッグモニタに送信する。
Custom − これは、データを未知の位置に送信するカスタムストリームである。
モジュールインターアクションマップと同様に、オブジェクトインターアクションマップは、モジュール間のインターアクションを表示する。更に、このマップは、ストリームコンポーネント28内の各C++オブジェクト間に生じる全てのインターアクションを示す。図23は、ストリームコンポーネント28に対するオブジェクトインターアクションマップである。
図の各オブジェクトは、次のように説明される。CStreamDispオブジェクトは、エクスポーズされたインターフェイス方法をディスパッチするのに使用されるディスパッチオブジェクトである。ディスパッチプロセスの間に、全ての生のデータは、適当なC++形態に変換される。例えば、OLEコンポーネント間に通されたデータの集合は、通常は、生のメモリブロックにパッケージされる。CStreamDispオブジェクトは、出て行くデータをパッキングしそして到来するデータをアンパッキングすることに注意を払う。データのパッキングは、生及びネーティブのC++フォーマット間でデータを変換することを含む。
CRegistryMgrオブジェクトは、登録データベースに記憶された全てのデータをマネージするように注意を払う。同じ形式の多数のストリームが同時に存在するので、各ストリームにはハンドルが指定される。指定されたハンドルは、図書室の本を探すのに図書室の索引が使用されるのと同様に、ストリームが使用する位置を探して登録データベースにデータをロード及び記憶するようにストリームにより使用される。
全ての入力及び出力は、CIOMgrマネージャーを介してファネルに通される。入力及び出力オペレーションのマネージメントは、データをバッファしそしてターゲット位置へ及びそこからデータを搬送するのに使用されるプリミティブを制御することより成る。
CIOHALオブジェクトは、入力/出力ハードウェア抽象レイヤである。このオブジェクト内には、inp及びoutpへのコールのような全てのハードウェア従属コードが存在する。各異なる形式のストリームは、このオブジェクトの異なる実施を含む。
シナリオマップは、マップにより指示されたオペレーション中に各モジュール及びストリームコンポーネント内のオブジェクトが互いにいかに対話するかを示す特殊なオブジェクトインターアクションマップである。図24−32のシナリオマップは、2つの異なるカテゴリー、即ちドライバアドミニストレータ32により開始されるものと、ドライバ30により開始されるものとに分割される。
ドライバアドミニストレータにより指令されるオペレーションは、通常は、ストリームの初期化、非初期化、及び構成に関連している。次のセクションは、ドライバアドミニストレータにより指令されてストリームにおいて行われる全てのオペレーションを示す。
ストリームコンポーネントが誰かに使用される前に、それをウインドウズ登録データベースに登録しなければならない。登録は、ストリームコンポーネントのようなOLE2.0コンポーネントを使用するために必要な標準的なOLE2.0オペレーションである。図24は、このプロセスを示す。登録プロセス中に、次のステップが生じる。
先ず、ドライバアドミニストレータは、ストリームコンポーネントを含むDLLをロードし、モジュールがストリームコンポーネント28であることを照合しなければならない。これを行うために、ドライバアドミニストレータは、ストリームによりエクスポートされたDLLGetModuleTypeファンクションをコールする。戻り値の上位バイトが値XMC_STREAM_MTを含む場合には、ドライバアドミニストレータは、エクスポートされたファンクションDLLRegisterServerをコールするように進んでストリームを登録する。それがコールされたときは、DLLRegisterServerを実施すると、全てのOLE2.0登録情報がウインドウズ登録データベースに書き込まれる。
ストリームコンポーネントが首尾良く登録された後に、初期化の準備が整う。
初期化中に、ストリームコンポーネントは、それ自体を初期化するだけでなく、ドライバをオペレーティングシステムに登録することにより使用されるデバイスドライバも初期化する。例えば、ウインドウズNTストリームコンポーネントはウインドウズNT.SYSドライバをウインドウズNTに登録し、そしてサービスをスタートする。図25は、このプロセスを示す。初期化の間に、次のステップが生じる。
初期化中に、ストリームコンポーネントは、それ自体を初期化するだけでなく、ドライバをオペレーティングシステムに登録することにより使用されるデバイスドライバも初期化する。例えば、ウインドウズNTストリームコンポーネントはウインドウズNT.SYSドライバをウインドウズNTに登録し、そしてサービスをスタートする。図25は、このプロセスを示す。初期化の間に、次のステップが生じる。
先ず、ドライバアドミニストレータは、ストリームにそれ自体を初期化するよう指令しなければならない。このコールを行うときに、使用するドライバの名前及び位置と、ストリームのハンドルがアーギュメントとして方法に通される。ストリームコンポーネントは、それ自体を初期化するよう指令されると、CStreamDispをコールし、そしてそれにシステムを初期化するよう指令する。
CStreamDispオブジェクトは、次いで、CRegistryMgrにそれに通されたハンドルを使用してストリームの全ての当該データをロードするように指令する。CRegistryMgrは、登録データベースから全てのデータをロードする。全ての情報がレジストリからロードされると、CStreamDispは、CIOMgrに適当なドライバをオペレーティングシステムに登録するよう指令する。CIOMgrは、CIOHALにドライバを適宜登録するよう指令する。ウインドウズNTで動作する場合には、CIOHALは、.SYSドライバをウインドウズNTオペレーティングシステムに登録し、そしてドライバをスタートさせる。ウインドウズ95で動作する場合には、VxD完全性が迅速なダイナミックなロード及びアンロードで照合される。
ストリームコンポーネントを初期化した後に、現在設定について問い合わせされるか又は新たな設定をセットするよう指令される。両オペレーションは非常に類似しているので、設定の変更のみを説明する。ストリーム設定は、ポートアドレス、IRQレベル、ファイルネーム等のデータを含む。出力/入力ターゲットと通信する必要のあるデータは、ストリーム設定に含まれる。図26は、ストリーム設定を変更するプロセスを示す。設定プロセス中に、次のようなステップが生じる。
先ず、ドライバアドミニストレータは、ストリームに、その内部データを変更するために通したデータを使用するように指令する。指令を受けると、ストリームコンポーネントは、インターフェイス方法の呼び出しをCStreamDispオブジェクトへ通す。CStreamDispオブジェクトは、次いで、CRegistryMgrに、新たな設定を記憶するように指令する。CRegistryMgrは、新たな値を登録データベースに記憶する。
ドライバアドミニストレータは、ストリームコンポーネントを用いてこれを行うときに、使用するリソースをクリーンアップしなければならない。図27は、このプロセスを示す。クリーンアッププロセス中に、次のステップが生じる。先ず、ドライバアドミニストレータは、ストリームコンポーネントに、その解除方法をコールすることによりそれ自身をクリーンアップするよう指令する。これが呼び出されると、ストリームコンポーネントは、CStreamDispオブジェクトにコールを通す。CStreamDispオブジェクトは、次いで、CRegistryMgrに全てのデータをセーブするよう指令する。全ての永続的データがCRegistryMgrにより登録データベースにセーブされる。
各ドライバ30がそれに接続されたストリームコンポーネント28を使用するときにドライバ指令オペレーションが発生する。各ストリームコンポーネントはデータ搬送レイヤとして使用されることを想起されたい。各ドライバは、ストリームを使用して、それが発生するモーションコントロールコマンドデータを出力ターゲットに転送する。又、ストリームは、読み取りオペレーションが生じるときにデータをドライバへ返送するのにも使用される。幾つかのストリームしか読み取ることができない。
ドライバがストリームにおいてオペレーションを実行する前に、ストリームが初期化されねばならない。初期化は、2つのステップで生じる。先ず、OLEストリームコンポーネントがロードされねばならず、次いで、それが行われると、ストリームが明確に初期化されねばならない。図28は、初期化プロセスの第2部分を示す。初期化プロセス中に次のステップが生じる。
先ず、ドライバは、ストリームインターフェイスの1つによりエクスポートされた初期化方法を呼び出す。初期化を呼び出すときには、ドライバは、ストリームハンドルをストリームに通す。次いで、ストリームは、ディスパッチのための指令をCStreamDispオブジェクトへ通す。CStreamDispオブジェクトは、先ず、CRegistryMgrに、ストリームハンドルにより定義された位置に記憶された全ての設定をロードするように指令する。CRegistryMgrは、ハンドルにおいてレジストリに記憶されたデータを読み込む。データがロードされた後に、CStreamDispはCIOMgrにそれ自身を初期化するよう指令する。初期化の一部分として、CIOMgrは、それが使用しているCIOHALオブジェクトを初期化する。
ストリームが初期化されると、それがオープンされねばならない。ストリームをオープンすると、ストリームは、ドライバとターゲットとの間にデータを通せる状態に入れられる。図29は、ストリームをオープンするプロセスを示す。ストリームをオープンするときに、次のステップが生じる。
先ず、ドライバは、オープンエクスポーズドインターフェイス方法をコールすることによりストリームにそれ自体オープンするよう指令する。指令されると、ストリームは、コールをCStreamDispオブジェクトへ通す。次いで、CStreamDispオブジェクトは、CIOMgrにストリームをオープンするように指令する。このとき、CIOMgrは、ストリームを通してデータを転送するときに後で使用されるバッファを準備する。バッファが準備された後、CIOMgrは、CIOHALオブジェクトにターゲットと対話するように指令し、それをオープンする。CIOHALは、ターゲット又はデバイスドライバと直接通信し、ストリームをオープンする。ハードウェアストリームでオープンするときには、デバイスドライバ又はシリアルIOがハードウェアと直接通信し、そして動作の準備をする。
ストリームをオープンした後に、データ搬送オペレーションを実行する準備ができる。2つの主たるデータ搬送オペレーション、即ちデータ読み取り及びデータ書き込みが使用できる。図30は、ストリームにデータを書き込むプロセスを示す。ストリームに書き込むときには、次のステップが生じる。先ず、ドライバは、ターゲットにデータを書き込むようにストリームに指令し、そしてデータをストリームへ通す。次いで、ストリームは、データをCStreamDispオブジェクトへ通す。CStreamDispオブジェクトは、データのブロックをCIOMgrへ通し、それをターゲットに書き込むように指令する。CIOMgrオブジェクトは、データの完全なブロックをCIOHALオブジェクトへ通すか又はブロックを内部バッファに記憶し、次いで、完全なバッファが送られるまでCIOHALオブジェクトへバッファの断片を通す。CIOHALオブジェクトは、これに通されたデータを取り上げ、それをターゲットに直接通すか、デバイスドライバへ通すか、又はCOMM APIをコールし、データをシリアルIOポートへ送信する。デバイスドライバ又はCOMM APIは、コントロールされるハードウェアにデータを直接通す。
PCバス及びシリアルIOストリームのようなあるストリームは、それらに対して書き込み動作が生じた後にデータを返送する。返送されたデータは、データの以前の要求、或いは以前の書き込み動作の成功又は不成功を記述する状態に対して特有のものである。図31は、ストリームからデータを読み取るプロセスを示す。全てのストリームを読み取りできるのではないことに注意されたい。現在のところ、読み取り可能なストリームは、PCバス及びシリアルストリームだけである。ターゲットからのデータを読み取る動作中に、次のステップが生じる。
先ず、ドライバは、ストリームにターゲットからデータを読み取るように指令する。ストリームは、CStreamDispオブジェクトへコールを通す。CStreamDispオブジェクトは、CIOMgrに読み取りを実行するよう指令する。ストリームをいかに実行するかに基づいて、CIOMgrは、CIOHALオブジェクトへの1つのコール又は多数のコールを行うことができる。多数のコールが行われる場合には、読み取られた全てのデータがCIOMgr内部バッファに記憶される。CIOHALオブジェクトは、ハードウェアと直接通信するか、COMM API又はデバイスドライバを用いてデータを読み取る。デバイスドライバ又はCOMM APIが使用される場合には、それらがハードウェアと直接通信して、データを読み取る。
ストリームを用いてドライバが実行されると、使用された全てのリソースをクリーンアップするようにストリームに指令しなければならない。これを行うために、ドライバは、標準的な解除方法をコールする。図32は、解除方法がコールされた後に行われる事象シーケンスを示す。ストリームにより使用された全てのリソースをクリーンアップしそして解放するときには、次のステップが生じる。
先ず、ドライバは、ストリームの解除方法をコールしなければならない。次いで、ストリームは、使用された全てのリソースを解除するようにCStreamDispオブジェクトに指令する。次いで、CStreamDispオブジェクトは、バッファ等に使用されたいかなるリソースも解放するようにCIOMgrに指令する。次いで、CIOMgrは、使用されたいかなるリソースも解放するようにCIOHALに指令する。そのクリーンアップ中に、ストリームの形式に基づいて、CIOHALは、使用されたテキストファイルを削除し、デバッグモニタをクローズし、ハードウェアを遮断し、又はデバイスドライバにハードウェアを遮断するように指令する。デバイスドライバ又はCOMM APIが使用される場合には、それらがハードウェアに遮断するよう指令する。
図33は、ストリーム28のインターフェイスマップを示す。
V.ドライバスタブモジュール
ドライバスタブモジュール36は、ドライバ30がサポート又は実施できない拡張ドライバファンクションを満足するために使用される。拡張SPIをシュミレーションすることにより、アプリケーションは、それがモーションコントロールハードウェアに直接プログラムされた場合に使用できる以上の大きな1組のモーションコントロール機能を使用することができる。拡張SPIを実施するために、ドライバスタブは、ドライバ30により実施されるコアSPIインターフェイス方法をコールするソフトウェアアルゴリズムを使用する。ドライバスタブの初期化中に、使用すべきドライバ30がドライバスタブに登録される。
ドライバスタブモジュール36は、ドライバ30がサポート又は実施できない拡張ドライバファンクションを満足するために使用される。拡張SPIをシュミレーションすることにより、アプリケーションは、それがモーションコントロールハードウェアに直接プログラムされた場合に使用できる以上の大きな1組のモーションコントロール機能を使用することができる。拡張SPIを実施するために、ドライバスタブは、ドライバ30により実施されるコアSPIインターフェイス方法をコールするソフトウェアアルゴリズムを使用する。ドライバスタブの初期化中に、使用すべきドライバ30がドライバスタブに登録される。
このセクションは、ドライバスタブ36の全ての観点を3つの基本的な部分において説明する。このセクションの第1の部分は、ドライバスタブに作用する全ての2進モジュールについて述べる。次いで、ドライバスタブの内部に使用される全てのC++オブジェクトを含む詳細な図について説明する。次いで、ドライバスタブにおいて行われる多数のプロセスについて説明する。
モジュールインターアクションマップは、全ての2進モジュール、及びそれらとドライバスタブ36とのインターアクションを示す。図34から明らかなように、ドライバスタブは、コンポーネント35により使用される。ドライバスタブは、考えられる全ての拡張ドライバ機能を満たすことによりコンポーネント35のヘルパーとしての作用も若干果たす。
図34のモジュールインターアクションマップを取り上げ、そしてドライバスタブを実施する全てのC++オブジェクトで行われる全てのインターアクションを表示することにより、オブジェクトインターアクションマップと称するものが形成される。図35は、ドライバスタブ36のコンポーネントに対するオブジェクトインターフェイスマップである。
図の各オブジェクトについて以下に説明する。
CDriverStubDispオブジェクトは、エクスポーズされたインターフェイス方法をディスパッチするのに使用されるディスパッチオブジェクトである。ディスパッチプロセスの間に、全ての生のデータが適当なC++形態に変換される。例えば、OLEコンポーネント間に通されるデータの集合は、通常、生のメモリブロックにパッケージされる。CDriverStubDispオブジェクトは、出て行くデータをパッキングしそして到来するデータをアンパッキングするよう注意を払う。データのパッキングは、生及びネーティブなC++フォーマット間でデータを変換することを含む。
CDriverStubDispオブジェクトは、エクスポーズされたインターフェイス方法をディスパッチするのに使用されるディスパッチオブジェクトである。ディスパッチプロセスの間に、全ての生のデータが適当なC++形態に変換される。例えば、OLEコンポーネント間に通されるデータの集合は、通常、生のメモリブロックにパッケージされる。CDriverStubDispオブジェクトは、出て行くデータをパッキングしそして到来するデータをアンパッキングするよう注意を払う。データのパッキングは、生及びネーティブなC++フォーマット間でデータを変換することを含む。
CSPMgrオブジェクトは、全てのSPIイッシューをマネージする役目を果たし、例えば、ドライバによりエクスポーズされる適当なSPIコアインターフェイスへ接続するよう指令することによりCSimpleDriverをマネージする。
CSimpleDriverオブジェクトは、SPIコアインターフェイスを実施するドライバと直接通信するのに使用される。CSimpleDriverは、ドライバにより実施されるコアSPIインターフェイスのみと通信する。以下の説明は、ドライバスタブ36に生じる全ての主たるシナリオ又はオペレーションについて述べる。各シナリオマップは、含まれる全てのオブジェクトを示すと共に、それらが発生するシーケンスでそれらの間に生じるインターアクションを示す。ドライバスタブにおける全てにオペレーションは、モーションコントロールコンポーネント35から発生する。モーションコントロールコンポーネント35に加えて、XMCセットアップコンポーネントは、システム22をインストールするときにドライバスタブと対話する。以下の全てのシナリオは、ドライバスタブ36がOLEシステムに既に登録されていると仮定することに注意されたい。このコンポーネントの登録は、セットアップアプリケーション及びセットアップコンポーネントの役割である。
この説明は、モーションコントロールコンポーネント35によりドライバスタブにおいて行われる全てのオペレーションについて述べる。各セクションは、ドライバを使用するときにそれらが生じる順序で説明される。
図36に示すように、ドライバスタブ36を使用する前に、モーションコントロールコンポーネント35は、ドライバスタブのインスタンスを形成し、そしてその形成されたインスタンスを初期化することにより、ドライバスタブを初期化しなければならない。標準的なOLEファンクションCoCreateInstanceをコールすると、第1ステップが完了する。インスタンスが形成された後に、コンポーネント35は、ドライバスタブエクスポーズド初期化インターフェイス方法をコールしなければならない。初期化中に、次のステップが生じる。
コンポーネントは、標準的なOLEファンクションCoCreateInstanceをコールすることによりドライバスタブのインスタンスを形成する。ロードされると、使用すべきドライバのCLSIDは、初期化エクスポーズドインターフェイス方法をコールするときにドライバスタブへ通される。最初にロードされるときに、ドライバは、既に記憶された登録データをロードする。次いで、コンポーネント35は、使用すべきドライバのCLSIDをCDriverStubDispオブジェクトへ通し、そしてシステムを初期化するようそれに指令する。CDriverStubDispオブジェクトは、次いで、CSPIMgrにそれ自身を初期化するように指令し、そしてドライバCLSIDをそこに通す。CSPIMgrは、CLSIDをCSimpleDriverへ通し、そしてドライバによりエクスポーズされたコアSPIインターフェイスのみに問い合わせするようそれに指令する。CSimpleDriverは、ドライバのインスタンスをロードし、次いで、ドライバによりエクスポーズされた全てのコアインターフェイスに問い合わせする。
ドライバスタブが初期化されると、拡張ドライバファンクションを実行するようなオペレーションを実行する準備ができる。図37は、コンポーネント35がドライバスタブに拡張SPIオペレーションを実行するよう指令するときに生じるステップを示す。オペレーションが要求されたときには、次のステップが生じる。
先ず、コンポーネント35は、オペレーションを要求し、全ての関連パラメータをドライバスタブへ通す。次いで、ドライバスタブは、CDriverStubDispにオペレーションを処理するように指令する。CDriverStubDispは、次いで、CSPIMgrにSPI拡張ファンクションを実行するよう指令し、そして適当なXMC_EXT_SPI識別子をパラメータとして通す。CSPIMgrは、XMC_EXT_SPI識別子に対応する適当なファンクションをコールする。このファンクションは、拡張ドライバファンクションをシュミレーションし、そしてコアオペレーションに対してCSimpleDriverをコールする。指令されたときに、CSimpleDriverは、ドライバにより実施されるエクスポーズドファンクションを直接コールすることによりSPIコアファンクションを実行する。
モーションコントロールコンポーネント35は、ドライバスタブ36を用いて終了されたときに、エクスポーズド解除方法をコールすることによりそれを解除しなければならない。解除方法をコールすると、ドライバスタブは、それが使用する全てのリソースを解放する。図38は、この事象シーケンスを示す。クリーンアッププロセス中に、次のステップが生じる。
先ず、コンポーネント35は、その解除方法をコールすることにより全てのリソースを解除するようにドライバスタブに指令しなければならない。呼び出し時に、ドライバコンポーネントは、CDriverStubDispオブジェクトへコールを通す。次いで、CDriverStubDispオブジェクトは、CSPIMgrに、それが使用したいかなるリソースも解除するように指令する。
CSPIMgrは、使用されたCSimplerDriverオブジェクトを含む全てのリソースを解除する。解放されると、CSimplerDriverは使用されたいかなるインターフェイスもドライバから解除する。
図39は、ドライバスタブモジュール36のインターフェイスマップを示す。
VI.ドライバアドミニストレータモジュール
ドライバアドミニストレータ32は、2つの異なる観点から使用される。ドライバアドミニストレータコントロールパネルアプレット38を用いてシステムを構成するときには、アプレットがドライバアドミニストレータ32にオペレーションを実行するように指令する。アプレット38は、単にユーザインターフェイスを与え、そしてコンポーネント35は、システム22と共に使用されるドライバ及びストリームをマネージするという実際の動作を行う。ドライバアドミニストレータコンポーネントをコントロールパネルアプレットと共に使用することはコンポーネント35を使用する第1の観点である。
ドライバアドミニストレータ32は、2つの異なる観点から使用される。ドライバアドミニストレータコントロールパネルアプレット38を用いてシステムを構成するときには、アプレットがドライバアドミニストレータ32にオペレーションを実行するように指令する。アプレット38は、単にユーザインターフェイスを与え、そしてコンポーネント35は、システム22と共に使用されるドライバ及びストリームをマネージするという実際の動作を行う。ドライバアドミニストレータコンポーネントをコントロールパネルアプレットと共に使用することはコンポーネント35を使用する第1の観点である。
第2の観点において、モニタコントロールコンポーネント35は、ドライバアドミニストレータコンポーネントを使用して、現在の1組のイネーブルされたドライバ30に問合せを行う。現在のところ、単一のドライバ動作しか許されないことに注意されたい。明らかに、システム22は、仮想化された多数のドライバをサポートすることができる。例えば、2つの4軸ドライバがインストールされる場合に、システムを使用するアプリケーションは、あたかもそれらが8軸システムを使用するかのように動作することができる。
このセクションは、ドライバアドミニストレータ32を3つの主たる部分において説明する。先ず、ドライバアドミニストレータコンポーネントと対話する全てのモジュールは、それらのインターアクションと共に説明する。次いで、モジュールインターアクションマップは、ドライバアドミニストレータ32のコンポーネントを実施するのに使用されるC++オブジェクト間で行われる全てのインターアクションを表示するように拡張される。この説明は、オブジェクトインターアクションマップと称する。次いで、オブジェクトインターアクションマップは、多数のシナリオ又はシナリオマップを通して実行することによりテストされる。各シナリオマップは、事象と、ドライバアドミニストレータコンポーネントにおいて行われるあるプロセスにおいてそれらが生じる順序とを表示する。
図40に示すモジュールインターアクションマップは、全ての2進モジュールと、それらとドライバアドミニストレータ32のコンポーネントとのインターアクションを表示する。ドライバアドミニストレータCPL38及びモーションコントロールコンポーネント35の両方は、ドライバアドミニストレータ32のコンポーネントと対話する主モジュールである。
ドライバアドミニストレータCPLモジュール38は、ユーザがドライバ及びストリームをシステム22に追加、構成及び除去できるようにするユーザインターフェイスを与える。ドライバアドミニストレータ32は、全てのドライバ及びストリームのマネージメントを処理する。たとえコントロールパネルアプレットがユーザインターフェイスを与えても、このモジュール32は、実際のマネージメント動作を行う。
更に、ドライバアドミニストレータは、モーションコントロールオペレーションを実行するときに使用すべき現在ドライバをアクセスするようにコンポーネント35により使用される。例えば、コンポーネント35がドライバアドミニストレータに問い合わせするときにAT6400ドライバが現在ドライバとして選択された場合には、ドライバアドミニストレータは、AT6400ドライバのCLSIDを返送する。
モジュールインターアクションマップに表示されるドライバアドミニストレータ32を取り上げ、そしてアドミニストレータ34を実施するために使用されるC++オブジェクト間に生じる全てのインターアクションを表示すると、そのオブジェクトインターアクションマップが形成される。ドライバアドミニストレータ32のオブジェクトインターアクションマップが図41に示されている。
図の各オブジェクトを以下に説明する。
CDriverAdminDispオブジェクトは、エクスポーズされたインターフェイス方法をディスパッチするのに使用されるディスパッチオブジェクトである。ディスパッチプロセス中に、全ての生データが適当なC++形態に変換される。例えば、OLEコンポーネント間に通されるデータの集合は、通常は、生のメモリブロックにパッケージされる。CDriverAdminDispオブジェクトは、出て行くデータをパッキングし、そして到来するデータをアンパッキングするように注意を払う。データのパッキングは、生及びネーティブなC++フォーマット間でデータを変換することを含む。
CDriverAdminDispオブジェクトは、エクスポーズされたインターフェイス方法をディスパッチするのに使用されるディスパッチオブジェクトである。ディスパッチプロセス中に、全ての生データが適当なC++形態に変換される。例えば、OLEコンポーネント間に通されるデータの集合は、通常は、生のメモリブロックにパッケージされる。CDriverAdminDispオブジェクトは、出て行くデータをパッキングし、そして到来するデータをアンパッキングするように注意を払う。データのパッキングは、生及びネーティブなC++フォーマット間でデータを変換することを含む。
CdriverInfoMapオブジェクトは、各ドライバ又はストリームに関する情報を表示するときにドライバアドミニストレータCPL38により使用される情報を構成するのに使用される。
CModuleMgrオブジェクトは、システムの全てのストリーム及びドライバモジュールをマネージする役目を果たす。登録された全てのドライバのリストは、CModuleMgrにより登録データベースに永続的に記憶される。ドライバ又はストリームがアクセスされるたびに、CModuleMgrを用いてモジュールが得られる。
CSimpleDriverオブジェクトは、ドライバコンポーネントと直接通信するのに使用される。全てのOLE特有の細部は、このオブジェクト内にカプセル化される。
CSimpleStreamオブジェクトは、ストリームコンポーネントと直接通信するのに使用される。全てのOLE特有の細部は、このオブジェクト内にカプセル化される。
CModuleMgrオブジェクトは、システムの全てのストリーム及びドライバモジュールをマネージする役目を果たす。登録された全てのドライバのリストは、CModuleMgrにより登録データベースに永続的に記憶される。ドライバ又はストリームがアクセスされるたびに、CModuleMgrを用いてモジュールが得られる。
CSimpleDriverオブジェクトは、ドライバコンポーネントと直接通信するのに使用される。全てのOLE特有の細部は、このオブジェクト内にカプセル化される。
CSimpleStreamオブジェクトは、ストリームコンポーネントと直接通信するのに使用される。全てのOLE特有の細部は、このオブジェクト内にカプセル化される。
図42−49は、ドライバアドミニストレータ32に生じる全ての主たるシナリオ又はオペレーションを示す。各シナリオマップは、含まれる全てのオブジェクト、及びそれらが生じるシーケンスでそれらの間に行われるインターアクションを表示する。
図42を参照すれば、ドライバアドミニストレータコンポーネントを使用する前に、それを初期化しなければならない。図42は、ドライバアドミニストレータコントロールパネルアプレット又はモーションコントロールコンポーネントのいずれかからドライバアドミニストレータコンポーネントを初期化するプロセスを示す。初期化の間に、次のステップが生じる。
先ず、コントロールパネルアプレット又はモーションコントロールコンポーネントは、標準的なOLEファンクションCoCreateInstanceをコールすることによりドライバアドミニストレータコンポーネントのインスタンスを形成しなければならない。次いで、エクスポーズされた初期化インターフェイス方法をコールしなければならない。初期化方法がコールされると、ドライバアドミニストレータコンポーネントは、CDriverAdminDispにシステムを初期化するように指令する。次いで、CDriverAdminDispは、CModuleMgrに、それ自身と、それがマネージするモジュールとを初期化するように指令する。CModuleMgrは、先ず、登録データベースから全ての情報をロードする。登録された各ドライバに対し、CModuleMgrは、標準的なOLEファンクションCoCreateInstancをコールすることによりドライバのインスタンスを形成する。次いで、CModuleMgrは、各ドライバ初期化方法をコールし、取り付けるべきドライバコンポーネントのCLSIDをその方法に通す。CSimpleDriverは、標準的なOLEファンクションCoCreateInstanceをコールすることによりドライバコンポーネントに取り付ける。
ドライバアドミニストレータ32は、ドライバ及びストリームの両方を登録することができる。ドライバの登録は非常に直接的である。というのは、ドライバアドミニストレータは、システムに登録されたドライバをマネージするからである。一方、ストリームの登録は、もっと複雑である。というのは、各ストリームはドライバに登録されねばならず、そしてドライバアドミニストレータではなくドライバがそれに登録されたストリームをマネージしなければならないからである。以下の説明は、ドライバ及びストリームの両方を登録するプロセスを示す。
ドライバの登録は、モジュールが実際にはドライバであることを照合し、ドライバをロードできることを照合し、そしてドライバ情報を永続的な位置に記憶することを伴う。図43は、このプロセスを示す。ドライバを登録するときには、次のステップが生じる。
先ず、ドライバアドミニストレータCPLは、ドライバの名前を通し、ドライバアドミニストレータコンポーネントにそれを登録するよう指令する。次いで、ドライバアドミニストレータコンポーネントは、ドライバ名をCDriverAdminDispへ通し、そしてモジュールを登録するようそれに指令する。CDriverAdminDispは、CModuleMgrに新たなドライバを登録するよう指令する。CModuleMgrは、新たなCSimpleDriverを形成し、そしてドライバを登録するようそれに要求する。先ず、CSimpleDriverは、そのDLLGetModuleTypeエクスポーテッドファンクションをコールすることによりドライバが有効であるかどうか照合する。ファンクションがXMC_DRIVER_MTを返送する場合には、CSimpleDriverは、次いで、ドライバのエクスポーテッドファンクションDLLRegisterServerをコールし、モジュールをOLEシステムに登録する。次いで、エクスポーテッドDLLGetCLSIDファンクションをコールすることによりCLSIDがモジュールから問い合わされる。返送されたCLSIDは、次いで、標準的なOLEファンクションCoCreateInstanceをコールすることによりドライバをロードするのに使用される。CSimpleDriverが成功した場合には、CModuleMgrは、ドライバCLSIDを登録データベースに記憶する。
ストリームの登録は、ドライバの登録と類似しているが、各ストリームが特定のドライバに登録されねばならないので、若干複雑である。図44は、ストリームを登録するプロセスを示す。ストリームを登録するときには、次のステップが生じる。
先ず、ドライバアドミニストレータCPLは、ドライバのCLSID及びドライバに登録するためのストリームのファイル名をドライバアドミニストレータコンポーネントへ通す。ドライバアドミニストレータコンポーネントは、CDriverAdminDispにシステムを登録するよう指令する。CDriverAdminDispオブジェクトは、CModuleMgrにストリームを登録するよう指令し、そしてドライバのCLSID及びストリームの名称をそれに通す。先ず、CModuleMgrは、ドライバのCLSIDが登録されたドライバの1つであることを照合する。もしそうでなければ、ドライバは、上記のように登録される。
次いで、CModuleMgrは、新たなCSimpleStreamオブジェクトを形成し、そしてそれにストリームコンポーネントを照合しロードするよう指令する。CSimpleStreamは、先ず、エクスポートされたDLLGetModuleTypeファンクションをコールすることによりモジュールが実際にはストリームコンポーネント28であることを照合する。ファンクションがXMC_STREAM_MTを返送する場合には、CSimpleStreamが続き、そのエクスポートされたファンクションDLLRegisterServerをコールすることによりストリームコンポーネントを登録する。最後に、CSimpleStreamオブジェクトは、モジュールのエクスポートされたファンクションDLLGetCLSIDをコールすることによりCLSIDに対して新たなモジュールに問い合わせる。新たなCLSIDは、CSimpleStreamにより、標準的なOLEファンクションCoCreateInstanceを用いてストリームコンポーネントをロードするように使用される。
CSimpleStreamが成功すると、ストリームのCLSIDは、CSimpleDriverへ通され、これは、ストリームを登録するように指令される。CSimpleDriverは、CLSIDをドライバコンポーネントへ通し、そしてシステムを登録するようそれに指令する。
以下の説明は、ドライバ又はストリームのいずれかにおける設定情報について述べる。ユーザがドライバアドミニストレータコントロールパネルアプレット38において情報を編集するときには、アプレット38が、編集されるストリーム又はドライバに対して設定を編集するようにドライバアドミニストレータ32に指令する。次の説明は、この構成プロセスがいかに機能するかを示す。
ドライバの設定の編集は、ドライブアドミニストレータCPLに表示されたドライバの設定をユーザが変更するときに行われる。これらの設定を変更すると、図45に示すプロセスがドライバアドミニストレータコンポーネント内に生じるようにされる。次のステップは、ドライバ構成を設定するときに生じる。
CPL38においてドライバ設定が変更されるときには、ドライバアドミニストレータCPLは、ドライバハンドルに対応するドライバへの適当な変更を行うようにドライバアドミニストレータコンポーネントに指令する。ドライバの新たな値を示すXMC_DRIVER_INFO構造体がコンポーネント35へ通される。ドライバアドミニストレータコンポーネントは、XMC_DRIVER_INFO構造体及びドライバへのハンドルを取り上げ、ドライバの設定を変更するよう指示する情報をCDriverAdminDispオブジェクトへ通す。
CDriverAdminDispオブジェクトは、ドライバハンドルに対応するドライバを編集するようにCModuleMgrに指令する。CModuleMgrは、ハンドルでCSimpleDriverを位置決めし、そしてその設定をXMC_DRIVER_INFO構造体に記憶されたものへと変更するようそれに指令する。CSimpleDriverは、XMC_DRIVER_INFO構造体をドライバコンポーネントへ通し、そしてその設定を変更するように指令する。
図46に示すように、ユーザがドライバアドミニストレータCPL38のストリーム設定を編集するときには、次のステップが生じる。
ユーザがCPLのストリームの設定を変更した後に、ドライバアドミニストレータCPLは、ドライバアドミニストレータコンポーネントに、ストリームの設定を変更し、そしてストリームを含むドライバへのハンドル、ストリームへのハンドル、及び新たな値を示すXMC_STREAM_INFO構造体を通すように指令する。ドライバアドミニストレータコンポーネントは、CDriverAdminDispオブジェクトにストリームの設定を変更するように指令する。
CDriverAdminDispオブジェクトは、CModuleMgrにハンドルに対応するストリームの設定を変更するように指令する。
先ず、CModuleMgrは、ドライバハンドルに対応するドライバを探索する。次いで、ストリームハンドルに対応するストリームの設定を変更するようにCSimpleDriverに要求する。CSimpleDriverは、ストリームハンドルに対応するストリームをサーチし、そしてその設定を、XMC_STREAM_INFO構造体に記憶されたものへと変更するよう指令する。
CSimpleStreamは、ストリームコンポーネントと直接通信し、そしてその設定を、XMC_STREAM_INFO構造体に記憶されたものへと変更するよう指令する。
ドライバアドミニストレータ32から問い合わせることのできる2つの異なる形式の情報、即ち登録された全てのドライバの列挙、及びドライバ情報マップがある。モーションコントロールコンポーネント35は、モーションコントロールオペレーション中に使用及び制御すべきドライバのセットを選択するときにドライバ列挙を使用する。一方、ドライバ情報マップは、ドライバアドミニストレータCPL38により、システムに登録された全てのドライバ及びストリームを示すユーザインターフェイス表示を更新するのに使用される。次の説明は、ドライバ列挙及びドライバ情報マップの両方を問い合わせるプロセスを示す。ドライバ列挙の問合せは、モーションコントロールコンポーネントの初期化中に生じる。
初期化時に、コンポーネント35は、モーションコントロールオペレーションを実行するときにどんなドライバを使用すべきか知らねばならない。ドライバアドミニストレータ32のコンポーネントは、その目的に使用される。ドライバ列挙を問い合わせる、ドライバアドミニストレータ32のコンポーネントによりエクスポーズされたIXMC_EnumDriverインターフェイスのポインタが返送されるだけである。図47は、列挙における各ドライバを得るためにインターフェイスを使用するときに発生する事象を示す。インターフェイスを使用すると、次のステップが生じる。
先ず、モーションコントロールコンポーネント35は、次のドライバに対してドライバアドミニストレータ32のコンポーネントに問い合わせする。次いで、ドライバアドミニストレータ32のコンポーネントは、サポートされた次のドライバを得るようにCDiverAdminDispに指令する。CDiverAdminDispは、次のドライバを得るようにCModuleMgrに指令する。次いで、CModuleMgrは、列挙のパラメータに基づいて、CLSID、又はドライバのIUnknownインターフェイスのポインタを返送するようにCSimpleDriverに指令する。CSimpleDriverがIUnknownインターフェイスのポインタを返送するように要求された場合には、インターフェイスがドライバコンポーネントから問い合わされる。
ドライバアドミニストレータ32から問い合わされる別の組の情報は、ドライな情報マップより成る。このデータは、システムに登録されたドライバ及びストリームを示す情報を表示するときにドライバアドミニストレータCPL38により使用される。図48に示すように、ドライバインターフェイスマップについてシステムに問い合わせするときは、次のステップが生じる。
先ず、ドライバアドミニストレータCPL38は、現在ドライバ情報マップについてドライバアドミニストレータ32に問い合わせる。問い合わせ時に、ドライバアドミニストレータコンポーネントは、CDriverInfoMapクラスを形成してロードするようにCdriverAdminDispに指令する。
CdriverAdminDispは、CDriverInfoMapを形成する。次いで、CdriverAdminDispは、CDriverInfoMapをCModuleMgrへ通し、そして情報マップをロードするようそれに指令する。CModuleMgrは、その内部情報に対して登録された各ドライバに問い合わせする。各CSimpleDriverは、ドライバコンポーネントと直接通信し、全ての関連ドライバ情報についてそれに問い合わせする。次いで、CModuleMgrは、ドライバに登録された全てのストリームのリストに対して各ドライバに問い合わせする。ストリーム列挙を使用し、各CSimpleDriverは、CSimpleStreamオブジェクトのアレーを形成し、そしてそのアレーをCModuleMgrへ返送する。各アレーの各CSimpleStreamオブジェクトに対し、CModuleMgrは、全ての関連ストリーム情報について問い合わせする。各CSimpleStreamは、ストリームコンポーネントと直接通信し、そしてそのストリームを記述する全ての情報に対しそれに問い合わせする。
ドライバアドミニストレータCPL38又はモーションコントロールコンポーネント35がドライバアドミニストレータ32を用いて終了されると、使用したリソースを解放するためにコンポーネント35を解除しなければならない。図49は、このプロセスを示す。解除方法をコールした後にクリーンアップするときに、次のステップが生じる。
先ず、ドライバアドミニストレータCPL38又はモーションコントロールコンポーネント35は、ドライバアドミニストレータ32のコンポーネントに、その解除方法をコールすることによりそれ自身を解除するよう指令しなければならない。次いで、ドライバアドミニストレータコンポーネントは、システムに使用された全てのリソースを解放するようにCDriverAdminDispオブジェクトに指令する。CDriverAdminDispは、次いで、CModuleMgrに、それが使用するリソースを解放するように指令する。先ず、CModuleMgrは、CLSID及びイネーブル状態について各々問い合わせする全てのCSimpleDriverオブジェクトを通してトレースする。次いで、各CSimpleDriverが解放される。解放された各CSimpleDriverオブジェクトは、それに登録されたCSimpleStreamオブジェクトの全てのアレーを解放する。解放されると、各CSimpleStreamオブジェクトは、それが使用した全てのオブジェクトをストリームコンポーネントから解除する。その最終的なクリーンアップにおいて、各CSimpleDriverは、それが使用する全てのインターフェイスをドライバコンポーネントから解除する。全てのCLSID及びイネーブル状態情報は、登録データベースに永続的に記憶される。
図50は、ドライバアドミニストレータ32のためのインターフェイスマップを示す。
VII.ドライバアドミニストレータCPLアプレット
このセクションは、モーションコントロールオペレーションを実行するように指令されたときにコンポーネント35により後で使用されるドライバ30及びストリームコンポーネント28の両方を追加、構成及び除去するようにユーザによって使用されるドライバアドミニストレータコントロールパネルアプレット38(CPL)の設計について説明する。設計については、コントロールパネルアプレットがいかに機能するかを見るために使用される3つの主たる形式の「図」がある。
このセクションは、モーションコントロールオペレーションを実行するように指令されたときにコンポーネント35により後で使用されるドライバ30及びストリームコンポーネント28の両方を追加、構成及び除去するようにユーザによって使用されるドライバアドミニストレータコントロールパネルアプレット38(CPL)の設計について説明する。設計については、コントロールパネルアプレットがいかに機能するかを見るために使用される3つの主たる形式の「図」がある。
先ず、図51に示されたモジュールインターアクションマップは、CPLが使用しそして対話する全ての主たる実行可能な且つユーザ対話可能なアイテム即ちモジュールを示す。例えば、CPL実行可能によりダイアログが表示されるときには、ダイアログ及びCPLモジュールの両方が互いに対話すると考えられる。技術的には、ダイアログは、スクリーン上に表示される架空のものであるから、モジュールではないが、それでも、モジュールインターアクションマップは、それらがユーザ入力のための重要な行先点であるから、それらをこのように分類する。
第2に、図52に示すオブジェクトインターアクションマップは、モジュールインターアクションマップに示されるモジュールを作り上げる全ての主たるオブジェクトを示す。これらオブジェクトは、各オブジェクトを定義するC++クラスの実際のインスタンスより成る。オブジェクト間の全てのインターアクションは、このインターアクションマップに描かれる。
更に、図53−57は、オブジェクトインターアクションマップを基礎として用いて描かれた1組のシナリオマップを示す。シナリオインターアクションマップは、特定のオペレーション中に行われるインターアクションを示す。初期化、システムへのドライバの追加、及びドライバによって与えられるサポートの調査は、全て、シナリオインターアクションマップの例である。
ドライバアドミニストレータ32の設計目標は、次の通りである。
1.ユーザインターフェイスの分離 − ドライバアドミニストレータ32のコンポーネントをコントロールするのに使用される全てのユーザインターフェイスエレメントを実施する。
2.OCXクライエントへアップグレードできる − 最終的に、各ドライバ及びストリームは、全ての入力をそれに対応するドライバ又はストリームへ通すOCXを伴う全てのUIエレメントを実施することができる。ドライバアドミニストレータCPL38は、OCXクライエントになるように容易にアップグレードできる方法で設計されねばならない。
3.ストリームの独立性を与える − ドライバ30は、動作するためにストリーム28の使用を要求されてはならない。ドライバアドミニストレータ32の設計は、動作のためにストリームコンポーネント28に依存しないよう確保するように変更しなければならない。
4.ウインドウズ95UIの使用 − 可能であれば、ウインドウズ95UIエレメントを使用しなければならない。例えば、ウインドウズ95のルック・アンド・フィール(look-and-feel)を確保するために、TreeViews、ImageLists、ボタンバー、タブダイアログ及び他のUIエレメントを使用しなければならない。
1.ユーザインターフェイスの分離 − ドライバアドミニストレータ32のコンポーネントをコントロールするのに使用される全てのユーザインターフェイスエレメントを実施する。
2.OCXクライエントへアップグレードできる − 最終的に、各ドライバ及びストリームは、全ての入力をそれに対応するドライバ又はストリームへ通すOCXを伴う全てのUIエレメントを実施することができる。ドライバアドミニストレータCPL38は、OCXクライエントになるように容易にアップグレードできる方法で設計されねばならない。
3.ストリームの独立性を与える − ドライバ30は、動作するためにストリーム28の使用を要求されてはならない。ドライバアドミニストレータ32の設計は、動作のためにストリームコンポーネント28に依存しないよう確保するように変更しなければならない。
4.ウインドウズ95UIの使用 − 可能であれば、ウインドウズ95UIエレメントを使用しなければならない。例えば、ウインドウズ95のルック・アンド・フィール(look-and-feel)を確保するために、TreeViews、ImageLists、ボタンバー、タブダイアログ及び他のUIエレメントを使用しなければならない。
以下の説明は、コントロールパネルアプレット38のためのモジュールインターアクションマップを示す。モジュールは、実行可能な2進、外部データファイル、又はユーザと対話するときに使用される主ユーザインターフェイスエレメントのいずれかとして定義される。図51は、ドライバアドミニストレータコントロールパネルアプレットを実行するときに互いに対話する全てのモジュールを示す図である。
ドライバアドミニストレータCPL38は、コントロールパネルアプレットである。コントロールパネルアプレットは、ウインドウズコントロールパネルがアプレットと通信できるようにする多数のファンクションをエクスポートする特殊なDLLである。
ドライバアドミニストレータダイアログは、ウインドウズコントロールパネルからコントロールパネルアプレットアイコンを選択するときに現れる主ダイアログである。
ファイル名に対しユーザに問い合わせするためにブラウズダイアログが使用される。例えば、新たなストリーム又はドライバを追加するときには、ドライバアドミニストレータは、このダイアログを用いて、追加すべき新たなドライバ又はストリームの位置をユーザに尋ねる。
ビューサポートダイアログは、選択されたドライバ30により与えられるサポートを表示する。各ドライバは、異なる組の拡張機能をサポートすることができる。このダイアログは、各ドライバによりいかに大きなサポートが与えられるかをユーザに厳密に示し、ドライバを使用するときにアプリケーション内のどのファンクションが働かないか決定できるようにする。
上記のモジュールインターアクションマップとは異なり、図52に示すオブジェクトインターアクションマップは、C++オブジェクトの実際のインターフェイスが各モジュール内で互いにいかに対話するかを示す。
ダイアログに名前が表示されるオブジェクトにより各ダイアログがマネージされることを示す以外、モジュールIAマップとの主たる相違は、CComCPL及びCDriverAdmin C++オブジェクトの両方である。これら両方のオブジェクトは、以下に説明する。
各ダイアログクラスの説明は非常に簡単でありそして上記のダイアログの説明に非常に類似しているので、ここでは説明しない。このセクションは、他の全てのC++オブジェクトについて述べる。
CComCPLは、テンプレートからのCOMBuilderアプリケーションにより発生されるC++オブジェクトである。これは、コントロールパネルアプリケーションから送られる全てのウインドウズメッセージを処理するのに使用される。
CDriverAdminオブジェクトは、ドライバアドミニストレータ32のコンポーネントのユーザをドライブ、コントロール及びマネージするのに使用される。例えば、全てのOLE 2.0インターフェイスマネージメント及びデータ変換は、このオブジェクトにより取り扱われる。データ変換は、標準的なC++フォーマットから、OLE 2.0データ転送メカニズムで容易に取り扱われる生のフォーマットへデータを変換することを含む。
CDriverAdminオブジェクトは、ドライバアドミニストレータ32のコンポーネントのユーザをドライブ、コントロール及びマネージするのに使用される。例えば、全てのOLE 2.0インターフェイスマネージメント及びデータ変換は、このオブジェクトにより取り扱われる。データ変換は、標準的なC++フォーマットから、OLE 2.0データ転送メカニズムで容易に取り扱われる生のフォーマットへデータを変換することを含む。
シナリオインターアクションマップは、オブジェクトインターアクションマップとほぼ同一であるが、特定オペレーションの一部を占めるオブジェクト及びインターアクションのみを表示する。又、各インターアクションは、オペレーションの実行中にそれらが生じる順序で番号付けされる。以下の説明は、ドライバアドミニストレータCPL38アプレットを実行する間に生じる多数のキーオペレーションを示す。
ユーザが最初にCPLアプレットを実行するときに初期化が生じる。このプロセス中に、他の全てのオブジェクトが初期化され、そして多数のモードがロードされる。初期化プロセス中に2つのステップが行われる。第1に、アプリケーションが初期化され、そして第2に、ドライバアドミニストレータ32のコンポーネントから問い合わされた値でダイアログが初期化される。次のセクションでその各々を説明する。
図53に示すアプリケーションの初期化は、アプリケーションが最初に実行されそして主ダイアログがまだ表示されないときに生じる。アプリケーションを初期化するときには、次のステップが生じる。
ウインドウズメッセージにより、ウインドウズは、コントロールパネルアプレットが丁度ロードされたことをCComCPLオブジェクトに通知する。CComCPLは、次いで、CDriverAdminDialogをロードし、そしてそれに、モードに入る前にダイアログ準備を行うように告げる。次いで、CDriverAdminDialogは、登録データベースに記憶された設定をロードする。例えば、現在ウインドウ位置及びアクティブなタブがデータベースに記憶される。CDriverAdminDialogは、次いで、CDriverAdminクラスをロードし、そしてそれにそれ自身を初期化するよう指令する。初期化中に、CDriverAdminDialogは、ドライバアドミニストレータ32のインスタンスを形成し、使用される全てのインターフェイスに問い合わせる。
アプリケーションが初期化されると、ダイアログに表示されるべきデフォールト設定をセットしなければならない。これらの値は、ダイアログが初期化されるとき、それを表示する直前にセットされる。図54は、このプロセスを示す。ダイアログを初期化するプロセス中に、次のステップが生じる。
DoModalコールの前に生じるダイアログ準備中に、CDriverAdminDialogは、ダイアログボックスに表示されるべき初期値を設定するときに使用されるべきドライバ列挙についてCDriverAdminオブジェクトに問い合わせる。CDriverAdminは、ドライバアドミニストレータ32コンポーネントを使用してドライバ情報マップについて問合せ、これは、次いで、CDriverAdminDialogへ返送される。ドライバ情報マップを受け取ると、CDriverAdminDialogは、この情報を用いて、ドライバ又はストリームのいずれかに関連した全てのユーザインターフェイスアイテムを更新する。
システム22にドライバを追加することは、2つのステップに分割することができる。第1に、モジュール名をシステムに追加しなければならない。次いで、ドライバアドミニストレータ32の主ダイアログは、丁度追加された新たなドライバを反映するようにそれ自身を更新しなければならない。
ユーザがドライバアドミニストレータ32の主ダイアログの「追加...」ボタンを押すと、ドライバの追加が行われる。図55は、このプロセスを示す。新たなドライバを追加するときには、次のステップが生じる。
ドライバを追加するときには、先ず、ユーザは、「追加...」ボタンを押さねばならない。このボタンを押した後に、CDriverAdminDialogは、共通のオープンファイルダイアログをオープンする。ユーザは、追加すべきドライバのファイル名に入り、そしてダイアログをクローズしなければならない。CDriverAdminDialogは、次いで、ファイル名をCDriverAdminオブジェクトへ通し、そしてモジュールの名前をドライバとしてレジスタに通すRegisterDriver方法をコールする。CDriverAdminは、次いで、ドライバファイル名をドライバアドミニストレータ32コンポーネントへ通し、そしてドライバをシステム22に登録するようそれに指令する。
主ダイアログを更新するプロセスは、上記ダイアログを初期化するプロセスと同一である。
新たなドライバを追加するプロセスと同様に、ドライバの除去は、ドライバをシステムから除去しそして主ダイアログを更新することを含む。「除去」ボタンを押すと、ドライバがXMCソフトウェアシステムから除去される。図56は、このプロセスを示す。ドライバを除去するときには、次のステップが生じる。
ドライバを除去するために、ユーザは、先ず、「除去」ボタンを選択しなければならない。このボタンを押した後に、選択されたストリームに対する選択されたドライバ又は関連ドライバが除去される。CDriverAdminDialogは、ドライバのXMC_HDRIVERをCDriverAdminへ通しそしてそれに、UnRegister方法をコールすることによりドライバを除去するよう指令する。CDriverAdminは、XMC_HDRIVERをドライバアドミニストレータ32コンポーネントへ通し、そしてそれにドライバを登録解除するよう指令する。
主ダイアログを更新するプロセスは、上記のダイアログを初期化するプロセスと同一である。
ビューイングサポートは、選択されたドライバにより実施されるサポートのレベルを調査することを含む。図57は、ビューサポートダイアログを経てユーザにこの情報を与えるプロセスを示す。以下のステップは、ドライバにより与えられるサポートを調査するときに生じる。
先ず、ユーザは、ドライバアドミニストレータの主ダイアログの「ビューサポート」ボタンを選択しなければならない。選択されると、CDriverAdminDialogは、ドライバサポート情報についてCDriverAdminに問い合わせる。CDriverAdminは、情報を実際に満たすドライバアドミニストレータ32コンポーネントへ問合せを通す。問合せ情報が返送されると、CDriverAdminDialogは、それをCViewSupportDialogへ通す。CViewSupportDialogは、ドライバサポート情報を用いてそれ自身を初期化する。
VIII.ドライバアドミニストレータCPLアプレット
このセクションは、ドライバアドミニストレータコントロールパネルアプレット38について説明する。ドライバアドミニストレータ32を用いてモーションコントロールシステムを構成するときには、ユーザと共に機能する2つの主たるアイテム、即ちドライバ及びストリームが存在する。各ドライバ30は、ハードウェア特有のコントロールコードを発生し、これは、次いで、選択されたストリームコンポーネント28へ送られる。ストリームは、ドライバとコントロールコード行先との間のデータ搬送レイヤを容易にする。
このセクションは、ドライバアドミニストレータコントロールパネルアプレット38について説明する。ドライバアドミニストレータ32を用いてモーションコントロールシステムを構成するときには、ユーザと共に機能する2つの主たるアイテム、即ちドライバ及びストリームが存在する。各ドライバ30は、ハードウェア特有のコントロールコードを発生し、これは、次いで、選択されたストリームコンポーネント28へ送られる。ストリームは、ドライバとコントロールコード行先との間のデータ搬送レイヤを容易にする。
現在のハードウェア設定に基づき、異なるストリームを使用できる。例えば、ハードウェアがPCバスに接続された場合には、PCバスストリームを用いて、それと通信される。一方、ハードウェアがシリアルケーブルを経てシリアルI/Oポートに接続された場合には、シリアルストリームが使用される。最後に、全てのハードウェア構成は、ファイルストリームを使用できる。ファイルストリームを使用するときには、全てのコントロールコードが指定のファイルに送られ、このファイルを後でハードウェアにダウンロードすることができる。
このセクションは、ドライバ及びストリームの両方と、その各々がいかに構成されるかを示す。このセクションは、ドライバアイテムと、それらを編集するのに使用される全ての特性ページについて最初に説明する。又、このセクションはストリーム及びそれらの特性ページの説明も含む。最後に、このセクションは、ソフトウェアの細部を含むアバウトボックスについても説明する。
各ドライバの主たる目的は、特定のモーションコントロールアクションを実行するようにハードウェアに指令するハードウェア特有のコントロールコードを発生することである。例えば、このようなアクションは、現在の位置についてハードウェアに問い合わせし、又はシステムの所定の位置へ移動するようにハードウェアに指令することを含む。以下の説明は、各ドライバを構成するのに使用される特性ページについて述べる。
各ドライバに作用する特性には2つの形式がある。先ず、モーションコントロールコンポーネント35により推奨値として使用される1組のデフォールトがセットされる。使用されるスケール及び単位は、多数の例示的デフォールト値である。デフォールト値の設定に加えて、ドライバがそれより高等の構成をサポートする場合には、「高等...」ボタンを押すと、ドライバ構成をセットするのに使用されるダイヤログボックスが表示される。例えば、ドライバがストリームをサポートしない場合には、ドライバにより与えられる高等な構成のダイアログによりユーザはI/Oポート及びIRQ設定をセットすることができる。
ドライバ30に作用する特性は、次の通りである。
スケーリング − スケーリング特性の設定は、モーションコントロールシステム内の全ての軸に使用されるデフォールトスケーリングに作用する。スケーリング値の範囲は、(0.0、1.0)である。デフォールト設定は、IXMC_StaticStateインターフェイスを用いてXMCをプログラムするときにオーバーライドすることができる。
単位 − 単位特性の設定は、システム22をプログラムするときに使用される全ての座標に作用する。
スケーリング − スケーリング特性の設定は、モーションコントロールシステム内の全ての軸に使用されるデフォールトスケーリングに作用する。スケーリング値の範囲は、(0.0、1.0)である。デフォールト設定は、IXMC_StaticStateインターフェイスを用いてXMCをプログラムするときにオーバーライドすることができる。
単位 − 単位特性の設定は、システム22をプログラムするときに使用される全ての座標に作用する。
単位の説明は、次の通りである。
MM_ENGLISH − 全ての座標の基本単位としてインチを使用する。
MM_METRIC − 全ての座標の基本単位としてmmを使用する。
MM_NATIVE − ハードウェアシステムにより定義されたネーティブな座標を使用する。XMCをプログラムするのに使用される座標は、ハードウェア座標に対して1:1でマップされる。
高等... − このボタンを押すと、ユーザにより編集できるドライバのための高等特性を編集するのに使用されるダイアログが表示される。
MM_ENGLISH − 全ての座標の基本単位としてインチを使用する。
MM_METRIC − 全ての座標の基本単位としてmmを使用する。
MM_NATIVE − ハードウェアシステムにより定義されたネーティブな座標を使用する。XMCをプログラムするのに使用される座標は、ハードウェア座標に対して1:1でマップされる。
高等... − このボタンを押すと、ユーザにより編集できるドライバのための高等特性を編集するのに使用されるダイアログが表示される。
ユーザが特性をセットできるのに加えて、各ドライバ特性ページは、サポートされたハードウェアと、ハードウェアを形成するハードウェアベンダーの両方の完全な名前を表示する。
ウインドウズの底部に沿ったボタンは、選択されたドライバ又はストリームと共に機能する。以下の説明は、各ボタンと、それが何を行うかについて述べる。
メークデフォールトボタンを押すと、デフォールトとなるべき現在ドライバが選択される。ストリームが選択された場合には、その親ドライバがデフォールトドライバとなる。デフォールトドライバは、モーションコントロールコンポーネント35により後で使用される。
追加...ボタンを選択すると、追加モジュールダイアログが表示される。このダイアログは、新たなドライバ及びストリームをシステム22に追加するのに使用される。選択されると、新たなドライバ又はストリームは、ドライバツリービューに表示される。ストリームを追加するときには、現在選択されたドライバーのもとでストリームが追加される。ストリームをイネーブルするために、ストリーム特性ページに配置されたイネーブルチェックボックスを選択しなければならない。
除去ボタンを選択すると、選択された現在ドライバ又はストリームが除去される。ドライバが除去された場合には、全てのストリームも除去される。
ビューサポート...ボタンを選択すると、ドライバにより実施されたXMCサポートのレベルを調査するのに使用されるダイアログが表示される。例えば、全てのAPIインターフェイス及びその後の方法が表示される。ドライバ内の実施が欠落して、APIインターフェイスが動作するのを防止する場合には、ドライバスタブ36が使用される。ドライバ30内の実施の欠落が、ドライバスタブ36内のオペレーションと置き換えできない場合には、インターフェイス又は方法がディスエイブルされる。
XMCサポートビューダイアログに見られる各グラフィックについて、以下に説明する。
D − このグラフィックは、インターフェイス又は方法がドライバ30により実施されることを意味する。
S − このグラフィックは、インターフェイス又は方法がドライバスタブ36により実施されることを意味する。
X − このグラフィックは、インターフェイス又は方法がドライバ30内の実施の欠如によりディスエイブルされることを意味する。
D − このグラフィックは、インターフェイス又は方法がドライバ30により実施されることを意味する。
S − このグラフィックは、インターフェイス又は方法がドライバスタブ36により実施されることを意味する。
X − このグラフィックは、インターフェイス又は方法がドライバ30内の実施の欠如によりディスエイブルされることを意味する。
特性ページと同様に、ドライバの全てのデバッグ設定をセットするためにデバッグページも設けられる。各ドライバは、ドライバをコントロールするのに使用される全てのAPIコールがロギングされることを指定できる。ロギングの設定は、選択される現在ドライバのみに影響する。出力フィールドは、全てのデバッグ情報が送られる出力ストリームを選択できるようにする。ストリームがイネーブルされるときには、デバッグ情報が指定のテキストファイルに送られる。デバッグモニタがイネーブルされたときには、デバッグモニタがもし動作していればそこにデバッグ情報が送られる。ストリームをイネーブルするためのイネーブル動作を使用すると、ストリームがオンになって、発生された全てのデバッグ情報がストリームへと送られる。一度に2つ以上のストリームをイネーブルすることができる。
サポートされる各デバッグストリームごとにストリームの設定を使用できる。
テキストファイルは、テキストファイルの名前をセットできるようにする。デバッグモニタのみをイネーブル及びディスエイブルすることができる。
ストリームは、行先位置へデータを通すためにドライバにより使用される搬送レイヤである。行先位置は、実際のモーションコントロールハードウェアであってもよいし、又はテキストファイルであってもよい。通常、ハードウェアベンダーにより使用されるコントロール言語は、それらのモーションコントロールハードウェアの多数の異なるフレイバ(flavor)によりサポートされる。例えば、あるベンダーは、同じコントロール言語を理解するPCバスをベースとする及びシリアルI/Oをベースとするモーションコントロールハードウェアを有する。このような場合に、各ハードウェアの設定に同じドライバが使用されるが、特定のハードウェア設定に基づき異なるストリームと通信する。グラフ的に、各ストリームは、そのストリームを使用する各ドライバの下にリストする。
このセクションは、システム22によりサポートされるストリームと、それらがいかに構成されるかについて説明する。
PCバスストリームは、ハードウェアで定義された指定のI/Oポート及びIRQへ書き込むことにより、PCバスをベースとするモーションコントロールハードウェアシステムへ全てのデータを直接送信する。このセクションは、PCバスシステムに使用できる特性及びデバッグ設定の両方について述べる。
ストリーム特性は、現在選択されたストリームのみに影響する。ユーザは、I/Oポート及びIRQのようなある設定を選択することが要求される。これらの値を設定しないと、PCバスストリームは、ハードウェアと通信することができない。PCバスストリームに影響する特性は、以下に説明する。
I/Oポートは、ストリームがデータを送信すべきモーションコントロールハードウェアと通信するのに使用される基本的ポートである。
IRQは、ハードウェアにより使用される割り込み要求レベルである。
IRQは、ハードウェアにより使用される割り込み要求レベルである。
「高等...」ボタンを押すと、ユーザが更に高等なストリームオプションを編集できるようにするダイアログが表示される。例えば、ストリームがユーザが編集できるポートI/Oマップをサポートする場合には、ポートマップがこのダイアログに表示される。このボタンは、ユーザが編集できる高等な特徴をサポートするストリームに対してのみイネーブルされる。
アプリケーションプログラムをデバッブするときには、どんなコードが実際にハードウェアに送られるか調べることが有用である。ストリームのためのデバッグ設定ページは、ユーザがCmd及びビットストリームの両方をイネーブル及びディスエイブルできるようにする。Cmdストリームは、ハードウェアに送られる全てのコマンドコードをロギングするのに使用される。このレベルの細部が充分な情報を与えない場合には、ビットストリームを使用することができる。イネーブルされると、ビットストリームは、各ハードウェアポートを経て送られた全ての値をロギングする。ハードウェアにより使用される各ポートから読み取られ及びそこに書き込まれる全ての値がロギングされる。イネーブルされたときに、両ストリームは、モーションコントロールシステムをプログラムするアプリケーションを著しく低速化することに注意されたい。
シリアルRD−232ストリームは、シリアルI/Oポートを経てコンピュータに接続されたモーションコントロールハードウェアへドライバからデータを送信するのに使用される。特性及びデバッグの両設定は、選択されたシリアルRS−232ストリームのみに影響する。次の説明は、使用できる設定を各々詳細に述べる。
全てのシリアルRE−232特性設定は、ハードウェアと通信するときにどんなI/Oポート及び通信プロトコルを使用すべきかストリームに知らせるためにユーザによりセットされねばならない。シリアルRS−232ストリームに影響する特性を以下に説明する。
ポートは、ハードウェアが接続されるシリアルポートである。COM1−COM4は、使用することのできる有効なポートである。
ボーレートは、ハードウェアによりサポートされるデータ送信速度である。
ハードウェアが選択されたときには、より効率的であるが互換性の低い通信プロトコルを用いてハードウェアへの通信が行われる。このプロトコルが選択されたときにエラーが生じる場合には、XON/XOFF通信プロトコルが使用される。
XON/XOFF通信プロトコルが選択されたときには、簡単で且つ互換性の高い通信プロトコルが使用される。
シリアルRS−232ストリームのデバッグ設定は、PCバスストリームによりサポートされるものと非常に類似している。シリアルRS−232ストリームは、Cmdストリームによるコマンドロギングのみをサポートし、ビットロギングはサポートしない。
テキストファイルストリームは、後で使用するためのコントロールコードプログラムを構成するのに使用される。このストリームを使用すると、XMCソフトウェアがコード発生モードで容易に実行される。このモードで実行するときにはモーションコントロールアクションは行われない。むしろ、コントロールコードプログラムが形成されてファイルに記憶される。その後、プログラムが形成されてセーブされた後に、それらはモーションコントロールハードウェアへダウンロードされ、そして実行される。以下の説明は、テキストファイルストリームに対する特性及びデバッグ設定について述べる。
テキストファイルストリームを構成するときに設定される主たる特性は、使用すべきファイルの実際の名前及び位置である。設定されると、ストリームを使用する準備ができる。
以下の特性は、テキストファイルストリームに対して構成される。
ファイル名は、選択されたドライバ30により発生された全てのコントロールコードを記憶するのに使用されるファイルのファイル名及び位置である。「ブラウズ...」ボタンを押すと、使用すべきファイル名及び位置をグラフ的に選択できるようにするダイアログが表示される。
テキストファイルストリームに対して使用できるデバッグ設定はない。
ファイル名は、選択されたドライバ30により発生された全てのコントロールコードを記憶するのに使用されるファイルのファイル名及び位置である。「ブラウズ...」ボタンを押すと、使用すべきファイル名及び位置をグラフ的に選択できるようにするダイアログが表示される。
テキストファイルストリームに対して使用できるデバッグ設定はない。
IX.言語ドライバ
図58は、言語ドライバ44を示すと共に、この言語ドライバ44がストリーム28、ドライバアドミニストレータ32、モーションコントロールコンポーネント35及びレジストリ42といかに対話するかを示すモジュールインターアクションマップを含む。
図58は、言語ドライバ44を示すと共に、この言語ドライバ44がストリーム28、ドライバアドミニストレータ32、モーションコントロールコンポーネント35及びレジストリ42といかに対話するかを示すモジュールインターアクションマップを含む。
上記のソフトウェアドライバ30の場合と同様に、サポートされるモーションコントロールデバイスのグループの各モーションコントロールデバイス20に対して1つの言語ドライバ44が使用される。言語ドライバ44は、図1及び図12−21を参照して上記したソフトウェアドライバ30と同じ基本的ファンクションを実行する。ソフトウェアシステム22に対して、言語ドライバ44は、ソフトウェアドライバ30と同様にアクセスされそして応答するが、言語ドライバ44とソフトウェアドライバ30との相違は、完全に内部にある。
これらドライバ30と44との間の主たる相違は、言語ドライバ44が、インデックスフィールド、コマンドフォーマットフィールド及び応答フォーマットフィールドを重要なフィールドとするデータベースを使用することである。データベースの各記録又は行は、所与のドライバファンクションに対応する。
コマンド及び応答フォーマットテンプレートの目的は、モーションコントロールデバイス20へ送信されるべきコマンド及びパラメータを含むコマンドデータストリング及びフォーマットデータストリングを構成するプロセスを公式化及び簡単化することである。フォーマットテンプレートは、所与のSPIコマンドに対し、ソフトウェアシステム22が、所与の言語ドライバ44に関連した所与のモーションコントロールデバイス20に関連したベンダー特有のハードウェアコマンド言語といかに通信するかを定義する。従って、コマンドフォーマットテンプレート及び応答フォーマットテンプレートを含む1つのデータベースがこのような各言語に対して形成される。
コマンドフォーマットフィールドは、コマンドフォーマットテンプレートを含み、そして応答フォーマットフィールドは、応答フォーマットテンプレートを含む。これらテンプレートの各々は、一連のデータ形式識別子、マクロ識別子、シンタックスキャラクタ、及び/又はASCIIキャラクタを含む。
インデックスフィールドは、各ドライバファンクションに対して独特の値を含み、所与のドライバファンクションに関連したコマンド及び応答フォーマットテンプレートをルックアップするプロセスを容易にする。
ソフトウェアシステムデザイナーは、上記のデータ形式識別子、マクロ識別子及びシンタックスキャラクタを定義する。一般に、データ形式識別子及びシンタックスキャラクタは、コマンドフォーマットテンプレート及び応答フォーマットテンプレートの両方に共通である。
マクロ識別子は、通常、コマンドフォーマットテンプレート又は応答フォーマットテンプレートのいずれかに関連したマクロに対応する。ASCIIキャラクタは、所与の言語ドライバ44に関連したドライバファンクション及び特定のモーションコントロールデバイス20により定義される。
言語ドライバ44により使用されるデータベースの形成を容易にする組織的なツールとしてエクセル(Excel)スプレッドシートが使用される。この目的で使用できるエクセルスプレッドシートの例が図67に示されている。図67に示されたスプレッドシートは、タブ区画ファイルとしてセーブされ、次いで、図59に示すSPIデータベースへとコピーされる。
図67に示すスプレッドシートは、単なる組織的ツールであり、ここでは詳細に説明しない。しかし、図67に例示するスプレッドシートは、記述を伴う典型的なコマンド及び応答データ形式識別子のリストと、コマンド及び応答マクロのリストとを示すことに注意されたい。これらは、他の基礎的なデータ形式を所与のテンプレートに対して必要に応じて組み合わせるデータ形式をプログラマーが定義できるようにする付加的なSTRUCTデータ形式で補足される。
従って、言語ドライバは、一般的に次のように動作する。上記のように、モーションコンポーネント35は、言語ドライバ44により実施されるドライバファンクションをコールし、そして多くの場合に、そのファンクションを実行するのに必要なパラメータを通す。言語ドライバ44は、そのドライバファンクションのインデックスを使用して、適当なドライバファンクションに関連したコマンドフォーマットテンプレート及び応答フォーマットテンプレートを探す。
コマンドフォーマットテンプレートを使用し、言語ドライバ44は、ASCIIキャラクタを含むコマンドデータストリングを構成する。コマンドデータストリングは、言語ドライバ44に関連したモーションコントロールデバイス20において所与のドライバファンクションを所望の仕方で実施するのに必要なコマンド及びパラメータを保持する。
同様に、言語ドライバ44は、応答フォーマットテンプレートを使用し、コマンドデータストリングに応答して特定のモーションコントロールデバイス20により送られた応答データストリングをパーズする。従って、応答フォーマットテンプレートは、コントロールアプリケーション26を意図されたように機能できるようにするに必要なコマンド及び/又はパラメータをモーションコントロールデバイス20からモーションコントロールコンポーネント35へ言語ドライバ44が通せるようにする。
単一のSPIに関連した1組のコマンド及び応答フォーマットテンプレートが与えられた場合に、コマンドデータストリングを発生しそして応答データストリングをパーズするプロセスを以下に例示する。
例1
第1の例は、言語ドライバ44がドライバファンクションIXMC_DrvExt_Test::Moveをいかに取り扱うかを示す。
Cmdフォーマット:D%d,+@[snd]GO%b+:@[snd]
Rspフォーマット:@[crIf]>@[rcv]@[crIf]>@[rcv]
ドライバファンクションコール:pXMCDrvExtTest->Move(20.0,30.0)
このファンクションコールは、x方向の20単位そしてy方向に30単位移動するようにモーションコントロールデバイスに指令する。
第1の例は、言語ドライバ44がドライバファンクションIXMC_DrvExt_Test::Moveをいかに取り扱うかを示す。
Cmdフォーマット:D%d,+@[snd]GO%b+:@[snd]
Rspフォーマット:@[crIf]>@[rcv]@[crIf]>@[rcv]
ドライバファンクションコール:pXMCDrvExtTest->Move(20.0,30.0)
このファンクションコールは、x方向の20単位そしてy方向に30単位移動するようにモーションコントロールデバイスに指令する。
ドライバは、次のようにストリームと通信する。
ステップ1.最初の@記号までコマンドフォーマットテンプレートにおいてオペレーションを実行する。これは、生のコマンドストリング「D20.0、30.0」を形成する。
ステップ2.最初の@記号の後に、送信コマンドがあり、ステップ2で形成されたストリングを送信する。言語ドライバは、ここで、コマンドフォーマットテンプレートにおいてGに達する。
ステップ3.送信コマンドの後に、言語ドライバは、ストリームから応答を読み取り、コマンドストリングが正しく受け取られて処理されたことを確認する。
ストリームから受け取った応答ストリングは、「\r\n>」である。
ステップ4.言語ドライバは、次いで、応答フォーマットテンプレートを使用し、生の応答ストリングをパーズして、オペレーションを照合し、データを抽出する。次いで、言語ドライバは、コマンドフォーマットテンプレートにおいてGでピックアップし、次の生のコマンドストリング「GO11」を構成し、最後のマクロで止める。
ステップ1.最初の@記号までコマンドフォーマットテンプレートにおいてオペレーションを実行する。これは、生のコマンドストリング「D20.0、30.0」を形成する。
ステップ2.最初の@記号の後に、送信コマンドがあり、ステップ2で形成されたストリングを送信する。言語ドライバは、ここで、コマンドフォーマットテンプレートにおいてGに達する。
ステップ3.送信コマンドの後に、言語ドライバは、ストリームから応答を読み取り、コマンドストリングが正しく受け取られて処理されたことを確認する。
ストリームから受け取った応答ストリングは、「\r\n>」である。
ステップ4.言語ドライバは、次いで、応答フォーマットテンプレートを使用し、生の応答ストリングをパーズして、オペレーションを照合し、データを抽出する。次いで、言語ドライバは、コマンドフォーマットテンプレートにおいてGでピックアップし、次の生のコマンドストリング「GO11」を構成し、最後のマクロで止める。
ステップ5.言語ドライバは、コマンドフォーマットテンプレートにおいて最後のマクロでピックアップし、ステップ4で形成された生のコマンドストリングをストリームへ送り、コマンドフォーマットテンプレートを完了する。
ステップ6.再び、送信コマンドの後に、言語ドライバは、ストリームから応答データストリング「\r\n>」を受け取る。
ステップ7.次いで、言語ドライバは、ステップ6で受け取られた応答データストリングをパーズする。
ステップ6.再び、送信コマンドの後に、言語ドライバは、ストリームから応答データストリング「\r\n>」を受け取る。
ステップ7.次いで、言語ドライバは、ステップ6で受け取られた応答データストリングをパーズする。
例2
第2の例は、言語ドライバ44がドライバファンクションIXMC_DrvExt_Test::SetVelocityをいかに取り扱うかを示す。
Cmdフォーマット:V%If,+@[snd]
Rspフォーマット:@[crIf]>@[rcv]
ドライバファンクションコール:pXMCDrvExtTest->SetVelocity(NOP,22.0)
説明:y軸の速度を22.0にセットする。
生のコマンドストリング:「V、22.0:」
生の応答ストリング:「\r\n>」(予想)
第2の例は、言語ドライバ44がドライバファンクションIXMC_DrvExt_Test::SetVelocityをいかに取り扱うかを示す。
Cmdフォーマット:V%If,+@[snd]
Rspフォーマット:@[crIf]>@[rcv]
ドライバファンクションコール:pXMCDrvExtTest->SetVelocity(NOP,22.0)
説明:y軸の速度を22.0にセットする。
生のコマンドストリング:「V、22.0:」
生の応答ストリング:「\r\n>」(予想)
例3
第3の例は、言語ドライバ44がドライバファンクションIXMC_DrvExt_Test::GetVelocityをいかに取り扱うかを示す。
Cmdフォーマット:GV%b+:@[snd]
Rspフォーマット:%d,+@[crIf]>@[rcv]
ドライバファンクションコール:pXMCDrvExtTest->GetVelocity (NOP,&dfY_Vel)
説明:y軸に対してセットされた速度を得る。
生のコマンドストリング:「GV01:」
生の応答ストリング:「,44.0\r\n>」(予想)
dfY_Vel=44.0
第3の例は、言語ドライバ44がドライバファンクションIXMC_DrvExt_Test::GetVelocityをいかに取り扱うかを示す。
Cmdフォーマット:GV%b+:@[snd]
Rspフォーマット:%d,+@[crIf]>@[rcv]
ドライバファンクションコール:pXMCDrvExtTest->GetVelocity (NOP,&dfY_Vel)
説明:y軸に対してセットされた速度を得る。
生のコマンドストリング:「GV01:」
生の応答ストリング:「,44.0\r\n>」(予想)
dfY_Vel=44.0
例4
第4の例は、言語ドライバ44がドライバファンクションIXMC_DrvExt_Test::Resetをいかに取り扱うかを示す。
Cmdフォーマット:!RESET:@[snd]MAO:MCO:LHO:@[snd]
Rspフォーマット:@[crIf]VENDOR NAME = MODEL@[rcv]@[crIf]>@[rcv]
ドライバファンクションコール:pXMCDrvExtTest->Reset()
説明:ハードウェアをリセットする。
生のコマンドストリング1:「!RESET:」
生の応答ストリング1:「\r\n*VENDOR NAME−MODEL」(予想)
生のコマンドストリング2:「MAO:MCO:LHO:」
生の応答ストリング2:「\r\n>」(予想)
第4の例は、言語ドライバ44がドライバファンクションIXMC_DrvExt_Test::Resetをいかに取り扱うかを示す。
Cmdフォーマット:!RESET:@[snd]MAO:MCO:LHO:@[snd]
Rspフォーマット:@[crIf]VENDOR NAME = MODEL@[rcv]@[crIf]>@[rcv]
ドライバファンクションコール:pXMCDrvExtTest->Reset()
説明:ハードウェアをリセットする。
生のコマンドストリング1:「!RESET:」
生の応答ストリング1:「\r\n*VENDOR NAME−MODEL」(予想)
生のコマンドストリング2:「MAO:MCO:LHO:」
生の応答ストリング2:「\r\n>」(予想)
言語ドライバ44は、上記のソフトウェアシステム22のコンテクストにおいて特に重要なものであるが、この技術は、ASCIIストリングを使用してハードウェアへコマンドを送信しそしてそこから応答を受信するようなハードウェアに広く利用できる。
言語ドライバ44を以下に詳細に説明する。言語ドライバ44は、ドライバアドミニストレータ32及びモーションコントロールコンポーネント35の両方により使用される。その主たる目的は、サポートされる特定のハードウェアに対しモーションコントロールコマンドを発生する機能を実施することである。
例えば、Compumotor AT6400モーションコントロールハードウェアをコントロールするのに使用されるAT6400ドライバは、AT6400コマンドコードを発生する。システム22の初期化段階中に、ドライバアドミニストレータ32は、各言語ドライバ44と通信し、ユーザがドライバ44の構成を追加、除去又は変更できるようにする。システム22を使用するアプリケーションが実行するときに、コンポーネント35は、言語ドライバ35と通信し、適当なモーションコントロールオペレーションを実行するように指令する。
2進コードを直接送信することによりモーションコントロールデバイス20と通信する上記のドライバ30とは異なり、言語ドライバ44は、ASCIIテキストをストリーム28に送信し、これは、次いで、情報をモーションコントロールデバイス20へ送信する。
このセクションは、言語ドライバ44において実施される特徴、即ち(a)ドライバと対話する全ての2進みモジュールを示すと共に、それらが互いにいかに対話するかを示す図58のモジュールインターアクションマップ;(b)言語ドライバ44を形成する内部のC++オブジェクトを示すと共にこれらオブジェクトが互いにいかに対話するかを示すように拡張されたモジュールインターアクションマップに対応する図59のオブジェクトインターアクションマップ;(c)あるプロセス中に含まれるC++オブジェクト間で行われるインターアクションを示す図60−65の多数のシナリオマップ;(d)言語ドライバコンポーネント44によってエクスポーズされるインターフェイス、使用される全てのデータ構造体、及び使用される各C++クラスの定義を示すインターフェイスマップ;及び(e)言語ドライバ44によって使用される典型的なデータベースがいかに構成されるかを示す図67のテーブルを説明するために多数の図面を参照する。
図58のモジュールインターアクションマップは、全ての2進モジュールと、それらと言語ドライバ44とのインターアクションを示す。ドライバ44と直接対話する2つのモジュール即ちモーションコントロールコンポーネント35及びドライバアドミニストレータ32がある。ドライバアドミニストレータ32は、ドライバ設定を問合せそして変更し、コンポーネント35は、システム内のある位置へ移動するようなモーションコントロールオペレーションを実行するようにドライバ44に指令する。
より詳細には、図58のモジュールインターアクションマップは、次のモジュールを含む。
ドライバアドミニストレータモジュール32は、各ドライバ及びストリームモジュールをインストール、取り外し、登録及び設定するのに使用される。
モーションコンポーネントは、アプリケーション26により使用されるモーションコントロールコンポーネント35である。このコンポーネント35は、ドライバアドミニストレータ32によりそこに通された現在ドライバ44と通信し、アプリケーション26により要求されるモーションコントロールオペレーションを実行する。
言語ドライバ44は、ハードウェアコマンド言語を形成するASCIIコードを発生する。所与の言語ドライバ44は、そのドライバ44に特に接続されたストリーム28のみと通信する。いったん接続されると、ストリーム28は、PCバス、シリアルI/O接続、テキストファイル又はデバッグモニタのような行先オブジェクトと通信するのに使用される。
ストリーム28は、各ドライバ44に対してデータ搬送レイヤとして動作する実際のオブジェクトである。各ストリーム28は、ストリームの形式を定義する異なるターゲットを有する。
レジストリ42は、標準的なウインドウズ登録データベースである。
図59のオブジェクトインターアクションマップは、ドライバ44を実施するのに使用される全てのC++オブジェクト間で行われるインターアクションを含ませることにより、図58のモジュールインターアクションマップを更に詳細に分割する。
図の各オブジェクトを次に説明する。
CDriverObject:これは、オブジェクトによりエクスポーズされる全てのOLEインターフェイスのためのファンクションシェルを含む全てのOLE特有の機能を実施する主たるC++オブジェクトである。
CDrvCoreDisp:これは、全てのコアSPI OLEインターフェイスファンクションをそれらの各内部実施体へとディスパッチするのに使用されるC++オブジェクトである。CLangDrvCoreDispオブジェクトから引き継がれる方法に加えて、このオブジェクトは、コアXMCSPI OLEインターフェイス方法のようなドライバ特有のSPIをディスパッチする。CLangDrvCoreDisp:全ての言語ドライバコア機能は、このオブジェクトを経てその内部実施体へとディスパッチされる。例えば、初期化のための一般的な言語ドライバ実施体は、このオブジェクトを経て、LANG DRVベースコードライブラリーに存在するその実施体へとディスパッチされる。
CDriverObject:これは、オブジェクトによりエクスポーズされる全てのOLEインターフェイスのためのファンクションシェルを含む全てのOLE特有の機能を実施する主たるC++オブジェクトである。
CDrvCoreDisp:これは、全てのコアSPI OLEインターフェイスファンクションをそれらの各内部実施体へとディスパッチするのに使用されるC++オブジェクトである。CLangDrvCoreDispオブジェクトから引き継がれる方法に加えて、このオブジェクトは、コアXMCSPI OLEインターフェイス方法のようなドライバ特有のSPIをディスパッチする。CLangDrvCoreDisp:全ての言語ドライバコア機能は、このオブジェクトを経てその内部実施体へとディスパッチされる。例えば、初期化のための一般的な言語ドライバ実施体は、このオブジェクトを経て、LANG DRVベースコードライブラリーに存在するその実施体へとディスパッチされる。
CDrvExtDisp:これは、全ての意図されたSPI OLEインターフェイスファンクションをそれらの各内部実施体へとディスパッチするのに使用されるC++オブジェクトである。CLangDrvExtDispオブジェクトから引き継がれる方法に加えて、このオブジェクトは、拡張XMCSPI OLEインターフェイス方法のようなドライバ特有のSPIをディスパッチする。
CLangDrvExtDisp:全ての言語ドライバ拡張機能は、このオブジェクトを経てその内部実施体へとディスパッチされる。例えば、全てのストリーム処理は、このオブジェクトを経て、LANG_DRVベースコードライブラリーに存在するその実施体へとディスパッチされる。
CCommandMgr:このオブジェクトは、ストリームに送られるコマンドを形成しそしてストリームから受け取られる応答を抽出するのに使用される。
CCommandMgrは、CCommand、CResponse及びCCommandDatabaseオブジェクトをマネージするコントロールオブジェクトである。
CCommand:このオブジェクトは、CSimpleStreamへ送られるコマンドストリングを形成する。形成された各コマンドは、完全なモーションコントロールコマンドストリングである。
CCommandMgrは、CCommand、CResponse及びCCommandDatabaseオブジェクトをマネージするコントロールオブジェクトである。
CCommand:このオブジェクトは、CSimpleStreamへ送られるコマンドストリングを形成する。形成された各コマンドは、完全なモーションコントロールコマンドストリングである。
CResponse:このオブジェクトは、CSimpleStreamにより返送された生の応答ストリングを変換し、そしてそれらをC++データ形式に変換する。例えば、位置データを含む応答ストリングを、1組のダブル値に変換することができる。
CCommandDatabase:このオブジェクトは、モーションコントロールコマンド言語を形成するコマンドの完全なデータベースを記憶する。このデータベースは、実際の外部データベース(SQLデータベースのような)又はテキストファイルとして表されるか、或いはカスタムリソースとしてドライバ内に記憶される。現在、言語ドライバは、ドライバモジュール内にカスタムリソースとして記憶されたデータベースのみをサポートする。
CSPIInfo:このオブジェクトは、CCommandDatabaseオブジェクト内に記憶された1つのデータベースエントリーを形成する。
CStreamMgr:このオブジェクトは、ドライバ内に登録された1組のストリームをマネージする役目を果たす。ストリームを追加、除去及びイネーブルすることができる。イネーブルされたストリームのみが実際にそれらのターゲットへの送信データである。例えば、イネーブルされたPCバスストリームのみが、PCバスにプラグインされるモーションコントロールカードへの送信データとなる。
CStreamMgr:このオブジェクトは、ドライバ内に登録された1組のストリームをマネージする役目を果たす。ストリームを追加、除去及びイネーブルすることができる。イネーブルされたストリームのみが実際にそれらのターゲットへの送信データである。例えば、イネーブルされたPCバスストリームのみが、PCバスにプラグインされるモーションコントロールカードへの送信データとなる。
CSimpleStream:このオブジェクトは、その基本的なストリームコンポーネントを初期化し、形成しそして直接通信するのに使用される。
CDriverInfoMgr:このオブジェクトは、CDriverInfoオブジェクトを形成する役目を果たす。
CDriverInfoMgr:このオブジェクトは、CDriverInfoオブジェクトを形成する役目を果たす。
CDriverInfo:このオブジェクトは、言語ドライバ44を形成する完全な1組の状態データを含む。全てのドライバ設定と、使用される全てのXMCストリームのリストがこのオブジェクト内に記憶される。基本的な問合せは、このオブジェクトに直接送られる。このオブジェクトに接続する種々のマネージャーオブジェクトの1つにより更に複雑なオペレーションが取り扱われて、オペレーションが実行され、そしてそこから切断される。
CRegistryMgr:このオブジェクトは、CDriverInfoオブジェクト内に記憶された情報を登録データベースへ及びそこからセーブ及びロードするのに使用される。特に、ICOM_PersistRegDBインターフェイスが呼び出されたときにコールされるコードを含む。
CRegistry:このオブジェクトは、キーを形成し、値をセーブしそして値を問い合わせるような全ての登録データベースオペレーションを実行する。
言語ドライバ44に生じる全ての主たるシナリオ又はオペレーションは、図60−66を参照して以下に説明する。これらの図に含まれた各々のシナリオマップは、含まれた全てのオブジェクトと、それらの間に生じるインターアクションをそれらが発生する順序で示す。
言語ドライバ44には2つの形式のオペレーションが生じる。先ず、ドライバアドミニストレータ32は、ストリームを追加し又はドライバを構成するといったオペレーションを開始する。第2に、モーションコントロールコンポーネント35は、アプリケーションが実際に実行されるときにドライバにおいてオペレーションを開始する。
図60−64を参照し、ドライバアドミニストレータ32によりドライバ44において行われる全てのオペレーションについて説明する。各図は、ドライバ44を使用するときにそれが生じる順序で説明する。
ドライバは、XMCモーションコンポーネントにより使用される前に、OLEシステムに登録されねばならない。図60に示すように、ドライバを登録するために、ドライバアドミニストレータは、先ず、登録されているモジュールが実際に適切な言語ドライバであることを照合し、次いで、ドライバを登録するためのエクスポートされたファンクションDLLRegisterServerをコールする。システム22の各モジュールは、DLLGetModuleTypeと称するファンクションをエクスポートする。このファンクションは、モジュールが適切なドライバコンポーネントであることを照合するのに使用される。
次に、ドライバアドミニストレータは、OLE CoCreateInstanceファンクションを用いてコンポーネントをロードすることができる。初期化プロセス中に、ドライバは、全ての登録データをロードし、そしてCDriverInfo及び全てのC++マネージャーオブジェクトを初期化する。
図60に示す各ステップについて以下に詳細に説明する。
1.初期化の間に、ドライバアドミニストレータは、ストリームコンポーネントを含むDLLをロードし、モジュールがXMCドライバであることを照合しなければならない。これを行うために、ドライバアドミニストレータは、ドライバによりエクスポートされたDLLGetModuleTypeファンクションをコールする。このファンクションが、値XMC_DRIVER_MTを上位バイトに含む値を返送する場合には、ドライバアドミニストレータは、そのエクスポートされたファンクションDLLRegisterServerをコールするように進んで、それにより、ドライバを登録する。コールされると、DLLRegisterServerの実施体は、OLEコンポーネントを登録するに必要な全てのOLE 2.0登録情報をウインドウズ登録データベースに書き込む。
2.次いで、ドライバアドミニストレータは、ドライバモジュールにそのCLSIDについて問い合わせしなければならない。ドライバのエクスポートされたファンクションDLLGetCLSIDをコールすると、CLSIDが返送される。ドライバアドミニストレータは、CLSIDを得ると、標準的なOLEファンクションCoCreateInstanceをコールすることによりドライバのインスタンスを形成することができる。
3.CoCreateInstanceは、CDriverObjectにより実施されるICOM_Base::Initialize方法をコールすることによりコンポーネントを自動的に初期化する。
4.ICOM_Base::Initializeの実施は、CDriverCoreDispにそれ自身を初期化するように指令する。
5.その初期化内で、CDriverCoreDispオブジェクトは、CCommandMgrでスタートして、そのマネージャーオブジェクトの各々を初期化する。
1.初期化の間に、ドライバアドミニストレータは、ストリームコンポーネントを含むDLLをロードし、モジュールがXMCドライバであることを照合しなければならない。これを行うために、ドライバアドミニストレータは、ドライバによりエクスポートされたDLLGetModuleTypeファンクションをコールする。このファンクションが、値XMC_DRIVER_MTを上位バイトに含む値を返送する場合には、ドライバアドミニストレータは、そのエクスポートされたファンクションDLLRegisterServerをコールするように進んで、それにより、ドライバを登録する。コールされると、DLLRegisterServerの実施体は、OLEコンポーネントを登録するに必要な全てのOLE 2.0登録情報をウインドウズ登録データベースに書き込む。
2.次いで、ドライバアドミニストレータは、ドライバモジュールにそのCLSIDについて問い合わせしなければならない。ドライバのエクスポートされたファンクションDLLGetCLSIDをコールすると、CLSIDが返送される。ドライバアドミニストレータは、CLSIDを得ると、標準的なOLEファンクションCoCreateInstanceをコールすることによりドライバのインスタンスを形成することができる。
3.CoCreateInstanceは、CDriverObjectにより実施されるICOM_Base::Initialize方法をコールすることによりコンポーネントを自動的に初期化する。
4.ICOM_Base::Initializeの実施は、CDriverCoreDispにそれ自身を初期化するように指令する。
5.その初期化内で、CDriverCoreDispオブジェクトは、CCommandMgrでスタートして、そのマネージャーオブジェクトの各々を初期化する。
6.その初期化中に、CCommandMgrは、CCommandDatabaseにそれ自身をロードするように指令する。
7.データベースをロードするために、CCommandDatabaseオブジェクトは、データベースを読み取り、そしてデータベースエレメントのCSPIInfoリストを形成する。
8.CCommandMgrを初期化した後に、CDriverCoreDispオブジェクトは、CDriverInfoMgrオブジェクトにCDriverInfoオブジェクトを形成するように指令し、これは、後で、言語ドライバ44コンポーネントの内部状態を記憶する。
9.CDriverInfoMgrオブジェクトは、CDriverInfoオブジェクトを形成形成しそしてそれをディスパッチオブジェクトに返送する。このオブジェクトのポインタは、後で、CDriverObjectがICOM_Base2::SetStateHandleをコールするときに、コンポーネント状態ハンドルに記憶される。
10.次いで、CDrvCoreDispオブジェクトは、全てのストリームオペレーションを実行するのに使用されるCStreamMgrを初期化する。
11.次いで、CDrvCoreDispオブジェクトは、全ての登録データベースオペレーションを実行するのに使用されるCRegistryMgrを初期化する。
12.最後に、CDriverObjectは、CDrvExtDispオブジェクトを初期化する。
7.データベースをロードするために、CCommandDatabaseオブジェクトは、データベースを読み取り、そしてデータベースエレメントのCSPIInfoリストを形成する。
8.CCommandMgrを初期化した後に、CDriverCoreDispオブジェクトは、CDriverInfoMgrオブジェクトにCDriverInfoオブジェクトを形成するように指令し、これは、後で、言語ドライバ44コンポーネントの内部状態を記憶する。
9.CDriverInfoMgrオブジェクトは、CDriverInfoオブジェクトを形成形成しそしてそれをディスパッチオブジェクトに返送する。このオブジェクトのポインタは、後で、CDriverObjectがICOM_Base2::SetStateHandleをコールするときに、コンポーネント状態ハンドルに記憶される。
10.次いで、CDrvCoreDispオブジェクトは、全てのストリームオペレーションを実行するのに使用されるCStreamMgrを初期化する。
11.次いで、CDrvCoreDispオブジェクトは、全ての登録データベースオペレーションを実行するのに使用されるCRegistryMgrを初期化する。
12.最後に、CDriverObjectは、CDrvExtDispオブジェクトを初期化する。
全ての初期化は、COM Auto−Initメカニズムを介して開始されることに注意されたい。Auto−Initは、オブジェクトを形成するときに生じる。CoCreateInstanceをコールするか又はIClassFactory::CreateInstance方法をコールするときに、内部のCOM実施体は、ICOM_Base::Initialize方法をコールする。この方法は、このセクションに述べる完全な初期化プロセスを開始する。
ドライバを初期化した後に、ドライバアドミニストレータは、それに対してオペレーションを実行する。例えば、ドライバアドミニストレータは、ドライバにストリームを追加又は除去するように要求する。図61は、ドライバが新たなストリームを追加するように要求されたときに生じる事象のシーケンスを示す。
ストリームを追加するときには、次のステップが生じる。
1.ドライバアドミニストレータは、ドライバに新たなストリームを追加するよう指令し、そして追加されるべきストリームのファイル名及びCLSIDをドライバへ通す。
2.次いで、ドライバは、ファイル名及びCLSIDをCDriverObjectオブジェクトへ通し、そしてそのCLNGStreamMgmt::AddStreamに埋め込まれたC++クラス方法をコールすることによりストリームを追加するようにそれに指令する。
3.OLEインターフェイスを実施する埋め込まれたC++オブジェクトは、CDrvExtDispオブジェクトにストリームを追加するよう指令し、それにコンポーネント状態データのハンドルを通す。
4.CDrvExtDispオブジェクトは、先ず、コンポーネント状態データをCDriverInfoオブジェクトのポインタへ挿入する。
5.次いで、CStreamMgrは、CDriverInfoオブジェクトポインタに接続され、そして新たなストリームを追加するように指令される。
6.新たなストリームを追加するために、CStreamMgrは、CSimpleStreamを用いて、ストリームコンポーネントをロードしそして形成する。
7.CSimpleStreamオブジェクトは、先ず、ファンクションポインタを、コンポーネントによりエクスポーズされたDllGetCLSID、DllGetModuleType及びDllRegisterServerファンクションにセットする。モジュールをロードする前に、CSimpleStreamは、先ず、モジュール形式をXMC_STREAM_MTモジュール形式と比較することによりモジュールが実際にXMCストリームであることを確保する。もしそうであれば、コンポーネントは、OLEコンポーネントとして登録データベースに登録される。
8.手前のステップで問い合わせされたDllGetCLSIDを用いて、CSimpleStreamは、コンポーネントCLSIDを得、そしてOLEオブジェクトのインスタンスをロードするためにCoCreatelnstanceをコールする。
9.CSimpleStreamが完了した後に、CStreamMgrは、ストリームをCDriverInfoのストリームアレーに追加する。
1.ドライバアドミニストレータは、ドライバに新たなストリームを追加するよう指令し、そして追加されるべきストリームのファイル名及びCLSIDをドライバへ通す。
2.次いで、ドライバは、ファイル名及びCLSIDをCDriverObjectオブジェクトへ通し、そしてそのCLNGStreamMgmt::AddStreamに埋め込まれたC++クラス方法をコールすることによりストリームを追加するようにそれに指令する。
3.OLEインターフェイスを実施する埋め込まれたC++オブジェクトは、CDrvExtDispオブジェクトにストリームを追加するよう指令し、それにコンポーネント状態データのハンドルを通す。
4.CDrvExtDispオブジェクトは、先ず、コンポーネント状態データをCDriverInfoオブジェクトのポインタへ挿入する。
5.次いで、CStreamMgrは、CDriverInfoオブジェクトポインタに接続され、そして新たなストリームを追加するように指令される。
6.新たなストリームを追加するために、CStreamMgrは、CSimpleStreamを用いて、ストリームコンポーネントをロードしそして形成する。
7.CSimpleStreamオブジェクトは、先ず、ファンクションポインタを、コンポーネントによりエクスポーズされたDllGetCLSID、DllGetModuleType及びDllRegisterServerファンクションにセットする。モジュールをロードする前に、CSimpleStreamは、先ず、モジュール形式をXMC_STREAM_MTモジュール形式と比較することによりモジュールが実際にXMCストリームであることを確保する。もしそうであれば、コンポーネントは、OLEコンポーネントとして登録データベースに登録される。
8.手前のステップで問い合わせされたDllGetCLSIDを用いて、CSimpleStreamは、コンポーネントCLSIDを得、そしてOLEオブジェクトのインスタンスをロードするためにCoCreatelnstanceをコールする。
9.CSimpleStreamが完了した後に、CStreamMgrは、ストリームをCDriverInfoのストリームアレーに追加する。
初期化の後に、ドライバから要求される別のオペレーションは、現在設定についてそれに問い合わせすることである。サポートするハードウェアの名前のようなドライバに関する情報を表示した後に、ドライバアドミニストレータは、その情報についてドライバに問い合わせする。図62は、ドライバの設定についてドライバに問い合わせするプロセスを例示する。
情報についてドライバに問い合わせるときには、次のステップが行われる。
1.ドライバアドミニストレータは、ドライバの情報を問い合わせるのに使用されるインターフェイス方法をコールし、そしてそのコールをXMC_DRIVER_INFO構造体のポインタへ通す。
2.そのコールは、CDriverObjectの埋め込まれたC++クラスにより実施されるOLEインターフェイス方法の実施により取り扱われる。
3.インターフェイスを取り扱うのに使用される埋め込まれたC++オブジェクトは、CDrvCoreDisp又はCDrvExtDispオブジェクトにオペレーションを実行するよう指令し、そしてオブジェクトハンドルをコンポーネント状態データへ通す。
4.ディスパッチオブジェクトは、状態ハンドルをCDriverInfoオブジェクトポインタへ挿入する。いったん変換されると、CDriverInfoオブジェクトは、適当なデータについて問い合わされる。
1.ドライバアドミニストレータは、ドライバの情報を問い合わせるのに使用されるインターフェイス方法をコールし、そしてそのコールをXMC_DRIVER_INFO構造体のポインタへ通す。
2.そのコールは、CDriverObjectの埋め込まれたC++クラスにより実施されるOLEインターフェイス方法の実施により取り扱われる。
3.インターフェイスを取り扱うのに使用される埋め込まれたC++オブジェクトは、CDrvCoreDisp又はCDrvExtDispオブジェクトにオペレーションを実行するよう指令し、そしてオブジェクトハンドルをコンポーネント状態データへ通す。
4.ディスパッチオブジェクトは、状態ハンドルをCDriverInfoオブジェクトポインタへ挿入する。いったん変換されると、CDriverInfoオブジェクトは、適当なデータについて問い合わされる。
要求があったときに、ドライバは、その全構成を登録データベースへ又はそこからセーブ又はロードすることができる。このオペレーションは、XMCドライバアドミニストレータコンポーネントにより使用され、該コンポーネントは、全てのXMC構成データを登録データベースに記憶する。図63は、XMCドライバアドミニストレータコンポーネントがドライバにその情報をレジストリからロードするよう指令するときに行われる事象のシーケンスを示す。
登録プロセス中に、次のステップが生じる。
1.先ず、ドライバによりエクスポーズされるICOM_PersistRegDB OLEインターフェイスを使用して、ドライバアドミニストレータは、コンポーネントにその構成データをロードするよう指令する。
2.全てのICOM_PersistRegDBコールを取り扱うのに使用されるCDriverObjectの埋め込まれたオブジェクトが呼び出され、オペレーションを実行する。
3.呼び出されると、埋め込まれたオブジェクトは、CDrvCoreDispオブジェクトにロードを実行するよう指令し、それにコンポーネント状態データへのハンドルを通す。
4.CDrvCoreDispオブジェクトは、先ず、状態ハンドルをCDriverInfoオブジェクトポインタへ挿入する。
5.次いで、CRegistryMgrがCDriverInfoポインタへ接続され、そしてその内容を登録データベースへ又はそこからロードするように指令される。
6.CRegistryMgrは、全ての一般的なドライバ情報をロードし、そしてCDriverInfoオブジェクトに記憶されるドライバのXMC DRIVER_INFOデータ構造体を満たす。
1.先ず、ドライバによりエクスポーズされるICOM_PersistRegDB OLEインターフェイスを使用して、ドライバアドミニストレータは、コンポーネントにその構成データをロードするよう指令する。
2.全てのICOM_PersistRegDBコールを取り扱うのに使用されるCDriverObjectの埋め込まれたオブジェクトが呼び出され、オペレーションを実行する。
3.呼び出されると、埋め込まれたオブジェクトは、CDrvCoreDispオブジェクトにロードを実行するよう指令し、それにコンポーネント状態データへのハンドルを通す。
4.CDrvCoreDispオブジェクトは、先ず、状態ハンドルをCDriverInfoオブジェクトポインタへ挿入する。
5.次いで、CRegistryMgrがCDriverInfoポインタへ接続され、そしてその内容を登録データベースへ又はそこからロードするように指令される。
6.CRegistryMgrは、全ての一般的なドライバ情報をロードし、そしてCDriverInfoオブジェクトに記憶されるドライバのXMC DRIVER_INFOデータ構造体を満たす。
7.ドライバがストリーム情報を記憶した場合には、CRegistryMgrは、ストリーム情報をロードし、そしてXMC_STREAM_INFOデータ構造体を満たす。次いで、この構造体を用いて、新たなCSimpleStreamオブジェクトが形成される。
8.ストリームを形成するときには、CSimpleStreamオブジェクトは、先ず、エクスポーズされたファンクションDllGetModuleTypeを問合せ及びコールし、そしてモジュールが実際にストリームコンポーネントであることを照合する。モジュールがそうである場合には、CSimpleStreamは、次いで、コンポーネントを登録するためにコンポーネントによりエクスポーズされたDLLRegisterServerファンクションを問合せ及びコールする。
9.コンポーネントを登録した後に、CSimpleStreamオブジェクトは、エクスポートされたファンクションDllGetCLSIDを問合せ及びコールし、コンポーネントCLSIDを得る。CLSIDを用いて、CoCreateInstanceがコールされ、OLEオブジェクトのインスタンスが形成される。
10.CSimpleStreamが完了すると、CRegistryMgrは、CStreamMgrの一時的インスタンスをCDriverInfoオブジェクトポインタに接続し、そして新たなストリームを追加するようそれに指令する。
11.CStreamMgrは、CDriverInfoのストリームアレーを直接操作して新たなストリームを追加する。追加されると、CSimpleStreamオブジェクトの新たなインスタンスが形成され、そしてCStreamMgrへ通されたCSimpleStreamに付加される。
12.新たなCSimpleStreamは、それ自身がストリームに付加されると、それに通されたIXMC_StreamInitインターフェイスに、コンポーネントの参照カウントをバンプアップするのに用いた全てのインターフェイスについて問い合わせる。
8.ストリームを形成するときには、CSimpleStreamオブジェクトは、先ず、エクスポーズされたファンクションDllGetModuleTypeを問合せ及びコールし、そしてモジュールが実際にストリームコンポーネントであることを照合する。モジュールがそうである場合には、CSimpleStreamは、次いで、コンポーネントを登録するためにコンポーネントによりエクスポーズされたDLLRegisterServerファンクションを問合せ及びコールする。
9.コンポーネントを登録した後に、CSimpleStreamオブジェクトは、エクスポートされたファンクションDllGetCLSIDを問合せ及びコールし、コンポーネントCLSIDを得る。CLSIDを用いて、CoCreateInstanceがコールされ、OLEオブジェクトのインスタンスが形成される。
10.CSimpleStreamが完了すると、CRegistryMgrは、CStreamMgrの一時的インスタンスをCDriverInfoオブジェクトポインタに接続し、そして新たなストリームを追加するようそれに指令する。
11.CStreamMgrは、CDriverInfoのストリームアレーを直接操作して新たなストリームを追加する。追加されると、CSimpleStreamオブジェクトの新たなインスタンスが形成され、そしてCStreamMgrへ通されたCSimpleStreamに付加される。
12.新たなCSimpleStreamは、それ自身がストリームに付加されると、それに通されたIXMC_StreamInitインターフェイスに、コンポーネントの参照カウントをバンプアップするのに用いた全てのインターフェイスについて問い合わせる。
ドライバアドミニストレータは、ドライバを用いて実行した後に、そのエクスポーズされた解除方法をコールすることによりドライバを解除しなければならない。この方法をコールすると、ドライバは、使用した全てのリソースを解除するように指令される。図64は、ドライバコンポーネントを解除するプロセスを示す。
クリーンアッププロセス中に、次のステップが生じる。
1.先ず、XMCドライバアドミニストレータ又はXMCモーションコンポーネントは、最後のIUnknown::Releaseをコールする。
2.その呼び出し時に、CDriverObjectにより実施されるIUnknown::Release方法がコールされる。この方法のコールにより、内部のOLE参照カウントがゼロにされた後に、ドライバは、使用した全てのリソースをクリーンアッブするためにICOM_Base::Uninitializeの実施体をコールする。
3.先ず、ICOM_Base::Uninitializeは、CDrvExtDispに、それが使用したリソースをクリーンアップするよう指令する。
4.次いで、ICOM_Base::Uninitializeは、CDrvCoreDispオブジェクトに、それが使用したリソースをクリーンアップするよう指令する。
1.先ず、XMCドライバアドミニストレータ又はXMCモーションコンポーネントは、最後のIUnknown::Releaseをコールする。
2.その呼び出し時に、CDriverObjectにより実施されるIUnknown::Release方法がコールされる。この方法のコールにより、内部のOLE参照カウントがゼロにされた後に、ドライバは、使用した全てのリソースをクリーンアッブするためにICOM_Base::Uninitializeの実施体をコールする。
3.先ず、ICOM_Base::Uninitializeは、CDrvExtDispに、それが使用したリソースをクリーンアップするよう指令する。
4.次いで、ICOM_Base::Uninitializeは、CDrvCoreDispオブジェクトに、それが使用したリソースをクリーンアップするよう指令する。
5.CDrvCoreDispオブジェクトは、全てのマネージャーオブジェクトのインスタンスを含むので、最初にCCommandMgrにそれが使用したリソースをデストロイ(destroy)するよう指令することにより、それらをクリーンアップし始める。内部的に、CCommandMgrは、CCommandDatabase及びその全ての内容をデストロイする。
6.次いで、CDrvCoreDispオブジェクトは、それらのデストラクタをコールすることにより、他の全てのマネージャーオブジェクトをデストロイする。
7.最後のステップとして、ICOM_Base::Uninitialize方法は、CDriverInfoオブジェクトのポインタを含む状態ハンドルを削除する。デストロイされたときには、CDriverInfoオブジェクトは、各CSimpleStreamオブジェクトを削除し、これは、次いで、XMCストリームコンポーネントのインスタンスを解除する。XMCストリームコンポーネントの最後のインスタンスが解除されると、コンポーネントd11がメモリから解放される。
6.次いで、CDrvCoreDispオブジェクトは、それらのデストラクタをコールすることにより、他の全てのマネージャーオブジェクトをデストロイする。
7.最後のステップとして、ICOM_Base::Uninitialize方法は、CDriverInfoオブジェクトのポインタを含む状態ハンドルを削除する。デストロイされたときには、CDriverInfoオブジェクトは、各CSimpleStreamオブジェクトを削除し、これは、次いで、XMCストリームコンポーネントのインスタンスを解除する。XMCストリームコンポーネントの最後のインスタンスが解除されると、コンポーネントd11がメモリから解放される。
ドライバがXMCシステムに首尾良くインストールされそしてドライバアドミニストレータを用いて構成された後に、XMCモーションコントロールコンポーネントにより使用するための準備ができる。コンポーネントは、コンポーネントを用いてアプリケーションから要求されたモーションコントロールオペレーションを実行するときにドライバを使用する。図65は、コンポーネントから指令されたオペレーションであって、ドライバにおいて実行することのできるオペレーションを示す。
オペレーションの前に、XMCモーションコンポーネントは、そのドライバ列挙についてドライバアドミニストレータ32コンポーネントに問い合わせしなければならない。返送される列挙は、XMCモーションコンポーネントによりXMC SPIオペレーションを実行するよう指令された全てのイネーブルされたドライバをアクセスするのに使用される。
ドライバ列挙を収集すると、モーションコントロールコンポーネント35は、イネーブルされたドライバに、あるコマンドオペレーションを実行するよう指令することができる。コマンドオペレーションは、システム内の特定の位置へ移動したり又は現在位置についてシステムに問い合わせするといった標準的なモーションコントロールオペレーションである。図65は、あるオペレーションを実行するようにドライバに指令するプロセスを示す。
あるオペレーションを実行するようにドライバに指令するときには、次のステップが生じる。
1.先ず、モーションコンポーネントは、ある位置へ移動したり現在位置についてシステムに問い合わせしたりといったオペレーションを実行するようにドライバに指令する。
2.XMCSPIの呼び出しは、コンポーネントによりエクスポーズされた全てのOLEインターフェイスを実施するCDriverObjectにより取り扱われる。
3.CDriverObjectは、オペレーションがコアXMCSPIであるか拡張XMCSPIであるかに基づいて、CDrvCoreDisp又はCDrvExtDispのいずれかにオペレーションを実行するよう指令する。コンポーネントの状態ハンドルは、コール時に、ディスパッチオブジェクトへ通される。
4.ディスパッチオブジェクトは、次いで、状態ハンドルをCDriverInfoオブジェクトポインタへ挿入する。
1.先ず、モーションコンポーネントは、ある位置へ移動したり現在位置についてシステムに問い合わせしたりといったオペレーションを実行するようにドライバに指令する。
2.XMCSPIの呼び出しは、コンポーネントによりエクスポーズされた全てのOLEインターフェイスを実施するCDriverObjectにより取り扱われる。
3.CDriverObjectは、オペレーションがコアXMCSPIであるか拡張XMCSPIであるかに基づいて、CDrvCoreDisp又はCDrvExtDispのいずれかにオペレーションを実行するよう指令する。コンポーネントの状態ハンドルは、コール時に、ディスパッチオブジェクトへ通される。
4.ディスパッチオブジェクトは、次いで、状態ハンドルをCDriverInfoオブジェクトポインタへ挿入する。
5.次いで、ディスパッチオブジェクトは、CCommandMgrをCDriverInfoオブジェクトポインタに接続し、そして送られたデータベースインデックスに対応するオペレーションを実行するようにそれに指令する。データベースインデックスは、コールされたXMCSPIに対応し、そのSPIコールの言語データベースエントリーを探索するのに使用される。
6.CCommandMgrは、インデックスに対してCCommandDatabaseをサーチし、そしてXMCSPIオペレーションに対応するCCommandオブジェクトを形成する。
7.次いで、CCommandMgrは、CDriverInfoを直接アクセスし、そしてCCommandオブジェクトにより形成されたコマンドストリングを全てのイネーブルされたストリームへ通す。
8.各イネーブルされたストリームは、ASCIIテキストをそのターゲットに送信する。例えば、PCバスストリームは、そのデータを、PCバスに配置されたモーションコントロールカードへ送る。一方、テキストファイルストリームは、そのデータを、その関連テキストファイルに送信する。
9.もし所望ならば、CCommandMgrは、それに送られたコマンドの結果について第1の読み取り可能なストリームに問い合わせする。
6.CCommandMgrは、インデックスに対してCCommandDatabaseをサーチし、そしてXMCSPIオペレーションに対応するCCommandオブジェクトを形成する。
7.次いで、CCommandMgrは、CDriverInfoを直接アクセスし、そしてCCommandオブジェクトにより形成されたコマンドストリングを全てのイネーブルされたストリームへ通す。
8.各イネーブルされたストリームは、ASCIIテキストをそのターゲットに送信する。例えば、PCバスストリームは、そのデータを、PCバスに配置されたモーションコントロールカードへ送る。一方、テキストファイルストリームは、そのデータを、その関連テキストファイルに送信する。
9.もし所望ならば、CCommandMgrは、それに送られたコマンドの結果について第1の読み取り可能なストリームに問い合わせする。
10.CSimpleStreamは、ターゲットから生の応答を読み取り、そしてそれをCCommandMgrへ返送する。
11.生の応答を受け取ると、CCommandMgrは、CResponseオブジェクトを使用し、XMCSPIデータベースエントリーに対応する応答フォーマットに基づき生の応答をパーズする。全ての応答パラメータは、コールチェーンを返送され、そして最終的に、オリジナルの発呼者、即ちXMCモーションコンポーネントの手で終わる。
11.生の応答を受け取ると、CCommandMgrは、CResponseオブジェクトを使用し、XMCSPIデータベースエントリーに対応する応答フォーマットに基づき生の応答をパーズする。全ての応答パラメータは、コールチェーンを返送され、そして最終的に、オリジナルの発呼者、即ちXMCモーションコンポーネントの手で終わる。
XMCドライバコンポーネントを解除することによりXMCモーションコンポーネントによって開始されるクリーンアップは、ドライバアドミニストレータ32のオブジェクトがコンポーネントを解除するときに生じるものと同じである。
以下の説明は、エクスポーズされる実際のOLEインターフェイスと、データを通すときに使用されるデータ構造体の定義と、ドライバにより内部に使用される各クラスの定義とについて述べる。
以下のダイヤグラムは、ドライバ・コンポーネントの解釈度に対して特定にドライバによりエクスポーズされる全てのインターフェイスについて示す。図66は、コンポーネントによりエクスポーズされるインターフェイスをグラフ的に示す。
エクスポーズされる2つの標準的なインターフェイス、例えば、IUnknown及びIClassFactory以外は、コンポーネントによりエクスポーズされるインターフェイスには3つのカテゴリーがある。これら3つのカテゴリーは、次の通りである。
COM:COM_prefixを伴う全てのインターフェイス名で、一般的なCOM機能を実施する。例えば、ICOM_Base、ICOM_Base2、ICOM_Persist2及びICOM_PersistRegDBインターフェイスは、全て、このカテゴリーに入る。
LNG:LNG_prefixを伴う全てのインターフェイス名で、一般的な言語ドライバ機能を実施する。例えば、ILNG_DrvCore_Init、及びILNG_DrvExt_StreamMgmtインターフェイスは、このカテゴリーに入る。
XMC:XMC_prefixを伴う全てのインターフェイス名で、XMCSPI(ドライバ)機能を実施する。
以下のセクションは、COM及びLNGの両方のカテゴリーに入るインターフェイスについて説明する。他の全てのインターフェイスは、XMCSPIに特有のもので、モーションコントロールオペレーションを実行するという唯一の目的に使用される。
ICOM_Baseインターフェイスにおける次のエクスポーズされた方法はコンポーネントを初期化及び非初期化するのに使用される。これらの方法の各々は、全てのコンポーネントインターフェイスにより実施される隠れた初期化及び非初期化方法をコールする。
ICOM_Base2インターフェイスは、ICOM_Baseインターフェイスから引き継ぎ、そして内部コンポーネント状態ハンドルをマネージするのに使用される多数の方法を付加する。更に、ある方法は、ユーザが、コンポーネントにより返送されるHRESULTを人間が読めるテキストストリングに変換できるようにする。次は、ICOM_Base2インターフェイスの説明である。
ICOM_Persist2インターフェイスは、IPersist標準OLEインターフェイスから引き継ぎ、そしてCLSID及びモジュール形式に問い合わせるのに使用される多数の方法を追加する。次は、ICOM_Persist2インターフェイスの説明である。
ICOM_PersistRegDBインターフェイスは、IPsesistFile標準OLEインターフェイスにより与えられるものと同様の機能を実施する。ファイルへ及びファイルからデータをセーブ及びロードするのではなく、ICOM_PersistRegDBは、登録データベースに対して動作する。次は、ICOM_PersistRegDBインターフェイスの説明である。
ILNG_DrvCore_Initインターフェイスは、言語ドライバコンポーネントを初期化するのに使用される。次は、ILNG_DrvCore Initインターフェイスの説明である。
ILNG_DrvExt_StreamMgmtインターフェイスは、全てのストリームオペレーションを実行するのに使用される。次は、ILNG_DrvExt_StreamMgmtインターフェイスの説明である。
次は、ドライバDLLによりエクスポートされるファンクションである。
次の説明は、ドライバにより使用される全ての構造、列挙及び定義を示す。
XMC_DRIVER_MODULETYPE列挙は、使用可能なドライバの形式を定義する。各ドライバは、ユーザがエクスポートされたファンクションDLLGetModuleTypeファンクションをコールするときにその形式を返送しなければならない。
XMC_DRVCORE_CMD列挙は、XMCドライバに知られる各コマンドの識別子を定義する。例えば、各コアドライバファンクションは、それに対応するXMC_DRVCORE_CMD識別子を有する。このインデックスは、コマンドに対するストリングブロックをルックアップするのに使用される。この列挙の定義は、次の通りである。
XMC_DRVEXT_CMD列挙は、XMCドライバに知られる各拡張コマンドの識別子を定義する。たとえ識別子が存在しても、ドライバは、1組のコマンドを実施してもよいししなくてもよい。例えば、各拡張ドライバファンクションは、それに対応するXMC_DRVEXT_CMD識別子を有する。このインデックスは、コマンドに対するストリングブロックをルックアップするのに使用される(ドライバがコマンドを実施する場合)。この列挙の定義は、次の通りである。
LNG_PARAM_DATATYPE 列挙は、ストリームターゲットにより返送される応答ストリングからパーズされる全ての形式のデータブロックを定義する。
LNG_PARAM_DATA構造体は、コマンドへ組み込まれるか又は応答からパーズされるパラメータを示す全ての形式のデータを記憶する。
LNG_DRIVER_INFO構造体は、ドライバの状態を設定し及び問い合わせするときに使用される。
各XMCドライバは、使用される全てのストリームをマネージするという役目を果たす。各ストリームを永続的な仕方で時間と共にマネージするために、各ドライバ及びストリームモジュールは、ICOM_PersistRegDBインターフェイスを経てエクスポーズされる永続的なファンクションを実施する。ICOM_PersistRegDB::Saveのドライバ実施がコールされるときに、データは、次の順序でレジストリにセーブされる。
以上の説明から、本発明は、その本質的な特徴から逸脱せずに他の特定の形態で実施できることも明らかであろう。それ故、上記の実施形態は、全ての観点において単に本発明を例示するもので、これに限定されるものではない。本発明の範囲は、上記の説明ではなく請求の範囲により指摘され、従って、その範囲内に入る全ての変更や修正は、本発明に包含されるものとする。
Claims (18)
- 動作制御装置と通信するシステムであって、
1組の動作指令と、
少なくとも1つの動作操作は少なくとも1つの動作指令に関連している1組の動作操作と、
少なくとも1つの動作指令を実行することができる再プログラム可能な動作制御装置と、
少なくとも1つのソフトウェアモジュールは少なくとも1つの動作制御装置に関連し、少なくとも2つの選択可能なソフトウェアモジュールは共通ソフトウェアインタフェースを開示する1組の選択可能なソフトウェアモジュールと、
少なくとも1つの動作制御装置に関連している少なくとも1つの選択したソフトウェアモジュールによって開示された前記共通ソフトウェアインタフェースを用いて少なくとも1つの動作操作を行なうように少なくとも1つの動作制御装置を命じることができるソフトウェアシステム、からなるシステム。 - 前記共通ソフトウェアインタフェースの定義はプログラムによって取得可能である請求項1に記載のシステム。
- 前記共通ソフトウェアインタフェースの定義は前記1組の選択可能なソフトウェアモジュールの中の少なくとも1つの前記選択可能なソフトウェアモジュールから取得可能である請求項1に記載のシステム。
- 前記ソフトウェアモジュールが実行されるオペレーティングシステムをさらに含む請求項1に記載のシステム。
- 前記共通ソフトウェアインタフェースの定義は前記オペレーティングシステムから取得可能である請求項4に記載のシステム。
- 前記共通ソフトウェアインタフェースの定義は永続記憶媒体から取得可能である請求項1に記載のシステム。
- 前記永続記憶媒体はディスクファイルである請求項6に記載のシステム。
- 少なくとも1つの動作操作はデータを前記動作制御装置から読み込ませる請求項1に記載のシステム。
- 少なくとも1つの動作操作はデータを前記動作制御装置から受け取らせる請求項1に記載のシステム。
- 少なくとも1つの動作操作は動作データを前記動作制御装置に書き込ませる請求項1に記載のシステム。
- 少なくとも1つの動作操作は物体を動かす請求項1に記載のシステム。
- 少なくとも1つの原始的動作操作は動作装置を動かす請求項1に記載のシステム。
- 前記ソフトウェアシステムは少なくとも1つの選択可能なソフトウェアモジュールを選択するためにユーザインタフェースをさらに含む請求項1に記載のシステム。
- 前記ソフトウェアシステムは少なくとも1つの選択可能なソフトウェアモジュールをプログラムによって選択するソフトウェア機能性をさらに含む請求項1に記載のシステム。
- 少なくとも1つの選択可能なソフトウェアモジュールが選択されるのを可能にするユーザインタフェースからなる選択ソフトウェアモジュールをさらに含む請求項1に記載のシステム。
- 少なくとも1つの選択可能なソフトウェアモジュールをプログラムによって選択するソフトウェア機能性からなる選択ソフトウェアモジュールをさらに含む請求項1に記載のシステム。
- 前記動作指令は、
原始的動作指令の組み合わせでエミュレートできない機能性の原始的動作指令と、
原始的動作指令の組み合わせでエミュレートできる機能性の非原始的動作指令、からなる請求項1に記載のシステム。 - 前記動作操作は、
原始的動作操作の組み合わせでエミュレートできない機能性の原始的動作操作であり前 記原始的動作操作はそれぞれ少なくとも1つの原始的動作指令に関連する前記原始的動作操作と、
原始的動作操作の組み合わせでエミュレートできる機能性の非原始的動作操作であり前記非原始的動作操作はそれぞれ少なくとも1つの非原始的動作指令に関連する前記非原始的動作操作、からなる請求項17に記載のシステム。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US08/454,736 US5691897A (en) | 1995-05-30 | 1995-05-30 | Motion control systems |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP8536693A Division JPH11506234A (ja) | 1995-05-30 | 1996-05-30 | モーションコントロールシステム |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2007319976A Division JP2008159046A (ja) | 1995-05-30 | 2007-12-11 | モーションコントロールシステム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2007102796A true JP2007102796A (ja) | 2007-04-19 |
Family
ID=23805862
Family Applications (4)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP8536693A Pending JPH11506234A (ja) | 1995-05-30 | 1996-05-30 | モーションコントロールシステム |
JP2003174985A Pending JP2004078904A (ja) | 1995-05-30 | 2003-06-19 | モーションコントロールシステム |
JP2006272878A Pending JP2007102796A (ja) | 1995-05-30 | 2006-10-04 | モーションコントロールシステム |
JP2007319976A Pending JP2008159046A (ja) | 1995-05-30 | 2007-12-11 | モーションコントロールシステム |
Family Applications Before (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP8536693A Pending JPH11506234A (ja) | 1995-05-30 | 1996-05-30 | モーションコントロールシステム |
JP2003174985A Pending JP2004078904A (ja) | 1995-05-30 | 2003-06-19 | モーションコントロールシステム |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2007319976A Pending JP2008159046A (ja) | 1995-05-30 | 2007-12-11 | モーションコントロールシステム |
Country Status (9)
Country | Link |
---|---|
US (8) | US5691897A (ja) |
EP (5) | EP0829039B1 (ja) |
JP (4) | JPH11506234A (ja) |
AT (3) | ATE302437T1 (ja) |
AU (1) | AU6027696A (ja) |
CA (2) | CA2705404A1 (ja) |
DE (3) | DE69624237T2 (ja) |
HK (3) | HK1009531A1 (ja) |
WO (1) | WO1996038769A1 (ja) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7853645B2 (en) | 1997-10-07 | 2010-12-14 | Roy-G-Biv Corporation | Remote generation and distribution of command programs for programmable devices |
US7904194B2 (en) | 2001-02-09 | 2011-03-08 | Roy-G-Biv Corporation | Event management systems and methods for motion control systems |
US8027349B2 (en) | 2003-09-25 | 2011-09-27 | Roy-G-Biv Corporation | Database event driven motion systems |
US8073557B2 (en) | 1995-05-30 | 2011-12-06 | Roy-G-Biv Corporation | Motion control systems |
US8102869B2 (en) | 2003-09-25 | 2012-01-24 | Roy-G-Biv Corporation | Data routing systems and methods |
US8271105B2 (en) | 1995-05-30 | 2012-09-18 | Roy-G-Biv Corporation | Motion control systems |
Families Citing this family (109)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6859671B1 (en) | 1995-05-30 | 2005-02-22 | Roy-G-Biv Corporation | Application programs for motion control devices including access limitations |
US6571141B1 (en) | 1995-05-30 | 2003-05-27 | Roy-G-Biv Corporation | Application programs for motion control devices including access limitations |
US7137107B1 (en) * | 2003-04-29 | 2006-11-14 | Roy-G-Biv Corporation | Motion control systems and methods |
US20100131081A1 (en) * | 1995-05-30 | 2010-05-27 | Brown David W | Systems and methods for motion control |
US6480896B1 (en) * | 1999-10-27 | 2002-11-12 | Roy-G-Biv Corporation | Systems and methods for generating and communicating motion data through a distributed network |
US6542925B2 (en) | 1995-05-30 | 2003-04-01 | Roy-G-Biv Corporation | Generation and distribution of motion commands over a distributed network |
US20020156872A1 (en) | 2001-01-04 | 2002-10-24 | Brown David W. | Systems and methods for transmitting motion control data |
US7139843B1 (en) * | 1995-05-30 | 2006-11-21 | Roy-G-Biv Corporation | System and methods for generating and communicating motion data through a distributed network |
US7024666B1 (en) | 2002-01-28 | 2006-04-04 | Roy-G-Biv Corporation | Motion control systems and methods |
US7035697B1 (en) * | 1995-05-30 | 2006-04-25 | Roy-G-Biv Corporation | Access control systems and methods for motion control |
US6941543B1 (en) * | 1995-05-30 | 2005-09-06 | Roy-G-Biv Corporation | Motion control system and method |
US6209037B1 (en) * | 1995-05-30 | 2001-03-27 | Roy-G-Biv Corporation | Motion control systems using communication map to facilitating communication with motion control hardware |
US5887169A (en) * | 1996-03-15 | 1999-03-23 | Compaq Computer Corporation | Method and apparatus for providing dynamic entry points into a software layer |
US5822525A (en) * | 1996-05-22 | 1998-10-13 | Microsoft Corporation | Method and system for presentation conferencing |
EP0825506B1 (en) | 1996-08-20 | 2013-03-06 | Invensys Systems, Inc. | Methods and apparatus for remote process control |
JPH1165968A (ja) * | 1997-08-13 | 1999-03-09 | Nippon Telegr & Teleph Corp <Ntt> | ネットワーク管理方法及びそのシステム |
GB2319100B (en) * | 1997-11-15 | 1998-09-16 | Ibm | Hardware simulator for a transaction processing system |
US6101425A (en) * | 1997-11-26 | 2000-08-08 | Allen-Bradley Company, Llc | Multiple connection networked man-machine interfaces for computer numerical controls |
US6144895A (en) * | 1997-11-26 | 2000-11-07 | Allen-Bradley Company, Llc | System and method for networking a computer numerical control with a workstation |
US6470377B1 (en) | 1997-12-19 | 2002-10-22 | Rockwell Automation Technologies, Inc. | Networked file operations for computer numerical controls |
FR2789781B1 (fr) * | 1999-02-12 | 2001-04-27 | Alstom | Systeme de developpement et d'execution d'une application d'assistance a la conduite pour ensemble de commande d'installation industrielle |
US6944584B1 (en) | 1999-04-16 | 2005-09-13 | Brooks Automation, Inc. | System and method for control and simulation |
US6850806B2 (en) * | 1999-04-16 | 2005-02-01 | Siemens Energy & Automation, Inc. | Method and apparatus for determining calibration options in a motion control system |
US7617240B2 (en) | 1999-05-04 | 2009-11-10 | Accenture Llp | Component based task handling during claim processing |
US7013284B2 (en) * | 1999-05-04 | 2006-03-14 | Accenture Llp | Component based interface to handle tasks during claim processing |
WO2000067081A1 (en) * | 1999-05-04 | 2000-11-09 | Roy-G-Biv Corporation | Motion control devices including access limitations |
US7979382B2 (en) | 1999-05-04 | 2011-07-12 | Accenture Global Services Limited | Component based information linking during claim processing |
US7089530B1 (en) | 1999-05-17 | 2006-08-08 | Invensys Systems, Inc. | Process control configuration system with connection validation and configuration |
WO2000070531A2 (en) | 1999-05-17 | 2000-11-23 | The Foxboro Company | Methods and apparatus for control configuration |
US6788980B1 (en) | 1999-06-11 | 2004-09-07 | Invensys Systems, Inc. | Methods and apparatus for control using control devices that provide a virtual machine environment and that communicate via an IP network |
US6374195B1 (en) * | 1999-06-29 | 2002-04-16 | Daimlerchrysler Corporation | System for monitoring and tracking tool and tool performance |
US6606665B2 (en) | 1999-09-27 | 2003-08-12 | Rockwell Automation Technologies, Inc. | Multiple connection architecture for communication with a computer numerical control resident in a workstation and other networked computer numerical controls |
US6401005B1 (en) | 1999-09-27 | 2002-06-04 | Rockwell Automation Technologies, Inc. | Programmable synchronous and asynchronous block execution for a computer numerical control |
US6885898B1 (en) | 2001-05-18 | 2005-04-26 | Roy-G-Biv Corporation | Event driven motion systems |
US8032605B2 (en) | 1999-10-27 | 2011-10-04 | Roy-G-Biv Corporation | Generation and distribution of motion commands over a distributed network |
US6879862B2 (en) * | 2000-02-28 | 2005-04-12 | Roy-G-Biv Corporation | Selection and control of motion data |
US20100131078A1 (en) * | 1999-10-27 | 2010-05-27 | Brown David W | Event driven motion systems |
EP1096448A3 (en) | 1999-11-01 | 2004-01-28 | Citicorp Development Center, Inc. | Method and system for obtaining device services on a self-service transaction terminal |
DK176631B1 (da) * | 1999-12-20 | 2008-12-08 | Danfoss Drives As | Programmering af en motorstyring |
WO2001063431A1 (en) * | 2000-02-22 | 2001-08-30 | Roy-G-Biv Corporation | Generation and distribution of motion commands over a distributed network |
US7365860B2 (en) * | 2000-12-21 | 2008-04-29 | Sensory Analytics | System capable of determining applied and anodized coating thickness of a coated-anodized product |
US6674533B2 (en) * | 2000-12-21 | 2004-01-06 | Joseph K. Price | Anodizing system with a coating thickness monitor and an anodized product |
US7274463B2 (en) * | 2003-12-30 | 2007-09-25 | Sensory Analytics | Anodizing system with a coating thickness monitor and an anodized product |
WO2002071241A1 (en) * | 2001-02-09 | 2002-09-12 | Roy-G-Biv Corporation | Event management systems and methods for the distribution of motion control commands |
US6859747B2 (en) * | 2001-04-26 | 2005-02-22 | Siemens Energy & Automation, Inc. | Method and apparatus for self-calibrating a motion control system |
US6865499B2 (en) * | 2001-04-26 | 2005-03-08 | Siemens Energy & Automation, Inc. | Method and apparatus for tuning compensation parameters in a motion control system associated with a mechanical member |
US6819960B1 (en) | 2001-08-13 | 2004-11-16 | Rockwell Software Inc. | Industrial controller automation interface |
GB0120748D0 (en) | 2001-08-25 | 2001-10-17 | Lucas Aerospace Power Equip | Generator |
US20030045947A1 (en) * | 2001-08-30 | 2003-03-06 | The Boeing Company | System, method and computer program product for controlling the operation of motion devices by directly implementing electronic simulation information |
US20030069998A1 (en) * | 2001-08-31 | 2003-04-10 | Brown David W. | Motion services protocol accessible through uniform resource locator (URL) |
US7474698B2 (en) * | 2001-10-19 | 2009-01-06 | Sharp Laboratories Of America, Inc. | Identification of replay segments |
US6889118B2 (en) * | 2001-11-28 | 2005-05-03 | Evolution Robotics, Inc. | Hardware abstraction layer for a robot |
US7532955B2 (en) * | 2002-02-25 | 2009-05-12 | General Electric Company | Distributed protection system for power distribution systems |
US7111195B2 (en) * | 2002-02-25 | 2006-09-19 | General Electric Company | Method and system for external clock to obtain multiple synchronized redundant computers |
US7747356B2 (en) | 2002-02-25 | 2010-06-29 | General Electric Company | Integrated protection, monitoring, and control system |
US6892115B2 (en) * | 2002-02-25 | 2005-05-10 | General Electric Company | Method and apparatus for optimized centralized critical control architecture for switchgear and power equipment |
DE10221772A1 (de) * | 2002-05-15 | 2003-11-27 | Flowtec Ag | Variables Feldgerät für die Prozeßautomation |
US7137861B2 (en) * | 2002-11-22 | 2006-11-21 | Carr Sandra L | Interactive three-dimensional multimedia I/O device for a computer |
US7636616B2 (en) * | 2003-02-25 | 2009-12-22 | General Electric Company | Protection system for power distribution systems |
US7039822B2 (en) * | 2003-02-27 | 2006-05-02 | Promos Technologies Inc. | Integrated circuit memory architecture with selectively offset data and address delays to minimize skew and provide synchronization of signals at the input/output section |
GB2401467B (en) * | 2003-05-09 | 2006-01-25 | Autoliv Dev | Improvements in or relating to a movable or removable unit for a motor vehicle |
US8126742B2 (en) | 2003-05-09 | 2012-02-28 | Accenture Global Services Limited | Automated assignment of insurable events |
US20070022194A1 (en) * | 2003-09-25 | 2007-01-25 | Brown David W | Database event driven motion systems |
US20060250401A1 (en) * | 2005-05-06 | 2006-11-09 | Patrick Pannese | Systems and methods for generating 3D simulations |
US20070269297A1 (en) | 2003-11-10 | 2007-11-22 | Meulen Peter V D | Semiconductor wafer handling and transport |
US10086511B2 (en) | 2003-11-10 | 2018-10-02 | Brooks Automation, Inc. | Semiconductor manufacturing systems |
US7458763B2 (en) | 2003-11-10 | 2008-12-02 | Blueshift Technologies, Inc. | Mid-entry load lock for semiconductor handling system |
WO2005048086A2 (en) * | 2003-11-17 | 2005-05-26 | Roy-G-Biv Corporation | Command processing systems and methods |
US7266425B2 (en) * | 2004-09-30 | 2007-09-04 | Rockwell Automation Technologies, Inc. | Systems and methods that facilitate motion control through coordinate system transformations |
WO2007047986A1 (en) * | 2005-10-21 | 2007-04-26 | Wisconsin Alumni Research Foundation | Method and system for delivering nucleic acid into a target cell |
US8015236B2 (en) * | 2005-10-25 | 2011-09-06 | Waratek Pty. Ltd. | Replication of objects having non-primitive fields, especially addresses |
US7933786B2 (en) | 2005-11-01 | 2011-04-26 | Accenture Global Services Limited | Collaborative intelligent task processor for insurance claims |
US20070247430A1 (en) * | 2006-04-21 | 2007-10-25 | Aten International Co., Ltd. | Keyboard and mouse operation data recording/reproducing system and method thereof |
US7620477B2 (en) * | 2006-07-05 | 2009-11-17 | Battelle Energy Alliance, Llc | Robotic intelligence kernel |
US8965578B2 (en) | 2006-07-05 | 2015-02-24 | Battelle Energy Alliance, Llc | Real time explosive hazard information sensing, processing, and communication for autonomous operation |
US7584020B2 (en) * | 2006-07-05 | 2009-09-01 | Battelle Energy Alliance, Llc | Occupancy change detection system and method |
US8073564B2 (en) * | 2006-07-05 | 2011-12-06 | Battelle Energy Alliance, Llc | Multi-robot control interface |
US8271132B2 (en) | 2008-03-13 | 2012-09-18 | Battelle Energy Alliance, Llc | System and method for seamless task-directed autonomy for robots |
US7668621B2 (en) * | 2006-07-05 | 2010-02-23 | The United States Of America As Represented By The United States Department Of Energy | Robotic guarded motion system and method |
US7801644B2 (en) * | 2006-07-05 | 2010-09-21 | Battelle Energy Alliance, Llc | Generic robot architecture |
US7211980B1 (en) | 2006-07-05 | 2007-05-01 | Battelle Energy Alliance, Llc | Robotic follow system and method |
US8355818B2 (en) * | 2009-09-03 | 2013-01-15 | Battelle Energy Alliance, Llc | Robots, systems, and methods for hazard evaluation and visualization |
US7587260B2 (en) * | 2006-07-05 | 2009-09-08 | Battelle Energy Alliance, Llc | Autonomous navigation system and method |
US7974738B2 (en) * | 2006-07-05 | 2011-07-05 | Battelle Energy Alliance, Llc | Robotics virtual rail system and method |
US20080058993A1 (en) * | 2006-09-05 | 2008-03-06 | Okuma America Corporation | System, Methods, Apparatuses and Computer Program Products for Use on a Machine Tool Controller |
US8782547B2 (en) * | 2007-08-20 | 2014-07-15 | Honeywell International Inc. | Configurable building control system display |
US8209673B1 (en) * | 2007-09-25 | 2012-06-26 | Nvidia Corporation | SLI approval policy database |
US20090210476A1 (en) * | 2008-02-19 | 2009-08-20 | Joseph Arie Levy | System and method for providing tangible feedback according to a context and personality state |
US8515786B2 (en) * | 2008-02-22 | 2013-08-20 | Accenture Global Services Gmbh | Rule generation system adapted for an insurance claim processing system |
US20090217146A1 (en) * | 2008-02-22 | 2009-08-27 | Eugene Goldfarb | Page navigation generation system for a customizable application |
US8478769B2 (en) * | 2008-02-22 | 2013-07-02 | Accenture Global Services Limited | Conversational question generation system adapted for an insurance claim processing system |
CN104407518B (zh) | 2008-06-20 | 2017-05-31 | 因文西斯系统公司 | 对用于过程控制的实际和仿真设施进行交互的系统和方法 |
US8688258B2 (en) | 2008-09-11 | 2014-04-01 | Rockwell Automation Technologies, Inc. | Method of controlling a machine tool |
JP2010072804A (ja) * | 2008-09-17 | 2010-04-02 | Ricoh Co Ltd | ドライブ制御装置とプログラム |
US8127060B2 (en) | 2009-05-29 | 2012-02-28 | Invensys Systems, Inc | Methods and apparatus for control configuration with control objects that are fieldbus protocol-aware |
US8463964B2 (en) | 2009-05-29 | 2013-06-11 | Invensys Systems, Inc. | Methods and apparatus for control configuration with enhanced change-tracking |
US20110169832A1 (en) * | 2010-01-11 | 2011-07-14 | Roy-G-Biv Corporation | 3D Motion Interface Systems and Methods |
JP5062499B2 (ja) * | 2010-05-07 | 2012-10-31 | 横河電機株式会社 | フィールド機器管理装置 |
CN102339036A (zh) * | 2010-07-16 | 2012-02-01 | 深圳富泰宏精密工业有限公司 | 机台运动控制系统 |
US9063535B2 (en) * | 2011-12-22 | 2015-06-23 | Fanuc Robotics America Corporation | Numerical control program execution by robot |
WO2013099031A1 (ja) * | 2011-12-28 | 2013-07-04 | 株式会社安川電機 | エンジニアリングツール |
CN102880153B (zh) * | 2012-10-15 | 2015-06-24 | 中达光电工业(吴江)有限公司 | 使用不同运动控制产品的pcb钻铣设备的运行方法及系统 |
CN103197597B (zh) * | 2013-04-09 | 2015-11-04 | 上海维宏电子科技股份有限公司 | 与人机交互界面相分离的运动控制系统的升级控制的方法 |
CN103605363B (zh) * | 2013-09-16 | 2016-08-17 | 江苏若博机器人科技有限公司 | 基于arm9的四轮微电脑鼠冲刺控制器 |
US9614371B1 (en) | 2014-08-06 | 2017-04-04 | Tsuga Engineering Llc | Interface systems and methods for portable structures |
CN104765321B (zh) * | 2015-01-22 | 2018-09-28 | 镇江同舟螺旋桨有限公司 | 一种兼容多种现场总线协议的运动控制器 |
WO2018158956A1 (ja) * | 2017-03-03 | 2018-09-07 | 三菱電機株式会社 | データ処理装置、データ処理方法、設定管理装置およびデータ処理システム |
CN107807880B (zh) * | 2017-09-28 | 2021-03-19 | 中国科学院长春光学精密机械与物理研究所 | 多自由度运动控制系统调试方法 |
CN117539560A (zh) * | 2023-11-30 | 2024-02-09 | 北京海芬灵肯科技有限公司 | 一种基于软件驱动的设备通讯控制操作系统及方法 |
Family Cites Families (242)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4531182A (en) * | 1969-11-24 | 1985-07-23 | Hyatt Gilbert P | Machine control system operating from remote commands |
US4829419A (en) * | 1970-12-28 | 1989-05-09 | Hyatt Gilbert P | Microcomputer control of machines |
US3673455A (en) * | 1970-11-18 | 1972-06-27 | Gen Electric | High speed sensor for initiating circuit breaker tripping |
US4078195A (en) * | 1976-01-13 | 1978-03-07 | Macotech Corporation | Adaptive control system for numerically controlled machine tools |
US4092532A (en) * | 1976-11-10 | 1978-05-30 | The United Sates Of America As Represented By The Secretary Of The Navy | Binary apparatus for motion control |
US4199814A (en) * | 1977-10-12 | 1980-04-22 | Digitcom, Inc. | Computer numerical control machine tool |
US4159417A (en) | 1977-10-28 | 1979-06-26 | Rubincam David P | Electronic book |
US4422150A (en) * | 1980-05-23 | 1983-12-20 | The Boeing Company | Machine tool controller and part inspection monitor |
US4418381A (en) | 1981-01-23 | 1983-11-29 | Bristol Babcock Inc. | Single loop control system |
US4444061A (en) * | 1982-03-26 | 1984-04-24 | Camtech Inc. | Force and torque sensor for machine tools |
JPS58175003A (ja) * | 1982-04-07 | 1983-10-14 | Fanuc Ltd | 数値制御指令方式 |
US4800521A (en) * | 1982-09-21 | 1989-01-24 | Xerox Corporation | Task control manager |
US4688195A (en) * | 1983-01-28 | 1987-08-18 | Texas Instruments Incorporated | Natural-language interface generating system |
US4494060A (en) * | 1983-03-02 | 1985-01-15 | Anorad Corporation | Axis controller for robotic actuator |
US4709339A (en) * | 1983-04-13 | 1987-11-24 | Fernandes Roosevelt A | Electrical power line parameter measurement apparatus and systems, including compact, line-mounted modules |
JPS59228473A (ja) | 1983-06-09 | 1984-12-21 | Canon Inc | 雲台システム制御装置 |
US4799171A (en) * | 1983-06-20 | 1989-01-17 | Kenner Parker Toys Inc. | Talk back doll |
US4589074A (en) * | 1983-08-31 | 1986-05-13 | The Boeing Company | Multiple channel power line monitor |
US4607256A (en) * | 1983-10-07 | 1986-08-19 | Honeywell, Inc. | Plant management system |
US4563906A (en) * | 1983-11-23 | 1986-01-14 | Camtech, Inc. | Load measurement apparatus including miniature instrumented hydrostatic cell |
FR2556866B1 (fr) * | 1983-12-15 | 1987-08-21 | Giravions Dorand | Procede et dispositif d'entrainement a la conduite d'engins mobiles. |
NL8400186A (nl) * | 1984-01-20 | 1985-08-16 | Philips Nv | Processorsysteem bevattende een aantal stations verbonden door een kommunikatienetwerk, alsmede station voor gebruik in zo een processorsysteem. |
US4672555A (en) * | 1984-10-18 | 1987-06-09 | Massachusetts Institute Of Technology | Digital ac monitor |
US4713808A (en) | 1985-11-27 | 1987-12-15 | A T & E Corporation | Watch pager system and communication protocol |
JPH0782498B2 (ja) * | 1985-01-14 | 1995-09-06 | 株式会社日立製作所 | 機械翻訳システム |
US4837719A (en) * | 1985-02-19 | 1989-06-06 | Kenneth B. McIntosh | Medication clock |
CA1244555A (en) * | 1985-06-17 | 1988-11-08 | Walter H. Schwane | Process transparent multi storage mode data transfer and buffer control |
US4809335A (en) | 1985-10-24 | 1989-02-28 | Rumsey Daniel S | Speech unit for dolls and other toys |
US4767334A (en) | 1985-11-19 | 1988-08-30 | Thorne Hugh C | Educational and recreational toy vehicle |
US4897835A (en) | 1985-11-27 | 1990-01-30 | At&E Corporation | High capacity protocol with multistation capability |
US4695792A (en) * | 1985-12-16 | 1987-09-22 | Ecole Polytechnique | Method and system for measuring the amplitude and phase angle of harmonics in a periodic signal |
US4782444A (en) * | 1985-12-17 | 1988-11-01 | International Business Machine Corporation | Compilation using two-colored pebbling register allocation method such that spill code amount is invariant with basic block's textual ordering |
JP2525358B2 (ja) * | 1986-01-25 | 1996-08-21 | フアナツク株式会社 | ロボツト制御装置 |
US4937759A (en) | 1986-02-18 | 1990-06-26 | Robotics Research Corporation | Industrial robot with controller |
US4843566A (en) * | 1986-03-07 | 1989-06-27 | Hewlett-Packard Company | Robot motion control system |
US4853877A (en) * | 1986-04-21 | 1989-08-01 | Hewlett-Packard Company | Apparatus and method for efficient plotting |
JPS6318403A (ja) * | 1986-07-10 | 1988-01-26 | Fanuc Ltd | オフライン制御実行方法 |
FR2602560B1 (fr) * | 1986-08-06 | 1990-11-02 | Valeo | Unite d'embrayage, et applications notamment friction d'embrayage, embrayage et organe d'accouplement hydraulique comportant une telle unite, en particulier pour vehicule automobile |
US5029214A (en) * | 1986-08-11 | 1991-07-02 | Hollander James F | Electronic speech control apparatus and methods |
US4908746A (en) * | 1986-10-15 | 1990-03-13 | United States Data Corporation | Industrial control system |
US4829219A (en) * | 1986-11-20 | 1989-05-09 | Unimation Inc. | Multiaxis robot having improved motion control through variable acceleration/deceleration profiling |
US4868474A (en) * | 1986-11-20 | 1989-09-19 | Westinghouse Electric Corp. | Multiprocessor position/velocity servo control for multiaxis digital robot control system |
EP0275826A1 (en) * | 1986-12-16 | 1988-07-27 | Ciba-Geigy Ag | Control system for a sample preparation system |
US4846693A (en) | 1987-01-08 | 1989-07-11 | Smith Engineering | Video based instructional and entertainment system using animated figure |
US4840602A (en) | 1987-02-06 | 1989-06-20 | Coleco Industries, Inc. | Talking doll responsive to external signal |
US4857030A (en) | 1987-02-06 | 1989-08-15 | Coleco Industries, Inc. | Conversing dolls |
CA1338909C (en) | 1987-03-05 | 1997-02-11 | Curtis M. Brubaker | Radio control toy |
US4716458A (en) * | 1987-03-06 | 1987-12-29 | Heitzman Edward F | Driver-vehicle behavior display apparatus |
DE3883817T2 (de) * | 1987-03-20 | 1994-02-03 | Canon Kk | Datenübertragungssystem. |
US4852047A (en) * | 1987-04-14 | 1989-07-25 | Universal Automation Inc. | Continuous flow chart, improved data format and debugging system for programming and operation of machines |
JPS63273105A (ja) * | 1987-04-30 | 1988-11-10 | Fanuc Ltd | 数値制御装置 |
JPH0679290B2 (ja) * | 1987-05-31 | 1994-10-05 | 日本電気株式会社 | コンピュ−タ装置 |
US4901218A (en) * | 1987-08-12 | 1990-02-13 | Renishaw Controls Limited | Communications adaptor for automated factory system |
US4855725A (en) | 1987-11-24 | 1989-08-08 | Fernandez Emilio A | Microprocessor based simulated book |
US5025385A (en) | 1988-04-15 | 1991-06-18 | Froyd Stanley G | Multiple axis motion control system |
US4923428A (en) * | 1988-05-05 | 1990-05-08 | Cal R & D, Inc. | Interactive talking toy |
EP0346801B1 (de) * | 1988-06-17 | 1996-12-27 | Siemens Aktiengesellschaft | Verfahren und Anordnung zur Ausführung eines Programms in einem heterogenen Mehrrechnersystem |
FR2633414B1 (fr) * | 1988-06-27 | 1993-07-09 | Bull Sa | Systeme informatique a interconnexion centrale |
US4887966A (en) | 1988-06-30 | 1989-12-19 | Gellerman Floyd R | Flight simulation control apparatus |
US4962491A (en) * | 1988-10-13 | 1990-10-09 | Schaeffer Theodore S | Medicament dispenser and medical information storage apparatus |
BR8805485A (pt) | 1988-10-17 | 1990-06-05 | Brasil Compressores Sa | Circuito eletronico de controle para motor de corrente continua sem escovas |
US5309351A (en) * | 1988-10-27 | 1994-05-03 | Texas Instruments Incorporated | Communications, information, maintenance diagnostic and training system |
US4983955A (en) * | 1988-11-28 | 1991-01-08 | Hendry Mechanical Works | Electric power supply circuit monitoring systems |
US5230049A (en) * | 1988-11-29 | 1993-07-20 | International Business Machines Corporation | Program source code translator |
US5014208A (en) * | 1989-01-23 | 1991-05-07 | Siemens Corporate Research, Inc. | Workcell controller employing entity-server model for physical objects and logical abstractions |
US5005135A (en) * | 1989-03-22 | 1991-04-02 | Cincinnati Milacron, Inc. | Dynamic correction of servo following errors in a computer-numerically controlled system and fixed cycle utilizing same |
US5119318A (en) * | 1989-04-17 | 1992-06-02 | Del Partners L.P. | Expert control system for real time management of automated factory equipment |
JP2982010B2 (ja) * | 1989-06-23 | 1999-11-22 | 三菱電機株式会社 | 数値制御方法及び装置 |
JP2784811B2 (ja) | 1989-08-25 | 1998-08-06 | ソニー株式会社 | 画像作成装置 |
US5247650A (en) * | 1989-08-30 | 1993-09-21 | Industrial Technology Institute | System for combining originally software incompatible control, kinematic, and discrete event simulation systems into a single integrated simulation system |
US5146401A (en) * | 1989-09-05 | 1992-09-08 | Honeywell Inc. | Apparatus for providing a universal interface in a process control system |
US5148944A (en) * | 1989-09-29 | 1992-09-22 | Health Tech Services Corporation | Interactive medication delivery system for individual pills and caplets |
US5175817A (en) * | 1989-11-20 | 1992-12-29 | Digital Equipment Corporation | Data representation protocol for communications between different networks |
JPH0727505B2 (ja) * | 1990-02-12 | 1995-03-29 | インターナショナル・ビジネス・マシーンズ・コーポレイション | インターフェース方法及びインターフェース・システム |
US5233538A (en) * | 1990-04-02 | 1993-08-03 | Square D Company | Waveform capturing arrangement in a distributed power network |
US5224054A (en) * | 1990-04-02 | 1993-06-29 | Square D Company | Waveform capturing arrangement in distributed power network |
GB9007661D0 (en) | 1990-04-04 | 1990-05-30 | Ace Coin Equip | Amusement apparatus |
US5168441A (en) * | 1990-05-30 | 1992-12-01 | Allen-Bradley Company, Inc. | Methods for set up and programming of machine and process controllers |
US5175856A (en) | 1990-06-11 | 1992-12-29 | Supercomputer Systems Limited Partnership | Computer with integrated hierarchical representation (ihr) of program wherein ihr file is available for debugging and optimizing during target execution |
US5390304A (en) * | 1990-09-28 | 1995-02-14 | Texas Instruments, Incorporated | Method and apparatus for processing block instructions in a data processor |
US5162986A (en) | 1990-10-19 | 1992-11-10 | Allen-Bradley Company, Inc. | Remote downloading and uploading of motion control program information to and from a motion control I/O module in a programmable controller |
US5412757A (en) * | 1990-11-28 | 1995-05-02 | Kabushiki Kaisha Toshiba | Fuzzy control system |
WO1992011731A2 (en) | 1990-12-24 | 1992-07-09 | Eastman Kodak Company | Memoryless electronic camera with direct hard copy output |
US5175684A (en) | 1990-12-31 | 1992-12-29 | Trans-Link International Corp. | Automatic text translation and routing system |
US5182547A (en) * | 1991-01-16 | 1993-01-26 | High Voltage Maintenance | Neutral wire current monitoring for three-phase four-wire power distribution system |
EP0495147A1 (de) * | 1991-01-18 | 1992-07-22 | Siemens Aktiengesellschaft | Verfahren zur Bahnkorrektur bei numerisch gesteuerten Maschinen |
US5120065A (en) | 1991-02-08 | 1992-06-09 | Hasbro, Incorporated | Electronic talking board game |
WO1992015068A1 (en) | 1991-02-15 | 1992-09-03 | Incontrol, Inc. | Computer control system for generating geometric designs |
IL100990A (en) * | 1991-02-27 | 1995-10-31 | Digital Equipment Corp | Multilingual optimization compiler that uses Gladi in the production of a multi-pass cipher |
US5659753A (en) * | 1991-02-27 | 1997-08-19 | Digital Equipment Corporation | Interface for symbol table construction in a multilanguage optimizing compiler |
IL100987A (en) | 1991-02-27 | 1995-10-31 | Digital Equipment Corp | Method and device for encoding |
IL100989A (en) | 1991-02-27 | 1995-10-31 | Digital Equipment Corp | Analysis of inductive expressions in multilingual mehadoptimization |
US5291416A (en) * | 1991-03-08 | 1994-03-01 | Software Algoritms Incorporated | Event feedback for numerically controlled machine tool and network implementation thereof |
JP2636534B2 (ja) * | 1991-03-22 | 1997-07-30 | 三菱電機株式会社 | 通信システム |
FR2675282B1 (fr) | 1991-04-12 | 1995-01-20 | Info Telecom | Procede et dispositif pour materialiser une interaction virtuelle entre un objet et un support d'informations. |
US5231693A (en) * | 1991-05-09 | 1993-07-27 | The United States Of America As Represented By The Administrator, National Aeronautics And Space Administration | Telerobot control system |
US5417210A (en) * | 1992-05-27 | 1995-05-23 | International Business Machines Corporation | System and method for augmentation of endoscopic surgery |
US5485545A (en) * | 1991-06-20 | 1996-01-16 | Mitsubishi Denki Kabushiki Kaisha | Control method using neural networks and a voltage/reactive-power controller for a power system using the control method |
DE69222580T2 (de) | 1991-07-15 | 1998-04-16 | Hitachi Ltd | Bildkoder-Dekoder und Telekonferenzendstellengerät |
US5625821A (en) * | 1991-08-12 | 1997-04-29 | International Business Machines Corporation | Asynchronous or synchronous operation of event signaller by event management services in a computer system |
CA2075122A1 (en) * | 1991-09-23 | 1993-03-24 | He Holdings, Inc. | Multiple participant moving vehicle shooting gallery |
US5224006A (en) * | 1991-09-26 | 1993-06-29 | Westinghouse Electric Corp. | Electronic circuit breaker with protection against sputtering arc faults and ground faults |
AU2792392A (en) | 1991-10-18 | 1993-05-21 | Forte Communications, Inc. | Wireless transmitting and receiving device with selectable channel settings |
US5889670A (en) * | 1991-10-24 | 1999-03-30 | Immersion Corporation | Method and apparatus for tactilely responsive user interface |
US5414635A (en) * | 1991-11-08 | 1995-05-09 | Matsushita Electric Industrial Co., Ltd. | Oscilloscope with dynamic triggering determination |
EP0546682A3 (en) * | 1991-12-12 | 1993-12-08 | Ibm | Parent class shadowing |
US6400996B1 (en) * | 1999-02-01 | 2002-06-04 | Steven M. Hoffberg | Adaptive pattern recognition based control system and method |
US5329381A (en) * | 1992-02-20 | 1994-07-12 | Payne John H | Automatic engraving method and apparatus |
US5287199A (en) | 1992-02-27 | 1994-02-15 | At&T Bell Laboratories | Facsimile message processing and routing system |
US5490086A (en) * | 1992-03-06 | 1996-02-06 | Siemens Energy & Automation, Inc. | Plug-in ground fault monitor for a circuit breaker |
US5400345A (en) * | 1992-03-06 | 1995-03-21 | Pitney Bowes Inc. | Communications system to boundary-scan logic interface |
US5917840A (en) * | 1992-03-13 | 1999-06-29 | Foxboro Company | Protection against communications crosstalk in a factory process control system |
CA2087503A1 (en) | 1992-04-13 | 1993-10-14 | Lester Wayne Dunaway | Multimodal remote control device having electrically alterable keypad designations |
US5315642A (en) * | 1992-04-16 | 1994-05-24 | Canamex Corporation | Concurrent creation and transmission of text messages to multiple paging services |
US5368484A (en) | 1992-05-22 | 1994-11-29 | Atari Games Corp. | Vehicle simulator with realistic operating feedback |
US5366376A (en) * | 1992-05-22 | 1994-11-22 | Atari Games Corporation | Driver training system and method with performance data feedback |
JP2862441B2 (ja) * | 1992-07-09 | 1999-03-03 | キヤノン株式会社 | 出力制御装置及び方法 |
EP0579019B1 (de) * | 1992-07-17 | 1998-05-13 | RXS Kabelgarnituren Gesellschaft mit beschränkter Haftung | Anordnung zum Ablegen von Spleisskassetten für Lichtwellenleiter innerhalb einer Kabelmuffe |
US5402518A (en) | 1992-07-22 | 1995-03-28 | Pcvoice, Inc. | Sound storage and sound retrieval system having peripheral with hand operable switches |
JP2597802B2 (ja) | 1992-08-04 | 1997-04-09 | インターナショナル・ビジネス・マシーンズ・コーポレイション | イメージ・キャプチャ装置を制御するための方法、イメージ・キャプチャ装置及びユーザ・インターフェース |
JPH06133367A (ja) | 1992-09-23 | 1994-05-13 | Walt Disney Co:The | オーディオ、照明、アニメーション、および特殊効果の遠隔同期のための方法および装置 |
AU5363494A (en) | 1992-10-19 | 1994-05-09 | Jeffrey Scott Jani | Video and radio controlled moving and talking device |
US5541838A (en) * | 1992-10-26 | 1996-07-30 | Sharp Kabushiki Kaisha | Translation machine having capability of registering idioms |
AU5451794A (en) | 1992-10-28 | 1994-05-24 | Intellution, Inc. | A dynamic graphical system configuration utility |
US5343404A (en) * | 1992-11-12 | 1994-08-30 | Maritec Corp. | Precision digital multimeter and waveform synthesizer for multi-signals with distorted waveforms embedded in noise |
US5392382A (en) * | 1992-12-01 | 1995-02-21 | Schoppers; Marcel J. | Automated plan synthesizer and plan execution method |
US5389865A (en) | 1992-12-02 | 1995-02-14 | Cybernet Systems Corporation | Method and system for providing a tactile virtual reality and manipulator defining an interface device therefor |
EP0606790B1 (en) | 1992-12-08 | 2000-03-22 | Steven Lebensfeld | Toy having subject specific,word/phrase selectable, message delivering doll or action figure |
US5604843A (en) * | 1992-12-23 | 1997-02-18 | Microsoft Corporation | Method and system for interfacing with a computer output device |
US5390330A (en) * | 1993-02-11 | 1995-02-14 | Talati; Kirit K. | Control system and method for direct execution of software application information models without code generation |
JP2799126B2 (ja) * | 1993-03-26 | 1998-09-17 | 株式会社ナムコ | ビデオゲーム装置及びゲーム用入力装置 |
US5666161A (en) | 1993-04-26 | 1997-09-09 | Hitachi, Ltd. | Method and apparatus for creating less amount of compressd image data from compressed still image data and system for transmitting compressed image data through transmission line |
US5429140A (en) * | 1993-06-04 | 1995-07-04 | Greenleaf Medical Systems, Inc. | Integrated virtual reality rehabilitation system |
JPH06344279A (ja) * | 1993-06-07 | 1994-12-20 | Hitachi Ltd | 遠隔作業装置及び方法 |
US5405152A (en) * | 1993-06-08 | 1995-04-11 | The Walt Disney Company | Method and apparatus for an interactive video game with physical feedback |
US5734373A (en) * | 1993-07-16 | 1998-03-31 | Immersion Human Interface Corporation | Method and apparatus for controlling force feedback interface systems utilizing a host computer |
CA2167304C (en) * | 1993-07-16 | 1998-04-21 | Louis B. Rosenberg | Multi degree of freedom human-computer interface with tracking and forcefeedback |
US6057828A (en) * | 1993-07-16 | 2000-05-02 | Immersion Corporation | Method and apparatus for providing force sensations in virtual environments in accordance with host software |
US5739811A (en) * | 1993-07-16 | 1998-04-14 | Immersion Human Interface Corporation | Method and apparatus for controlling human-computer interface systems providing force feedback |
US5731804A (en) * | 1995-01-18 | 1998-03-24 | Immersion Human Interface Corp. | Method and apparatus for providing high bandwidth, low noise mechanical I/O for computer systems |
US5392207A (en) * | 1993-08-20 | 1995-02-21 | Allen-Bradley Company, Inc. | Programmable motion controller with graphical programming aid |
US5566278A (en) | 1993-08-24 | 1996-10-15 | Taligent, Inc. | Object oriented printing system |
US5377258A (en) | 1993-08-30 | 1994-12-27 | National Medical Research Council | Method and apparatus for an automated and interactive behavioral guidance system |
US5453933A (en) * | 1993-09-08 | 1995-09-26 | Hurco Companies, Inc. | CNC control system |
US5413355A (en) * | 1993-12-17 | 1995-05-09 | Gonzalez; Carlos | Electronic educational game with responsive animation |
US5566346A (en) | 1993-12-21 | 1996-10-15 | Taligent, Inc. | System for constructing hardware device interface software systems independent of operating systems including capability of installing and removing interrupt handlers |
US5511147A (en) * | 1994-01-12 | 1996-04-23 | Uti Corporation | Graphical interface for robot |
US5612869A (en) * | 1994-01-21 | 1997-03-18 | Innovative Enterprises International Corporation | Electronic health care compliance assistance |
US5438529A (en) * | 1994-01-26 | 1995-08-01 | Immersion Human Interface Corporation | Percussion input device for personal computer systems |
JPH09508719A (ja) | 1994-02-04 | 1997-09-02 | データカード・コーポレーション | カード作成装置およびその方法 |
US5485620A (en) * | 1994-02-25 | 1996-01-16 | Automation System And Products, Inc. | Integrated control system for industrial automation applications |
JPH07262025A (ja) * | 1994-03-18 | 1995-10-13 | Fujitsu Ltd | 実行制御システム |
GB2289186A (en) | 1994-04-05 | 1995-11-08 | Ibm | Collaborative working method and system |
US5754855A (en) * | 1994-04-21 | 1998-05-19 | International Business Machines Corporation | System and method for managing control flow of computer programs executing in a computer system |
US5465215A (en) * | 1994-07-07 | 1995-11-07 | Cincinnati Milacron Inc. | Numerical control method and apparatus |
US5623582A (en) * | 1994-07-14 | 1997-04-22 | Immersion Human Interface Corporation | Computer interface or control input device for laparoscopic surgical instrument and other elongated mechanical objects |
US5733131A (en) | 1994-07-29 | 1998-03-31 | Seiko Communications Holding N.V. | Education and entertainment device with dynamic configuration and operation |
US5692195A (en) | 1994-08-31 | 1997-11-25 | International Business Machines Corporation | Parent class shadowing |
US5587917A (en) * | 1994-10-17 | 1996-12-24 | Eaton Corporation | Data collection and processing for digital AC power system monitor/analyzer |
JP3325134B2 (ja) | 1994-10-21 | 2002-09-17 | パイオニア株式会社 | ビデオゲームシステム |
US5487016A (en) * | 1994-11-04 | 1996-01-23 | Eaton Corporation | Apparatus for generating a signal representative of total harmonic distortion in waveforms of an A/C electrical system |
US5724074A (en) * | 1995-02-06 | 1998-03-03 | Microsoft Corporation | Method and system for graphically programming mobile toys |
US5553609A (en) * | 1995-02-09 | 1996-09-10 | Visiting Nurse Service, Inc. | Intelligent remote visual monitoring system for home health care service |
JP3254994B2 (ja) * | 1995-03-01 | 2002-02-12 | セイコーエプソン株式会社 | 音声認識対話装置および音声認識対話処理方法 |
US5680619A (en) * | 1995-04-03 | 1997-10-21 | Mfactory, Inc. | Hierarchical encapsulation of instantiated objects in a multimedia authoring system |
US5748468A (en) * | 1995-05-04 | 1998-05-05 | Microsoft Corporation | Prioritized co-processor resource manager and method |
US5802365A (en) | 1995-05-05 | 1998-09-01 | Apple Computer, Inc. | Dynamic device matching using driver candidate lists |
GB2300991B (en) | 1995-05-15 | 1997-11-05 | Andrew Macgregor Ritchie | Serving signals to browsing clients |
JP3091135B2 (ja) * | 1995-05-26 | 2000-09-25 | 株式会社バンダイ | ゲーム装置 |
US5691897A (en) | 1995-05-30 | 1997-11-25 | Roy-G-Biv Corporation | Motion control systems |
US6209037B1 (en) * | 1995-05-30 | 2001-03-27 | Roy-G-Biv Corporation | Motion control systems using communication map to facilitating communication with motion control hardware |
US6480896B1 (en) * | 1999-10-27 | 2002-11-12 | Roy-G-Biv Corporation | Systems and methods for generating and communicating motion data through a distributed network |
US20060206219A1 (en) * | 1995-05-30 | 2006-09-14 | Brown David W | Motion control systems and methods |
US7139843B1 (en) * | 1995-05-30 | 2006-11-21 | Roy-G-Biv Corporation | System and methods for generating and communicating motion data through a distributed network |
US7137107B1 (en) * | 2003-04-29 | 2006-11-14 | Roy-G-Biv Corporation | Motion control systems and methods |
CA2586401C (en) | 1995-05-30 | 2010-07-13 | Roy-G-Biv Corporation | Motion control systems |
US20020156872A1 (en) * | 2001-01-04 | 2002-10-24 | Brown David W. | Systems and methods for transmitting motion control data |
US6859671B1 (en) * | 1995-05-30 | 2005-02-22 | Roy-G-Biv Corporation | Application programs for motion control devices including access limitations |
US7024666B1 (en) * | 2002-01-28 | 2006-04-04 | Roy-G-Biv Corporation | Motion control systems and methods |
US7035697B1 (en) * | 1995-05-30 | 2006-04-25 | Roy-G-Biv Corporation | Access control systems and methods for motion control |
US6571141B1 (en) * | 1995-05-30 | 2003-05-27 | Roy-G-Biv Corporation | Application programs for motion control devices including access limitations |
US6941543B1 (en) * | 1995-05-30 | 2005-09-06 | Roy-G-Biv Corporation | Motion control system and method |
US6542925B2 (en) * | 1995-05-30 | 2003-04-01 | Roy-G-Biv Corporation | Generation and distribution of motion commands over a distributed network |
US5691898A (en) | 1995-09-27 | 1997-11-25 | Immersion Human Interface Corp. | Safe and low cost computer peripherals with force feedback for consumer applications |
US5761669A (en) * | 1995-06-06 | 1998-06-02 | Microsoft Corporation | Controlling access to objects on multiple operating systems |
JP3968133B2 (ja) * | 1995-06-22 | 2007-08-29 | セイコーエプソン株式会社 | 音声認識対話処理方法および音声認識対話装置 |
US5752976A (en) * | 1995-06-23 | 1998-05-19 | Medtronic, Inc. | World wide patient location and data telemetry system for implantable medical devices |
US5801946A (en) | 1995-10-19 | 1998-09-01 | Kawasaki Motors Mfg. Co. | Assembly prompting system |
US5800268A (en) | 1995-10-20 | 1998-09-01 | Molnick; Melvin | Method of participating in a live casino game from a remote location |
US5898588A (en) * | 1995-10-27 | 1999-04-27 | Dainippon Screen Mfg. Co. | Method and apparatus for controlling substrate processing apparatus |
US5636994A (en) | 1995-11-09 | 1997-06-10 | Tong; Vincent M. K. | Interactive computer controlled doll |
US6100874A (en) * | 1995-11-17 | 2000-08-08 | Immersion Corporation | Force feedback mouse interface |
US5825308A (en) * | 1996-11-26 | 1998-10-20 | Immersion Human Interface Corporation | Force feedback interface having isotonic and isometric functionality |
US5752880A (en) | 1995-11-20 | 1998-05-19 | Creator Ltd. | Interactive doll |
US6061004A (en) * | 1995-11-26 | 2000-05-09 | Immersion Corporation | Providing force feedback using an interface device including an indexing function |
US5956484A (en) * | 1995-12-13 | 1999-09-21 | Immersion Corporation | Method and apparatus for providing force feedback over a computer network |
US6028593A (en) * | 1995-12-01 | 2000-02-22 | Immersion Corporation | Method and apparatus for providing simulated physical interactions within computer generated environments |
US6169540B1 (en) * | 1995-12-01 | 2001-01-02 | Immersion Corporation | Method and apparatus for designing force sensations in force feedback applications |
US6219032B1 (en) * | 1995-12-01 | 2001-04-17 | Immersion Corporation | Method for providing force feedback to a user of an interface device based on interactions of a controlled cursor with graphical elements in a graphical user interface |
US6161126A (en) * | 1995-12-13 | 2000-12-12 | Immersion Corporation | Implementing force feedback over the World Wide Web and other computer networks |
US6078308A (en) * | 1995-12-13 | 2000-06-20 | Immersion Corporation | Graphical click surfaces for force feedback applications to provide user selection using cursor interaction with a trigger position within a boundary of a graphical object |
US6305011B1 (en) | 1996-01-16 | 2001-10-16 | Sun Microsystems, Inc. | Tip technology and its application to sparcompiler pascal |
US5646912A (en) * | 1996-01-25 | 1997-07-08 | Cousin; Damon S. | Medication compliance, co-ordination and dispensing system |
JPH09209800A (ja) * | 1996-02-05 | 1997-08-12 | Honda Motor Co Ltd | 内燃機関の吸入空気量制御装置 |
US5805785A (en) | 1996-02-27 | 1998-09-08 | International Business Machines Corporation | Method for monitoring and recovery of subsystems in a distributed/clustered system |
US5746602A (en) | 1996-02-27 | 1998-05-05 | Kikinis; Dan | PC peripheral interactive doll |
US5737523A (en) | 1996-03-04 | 1998-04-07 | Sun Microsystems, Inc. | Methods and apparatus for providing dynamic network file system client authentication |
US5764155A (en) | 1996-04-03 | 1998-06-09 | General Electric Company | Dynamic data exchange server |
US5846132A (en) | 1996-04-10 | 1998-12-08 | William W. Junkin Trust | Interactive system allowing simulated or real time participation in a league |
US5666264A (en) | 1996-05-13 | 1997-09-09 | Nematron Corporation | Industrial computer workstation |
US6374255B1 (en) * | 1996-05-21 | 2002-04-16 | Immersion Corporation | Haptic authoring |
US5805442A (en) | 1996-05-30 | 1998-09-08 | Control Technology Corporation | Distributed interface architecture for programmable industrial control systems |
JP3832517B2 (ja) * | 1996-07-05 | 2006-10-11 | セイコーエプソン株式会社 | ロボット用コントローラ及びその制御方法 |
US6038603A (en) * | 1997-03-25 | 2000-03-14 | Oracle Corporation | Processing customized uniform resource locators |
US6020876A (en) * | 1997-04-14 | 2000-02-01 | Immersion Corporation | Force feedback interface with selective disturbance filter |
US6233545B1 (en) * | 1997-05-01 | 2001-05-15 | William E. Datig | Universal machine translator of arbitrary languages utilizing epistemic moments |
US6012961A (en) * | 1997-05-14 | 2000-01-11 | Design Lab, Llc | Electronic toy including a reprogrammable data storage device |
CA2205797C (en) * | 1997-05-22 | 2001-04-24 | Andrew Wilfred Macleod | A system for local context spilling for graph colouring register allocators |
US6425118B1 (en) * | 1997-07-18 | 2002-07-23 | Compaq Computer Corporation | System for automatically generating tests to ensure binary compatibility between software components produced by a source-to-source computer language translator |
JP3352611B2 (ja) * | 1997-07-24 | 2002-12-03 | 株式会社日立製作所 | スイッチングルータ |
CA2211515C (en) * | 1997-07-25 | 2001-12-11 | Kevin Alexander Stoodley | System and method of local data alignment for stack memory |
US6252579B1 (en) * | 1997-08-23 | 2001-06-26 | Immersion Corporation | Interface device and method for providing enhanced cursor control with force feedback |
US20010032278A1 (en) | 1997-10-07 | 2001-10-18 | Brown Stephen J. | Remote generation and distribution of command programs for programmable devices |
US6243078B1 (en) * | 1998-06-23 | 2001-06-05 | Immersion Corporation | Pointing device with forced feedback button |
US6252583B1 (en) * | 1997-11-14 | 2001-06-26 | Immersion Corporation | Memory and force output management for a force feedback system |
US6083104A (en) * | 1998-01-16 | 2000-07-04 | Silverlit Toys (U.S.A.), Inc. | Programmable toy with an independent game cartridge |
US6173316B1 (en) * | 1998-04-08 | 2001-01-09 | Geoworks Corporation | Wireless communication device with markup language based man-machine interface |
US6678713B1 (en) * | 1998-04-29 | 2004-01-13 | Xerox Corporation | Machine control using a schedulerlock construct |
US6519594B1 (en) * | 1998-11-14 | 2003-02-11 | Sony Electronics, Inc. | Computer-implemented sharing of java classes for increased memory efficiency and communication method |
US6546436B1 (en) * | 1999-03-30 | 2003-04-08 | Moshe Fainmesser | System and interface for controlling programmable toys |
US6791531B1 (en) * | 1999-06-07 | 2004-09-14 | Dot On, Inc. | Device and method for cursor motion control calibration and object selection |
US6401005B1 (en) * | 1999-09-27 | 2002-06-04 | Rockwell Automation Technologies, Inc. | Programmable synchronous and asynchronous block execution for a computer numerical control |
US6879862B2 (en) * | 2000-02-28 | 2005-04-12 | Roy-G-Biv Corporation | Selection and control of motion data |
US6885898B1 (en) * | 2001-05-18 | 2005-04-26 | Roy-G-Biv Corporation | Event driven motion systems |
US6442451B1 (en) * | 2000-12-28 | 2002-08-27 | Robotic Workspace Technologies, Inc. | Versatile robot control system |
WO2002071241A1 (en) * | 2001-02-09 | 2002-09-12 | Roy-G-Biv Corporation | Event management systems and methods for the distribution of motion control commands |
US7904194B2 (en) * | 2001-02-09 | 2011-03-08 | Roy-G-Biv Corporation | Event management systems and methods for motion control systems |
US20030069998A1 (en) * | 2001-08-31 | 2003-04-10 | Brown David W. | Motion services protocol accessible through uniform resource locator (URL) |
US20070022194A1 (en) * | 2003-09-25 | 2007-01-25 | Brown David W | Database event driven motion systems |
US8027349B2 (en) | 2003-09-25 | 2011-09-27 | Roy-G-Biv Corporation | Database event driven motion systems |
US20060064503A1 (en) | 2003-09-25 | 2006-03-23 | Brown David W | Data routing systems and methods |
WO2005048086A2 (en) | 2003-11-17 | 2005-05-26 | Roy-G-Biv Corporation | Command processing systems and methods |
-
1995
- 1995-05-30 US US08/454,736 patent/US5691897A/en not_active Expired - Lifetime
-
1996
- 1996-05-30 AU AU60276/96A patent/AU6027696A/en not_active Abandoned
- 1996-05-30 CA CA2705404A patent/CA2705404A1/en not_active Abandoned
- 1996-05-30 EP EP96917883A patent/EP0829039B1/en not_active Expired - Lifetime
- 1996-05-30 CA CA002222235A patent/CA2222235C/en not_active Expired - Lifetime
- 1996-05-30 US US08/656,421 patent/US5867385A/en not_active Expired - Lifetime
- 1996-05-30 DE DE69624237T patent/DE69624237T2/de not_active Expired - Lifetime
- 1996-05-30 EP EP08013237A patent/EP2081094A3/en not_active Withdrawn
- 1996-05-30 EP EP05075785A patent/EP1560093B1/en not_active Expired - Lifetime
- 1996-05-30 AT AT02076462T patent/ATE302437T1/de not_active IP Right Cessation
- 1996-05-30 DE DE69637633T patent/DE69637633D1/de not_active Expired - Lifetime
- 1996-05-30 AT AT96917883T patent/ATE225952T1/de not_active IP Right Cessation
- 1996-05-30 EP EP10180730.3A patent/EP2302475A3/en not_active Withdrawn
- 1996-05-30 WO PCT/US1996/008149 patent/WO1996038769A1/en active IP Right Grant
- 1996-05-30 JP JP8536693A patent/JPH11506234A/ja active Pending
- 1996-05-30 AT AT05075785T patent/ATE403896T1/de not_active IP Right Cessation
- 1996-05-30 EP EP02076462A patent/EP1260891B1/en not_active Expired - Lifetime
- 1996-05-30 DE DE69635094T patent/DE69635094T2/de not_active Expired - Lifetime
-
1998
- 1998-09-01 HK HK98110329A patent/HK1009531A1/xx not_active IP Right Cessation
-
2001
- 2001-12-10 US US10/021,669 patent/US6516236B1/en not_active Expired - Lifetime
-
2002
- 2002-12-10 US US10/316,451 patent/US20080275576A1/en not_active Abandoned
-
2003
- 2003-05-23 HK HK03103682A patent/HK1051581A1/xx not_active IP Right Cessation
- 2003-06-19 JP JP2003174985A patent/JP2004078904A/ja active Pending
-
2004
- 2004-01-21 US US10/761,537 patent/US20080275577A1/en not_active Abandoned
-
2006
- 2006-02-01 HK HK06101380A patent/HK1080157A1/xx not_active IP Right Cessation
- 2006-10-04 JP JP2006272878A patent/JP2007102796A/ja active Pending
-
2007
- 2007-12-11 JP JP2007319976A patent/JP2008159046A/ja active Pending
-
2008
- 2008-10-02 US US12/244,673 patent/US20090157199A1/en not_active Abandoned
-
2009
- 2009-03-18 US US12/406,921 patent/US8073557B2/en not_active Expired - Fee Related
-
2011
- 2011-10-24 US US13/280,293 patent/US20120179275A1/en not_active Abandoned
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8073557B2 (en) | 1995-05-30 | 2011-12-06 | Roy-G-Biv Corporation | Motion control systems |
US8271105B2 (en) | 1995-05-30 | 2012-09-18 | Roy-G-Biv Corporation | Motion control systems |
US7853645B2 (en) | 1997-10-07 | 2010-12-14 | Roy-G-Biv Corporation | Remote generation and distribution of command programs for programmable devices |
US7904194B2 (en) | 2001-02-09 | 2011-03-08 | Roy-G-Biv Corporation | Event management systems and methods for motion control systems |
US8027349B2 (en) | 2003-09-25 | 2011-09-27 | Roy-G-Biv Corporation | Database event driven motion systems |
US8102869B2 (en) | 2003-09-25 | 2012-01-24 | Roy-G-Biv Corporation | Data routing systems and methods |
Also Published As
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP0829039B1 (en) | Motion control systems | |
US6209037B1 (en) | Motion control systems using communication map to facilitating communication with motion control hardware | |
US8271105B2 (en) | Motion control systems | |
US6941543B1 (en) | Motion control system and method | |
US7024666B1 (en) | Motion control systems and methods | |
Pritschow et al. | Open controller architecture–past, present and future | |
US6173438B1 (en) | Embedded graphical programming system | |
TW475911B (en) | Improved machine tool control system | |
US20030005179A1 (en) | System of measurements experts and method for generating high-performance measurements software drivers | |
CA2586401C (en) | Motion control systems | |
Yang et al. | An open CNC controller based on LabVIEW software | |
WO2022087212A1 (en) | System and apparatus for authoring and developing automation interfaces and processes without writing code | |
CN114253240A (zh) | 云化工业系统设备的控制方法、装置、设备及存储介质 | |
Suzuki et al. | Recent trends and issues of device integration standardization | |
Ma | Low cost shop floor DNC system: a dissertation presented in partial fulfilment of the requirements for the postgraduate Masters of Technology in Automation & Control at Massey University |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20070611 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20070911 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20070914 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20080303 |