(57)【要約】【課題】制御精度を高めるために制御周期を可能な限り短くしたいという要望がある。【解決手段】制御装置は、モータを駆動するモータドライバに対して指令値を出力するためのインターフェイスと、モータドライバが駆動するモータの挙動を指定するための１または複数の指令を格納する記憶部と、第１演算回路および第２演算回路を含む処理部とを含む。第１演算回路は、記憶部に格納されている１または複数の指令を逐次解釈して指令値の算出に関する関数を定義するパラメータセットを逐次算出する第１処理を実行する。第２演算回路は、第１処理の実行とは独立して、逐次算出されるパラメータセットに基づいて指令値を予め定められた制御周期ごとに算出する第２処理を実行する。【選択図】図６
2018037021.tif 000002
【特許請求の範囲】
【請求項１】
モータを駆動するモータドライバに対して指令値を出力するためのインターフェイスと、
前記モータドライバが駆動するモータの挙動を指定するための１または複数の指令を格納する記憶部と、
第１演算回路および第２演算回路を含む処理部とを備え、
前記第１演算回路は、前記記憶部に格納されている前記１または複数の指令を逐次解釈して前記指令値の算出に関する関数を定義するパラメータセットを逐次算出する第１処理を実行し、
前記第２演算回路は、前記第１処理の実行とは独立して、前記逐次算出されるパラメータセットに基づいて前記指令値を予め定められた制御周期ごとに算出する第２処理を実行する、制御装置。
【請求項２】
前記第１演算回路および前記第２演算回路からアクセス可能な共有メモリをさらに備え、
前記第１演算回路は、前記逐次算出されるパラメータセットを前記共有メモリに書込み、
前記第２演算回路は、前記共有メモリからパラメータセットを逐次読出す、請求項１に記載の制御装置。
【請求項３】
前記第１演算回路は、前記パラメータセットを算出すると、当該算出されたパラメータセットに関連付けて、有効であることを示す状態情報を前記共有メモリに書込み、
前記第２演算回路は、前記パラメータセットに基づく前記指令値の算出が完了すると、当該パラメータセットに関連付けられる状態情報を無効であることを示す値に変更する、請求項２に記載の制御装置。
【請求項４】
前記第１演算回路は、関連付けられた状態情報が無効であることを示すパラメータセットを削除した上で、新たに算出されたパラメータセットを前記共有メモリに書込む、請求項３に記載の制御装置。
【請求項５】
前記パラメータセットは、前記指令値を算出すべき回数を示すパラメータを含み、
前記第２演算回路は、前記第１処理により算出されたパラメータセットに基づく前記指令値の算出が指定された回数だけ実行されると、前記第１処理により次に算出されたパラメータセットに基づく前記指令値の算出を開始する、請求項１〜４のいずれか１項に記載の制御装置。
【請求項６】
モータを駆動するモータドライバと、
前記モータドライバに対して指令値を出力する制御装置とを備え、
前記制御装置は、
前記モータドライバが駆動するモータの挙動を指定するための１または複数の指令を格納する記憶部と、
第１演算回路および第２演算回路を含む処理部とを備え、
前記第１演算回路は、前記記憶部に格納されている前記１または複数の指令を逐次解釈して前記指令値の算出に関する関数を定義するパラメータセットを逐次算出する第１処理を実行し、
前記第２演算回路は、前記第１処理の実行とは独立して、前記逐次算出されるパラメータセットに基づいて前記指令値を予め定められた制御周期ごとに算出する第２処理を実行する、制御システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本技術は、制御装置および制御システムに関する。
【背景技術】
【０００２】
ＦＡ（Factory Automation）分野においては、設備や機械を動かすために多くのモータが利用されている。典型的には、ＰＬＣ（プログラマブルコントローラ）などの制御装置を用いて、各種センサでの検出信号と連動させて、各モータの回転速度などを制御する。
【０００３】
例えば、特開２０１１−０３５６６４号公報（特許文献１）は、単一のコントローラがサーボドライバやインバータなどとネットワーク接続されて制御を行う構成を開示する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１１−０３５６６４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
例えば、各種産業用ロボットを制御するためには、各要素を駆動するモータに対して精緻な指令を与える必要がある。典型的には、モータによって駆動されるアームなどが予め指定された軌道に沿って移動するように、所定の制御周期（数１００μｓｅｃ〜数１０ｍｓｅｃ）ごとに指令を更新する必要がある。この指令の制御周期が短いほど制御精度が高まるので、制御周期を可能な限り短くしたいという要望がある。
【課題を解決するための手段】
【０００６】
本発明のある実施の形態に係る制御装置は、モータを駆動するモータドライバに対して指令値を出力するためのインターフェイスと、モータドライバが駆動するモータの挙動を指定するための１または複数の指令を格納する記憶部と、第１演算回路および第２演算回路を含む処理部とを含む。第１演算回路は、記憶部に格納されている１または複数の指令を逐次解釈して指令値の算出に関する関数を定義するパラメータセットを逐次算出する第１処理を実行する。第２演算回路は、第１処理の実行とは独立して、逐次算出されるパラメータセットに基づいて指令値を予め定められた制御周期ごとに算出する第２処理を実行する。
【０００７】
好ましくは、制御装置は、第１演算回路および第２演算回路からアクセス可能な共有メモリをさらに含む。第１演算回路は、逐次算出されるパラメータセットを共有メモリに書込む。第２演算回路は、共有メモリからパラメータセットを逐次読出す。
【０００８】
好ましくは、第１演算回路は、パラメータセットを算出すると、当該算出されたパラメータセットに関連付けて、有効であることを示す状態情報を共有メモリに書込む。第２演算回路は、パラメータセットに基づく指令値の算出が完了すると、当該パラメータセットに関連付けられる状態情報を無効であることを示す値に変更する。
【０００９】
好ましくは、第１演算回路は、関連付けられた状態情報が無効であることを示すパラメータセットを削除した上で、新たに算出されたパラメータセットを共有メモリに書込む。
【００１０】
好ましくは、パラメータセットは、指令値を算出すべき回数を示すパラメータを含む。第２演算回路は、第１処理により算出されたパラメータセットに基づく指令値の算出が指定された回数だけ実行されると、第１処理により次に算出されたパラメータセットに基づく指令値の算出を開始する。
【００１１】
本発明の別の実施の形態に係る制御システムは、モータを駆動するモータドライバと、モータドライバに対して指令値を出力する制御装置とを含む。制御装置は、モータドライバが駆動するモータの挙動を指定するための１または複数の指令を格納する記憶部と、第１演算回路および第２演算回路を含む処理部とを含む。第１演算回路は、記憶部に格納されている１または複数の指令を逐次解釈して指令値の算出に関する関数を定義するパラメータセットを逐次算出する第１処理を実行する。第２演算回路は、第１処理の実行とは独立して、逐次算出されるパラメータセットに基づいて指令値を予め定められた制御周期ごとに算出する第２処理を実行する。
【発明の効果】
【００１２】
本発明の実施の形態によれば、モータへ与える指令の制御周期を短くできる。
【図面の簡単な説明】
【００１３】
【図１】本実施の形態に係る制御システムの構成例を示す模式図である。
【図２】本実施の形態に係る制御装置の構成例を示す模式図である。
【図３】本実施の形態に係る制御装置で実行されるモーションプログラムの一例を説明するための図である。
【図４】図３（Ａ）に示される目標軌道を実現するための、指令値の時間変化の一例を示すタイムチャートである。
【図５】モーションプログラムによるモーション制御のインタプリタ方式での実行に関する関連技術を説明するための図である。
【図６】本実施の形態に係る制御装置による、モーションプログラムによるモーション制御のインタプリタ方式での実行方法を説明するための図である。
【図７】本実施の形態に係るインタプリタ処理により算出されるパラメータセットの一例を示す図である。
【図８】本実施の形態に係る制御装置における指令値演算処理の処理内容を説明するための模式図である。
【図９】本実施の形態に係る制御装置におけるインタプリタ処理と指令値演算処理との連係方法を説明するための模式図である。
【図１０】本実施の形態に係る制御装置で実行される処理手順を示すフローチャートである。
【発明を実施するための形態】
【００１４】
本発明の実施の形態について、図面を参照しながら詳細に説明する。なお、図中の同一または相当部分については、同一符号を付してその説明は繰返さない。
【００１５】
＜Ａ．制御システムの構成例＞
まず、本実施の形態に係る制御システムの構成例について説明する。図１は、本実施の形態に係る制御システム１の構成例を示す模式図である。図１を参照して、制御システム１は、モータ２５０−１，２５０−２，…と、モータ２５０−１，２５０−２，…を駆動するモータドライバ２００−１，２００−２，…とを含む。モータドライバ２００−１，２００−２，…は、フィールドネットワーク２を介して制御装置１００と接続されており、制御装置１００からの指令に従って、モータ２５０−１，２５０−２，…を駆動する。すなわち、制御装置１００は、モータドライバ２００−１，２００−２，…に対して指令値を出力する。以下、モータ２５０−１，２５０−２，…およびモータドライバ２００−１，２００−２，…をそれぞれ「モータ２５０」および「モータドライバ２００」とも総称する。
【００１６】
モータ２５０は、制御装置１００が制御対象とする設備や機械に組込まれて、設備や機械を動かす駆動源となる。モータ２５０の種類などは特に限定されることなく、一般的な駆動源の意味での「モータ」を包含する。例えば、モータ２５０として、ＡＣモータ、ＤＣモータ、ステッピングモータ、リニアモータなどの公知のモータが採用される。
【００１７】
モータドライバ２００は、駆動するモータ２５０の種類に応じた構成のものが採用される。例えば、インバータ、サーボドライバ、サーボアンプなどを用いることができる。
【００１８】
制御装置１００としては、ＰＬＣ（プログラマブルコントローラ）を想定するが、これに限らず任意のコンピュータを用いることができる。例えば、ロボットコントローラやモーションコントローラなどの名称で称されるコンピュータを用いてもよい。
【００１９】
＜Ｂ．制御装置の構成例＞
次に、本実施の形態に係る制御システム１の主要部である制御装置１００の構成例について説明する。図２は、本実施の形態に係る制御装置１００の構成例を示す模式図である。
【００２０】
図２を参照して、制御装置１００は、典型的には、汎用的なアーキテクチャに従って構成されたコンピュータであり、プロセッサがプログラムを実行することで、必要な処理および機能を実現する。より具体的には、制御装置１００は、プロセッサ１１０と、メインメモリ１２０と、二次記憶装置１３０と、フィールドネットワークインターフェイス１２２と、ネットワークインターフェイス１２４と、ＵＳＢ（Universal Serial Bus）インターフェイス１２６と、メモリリーダライタ１２８とを含む。これらのコンポーネントは、バス１１８を介して接続されている。
【００２１】
プロセッサ１１０は、少なくとも第１演算回路および第２演算回路を含む処理部に相当し、プログラムを並列的に実行可能に構成される。一例として、プロセッサ１１０は、マルチコアプロセッサから構成される。より具体的には、プロセッサ１１０は、第１コア１１１と、第２コア１１２と、共有キャッシュ１１６とを含む。第１コア１１１および第２コア１１２は、それぞれ第１キャッシュ１１３および第２キャッシュ１１４を内蔵している。
【００２２】
図２には、２つのコアを含むプロセッサを例示するが、より多くのコアを含むプロセッサを採用してもよいし、あるいは、単一のコアからなるプロセッサを複数用いる構成（すなわち、マルチプロセッサ）を採用してもよい。本実施の形態に係る制御装置１００においては、プログラムを並列的に実行可能な構成であれば、コアの数およびプロセッサの数は任意に設計できる。また、プロセッサ１１０としては、ＣＰＵ（Central Processing Unit）の他、ＧＰＵ（Graphics Processing Unit）などの並列処理に特化したものを採用してもよい。
【００２３】
メインメモリ１２０は、プロセッサ１１０によって実行されるプログラムの全部または一部のコードやワークデータなどを一時的に保持する記憶装置である。メインメモリ１２０は、例えば、ＤＲＡＭ（Dynamic Random Access Memory）やＳＲＡＭ（Static Random Access Memory）などで構成される。
【００２４】
二次記憶装置１３０は、プロセッサ１１０で実行されるプログラム、処理対象のデータ、設定パラメータなどを不揮発的に保持する記憶装置である。二次記憶装置１３０は、例えば、ＨＤＤ（Hard Disk Drive）やＳＳＤ（Solid State Drive）などで構成される。典型的には、二次記憶装置１３０は、制御装置１００の基本的な機能を提供するためのシステムプログラム１３２と、制御装置１００の制御対象に応じて任意の設計されるユーザプログラム１３４とを格納する。ユーザプログラム１３４としては、典型的には、シーケンスロジックを実現するためのシーケンスプログラム１３６と、ロボットの軌道などを制御するためのモーションプログラム１３８とを含む。ユーザプログラム１３４については、任意の言語で記述することができる。つまり、二次記憶装置１３０は、モータドライバ２００が駆動するモータ２５０の挙動を指定するための１または複数の指令（モーションプログラム１３８）を格納する記憶部に相当する。
【００２５】
フィールドネットワークインターフェイス１２２は、制御装置１００とモータドライバ２００とを接続するフィールドネットワーク２上でのデータの遣り取りを責務とするコントローラである。フィールドネットワークインターフェイス１２２は、モータドライバ２００に対して出力値を出力するためのインターフェイスに相当する。フィールドネットワーク２としては、データの到達時間が保証される、定周期通信を行うネットワークが採用されることが好ましい。このような定周期通信を行うネットワークとしては、ＥｔｈｅｒＣＡＴ（登録商標）、ＥｔｈｅｒＮｅｔ／ＩＰ（登録商標）、ＤｅｖｉｃｅＮｅｔ（登録商標）、ＣｏｍｐｏＮｅｔ（登録商標）などが知られている。
【００２６】
ネットワークインターフェイス１２４は、上位のサーバ装置やＨＭＩ（Human Machine Interface）装置などとの間でのデータの遣り取りを責務とするコントローラである。上位のサーバ装置やＨＭＩ装置などとの間でのデータの遣り取りには、イーサネット（登録商標）などのパケットネットワークが用いられる。
【００２７】
ＵＳＢインターフェイス１２６は、サポート装置などとの間でのデータの遣り取りを責務とするコントローラである。ＵＳＢインターフェイス１２６は、ＵＳＢなどのシリアル通信によりデータを遣り取りする。
【００２８】
メモリリーダライタ１２８は、ＳＤカードなどの持ち運び可能な記憶媒体との間で、データの読取り／書込みを行うインターフェイスデバイスである。記憶媒体を介して、制御装置１００で実行されるユーザプログラム１３４がインストールされてもよいし、制御装置１００で収集されるデータを記憶媒体に書込むようにしてもよい。
【００２９】
＜Ｃ．モーションプログラムによるモーション制御＞
次に、本実施の形態に係る制御装置１００で実行されるユーザプログラム１３４（モーションプログラム１３８）によるモーション制御について説明する。本明細書において、「モーション制御」は、モータによって駆動される部位が予め指定された挙動をとるように、モータ２５０を駆動するモータドライバ２００に対して逐次指令を与える制御を包含するものである。
【００３０】
モータドライバ２００に対して出力される指令値（物理量または物理量に相当する操作量）は、目標とする挙動に応じて適宜選択されるが、例えば、位置指令値、速度指令値、加速度指令値、加加速度指令値などが想定される。以下では、典型例として、モータの速度指令値が指令値として用いられる場合について説明する。
【００３１】
図３は、本実施の形態に係る制御装置１００で実行されるモーションプログラム１３８の一例を説明するための図である。図３（Ａ）には、目標軌道の一例が示されている。図３（Ａ）には、２つのモータ２５０がそれぞれＸ軸およびＹ軸を駆動する構成における軌道を示すものであり、一例として、地点Ｐ０００から出発して、地点Ｐ００１および地点Ｐ００２を経由した後に地点Ｐ００３へ到着する軌道が目標とされている。
【００３２】
モーションプログラム１３８においては、地点Ｐ０００から地点Ｐ００１までの軌道Ｎ００１、地点Ｐ００１から地点Ｐ００２までの軌道Ｎ００２、および、地点Ｐ００２から地点Ｐ００３までの軌道Ｎ００３の合計３つの軌道が各々独立したモーション指令として指定される。
【００３３】
図３（Ｂ）には、図３（Ａ）に示される目標軌道を実現するためのモーションプログラム１３８の一例が示されている。図３（Ｂ）を参照して、モーションプログラム１３８の各行は、図３（Ａ）に示す３つの軌道Ｎ００１，Ｎ００２，Ｎ００３の各々に対応する。すなわち、モーションプログラム１３８において、１行分が１つのモーション指令を意味する。
【００３４】
一例として、図３（Ｂ）に示すモーションプログラム１３８においては、Ｎ００１，Ｎ００２，Ｎ００３などのラベルに対応付けて、「補間種別」、「目標終点」、「目標速度」が指定される。「補間種別」として、図３（Ｂ）に示す例では、「直線補間」を示す「Ｇ０１」が指定されている。「目標終点」として、Ｘ座標およびＹ座標の組（例えば、「Ｘ１００Ｙ１００」）が指定されている。「目標速度」として、図３（Ｂ）に示す例では、「Ｆ５０」などが指定されている。
【００３５】
なお、図３（Ｂ）に示すモーションプログラム１３８による指定に加えて、加速度、加速度パターン、速度上下限などの設定値がシステムコンフィギュレーションとして予め指定されているとする。
【００３６】
図４は、図３（Ａ）に示される目標軌道を実現するための、指令値の時間変化の一例を示すタイムチャートである。図４に示すように、目標軌道がＸ−Ｙ平面で定義されるので、Ｘ軸およびＹ軸に関連付けられた２つのモータに対してそれぞれ指令値を与える必要がある。また、静止状態から目標速度までは指定された加速度で加速する必要がある。したがって、図４のタイムチャートに示すように、１つのモーション指令であっても、モータドライバに対して出力される指令値は逐次更新される必要がある。この指令値の更新周期が「制御周期」に相当する。なお、図４に示すタイムチャートが示す面積が位置指令値に相当する。
【００３７】
各制御周期での指令値を算出するためには、図３（Ｂ）に示すモーションプログラム１３８に指定される各モーション指令を解釈して、各制御周期での指令値を算出するための関数または演算式を決定しておく必要がある。
【００３８】
モーションプログラム１３８に指定される各モーション指令に対する構文解析およびコンパイルなどの作業を事前に行って、各制御周期での指令値を算出するための関数を決定しておく方式も想定されるが、本実施の形態に係る制御装置１００では、モーションプログラム１３８に指定される各モーション指令を逐次解釈して、各制御周期での指令値を算出するための関数を決定した上で、各制御周期での指令値を逐次算出する方式を採用する。このような方式を、以下では「インタプリタ方式」とも称す。すなわち、本実施の形態に係る制御装置１００は、モーションプログラムによるモーション制御をインタプリタ方式で実行する。
【００３９】
＜Ｄ．関連技術＞
次に、上述したモーションプログラムによるモーション制御のインタプリタ方式での実行に関する関連技術について説明する。
【００４０】
図５は、モーションプログラムによるモーション制御のインタプリタ方式での実行に関する関連技術を説明するための図である。図５を参照して、モーション制御のインタプリタ方式での実行には、モーションプログラム１３８に指定される各モーション指令を逐次解釈する処理（以下、「インタプリタ処理」とも称す。）Ｐ１Ａと、指令値を算出する処理（以下、「指令値演算処理」とも称す。）Ｐ２Ａとが必要である。
【００４１】
モーション指令を逐次解釈するインタプリタ処理Ｐ１Ａは、ユーザプログラム（モーションプログラム）を実行解釈する処理に相当する。指令値を算出する指令値演算処理Ｐ２Ａは、アクチュエータを制御する指令値を更新する処理に相当する。
【００４２】
関連技術においては、このような２つの処理を共通のプロセッサ１１０Ａで実行する。２つの処理を共通のプロセッサ１１０Ａで実行するために、各処理には時分割方式によりプロセッサ時間が割り当てられる。すなわち、インタプリタ処理Ｐ１と指令値演算処理Ｐ２とが交互に実行されることになる。指令値を予め定められた制御周期ごとに安定して更新するために、一般的には、指令値演算処理Ｐ２Ａについては定周期の割込処理で実行され、バックグラウンドの時間でインタプリタ処理Ｐ１Ａが実行される。このような関連技術に係るモーション制御のインタプリタ方式での実行によれば、以下のような課題がある。
【００４３】
指令値を算出する指令値演算処理Ｐ２Ａの処理時間は、モーション指令の内容や実行タイミングなどによって変動するため、インタプリタ処理Ｐ１Ａに割り当てられるプロセッサ時間がばらつくため、このばらつきを予め推定してモーション制御を設計することは用意ではなかった。
【００４４】
上述のようなプロセッサ時間のばらつきを考慮して安定したモーション制御を実現するために、指令値演算処理Ｐ２Ａの実行周期、すなわち制御周期を設定する際には、インタプリタ処理Ｐ１Ａの実行時間に加えて、ある程度の余裕時間を考慮する必要があり、プロセッサのパフォーマンスを１００％活用できない。
【００４５】
指令値演算処理Ｐ２Ａを割込処理で実行するため、インタプリタ処理Ｐ１Ａおよび指令値演算処理Ｐ２Ａについての優先度の設定を十分に検討する必要があるとともに、それぞれの処理の演算結果を受け渡しするために、メモリアクセスについての複雑な排他制御を実装する必要がある。このような点を考慮する必要があるため、設計および品質確保に多大な検討時間および検証時間を要する。
【００４６】
本実施の形態に係る制御装置１００は、上述のような課題を解決することを一つの目的とする。
【００４７】
＜Ｅ．並列処理＞
次に、本実施の形態に係る制御装置１００における、モーションプログラムによるモーション制御のインタプリタ方式での実行方法について説明する。
【００４８】
図６は、本実施の形態に係る制御装置１００による、モーションプログラムによるモーション制御のインタプリタ方式での実行方法を説明するための図である。本実施の形態においては、モーションプログラム１３８に指定される各モーション指令を逐次解釈する処理（インタプリタ処理）Ｐ１と、指令値を算出する処理（指令値演算処理）Ｐ２とをそれぞれ異なる演算回路（本実施の形態では、プロセッサ１１０の第１コア１１１および第２コア１１２）で互いに独立して実行させる。この際、２つの処理を互いに独立して実行させるために、インタプリタ処理Ｐ１による演算結果をパラメータセット１５０として出力することで、指令値演算処理Ｐ２への引き渡しを容易化する。すなわち、インタプリタ処理Ｐ１においては、モーションプログラム１３８をインタプリタ方式で解釈して関数のパラメータセット１５０に分解する。この分解されたパラメータセット１５０を用いることで、２つの処理の間で共有されるメインメモリ１２０へのバッファリングを実現する。なお、パラメータセット１５０の出力処理、および、パラメータセット１５０を用いた指令値の算出処理については、後述する。
【００４９】
以下の説明においては、第１コア１１１および第２コア１１２からアクセス可能な共有メモリとしてメインメモリ１２０を用いて、パラメータセット１５０をバッファリングする構成について例示するが、共有メモリとして、プロセッサ１１０の共有キャッシュ１１６を用いてもよい。
【００５０】
このように、本実施の形態においては、インタプリタ処理Ｐ１を指令値の算出に関する関数を定義するパラメータセット１５０を出力してメインメモリ１２０に書込む処理に単純化するとともに、指令値演算処理Ｐ２をメインメモリ１２０からパラメータセット１５０を読出して関数に従って指令値を更新する処理に単純化する。つまり、インタプリタ処理Ｐ１は、主としてメインメモリ１２０に対するデータの書込みのみを行い、指令値演算処理Ｐ２は、主としてメインメモリ１２０からデータの読出しのみを行うように、メインメモリ１２０へのアクセス競合の可能性をほぼゼロにした上で、インタプリタ処理Ｐ１および指令値演算処理Ｐ２を、メインメモリ１２０を共有するそれぞれ異なるコアに割り当てる。このような互いに独立した処理を採用することで、互いの処理が干渉し得ることにより生じる課題を解消できる。
【００５１】
すなわち、第１コア１１１（第１演算回路）は、二次記憶装置１３０に格納されている１または複数の指令（モーションプログラム１３８）を逐次解釈して指令値の算出に関する関数を定義するパラメータセット１５０を逐次算出するインタプリタ処理Ｐ１を実行し、第２コア１１２（第２演算回路）は、インタプリタ処理Ｐ１の実行とは独立して、逐次算出されるパラメータセット１５０に基づいて指令値を予め定められた制御周期ごとに算出する指令値演算処理Ｐ２を実行する。
【００５２】
このとき、第１コア１１１（第１演算回路）は、逐次算出されるパラメータセットを共有メモリとして機能するメインメモリ１２０に書込み、第２コア１１２（第２演算回路）は、共有メモリとして機能するメインメモリ１２０からパラメータセット１５０を逐次読出す。
【００５３】
上述のような構成を採用することで、各コアによるメモリアクセスの競合がほぼ発生しないので、メモリアクセスについての複雑な排他制御を実装する必要がない。また、各コアに割り当てられる処理に対して、担当するコアのプロセッサ時間をすべて使用することができるので、プロセッサのパフォーマンスを１００％活用できる。
【００５４】
予め定められた制御周期ごとに指令値を更新する指令値演算処理Ｐ２について、各制御周期における空き時間をモニタリングすることで、その空き時間に応じて制御周期の短縮を図ることができ、その結果、モーション制御の制御精度を容易に最適化できる。
【００５５】
各処理の実行がコアごとに独立しているため、各コアで実行されるプログラムの設計を単純化できるので、設計や品質確保に必要な工数が低減できる。
【００５６】
＜Ｆ．インタプリタ処理および指令値算出処理＞
上述のインタプリタ処理により算出されるパラメータセット１５０およびパラメータセット１５０を用いた指令値演算処理について説明する。
【００５７】
図７は、本実施の形態に係るインタプリタ処理により算出されるパラメータセット１５０の一例を示す図である。パラメータセット１５０は、指令値の時間的変化を示す関数を定義する１または複数のパラメータを含むものであり、一例として、図７（Ａ）に示すような複数のパラメータから構成される。図７（Ａ）に示すパラメータセット１５０は、図７（Ｂ）に示すような指令値の時間変化（一例として、速度パターン）を示す関数を定義する。
【００５８】
インタプリタ処理では、モーションプログラム１３８を構文解析した後、指定された目標位置および／または現在位置から移動量を算出し、指定された速度および／または加速度から加速時間、減速時間、等速時間を算出する。このような処理によって得られたパラメータセット１５０の一例が、図７（Ａ）に示される。
【００５９】
より具体的には、パラメータセット１５０は、コントロールフラグ１５１と、加速時間１５２と、加速関数種別１５３と、減速時間１５４と、減速関数種別１５５と、等速時間１５６と、各軸移動量１５７と、各軸速度１５８と、補間移動量１５９とを含む。このようなパラメータセット１５０がモーションプログラム１３８に含まれるモーション指令ごとに算出される。
【００６０】
加速時間１５２は、図７（Ｂ）に示す速度パターンの加速区間の長さを示し、制御周期を基準とした回数で定義される。加速関数種別１５３は、図７（Ｂ）に示す速度パターンの加速区間についての時間的変化の種別を示し、１次曲線や多次曲線などを指定できる。同様に、減速時間１５４は、図７（Ｂ）に示す速度パターンの減速区間の長さを示し、減速関数種別１５５は、図７（Ｂ）に示す速度パターンの減速区間についての時間的変化の種別を示す。等速時間１５６は、図７（Ｂ）に示す速度パターンの等速区間の長さを示す。
【００６１】
加速時間１５２、減速時間１５４および等速時間１５６の合計が速度パターン全体の時間長さを示し、制御周期を基準とした回数で定義される。つまり、パラメータセット１５０は、指令値を算出すべき回数を示すパラメータとして、加速時間１５２、減速時間１５４および等速時間１５６を含む。そして、パラメータセット１５０に基づく指令値の算出が指定された回数だけ実行されると、当該パラメータセット１５０に基づく指令値の算出処理は終了し、次に算出されたパラメータセット１５０に基づく指令値の算出が開始される。
【００６２】
各軸移動量１５７は、軸ごとの移動量を示し、各軸速度１５８は、軸ごとの速度を示す。補間移動量１５９は、複数軸の移動量を合成した値を示す。
【００６３】
このような複数のパラメータを用いることで、各モーション指令により定義される速度パターンなどを示す関数を構成することができる。
【００６４】
図８は、本実施の形態に係る制御装置１００における指令値演算処理の処理内容を説明するための模式図である。図８を参照して、指令値演算処理Ｐ２においては、インタプリタ処理Ｐ１により算出されたパラメータセット１５０が入力されることで、指令値を出力する関数を構成する関数モジュール１６０が用いられる。関数モジュール１６０に対してパラメータセット１５０が入力されるとともに、各制御周期における指令値（ｔ）が逐次算出される。指令値を逐次算出するにあたって、前回の制御周期での指令値（ｔ−１）が用いられる。そして、対象のパラメータセット１５０により定義される指令値の逐次出力が完了すると、当該パラメータセット１５０のコントロールフラグ１５１の値を「有効」から「無効」に変更する。そして、次のパラメータセット１５０が読出される。
【００６５】
図７（Ａ）のパラメータセット１５０に含まれるコントロールフラグ１５１は、インタプリタ処理によるパラメータセットの算出、および、指令値演算処理の実行完了などを管理するためのフラグである。インタプリタ処理によりパラメータセット１５０が新たにメインメモリ１２０へ書込まれると、コントロールフラグ１５１の値は「有効」に設定される。そして、メインメモリ１２０に書込まれたパラメータセット１５０に対する指令値演算処理の実行が完了すると、コントロールフラグ１５１の値は「無効」にセットされる。インタプリタ処理において、コントロールフラグ１５１の値が「無効」にセットされているパラメータセット１５０については、処理済で不要であると判断できるので、そのパラメータセット１５０はメインメモリ１２０から削除されて、必要に応じて新たなパラメータセット１５０が算出される。
【００６６】
図９は、本実施の形態に係る制御装置１００におけるインタプリタ処理と指令値演算処理との連係方法を説明するための模式図である。図９（Ａ）を参照して、インタプリタ処理Ｐ１によって、モーションプログラム１３８に含まれる２つのモーション指令からパラメータセット１５０−１およびパラメータセット１５０−２が逐次算出されたとする。算出直後において、パラメータセット１５０のコントロールフラグ１５１の値は「有効」に設定される。つまり、第１コア１１１（第１演算回路）は、パラメータセット１５０を算出すると、コントロールフラグ１５１の値を「有効」を示す値に設定することで、算出されたパラメータセット１５０に関連付けて、有効であることを示す状態情報をメインメモリ１２０に書込む。
【００６７】
指令値演算処理Ｐ２において、先に算出されたパラメータセット１５０−１に基づく指令値の逐次更新が実行される。指定されたｎ個分の指令値（指令値１（１），指令値１（２），…，指令値１（ｎ））の算出が完了すると、パラメータセット１５０−１のコントロールフラグ１５１の値は「有効」から「無効」に変更される。つまり、第２コア１１２（第２演算回路）は、パラメータセット１５０に基づく指令値の算出が完了すると、コントロールフラグ１５１の値を「無効」を示す値に変更することで、パラメータセット１５０に関連付けられる状態情報を無効であることを示す値に変更する。
【００６８】
すると、図９（Ｂ）に示すように、コントロールフラグ１５１の値が「無効」に変更されたパラメータセット１５０−１は、インタプリタ処理Ｐ１によってメインメモリ１２０から削除される。そして、図９（Ｃ）に示すように、インタプリタ処理Ｐ１によって、モーションプログラム１３８に含まれる新たな指令からパラメータセット１５０−３が新規作成されて、メインメモリ１２０へ書込まれる。
【００６９】
一方、指令値演算処理Ｐ２においては、パラメータセット１５０−１の次に位置するパラメータセット１５０−２に基づく指令値の逐次更新が実行される。
【００７０】
このように、第１コア１１１（第１演算回路）は、関連付けられた状態情報が無効であることを示すパラメータセット１５０（つまり、コントロールフラグの値が「無効」に設定されているもの）を削除した上で、新たに算出されたパラメータセット１５０をメインメモリ１２０に書込む。インタプリタ処理Ｐ１および指令値演算処理Ｐ２での処理は、モーションプログラム１３８に含まれるすべてのモーション指令についての処理が完了するまで繰返される。
【００７１】
なお、説明の便宜上、図９（Ｂ）に示すパラメータセット１５０−１の削除と、図９（Ｃ）に示すパラメータセット１５０−３の新規作成とをそれぞれ別々の処理として説明したが、これらを一度に行ってもよい。すなわち、新規作成したパラメータセット１５０−３で古いパラメータセット１５０−１を上書きするようにしてもよい。
【００７２】
＜Ｇ．処理手順＞
次に、本実施の形態に係る制御装置１００の第１コア１１１および第２コア１１２にてそれぞれ実行される処理手順について説明する。
【００７３】
図１０は、本実施の形態に係る制御装置１００で実行される処理手順を示すフローチャートである。図１０に示す各ステップは、第１コア１１１および第２コア１１２の各々がプログラムを実行することで実現される。第１コア１１１では、インタプリタ処理Ｐ１が実行される。第２コア１１２では、指令値演算処理Ｐ２が実行される。
【００７４】
図１０を参照して、第１コア１１１は、モーションプログラム１３８の実行が指示されると（ステップＳ１００）、モーションプログラム１３８に含まれるモーション指令を解釈して、パラメータセット１５０を算出し（ステップＳ１０２）、コントロールフラグ１５１の値を「有効」に設定した（ステップＳ１０４）上で、メインメモリ１２０に書込む（ステップＳ１０６）。
【００７５】
続いて、第１コア１１１は、モーションプログラム１３８に含まれるすべてのモーション指令の解釈が終了したか否かを判断する（ステップＳ１０８）。モーションプログラム１３８に含まれるモーション指令のうち解釈が終了していないものがある場合（ステップＳ１０８においてＮＯの場合）、第１コア１１１は、メインメモリ１２０に新たなパラメータセット１５０を出力する領域が存在しているか否かを判断する（ステップＳ１１０）。メインメモリ１２０に新たなパラメータセット１５０を出力する領域が存在している場合（ステップＳ１１０においてＹＥＳの場合）には、第１コア１１１は、モーションプログラム１３８に含まれる未処理のモーション指令を対象に設定し（ステップＳ１１２）、パラメータセット１５０の算出および出力を行う。つまり、ステップＳ１０２以下の処理が繰返される。
【００７６】
モーションプログラム１３８に含まれるすべてのモーション指令の解釈が終了している場合（ステップＳ１０８においてＹＥＳの場合）、または、メインメモリ１２０に新たなパラメータセット１５０を出力する領域が存在していない場合（ステップＳ１１０においてＮＯの場合）には、第１コア１１１は、コントロールフラグ１５１の値が「無効」に設定されているパラメータセット１５０が存在するか否かを判断する（ステップＳ１１４）。
【００７７】
コントロールフラグ１５１の値が「無効」に設定されているパラメータセット１５０が存在すれば（ステップＳ１１４においてＹＥＳの場合）、第１コア１１１は、当該コントロールフラグ１５１の値が「無効」に設定されているパラメータセット１５０を削除する（ステップＳ１１６）。
【００７８】
ステップＳ１１６の実行後、または、コントロールフラグ１５１の値が「無効」に設定されているパラメータセット１５０が存在しない場合（ステップＳ１１４においてＮＯの場合）、第１コア１１１は、パラメータセット１５０がメインメモリ１２０に存在しているか否かを判断する（ステップＳ１１８）。パラメータセット１５０がメインメモリ１２０に存在していれば（ステップＳ１１８においてＹＥＳの場合）、ステップＳ１０８以下の処理が繰返される。
【００７９】
パラメータセット１５０がメインメモリ１２０に存在していなければ（ステップＳ１１８においてＮＯの場合）、処理は終了する。
【００８０】
一方、第２コア１１２は、モーションプログラム１３８の実行が指示されると（ステップＳ２００）、メインメモリ１２０から最も先に算出されたパラメータセット１５０を読出し（ステップＳ２０２）、当該読出したパラメータセット１５０に基づいて構成される関数に従って指令値を算出する（ステップＳ２０４）。第２コア１１２は、読出したパラメータセット１５０に指定された回数だけ指令値が算出されたか否かを判断する（ステップＳ２０６）。対象のパラメータセット１５０に指定された回数だけ指令値が算出されていなければ（ステップＳ２０６においてＮＯの場合）、ステップＳ２０４以下の処理が繰返される。
【００８１】
対象のパラメータセット１５０に指定された回数だけ指令値が算出されていれば（ステップＳ２０６においてＹＥＳの場合）、第２コア１１２は、対象のパラメータセット１５０に含まれるコントロールフラグ１５１の値を「無効」に変更し（ステップＳ２０８）、コントロールフラグ１５１の値が「有効」に設定されているパラメータセット１５０がメインメモリ１２０に存在しているか否かを判断する（ステップＳ２１０）。
【００８２】
コントロールフラグ１５１の値が「有効」に設定されているパラメータセット１５０がメインメモリ１２０に存在していれば（ステップＳ２１０においてＹＥＳの場合）、第２コア１１２は、コントロールフラグ１５１の値が「有効」に設定されているパラメータセット１５０のうち、最も先に算出されたパラメータセット１５０をメインメモリ１２０から読出し（ステップＳ２１２）、ステップＳ２０４以下の処理を繰返す。
【００８３】
コントロールフラグ１５１の値が「有効」に設定されているパラメータセット１５０がメインメモリ１２０に存在していなければ（ステップＳ２１０においてＮＯの場合）、処理は終了する。
【００８４】
＜Ｈ．利点＞
本実施の形態によれば、複数のモーション指令を含むモーションプログラムをインタプリタ方式で解釈してモーション制御を実行する構成が提供される。具体的には、モーションプログラム１３８に指定される各モーション指令を逐次解釈する処理（インタプリタ処理）と、指令値を算出する処理（指令値演算処理）とをそれぞれ異なる演算回路で互いに独立して実行させる。この際、２つの処理を互いに独立して実行させるために、インタプリタ処理による演算結果をパラメータセットとして出力することで、指令値演算処理への引き渡しを容易化する。このように、インタプリタ方式で解釈してモーション制御を実行する際に必要な処理を互いに独立して実行可能な２つの処理に分解した上で、各処理を互いに異なる演算回路で実行することで、モーションプログラムの演算量に影響を受けることなく、指定された制御周期での指令値の更新を実現できる。
【００８５】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は、上記した説明ではなく、特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【符号の説明】
【００８６】
１  制御システム、２  フィールドネットワーク、１００  制御装置、１１０，１１０Ａ  プロセッサ、１１１  第１コア、１１２  第２コア、１１３  第１キャッシュ、１１４  第２キャッシュ、１１６  共有キャッシュ、１１８  バス、１２０  メインメモリ、１２２  フィールドネットワークインターフェイス、１２４  ネットワークインターフェイス、１２６  ＵＳＢインターフェイス、１２８  メモリリーダライタ、１３０  二次記憶装置、１３２  システムプログラム、１３４  ユーザプログラム、１３６  シーケンスプログラム、１３８  モーションプログラム、１５０  パラメータセット、１５１  コントロールフラグ、１５２  加速時間、１５３  加速関数種別、１５４  減速時間、１５５  減速関数種別、１５６  等速時間、１５７  軸移動量、１５８  軸速度、１５９  補間移動量、１６０  関数モジュール、２００  モータドライバ、２５０  モータ、Ｐ１Ａ，Ｐ１  インタプリタ処理、Ｐ２，Ｐ２Ａ  指令値演算処理。
【図１】
2018037021.tif 000003
【図２】
2018037021.tif 000004
【図３】
2018037021.tif 000005
【図４】
2018037021.tif 000006
【図５】
2018037021.tif 000007
【図６】
2018037021.tif 000008
【図７】
2018037021.tif 000009
【図８】
2018037021.tif 000010
【図９】
2018037021.tif 000011
【図１０】
2018037021.tif 000012