(57)【特許請求の範囲】
【請求項１】
サーボ機構の動作を制御する制御プログラムを実行し、該サーボ機構に対する制御量を所定の制御周期で算出して出力する制御プログラム実行部と、
該サーボ機構を仮想的なモデルとして内部に構築され、該モデルを用いて該サーボ機構の動作を動力学的に解析しながら、前記所定制御周期よりも短く設定された所定のシミュレーション周期で、前記所定の制御周期に対応する時間に亘って該サーボ機構の動作をシミュレートすることにより、該サーボ機構の状態量を算出して出力するとともに、該サーボ機構のサーボマークの検出シミュレーションを行なうシミュレーション部と、
該制御プログラム実行部から該シミュレーション部への前記制御量、および、該シミュレーション部から該制御プログラム実行部への前記状態量を一時的に保持し中継する中継部とをそなえ、
該中継部が、
該制御プログラム実行部から該シミュレーション部への前記制御量と該シミュレーション部から該制御プログラム実行部への前記状態量とを含むデータを一時的に保持しうる複数のレジスタと、
該複数のレジスタと該制御プログラム実行部との間で前記データの書込／読出を制御する第１書込／読出制御部と、
該複数のレジスタと該シミュレーション部との間で前記データの書込／読出を制御する第２書込／読出制御部とをそなえて構成されるとともに、
該シミュレーション部からの前記状態量が、該第２書込／読出制御部を通じて該レジスタに書き込まれた後、該シミュレーション部による前記検出シミュレーションの結果として得られるサーボマークのエッジに応じて生成される割込信号が、該中継部における該複数のレジスタの一つであって該制御プログラム実行部に直接的に接続された特定のレジスタに該第２書込／読出制御部を通じて書き込まれ、該第１書込／読出制御部を介することなく、当該特定のレジスタから該制御プログラム実行部へ直接的に送出され、
該制御プログラム実行部は、該シミュレーション部からの前記割込信号に応じて制御ルーチンを開始してサーボタスク信号をセットし、そのサーボタスク信号を該シミュレーション部に通知して該シミュレーション部に前記割込信号をクリアさせ、
該制御プログラム実行部が該シミュレーション部による前記割込信号のクリアを検知すると、該第２書込／読出制御部を通じて該レジスタに書き込まれた該シミュレーション部からの前記状態量が、前記サーボタスク信号をセットされた該制御プログラム実行部に該第１書込／読出制御部を通じて読み込まれ、該制御プログラム実行部が、読み込まれた前記状態量に応じた制御量の算出動作を開始する一方、
該制御プログラム実行部からの前記制御量が、該第１書込／読出制御部を通じて該レジスタに書き込まれた後、該制御プログラム実行部は前記サーボタスク信号をクリアして前記制御ルーチンを終了し、
該シミュレーション部が該制御プログラム実行部による前記サーボタスク信号のクリアを検知すると、該第１書込／読出制御部を通じて該レジスタに書き込まれた該制御プログラム実行部からの前記制御量が、該シミュレーション部に該第２書込／読出制御部を通じて読み込まれ、該シミュレーション部が、読み込まれた前記制御量に応じたシミュレーション動作を開始することを特徴とする、制御プログラム開発支援装置。
【請求項２】
該複数のレジスタに保持されているデータを表示しうるデータ表示部をそなえたことを特徴とする、請求項１記載の制御プログラム開発支援装置。
【請求項３】
該複数のレジスタの中から選択した、少なくとも一つのレジスタに保持されているデータを該データ表示部に表示させる選択部をそなえたことを特徴とする、請求項２記載の制御プログラム開発支援装置。
【請求項４】
該複数のレジスタのうちの少なくとも一つに所望のデータを強制的に設定・格納するためのデータ入力部をそなえたことを特徴とする、請求項１〜請求項３のいずれか一項に記載の制御プログラム開発支援装置。
【請求項５】
該複数のレジスタのうちの少なくとも一つから読み出されたデータにノイズを加算することにより重畳するノイズ重畳部をそなえたことを特徴とする、請求項１〜請求項４のいずれか一項に記載の制御プログラム開発支援装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、比較的小型で応答の速い製品について制御プログラムのサーボ制御部分（サーボ制御プログラム）の開発を支援する技術に関するもので、例えば、磁気ディスクドライブ（ＨＤＤ），光ディスクドライブ（ＣＤ，ＭＯ，ＤＶＤ，ＭＤ），磁気テープ装置（ＤＡＴ，ＶＴＲ），ＮＣ工作機など、緻密なサーボ制御を必要とするあらゆる製品についてのサーボ制御プログラム（ファームウェア）を開発する際に用いて好適の、制御プログラム開発支援装置に関する。
【０００２】
【従来の技術】
一般に、アクチュエータ（モータ）やセンサを有し３次元的な動作を行なう機構（メカ）を設計する際には、その機構の構想を練った後、詳細設計，出図，部品手配を行なってから、部品の組立を行なって実機を試作し、実機の動作等についての評価を行なう。そして、評価の結果に応じて設計変更を行なってから設計変更後の実機を試作し、再び評価を行なうという処理を繰り返し、評価の結果が良好であれば、設計を完了する。
【０００３】
また、一般に、上述のごとく設計された機構を動作させるべく、その機構を制御するための制御プログラムを開発し、その制御プログラムを、制御対象の機構内に組み込まれるマイクロコンピュータ（以下、マイコンという場合がある）で実行させるようにしている。このマイコンが実行する上記制御プログラムのことを、以下、組込みソフトウェアという場合がある。
【０００４】
上述のような制御プログラム（組込みソフトウェア）を開発する際、従来、制御すべき機構の試作品（実機）が完成している必要がある。即ち、試作が完了して初めてメカを具体的に動かすことができ、それを使って組込みソフトウェアの開発を開始することができるわけである。
【０００５】
この組込みソフトウェアの開発は、試作品の完成後、その試作品を実際に動作させながら、以下の手順で行なわれる。つまり、まず、組込みソフトウェアの概略設計を行ない、その概略設計に基づいて詳細設計を行なってから、詳細設計の結果をコーディングして組込みソフトウェアを作成し、その組込みソフトウェアのデバッグを行なう。
【０００６】
【発明が解決しようとする課題】
ところで、ファームウェアのサーボ機構部分の構築・検証も、従来、上述した組込みソフトウェア開発の場合と同様、実際のメカ（実機）を用いて行なわれている。
しかし、ファームウェアのサーボ機構部分の構築・検証に上述の手法を用いた場合、実機が完成しないと検証を行なうことができず開発に時間やコストがかかり非効率的であるという課題があるほか、実機を用いて検証を行なうため、イベントブレイク等でファームウェアプログラムを停止しても、サーボ機構を成すモータは回転し続け、ステップデバッグを行なうことができないなどの課題もあった。
【０００７】
また、月産数万台も生産される製品に対するサーボ機構制御プログラムは、ある程度のメカのバラツキに対応できなくてはならない。実際のメカを用いた開発では、上記バラツキを考慮した所望の状態のメカを入手することは困難であり、ファームウェアがどの程度のバラツキまで対応できているかを知ることは困難であった。
【０００８】
そこで、実際のメカの代わりに計算機上に仮想的なモデルを作成し、このモデルを実際のファームウェアに制御させることにより、実機を用いることなく効率的にファームウェアの開発（構築・検証）を行なえるようにすることが望まれている。このような技術が実現されると、ファームウェアの先行開発が可能になるほか、実際のモータを用いないためステップデバッグなどの機能を使用することが可能であり、新しいアクチュエータやセンサを用いた新規の制御手法を、実機を作成することなく簡単に検証可能になるなどの利点が得られる。
【０００９】
従来、例えばｄＳＰＡＣＥ社のＨＩＬ（Hardware In the Loop）シミュレーションシステムのように、実際の製品の代わりとなるシミュレータ内のモデルに対し、別のコンピュータで動作する制御プログラムによってそのモデルの制御を行なうものは存在している。しかし、このシステムは、実時間でシミュレーションを行なうものであるため、自動車や船など応答の遅い製品（例えば１msec以上のシミュレーション時間間隔でシミュレーション可能な製品）がシミュレーション対象となっている。従って、上述のシステムにより、磁気ディスクドライブ（ＨＤＤ）など比較的小型で応答の速い製品（例えば１００μsec程度のシミュレーション時間間隔でシミュレーションを行なうべき製品）のシミュレーションを行なうのは困難である。
【００１０】
また、本願発明者等は、３次元リアルタイムシミュレーション装置を中核に据え、メカ試作品を作らなくても組込みソフトウェア（制御プログラム）の開発をメカ設計とは単独に進めることができるような支援システムを提案している。この支援システムによる制御プログラムの検証はタスクレベルで行なわれている。つまり、この支援システムでは、制御プログラム側からの指令に応じたアクチュエータ動作がシミュレートされ、その動作に従ったセンサのオン／オフ信号に基づいて、制御プログラムの検証が行なわれている。従って、この支援システムでは、モデルの動力学を解析するサーボレベルで制御プログラムの検証（開発・デバッグ）を行なうことができない。
【００１１】
サーボ機構は、機械的運動のための自動フィードバック制御システムであり、制御量または制御出力が機械的な位置〔または誘導変数（速度加速度など）の一つ〕であるようなシステムを制御するために用いられるものである。このため、サーボ制御部分の制御プログラムの検証を行なうためには、サーボ機構のシミュレーションを、タスクレベルではなく、前記機械的な位置等の制御量を動力学的に解析しながら（つまりサーボレベルで）行なう必要がある。サーボレベルで検証を行なう場合、動力学解析を行なって厳密なシミュレーションを行なう必要があるため、実時間でシミュレーションを行なうことは困難になることがある。
【００１２】
従って、実際のメカを用いることなく、比較的小型で応答の速い製品について制御プログラムのサーボ制御部分（以下、サーボ制御プログラムという場合がある）の開発・デバッグ（検証）を行なえるようにすることが望まれている。
なお、従来、ＭＡＴＬＡＢなどに代表される数値解析ソフトウェアを用いることにより、制御対象とその制御対象についての制御則とをモデル化し、その制御則の検証を行なう一般的な手法は存在している。この手法は、理論レベルで制御則の検証を行なうことはできるが、検証した制御則を実際のファームウェア（制御プログラム）にコード化する際に生じる様々な問題点（実行速度，コードサイズ，消費メモリ量，バグの混在など）には対応することができない。また、この手法は、制御則の検証を行なうものであって、その制御則に基づいて作成された制御プログラムの検証を行なうことはできず、その制御プログラムの検証に際しては、結局、前述した従来手法を用いることになる。
【００１３】
本発明は、このような課題に鑑み創案されたもので、実際のメカを用いることなく、比較的小型で応答の速い製品（機構）を制御するための制御プログラムの開発・デバッグ（検証）を行なえるようにした、制御プログラム開発支援装置を提供することを目的とする。
【００１４】
【課題を解決するための手段】
上記目的を達成するために、本発明の制御プログラム開発支援装置は、サーボ機構の動作を制御する制御プログラムを実行し、該サーボ機構に対する制御量を所定の制御周期で算出して出力する制御プログラム実行部と、該サーボ機構を仮想的なモデルとして内部に構築され、該モデルを用いて該サーボ機構の動作を動力学的に解析しながら、前記所定制御周期よりも短く設定された所定のシミュレーション周期で、前記所定の制御周期に対応する時間に亘って該サーボ機構の動作をシミュレートすることにより、該サーボ機構の状態量を算出して出力するとともに、該サーボ機構のサーボマークの検出シミュレーションを行なうシミュレーション部と、該制御プログラム実行部から該シミュレーション部への前記制御量、および、該シミュレーション部から該制御プログラム実行部への前記状態量を一時的に保持し中継する中継部とをそなえ、該中継部が、該制御プログラム実行部から該シミュレーション部への前記制御量と該シミュレーション部から該制御プログラム実行部への前記状態量とを含むデータを一時的に保持しうる複数のレジスタと、該複数のレジスタと該制御プログラム実行部との間で前記データの書込／読出を制御する第１書込／読出制御部と、該複数のレジスタと該シミュレーション部との間で前記データの書込／読出を制御する第２書込／読出制御部とをそなえて構成されるとともに、
該シミュレーション部からの前記状態量が、該第２書込／読出制御部を通じて該レジスタに書き込まれた後、該シミュレーション部による前記検出シミュレーションの結果として得られるサーボマークのエッジに応じて生成される割込信号が、該中継部における該複数のレジスタの一つであって該制御プログラム実行部に直接的に接続された特定のレジスタに該第２書込／読出制御部を通じて書き込まれ、該第１書込／読出制御部を介することなく、当該特定のレジスタから該制御プログラム実行部へ直接的に送出され、該制御プログラム実行部は、該シミュレーション部からの前記割込信号に応じて制御ルーチンを開始してサーボタスク信号をセットし、そのサーボタスク信号を該シミュレーション部に通知して該シミュレーション部に前記割込信号をクリアさせ、該制御プログラム実行部が該シミュレーション部による前記割込信号のクリアを検知すると、該第２書込／読出制御部を通じて該レジスタに書き込まれた該シミュレーション部からの前記状態量が、前記サーボタスク信号をセットされた該制御プログラム実行部に該第１書込／読出制御部を通じて読み込まれ、該制御プログラム実行部が、読み込まれた前記状態量に応じた制御量の算出動作を開始する一方、該制御プログラム実行部からの前記制御量が、該第１書込／読出制御部を通じて該レジスタに書き込まれた後、該制御プログラム実行部は前記サーボタスク信号をクリアして前記制御ルーチンを終了し、該シミュレーション部が該制御プログラム実行部による前記サーボタスク信号のクリアを検知すると、該第１書込／読出制御部を通じて該レジスタに書き込まれた該制御プログラム実行部からの前記制御量が、該シミュレーション部に該第２書込／読出制御部を通じて読み込まれ、該シミュレーション部が、読み込まれた前記制御量に応じたシミュレーション動作を開始することを特徴としている。
【００１５】
上述した本発明の制御プログラム開発支援装置では、制御対象プラントである機構（サーボ機構）がモデル化され、そのモデルの動作をシミュレートするためのシミュレーション部と、その機構（サーボ機構）の動作を制御するファームウェアを実行する制御プログラム実行部とが、中継部を介して接続され、シミュレーション部の動作と制御プログラム実行部の動作とを同期させることができるので、時間厳密性を保ったまま精密なシミュレーションを行なうことが可能になる。その際、シミュレーション部が、制御プログラム実行部での制御周期（サーボ制御ファームウェアのサーボ周期）よりも短いシミュレーション周期でシミュレーションを行なうので、精密なシミュレーションを実行することが可能になる。このとき、制御プログラム実行部からの制御量は、第１書込／読出制御部により適当なレジスタに一旦書き込まれた後、同期信号に応じ、第２書込／読出制御部により読み出されてシミュレーション部に入力される。一方、シミュレーション部からの状態量は、第２書込／読出制御部により適当なレジスタに一旦書き込まれた後、同期信号（割込信号）に応じ、第１書込／読出制御部により読み出されて制御プログラム実行部に入力される。また、該制御プログラム実行部による前記制御量の算出動作を開始させるべく該シミュレーション部から該複数のレジスタの一つに入力された割込信号については、該第１書込／読出制御部を介することなく、当該レジスタから該制御プログラム実行部へ直接的に送出することにより、制御プログラム実行部側では、第１書込／読出制御部による読出制御（ファームウェアの読み込み動作）を行なうことなく割込信号（同期信号）を得ることができ、ハードウェア割り込みを利用した同期処理を行なうことが可能になる。
【００１７】
また、該制御プログラム実行部が、一制御周期中において異なるタイミングで該シミュレーション部に入力されるべき複数の制御量を出力するように構成されるとともに、前記複数の制御量をそれぞれ所定のタイミングで該シミュレーション部に入力するように制御量の入力制御を行なうマルチレート制御手段がそなえられていてもよい。このとき、該マルチレート制御手段の設定を行なうためのマルチレート設定手段をそなえ、そのマルチレート設定手段を、グラフィカルユーザインタフェース機能を用いて構成してもよい。
【００１８】
上述したマルチレート制御手段を用いることにより、シミュレーション部は、一制御周期中に制御量が変化するマルチレート制御をシミュレートすることができる。また、マルチレート設定手段により、そのマルチレート制御を定義・設定することができ、さらに、グラフィックを用いて容易にそのマルチレート制御の設定を行なうことができる。
【００２０】
また、該モデルが、その動作のシミュレーションを個別に実行することが可能な複数の部分から構成されるものであり、該シミュレーション部が、前記複数の部分それぞれの動作を並列的にシミュレートする複数のプロセッサをそなえて構成されていてもよい。これにより、モデルの構成部分の動作シミュレーションを、複数のプロセッサで並列的に実行することができる。
【００２４】
また、該複数のレジスタに保持されているデータを表示しうるデータ表示部をそなえてもよい。このとき、該複数のレジスタの中から選択した少なくとも一つのレジスタに保持されているデータを該データ表示部に表示させる選択部をそなえてもよいし、該データ表示部を該複数のレジスタのうちの特定のものに直接的に接続し、このデータ表示部において、該特定のレジスタに保持されているデータを表示してもよい。これにより、制御プログラム実行部とシミュレーション部との間で通信中のデータがデータ表示部で表示され、オペレータ等はそのデータを参照・確認することができる。
【００２５】
さらに、該複数のレジスタのうちの少なくとも一つに所望のデータを強制的に設定・格納するためのデータ入力部をそなえてもよい。このとき、該データ入力部を、該複数のレジスタのうちの特定のものに直接的に接続し、このデータ入力部から、該特定のレジスタに前記所望のデータを設定してもよい。これにより、オペレータ等は、任意のデータを、データ入力部からレジスタに書き込むことによって制御プログラム実行部やシミュレーション部へ直接的に入力することができ、そのデータに応じた制御プログラムの挙動やモデルの動作状態を確認することができる。
【００２６】
またさらに、該複数のレジスタのうちの少なくとも一つから読み出されたデータにノイズを加算することにより重畳するノイズ重畳部をそなえてもよい。これにより、オペレータ等は、ノイズをノイズ重畳部によってデータに重畳することができ、そのノイズに応じた制御プログラムの挙動やモデルの動作状態を確認することができる。
【００２７】
【発明の実施の形態】
以下、図面を参照して本発明の実施の形態を説明する。
〔１〕本発明の一実施形態の説明
〔１−１〕本実施形態の全体構成
図１は本発明の一実施形態としての制御プログラム開発支援装置の構成を従来システムの構成と比較して示すもので、図１（ａ）は従来システムの構成を示すブロック図、図１（ｂ）は本実施形態の構成を示すブロック図である。
【００２８】
図１（ａ）に示すように、サーボ制御プログラムの開発・デバッグ（検証）を行なうための従来システムでは、実際のサーボ機構、つまり、実際のメカ１００および制御回路２００を用いている。
メカ１００は、アクチュエータ１１０およびセンサ１２０を含んで構成されている。アクチュエータ１１０は、制御回路２００からの制御量に従ってメカ１００の動作を制御するものであり、センサ１２０は、アクチュエータ１１０で制御されるとともに外乱を受けるメカ１００の動作状態を状態量として検出するものである。
【００２９】
制御回路２００は、制御用ＬＳＩ２１０，ドライバ２２０および検出回路２３０をそなえて構成されている。
制御用ＬＳＩ２１０は、サーボ機構の動作を制御する制御プログラム（制御プログラムのサーボ制御部分／ファームウェア）を実行するもので、ＭＣＵ（MicroController Unit）２１１，メモリ２１２，サーボロジック２１３およびセンサロジック２１４を有している。
【００３０】
メモリ２１２は、前記制御プログラムを含む各種情報を格納するものであり、ＭＣＵ２１１は、いわゆるワンチップマイコンであり、メモリ２１２に格納された制御プログラムを実行し、メカ１００（サーボ機構）に対する制御量を、メカ１００側からの状態量（センサ１２０による検出結果）に応じて演算するものである。
【００３１】
サーボロジック２１３およびセンサロジック２１４は、それぞれ、ドライバ２２０および検出回路２３０に接続されるもので、例えばＡ／Ｄ（アナログ／デジタル変換器），Ｄ／Ａ（デジタル／アナログ変換器），ＰＩＯ（Parallel Input/Output）などの一般的なロジック回路を含んで構成されるものである。また、サーボロジック２１３としては、パルス幅変調（ＰＷＭ）信号発生器を用いることもできる。
【００３２】
ドライバ２２０は、サーボロジック２１３からの制御信号（制御量）に基づいてアクチュエータを駆動するものであり、検出回路２３０は、メカ１００のセンサ１２０により検出された状態量を受け取り、センサロジック２１４に入力するものである。
なお、メカ１００や制御回路２００の状態は、オシロスコープ等の状態表示部３００によって表示されるようになっている。
【００３３】
上述した従来システムでは、実際のメカ１００や制御回路２００が用いられ、ＭＣＵ２１１が、検出回路２３０およびセンサロジック２１４を介して得た情報（センサ１２０により検出された状態量）に基づいてサーボ演算を行ない、その演算結果である制御量を、制御信号としてサーボロジック２１３およびドライバ２２０を介しアクチュエータ１１０に指令を与えることで、サーボループが構築されている。
【００３４】
これに対し、図１（ｂ）に示すごとく、本実施形態の制御プログラム開発支援装置１は、制御回路１０とモデル実行環境２０とを、中継回路３０を介して通信可能に接続することによって構成されており、制御回路１０およびモデル実行環境２０は、それぞれ、実際にはファームウェア実行用プロセッサおよびモデル演算用プロセッサにより構成されている。
【００３５】
そして、制御回路１０は、サーボ機構の動作を制御する制御プログラム（以下、制御ファームウェアという場合もある）を実行しそのサーボ機構に対する制御量を所定の制御周期（制御ルーチンの呼び出し間隔）ΔＴで算出して出力する制御プログラム実行部として機能するもので、ＭＣＵ１２およびメモリ１３を含む制御用ＬＳＩ１１から構成されている。
【００３６】
ここで、メモリ１３は、前記制御プログラムを含む各種情報を格納するものであり、ＭＣＵ１２は、いわゆるワンチップマイコンであり、メモリ１３に格納された制御プログラムを実行し、サーボ機構（本実施形態では後述する仮想メカモデル２１）に対する制御量を、モデル実行環境２０側からの状態量（シミュレーション結果）に応じて演算するものである。
【００３７】
モデル実行環境（以下、シミュレータという場合もある）２０は、サーボ機構を仮想的なモデル（仮想メカモデル）２１として内部に構築され、その仮想メカモデル２１を用いてサーボ機構の動作を動力学的に解析しながら所定のシミュレーション周期Δｔでサーボ機構の動作をシミュレートすることにより、サーボ機構の状態量を算出して出力するシミュレーション部として機能するものである。
【００３８】
ここで、仮想メカモデル２１は、図１（ａ）に示した従来システムにおけるサーボ機構の部分、即ち、サーボロジック２１３，ドライバ２２０，メカ１００（アクチュエータ１１０およびセンサ１２０を含む），検出回路２３０およびセンサロジック２１４の部分をモデル化したものである。
【００３９】
中継回路（中継部）３０は、制御回路１０からモデル実行環境２０への制御量、および、モデル実行環境２０から制御回路１０への状態量を中継すべく、これらの制御量や状態量を一時的に格納・保持する共有メモリ（バッファ，レジスタ）３１を有して構成されている。この中継回路３０の詳細構成については、図１６〜図２０を参照しながら後述する。
状態表示記録部（データ表示部）４０は、モデル実行環境２０によるシミュレーション結果を表示したり記録したりするものである。
【００４０】
そして、本実施形態の制御プログラム開発支援装置１においては、シミュレーション周期Δｔが制御周期ΔＴよりも短く設定され、モデル実行環境２０は、所定の制御周期ΔＴに対応する時間に亘って所定のシミュレーション周期Δｔでシミュレーションを行ない、そのシミュレーションによって得られたサーボ機構の状態量を中継回路３０へ出力するように構成されている。
【００４１】
さらに、本実施形態の制御プログラム開発支援装置１には、後述するようにして制御回路１０の動作とモデル実行環境２０の動作との同期処理を行なうシミュレーション制御部（同期処理部）２２がそなえられている。このシミュレーション制御部２２は、図１（ｂ）ではモデル実行環境２０にそなえられているが、実際には、制御回路１０およびモデル実行環境２０にまたがる形で配置され、図２，図３および図５〜図１０にて後述する手法に従い、ソフトウェアにより実現されるものである。
【００４２】
このシミュレーション制御部２２は、モデル実行環境２０からの状態量が中継回路３０の共有メモリ３１に保持されると、モデル実行環境２０を、制御回路１０からの応答待ち状態へ移行させるとともに、制御回路１０による、状態量に応じた制御量の算出動作を開始させる一方、制御回路１０からの制御量が中継回路３０に保持されると、制御回路１０を、モデル実行環境２０からの応答待ち状態へ移行させるとともに、モデル実行環境２０による、制御量に応じたシミュレーション動作を開始させるように機能する。その際、図２や図３に示すごとく、制御回路（制御ファームウェア）１０とモデル実行環境（シミュレータ）２０との間では、サーボ割込信号（ＳＶＩｎｔ：Servo Interrupt）やサーボタスク信号（Servo Task）がやり取りされる。
【００４３】
図１（ｂ）に示す本実施形態の制御プログラム開発支援装置１においては、ＭＣＵ１２，メモリ１３など制御プログラムを動作させるために必要な環境（図１には示していないが浮動点演算装置などの補助回路も含む）以外の部分を全てモデル化し、モデル化された仮想メカモデル２１の動作がモデル実行環境（シミュレータ）２０によりシミュレートされ、仮想メカモデル２１の状態量が算出される。そして、モデル実行環境２０と制御回路１０との間で、中継回路３０の共有メモリ３１を介して通信を行なうことにより、サーボループが構築されている。
【００４４】
このとき、対象とするメカの応答の高速化に伴いモデル実行（シミュレーション）のサンプリング間隔Δｔを細かくする必要が生じたり、モデル２１を精密化するのに伴い計算量が増大したりすると、シミュレータ２０において、実時間でモデル演算を行なうことが難しくなる。
【００４５】
そこで、本実施形態の制御プログラム開発支援装置１においては、ＭＣＵ１２の演算を遅らせ、同期信号（サーボ割込信号）ＳＶＩｎｔを用いてＭＣＵ１２の演算と仮想メカモデル２１の演算とを同期させ、サーボ特性を変化させずにスローモーション的にシミュレーションを行なうようにしている。さらに、本実施形態では、サーボロジック２１３がマルチレート制御を実現していた場合の対応手法についても、図１１〜図１３を参照しながら説明する。
【００４６】
〔１−２〕基本的な同期処理手順
次に、図２および図３を参照しながら、本実施形態における前記シミュレーション制御部（同期処理部）２２の動作（同期処理手順）について説明する。図２および図３は、それぞれ、本実施形態での同期処理手順（シミュレーション制御部２２の動作）を説明するためのフローチャートおよびタイムチャートである。
【００４７】
図２に示す制御ファームウェア（制御Ｆ／Ｗの部分；制御回路１０で実行される制御プログラム）は、サーボ制御ルーチン部分であって、一般にタイマ割り込みを用いて一定間隔（ΔＴ）で呼び出されたり、あるいは、制御対象が例えば磁気ディスクドライブ（ＨＤＤ）である場合にはサーボマークを磁気ディスクから読み込んだ時に発生する割込信号によって呼び出されたりする。
【００４８】
本実施形態の制御プログラム開発支援装置１では、サーボ制御ルーチンを呼び出すための割り込み要因を、シミュレータ２０側からの割込信号（ＳＶＩｎｔ）に変更し、シミュレータ２０によるシミュレーション終了（所定間隔のモデル実行の完了）に伴って、サーボ制御ルーチンが呼び出されるようにしている。
【００４９】
なお、割込信号を用いず、メインループにてシミュレータ２０におけるＳＶＩｎｔの状態を常に監視するように構成してもよい。これにより、図３を参照して後述するごとく、制御ルーチンとシミュレーションとを交互に実行することができる。
【００５０】
図２に示すように、制御ファームウェア（制御回路１０）においてはシミュレータ２０からの割込信号（ＳＶＩｎｔ）に応じてステップＳ１１〜Ｓ１６の処理が実行され、シミュレータ２０においては制御回路１０からのサーボタスク信号に応じてステップＳ２１〜Ｓ２７が実行される。これにより、本実施形態の同期処理（シミュレーション制御部２２）が実現され、制御回路１０の動作とシミュレータ２０の動作との同期処理が行なわれる。
【００５１】
具体的に説明すると、シミュレータ２０において割込信号ＳＶＩｎｔがセットされると（ステップＳ２１）、制御回路１０では、制御ファームウェアが起動され、サーボタスク信号がセットされる（ステップＳ１１）。
このサーボタスク信号は、シミュレータ２０に通知され、シミュレータ２０では、サーボタスク信号のセット検知に伴い（ステップＳ２２のＹＥＳルート）、割込信号ＳＶＩｎｔをクリアする（ステップＳ２３）。この後、シミュレータ２０は、制御回路１０からのサーボタスク信号がクリアされるまで、つまり、ステップＳ２４でＹＥＳ判定となるまで、制御ルーチン終了（サーボタスク信号クリア）待ち状態となる。
【００５２】
また、制御回路１０では、割込信号ＳＶＩｎｔのクリアを検知すると（ステップＳ１２のＹＥＳルート）、中継回路３０の共有メモリ（レジスタ）３１に保持されている状態量（シミュレータ２０によるシミュレーション結果）が読み込まれ（ステップＳ１３）、サーボ演算、つまり状態量に応じた制御量の演算処理が実行される（ステップＳ１４）。そして、算出された制御量を中継回路３０へ出力して共有メモリ３１に格納してから（ステップＳ１５）、サーボタスク信号をクリアし（ステップＳ１６）、サーボ制御ルーチンを終了する。
【００５３】
一方、シミュレータ２０では、サーボタスク信号のクリアを検知すると（ステップＳ２４のＹＥＳルート）、中継回路３０の共有メモリ（レジスタ）３１に保持されている制御量が読み込まれ（ステップＳ２５）、シミュレーションが行なわれ（ステップＳ２６）、その制御量に応じた仮想メカモデル２１の状態量の演算処理が実行される。そして、シミュレーション結果として得られた状態量を中継回路３０へ出力して共有メモリ３１に格納すると（ステップＳ２７）、再び、割込信号ＳＶＩｎｔがセットされ（ステップＳ２１）、以降、上述と同様の処理が繰り返されることになる。
【００５４】
図２にて上述した同期処理について図３を参照しながら説明する。図３に示すように、シミュレータ２０は、時刻ｔ１で状態量を出力してシミュレーションを終了すると（ステップＳ２７）、制御ルーチン終了（サーボタスク信号クリア）待ちの状態に移行するとともに、時刻ｔ２で割込信号ＳＶＩｎｔをセットし（ステップＳ２１）、制御ファームウェアを呼び出して起動する。
【００５５】
そして、時刻ｔ３において制御回路１０がサーボタスク信号をセットすると（ステップＳ１１）、そのサーボタスク信号に応じ、時刻ｔ４においてシミュレータ２０が割込信号ＳＶＩｎｔをクリアし（ステップＳ２３）、制御ファームウェア（ＨＤＤ  Ｆ／Ｗ）は、時刻ｔ５から制御ルーチン実行中となる（ステップＳ１３〜Ｓ１５）。
【００５６】
この後、制御ファームウェアは、時刻ｔ６で制御量を出力してサーボ演算を終了すると（ステップＳ１５）、シミュレーション終了（ＳＶＩｎｔセット）待ちの状態に移行するとともに、時刻ｔ７でサーボタスク信号をクリアする（ステップＳ１６）。これに伴い、シミュレータ２０は、時刻ｔ８からシミュレーション実行中となり（ステップＳ２５〜Ｓ２７）、時刻ｔ９で状態量を出力してシミュレーションを終了すると（ステップＳ２７）、前述した処理を繰り返すことになる。
【００５７】
〔１−３〕制御周期とシミュレーション周期との関係
さて、制御ルーチンが本来呼び出される間隔である制御周期をΔＴとすると、従来、シミュレータ２０でのシミュレーション（モデル実行）も、制御周期と同じ間隔ΔＴで行なわれていた。しかし、精度のよいシミュレーションを行なうためや、後述するマルチレート制御などに対応するためには、シミュレーション間隔（シミュレーション周期）Δｔを、制御周期ΔＴよりも細かくする必要がある。
【００５８】
そこで、本実施形態の制御プログラム開発支援装置１では、図２におけるシミュレーション実行部分（ステップＳ２６）に際して、細かいシミュレーションサイクルを実行する毎にΔｔを加算し、その合計時間が制御周期ΔＴに達したところで、シミュレーションループから抜けるようにしている。
【００５９】
より具体的に説明すると、図４は本実施形態のシミュレータでのシミュレーション原理を説明するためのフローチャート（ステップＳ３１〜Ｓ３４）であり、この図４に示すように、図２におけるシミュレーション実行部分（ステップＳ２６）では、シミュレーションの開始に先立ち、合計時間ｔが０に設定される（ステップＳ３１）。この後、シミュレータ２０では、シミュレーション間隔Δｔに対応する時間のシミュレーションが実行される都度（ステップＳ３２）、合計時間ｔにシミュレーション周期Δｔが加算され（ステップＳ３３）、その合計時間が制御周期ΔＴに到達したか否かが判定される（ステップＳ３４）。合計時間ｔがΔＴ未満である場合（ステップＳ３４のＮＯルート）、ステップＳ３２に戻る一方、合計時間ｔがΔＴ以上となった場合（ステップＳ３４のＹＥＳルート）、シミュレーションを終了する。
【００６０】
〔１−４〕基本的な同期設定
そして、本実施形態の制御プログラム開発支援装置１のシミュレータ２０には、上述した周期ΔＴを設定するための機能〔シミュレーション制御部（同期処理部）２２の同期設定を行なうための同期設定手段〕がそなえられている。この機能は、シミュレータ２０におけるグラフィカルユーザインタフェース機能（ＧＵＩ機能）を用いて実現されている。つまり、オペレータ等がシミュレータ２０におけるディスプレイ（図示省略）上の表示を参照しながらキーボードやマウス等を操作することにより、周期ΔＴの設定（同期設定）が行なわれるようになっている。本実施形態では、一般的なモデル記述方法〔例えばＭＡＴＬＡＢ／Simulink（MathWorks社）〕を用いて、ディスプレイ上に図５に示すごとく簡易なモデル（ブロック線図）をグラフィカルに記述・作成することにより、同期設定が行なわれる。
【００６１】
ここで、図５は本実施形態で同期設定を行なうためのモデル記述レベル（ディスプレイでの表示状態）を示す図、図６は図５に示すモデル記述レベルで記述・設定された同期ブロックＢ２の動作を説明するためのフローチャートである。
本実施形態では、図５に示すモデル記述レベルで、一定周期ΔＴの方形波（パルス）を発生する方形波発生ブロックＢ１と同期ブロックＢ２とを作成し、方形波発生ブロックＢ１からのパルスを同期ブロックＢ２に入力するようにブロックＢ１およびＢ２を記述する。
【００６２】
同期ブロック（同期処理部，シミュレーション制御部２２）Ｂ２は、方形波発生ブロックＢ１からのパルスのエッジ（立ち上がり）を検出し、そのエッジをトリガにして、制御ファームウェアとの同期処理を行なう。
この同期ブロックＢ２の動作を図６に示すフローチャート（ステップＳ４１〜Ｓ４７）に従って具体的に説明する。なお、図６において、ステップＳ４１およびＳ４２はエッジ検出（パルス立ち上がり検出）を行なう部分である。また、ステップＳ４４〜Ｓ４７は、制御ファームウェアとの同期を行なう部分で、図２のステップＳ２１〜Ｓ２４に対応する処理である。
【００６３】
同期ブロックＢ２は、シミュレーション周期Δｔ毎に起動され、その都度、まず、同期ブロックＢ２に対する現入力（方形波発生ブロックＢ１からのパルス）が“High”であるか否かを判断する（ステップＳ４１）。現入力が“High”でなければ、即ち“Low”である場合（ステップＳ４１のＮＯルート）、現入力“Low”を前入力に置き換えて（ステップＳ４３）、処理を終了する。
【００６４】
一方、現入力が“High”である場合（ステップＳ４１のＹＥＳルート）、前入力が“Low”であるか否かを判断し（ステップＳ４２）、前入力が“Low”でなければ、即ち“High”である場合（ステップＳ４２のＮＯルート）、現入力“High”を前入力に置き換えて（ステップＳ４３）、処理を終了する。
そして、ステップＳ４２で前入力が“Low”であると判断された場合（ステップＳ４２のＹＥＳルート）、方形波発生ブロックＢ１からのパルスの立ち上がりエッジが検出されたことになる。この立ち上がりエッジの検出をトリガにして、制御ファームウェアとの同期処理（ステップＳ４４〜Ｓ４７）へ移行する。
【００６５】
この同期処理（ステップＳ４４〜Ｓ４７）は、図２において説明したステップＳ２１〜Ｓ２４の処理に対応するので、その説明は省略する。制御ファームウェアでサーボタスク信号がクリアされ、ステップＳ４７でＹＥＳ判定となると、同期処理を終了し、現入力“High”を前入力に置き換えて（ステップＳ４３）、処理を終了する。
【００６６】
このとき、制御周期ΔＴとシミュレーション周期Δｔを加算して得られる合計時間ｔ（図４のステップＳ３３参照）とにはΔｔ／２未満の誤差を生じるが、制御周期ΔＴに対してシミュレーション周期Δｔを任意に設定することができる。なお、制御周期ΔＴがシミュレーション周期Δｔの自然数倍になっていれば前記誤差は０となるが、自然数倍になっていなければ、−Δｔ／２〜Δｔ／２の範囲の誤差が生じることになる。
【００６７】
さらに、本実施形態の制御プログラム開発支援装置１では、シミュレーション制御部（同期処理部）２２が、シミュレータ２０によるシミュレーション結果に基づいて、制御回路１０（制御ファームウェア）による制御量の算出動作の開始タイミングを決定するように構成することもできる。図５に示した方形波発生ブロックＢ１に代えて、例えば図７に示すようなサーボマーク５０ａの検出シミュレーション結果を同期ブロックＢ２に入力することにより、割込信号ＳＶＩｎｔが一定周期ではなく他の要因に応じて生成・出力されることになる。
【００６８】
なお、図７に示す例では、ＨＤＤのディスク５０におけるサーボマーク５０ａをヘッド５１によって検出する状況がシミュレータ２０によりシミュレートされている。このように生成された割込信号ＳＶＩｎｔの間隔を制御ファームウェア側で測定することにより、制御プログラム開発支援装置１は、速度（回転速度）を計測すべき処理に対応することができる。ただし、この場合、状態量の中に経過時間の情報を含ませる必要がある。
【００６９】
また、本実施形態の制御プログラム開発支援装置１では、方形波発生ブロックＢ１から同期ブロックＢ２へ周期的に入力される方形波に対してわざと１パルス分の方形波を取り除く処理を加え、１パルス欠けた方形波を同期ブロックＢ２に入力させることにより、制御ファームウェアでのタイマによるフェイルセーフ機能がきちんと作用するか否かの検証を行なうことができる。
【００７０】
〔１−５〕入出力の同期設定
次に、図８〜図１０を参照しながら、本実施形態での入出力の同期設定について説明する。ここで、図８は本実施形態で入出力の同期設定を行なうためのモデル記述レベル（ディスプレイでの表示状態）を示す図、図９および図１０は、それぞれ、図８に示すモデル記述レベルで記述・設定された同期ブロックＢ２′の動作を説明するためのフローチャートおよびタイムチャートである。
【００７１】
図２に示す同期処理手順において、仮想メカモデル２１は、シミュレーションを実行する前に制御回路１０からの制御量を読み込み、シミュレーションを実行した後に状態量を出力しなければならない。本実施形態では、このような入出力の同期タイミングも、一般的なモデル記述方法〔例えばＭＡＴＬＡＢ／Simulink（MathWorks社）〕を用いて、ディスプレイ上に図８に示すごとく簡易なモデル（ブロック線図）をグラフィカルに記述・作成することによって設定される。
【００７２】
図８に示すモデル記述レベルにおける同期ブロックＢ２′の出力は、この同期ブロックＢ２′への入力パルスの立ち上がりエッジに反応し、１シミュレーションサイクル（Δｔ）分だけ“High”になる。そして、本実施形態では、図８に示すごとく、同期ブロックＢ２′の出力が“High”になる時をトリガとして制御対象モデルＢ５（シミュレータ２０）から状態量を出力するように出力ブロックＢ４が記述・作成される一方、同期ブロックＢ２′の出力が“Low”になる時をトリガとして制御対象モデルＢ５（シミュレータ２０）に制御量を入力するように入力ブロックＢ３が記述・作成されて、入出力タイミングが規定される。
【００７３】
前述した同期ブロックＢ２′の動作を図９に示すフローチャート（ステップＳ５１〜Ｓ６０）に従って具体的に説明する。なお、図９におけるステップＳ５２およびＳ５３は、図６のステップＳ４１およびＳ４２と同様、エッジ検出（パルス立ち上がり検出）を行なう部分である。また、ステップＳ５７〜Ｓ６０は、制御ファームウェアとの同期を行なう部分で、図２のステップＳ２１〜Ｓ２４に対応する処理である。
【００７４】
同期ブロック（同期処理部，シミュレーション制御部２２）Ｂ２′は、シミュレーション周期Δｔ毎に起動され、その都度、まず、同期ブロックＢ２′からの前出力が“High”であるか否かを判断する（ステップＳ５１）。前出力が“High”でなければ、即ち“Low”である場合（ステップＳ５１のＮＯルート）、同期ブロックＢ２′に対する現入力が“High”であるか否かを判断する（ステップＳ５２）。現入力が“High”でなければ、即ち“Low”である場合（ステップＳ５２のＮＯルート）、同期ブロックＢ２′からの出力を“Low”としてから（ステップＳ５４）、現入力を前入力に置き換え且つ現出力を前出力に置き換えて（ステップＳ５６）、処理を終了する。
【００７５】
現入力が“High”である場合（ステップＳ５２のＹＥＳルート）、前入力が“Low”であるか否かを判断し（ステップＳ５３）、前入力が“Low”でなければ、即ち“High”である場合（ステップＳ５３のＮＯルート）、前述したステップＳ５４およびステップＳ５６を実行して処理を終了する。
【００７６】
そして、ステップＳ５３で前入力が“Low”であると判断された場合（ステップＳ５３のＹＥＳルート）、同期ブロックＢ２′への入力パルスの立ち上がりエッジが検出されたことになる。この立ち上がりエッジの検出をトリガにして、同期ブロックＢ２′からの出力を“High”としてから（ステップＳ５５）、現入力を前入力に置き換え且つ現出力を前出力に置き換えて（ステップＳ５６）、処理を終了する。
【００７７】
一方、ステップＳ５１で前出力が“High”であると判断された場合（ステップＳ５１のＹＥＳルート）、制御ファームウェアとの同期処理（ステップＳ５７〜Ｓ６０）へ移行する。この同期処理（ステップＳ５７〜Ｓ６０）は、図２において説明したステップＳ２１〜Ｓ２４の処理に対応するので、その説明は省略する。制御ファームウェアでサーボタスク信号がクリアされ、ステップＳ６０でＹＥＳ判定となると、同期処理を終了し、ステップＳ５２へ移行する。
【００７８】
図９にて上述した同期ステップＢ２′の処理について図１０を参照しながら説明する。図１０におけるシミュレーション時刻ｔ１１〜ｔ１２およびｔ１３〜ｔ１４に示すように、同期ブロックＢ２′の出力は、この同期ブロックＢ２′への入力パルスの立ち上がりエッジに反応して（ステップＳ５３のＹＥＳルート）、制御周期（サーボ間隔）ΔＴごとに、１シミュレーション周期（シミュレーション間隔）Δｔの間だけ“High”になり（ステップＳ５５）、それ以外の時には、同期ブロックＢ２′の出力は常に“Low”になる（ステップS５４）。
【００７９】
また、同期ブロックＢ２′の前出力が“High”であることをトリガとして（つまり同期ブロックＢ２′の出力パルスが立ち下がる直前）、シミュレータ２０は、ステップＳ５７〜Ｓ６０による同期処理へ移行してサーボタスク信号のクリア待ち状態になり、図１０のシミュレーション時刻ｔ１２，ｔ１４でシミュレーションを停止した状態になる。サーボタスク信号がクリアされると（ステップＳ６０のＹＥＳルート）、シミュレータ２０によるシミュレーションが再開される。
【００８０】
そして、同期ブロックＢ２′の出力パルスの立ち下がりに応じて入力ブロックＢ３が機能し、制御ファームウェアからの制御量が制御対象モデルＢ５（仮想メカモデル２１）に入力される。また、同期ブロックＢ２′の出力パルスの立ち上がりに応じて出力ブロックＢ４が機能し、制御対象モデルＢ５（仮想メカモデル２１）の状態量が出力される。
【００８１】
〔１−６〕マルチレート制御への対応手法
次に、図１１〜図１４を参照しながら、本実施形態の制御プログラム開発支援装置１での、マルチレート制御への対応手法について説明する。ここで、図１１は本実施形態でのマルチレート制御について説明するための図、図１２は本実施形態でマルチレート設定を行なうためのモデル記述レベル（ディスプレイでの表示状態）を示す図、図１３は本実施形態でのマルチレート制御に先立つ初期設定手順を説明するためのフローチャート、図１４は、本実施形態でのマルチレート制御手順（図１２に示すモデル記述レベルで設定されたマルチレートブロックＢ６の動作）を説明するためのフローチャートである。
【００８２】
制御ファームウェア（Ｆ／Ｗ）は、サーボ制御ルーチンで計算した制御量を直ちにアクチュエータに出力せず、適当な回路を用いて一定時間が経過した後に出力することもある。例えば図１１に示すように、サーボ制御ルーチン（一制御周期）の間に、アクチュエータに対する出力値（制御量）を“Ａ”から“Ｂ”に変化させる制御を行なう場合がある。このような制御はマルチレート制御と呼ばれるもので、マルチレート制御を採用することにより、制御回路１０（サーボ制御プログラム，制御ファームウェア）は、一制御周期中において異なるタイミングでシミュレータ２０（仮想メカモデル２１）に対して複数の制御量を出力することができる。
【００８３】
本実施形態の制御プログラム開発支援装置１は、サーボ制御プログラムが上述のようなマルチレート制御を採用している場合にも対応することができるようになっている。そのため、制御プログラム開発支援装置１のシミュレータ２０には、制御回路１０からの複数の制御量をそれぞれ所定のタイミングで仮想メカモデル２１（制御対象モデルＢ５）に入力するように制御量の入力制御を行なうマルチレート制御手段がそなえられる。このマルチレート制御手段は、図１２に示すごとく記述・設定されるマルチレートブロックＢ６によって実現される。
【００８４】
本実施形態の装置１をマルチレート制御に対応させるためには、図１１および図１２に示すごとく、ファームウェアから制御量（例えばＡ，Ｂ）とともにその制御量を出力するまでの時間（例えばＴａ，Ｔｂ）を入力する。なお、その時間が固定されている場合には、仮想メカモデル２１の中でその時間を指定してもよい。
【００８５】
そして、本実施形態の制御プログラム開発支援装置１のシミュレータ２０には、上述したマルチレート制御手段を設定するための機能（マルチレート設定手段）がそなえられている。この機能は、シミュレータ２０におけるグラフィカルユーザインタフェース機能（ＧＵＩ機能）を用いて実現されている。つまり、オペレータ等がシミュレータ２０におけるディスプレイ（図示省略）上の表示を参照しながらキーボードやマウス等を操作することにより、マルチレート制御手段の設定が行なわれるようになっている。本実施形態では、一般的なモデル記述方法〔例えばＭＡＴＬＡＢ／Simulink（MathWorks社）〕を用いて、ディスプレイ上に図１２に示すごとく簡易なモデル（ブロック線図）をグラフィカルに記述・作成することにより、マルチレート制御手段の設定が行なわれる。
【００８６】
図１２に示す例では、図８に示したものと同様の同期ブロックＢ２′のほか、入力ブロックＢ３，制御対象モデルＢ５，マルチレートブロックＢ６および遅延ブロック（１／Ｚ）Ｂ７が記述されている。ここで、同期ブロックＢ２′の出力は、入力ブロックＢ３に入力されるとともに、遅延ブロックＢ７を介してマルチレートブロックＢ６に入力されている。
【００８７】
また、入力ブロックＢ３と制御対象モデルＢ５との間にマルチレートブロックＢ６が記述され、入力ブロックＢ３からのマルチレート制御にかかる制御量Ａ，Ｂは、それぞれの出力タイミング（時間Ｔａ，Ｔｂ）とともにマルチレートブロックＢ６に入力され、このマルチレートブロックＢ６から所定の出力タイミングで制御対象モデルＢ５に入力されるようになっている。マルチレート制御以外の制御量は、入力ブロックＢ３から制御対象モデルＢ５へ直接的に入力されるようになっている。
【００８８】
なお、図１２において、１／Ｚの遅延ブロックＢ７が記述されているのは、同期ブロックＢ２′からの制御パルス（出力パルス）を、１シミュレーションサイクルΔｔだけ遅延させるためである。つまり、マルチレートブロックＢ６に入力される制御パルスは、遅延ブロックＢ７により、入力ブロックＢ３に入力される制御パルスよりも１シミュレーションサイクルΔｔだけ遅くなる。入力ブロックＢ３およびマルチレートブロックＢ６は、いずれも、同期ブロックＢ２′からの制御パルスの立ち下がりエッジをトリガとして起動される。
【００８９】
上述のような遅延処理を行なうことで、必ず、入力ブロックＢ３による処理が実行されてから、マルチレートブロックＢ６による処理が実行されることになる。つまり、制御回路１０（ファームウェア）からの指令（制御量，時間）を入力ブロックＢ３で確実に受け取った後に、マルチレートブロックＢ６がマルチレート制御を実行することになる。
【００９０】
このとき、厳密に言えば、マルチレートブロックＢ６に１／Ｚだけ遅れた制御パルスを与えると、マルチレート制御はΔｔだけ遅延することになるが、制御周期ΔＴに対してシミュレーション周期Δｔは小さいので、上述のようなΔｔの遅延は無視することができる。ただし、厳密性を確保したい場合や制御周期ΔＴに対してシミュレーション周期Δｔが小さくない場合などには、マルチレートブロックＢ６において、時間ＴａやＴｂからΔｔを減算して用いればよい。
【００９１】
なお、図１２では、遅延ブロックＢ７をマルチレートブロックＢ６と別個に記述しているが、マルチレートブロックＢ６の内部で、遅延ブロックＢ７と同様の処理を行なってもよく、その場合、遅延ブロックＢ７の記述を省略することができる。また、ここでは、２段のマルチレート制御（制御量Ａ，Ｂ）について説明しているが、本発明は、この段数に限定されるものではなく、同様の原理で３段以上のマルチレート制御にも適用される。
【００９２】
ついで、前述したマルチレートブロックＢ６の動作を、図１４に示すフローチャート（ステップＳ７１〜Ｓ９３）に従って具体的に説明する。
なお、マルチレート制御に先立って初期設定処理が実行されるので、まず、この初期設定処理の手順を、図１３に示すフローチャート（ステップＳ６１〜Ｓ６４）に従って説明する。つまり、シミュレータ２０においては、データ用メモリを確保し（*p=new Data；ステップＳ６１）、初期出力値（p->v=0）を設定するとともに（ステップＳ６２）、初期出力時間（p->t=0）を設定し（ステップＳ６３）、さらに、リスト構造用初期値（p->next=NULL）を設定する（ステップＳ６４）。
【００９３】
さて、図１４を参照しながら、マルチレートブロックＢ６の動作について説明する。
図１３や図１４において、“->”は、Ｃ言語やＣ++言語の構造体もしくはクラスメンバにアクセスするための演算子を示すものである。
また、構造体もしくはクラスデータは、制御量“ｖ”と、その制御量を出力する時間“ｔ”と、さらに次のデータ へのポインタ“next”という３つのメンバを有している。
【００９４】
さらに、変数“ｐ”は、次のような状態（データの型）で保存されている。
0003803019.tif 000002
【００９５】
このようにして、メンバ“next”を用いてリスト構造が形成され、ｔ，ｖの組がいくつでも記憶される。“next”として“NULL”を設定されたデータが、リスト構造の最後（末端）のデータである。
以下では、例えば、Δｔ＝１ とし、且つ、以下のようなリスト構造のデータが設定されている場合についての、マルチレートブロックＢ６の動作を図１４に従って説明する。
【００９６】
p->v =-1
0003803019.tif 000003
【００９７】
図１４に示すシミュレーションサブルーチンは、シミュレーション周期Δｔ毎に呼び出されて実行され、まず、トリガ（遅延ブロックＢ７からの制御パルスの立ち下がりエッジ）が検出されたか否かを判断する（ステップＳ７１）。
トリガが検出されない場合（ステップＳ７１のＮＯルート）、下記(1)〜(4)の処理が順次実行されることになる。
【００９８】
(1) q ← p, q->t (=p->t) ← -2
(2) q ← q->next (=P1), q->t (=P1->t) ← 0
(3) q ← q->next (=P2), q->t (=P2->t) ← 2
(4) q ← q->next (=NULL), q は NULL だからループを抜ける。
【００９９】
ここで、(1)は、ステップＳ７２の後、ステップＳ７３のＮＯルートからステップＳ７４に移行した結果であり、(2)および(3)は、いずれも、ステップＳ７５の後、ステップＳ７３のＮＯルートからステップＳ７４に移行した結果であり、(4)は、ステップＳ７５の後、ステップＳ７３のＹＥＳルートを通って、ステップＳ７３〜Ｓ７５のループを抜けることを示している。
【０１００】
そして、“p->next”は“P1”であって“NULL”ではなく（ステップＳ７６のＮＯルート）、且つ、“p->next->t”は“０”であって“０”以上であるので（ステップＳ７７のＹＥＳルート）、出力値（マルチレートブロックＢ６から出力される制御量）“p->v”として“-１”を出力し（ステップＳ８１）、処理を終了する。この時点でのデータをまとめると、
【０１０１】
0003803019.tif 000004
となる。
【０１０２】
この後、シミュレーション周期Δｔが経過し、シミュレーションサブルーチンが呼び出されて実行され、再び、トリガが検出されない場合（ステップＳ７１のＮＯルート）、ステップＳ７２〜Ｓ７５の処理により、データは、
0003803019.tif 000005
0003803019.tif 000006
となる。この後、処理は、ステップＳ７３のＹＥＳルートを通って、ステップＳ７３〜Ｓ７５のループを抜けることになる。
【０１０３】
このとき、“p->next”は“P1”であって“NULL”ではなく（ステップＳ７６のＮＯルート）、“p->next->t”が“-１”で“０”未満であるので（ステップＳ７７のＮＯルート）、下記(5)〜(7)の処理が、それぞれ、ステップＳ７８〜Ｓ８０により、順次実行されることになる。
【０１０４】
(5) q=p->next ( =P1)
(6) delete p  (領域 p を解放)
(7) p=q (=P1)
これに応じて、データは、
0003803019.tif 000007
となり、“p->next”は“P2”であって“NULL”ではなく（ステップＳ７６のＮＯルート）、且つ、“p->next->t”は“１”であって“０”以上であるので（ステップＳ７７のＹＥＳルート）、出力値（マルチレートブロックＢ６から出力される制御量）“p->v”として“２”を出力し（ステップＳ８１）、処理を終了する。
【０１０５】
上述のようにして、出力値“p->v”は所定のタイミングで“-１”から“２”に変更される。また、処理に伴い“p->next”が“NULL”となった場合（ステップＳ７６のＹＥＳルート）には、出力値として“p->v”を出力し続けることになる。
【０１０６】
一方、トリガが検出された場合（ステップＳ７１のＹＥＳルート）、そのトリガに伴って、入力ブロックＢ３から新規（未処理）のマルチレートデータが入力されることがあるので、未処理の入力（マルチレートデータ）が存在するか否かを判断する（ステップＳ８２）。
【０１０７】
未処理の入力がない場合（ステップＳ８２のＮＯルート）には、ステップＳ７２に移行して前述した処理を行なう。これに対し、未処理の入力がある場合（ステップＳ８２のＹＥＳルート）には、ステップＳ８３〜Ｓ９３の処理を実行することにより、未処理のマルチレートデータを、既に時系列順に保持されているマルチレートデータ列中の適当な位置に配置し、未処理のマルチレートデータを含めたマルチレートデータ列を時系列順に保持する。
【０１０８】
次に、上述したデータ状態に引き続いてトリガが検出され（ステップＳ７１のＹＥＳルート）、且つ、未処理の入力 (例えばv=3,t=3) があった場合（ステップＳ８２のＹＥＳルート）について説明する。このとき、下記(8)〜(13)の処理が順次実行される。
【０１０９】
(8) まず領域を確保し、そこのポインタを“tmp”とする(仮にtmp=P3とする；ステップＳ８３)。
(9) “tmp->v=3”,“tmp->t=3”,“tmp->next=NULL”を入力値として設定する（ステップＳ８４）。
(10)“p->t(=-1)”よりも“tmp->t (=3)”が大きいので（ステップＳ８５のＮＯルート）、
【０１１０】
(11)“q = p”により、“q”として“P1”が設定される（ステップＳ８６）。
(12)“q->next (=P2)” は存在し（ステップＳ８７のＮＯルート）、且つ、“q->next->t (=P2->t =1)”は“tmp->t (=3)”よりも小さいので（ステップＳ８８のＮＯルート）、“q ”は“q->next (=P2)”に設定され（ステップＳ８９）、ステップＳ８７に戻る。
【０１１１】
(13)  そして、今度は q->next (=P2->next =NULL)がは存在しないので（ステップＳ８７のＹＥＳルート）、“tmp-> next”として“q->next (=NULL)”を設定するとともに（ステップＳ９０）、“q->next”として“tmp (=P3)”を設定してから（ステップＳ９１）、ステップＳ８２に戻る。この後、本例では、未処理の入力はないので（ステップＳ８２のＮＯルート）、ステップＳ７２に移行する。
【０１１２】
以上の処理により、データは、
0003803019.tif 000008
に更新される。
【０１１３】
なお、ステップＳ８５で“p->t”よりも“tmp->t”が小さいと判断された場合（ステップＳ８５のＹＥＳルート）には、“tmp-> next”として“p”を設定するとともに（ステップＳ９２）、“p”として“tmp”を設定してから（ステップＳ９３）、ステップＳ８２に戻る。
以上のようにして、トリガが検出された場合、新規（未処理）の入力のすべてに対し、時間t の大きさを比較し、“t”の小さい順（昇順）に入力（マルチレートデータ）を並べる処理が行なわれる。
【０１１４】
〔１−７〕シミュレーションの並列処理
仮想メカモデル２１が、その動作のシミュレーションを個別に実行することが可能な複数の部分から構成されるものである場合、本実施形態におけるモデル実行環境（シミュレータ）２０を、前記複数の部分それぞれの動作を並列的にシミュレートする複数のプロセッサ（図１５のＭＣＵ１２ａ〜１２ｃ参照）によって構成することで、シミュレーション処理の高速化をはかることができる。
【０１１５】
例えば制御対象（仮想メカモデル２１）がＨＤＤである場合、本実施形態におけるモデル実行環境（シミュレータ）２０においては、図１５に示すように、仮想メカモデル２１をディスクモデル，アームモデル，流体モデルのような相関関係の低い３つの部分に分割し、各部分の動作を個別のプロセッサ（例えばＭＣＵ１２ａ，１２ｂ，１２ｃ）により並列的に解析してシミュレートすることができる。これにより、シミュレーション処理を大幅に高速化することができる。なお、図１５は本実施形態でのシミュレーションの並列処理を説明するための図である。
【０１１６】
この場合、これらのＭＣＵ１２ａ〜１２ｃのうちの一つがマスタとなり、その他のスレーブＭＣＵは、マスタが発生する信号に対し割込やポーリングを行なうことによって、これらのＭＣＵ１２ａ〜１２ｃのシミュレーション時間を同期させることができる。また、同期をとる間隔は、アームとディスクのように相関関係が低いモデルどうしについてはサーボ間隔（制御周期ΔＴ）とし、また流体が絡むなど、多少の相関関係があるモデルどうしについてはシミュレーション間隔（シミュレーション周期Δｔ）とする。
【０１１７】
〔１−８〕中継回路の詳細構成および各種機能
図１６は本実施形態の中継回路３０の構成および割込信号ＳＶＩｎｔの取扱を説明するためのブロック図である。
本実施形態の中継回路３０は、図１にて前述したごとく、２つのプロセッサ（制御回路１０およびシミュレータ２０）の間を繋ぐバス上に共有メモリ３１をそなえて構成されている。より詳細に説明すると、中継回路３０は、図１６に示すように、共有メモリ３１を成す複数のレジスタ３１ａと、第１書込／読出制御部として機能するセレクタ３２と、第２書込／読出制御部として機能するセレクタ３３とをそなえて構成されている。
【０１１８】
ここで、レジスタ３１ａは、それぞれ、制御回路１０（制御ファームウェア）からシミュレータ２０への制御量とシミュレータ２０から制御回路１０（制御ファームウェア）への状態量とを含むデータを一時的に保持しうるものである。
セレクタ３２は、複数のレジスタ３１ａと制御回路１０との間でデータの書込／読出を制御するもので、制御回路１０からＦ／Ｗアドレスバス６１を介して与えられたアドレス情報に応じて、複数のレジスタ３１ａのうちの一つ（アドレス情報に応じたレジスタ３１ａ）とＦ／Ｗデータバス６２とを接続するように切替動作を行なうものである。
【０１１９】
また、セレクタ３３は、複数のレジスタ３１ａとシミュレータ２０との間でデータの書込／読出を制御するもので、シミュレータ２０からシミュレータアドレスバス７１を介して与えられたアドレス情報に応じて、複数のレジスタ３１ａのうちの一つ（アドレス情報に応じたレジスタ３１ａ）とシミュレータデータバス７２とを接続するように切替動作を行なうものである。
【０１２０】
このような構成により、制御回路１０（ファームウェア）からの制御量は、データバス６２およびセレクタ３２を通じ、指定されたレジスタ３１ａに一旦書き込まれた後、同期信号（サーボタスク信号のクリア）に応じて、セレクタ３３およびデータバス７２を通じシミュレータ２０に入力される。一方、シミュレータ２０からの状態量は、データバス７２およびセレクタ３３を通じ、指定されたレジスタ３１ａに一旦書き込まれた後、同期信号（割込信号ＳＶＩｎｔ）に応じて、セレクタ３２およびデータバス６２を通じて制御回路１０に入力される。
【０１２１】
このとき、本実施形態の中継回路３０では、シミュレータ２０からの割込信号ＳＶＩｎｔが、特定のレジスタ３１ａ（図１６では最上段のレジスタ）における所定ビットｎに書き込まれ、そのビットｎの値（割込信号ＳＶＩｎｔ）が、直接外部に出力され、セレクタ３２を介することなくレジスタ３１ａから制御回路１０へ直接的に送出されるように構成されている。
【０１２２】
これにより、制御回路１０側では、セレクタ３２による読出制御（ファームウェアの読み込み動作）を行なうことなく割込信号ＳＶＩｎｔを得ることができ、ハードウェア割り込みを利用した同期処理を行なうことが可能になる。従って、ファームウェアのメインループにてＳＶＩｎｔを常に監視するためのポーリングを行なう必要がなくなる。
【０１２３】
なお、図１６に示す中継回路３０の共有メモリ３１は、双方向アクセスが可能なレジスタ３１ａにより構成されているが、回路を簡素化するために、制御ファームウェアがライト専用で用い且つシミュレータ２０がリード専用で用いるレジスタと、シミュレータ２０がライト専用で用い且つ制御ファームウェアがリード専用で用いるレジスタとの二種類から構成されてもよい。さらに、レジスタ３１ａの一方の側だけリード／ライト可能な構成としてもよい。この場合、割込信号ＳＶＩｎｔは、シミュレータ２０側からライト可能なレジスタ３１ａにおける所定ビットに書き込まれる。
【０１２４】
ところで、本発明の目的は、ファームウェア（サーボ制御プログラム）の開発・デバッグ（検証）を支援することであるが、そのためには、制御回路１０とシミュレータ２０との間における通信内容を傍受したり、その通信内容を捏造したりすることができると、デバッグ時に便利である。
そこで、本実施形態では、図１７〜図２０に示すような各種機能が中継機構３０にそなえられている。
【０１２５】
ここで、図１７は任意のレジスタ３１ａの内容を表示する機能をそなえた中継回路３０の構成を示すブロック図、図１８は特定のレジスタ３１ａの内容を表示する機能をそなえた中継回路３０の構成を示すブロック図、図１９は特定のレジスタ３１ａにデータを設定する機能をそなえた中継回路３０の構成を示すブロック図、図２０はレジスタ３１ａからのデータにノイズを重畳する機能をそなえた中継回路３０の構成を示すブロック図である。
【０１２６】
図１７に示す中継回路３０では、複数のレジスタ３１ａに保持されているデータを表示しうるデータ表示用セグメント（データ表示部）３６がそなえられるとともに、このセグメント３６に表示すべきデータを保持するレジスタ３１ａを選択・指定するための、レジスタ選択スイッチ（選択部）３４およびセレクタ（選択部）３５がそなえられている。
【０１２７】
レジスタ選択スイッチ３４は、例えばディップスイッチ，ロータリスイッチ等で構成されオペレータ等により手動操作されるものである。また、セレクタ３５は、レジスタ選択スイッチ３４からの信号に応じ、複数のレジスタ３１ａのうちの一つ（前記信号に応じたレジスタ３１ａ）とセグメント３６とを接続するように切替動作を行ない、そのレジスタ３１ａに保持されているデータをセグメント３６に表示させるものである。
【０１２８】
これにより、制御回路１０とシミュレータ２０との間で通信中のデータであって任意のレジスタ３１ａに保持されるデータが、オペレータ等の指示に応じてセグメント３６で表示され、オペレータ等はそのデータを参照・確認することができる。
なお、ここで、回路規模を小さくするため、セレクタ３５として、バス用セレクタ３２もしくは３３を流用し、バスの未使用時にのみ、そのセレクタ３２もしくは３３を介してセグメント３６にデータを表示するようにしてもよい。
【０１２９】
また、図１７に示すごとくセグメント３６でデジタル表示する他に、セレクタ３５で選択されたデータを、そのままデジタル信号として出力し他のコンピュータに入力して記録したり、Ｄ／Ａ変換器を介してアナログ出力しオシロスコープなどで表示・観察したりしてもよい。
【０１３０】
さらに、図１８に示すごとく、スイッチ３４やセレクタ３５を省略し、データ表示用セグメント３６ａで表示するレジスタ３１ａを特定のものに固定してもよい。つまり、図１８に示す中継回路３０では、セグメント３６ａは、複数のレジスタ３１ａのうちの特定のものに直接的に接続され、その特定のレジスタ３１ａに保持されているデータのみをデジタル表示している。
【０１３１】
また、図１９に示す中継回路３０では、複数のレジスタ３１ａのうちの少なくとも一つに所望のデータを強制的に設定・格納するためのスイッチ（データ入力部）３７がそなえられている。
本実施形態において、スイッチ３７は、例えばディップスイッチ，ロータリスイッチ等で構成されオペレータ等により手動操作されるもので、複数のレジスタ３１ａのうちの特定のものに直接的に接続され、その特定のレジスタ３１ａに、スイッチ３７によって指定されたデータが設定入力されるようになっている。このスイッチ３７を接続されたレジスタ３１ａは、読み取り専用となっている。
【０１３２】
そして、このように特定のレジスタ３１ａに設定されたデータを、ファームウェア（あるいはシミュレータ２０）で読めるようにすることにより、そのデータに応じた制御プログラムの挙動や仮想メカモデル２１の動作状態を確認することができ、制御プログラムのデバッグを支援することができる。
【０１３３】
なお、スイッチ３７からデータを手動入力する他に、外部から与えられたアナログデータをＡ／Ｄ変換器によりデジタルデータに変換して特定のレジスタ３１ａに設定入力したり、他のコンピュータの出力であるデジタルデータを、直接、特定のレジスタ３１ａに設定入力したりすることで、デバッグを支援することも考えられる。
【０１３４】
また、図１９に示すような機能を用いることにより、サーボゲインの調整を手動入力によりリアルタイムで行なったり、ＦＦＴ（Fast Fourier Transform）アナライザを用いて解析を行なったりすることができる。
ＦＦＴアナライザを用いる場合、ＦＦＴアナライザはアナログ信号を入出力するものであるため、ＦＦＴアナライザからの出力（アナログ信号）を、Ａ／Ｄ変換器によりデジタル信号に変換して特定のレジスタ３１ａに設定し、対象物（シミュレータ２０もしくはファームウェア）からの応答を待つ。そして、対象物からの応答（デジタル信号）をＤ／Ａ変換器によりアナログ信号に変換してからＦＦＴアナライザに入力することになる。
【０１３５】
さらに、図２０に示す中継回路３０では、特定のレジスタ３１ａから読み出されたデータにスイッチ３９を介してノイズを重畳する加算器（ノイズ重畳部）３８ａ，３８ｂが、レジスタ３１ａの両側（ファームウェア側およびシミュレータ２０側）のそれぞれそなえられている。
これにより、オペレータ等は、ノイズを加算器３８ａ，３８ｂによってデータに重畳することができ、そのノイズに応じたファームウェア（制御プログラム）の挙動やモデルの動作状態を確認することができる。
【０１３６】
なお、図２０に示す例では、加算器３８ａ，３８ｂを用いて、外部からのノイズを特定のレジスタ３１ａ（アドレス）に加えているが、加算器３８ａ，３８ｂの代わりに乗算器を用いてもよい。また、図２０では、レジスタ３１ａの両側のバスに加算器３８ａ，３８ｂをそなえているが、いずれか一方のバスのみに加算器をそなえてもよい。その他、セレクタ（図示省略）を用い任意のレジスタからの読み込み値に対してノイズを加算する機能を付加してもよい。
【０１３７】
〔１−９〕本実施形態の効果
このように、本発明の一実施形態としての制御プログラム開発支援装置１によれば、制御回路１０（ＭＰＵ１２）での演算処理を遅らせてシミュレータ２０でのモデル演算処理（シミュレーション）と同期を取ることにより、サーボ特性を変化させずにスローモーション的に且つ時間厳密性を保ったまま、精密なシミュレーションが行なわれる。従って、実際のメカを用いることなく、比較的小型で応答の速い製品についてのサーボ制御プログラムの開発・デバッグ（検証）を行なうことができる。
【０１３８】
また、モデルパラメータを変更するだけで容易に任意の特性をもった仮想メカモデル２１を作成してサーボ制御プログラム（ファームウェア）によって制御させることができるので、サーボ制御プログラムが、大量に生産される製品のバラツキにどの程度まで対応できるかの検証、つまりサーボ制御プログラムの品質検証を確実に行なうことができる。また、任意のタイミングで任意の外乱を与えることが可能なため、サーボ制御プログラムの品質をより確実に検証することができる。
【０１３９】
さらに、仮想メカモデル２１を用いてシミュレーションを行なうことにより、イベントブレイクやステップデバッグなどの機能を使用することが可能になり、サーボ制御プログラム開発をより容易に行なえるほか、新しいアクチュエータやセンサを用いた新規の制御手法も簡単に検証することが可能になる。
オペレータ等は、図５や図８で説明した同期設定手段（ＧＵＩ機能）を用いることにより、シミュレータ２０の動作と制御回路１０（ファームウェア）の動作との同期設定を容易かつ任意に行なうことができる。
【０１４０】
図８〜図１０で説明したマルチレート制御手段を用いて、一制御周期中に制御量が変化するマルチレート制御がシミュレートされるので、本実施形態の制御プログラム開発支援装置１は、サーボロジックがマルチレート制御を実現していた場合に確実に対応することができる。その際、オペレータ等は、図８で説明したマルチレート設定手段（ＧＵＩ機能）を用いることにより、そのマルチレート制御を容易かつ任意に定義・設定することができる。
【０１４１】
図７にて説明したように、シミュレータ２０によるシミュレーション結果に応じて、サーボ制御ルーチンへ移行することができるので、タイマによるフェイルセーフ機能の確認や、単位時間当たりの変化量（速度，回転数等）を測定する処理への対応など、各種機能が実現され、サーボ制御プログラムの開発・デバッグ（検証）を確実に支援することができる。
【０１４２】
また、図１５にて説明したように、仮想メカモデル２１の構成部分の動作シミュレーションを、複数のプロセッサ（本実施形態ではＭＣＵ１２ａ〜１２ｃ）で並列的に実行することができるので、シミュレーション処理を大幅に高速化することができる。
【０１４３】
さらに、本実施形態では、図１６〜図２０に示すように、中継回路３０を、複数のレジスタ３１ａ，セレクタ３２および３３によって構成することで、制御回路１０からの制御量やシミュレータ２０からの状態量を、レジスタ３１ａにおいて一時的に保持してから、シミュレータ２０や制御回路１０に確実に中継することができる。
【０１４４】
このとき、ファームウェア（制御回路１０）側ではセレクタ３２による読出制御を行なうことなく割込信号ＳＶＩｎｔを得ることができるので、ハードウェア割り込みを利用した同期処理を行なうことが可能になり、制御回路１０は、その割込信号ＳＶＩｎｔに応じて、制御量の算出動作を直ちに且つ確実に開始することができる。
【０１４５】
また、図１７や図１８に示すごとく、制御回路１０とシミュレータ２０との間で通信中のデータを表示するデータ表示用セグメント３６，３６ａにより、オペレータ等はそのデータを参照・確認することができるので、サーボ制御プログラムの開発・デバッグ（検証）を確実に支援することができる。
【０１４６】
さらに、図１９に示すごとく、オペレータ等は、任意のデータを、スイッチ３７からレジスタ３１ａに書き込むことによって制御回路１０やシミュレータ２０へ直接的に入力することができるので、そのデータに応じたサーボ制御プログラムの挙動や仮想メカモデル２１の動作状態を確認することが可能になり、サーボ制御プログラムの開発・デバッグ（検証）を確実に支援することができる。
【０１４７】
そして、図２０に示すごとく、オペレータ等は、ノイズを加算器３８ａ，３８ｂによってデータに重畳することができるので、そのノイズに応じたサーボ制御プログラムの挙動やモデルの動作状態を確認することが可能になり、サーボ制御プログラムの開発・デバッグ（検証）を確実に支援することができる。
【０１４８】
〔２〕その他
なお、本発明は上述した実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲で種々変形して実施することができる。
例えば、上述した実施形態では、制御対象が磁気ディスクドライブ（ＨＤＤ）である場合について説明したが、本発明は、これに限定されるものではなく、光ディスク（ＣＤ，ＭＯ，ＤＶＤ，ＭＤ），磁気テープ装置（ＤＡＴ，ＶＴＲ），ＮＣ工作機など、緻密なサーボ制御を必要とするあらゆる分野に応用することができる。さらに、上述した実施形態では、制御対象がサーボ機構である場合について説明したが、本発明は、このようなサーボ機構に限定されるものではない。
【０１４９】
〔３〕付記
（付記１）  機構の動作を制御する制御プログラムを実行し、該機構に対する制御量を所定の制御周期で算出して出力する制御プログラム実行部と、
該機構を仮想的なモデルとして内部に構築され、該モデルを用い、前記所定制御周期よりも短く設定された所定のシミュレーション周期で、前記所定の制御周期に対応する時間に亘って該機構の動作をシミュレートすることにより、該機構の状態量を算出して出力するシミュレーション部と、
該制御プログラム実行部から該シミュレーション部への前記制御量、および、該シミュレーション部から該制御プログラム実行部への前記状態量を一時的に保持し中継する中継部と、
該シミュレーション部からの前記状態量が該中継部に保持されると、該シミュレーション部を、該制御プログラム実行部からの応答待ち状態へ移行させるとともに、該制御プログラム実行部による、前記状態量に応じた制御量の算出動作を開始させる一方、該制御プログラム実行部からの前記制御量が該中継部に保持されると、該制御プログラム実行部を、該シミュレーション部からの応答待ち状態へ移行させるとともに、該シミュレーション部による、前記制御量に応じたシミュレーション動作を開始させるシミュレーション制御部とをそなえたことを特徴とする、制御プログラム開発支援装置。
【０１５０】
（付記２）  サーボ機構の動作を制御する制御プログラムを実行し、該サーボ機構に対する制御量を所定の制御周期で算出して出力する制御プログラム実行部と、
該サーボ機構を仮想的なモデルとして内部に構築され、該モデルを用いて該サーボ機構の動作を動力学的に解析しながら、前記所定制御周期よりも短く設定された所定のシミュレーション周期で、前記所定の制御周期に対応する時間に亘って該サーボ機構の動作をシミュレートすることにより、該サーボ機構の状態量を算出して出力するシミュレーション部と、
該制御プログラム実行部から該シミュレーション部への前記制御量、および、該シミュレーション部から該制御プログラム実行部への前記状態量を一時的に保持し中継する中継部と、
該シミュレーション部からの前記状態量が該中継部に保持されると、該シミュレーション部を、該制御プログラム実行部からの応答待ち状態へ移行させるとともに、該制御プログラム実行部による、前記状態量に応じた制御量の算出動作を開始させる一方、該制御プログラム実行部からの前記制御量が該中継部に保持されると、該制御プログラム実行部を、該シミュレーション部からの応答待ち状態へ移行させるとともに、該シミュレーション部による、前記制御量に応じたシミュレーション動作を開始させるシミュレーション制御部とをそなえたことを特徴とする、制御プログラム開発支援装置。
【０１５１】
（付記３）  該シミュレーション制御部の同期設定を行なうための同期設定手段をそなえたことを特徴とする、付記２記載のサーボ制御プログラム開発支援装置。
（付記４）  該同期設定手段が、グラフィカルユーザインタフェース機能を用いて構成されていることを特徴とする、付記３記載の制御プログラム開発支援装置。
【０１５２】
（付記５）  該制御プログラム実行部が、一制御周期中において異なるタイミングで該シミュレーション部に入力されるべき複数の制御量を出力するものであり、
前記複数の制御量をそれぞれ所定のタイミングで該シミュレーション部に入力するように制御量の入力制御を行なうマルチレート制御手段をそなえたことを特徴とする、付記２記載の制御プログラム開発支援装置。
【０１５３】
（付記６）  該マルチレート制御手段の設定を行なうためのマルチレート設定手段をそなえたことを特徴とする、付記５記載の制御プログラム開発支援装置。
（付記７）  該マルチレート設定手段が、グラフィカルユーザインタフェース機能を用いて構成されていることを特徴とする、付記６記載の制御プログラム開発支援装置。
【０１５４】
（付記８）  該シミュレーション制御部が、該シミュレーション部によるシミュレーション結果に基づいて、該制御プログラム実行部による前記制御量の算出動作の開始タイミングを決定することを特徴とする、付記２記載の制御プログラム開発支援装置。
（付記９）  該モデルが、その動作のシミュレーションを個別に実行することが可能な複数の部分から構成されるものであり、
該シミュレーション部が、前記複数の部分それぞれの動作を並列的にシミュレートする複数のプロセッサをそなえて構成されていることを特徴とする、付記２記載の制御プログラム開発支援装置。
【０１５５】
（付記１０）  該中継部が、
該制御プログラム実行部から該シミュレーション部への前記制御量と該シミュレーション部から該制御プログラム実行部への前記状態量とを含むデータを一時的に保持しうる複数のレジスタと、
該複数のレジスタと該制御プログラム実行部との間で前記データの書込／読出を制御する第１書込／読出制御部と、
該複数のレジスタと該シミュレーション部との間で前記データの書込／読出を制御する第２書込／読出制御部とをそなえて構成されていることを特徴とする、付記２記載の制御プログラム開発支援装置。
【０１５６】
（付記１１）  該制御プログラム実行部による前記制御量の算出動作を開始させるべく該シミュレーション部から該複数のレジスタの一つに入力された割込信号については、該第１書込／読出制御部を介することなく、当該レジスタから該制御プログラム実行部へ直接的に送出されることを特徴とする、付記１０記載の制御プログラム開発支援装置。
【０１５７】
（付記１２）  該複数のレジスタに保持されているデータを表示しうるデータ表示部をそなえたことを特徴とする、付記１０記載の制御プログラム開発支援装置。
（付記１３）  該複数のレジスタの中から選択した、少なくとも一つのレジスタに保持されているデータを該データ表示部に表示させる選択部をそなえたことを特徴とする、付記１２記載の制御プログラム開発支援装置。
【０１５８】
（付記１４）  該データ表示部が、該複数のレジスタのうちの特定のものに直接的に接続され、該特定のレジスタに保持されているデータを表示することを特徴とする、付記１２記載の制御プログラム開発支援装置。
（付記１５）  該複数のレジスタのうちの少なくとも一つに所望のデータを強制的に設定・格納するためのデータ入力部をそなえたことを特徴とする、付記１０記載の制御プログラム開発支援装置。
【０１５９】
（付記１６）  該データ入力部が、該複数のレジスタのうちの特定のものに直接的に接続され、該特定のレジスタに前記所望のデータを設定することを特徴とする、付記１５記載の制御プログラム開発支援装置。
（付記１７）  該複数のレジスタのうちの少なくとも一つから読み出されたデータにノイズを重畳するノイズ重畳部をそなえたことを特徴とする、付記１０記載の制御プログラム開発支援装置。
【０１６０】
【発明の効果】
以上詳述したように、本発明の制御プログラム開発支援装置によれば、以下のような効果ないし利点を得ることができる。
（１）制御プログラム実行部での演算処理を遅らせてシミュレーション部でのモデル演算処理（シミュレーション）と同期を取ることにより、機構の特性（サーボ特性）を変化させずにスローモーション的に且つ時間厳密性を保ったまま、精密なシミュレーションが行なわれる。従って、実際のメカを用いることなく、比較的小型で応答の速い製品についての制御プログラムの開発・デバッグ（検証）を行なうことができる。
【０１６１】
（２）モデルパラメータを変更するだけで容易に任意の特性をもったモデルを作成して制御プログラムによって制御させることができる。従って、制御プログラムが、大量に生産される製品のバラツキにどの程度まで対応できるかの検証、つまり制御プログラムの品質検証を確実に行なうことができる。
【０１６２】
（３）仮想的なモデルを用いてシミュレーションを行なうことにより、ステップデバッグなどの機能を使用することが可能になり、制御プログラム開発をより容易に行なえるほか、新しいアクチュエータやセンサを用いた新規の制御手法も簡単に検証することが可能になる。
（４）オペレータ等は、同期設定手段（ＧＵＩ機能）を用いて、シミュレーション部の動作と制御プログラム実行部の動作との同期設定を容易かつ任意に行なうことができる。
【０１６３】
（５）マルチレート制御手段を用いて、一制御周期中に制御量が変化するマルチレート制御がシミュレートされるので、サーボロジックがマルチレート制御を実現していた場合に確実に対応することができる。その際、オペレータ等は、マルチレート設定手段（ＧＵＩ機能）を用いて、そのマルチレート制御を容易かつ任意に定義・設定することができる。
【０１６４】
（６）シミュレーション部によるシミュレーション結果に応じて、制御プログラム実行部での制御ルーチンへ移行することができるので、タイマによるフェイルセーフ機能の確認や、単位時間当たりの変化量（速度，回転数等）を測定する処理への対応など、各種機能が実現され、制御プログラムの開発・デバッグ（検証）を確実に支援することができる。
【０１６５】
（７）モデルの構成部分の動作シミュレーションを、複数のプロセッサで並列的に実行することができるので、シミュレーション処理を大幅に高速化することができる。
（８）中継部を、複数のレジスタ，第１書込／読出制御部および第２書込／読出制御部によって構成することで、制御プログラム実行部からの制御量やシミュレーション部からの状態量を、レジスタにおいて一時的に保持してから、シミュレーション部や制御プログラム実行部に確実に中継することができる。
【０１６６】
（９）制御プログラム実行部側では第１書込／読出制御部による読出制御を行なうことなく割込信号を得ることができるので、ハードウェア割り込みを利用した同期処理を行なうことが可能になり、制御プログラム実行部は、その割込信号に応じて、制御量の算出動作を直ちに且つ確実に開始することができる。
（１０）制御プログラム実行部とシミュレーション部との間で通信中のデータを表示するデータ表示部により、オペレータ等はそのデータを参照・確認することができるので、制御プログラムの開発・デバッグ（検証）を確実に支援することができる。
【０１６７】
（１１）オペレータ等は、任意のデータを、データ入力部からレジスタに書き込むことによって制御プログラム実行部やシミュレーション部へ直接的に入力することができるので、そのデータに応じた制御プログラムの挙動やモデルの動作状態を確認することが可能になり、制御プログラムの開発・デバッグ（検証）を確実に支援することができる。
【０１６８】
（１２）オペレータ等は、ノイズをノイズ重畳部によってデータに重畳することができるので、そのノイズに応じた制御プログラムの挙動やモデルの動作状態を確認することが可能になり、制御プログラムの開発・デバッグ（検証）を確実に支援することができる。
【図面の簡単な説明】
【図１】本発明の一実施形態としての制御プログラム開発支援装置の構成を従来システムの構成と比較して示すもので、（ａ）は従来システムの構成を示すブロック図、（ｂ）は本実施形態の構成を示すブロック図である。
【図２】本実施形態での同期処理手順（シミュレーション制御部の動作）を説明するためのフローチャートである。
【図３】本実施形態での同期処理手順（シミュレーション制御部の動作）を説明するためのタイムチャートである。
【図４】本実施形態のシミュレータでのシミュレーション原理を説明するためのフローチャートである。
【図５】本実施形態で同期設定を行なうためのモデル記述レベル（ディスプレイでの表示状態）を示す図である。
【図６】図５に示すモデル記述レベルで記述・設定された同期ブロックの動作を説明するためのフローチャートである。
【図７】本実施形態の装置において、割り込み間隔に応じ速度を計測する手法について説明するための図である。
【図８】本実施形態で入出力の同期設定を行なうためのモデル記述レベル（ディスプレイでの表示状態）を示す図である。
【図９】図８に示すモデル記述レベルで記述・設定された同期ブロックの動作を説明するためのフローチャートである。
【図１０】図８に示すモデル記述レベルで記述・設定された同期ブロックの動作を説明するためのタイムチャートである。
【図１１】本実施形態でのマルチレート制御について説明するための図である。
【図１２】本実施形態でマルチレート設定を行なうためのモデル記述レベル（ディスプレイでの表示状態）を示す図である。
【図１３】本実施形態でのマルチレート制御に先立つ初期設定手順を説明するためのフローチャートである。
【図１４】本実施形態でのマルチレート制御手順（図１２に示すモデル記述レベルで設定されたマルチレートブロックの動作）を説明するためのフローチャートである。
【図１５】本実施形態でのシミュレーションの並列処理を説明するための図である。
【図１６】本実施形態の中継回路の構成および割込信号の取扱を説明するためのブロック図である。
【図１７】任意のレジスタの内容を表示する機能をそなえた中継回路の構成を示すブロック図である。
【図１８】特定のレジスタの内容を表示する機能をそなえた中継回路の構成を示すブロック図である。
【図１９】特定のレジスタにデータを設定する機能をそなえた中継回路の構成を示すブロック図である。
【図２０】レジスタからのデータにノイズを重畳する機能をそなえた中継回路の構成を示すブロック図である。
【符号の説明】
１  制御プログラム開発支援装置
１０  制御回路（制御プログラム実行部，ファームウェア実行用プロセッサ，制御ファームウェア）
１１  制御用ＬＳＩ
１２，１２ａ，１２ｂ，１２ｃ  ＭＣＵ（プロセッサ）
１３  メモリ
２０  モデル実行環境（シミュレーション部，モデル演算用プロセッサ，シミュレータ）
２１  仮想メカモデル
２２  シミュレーション制御部（同期処理部）
３０  中継回路（中継部）
３１  共有メモリ（バッファ，レジスタ）
３１ａ  レジスタ
３２  セレクタ（第１書込／読出制御部）
３３  セレクタ（第２書込／読出制御部）
３４  レジスタ選択スイッチ（選択部）
３５  セレクタ（選択部）
３６，３６ａ  データ表示用セグメント（データ表示部）
３７  スイッチ（データ入力部）
３８ａ，３８ｂ  加算器（ノイズ重畳部）
３９  スイッチ
４０  状態表示記録部（データ表示部）
５０  ディスク
５０ａ  サーボマーク
５１  ヘッド
６１  Ｆ／Ｗアドレスバス
６２  Ｆ／Ｗデータバス
７１  シミュレータアドレスバス
７２  シミュレータデータバス
１００  メカ
１１０  アクチュエータ
１２０  センサ
２００  制御回路
２１０  制御用ＬＳＩ
２１１  ＣＰＵ
２１２  メモリ
２１３  サーボロジック
２１４  センサロジック
２２０  ドライバ
２３０  検出回路
３００  状態表示部
Ｂ２，Ｂ２′  同期ブロック（同期処理部，シミュレーション制御部）
Ｂ５  制御対象モデル
Ｂ６  マルチレートブロック（マルチレート制御手段）
【図１】
0003803019.tif 000009
【図２】
0003803019.tif 000010
【図３】
0003803019.tif 000011
【図４】
0003803019.tif 000012
【図５】
0003803019.tif 000013
【図６】
0003803019.tif 000014
【図７】
0003803019.tif 000015
【図８】
0003803019.tif 000016
【図９】
0003803019.tif 000017
【図１０】
0003803019.tif 000018
【図１１】
0003803019.tif 000019
【図１２】
0003803019.tif 000020
【図１３】
0003803019.tif 000021
【図１４】
0003803019.tif 000022
【図１５】
0003803019.tif 000023
【図１６】
0003803019.tif 000024
【図１７】
0003803019.tif 000025
【図１８】
0003803019.tif 000026
【図１９】
0003803019.tif 000027
【図２０】
0003803019.tif 000028