以下に、本開示の実施の形態にかかるモータ駆動装置およびサーボドライブシステムを図面に基づいて詳細に説明する。
実施の形態.
図1は、実施の形態にかかるモータ駆動装置を備えたサーボドライブシステムの構成を示す図である。サーボドライブシステム1は、モータ駆動装置10と、上位コントローラ(モーションコントローラ)20とを備えている。
上位コントローラ20は、通信線によってモータ駆動装置10にネットワーク接続されており、モータ駆動装置10との間でネットワーク通信が可能である。また、モータ駆動装置10は、モータ30および検出器40に接続されている。モータ30は、負荷50に接続されている。なお、上位コントローラ20は、通信線を用いずに、無線通信によってモータ駆動装置10にネットワーク接続されていてもよい。
モータ駆動装置10は、上位コントローラ20から送られてくる制御指令C2に基づいてモータ30を駆動する。モータ駆動装置10は、関数などで示されるユーザプログラムを組み込むことが可能となっており、ユーザプログラムに基づいてモータ30を駆動することができる。本実施の形態のモータ駆動装置10は、上位コントローラ20からの制御指令C2の受信毎に生成される起動信号M2に基づいてユーザプログラムを起動することで、上位コントローラ20との間のネットワーク通信周期MC-Tiに同期したユーザプログラム処理を実行する。モータ駆動装置10は、ネットワーク通信周期MC-Tiに同期したユーザプログラム処理を実行するので、高速にユーザプログラム処理を実行することが可能となる。
モータ駆動装置10は、上位コントローラ20から送られてくる制御指令C2と、ユーザプログラムのプログラム処理とを同期させることで、上位コントローラ20から送られてくる制御指令C2をユーザプログラムによってユーザカスタマイズする。
モータ駆動装置10は、上位コントローラ20から、ネットワーク通信周期MC-Tiに従って周期的に入力される制御指令(位置指令、速度指令、トルク指令など)C2に追従するように、モータ30を制御する。
モータ駆動装置10は、上位コントローラ20から制御指令C2を受信するタイミングと同期して、上位コントローラ20からの制御指令C2をユーザカスタマイズする処理をユーザプログラムに実行させる。これにより、モータ駆動装置10は、ユーザプログラムによって制御指令C2に対応する出力制御指令M5を生成する。ユーザプログラムによるプログラム処理は、従来技術では数十msec~数百msec周期の処理であるが、本実施の形態では、例えば、1msec周期以下の高速な処理である。ユーザプログラムは、例えば、C言語で作成されたプログラムである。
モータ駆動装置10は、プロセッサ91と、駆動制御部16と、メモリ92とを有している。プロセッサ91は、ネットワークフレーム受信部12と、タイマ15と、ユーザプログラム処理部13と、サーボ制御部14とを有している。メモリ92は、メモリ部17と、実行メモリ部18とを有している。
ネットワークフレーム受信部12およびタイマ15は、上位コントローラ20に接続されており、サーボ制御部14は、駆動制御部16および検出器40に接続されている。また、駆動制御部16は、モータ30に接続されている。メモリ部17および実行メモリ部18は、プロセッサ91に接続されている。
上位コントローラ20は、ネットワーク通信周期MC-Ti毎に制御指令C2をモータ駆動装置10に送信する。これにより、ネットワークフレーム受信部12は、ネットワーク通信周期MC-Tiに同期したタイミング(後述するネットワークフレーム受信実行周期NT-Ti)で制御指令C2を受信する。制御指令C2は、モータ駆動装置10によりモータ30を制御するための信号である。モータ駆動装置10では、プロセッサ91がネットワーク通信周期MC-Tiの定数倍の速度で処理を実行する。例えば、ネットワーク通信周期MC-Tiが200μsecである場合、プロセッサ91は、100μsec周期、200μsec周期、または400μsec周期で処理を実行する。なお、ネットワークフレーム受信部12の処理周期、ユーザプログラム処理部13の処理周期、およびサーボ制御部14の処理周期は、それぞれ異なる処理周期であってもよいし、同じ処理周期であってもよい。また、プロセッサ91の処理周期がネットワーク通信周期MC-Tiよりも早い周期であってもよい。
また、上位コントローラ20は、起動周期MCN-Ti毎に起動信号C1をモータ駆動装置10に送信する。これにより、タイマ15は、起動周期MCN-Ti毎に起動信号C1を受信する。起動周期MCN-Tiは、例えば、ネットワーク通信周期MC-Tiの定数倍の周期である。起動信号C1は、上位コントローラ20とモータ駆動装置10との間の通信(制御指令C2の送受信)を特定のタイミングで実行するための信号である。
サーボドライブシステム1では、上位コントローラ20とモータ駆動装置10とが、起動信号C1に基づいて、制御指令C2を予め決められた周期で送受信する。
タイマ15は、起動信号C1に基づいて、ネットワークフレーム受信部12に出力する起動信号M0と、サーボ制御部14に出力する起動信号M1とを生成する。具体的には、タイマ15は、起動周期MCN-Tiで送られてくる起動信号C1に基づいて、周期Ti毎にカウンタ値を生成する。すなわち、タイマ15は、上位コントローラ20から送信される起動信号C1の受信周期である起動周期MCN-Tiに基づいて、周期Ti毎にカウンタ値をカウントアップする。周期Tiは、起動周期MCN-Tiの定数倍である。
タイマ15は、周期Ti毎に生成したカウンタ値を起動信号M0としてネットワークフレーム受信部12に出力し、周期Ti毎に生成したカウンタ値を起動信号M1としてサーボ制御部14に出力する。これにより、上位コントローラ20とモータ駆動装置10とは、タイマ15が周期Ti毎に生成するカウンタ値(1,2,3,・・・)に基づいて同期する。
このように、タイマ15は、起動周期MCN-Tiで起動信号C1を受信するタイミングで、タイマ15が周期Ti毎に生成するカウンタ値を制御指令C2に同期させる。これにより、上位コントローラ20とモータ駆動装置10とがネットワーク通信にて同期可能となる。サーボドライブシステム1では、上位コントローラ20とモータ駆動装置10とがネットワーク通信にて同期可能であればよく、同期する方法は任意である。
なお、タイマ15は、ネットワーク通信周期MC-Tiに基づいて、周期Ti毎に起動信号M0,M1をネットワークフレーム受信部12に出力してもよい。すなわち、タイマ15は、周期Ti毎に生成するカウンタ値を、ネットワーク通信周期MC-Ti毎に制御指令C2に同期させてもよい。この場合の周期Tiは、ネットワーク通信周期MC-Tiと同じ周期であってもよいし、ネットワーク通信周期MC-Tiの定数倍であってもよい。
ネットワークフレーム受信部12は、タイマ15から周期Ti毎に出力されるカウンタ値(起動信号M0)に同期して、ネットワークフレーム受信実行周期NT-Ti毎に起動する。ネットワークフレーム受信実行周期NT-Tiは、例えば、周期Tiの定数倍である。
ネットワークフレーム受信部12は、上位コントローラ20から送信される逐次位置指令、逐次速度指令、または逐次トルク指令等の逐次指令を含む制御指令C2をネットワークフレーム受信実行周期NT-Ti毎に受信する。
ここで、逐次位置指令、逐次速度指令、および逐次トルク指令は、上位コントローラ20からモータ駆動装置10に伝達される指令である。逐次位置指令、逐次速度指令、および逐次トルク指令は、ネットワーク通信周期MC-Ti毎に更新される。
逐次位置指令は、ネットワーク通信周期MC-Ti毎にモータ30をどの位置に移動させるかを指示する指令である。逐次位置指令の1つ前の受信値と今回の受信値との差分は、モータ30をどの速度で駆動させるかを指示する速度指令である。
逐次速度指令は、ネットワーク通信周期MC-Ti毎にモータ30をどの速度で動作させるかを指示する指令である。逐次トルク指令は、ネットワーク通信周期MC-Ti毎にモータ30にどのトルクで動作させるかを指示する指令である。
ネットワークフレーム受信部12は、ユーザによって設定された、ユーザプログラムの処理実行間隔時間であるユーザプログラム処理周期ADD-Ti毎に起動信号M2を生成し、ユーザプログラム処理部13に起動信号M2を送信する。これにより、ネットワークフレーム受信部12は、ユーザプログラム処理部13をユーザプログラム処理周期ADD-Tiの周期で動作させる。ユーザプログラム処理周期ADD-Tiは、例えば、ネットワーク通信周期MC-Tiの定数倍である。
なお、起動信号M2は、ネットワークフレーム受信部12が起動信号M0に基づいて生成する場合に限らない。プロセッサ91は、何れの方法によって、制御指令C2の受信タイミングに対応する起動信号M2を生成してもよい。例えば、タイマ15が、制御指令C2の受信タイミングに対応する起動信号M2を生成してもよいし、タイマ15以外の箇所で制御指令C2の受信タイミングに対応する起動信号M2が生成されてもよい。このように、起動信号M2は、上位コントローラ20からのデータ受信と同期している信号であれば何れの信号であってもよく、生成元は限定されない。
ネットワークフレーム受信部12は、受信した制御指令C2に対応する制御指令をユーザプログラム処理部13およびサーボ制御部14に送信する。具体的には、ネットワークフレーム受信部12は、制御指令C2に対応する制御指令M3をサーボ制御部14に送信し、制御指令C2に対応する入力制御指令M4をユーザプログラム処理部13に送信する。
制御指令M3および入力制御指令M4は、制御指令C2がモータ駆動装置10の内部用に変換された指令である。入力制御指令M4は、ユーザプログラム処理部13へ入力される制御指令であり、制御指令M3は、サーボ制御部14に入力される制御指令である。制御指令M3に含まれる指令の内容と入力制御指令M4に含まれる指令の内容とは同じである。制御指令M3は、ユーザプログラムが用いられない場合の制御指令であり、入力制御指令M4は、ユーザプログラムが用いられる場合の制御指令である。
ユーザプログラム処理部13は、ネットワークフレーム受信部12からユーザプログラム処理周期ADD-Ti毎に送信される起動信号M2に同期してユーザプログラムのプログラム処理を実行する。ユーザプログラム処理部13は、ネットワークフレーム受信部12から受け取った入力制御指令M4に対して、ユーザプログラムを用いた処理を実行することで、入力制御指令M4(制御指令C2)をカスタマイズする。
ユーザプログラム処理部13は、例えば、入力制御指令M4を、ユーザによって指定された指令に変換することで入力制御指令M4をカスタマイズする。ユーザプログラム処理部13は、カスタマイズした後の入力制御指令M4を、出力制御指令M5としてサーボ制御部14に出力する。
検出器40は、モータ30の位置(回転位置、移動位置など)、モータ30の速度(回転速度、移動速度など)、モータ30のトルクなどを検出し、検出した値である動作検出値D1をサーボ制御部14に送る。
モータ駆動装置10と検出器40とは、モータ駆動装置10の動作周期を基準としてデータの交換を行う。すなわち、モータ駆動装置10と検出器40とは、モータ駆動装置10の動作周期を規定するタイマ15の動作に基づいて、データの交換を行う。具体的には、モータ駆動装置10と検出器40とは、モータ駆動装置10がモータ30の制御を行う周期に同期してデータの交換を行う。例えば、サーボ制御部14は、タイマ15から周期Tiを受信し、周期Tiに同期したタイミング(後述するサーボ制御周期SV-Ti)で動作検出値D1を要求するためのリクエストデータを検出器40へ送信する。そして、検出器40は、サーボ制御部14から受信したリクエストデータにより要求されている動作検出値D1であるフィードバック値を送信する。サーボ制御部14は、検出器40から送信された動作検出値D1であるフィードバック値を受信する。このように、モータ駆動装置10と検出器40とは、モータ駆動装置10がモータ30の制御を行う周期に同期してデータの交換を行う。
サーボ制御部14が検出器40から受信するフィードバック値は、モータ30の位置フィードバック値、速度フィードバック値、トルクフィードバック値等である。
サーボ制御部14は、タイマ15から周期Ti毎に出力されるカウンタ値(起動信号M1)に同期してサーボ制御周期SV-Ti毎に起動する。サーボ制御周期SV-Tiは、周期Tiの定数倍の周期である。サーボ制御周期SV-Tiは、モータ駆動装置10が用いる動作周期の中で最も短い周期である。換言すると、サーボ制御部14は、モータ駆動装置10の中で最も高速に処理を実行する。
サーボ制御部14は、モータ30の位置を制御する位置制御部、モータ30の速度を制御する速度制御部、およびモータ30への電流(トルク)を制御する電流制御部の少なくとも1つを有している。
サーボ制御部14は、ユーザプログラムを用いない場合は、上位コントローラ20から送られてくる制御指令C2に対応する制御指令M3と、検出器40からの動作検出値D1とに基づいて、モータ30のフィードバック制御を行う。制御指令M3は、制御指令C2がモータ駆動装置10用に変換された指令である。
サーボ制御部14は、ユーザプログラムを用いる場合は、上位コントローラ20から送られてくる制御指令C2に対応する出力制御指令M5と、検出器40からの動作検出値D1とに基づいて、モータ30のフィードバック制御を行う。このように、ユーザプログラム処理部13によって入力制御指令M4がカスタマイズされる場合は、サーボ制御部14は、カスタマイズされた出力制御指令M5を用いてモータ30をフィードバック制御する。
上述したように、サーボ制御部14は、位置制御部、速度制御部、または電流制御部を備えるとともに、モータ30の位置フィードバック値、速度フィードバック値、トルクフィードバック値等の動作検出値D1を取得する。サーボ制御部14は、上位コントローラ20から入力される位置指令、速度指令、トルク指令等の制御指令C2に対応する制御指令M3または出力制御指令M5をサーボ制御周期SV-Ti毎に取り込む。そして、サーボ制御部14は、動作検出値D1に基づいて、制御指令M3または出力制御指令M5に追従するように、モータ30をフィードバック制御する。
サーボ制御部14は、位置指令、速度指令、または電流指令を含むサーボ制御指令を駆動制御部16に送る。駆動制御部16は、サーボ制御指令に基づいて電力をモータ30に供給する。モータ30は、負荷50を駆動する。
なお、サーボ制御部14は、動作検出値D1を含む検出器40の情報、上位コントローラ20から受信する制御指令C2、モータ駆動装置10の内部の制御指令M3、入力制御指令M4、出力制御指令M5などをモニタするためのモニタ機能を備えていてもよい。この場合、サーボ制御部14は、モニタしている情報に基づいて、モータ駆動装置10の内部での異常を検知した場合、アラームを出力するアラーム出力機能を備えていてもよい。
ここで、モータ駆動装置10のハードウェア構成について説明する。モータ駆動装置10は、プロセッサ91およびメモリ92により実現することができる。モータ駆動装置10の各機能は、パーソナルコンピュータまたは汎用コンピュータといったコンピュータシステムまたはFA(Factory Automation)機器を用いることによって実現される。
モータ駆動装置10は、各種処理を実行するプロセッサ91と、内蔵メモリであるメモリ92とを有する。プロセッサ91の例は、CPU(Central Processing Unit)またはシステムLSI(Large Scale Integration)である。プロセッサ91は、中央処理装置、処理装置、演算装置、マイクロプロセッサ、マイクロコンピュータ、またはDSP(Digital Signal Processor)であってもよい。
メモリ92は、不揮発性もしくは揮発性の半導体メモリである。メモリ92は、例えば、RAM(Random Access Memory)、ROM(Read Only Memory)、フラッシュメモリ、EPROM(Erasable Programmable Read Only Memory)またはEEPROM(登録商標)(Electrically Erasable Programmable Read Only Memory)である。メモリ92の実行メモリ部18は、プロセッサ91が各種処理を実行する際の一時メモリに使用される。
モータ駆動装置10の各機能は、プロセッサ91と、ソフトウェア、ファームウェア、またはソフトウェアとファームウェアとの組み合わせによって実現される。ソフトウェアまたはファームウェアは、プログラムとして記述され、外部記憶装置(図示せず)に格納される。プロセッサ91は、外部記憶装置に記憶されているソフトウェアまたはファームウェアをメモリ92に読み出して実行する。すなわち、モータ駆動装置10は、プロセッサ91が、メモリ92で記憶されているモータ駆動装置10の動作を実行するための、コンピュータで実行可能な、モータ駆動プログラムおよびユーザプログラムを読み出して実行することにより実現される。モータ駆動装置10の動作を実行するためのモータ駆動プログラムおよびユーザプログラムは、モータ駆動装置10の手順または方法をコンピュータまたはFA機器に実行させるものであるともいえる。
モータ駆動装置10で実行されるモータ駆動プログラムは、ネットワークフレーム受信部12と、タイマ15と、ユーザプログラム処理部13と、サーボ制御部14とを含むモジュール構成となっており、これらが主記憶装置上にロードされ、これらが主記憶装置上に生成される。
モータ駆動プログラムおよびユーザプログラムは、インストール可能な形式または実行可能な形式のファイルで、コンピュータが読み取り可能な記憶媒体に記憶されてコンピュータプログラムプロダクトとして提供されてもよい。また、モータ駆動プログラムおよびユーザプログラムは、インターネットなどのネットワーク経由でモータ駆動装置10に提供されてもよい。なお、モータ駆動装置10の機能について、一部を専用回路などの専用のハードウェアで実現し、一部をソフトウェアまたはファームウェアで実現するようにしてもよい。駆動制御部16は、例えば、専用回路で実現される。
ここで、モータ駆動装置10内の起動信号M0,M1,M2の伝達について説明する。例えば、起動信号M0,M1,M2が、電気信号によって伝達される場合、起動信号M0,M1,M2の出力は、ソフトウェアによる関数呼び出しなどで実現されてもよいし、専用回路によるパルス信号の出力によって実現されてもよい。なお、起動信号M0,M1,M2の伝達は、何れの方法によって伝達されてもよい。
例えば、起動信号M0は、ネットワークフレーム受信部12で実行される処理の関数を呼び出す信号であり、起動信号M1は、サーボ制御部14で実行される処理の関数を呼び出す信号である。起動信号M2は、ユーザプログラム処理部13で実行される処理の関数を呼び出す信号である。
図2は、実施の形態にかかるモータ駆動装置が、関数呼び出しによって起動信号を伝達する処理を説明するための図である。まず、タイマ15が、起動信号M0の関数呼び出しによってネットワークフレーム受信部12を呼び出す。これにより、ネットワークフレーム受信部12が処理を実行する。
この後、ネットワークフレーム受信部12が、起動信号M2の関数呼び出しによってユーザプログラム処理部13を呼び出す。これにより、ユーザプログラム処理部13がユーザプログラムを実行する。
そして、タイマ15が、起動信号M1の関数呼び出しによってサーボ制御部14を呼び出す。これにより、サーボ制御部14が処理を実行する。
図3は、実施の形態にかかるモータ駆動装置が実行する各処理の処理タイミングを示すタイミングチャートである。図3に示すネットワークフレーム受信処理は、図1のネットワークフレーム受信部12による制御指令C2の受信処理に対応している。図3に示すユーザプログラム処理は、図1のユーザプログラム処理部13によるユーザプログラムの実行処理に対応している。図3に示すシステムソフトウェア処理は、サーボ制御部14によるサーボ制御処理に対応している。
ネットワークフレーム受信部12は、ネットワークフレーム受信実行周期NT-Ti毎にネットワークフレーム受信処理(制御指令C2の受信処理)を実行する。この後、ユーザプログラム処理部13は、ユーザプログラム処理を実行する。図3では、ユーザプログラム処理に要する時間が、処理時間T1である場合を示している。ユーザプログラム処理部13は、ユーザプログラム処理周期ADD-Ti毎にユーザプログラム処理を実行する。ユーザプログラム処理が実行された後、サーボ制御部14は、サーボ制御処理を実行する。
ユーザプログラム処理部13は、N(Nは自然数)番目のネットワークフレーム受信処理に対応するN番目のシステムソフトウェア処理と、(N+1)番目のネットワークフレーム受信処理とがぶつからないように、ネットワークフレーム受信処理、ユーザプログラム処理、およびシステムソフトウェア処理を実行する。
ユーザプログラム処理部13は、ユーザプログラム処理周期ADD-Ti毎にユーザプログラム処理を実行する際に、ユーザプログラム処理周期ADD-Ti毎にユーザプログラム処理を実行できない場合に、異常状態と判断する。この場合、ユーザプログラム処理部13は、ユーザプログラム処理を停止させるとともに、システム異常を示すアラームを出力する。これにより、ユーザプログラム処理部13は、ユーザプログラム処理の処理時間異常を検知した後は、ユーザプログラム処理を無効に設定し、次回のユーザプログラムが実行される周期処理にてユーザプログラムが動作しないようにする。
ユーザプログラム処理部13によるユーザプログラムの異常状態の監視方法として、例えば、以下の方法がある。第1の監視方法は、ユーザプログラム処理周期ADD-Tiを基準としたサーボドライブシステム1全体の監視方法である。第2の監視方法は、モータ駆動装置10の内部タイムを基準にしたユーザプログラム処理だけの監視方法である。
例えば、第1の監視方法では、ユーザプログラム処理部13は、時刻t1にてユーザプログラム処理部13によるユーザプログラム処理を起動し、時刻t1からユーザプログラム処理周期ADD-Tiが経過した時刻t2にてユーザプログラム処理部13によるユーザプログラム処理を起動する。時刻t2は、起動信号M2のうちの第1の起動信号を受信した時刻であり、時刻t1は、起動信号M2のうちの第2の起動信号を受信した時刻である。第2の起動信号は、第1の起動信号の1つ前の起動信号である。
ユーザプログラム処理部13は、時刻t1で起動したユーザプログラム処理が時刻t2において完了しているか否かを判定する。すなわち、ユーザプログラム処理部13は、起動信号M2を受信した際に、1つ前の起動信号M2に対応するユーザプログラム処理が完了しているか否かを判定する。具体的には、ユーザプログラム処理部13は、起動信号M2をユーザプログラム処理部13が受信したタイミングで、1つ前のユーザプログラム処理が完了していない場合に、異常と判定することができる。
ユーザプログラム処理部13は、時刻t1で起動したユーザプログラム処理が時刻t2において完了していないことを検知すると、異常状態としてユーザプログラム処理を停止させ、システム異常を示すアラームを出力し、モータ30の駆動を停止させる。なお、ユーザプログラム処理部13は、異常状態としてユーザプログラム処理を停止させる際、第1の起動信号に基づいて起動されたユーザプログラムのプログラム処理の起動を停止することとしてもよいし、第1の起動信号に基づいて起動されたユーザプログラムのプログラム処理を停止することとしてもよい。つまり、ユーザプログラム処理部13は、異常状態としてユーザプログラム処理を停止させる際、第1の起動信号に基づいて起動されたプログラム処理の実行を停止させる。また、ユーザプログラム処理部13は、異常状態としてユーザプログラム処理を停止させる際、第1の起動信号および第2の起動信号のそれぞれに基づいて起動されたユーザプログラムのプロクラム処理の実行を停止させるようにしてもよい。
また、第2の監視方法では、ユーザプログラム処理部13は、ユーザプログラム処理部13が1回分のユーザプログラム処理を実行する際の、ユーザプログラム処理の開始時(起動時)と完了時とに内部タイマ値を取得する。ユーザプログラム処理部13は、開始時の内部タイマ値と完了時の内部タイマ値との差分に基づいて、1回分のユーザプログラムの処理時間を算出し、1回分のユーザプログラムの処理時間が設定時間以上となった場合に、異常状態と判定する。すなわち、ユーザプログラム処理部13は、設定時間内に起動信号M2に基づいて起動されたユーザプログラム処理が終了しなかった場合に、異常と判定する。ユーザプログラム処理部13は、異常状態と判定した場合、ユーザプログラム処理を停止させ、システム異常を示すアラームを出力し、モータ30の駆動を停止させる。
図4は、実施の形態にかかるモータ駆動装置が用いるユーザプログラムを説明するための図である。図4では、ユーザプログラムM11を格納する実行メモリ部18の内部構成例を示している。なお、図4では、モータ駆動装置10が備える構成要素として、プロセッサ91、メモリ部17、および実行メモリ部18のみを図示している。
プロセッサ91に含まれるユーザプログラム処理部13は、ユーザにて作成されたユーザプログラムバイナリファイルBFに対応するユーザプログラムM11を実行する。
ユーザプログラムバイナリファイルBFは、モータ駆動装置10のメモリ部17に格納される。ユーザプログラムバイナリファイルBFは、例えば、エンジニアリングツール60が、モータ駆動装置10に書き込むことで、メモリ部17に格納される。
なお、ユーザプログラムバイナリファイルBFは、ネットワーク経由でメモリ部17に格納されてもよいし、上位コントローラ20経由でメモリ部17に格納されてもよい。すなわち、ユーザプログラムバイナリファイルBFの格納方法は、任意である。
プロセッサ91は、メモリ部17に書き込まれたユーザプログラムバイナリファイルBFを、モータ駆動装置10の起動時に読み込み、モータ駆動装置10のシステムソフトウェアが格納されている実行メモリ部18のユーザプログラム領域A1~Ax(xは自然数)へ、ユーザプログラムM11として展開する。これにより、実行メモリ部18へは、ユーザプログラムM11のアドレスとデータとの対応関係が格納される。実行メモリ部18においてアドレスに対応付けされて格納されるデータは、システムソフトウェア領域およびユーザプログラム領域A1~Axである。
プロセッサ91は、モータ駆動装置10の起動時に、ユーザプログラム領域A1~Axのアドレスであるユーザプログラム領域アドレスM12を記憶しておく。これにより、プロセッサ91は、モータ駆動装置10のシステム実行中に、記憶しておいたユーザプログラム領域アドレスM12に対応するユーザプログラム領域A1~Ax内のプログラムを呼び出して実行することが可能となる。
図5は、実施の形態にかかるモータ駆動装置が備えるユーザプログラム処理部およびサーボ制御部の機能構成を説明するための図である。ユーザプログラム処理部13は、ユーザプログラムP1~Py(yは自然数)を受け付けるとともに、ユーザプログラムAPI(Application Programming Interface、アプリケーションプログラミングインターフェース)51と、アドオンAPI52とを有している。ユーザプログラムAPI51は、ユーザプログラムP1~Py上でモータ駆動装置10の内部処理と接続するためのインターフェースである。ユーザプログラムP1~Pyは、前述のユーザプログラムM11に含まれるプログラムである。
ユーザは、図示しないプログラム作成装置を用いてユーザプログラムバイナリファイルBFを作成する。この時、ユーザは、ユーザプログラムAPI51を用いて、ユーザプログラムバイナリファイルBFを作成しておく。
ユーザは、ユーザプログラムAPI51を用いてユーザプログラムP1~Py毎にネットワーク通信周期MC-Tiを基準にしたユーザプログラム処理周期ADD-Tiを設定してユーザプログラムP1~PyのユーザプログラムバイナリファイルBFを作成する。
ユーザプログラムAPI51は、ユーザプログラムP1~Pyの登録、処理割り込み禁止、許可、上位コントローラ20から送信される制御指令C2の取得、上書きなどを可能とするインターフェースである。
ユーザプログラムAPI51は、ユーザ独自のデジタルIO(Input Output)制御、上位コントローラ20とデータ交換するためのオブジェクト、サーボ制御の際に設定されるパラメータ、アラーム、モニタ等の新規作成を可能とする。
ユーザは、ユーザプログラムAPI51を用いて、上述したデジタルIO制御、オブジェクト、パラメータ、アラーム、モニタ等のデータを、ユーザプログラムP1~Pyにて独自に作成することができるので、制御指令C2等をカスタマイズ可能となる。
デジタルIO制御、オブジェクト、パラメータ、アラーム、モニタ等のデータを含んだユーザプログラムP1~Pyは、ユーザプログラム処理部13のユーザプログラムAPI51を介してアドオンAPI52に送られ、アドオンAPI52を介して、サーボ制御部14に送られる。アドオンAPI52は、ユーザプログラムP1~Pyで設定された、カスタマイズされた指令値をサーボ制御部14に送るインターフェースである。カスタマイズされた指令値は、デジタルIO制御、オブジェクト、パラメータ、アラーム、モニタ等のデータに適用されることで、デジタルIO制御、オブジェクト、パラメータ、アラーム、モニタ等のデータがカスタマイズされる。また、アドオンAPI52は、指令値がカスタマイズされている場合、カスタマイズされた指令値(出力制御指令M5)に基づくデジタルIO制御、オブジェクト、パラメータ、アラーム、およびモニタ等、を用いたサーボ制御部14によるモータ30の制御に関連する処理を実行して得られたデータおよび設定された値をサーボ制御部14から受け取り、指令値がカスタマイズされていない場合、指令値(制御指令M3)に基づくデジタルIO制御、オブジェクト、パラメータ、アラーム、およびモニタ等、を用いたサーボ制御部14によるモータ30の制御に関連する処理を実行して得られたデータおよび設定された値をサーボ制御部14から受け取るインターフェースとしても機能する。さらに、アドオンAPI52は、サーボ制御部14から受け取ったデータおよび設定値をユーザプログラムAPI51に送る。
ユーザプログラムAPI51は、アドオンAPI52からデータおよび設定値を受け取ることで、デジタルIO制御、オブジェクト、パラメータ、アラーム、およびモニタ等と、を用いた、モータ30の制御に関連するサーボ制御部14での処理を実行して得られたデータおよびサーボ制御部14に設定された値を確認してユーザプログラムバイナリファイルBFを作成することが可能となる。
プロセッサ91は、モータ駆動装置10の起動時にユーザプログラムP1~Pyを読むことで、システムソフトウェアが、ユーザプログラムP1~Pyをユーザプログラム処理周期ADD-Ti周期で呼び出し可能となる。
サーボ制御部14は、モータ30を制御するモータ制御機能、検出器40からの動作検出値D1を用いたフィードバック制御を実行するエンコーダ機能を備えている。また、サーボ制御部14は、ネットワークフレーム受信部12を介した上位コントローラ20との間の通信を実行するネットワーク機能、アラームを出力するアラーム出力機能、制御指令M3、入力制御指令M4、出力制御指令M5などをモニタするモニタ機能などを備えている。サーボ制御部14は、これらの機能と、ユーザプログラムP1~Pyで設定された、デジタルIO制御、オブジェクト、パラメータ、アラーム、およびモニタ等と、を用いて、モータ30の制御に関連する処理を実行する。サーボ制御部14は、デジタルIO制御、オブジェクト、パラメータ、アラーム、およびモニタ等と、を用いた、モータ30の制御に関連する処理を実行して得られたデータおよび設定された値をアドオンAPI52へ送る。つまり、サーボ制御部14は、デジタルIO制御を行うデバイスのオン/オフ状態を示す値、パラメータの設定値、サーボ制御部14が取得するデータであるオブジェクトの値(例えば、制御指令、動作検出値、等)、アラーム発生有無の値、モニタ機能によりモニタされている値(例えば、制御指令、検出器からの情報、等)をアドオンAPI52に送る。
ここで、ユーザプログラム処理部13が実行するユーザプログラムM11の動作例について説明する。ここでは、ユーザプログラム処理部13が、ユーザプログラムM11を実行することによって、上位コントローラ20から送信される逐次位置指令を、電子カムを介した位置指令に変換して、サーボ制御部14へ出力する場合について説明する。すなわち、ここでは、入力制御指令M4が上位コントローラ20から送信される逐次位置指令に対応し、出力制御指令M5が電子カムを介した位置指令に対応している。
電子カムは、実際にカムを使用して機械的に同期制御を行う仕組みをソフトウェアに置き換えたカムである。ユーザプログラム処理部13は、電子カムを用いる場合、逐次位置指令によってカムを制御した場合のカムを介した移動量を算出する。これにより、ユーザプログラム処理部13は、実際のカムと同様の制御を行うことが可能となる。
なお、本実施の形態では、ユーザプログラム処理部13が、ユーザプログラムM11によってカム動作を実行する場合を例にして説明をするが、ユーザプログラム処理部13は、ユーザプログラムM11によって何れの処理を実行してもよい。
図6は、実施の形態にかかるモータ駆動装置が用いる電子カムの構成を説明するための図である。電子カム70は、入力軸71と、出力軸72と、例えば楕円形の板カム73とを備えている。
上位コントローラ20から送信される逐次位置指令は、入力軸71を回転させる指令である。ユーザプログラム処理部13は、入力軸71を回転させる逐次位置指令(入力制御指令M4)を受け付けると、板カム73が、この逐次位置指令に対応する動作を実行した場合の出力軸72の動作を算出する。ユーザプログラム処理部13は、ユーザプログラムM11によって、出力軸72の動作を算出する。
入力軸71を回転させる逐次位置指令が、時計回りに等角度(図6では30度)ずつ入力軸71を回転させる指令であった場合、板カム73は、時計回りに等角度ずつ回転する。これにより、板カム73の外周部と接触している出力軸72は、板カム73の形状および回転動作に対応する位置に移動する。ここでの出力軸72は、板カム73の外周位置R1を始点とし、板カム73の回転に従って、板カム73の外周位置R2、外周位置R3、外周位置R4、・・・、外周位置R12の順番で、板カム73の外周と接触する。これにより、出力軸72は、上下方向に往復運動する。
つぎに、ユーザプログラム処理部13が算出する出力位置指令について説明する。図7は、実施の形態にかかるモータ駆動装置のユーザプログラム処理部が算出する出力位置指令を説明するための図である。図7では、ユーザプログラム処理部13への入力位置指令およびユーザプログラム処理部13が算出する出力位置指令のタイミングチャートの一例を示している。
ネットワークフレーム受信部12は、上位コントローラ20から、制御指令C2として、図7に示す入力位置指令を、ネットワークフレーム受信実行周期NT-Ti毎に受信する。図7に示す入力位置指令は、目標位置まで指令位置が累積される逐次位置指令である。
ここで、例えば、ユーザプログラム処理周期ADD-Tiが、ネットワーク通信周期MC-Tiと同じ周期に設定されている場合のネットワークフレーム受信部12の処理について説明する。この場合、ネットワークフレーム受信部12は、上位コントローラ20から逐次位置指令を受信するタイミングと同期した同じ周期でユーザプログラム処理を実行する。なお、ネットワーク通信周期MC-Tiが、ユーザプログラム処理周期ADD-TiのZ倍である場合、ネットワークフレーム受信部12は、ネットワーク通信周期MC-Tiと、ユーザプログラム処理周期ADD-TiのZ倍の周期と、が同じ周期となるようにユーザプログラム処理を実行する。
ネットワークフレーム受信部12は、上位コントローラ20から制御指令C2を受信すると、起動信号M2によってユーザプログラム処理部13を起動する。また、ネットワークフレーム受信部12は、ユーザプログラム処理部13に図7に示した入力位置指令に対応する入力制御指令M4を送る。
ユーザプログラムM11内には、ユーザが作成したカムパターン変換処理が実装されている。ユーザプログラム処理部13は、カムパターン変換処理の際には、図6の入力軸71への入力位置指令(入力制御指令M4)から出力軸72の動作を行うように、図7の出力位置指令(出力制御指令M5)を生成する。図7の出力位置指令のうち、外周位置R1~外周位置R12までのサイクルが、出力軸72の1サイクルである。
ユーザプログラム処理部13は、生成した出力位置指令を、出力制御指令M5としてサーボ制御部14に出力する。これにより、サーボ制御部14は、受信した出力制御指令M5に基づいて、モータ30を制御する。
このように、モータ駆動装置10は、システムソフトウェアの処理を変更することなく、上位コントローラ20からの制御指令C2を高速に処理することが可能となる。また、モータ駆動装置10が用いるユーザプログラムM11は、動作をユーザが記述できるので、ユーザは、柔軟にサーボドライブシステム1の動作を変更できる。
また、モータ駆動装置10は、制御指令C2の受信タイミングに対応する起動信号M2を生成し、起動信号M2に基づいてユーザプログラム処理を実行している。このため、上位コントローラ20は、制御指令C2と、ユーザプログラムM11とを同期させるための、同期専用の信号を生成する必要がない。
また、モータ駆動装置10は、上位コントローラ20との間のネットワーク通信周期MC-Tiに同期したユーザプログラム処理を実行するので、逐次位置指令といった上位コントローラ20からの制御指令C2を高速に処理することが可能となる。これにより、モータ駆動装置10は、上位コントローラ20から送信される位置制御指令、速度制御指令、およびトルク制御指令のカスタマイズを高速で実行できるとともに位置、速度、およびトルクの制御を高精度で実行することが可能となる。
このように実施の形態では、モータ駆動装置10が、ユーザプログラムM11のプログラム処理を実行する場合には、ユーザプログラム処理部13が、制御指令C2の受信毎に生成される起動信号M2に従ってユーザプログラムM11を起動している。これにより、ユーザプログラム処理部13は、ネットワークフレーム受信実行周期NT-Tiで制御指令C2を受信するタイミングと同期して、制御指令C2に対応する入力制御指令M4をユーザプログラムM11にプログラム処理させている。そして、サーボ制御部14は、プログラム処理された出力制御指令M5に基づいてサーボ制御指令を出力している。
これにより、モータ駆動装置10は、ユーザプログラムM11のプログラム処理を、上位コントローラ20から送られてくる制御指令C2に同期させて実行することが可能となる。したがって、モータ駆動装置10は、上位コントローラ20から送られてくる制御指令C2を、高速でカスタマイズしてモータ30を制御することが可能となる。
以上の実施の形態に示した構成は、一例を示すものであり、別の公知の技術と組み合わせることも可能であるし、要旨を逸脱しない範囲で、構成の一部を省略、変更することも可能である。