(57)【要約】【課題】セーフティ機能における有効または無効の設定を容易にする。【解決手段】制御システム１は、モーションセーフティ機能を有するセーフティドライバ３００と、セーフティプログラムに従って、セーフティドライバ３００に対してセーフティ指令を出力するセーフティコントローラ２００と、サポート装置５００とを備え、セーフティプログラムには、特定のモーションセーフティ機能を無効化させるための情報が含まれ、サポート装置５００は、モーションセーフティ機能のそれぞれについてユーザによる有効または無効の指定を受け付ける受付部５２１６と、当該指定に応じてセーフティプログラムを生成する生成部５２１２と、セーフティプログラムをセーフティコントローラ２００に転送する転送部５２１８とを含む。【選択図】図１
2020086832.tif 000002
【特許請求の範囲】
【請求項１】
制御システムであって、
少なくとも１つ以上のセーフティ機能を有するとともにモータを駆動するドライブ装置と、
セーフティプログラムに従って、前記ドライブ装置に対して前記少なくとも１つ以上のセーフティ機能に係る指令を出力するコントローラと、
前記セーフティプログラムの開発を支援するサポート装置とを備え、
前記セーフティプログラムには、前記少なくとも１つ以上のセーフティ機能のうちの特定のセーフティ機能を無効化させるための情報が含まれ、
前記サポート装置は、
前記少なくとも１つ以上のセーフティ機能のそれぞれについてユーザによる有効または無効の指定を受け付ける受付部と、
前記受付部によって受け付けられた前記有効または無効の指定に応じて前記セーフティプログラムを生成する生成部と、
前記生成部によって生成された前記セーフティプログラムを、前記コントローラに転送する転送部とを含む、制御システム。
【請求項２】
前記サポート装置は、前記少なくとも１つ以上のセーフティ機能のそれぞれについて前記有効または無効の指定を前記受付部によって受け付けるためのユーザインターフェースを提供する、請求項１に記載の制御システム。
【請求項３】
前記サポート装置は、複数の前記ドライブ装置のうちから選択された特定の前記ドライブ装置について、前記少なくとも１つ以上のセーフティ機能のそれぞれについて前記有効または無効の指定を前記受付部によって受け付けるためのユーザインターフェースを提供する、請求項１または請求項２に記載の制御システム。
【請求項４】
前記サポート装置は、前記少なくとも１つ以上のセーフティ機能のうちの前記特定のセーフティ機能の無効が指定されたことに応答して、当該特定のセーフティ機能に係る前記セーフティプログラムで参照される変数の使用を禁止する、請求項１〜請求項３のいずれか１項に記載の制御システム。
【請求項５】
前記サポート装置は、前記変数の使用の禁止を通知する、請求項４に記載の制御システム。
【請求項６】
前記生成部によって生成された前記セーフティプログラムは、ユーザによって編集不可能である、請求項１〜請求項５のいずれか１項に記載の制御システム。
【請求項７】
モータを駆動するドライブ装置を制御するコントローラで実行される少なくとも１つ以上のセーフティ機能に係るセーフティプログラムの開発を支援するサポート装置であって、
前記セーフティプログラムには、前記少なくとも１つ以上のセーフティ機能のうちの特定のセーフティ機能を無効化させるための情報が含まれ、
前記少なくとも１つ以上のセーフティ機能のそれぞれについてユーザによる有効または無効の指定を受け付ける受付部と、
前記受付部によって受け付けられた前記有効または無効の指定に応じて前記セーフティプログラムを生成する生成部と、
前記生成部によって生成された前記セーフティプログラムを、前記コントローラに転送する転送部とを備える、サポート装置。
【請求項８】
モータを駆動するドライブ装置を制御するコントローラで実行される少なくとも１つ以上のセーフティ機能に係るセーフティプログラムの開発を支援するサポートプログラムであって、
前記少なくとも１つ以上のセーフティ機能のうちの特定のセーフティ機能を無効化させるための情報を含み、
前記サポートプログラムは、コンピュータに、
前記少なくとも１つ以上のセーフティ機能のそれぞれについてユーザによる有効または無効の指定を受け付けるステップと、
受け付けられた前記有効または無効の指定に応じて前記セーフティプログラムを生成するステップと、
生成された前記セーフティプログラムを、前記コントローラに転送するステップとを実行させる、サポートプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、制御システム、制御システムが備えるサポート装置、およびサポートプログラムに関する。
【背景技術】
【０００２】
多くの製造現場において、設備や機械を安全に使用するために、セーフティシステムの導入が進みつつある。セーフティシステムは、国際規格に従うセーフティ機能を提供するためのものであり、セーフティコントローラ、セーフティセンサ、セーフティスイッチ、およびセーフティリレーといったセーフティコンポーネントで構成される。
【０００３】
セーフティシステムは、設備や機械を駆動するためのサーボモータなどを駆動するドライブ装置に対してもセーフティ機能を提供することが要求されている。セーフティシステムにおいては、データを遣り取りするためのネットワークとして、ＥｔｈｅｒＣＡＴ（登録商標：Ethernet for Control Automation Technology、イーサキャット）が採用されており、非特許文献１では、ＥｔｈｅｒＣＡＴに関する組織であるＥＴＧ（EtherCAT Technology Group）の規格においてセーフティ機能に関するいくつかの規定が開示されている。
【先行技術文献】
【非特許文献】
【０００４】
【非特許文献１】Safety Drive Profile Generic Safety Drive Profile for adjustable speed electrical power drive systems that are suitable for use in safety-related application PDS(SR) Document:ETG.6100.2S(R)V1.2.0
【発明の概要】
【発明が解決しようとする課題】
【０００５】
非特許文献１で開示された規定によれば、ドライブ装置が実行する全てのセーフティ機能について、デフォルト時には有効となるように設定が予め固定されている。より具体的には、セーフティ機能に対する有効または無効を指定するための指定情報において、１バイト目のビットごとに割り当てられた全てのフラグが有効を示すフラグに固定されている。
【０００６】
しかしながら、実使用においては、ある工程ではセーフティ機能を有効にし、他の工程ではセーフティ機能を無効にするといったように、工程内の作業内容に応じてセーフティ機能の有効／無効設定を変更しなければならない場合もある。このような場合、ユーザは、セーフティ機能の有効／無効設定をデフォルト状態から変更するためのプログラムを別途準備しなければならず、作業量が増えてしまうといった事態が生じ得る。また、プログラミング作業においては、ソースコードを記述しなければならないため、ユーザが意図せずに誤った設定内容を記述してしまう虞もある。
【０００７】
本発明は、上述したような課題を解決することを一つの目的とし、セーフティ機能における有効または無効の設定を容易にすることを目的とする。
【課題を解決するための手段】
【０００８】
本開示の一例に従えば、制御システムが提供される。制御システムは、少なくとも１つ以上のセーフティ機能を有するとともにモータを駆動するドライブ装置と、セーフティプログラムに従って、ドライブ装置に対して少なくとも１つ以上のセーフティ機能に係る指令を出力するコントローラと、セーフティプログラムの開発を支援するサポート装置とを備える。セーフティプログラムには、少なくとも１つ以上のセーフティ機能のうちの特定のセーフティ機能を無効化させるための情報が含まれる。サポート装置は、少なくとも１つ以上のセーフティ機能のそれぞれについてユーザによる有効または無効の指定を受け付ける受付部と、受付部によって受け付けられた有効または無効の指定に応じてセーフティプログラムを生成する生成部と、生成部によって生成されたセーフティプログラムを、コントローラに転送する転送部とを含む。
【０００９】
この開示によれば、サポート装置に対して特定のセーフティ機能について有効または無効をユーザが指定することで、当該有効または無効の指定に応じてセーフティプログラムが生成されてコントローラに転送される。これにより、ユーザは、特定のセーフティ機能について有効または無効を指定するためのセーフティプログラムを、ソースコードを記述することなく生成することができるため、セーフティ機能における有効または無効の設定を容易にすることができる。
【００１０】
上述の開示において、サポート装置は、少なくとも１つ以上のセーフティ機能のそれぞれについて有効または無効の指定を受付部によって受け付けるためのユーザインターフェースを提供する。
【００１１】
この開示によれば、ユーザは、サポート装置が提供するユーザインターフェースを用いて、少なくとも１つ以上のセーフティ機能のそれぞれについて有効または無効を指定することができる。
【００１２】
上述の開示において、サポート装置は、複数のドライブ装置のうちから選択された特定のドライブ装置について、少なくとも１つ以上のセーフティ機能のそれぞれについて有効または無効の指定を受付部によって受け付けるためのユーザインターフェースを提供する。
【００１３】
この開示によれば、ユーザは、サポート装置が提供するユーザインターフェースを用いて、複数のドライブ装置のうちから選択された特定のドライブ装置について、少なくとも１つ以上のセーフティ機能のそれぞれについて有効または無効を指定することができる。
【００１４】
上述の開示において、サポート装置は、少なくとも１つ以上のセーフティ機能のうちの特定のセーフティ機能の無効が指定されたことに応答して、当該特定のセーフティ機能に係るセーフティプログラムで参照される変数の使用を禁止する。
【００１５】
この開示によれば、無効化されたセーフティ機能に係るプログラムで参照される変数を、ユーザが意図せず設定してしまうといった事態を回避することができる。
【００１６】
上述の開示において、サポート装置は、前記変数の使用の禁止を通知する。
この開示によれば、無効化されたセーフティ機能に係るプログラムで参照される変数の使用が禁止されたことをユーザに通知することができる。
【００１７】
上述の開示において、前記生成部によって生成された前記セーフティプログラムは、ユーザによって編集不可能である。
【００１８】
この開示によれば、サポート装置によって生成されたセーフティプログラムがユーザによって編集されることがないため、ユーザがサポート装置に対して指定したセーフティ機能についての有効または無効の設定内容と、サポート装置によって生成されたセーフティプログラムにおける設定内容とが一致しないという不都合の発生を回避することができる。
【００１９】
本開示の別の一例に従えば、モータを駆動するドライブ装置を制御するコントローラで実行される少なくとも１つ以上のセーフティ機能に係るセーフティプログラムの開発を支援するサポート装置が提供される。セーフティプログラムには、少なくとも１つ以上のセーフティ機能のうちの特定のセーフティ機能を無効化させるための情報が含まれる。サポート装置は、少なくとも１つ以上のセーフティ機能のそれぞれについてユーザによる有効または無効の指定を受け付ける受付部と、受付部によって受け付けられた有効または無効の指定に応じてセーフティプログラムを生成する生成部と、生成部によって生成されたセーフティプログラムを、コントローラに転送する転送部とを備える。
【００２０】
この開示によれば、サポート装置に対して特定のセーフティ機能について有効または無効をユーザが指定することで、当該有効または無効の指定に応じてセーフティプログラムが生成されてコントローラに転送される。これにより、ユーザは、特定のセーフティ機能について有効または無効を指定するためのセーフティプログラムを、ソースコードを記述することなく生成することができるため、セーフティ機能における有効または無効の設定を容易にすることができる。
【００２１】
本開示の別の一例に従えば、モータを駆動するドライブ装置を制御するコントローラで実行される少なくとも１つ以上のセーフティ機能に係るセーフティプログラムの開発を支援するサポートプログラムが提供される。サポートプログラムは、少なくとも１つ以上のセーフティ機能のうちの特定のセーフティ機能を無効化させるための情報を含む。サポートプログラムは、コンピュータに、少なくとも１つ以上のセーフティ機能のそれぞれについてユーザによる有効または無効の指定を受け付けるステップと、受け付けられた有効または無効の指定に応じてセーフティプログラムを生成するステップと、生成されたセーフティプログラムを、コントローラに転送するステップとを実行させる。
【発明の効果】
【００２２】
本発明によれば、セーフティ機能における有効または無効の設定を容易にすることができる。
【図面の簡単な説明】
【００２３】
【図１】本実施の形態に係る制御システムの適用例を示す模式図である。
【図２】ＥＴＧの規格で定義されたセーフティ機能の有効／無効設定を指定する１バイト目の情報を示す模式図である。
【図３】本実施の形態に係る制御システムを構成する標準コントローラのハードウェア構成例を示す模式図である。
【図４】本実施の形態に係る制御システムを構成するセーフティコントローラのハードウェア構成例を示す模式図である。
【図５】本実施の形態に係る制御システムを構成するセーフティドライバおよびサーボモータのハードウェア構成例を示す模式図である。
【図６】本実施の形態に係る制御システムを構成するサポート装置のハードウェア構成例を示す模式図である。
【図７】本実施の形態に係る制御システムの機能分担の一例を示す模式図である。
【図８】本実施の形態に係る制御システムのセーフティドライバによるセーフティ機能に係る処理手順の一例を示すシーケンス図である。
【図９】本実施の形態に係る制御システムが提供するモーションセーフティ機能の一例を示す図である。
【図１０】本実施の形態に係る制御システムにおける標準制御およびセーフティ制御の実装例を示す模式図である。
【図１１】本実施の形態に係るモーションセーフティ機能の有効または無効の遷移の一例を示す模式図である。
【図１２】本実施の形態に係るセーフティプログラムにおけるセーフティ機能の有効／無効設定部分を示す模式図である。
【図１３】本実施の形態に係るサポート装置が提供するモーションセーフティ機能の有効／無効設定をするためのユーザインターフェースの一例を示す図である。
【図１４】本実施の形態に係るサポート装置が提供するモーションセーフティ機能の有効／無効設定をするためのユーザインターフェースの一例を示す図である。
【図１５】本実施の形態に係るサポート装置が提供するセーフティプログラムにおける変数設定をするためのユーザインターフェースの一例を示す図である。
【図１６】本実施の形態に係るサポート装置が実行するセーフティ有効／無効プログラム生成処理を説明するためのフローチャートである。
【図１７】本実施の形態に係るセーフティドライバが実行するセーフティ指令受信処理を説明するためのフローチャートである。
【発明を実施するための形態】
【００２４】
本発明の実施の形態について、図面を参照しながら詳細に説明する。なお、図中の同一または相当部分については、同一符号を付してその説明は繰り返さない。
【００２５】
＜Ａ．適用例＞
まず、本発明が適用される場面の一例について説明する。
【００２６】
図１は、本実施の形態に係る制御システム１の適用例を示す模式図である。本実施の形態に係る制御システム１は、たとえば、ＩＥＣ６１５０８などに規定されたセーフティ機能に加えて、非特許文献２（"IEC 61800-5-2:2016 Adjustable speed electrical power drive systems - Part 5-2: Safety requirements - Functional", International Electrotechnical Commission, 2016-04-18）に規定された、ＳＴＯ（Safe Torque Off）、ＳＳ１（Safe Stop 1）、ＳＳ２（Safe Stop 2）、およびＳＯＳ（Safe Operating Stop）などの、ドライブ装置に関連するいくつかのセーフティ機能を提供する。
【００２７】
図１を参照して、制御システム１は、主として、標準コントローラ１００、ならびに、標準コントローラ１００とフィールドネットワーク２を介して接続されるセーフティコントローラ２００、および１または複数のセーフティドライバ（セーフティサーボドライバ）３００を含む。セーフティドライバ３００の各々は、電気的に接続されたサーボモータ４００を駆動する。なお、サーボモータ４００に限らず、任意の種類のモータを採用できる。また、セーフティドライバ３００の実体は、サーボドライバであってもよいし、汎用的なインバータ装置であってもよい。以下の説明においては、セーフティドライバ３００を「ドライブ装置」の一例として説明する。
【００２８】
標準コントローラ１００は、予め作成された標準制御プログラム（後述する標準制御プログラム１１０４）に従って、サーボモータ４００を含む制御対象に対する標準制御（後述する標準制御１５０）を実行する。典型的には、標準コントローラ１００は、１または複数のセンサ（図示していない）などからの入力信号に応じた制御演算をサイクリック実行することで、サーボモータ４００などのアクチュエータに対する指令を周期的に算出する。
【００２９】
セーフティコントローラ２００は、「コントローラ」に対応し、セーフティプログラム（後述するセーフティプログラム２１０４）に従って、セーフティドライバ３００に対してセーフティ機能（後述するセーフティ機能２５０）の動作に係るセーフティ指令を送信する。セーフティコントローラ２００は、標準コントローラ１００とは独立して、制御対象に対するセーフティ機能２５０を実現するための監視および制御演算をサイクリック実行する。
【００３０】
セーフティコントローラ２００は、任意のセーフティデバイス２４０からの入力信号の受付、および／または、任意のセーフティデバイス２４０への指令の出力が可能になっている。セーフティプログラム２１０４は、セーフティコントローラ２００と通信可能に接続されたサポート装置５００が提供する開発環境を利用して、ユーザによって予め作成され、セーフティコントローラ２００に転送される。
【００３１】
セーフティドライバ３００は、標準コントローラ１００からの指令に従って、サーボモータ４００に電力を供給することで、サーボモータ４００を駆動する。セーフティドライバ３００は、サーボモータ４００からのフィードバック信号などに基づいて、サーボモータ４００の回転位置、回転速度、回転加速度、および発生するトルクなどを周期的に算出する。
【００３２】
さらに、セーフティドライバ３００は、セーフティコントローラ２００からのセーフティ指令に従って、サーボモータ４００の駆動に関する所定のモーションセーフティ機能（後述するモーションセーフティ機能３６０）を実行する。より具体的には、セーフティドライバ３００は、セーフティ機能に必要な状態情報をセーフティコントローラ２００へ提供するとともに、要求されるセーフティ機能に応じたモーションセーフティプログラム（後述するモーションセーフティプログラム３２０４）を実行することで、サーボモータ４００に供給する電力を調整または遮断する。
【００３３】
サーボモータ４００は、セーフティドライバ３００からの電力を受けて回転するモータ（後述する三相交流モータ４０２）を有するとともに、モータの回転軸に結合されたエンコーダ（後述するエンコーダ４０４）からの検出信号をフィードバック信号としてセーフティドライバ３００へ出力する。
【００３４】
サポート装置５００は、標準コントローラ１００側の開発およびセーフティコントローラ２００側の開発を支援する。より具体的には、サポート装置５００は、標準コントローラ１００側の開発として、標準コントローラ１００で実行される標準制御プログラム（後述する標準制御プログラム１１０４）の開発や標準制御１５０に係る設定などを支援する。さらに、サポート装置５００は、セーフティコントローラ２００側の開発として、セーフティコントローラ２００で実行されるセーフティプログラム（後述するセーフティプログラム２１０４）の開発やセーフティ機能２５０に係る設定などを支援する。サポート装置５００は、少なくとも１つ以上の命令情報を組み合わせることでプログラムを生成するための開発環境（プログラム作成編集ツール、パーサ、コンパイラなど）をユーザに提供する。
【００３５】
本明細書において、「デバイス」は、フィールドネットワーク２などの任意のネットワークを介して、他の装置とデータ通信可能な装置の総称である。本実施の形態に係る制御システム１において、「デバイス」は、標準コントローラ１００、セーフティコントローラ２００、およびセーフティドライバ３００を包含する。
【００３６】
本明細書において、「標準制御」および「セーフティ制御」の用語を対比的に用いる。「標準制御」は、予め定められた要求仕様に沿って、制御対象を制御するための処理の総称である。一方、「セーフティ制御」は、設備や機械などによって人の安全が脅かされることを防止するための処理を総称する。「セーフティ制御」は、ＩＥＣ６１５０８などに規定されたセーフティ機能を実現するための要件を満たすように設計される。
【００３７】
本明細書においては、ドライブ装置（セーフティドライバ３００）に特有のセーフティ機能を「モーションセーフティ機能」あるいは単に「セーフティ機能」と総称する。典型的には、「機能」は、上述の非特許文献２に規定されるドライブ装置に関連するセーフティ機能を包含する。たとえば、制御軸の位置や速度を監視して安全を確保するための制御を含む。
【００３８】
本明細書において、「プロセスデータ」は、標準制御またはセーフティ制御の少なくともいずれかで用いられるデータの総称である。具体的には、「プロセスデータ」は、制御対象から取得される入力情報、制御対象へ出力される出力情報、各デバイスでの制御演算に使用される内部情報などを包含する。
【００３９】
入力情報は、光電センサなどにより検出されるＯＮ／ＯＦＦ信号（デジタル入力）、温度センサなどにより検出される物理信号（アナログ入力）、ならびに、パルスエンコーダなどが発生するパルス信号（パルス入力）などを包含する。出力情報は、リレーなどを駆動するためのＯＮ／ＯＦＦ（デジタル出力）、サーボモータの回転速度などを指示する速度指令（アナログ出力）、ならびに、ステッピングモータの移動量などを指示する変位指令（パルス出力）などを包含する。内部情報は、任意のプロセスデータを入力とする制御演算などによって決定される状態情報などを含む。
【００４０】
制御システム１のフィールドネットワーク２においては、プロセスデータ通信が行われており、標準コントローラ１００を通信マスタとして、通信フレーム６００がサイクリック（たとえば、数〜１０数ｍｓｅｃ）にデバイス間を一巡する。通信フレーム６００が伝送する周期をプロセスデータ通信周期とも称する。本実施の形態においては、このような通信フレーム６００をサイクリックに伝送するフィールドネットワーク２のプロトコルの一例として、ＥｔｈｅｒＣＡＴを採用する。
【００４１】
通信フレーム６００には、デバイスごとにデータ領域が割り当てられている。各デバイスは、周期的に伝送される通信フレーム６００を受信すると、当該受信した通信フレーム６００内の自デバイスに割り当てられたデータ領域に予め設定されたデータの現在値を書き込む。そして、現在値の書き込み後の通信フレーム６００を次段のデバイスに送出する。各デバイスにより書き込まれたデータの現在値は他のデバイスから参照可能になっている。
【００４２】
各デバイスが通信フレーム６００に予め設定されたデータの現在値を書き込むため、フィールドネットワーク２を一巡して通信マスタ（標準コントローラ１００）に戻ってくる通信フレーム６００には、各デバイスにより収集された最新の値が含まれることになる。
【００４３】
本実施の形態においては、このようなプロセスデータ通信を利用して、セーフティコントローラ２００とセーフティドライバ３００のそれぞれとの間で論理コネクション４が形成される。この論理コネクション４は、セーフティ機能２５０を実現するためのデータの遣り取りに用いられる。
【００４４】
前述したように、フィールドネットワーク２のプロトコルとしてＥｔｈｅｒＣＡＴを採用する場合には、ＦＳｏＥ（FailSafe over EtherCAT）と称されるプロトコルを用いて論理コネクション４を形成できる。
【００４５】
より具体的には、論理コネクション４を形成するために遣り取りされるコマンドを格納するための専用のデータ領域が通信フレーム６００に割り当てられる。当該専用のデータ領域を用いて、デバイス間でコマンドを遣り取りすることで、論理コネクション４を形成する。
【００４６】
図１に示すように、各セーフティドライバ３００は、モーションセーフティ機能３６０の有効または無効を管理するためのセーフティステータス７０を保持する。セーフティドライバ３００によって実現可能なモーションセーフティ機能３６０には、ＳＴＯ（Safe Torque Off）、ＳＳ１（Safe Stop 1）、ＳＳ２（Safe Stop 2）、ＳＯＳ（Safe Operating Stop）、ＳＳＲ（Safe Speed Range）、ＳＤＩｐ（Safe Direction positive）、およびＳＤＩｎ（Safe Direction negative）が含まれる。これら各モーションセーフティ機能３６０の有効または無効を指定するための指定情報は、セーフティステータス７０に含まれるビットごとに設けられた領域に配置されている。なお、Ｅｒｒｏｒ  Ａｃｋ(Error Acknowledge）は、エラー発生時にエラーを解除するための機能であり、常に有効化されている。
【００４７】
各セーフティドライバ３００は、予め決められたモーションセーフティ機能３６０のみを有する。たとえば、特定のセーフティドライバ３００においては、図１に示す各モーションセーフティ機能３６０のうち、ＳＳＲを実装せず、それ以外のＳＴＯ、ＳＳ１、ＳＳ２、ＳＯＳ、ＳＤＩｐ、およびＳＤＩｎを実装する。これはあくまで例示であり、他のセーフティドライバ３００においても同様に、予め決められたモーションセーフティ機能３６０のみを有する。
【００４８】
セーフティドライバ３００は、セーフティステータス７０に含まれる指定情報に従って、モーションセーフティ機能３６０ごとに有効化または無効化を行う。「指定情報」は、モーションセーフティ機能３６０のそれぞれについて有効または無効を指定するための情報であれば、どのような情報であってもよい。本実施の形態においては、指定情報は、「０」または「１」で示されるフラグによって有効または無効を指定する。より具体的には、フラグが「０」であるときにはモーションセーフティ機能３６０が有効になり、フラグが「１」であるときにはモーションセーフティ機能３６０が無効になる。
【００４９】
全てのモーションセーフティ機能３６０は、起動時（すなわち、デフォルト）において、有効となるようにフラグが固定されており、ユーザによってその内容を変更することができないようになっている。つまり、デフォルト時におけるモーションセーフティ機能３６０は全て有効に固定されている。このことは、上述した非特許文献１で開示された規定において要求されている。
【００５０】
ここで、図２を参照しながら、ＥＴＧの規格で定義されたセーフティステータス７０におけるセーフティ機能の有効／無効設定について説明する。図２は、ＥＴＧの規格で定義されたセーフティ機能の有効／無効設定を指定する１バイト目の情報を示す模式図である。
【００５１】
図２に示すように、非特許文献１においては、セーフティ機能の有効／無効設定が指定される１バイト目の情報が示されている。具体的には、非特許文献１に示されたモーションセーフティ機能３６０に関するコントロールワード７００には、ビット欄７０２と、名称欄７０４と、説明欄７０６とが含まれる。ビット欄７０２には、１バイト目に含まれるビットとして、０ビットから７ビットまでの各ビットが配置されている。名称欄７０４には、各ビットに対応付けられたモーションセーフティ機能３６０の略称が示されている。説明欄７０６には、各モーションセーフティ機能３６０の正式名称およびフラグに対応付けられた動作状態が示されている。
【００５２】
本実施の形態においては、全てのモーションセーフティ機能３６０について、デフォルト状態でフラグが有効を示す「０」に固定されている。各モーションセーフティ機能３６０は、デフォルト時において、フラグが「０」で立ち上がることが要求されている。
【００５３】
図２に示すようなセーフティ機能の有効／無効設定が指定される１バイト目においては、０ビットから７ビットまでの各ビットにおけるフラグがデフォルト時に「０」に固定されており、ユーザによってデフォルト状態を変更することはできないようになっている。なお、図示は省略するが、２バイト目については、ユーザによってデフォルト状態を変更することができるようになっている。
【００５４】
なお、セーフティ機能の「有効」とは、安全制御を行うための機能が動作状態であることを意味する。たとえば、ＳＴＯ、ＳＳ１、ＳＳ２、ＳＯＳ、およびＳＳＲについては、フラグが「０」であるときに“active”となる。これは、安全制御を行うための機能が動作状態であることを意味している。また、ＳＤＩｐやＳＤＩｎについては、フラグが「０」であるときに“disable…”となる。これは、positive方向やnegative方向にモータが動作することを禁止すること、すなわち、安全制御を行うための機能が動作状態であることを意味している。
【００５５】
一方、セーフティ機能の「無効」とは、安全制御を行うための機能が非動作状態であることを意味する。たとえば、ＳＴＯ、ＳＳ１、ＳＳ２、ＳＯＳ、およびＳＳＲについては、フラグが「１」であるときに“deactivate”となる。これは、安全制御を行うための機能が非動作状態であることを意味している。また、ＳＤＩｐやＳＤＩｎについては、フラグが「１」であるときに“enable…”となる。これは、positive方向やnegative方向にモータが動作することを許可すること、すなわち、安全制御を行うための機能が非動作状態であることを意味している。
【００５６】
図１に戻り、各セーフティドライバ３００は、実装しているか否かに関わらず、全てのモーションセーフティ機能３６０に対応するフラグがデフォルトで「０」となって立ち上がる。このため、実装しているモーションセーフティ機能３６０については、デフォルト時の設定が有効に固定されていることで、その機能が有効化される。仮に、実装していないモーションセーフティ機能３６０がある場合、その実装していないモーションセーフティ機能３６０については、フラグが有効に設定されていても実行されることはない。
【００５７】
このように、各セーフティドライバ３００においては、実装しているか否かに関わらず、全てのモーションセーフティ機能３６０について、デフォルト時の設定が有効に固定されている。しかしながら、実使用においては、モーションセーフティ機能３６０を有効にしたり、あるいは無効にしたりといったように、工程内の作業内容に応じてセーフティ機能の有効／無効設定を変更しなければならない場合もある。
【００５８】
特定のモーションセーフティ機能３６０の有効または無効を後から変更する手法として、セーフティコントローラ２００からのセーフティ指令において、特定のモーションセーフティ機能３６０を有効化または無効化するための指定情報を含ませることが考えられる。たとえば、本実施の形態においては、論理コネクション４が確立した後に、セーフティドライバ３００に対してセーフティコントローラ２００からセーフティ指令を送信することができる。このセーフティ指令に特定のモーションセーフティ機能３６０を有効化または無効化するための指定情報を含ませれば、特定のモーションセーフティ機能３６０の有効または無効を後から変更することが可能である。
【００５９】
しかし、この場合、ユーザは、特定のモーションセーフティ機能３６０の有効／無効設定をデフォルト状態から変更するために、サポート装置５００などのツールを用いて、セーフティプログラム２１０４を作成しなければならず、作業量が増えてしまうといった事態が生じ得る。よって、ユーザがソースコードを記述して頻繁にセーフティプログラム２１０４を作成することは効率を下げてしまうことになる。また、ユーザがソースコードを記述するとなると、意図せずに誤った設定内容を記述してしまう虞もある。さらに、制御システム１内においてセーフティドライバ３００が複数設けられている場合には、全てのセーフティドライバ３００に対してこのようなセーフティプログラム２１０４を作成しなければならず、作業量が膨大になってしまうという問題がある。
【００６０】
そこで、本実施の形態に係る制御システム１においては、ユーザがソースコードを記述することなく、極力簡単にセーフティプログラム２１０４を作成する手法を提案する。
【００６１】
たとえば、図１に示すように、サポート装置５００は、少なくとも１つ以上のモーションセーフティ機能３６０のそれぞれについてユーザによる有効または無効の指定を受け付ける受付部５２１６と、受付部５２１６によって受け付けられた有効または無効の指定に応じてセーフティプログラム２１０４を自動的に生成する生成部５２１２と、生成部５２１２によって生成されたセーフティプログラム２１０４を、セーフティコントローラ２００に転送する転送部５２１８とを含む。
【００６２】
ここで、「転送」について、サポート装置５００は、ビルドを行うことでソースコードをオブジェクトコードに変換し、オブジェクトコードの形態でセーフティプログラム２１０４をセーフティコントローラ２００に転送してもよいし、ビルドを行うことなく、ソースコードの形態でセーフティプログラム２１０４をセーフティコントローラ２００に転送してもよい。また、サポート装置５００は、標準コントローラ１００を介してセーフティコントローラ２００にセーフティプログラム２１０４を転送してもよいし、標準コントローラ１００を介することなく、直接的にセーフティコントローラ２００にセーフティプログラム２１０４を転送してもよい。
【００６３】
ユーザは、このようなサポート装置５００を利用することで、サポート装置５００に対してモーションセーフティ機能３６０のそれぞれについて有効または無効の指定を行うことができる。そして、サポート装置５００においては、ユーザによって指定されたモーションセーフティ機能３６０の有効／無効設定に応じてセーフティプログラム２１０４を自動的に生成する。このため、ユーザは、わざわざソースコードを記述することなく、モーションセーフティ機能３６０のそれぞれについて有効または無効を指定するためのセーフティプログラム２１０４を生成することができる。
【００６４】
「指定情報」は、モーションセーフティ機能３６０のそれぞれについて有効または無効を指定するための情報であれば、どのような情報であってもよい。本実施の形態においては、指定情報は、モーションセーフティ機能３６０のそれぞれに対応するビットを並べたビット列によって、当該モーションセーフティ機能３６０のそれぞれについて「０」または「１」で示されるフラグによって有効または無効を指定する。前述したように、ユーザは、サポート装置５００を用いて、指定情報におけるフラグを設定することができ、それによって、特定のモーションセーフティ機能３６０の有効または無効をデフォルト状態から変更することができる。
【００６５】
たとえば、図１に示すように、デフォルト時において、全てのモーションセーフティ機能３６０のフラグが「０」に固定されている。ここで、特定のセーフティドライバ３００のモーションセーフティ機能３６０について、ＳＳ２、ＳＯＳ、およびＳＤＩｐを無効化したい場合、ユーザは、サポート装置５００に対して、ＳＳ２、ＳＯＳ、およびＳＤＩｐのそれぞれに対応するフラグを「１」（無効状態）に設定する旨を指定すればよい。このように、ユーザは、サポート装置５００を利用してモーションセーフティ機能３６０の有効または無効を指定することで、自動的に生成されたセーフティプログラム２１０４によって、デフォルト時に定められていたモーションセーフティ機能３６０の有効／無効設定を後から変更することができる。
【００６６】
このように、サポート装置５００に対して特定のモーションセーフティ機能３６０について有効または無効をユーザが指定することで、当該有効または無効の指定に応じてセーフティプログラム２１０４が生成されてセーフティコントローラ２００に転送される。これにより、ユーザは、特定のモーションセーフティ機能３６０について有効または無効を指定するためのセーフティプログラム２１０４を、ソースコードを記述することなく生成することができるため、モーションセーフティ機能３６０における有効または無効の設定を容易にすることができる。
【００６７】
＜Ｂ．制御システム１に含まれるデバイスの構成例＞
次に制御システム１に含まれるデバイスの構成例について説明する。
【００６８】
（ｂ１：標準コントローラ１００）
図３は、本実施の形態に係る制御システム１を構成する標準コントローラ１００のハードウェア構成例を示す模式図である。図３を参照して、標準コントローラ１００は、プロセッサ１０２と、メインメモリ１０４と、ストレージ１１０と、上位ネットワークコントローラ１０６と、フィールドネットワークコントローラ１０８と、ＵＳＢ（Universal Serial Bus）コントローラ１２０と、メモリカードインターフェース１１２と、ローカルバスコントローラ１１６とを含む。これらのコンポーネントは、プロセッサバス１１８を介して接続されている。
【００６９】
プロセッサ１０２は、主として、標準制御１５０に係る制御演算を実行する演算処理部に相当し、ＣＰＵ（Central Processing Unit）やＧＰＵ（Graphics Processing Unit）などで構成される。具体的には、プロセッサ１０２は、ストレージ１１０に格納されたプログラム（一例として、システムプログラム１１０２および標準制御プログラム１１０４）を読み出して、メインメモリ１０４に展開して実行することで、制御対象（たとえば、セーフティドライバ３００やサーボモータ４００）に応じた制御演算、および、後述するような各種処理を実現する。
【００７０】
メインメモリ１０４は、ＤＲＡＭ（Dynamic Random Access Memory）やＳＲＡＭ（Static Random Access Memory）などの揮発性記憶装置などで構成される。ストレージ１１０は、たとえば、ＳＳＤ（Solid State Drive）やＨＤＤ（Hard Disk Drive）などの不揮発性記憶装置などで構成される。
【００７１】
ストレージ１１０には、基本的な機能を実現するためのシステムプログラム１１０２に加えて、制御対象に応じて作成された標準制御プログラム１１０４が格納される。また、ストレージ１１０には、変数などを設定するための設定情報１１０６が格納される。
【００７２】
上位ネットワークコントローラ１０６は、上位ネットワークを介して、任意の報処理装置との間でデータを遣り取りする。
【００７３】
フィールドネットワークコントローラ１０８は、フィールドネットワーク２を介して、セーフティコントローラ２００およびセーフティドライバ３００を含む任意のデバイスとの間でデータを遣り取りする。図１に示す制御システム１においては、標準コントローラ１００のフィールドネットワークコントローラ１０８は、フィールドネットワーク２の通信マスタとして機能する。
【００７４】
ＵＳＢコントローラ１２０は、ＵＳＢ接続を介して、サポート装置５００などとの間でデータを遣り取りする。
【００７５】
メモリカードインターフェース１１２は、着脱可能な記録媒体の一例であるメモリカード１１４を受け付ける。メモリカードインターフェース１１２は、メモリカード１１４に対してデータを書き込み、メモリカード１１４から各種データ（ログやトレースデータなど）を読み出すことが可能になっている。
【００７６】
ローカルバスコントローラ１１６は、ローカルバスを介して、標準コントローラ１００に接続される任意のユニットとの間でデータを遣り取りする。
【００７７】
図３には、プロセッサ１０２がプログラムを実行することで必要な機能が提供される構成例を示したが、これらの提供される機能の一部または全部を、専用のハードウェア回路（たとえば、ＡＳＩＣ（Application Specific Integrated Circuit）またはＦＰＧＡ（Field-Programmable Gate Array）など）を用いて実装してもよい。あるいは、標準コントローラ１００の主要部を、汎用的なアーキテクチャに従うハードウェア（たとえば、汎用パソコンをベースとした産業用パソコン）を用いて実現してもよい。この場合には、仮想化技術を用いて、用途の異なる複数のＯＳ（Operating System）を並列的に実行させるとともに、各ＯＳ上で必要なアプリケーションを実行させるようにしてもよい。さらに、標準コントローラ１００に表示装置やサポート装置などの機能を統合した構成を採用してもよい。
【００７８】
（ｂ２：セーフティコントローラ２００）
図４は、本実施の形態に係る制御システム１を構成するセーフティコントローラ２００のハードウェア構成例を示す模式図である。図４を参照して、セーフティコントローラ２００は、プロセッサ２０２と、メインメモリ２０４と、ストレージ２１０と、フィールドネットワークコントローラ２０８と、ＵＳＢコントローラ２２０と、セーフティローカルバスコントローラ２１６とを含む。これらのコンポーネントは、プロセッサバス２１８を介して接続されている。
【００７９】
プロセッサ２０２は、主として、セーフティ制御に係る制御演算を実行する演算処理部に相当し、ＣＰＵやＧＰＵなどで構成される。具体的には、プロセッサ２０２は、ストレージ２１０に格納されたプログラム（一例として、システムプログラム２１０２およびセーフティプログラム２１０４）を読み出して、メインメモリ２０４に展開して実行することで、必要なセーフティ機能２５０を提供するための制御演算、および、後述するような各種処理を実現する。
【００８０】
特に、セーフティコントローラ２００は、セーフティプログラム２１０４を実行することで、セーフティドライバ３００のモーションセーフティ機能３６０の有効または無効を指定するための指定情報を含むセーフティ指令を、セーフティドライバ３００に対して出力する。セーフティドライバ３００のセーフティステータス７０に含まれる指定情報は、セーフティ指令に含まれる指定情報に基づき更新され得る。
【００８１】
メインメモリ２０４は、ＤＲＡＭやＳＲＡＭなどの揮発性記憶装置などで構成される。ストレージ２１０は、たとえば、ＳＳＤやＨＤＤなどの不揮発性記憶装置などで構成される。
【００８２】
ストレージ２１０には、基本的な機能を実現するためのシステムプログラム２１０２に加えて、要求されるセーフティ機能２５０に応じて作成されたセーフティプログラム２１０４が格納される。さらに、ストレージ２１０には、変数などを設定するための設定情報２１０６が格納される。
【００８３】
フィールドネットワークコントローラ２０８は、フィールドネットワーク２を介して、標準コントローラ１００およびセーフティドライバ３００を含む任意のデバイスとの間でデータを遣り取りする。図４に示す制御システム１においては、セーフティコントローラ２００のフィールドネットワークコントローラ２０８は、フィールドネットワーク２の通信スレーブとして機能する。
【００８４】
ＵＳＢコントローラ２２０は、ＵＳＢ接続を介して、サポート装置５００などの情報処理装置との間でデータを遣り取りする。
【００８５】
セーフティローカルバスコントローラ２１６は、セーフティローカルバスを介して、セーフティコントローラ２００に接続される任意のセーフティユニットとの間でデータを遣り取りする。図４には、セーフティユニットの一例として、セーフティＩＯユニット２３０を示す。
【００８６】
セーフティＩＯユニット２３０は、任意のセーフティデバイス２４０との間で入出力信号を遣り取りする。より具体的には、セーフティＩＯユニット２３０は、セーフティセンサやセーフティスイッチなどのセーフティデバイス２４０からの入力信号を受け付ける。あるいは、セーフティＩＯユニット２３０は、セーフティリレーなどのセーフティデバイス２４０へ指令を出力する。
【００８７】
図４には、プロセッサ２０２がプログラムを実行することで必要な機能が提供される構成例を示したが、これらの提供される機能の一部または全部を、専用のハードウェア回路（たとえば、ＡＳＩＣまたはＦＰＧＡなど）を用いて実装してもよい。あるいは、セーフティコントローラ２００の主要部を、汎用的なアーキテクチャに従うハードウェア（たとえば、汎用パソコンをベースとした産業用パソコン）を用いて実現してもよい。
【００８８】
（ｂ３：セーフティドライバ３００およびサーボモータ４００）
図５は、本実施の形態に係る制御システム１を構成するセーフティドライバ３００およびサーボモータ４００のハードウェア構成例を示す模式図である。図５を参照して、セーフティドライバ３００は、フィールドネットワークコントローラ３０２と、制御部３１０と、ドライブ回路３３０と、フィードバック受信回路３３２とを含む。
【００８９】
フィールドネットワークコントローラ３０２は、フィールドネットワーク２を介して、標準コントローラ１００およびセーフティコントローラ２００を含む任意のデバイスとの間でデータを遣り取りする。図５に示す制御システム１においては、セーフティドライバ３００のフィールドネットワークコントローラ３０２は、フィールドネットワーク２の通信スレーブとして機能する。
【００９０】
制御部３１０は、セーフティドライバ３００を動作させるために必要な演算処理を実行する。一例として、制御部３１０は、プロセッサ３１２，３１４と、メインメモリ３１６と、ストレージ３２０とを含む。
【００９１】
プロセッサ３１２は、サーボモータ４００を駆動するための制御演算を主として実行する演算処理部に相当する。プロセッサ３１４は、サーボモータ４００に係るセーフティ機能２５０を提供するための制御演算を主として実行する。本実施の形態においては、プロセッサ３１４は、セーフティ指令に従って、特定のモーションセーフティ機能３６０を無効化する。プロセッサ３１２，３１４は、いずれもＣＰＵなどで構成される。
【００９２】
メインメモリ３１６は、ＤＲＡＭやＳＲＡＭなどの揮発性記憶装置などで構成される。ストレージ３２０は、たとえば、ＳＳＤやＨＤＤなどの不揮発性記憶装置などで構成される。
【００９３】
ストレージ３２０には、後述するサーボ制御３５０を実現するためのサーボ制御プログラム３２０２と、後述するモーションセーフティ機能３６０を実現するためのモーションセーフティプログラム３２０４と、他のデバイスに公開される変数などを設定するための設定情報３２０６とが格納される。さらに、設定情報３２０６には、モーションセーフティ機能３６０についての有効／無効設定を管理するためのセーフティステータス７０が格納される。
【００９４】
図５には、２つのプロセッサ３１２，３１４がそれぞれ異なる目的の制御演算を実行することで信頼性を高める構成を例示するが、これに限らず、要求されるセーフティ機能２５０を実現できればどのような構成を採用してもよい。たとえば、単一のプロセッサに複数のコアが含まれるような場合には、プロセッサ３１２，３１４にそれぞれ対応する制御演算を実行するようにしてもよい。また、図５には、プロセッサ３１２，３１４がプログラムを実行することで必要な機能が提供される構成例を示したが、これらの提供される機能の一部または全部を、専用のハードウェア回路（たとえば、ＡＳＩＣまたはＦＰＧＡなど）を用いて実装してもよい。
【００９５】
ドライブ回路３３０は、コンバータ回路およびインバータ回路などを含み、制御部３１０からの指令に従って、指定された電圧・電流・位相の電力を生成して、サーボモータ４００へ供給する。
【００９６】
フィードバック受信回路３３２は、サーボモータ４００からのフィードバック信号を受信して、その受信結果を制御部３１０へ出力する。
【００９７】
サーボモータ４００は、典型的には、三相交流モータ４０２および三相交流モータ４０２の回転軸に取付けられたエンコーダ４０４を含む。
【００９８】
三相交流モータ４０２は、セーフティドライバ３００から供給される電力を受けて回転力を発生するアクチュエータである。図５には、一例として、三相交流モータを例示するが、これに限らず、直流モータであってもよいし、単相交流モータあるいは多相交流モータであってもよい。さらに、リニアサーボのような直線に沿って駆動力を発生するアクチュエータを採用してもよい。
【００９９】
エンコーダ４０４は、三相交流モータ４０２の回転数に応じたフィードバック信号（典型的には、回転数に応じた数のパルス信号）を出力する。
【０１００】
（ｂ４：サポート装置５００）
図６は、本実施の形態に係る制御システム１を構成するサポート装置５００のハードウェア構成例を示す模式図である。サポート装置５００は、一例として、汎用的なアーキテクチャに従うハードウェア（たとえば、汎用パソコン）を用いて実現される。
【０１０１】
図６を参照して、サポート装置５００は、プロセッサ５０２と、メインメモリ５０４と、入力部５０６と、出力部５０８と、ストレージ５１０と、光学ドライブ５１２と、ＵＳＢコントローラ５２０とを含む。これらのコンポーネントは、プロセッサバス５１８を介して接続されている。
【０１０２】
プロセッサ５０２は、ＣＰＵやＧＰＵなどで構成され、ストレージ５１０に格納されたプログラム（一例として、ＯＳ５１０２およびサポートプログラム５１０４）を読み出して、メインメモリ５０４に展開して実行することで、後述するような各種処理を実現する。すなわち、プロセッサ５０２は、サポートプログラム５１０４を実行するコンピュータの機能を有する。特に、プロセッサ５０２は、図１に示した生成部５２１２の機能を有し、ユーザから受け付けたモーションセーフティ機能３６０の有効または無効の指定に応じて、セーフティソースプログラム５１１２を生成する。
【０１０３】
メインメモリ５０４は、ＤＲＡＭやＳＲＡＭなどの揮発性記憶装置などで構成される。ストレージ５１０は、たとえば、ＨＤＤやＳＳＤなどの不揮発性記憶装置などで構成される。
【０１０４】
ストレージ５１０には、基本的な機能を実現するためのＯＳ５１０２に加えて、サポート装置５００としての機能を提供するためのサポートプログラム５１０４が格納される。すなわち、サポートプログラム５１０４は、制御システム１に接続されるコンピュータにより実行されることで、本実施の形態に係るサポート装置５００を実現する。サポートプログラム５１０４には、有効／無効設定支援プログラム９０が含まれる。サポート装置５００は、有効／無効設定支援プログラム９０を実行することで、ユーザによるモーションセーフティ機能３６０の有効または無効の指定を受け付けるとともに、受け付けた有効または無効の指定に応じてプロセッサ５０２によってセーフティソースプログラム５１１２を生成する。
【０１０５】
さらに、ストレージ５１０には、サポートプログラム５１０４が実行されることで提供される開発環境においてユーザにより作成されるプロジェクトデータ５１０６が格納される。
【０１０６】
本実施の形態において、サポート装置５００は、制御システム１に含まれる各デバイスに対する設定および各デバイスで実行されるプログラムの作成が統合的に可能な開発環境を提供する。プロジェクトデータ５１０６は、このような統合的な開発環境によって生成されるデータを含む。典型的には、プロジェクトデータ５１０６は、標準制御ソースプログラム５１０８と、標準コントローラ設定情報５１１０と、セーフティソースプログラム５１１７と、セーフティコントローラ設定情報５１１４と、セーフティドライバ設定情報５１１６とを含む。
【０１０７】
標準制御ソースプログラム５１０８は、オブジェクトコードに変換された上で、標準コントローラ１００へ送信され、標準制御プログラム１１０４（図３参照）として格納される。なお、標準制御ソースプログラム５１０８は、オブジェクトコードに変換されることなく、そのまま標準コントローラ１００へ送信されてもよい。同様に、標準コントローラ設定情報５１１０についても標準コントローラ１００へ送信され、設定情報１１０６（図３参照）として格納される。
【０１０８】
セーフティソースプログラム５１１７は、オブジェクトコードに変換された上で、セーフティコントローラ２００へ送信され、セーフティプログラム２１０４（図４参照）として格納される。なお、セーフティソースプログラム５１１７は、オブジェクトコードに変換されることなく、そのままセーフティコントローラ２００へ送信されてもよい。同様に、セーフティコントローラ設定情報５１１４についてもセーフティコントローラ２００へ送信され、設定情報２１０６（図４参照）として格納される。
【０１０９】
セーフティドライバ設定情報５１１６は、セーフティドライバ３００へ送信され、設定情報３２０６（図５参照）として格納される。
【０１１０】
入力部５０６は、キーボードやマウスなどによって入力された情報を受け付けるインターフェースであり、図１に示した受付部５２１６の機能を有する。特に、入力部５０６は、ユーザによるモーションセーフティ機能３６０の有効または無効の指定を受け付ける。出力部５０８は、ディスプレイ、各種インジケータ、プリンタなどで構成され、プロセッサ５０２からの処理結果などを出力する。
【０１１１】
ＵＳＢコントローラ５２０は、図１に示した転送部５２１８の機能を有し、ＵＳＢ接続を介して、標準コントローラ１００などとの間のデータを遣り取りする。特に、ＵＳＢコントローラ５２０は、プロセッサ５０２によって自動的に生成されたセーフティソースプログラム５１１２を、セーフティコントローラ２００に転送する。なお、ＵＳＢコントローラ５２０は、標準コントローラ１００を介して、セーフティソースプログラム５１１２をセーフティコントローラ２００に転送してもよいし、標準コントローラ１００を介することなく、セーフティソースプログラム５１１２をセーフティコントローラ２００に転送してもよい。
【０１１２】
サポート装置５００は、光学ドライブ５１２を有しており、コンピュータ読取可能なプログラムを非一過的に格納する記録媒体５１４（たとえば、ＤＶＤ（Digital Versatile Disc）などの光学記録媒体）から、その中に格納されたプログラムが読み取られてストレージ５１０などにインストールされる。
【０１１３】
サポート装置５００で実行されるサポートプログラム５１０４などは、コンピュータ読取可能な記録媒体５１４を介してインストールされてもよいが、ネットワーク上のサーバ装置などからダウンロードする形でインストールするようにしてもよい。また、本実施の形態に係るサポート装置５００が提供する機能は、ＯＳが提供するモジュールの一部を利用する形で実現される場合もある。
【０１１４】
図６には、プロセッサ５０２がプログラムを実行することで、サポート装置５００として必要な機能が提供される構成例を示したが、これらの提供される機能の一部または全部を、専用のハードウェア回路（たとえば、ＡＳＩＣまたはＦＰＧＡなど）を用いて実装してもよい。
【０１１５】
なお、制御システム１が稼動中において、サポート装置５００は、標準コントローラ１００から取り外されていてもよい。
【０１１６】
＜Ｃ．制御システム１の機能分担＞
次に、制御システム１における機能分担の一例について説明する。図７は、本実施の形態に係る制御システム１の機能分担の一例を示す模式図である。
【０１１７】
図７を参照して、標準コントローラ１００が実行する標準制御１５０に関して、セーフティドライバ３００はサーボ制御３５０を実行する。標準制御１５０は、制御対象に予め設定されたユーザプログラムに従って、サーボモータ４００を駆動するための指令を周期的に算出する処理を含む。また、サーボ制御３５０は、標準制御１５０により周期的に算出される指令に従ってサーボモータ４００を駆動するための制御、および、サーボモータ４００の動作状態を示す状態値を取得して出力する処理を含む。サーボ制御３５０は、セーフティドライバ３００のプロセッサ３１２（図５参照）が担当する。
【０１１８】
一方、セーフティコントローラ２００が提供するセーフティ機能２５０に対応して、セーフティドライバ３００はモーションセーフティ機能３６０を提供する。モーションセーフティ機能３６０は、セーフティドライバ３００のプロセッサ３１４（図５参照）が担当する。
【０１１９】
セーフティ機能２５０は、標準コントローラ１００が実行する標準制御１５０が保持する状態値、セーフティデバイス２４０からの信号によって示される状態値、および、セーフティドライバ３００が保持する状態値などに基づいて、予め定められた条件が成立すると、予め指定されているセーフティ機能２５０を有効化する。
【０１２０】
予め指定されているセーフティ機能２５０を有効化する処理は、たとえば、セーフティドライバ３００に対するセーフティ指令の出力、あるいは、セーフティデバイス２４０に対してセーフティ指令の出力（たとえば、特定の装置への電力供給に係るセーフティリレーを遮断する）などを含む。
【０１２１】
セーフティドライバ３００は、モーションセーフティプログラム３２０４を実行することで、セーフティコントローラ２００からのセーフティ指令に応答して、指定されたモーションセーフティ機能３６０を実現する。なお、各セーフティドライバ３００においては、実行可能なモーションセーフティ機能３６０が予め定められている。指定されたモーションセーフティ機能３６０の種類に応じて、サーボ制御３５０によるサーボモータ４００の制御に介入して、サーボモータ４００への電力供給を遮断する処理、あるいは、サーボ制御３５０によるサーボモータ４００の制御の状態値が予め定められた制限範囲内に収まっているか否かを監視する処理などが実行される。モーションセーフティプログラム３２０４は、セーフティステータス７０に含まれる指定情報によって指定されるセーフティ機能の有効／無効設定に応じて、各モーションセーフティ機能３６０を有効化または無効化する。
【０１２２】
図８は、本実施の形態に係る制御システム１のセーフティドライバ３００によるセーフティ機能２５０に係る処理手順の一例を示すシーケンス図である。図８を参照して、標準コントローラ１００の標準制御１５０により周期的に指令が算出されて、セーフティドライバ３００（サーボ制御３５０）に出力される（シーケンスＳＱ２）。セーフティドライバ３００のサーボ制御３５０は、標準制御１５０からの指令に従って、サーボモータ４００を駆動する（シーケンスＳＱ４）。
【０１２３】
あるタイミングにおいて、セーフティデバイス２４０（たとえば、セーフティセンサ）からのセーフティイベントが発生すると（シーケンスＳＱ６）、セーフティコントローラ２００は、セーフティドライバ３００（モーションセーフティ機能３６０）にセーフティ指令を出力する（シーケンスＳＱ８）。このセーフティ指令に応答して、セーフティドライバ３００のモーションセーフティ機能３６０は、指定されたセーフティ機能２５０を有効化する（シーケンスＳＱ１０）。
【０１２４】
セーフティ機能２５０の有効化に応答して、標準コントローラ１００の標準制御１５０からは、当該有効化されたセーフティ機能２５０に応じた指令が算出および出力されるようになる（シーケンスＳＱ１２）。一方、セーフティドライバ３００（モーションセーフティ機能３６０）は、サーボモータ４００の動作状態が予め定められた制限範囲内に収まっているか否かを監視する。サーボモータ４００の動作状態が予め定められた制限範囲内に収まっていないと判断されると、あるいは、予め定められた停止時間が到来すると、セーフティドライバ３００（モーションセーフティ機能３６０）は、サーボモータ４００への電力供給を遮断する（シーケンスＳＱ１４）。
【０１２５】
このように、セーフティドライバ３００は、標準コントローラ１００（標準制御１５０）からの指令に従ってサーボモータ４００を駆動できるとともに、セーフティ機能２５０を有効化するための指令に応じて、セーフティコントローラ２００（セーフティ機能２５０）に対するモーションセーフティ機能３６０を実現することができる。
【０１２６】
＜Ｄ．制御システム１のモーションセーフティ機能３６０＞
次に、制御システム１が提供するモーションセーフティ機能３６０の一例について説明する。
【０１２７】
図９は、本実施の形態に係る制御システム１が提供するモーションセーフティ機能３６０の一例を示す図である。図９（Ａ）には、ＳＴＯに対応するサーボモータ４００の挙動の一例を示し、図９（Ｂ）には、ＳＳ１に対応するサーボモータ４００の挙動の一例を示す。
【０１２８】
図９（Ａ）を参照して、サーボモータ４００がある回転速度で運転している状態において、時刻ｔ１でセーフティ指令（ＳＴＯ）が与えられると、セーフティドライバ３００は、サーボモータ４００への電力供給を遮断して、サーボモータ４００で発生するトルクをゼロにする。この結果、サーボモータ４００は惰性で回転した後に停止する。なお、サーボモータ４００にブレーキが装着されている場合には、サーボモータ４００は即座に停止することもできる。
【０１２９】
図９（Ｂ）を参照して、サーボモータ４００がある回転速度で運転している状態において、時刻ｔ１でセーフティ指令（ＳＳ１）が与えられると、セーフティドライバ３００は、予め定められた加速度で回転速度を低減する。このとき、セーフティドライバ３００は、サーボモータ４００からの電力回収（すなわち、回生）などを実行してもよい。そして、時刻ｔ２においてサーボモータ４００の回転速度がゼロになると、セーフティドライバ３００は、サーボモータ４００への電力供給を遮断して、サーボモータ４００で発生するトルクをゼロにする。時刻ｔ２以降においては、図９（Ａ）に示すＳＴＯと同様の状態になる。
【０１３０】
図９（Ａ）に示されるＳＴＯおよび図９（Ｂ）に示されるＳＳ１のうち、サーボモータ４００と機械的に連結されている設備の特性などに応じて、より安全に停止できるセーフティ機能が適宜選択される。
【０１３１】
上述した非特許文献１は、図９（Ａ）および図９（Ｂ）に示すモーションセーフティ機能だけではなく、複数のモーションセーフティ機能を規定する。各モーションセーフティ機能を実現するためには、サーボモータ４００の挙動を規定するための設定が必要となる。
【０１３２】
＜Ｅ．標準制御およびセーフティ制御の実装例＞
上述したように、本実施の形態に係る制御システム１においては、データ通信および論理コネクション４によるセーフティ通信が可能になっている。次に、それぞれの通信を利用した標準制御およびセーフティ制御の実装例について説明する。
【０１３３】
図１０は、本実施の形態に係る制御システム１における標準制御およびセーフティ制御の実装例を示す模式図である。説明の便宜上、図１０には、標準コントローラ１００およびセーフティコントローラ２００に加えて、１つのセーフティドライバ３００からなる制御システム１の例を示す。
【０１３４】
図１０に示すように、標準コントローラ１００は、主たる機能構成として、データ通信レイヤ１７０と、ＩＯ管理モジュール１７２とを含む。セーフティコントローラ２００は、主たる機能構成として、データ通信レイヤ２７０と、ＩＯ管理モジュール２７２と、論理コネクションレイヤ２７６と、セーフティ機能状態管理エンジン２７８とを含む。セーフティドライバ３００は、主たる機能構成として、データ通信レイヤ３７０と、論理コネクションレイヤ３７６と、モーションセーフティ機能状態管理エンジン３７８と、サーボ制御実行エンジン３５２と、モーションセーフティ機能実行エンジン３６２とを含む。
【０１３５】
データ通信レイヤ１７０、データ通信レイヤ２７０、およびデータ通信レイヤ３７０は、フィールドネットワーク２上の通信フレーム６００の転送を担当する。
【０１３６】
セーフティコントローラ２００の論理コネクションレイヤ２７６およびセーフティドライバ３００の論理コネクションレイヤ３７６は、セーフティ通信フレーム６３０の遣り取りを担当する。すなわち、論理コネクションレイヤ２７６および論理コネクションレイヤ３７６は、論理コネクション４を確立するためのプロトコル（本実施の形態においては、ＦＳｏＥ）に従って、通信フレーム６００に含まれるセーフティ通信フレーム６３０を用いて、コマンドおよびデータを遣り取りする。セーフティコントローラ２００は、論理コネクションレイヤ２７６を介してセーフティドライバ３００との間で論理コネクション４を確立させるための確立モジュール２７７を含む。
【０１３７】
標準コントローラ１００において、ＩＯ管理モジュール１７２は、制御対象との間で信号を遣り取りすることで、プロセスデータ１７４を更新する。標準コントローラ１００において実行される標準制御プログラム１１０４は、プロセスデータ１７４を参照して制御演算を実行するとともに、制御演算の実行結果でプロセスデータ１７４を更新する。
【０１３８】
セーフティコントローラ２００において、ＩＯ管理モジュール２７２は、セーフティデバイス２４０との間で信号を遣り取りすることで、プロセスデータ２７４を更新する。
【０１３９】
セーフティコントローラ２００において実行されるセーフティプログラム２１０４は、プロセスデータ２７４およびセーフティ機能状態管理エンジン２７８を参照して制御演算を実行するとともに、制御演算の実行結果に基づいて、プロセスデータ２７４を更新し、あるいは、セーフティ機能状態管理エンジン２７８に対して内部的な指令を出力する。
【０１４０】
セーフティ機能状態管理エンジン２７８は、セーフティプログラム２１０４による制御演算の実行結果に応じて、特定のセーフティドライバ３００に対して特定のモーションセーフティ機能３６０を有効化または無効化するためのセーフティ指令を生成する。論理コネクションレイヤ２７６は、セーフティ機能状態管理エンジン２７８からの指令に応答して、対象のセーフティドライバ３００の論理コネクションレイヤ３７６との間で、セーフティ通信フレーム６３０を用いて必要なコマンドおよびデータを遣り取りする。
【０１４１】
セーフティドライバ３００において、サーボ制御実行エンジン３５２は、プロセスデータ３７４およびフィードバック受信回路３３２を介して取得されるフィードバック信号の情報を参照してサーボ制御に係る制御演算を実行する。サーボ制御実行エンジン３５２は、制御演算の実行結果に基づいて、プロセスデータ３７４を更新するとともに、ドライブ回路３３０に内部的な指令を出力する。ドライブ回路３３０は、サーボ制御実行エンジン３５２からの指令に従って、サーボモータ４００を駆動する。
【０１４２】
モーションセーフティ機能状態管理エンジン３７８は、セーフティコントローラ２００からのセーフティ指令に従ってモーションセーフティ機能３６０の状態を管理する。セーフティステータス７０は、モーションセーフティ機能状態管理エンジン３７８によって保持される。モーションセーフティ機能状態管理エンジン３７８は、セーフティステータス７０に含まれる指定情報に従って、モーションセーフティ機能実行エンジン３６２に対して内部的な指令を出力する。
【０１４３】
モーションセーフティ機能実行エンジン３６２においては、モーションセーフティプログラム３２０４が実行されることにより、指定されたモーションセーフティ機能３６０が実現される。
【０１４４】
論理コネクションレイヤ３７６は、モーションセーフティ機能状態管理エンジン３７８からの指令に応答して、セーフティコントローラ２００の論理コネクションレイヤ２７６との間で、セーフティ通信フレーム６３０を用いて必要なコマンドおよびデータを遣り取りする。
【０１４５】
＜Ｆ．モーションセーフティ機能の有効または無効の遷移の一例＞
図１１は、本実施の形態に係るモーションセーフティ機能３６０の有効または無効の遷移の一例を示す模式図である。
【０１４６】
前述したように、セーフティドライバ３００は、実装しているか否かに関わらず、全てのモーションセーフティ機能３６０に対応するフラグがデフォルトで「０」となって立ち上がる。つまり、デフォルト時においては、セーフティステータス７０に含まれる全ビットのフラグが「０」となる。
【０１４７】
ユーザが、サポート装置５００を利用して、ＳＳ２を無効化するためにＳＳ２に対応する２ビット目のフラグを「１」に、ＳＯＳを無効化するためにＳＯＳに対応する３ビット目のフラグを「１」に、さらに、ＳＤＩｐを無効化するためにＳＤＩｐに対応する５ビット目のフラグを「１」に設定するように、モーションセーフティ機能３６０の有効または無効を指定すると、当該有効または無効の指定に応じてセーフティプログラム２１０４が自動的に生成される。そして、セーフティコントローラ２００は、そのセーフティプログラム２１０４を実行することで、ユーザによるモーションセーフティ機能３６０の有効または無効の指定情報を含むセーフティ指令をセーフティドライバ３００に送信する。
【０１４８】
セーフティドライバ３００がセーフティコントローラ２００からのセーフティ指令を受信すると、セーフティステータス７０に含まれる指定情報が、当該セーフティ指令に含まれる指定情報に従って更新される。より具体的には、セーフティステータス７０に含まれる指定情報が、セーフティ指令に含まれる指定情報と同じになるように上書きされる。
【０１４９】
このように、本実施の形態に係る制御システム１においては、フィールドネットワーク２における接続が確立した後に、セーフティ指令によって、特定のモーションセーフティ機能３６０の有効または無効の設定をデフォルト状態から変更することができる。
【０１５０】
＜Ｇ．セーフティプログラムの一例＞
次に、図１２を参照しながら、セーフティプログラム２１０４におけるセーフティ機能の有効／無効設定部分の一例について説明する。図１２は、本実施の形態に係るセーフティプログラム２１０４におけるセーフティ機能の有効／無効設定部分を示す模式図である。
【０１５１】
図１２に示すように、セーフティプログラム２１０４の一部には、制御システム１に含まれる１または複数のセーフティドライバ３００ごとに、モーションセーフティ機能３６０の有効または無効を指定するためのソースコードが記述されている。
【０１５２】
より具体的には、識別コード「Ｅ０１０」に対応づけられたセーフティドライバ３００については、ＳＳ２、ＳＯＳ、およびＳＤＩｐに対して「ＴＲＵＥ」が指定されている。また、識別コード「Ｅ０１１」に対応づけられたセーフティドライバ３００については、ＳＳ１、ＳＯＳ、ＳＳＲ、およびＳＤＩｎに対して「ＴＲＵＥ」が指定されている。
【０１５３】
「ＴＲＵＥ」が指定されたモーションセーフティ機能３６０については、指定情報に含まれる各ビットにおいてフラグが「１」に設定される。すなわち、図１２に示すソースコードに基づき生成されたセーフティプログラム２１０４が実行された場合、「Ｅ０１０」に対応づけられたセーフティドライバ３００については、ＳＳ２、ＳＯＳ、およびＳＤＩｐのそれぞれに対応するフラグに「１」を指定する指定情報がセーフティ指令に含まれ、「Ｅ０１１」に対応づけられたセーフティドライバ３００については、ＳＳ１、ＳＯＳ、ＳＳＲ、およびＳＤＩｎのそれぞれに対応するフラグに「１」を指定する指定情報がセーフティ指令に含まれる。
【０１５４】
従来においては、このようなソースコードをユーザ自身の入力操作によって記述しなければならなかったが、本実施の形態においては、ユーザは、セーフティ機能の有効／無効設定をサポート装置５００において指定するだけで、同様のソースコードが記述されたセーフティプログラム２１０４が自動的に生成されることになる。
【０１５５】
サポート装置５００によって自動的に生成されたセーフティプログラム２１０４は、ユーザによって編集不可能になっている。たとえば、生成されたセーフティプログラム２１０４は、サポート装置５００などの表示部に表示されることがなく、ユーザがそのプログラムの中身を認識できず、もちろん編集もできないようになっている。あるいは、生成されたセーフティプログラム２１０４は、サポート装置５００などの表示部に表示されてもよいが、ユーザがそのプログラムの中身を編集できないようになっている。
【０１５６】
これにより、サポート装置５００によって生成されたセーフティプログラム２１０４がユーザによって編集されることがないため、ユーザがサポート装置５００に対して指定したセーフティ機能についての有効または無効の設定内容と、サポート装置５００によって生成されたセーフティプログラム２１０４における設定内容とが一致しないという不都合の発生を回避することができる。
【０１５７】
＜Ｈ．モーションセーフティ機能３６０に関するユーザインターフェース＞
次に、サポート装置５００が提供するモーションセーフティ機能３６０に関するユーザインターフェースの一例について説明する。
【０１５８】
図１３および図１４は、本実施の形態に係るサポート装置５００が提供するモーションセーフティ機能３６０の有効／無効設定をするためのユーザインターフェースの一例を示す図である。また、図１５は、本実施の形態に係るサポート装置５００が提供するセーフティプログラム２１０４における変数設定をするためのユーザインターフェースの一例を示す図である。ユーザは、サポート装置５００においてサポートプログラム５１０４（有効／無効設定支援プログラム９０）を実行することで、図１３〜図１５に示すようなユーザインターフェースに係る画面を表示させることができる。
【０１５９】
図１３に示すように、ユーザインターフェース６０１に係る画面の左側には、マルチビューエクスプローラ欄６１０が設けられている。マルチビューエクスプローラ欄６１０には、開発対象となるプログラムを指定するための切替スイッチ６１２が含まれる。この例では、切替スイッチ６１２において、セーフティプログラム２１０４に対応する「new_SafetyCPU0」が指定されている。
【０１６０】
さらに、マルチビューエクスプローラ欄６１０には、制御システム１においてネットワーク接続される構成を設定するための構成・設定スイッチ６１４が含まれる。構成・設定スイッチ６１４によって展開される下位層には、モーションセーフティ機能３６０の有効または無効を指定するための有効／無効設定アイコン６１６と、セーフティプログラム２１０４で参照される変数のマッピングを行うためのＩ／Ｏマップアイコン６１８とが含まれる。「変数」とは、データそのもの、および当該データが格納される入れ物や記憶領域などである。たとえば、セーフティプログラム２１０４で参照される変数としては、サーボモータ４００などの状態値などが対応付けられており、この変数に対応付けられた状態値に応じて、各モーションセーフティ機能３６０が実現される。
【０１６１】
有効／無効設定アイコン６１６は、制御システム１に接続された１または複数のセーフティドライバ３００ごとに設けられており、この例では、Ｎｏｄｅ１０のセーフティドライバ３００に対応する有効／無効設定アイコン６１６が選択されている。
【０１６２】
ユーザインターフェース６０１に係る画面の中央には、モーションセーフティ機能３６０の有効または無効を指定するための画面６２０が表示される。この画面６２０においては、番号欄６２２と、フラグ欄６２４とが含まれる。
【０１６３】
番号欄６２２には、セーフティステータス７０に含まれる指定情報と同じ並びで、１ビット目から順番にモーションセーフティ機能３６０ごとに番号が示されている。なお、この例では、４ビット目のＳＳＲのモーションセーフティ機能３６０が実装されていないため、４番目に対応する情報が全て「Reserved」になっている。
【０１６４】
フラグ欄６２４には、ユーザによってチェックを付けることができるチェックボックスが用意されている。ユーザは、セーフティプログラム２１０４におけるソースコードにおいて「ＴＲＵＥ」を指定する場合、フラグ欄６２４のチェックボックスにおいてチェックを外せばよい。チェックボックスにおいてチェックが外されたモーションセーフティ機能３６０については、セーフティ指令に含まれる指定情報においてフラグが「１」に設定される。一方、チェックボックスにおいてチェックが付けられたモーションセーフティ機能３６０については、セーフティ指令に含まれる指定情報においてフラグが「０」に設定される。このように、ユーザは、フラグ欄６２４のチェックボックスにおいてチェックを付けたり、チェックを外したりすることで、容易にセーフティ指令におけるモーションセーフティ機能３６０の有効／無効設定を行うことができる。
【０１６５】
なお、モーションセーフティ機能３６０の有効／無効設定について、セーフティステータス７０の２バイト目については、ユーザによってデフォルト状態を変更することができるが、図１３に示すように、２バイト目についても、ユーザは、フラグ欄６２４のチェックボックスにおいてチェックを付けたり、チェックを外したりすることで、容易に有効／無効設定を行うことができる。
【０１６６】
図１３に示す例では、フラグ欄６２４のチェックボックスにおいて、ＳＳ２、ＳＯＳ、およびＳＤＩｐのチェックが外されている。このため、セーフティ指令においては、ＳＳ２、ＳＯＳ、およびＳＤＩｐに対応するフラグが「１」に指定されることになる。
【０１６７】
ユーザは、前述のように、各セーフティドライバ３００における各モーションセーフティ機能３６０について有効または無効を指定した後、転送アイコン６８０を選択することで、当該有効または無効の指定に応じたセーフティプログラム２１０４を生成することができ、生成されたセーフティプログラム２１０４は、セーフティコントローラ２００に転送される。
【０１６８】
図１４に示すように、フラグ欄６２４のチェックボックスにおいて、特定のモーションセーフティ機能３６０について無効化されると、ユーザインターフェース６０２に係る画面に切り替わり、画面下方に位置するアウトプットウィンドウ６７０において、無効化された特定のモーションセーフティ機能３６０に対応付けられた変数が解除された旨が通知される。
【０１６９】
図１５に示すように、Ｉ／Ｏマップアイコン６１８が選択されると、ユーザインターフェース６０３に係る画面に切り替わる。ユーザインターフェース６０３に係る画面の中央には、各モーションセーフティ機能３６０に対して変数のマッピングを行うための画面６５０が表示される。この画面６５０においては、ポート欄６５２と、変数欄６５４と、変数コメント欄６５６とが含まれる。
【０１７０】
ポート欄６５２には、選択中のセーフティドライバ３００（この例では、Ｎｏｄｅ１０）に実装された各モーションセーフティ機能３６０が示されている。変数欄６５４には、各モーションセーフティ機能３６０に対応付けられた変数が示されている。変数コメント欄６５６には、各モーションセーフティ機能３６０に対応付けられた変数に関するコメントが示されている。
【０１７１】
ここで、図１４に示したように、フラグ欄６２４のチェックボックスにおいて、特定のモーションセーフティ機能３６０について無効化した場合、無効化された特定のモーションセーフティ機能３６０に対応付けられた変数が解除される。このため、図１５に示すユーザインターフェース６０３に係る画面においては、変数欄６５４および変数コメント欄６５６が空白となる。たとえば、この例では、フラグ欄６２４のチェックボックスにおいて、ＳＳ２およびＳＯＳが無効化されて変数が解除されたため、ＳＳ２およびＳＯＳに対応する変数欄６５４および変数コメント欄６５６が空白となる。
【０１７２】
このように、サポート装置５００は、特定のモーションセーフティ機能３６０の無効が指定されたことに応答して、当該特定のモーションセーフティ機能３６０に係るセーフティプログラム２１０４で参照される変数の使用を禁止する。これにより、無効化されたモーションセーフティ機能３６０に係るセーフティプログラム２１０４で参照される変数を、ユーザが意図せず設定してしまうといった事態を回避することができる。
【０１７３】
＜Ｉ．セーフティ有効／無効プログラム生成処理＞
次に、サポート装置５００が実行するセーフティ有効／無効プログラム生成処理について説明する。図１６は、本実施の形態に係るサポート装置５００が実行するセーフティ有効／無効プログラム生成処理を説明するためのフローチャートである。
【０１７４】
図１６に示すように、サポート装置５００は、セーフティ機能の有効／無効設定画面の表示を受け付けた否かを判定する（Ｓ５０２）。サポート装置５００は、セーフティ機能の有効／無効設定画面の表示を受け付けていない場合（Ｓ５０２でＮＯ）、本処理を終了する。
【０１７５】
一方、サポート装置５００は、セーフティ機能の有効／無効設定画面の表示を受け付けた場合（Ｓ５０２でＹＥＳ）、図１３に示したようなセーフティ機能の有効／無効設定画面を表示する（Ｓ５０４）。
【０１７６】
次に、サポート装置５００は、セーフティ機能の有効／無効設定を受け付けた否かを判定する（Ｓ５０６）。具体的には、サポート装置５００は、図１３に示すユーザインターフェース６０１に係る画面において、フラグ欄６２４のチェックボックスのチェックがユーザによって付けられたり外されたりしたか否かを判定する。サポート装置５００は、セーフティ機能の有効／無効設定を受け付けていない場合（Ｓ５０６でＮＯ）、有効／無効設定を受け付けるまでＳ５０６の処理を繰り返す。
【０１７７】
一方、サポート装置５００は、セーフティ機能の有効／無効設定を受け付けた場合（Ｓ５０６でＹＥＳ）、転送の指示を受け付けたか否かを判定する（Ｓ５０８）。具体的には、サポート装置５００は、図１３に示すユーザインターフェース６０１に係る画面において、転送アイコン６８０が選択されたか否かを判定する。サポート装置５００は、転送の指示を受け付けていない場合（Ｓ５０８でＮＯ）、Ｓ５０６の処理に戻る。
【０１７８】
一方、サポート装置５００は、転送の指示を受け付けた場合（Ｓ５０８でＹＥＳ）、無効に設定されたモーションセーフティ機能３６０に対して変数のマッピングがあるか否かを判定する（Ｓ５１０）。サポート装置５００は、無効に設定されたモーションセーフティ機能３６０に対して変数のマッピングがない場合（Ｓ５１０でＮＯ）、本処理を終了する。
【０１７９】
一方、サポート装置５００は、無効に設定されたモーションセーフティ機能３６０に対して変数のマッピングがある場合（Ｓ５１０でＹＥＳ）、無効に設定されたモーションセーフティ機能３６０に対応する変数を解除し（Ｓ５１２）、解除した旨を通知する（Ｓ５１４）。たとえば、サポート装置５００は、図１４に示すアウトプットウィンドウ６７０において、無効化した特定のモーションセーフティ機能３６０に対応付けられた変数を解除した旨を通知する。
【０１８０】
次に、サポート装置５００は、無効に設定されたセーフティ機能に対してセーフティプログラム２１０４を生成するための変数をマッピングする（Ｓ５１６）。なお、このとき用いられる変数について、変数名はユーザが設定しないようなユニークな名前が付される方が好ましい。また、仮に同一の名称が変数名に用いられるような場合には、番号などの添え字を付けて識別できるようにすればよい。サポート装置５００は、Ｓ５１６においてマッピングした変数を使用してセーフティプログラム２１０４を生成する（Ｓ５１８）。なお、サポート装置５００は、既に無効に設定されたセーフティ機能に対してセーフティプログラム２１０４を生成するための変数がマッピングされている場合、当該変数を使用してセーフティプログラム２１０４を生成してもよい。
【０１８１】
そして、サポート装置５００は、無効に設定されたモーションセーフティ機能３６０に対する変数のマッピングを禁止し（Ｓ５２０）、生成したセーフティプログラム２１０４をセーフティコントローラ２００に転送する（Ｓ５２２）。このとき、サポート装置５００は、ビルドを行うことでソースコードをオブジェクトコードに変換し、オブジェクトコードの形態でセーフティプログラム２１０４をセーフティコントローラ２００に転送してもよいし、ビルドを行うことなく、ソースコードの形態でセーフティプログラム２１０４をセーフティコントローラ２００に転送してもよい。また、サポート装置５００は、標準コントローラ１００を介してセーフティコントローラ２００にセーフティプログラム２１０４を転送してもよいし、標準コントローラ１００を介することなく、直接的にセーフティコントローラ２００にセーフティプログラム２１０４を転送してもよい。その後、サポート装置５００は、本処理を終了する。
【０１８２】
このように、サポート装置５００は、ユーザによって行われたモーションセーフティ機能３６０についての有効または無効の指定に応じてセーフティプログラム２１０４を生成し、生成したセーフティプログラム２１０４をセーフティコントローラ２００に転送する。これにより、ユーザは、特定のモーションセーフティ機能３６０について有効または無効を指定するためのセーフティプログラム２１０４を、ソースコードを記述することなく生成することができるため、モーションセーフティ機能３６０における有効または無効の設定を容易にすることができる。
【０１８３】
また、サポート装置５００は、特定のモーションセーフティ機能３６０の無効が指定されたことに応答して、当該特定のモーションセーフティ機能３６０に係るセーフティプログラム２１０４で参照される変数の使用を禁止する。これにより、無効化されたモーションセーフティ機能３６０に係るセーフティプログラム２１０４で参照される変数を、ユーザが意図せず設定してしまうといった事態を回避することができる。
【０１８４】
さらに、サポート装置５００は、無効化されたモーションセーフティ機能３６０に係るセーフティプログラム２１０４で参照される変数の使用が禁止されたことをユーザに通知することができる。
【０１８５】
＜Ｊ．セーフティ指令受信処理＞
次に、セーフティドライバ３００が実行するセーフティ指令受信処理について説明する。図１７は、本実施の形態に係るセーフティドライバ３００が実行するセーフティ指令受信処理を説明するためのフローチャートである。なお、セーフティドライバ３００は、フィールドネットワーク２における接続が確立して論理コネクション４が確立した後に、図１７に示すセーフティ指令受信処理を実行する。
【０１８６】
図１７に示すように、セーフティドライバ３００は、セーフティコントローラ２００からセーフティ指令を受信したか否かを判定する（Ｓ３２２）。セーフティドライバ３００は、セーフティ指令を受信していない場合（Ｓ３２２でＮＯ）、本処理を終了する。
【０１８７】
一方、セーフティドライバ３００は、セーフティ指令を受信した場合（Ｓ３２２でＹＥＳ）、セーフティ指令にモーションセーフティ機能３６０の有効／無効設定が含まれているか否かを判定する（Ｓ３２４）。つまり、セーフティドライバ３００は、サポート装置５００によって自動で生成されたセーフティプログラム２１０４の実行に従って転送されたセーフティ指令に、サポート装置５００から入力されたユーザによるセーフティ機能についての有効または無効の指定が含まれているか否かを判定する。
【０１８８】
セーフティドライバ３００は、セーフティ指令にモーションセーフティ機能３６０の有効／無効設定が含まれていない場合（Ｓ３２４でＮＯ）、本処理を終了する。
【０１８９】
一方、セーフティドライバ３００は、セーフティ指令にモーションセーフティ機能３６０の有効／無効設定が含まれている場合（Ｓ３２４でＹＥＳ）、セーフティ指令に含まれる指定情報に従って、特定のモーションセーフティ機能３６０の有効／無効設定を行う（Ｓ３２６）。たとえば、図１１に示したように、セーフティドライバ３００は、ＳＳ２およびＳＯＳを無効化し、かつＳＤＩｐを有効化する旨の指定情報を含むセーフティ指令を受信した場合、セーフティステータス７０の指定情報においても、ＳＳ２およびＳＯＳを無効化し、かつＳＤＩｐを有効化する。その後、セーフティドライバ３００は、本処理を終了する。
【０１９０】
このように、セーフティドライバ３００は、論理コネクション４が確立した後に受信したセーフティ指令に従ってモーションセーフティ機能３６０の有効／無効設定を行う。これにより、ユーザは、セーフティ指令によって、特定のモーションセーフティ機能３６０の有効または無効をデフォルト状態から変更することができる。
【０１９１】
＜Ｋ．変形例＞
図１３に示すセーフティ機能の有効／無効設定をするためのユーザインターフェース６０１においては、セーフティドライバ３００が実装していないモーションセーフティ機能３６０（この例では、ＳＳＲ）についても、サポート装置５００は、フラグ欄６２４のチェックボックスにおいてチェックを付けたり外したりすることを受け付けたが、これに限らない。たとえば、サポート装置５００は、セーフティドライバ３００が実装していないモーションセーフティ機能３６０については、フラグ欄６２４のチェックボックスにおいてチェックを付けたり外したりすることを受け付けないものであってもよい。より具体的には、サポート装置５００は、セーフティドライバ３００が実装していないモーションセーフティ機能３６０については、フラグ欄６２４のチェックボックスを表示しないものであってもよいし、表示しても非動作状態にしてもよい。
【０１９２】
図１３に示すセーフティ機能の有効／無効設定をするためのユーザインターフェース６０１においては、サポート装置５００は、セーフティドライバ３００ごとにモーションセーフティ機能３６０の有効／無効設定を受け付けていたが、これに限らない。たとえば、ユーザは、複数のセーフティドライバ３００についてモーションセーフティ機能３６０の有効／無効設定を共通にしたい場合もあり得るため、サポート装置５００は、複数のセーフティドライバ３００についてモーションセーフティ機能３６０の有効／無効設定を共通で受け付けるユーザインターフェースを提供してもよい。また、この場合、サポート装置５００は、複数のセーフティドライバ３００に対して、同じ内容のモーションセーフティ機能３６０の有効／無効設定を含むセーフティプログラム２１０４をまとめて生成してもよく、そして、転送アイコン６８０が選択されたときには複数のセーフティドライバ３００のそれぞれに対して、生成したセーフティプログラム２１０４をまとめて転送してもよい。
【０１９３】
＜Ｌ．付記＞
以上のように、本実施の形態では以下のような開示を含む。
【０１９４】
［構成１］
制御システム（１）であって、
少なくとも１つ以上のセーフティ機能を有するとともにモータ（４００）を駆動するドライブ装置（３００）と、
セーフティプログラム（２１０４）に従って、前記ドライブ装置に対して前記少なくとも１つ以上のセーフティ機能に係る指令を出力するコントローラ（２００）と、
前記セーフティプログラムの開発を支援するサポート装置（５００）とを備え、
前記セーフティプログラムには、前記少なくとも１つ以上のセーフティ機能のうちの特定のセーフティ機能を無効化させるための情報が含まれ、
前記サポート装置は、
前記少なくとも１つ以上のセーフティ機能のそれぞれについてユーザによる有効または無効の指定を受け付ける受付部（５２１６）と、
前記受付部によって受け付けられた前記有効または無効の指定に応じて前記セーフティプログラムを生成する生成部（５２１２）と、
前記生成部によって生成された前記セーフティプログラムを、前記コントローラに転送する転送部（５２１８）とを含む、制御システム（１）。
【０１９５】
［構成２］
前記サポート装置は、前記少なくとも１つ以上のセーフティ機能のそれぞれについて前記有効または無効の指定を前記受付部によって受け付けるためのユーザインターフェース（６０１）を提供する、構成１の制御システム。
【０１９６】
［構成３］
前記サポート装置は、複数の前記ドライブ装置のうちから選択された特定の前記ドライブ装置について、前記少なくとも１つ以上のセーフティ機能のそれぞれについて前記有効または無効の指定を前記受付部によって受け付けるためのユーザインターフェース（６０１）を提供する、構成１または構成２の制御システム。
【０１９７】
［構成４］
前記サポート装置は、前記少なくとも１つ以上のセーフティ機能のうちの前記特定のセーフティ機能の無効が指定されたことに応答して、当該特定のセーフティ機能に係る前記セーフティプログラムで参照される変数の使用を禁止する、構成１〜構成３のいずれかの制御システム。
【０１９８】
［構成５］
前記サポート装置は、前記変数の使用の禁止を通知する、構成４の制御システム。
【０１９９】
［構成６］
前記生成部によって生成された前記セーフティプログラムは、ユーザによって編集不可能である、構成１〜構成５のいずれかの制御システム。
【０２００】
［構成７］
モータ（４００）を駆動するドライブ装置（３００）を制御するコントローラ（２００）で実行される少なくとも１つ以上のセーフティ機能に係るセーフティプログラム（２１０４）の開発を支援するサポート装置（５００）であって、
前記セーフティプログラムには、前記少なくとも１つ以上のセーフティ機能のうちの特定のセーフティ機能を無効化させるための情報が含まれ、
前記少なくとも１つ以上のセーフティ機能のそれぞれについてユーザによる有効または無効の指定を受け付ける受付部（５２１６）と、
前記受付部によって受け付けられた前記有効または無効の指定に応じて前記セーフティプログラムを生成する生成部（５２１２）と、
前記生成部によって生成された前記セーフティプログラムを、前記コントローラに転送する転送部（５２１８）とを備える、サポート装置（５００）。
【０２０１】
［構成８］
モータ（４００）を駆動するドライブ装置（３００）を制御するコントローラ（２００）で実行される少なくとも１つ以上のセーフティ機能に係るセーフティプログラム（２１０４）の開発を支援するサポートプログラム（５１０４）であって、
前記少なくとも１つ以上のセーフティ機能のうちの特定のセーフティ機能を無効化させるための情報を含み、
前記サポートプログラムは、コンピュータに、
前記少なくとも１つ以上のセーフティ機能のそれぞれについてユーザによる有効または無効の指定を受け付けるステップ（Ｓ５０６）と、
受け付けられた前記有効または無効の指定に応じて前記セーフティプログラムを生成するステップ（Ｓ５１０）と、
生成された前記セーフティプログラムを、前記コントローラに転送するステップ（Ｓ５１２）とを実行させる、サポートプログラム（５１０４）。
【０２０２】
＜Ｍ．利点＞
本実施の形態に係る制御システム１によれば、サポート装置５００に対して特定のモーションセーフティ機能３６０について有効または無効をユーザが指定することで、当該有効または無効の指定に応じてセーフティプログラム２１０４が生成されてセーフティコントローラ２００に転送される。これにより、ユーザは、特定のモーションセーフティ機能３６０について有効または無効を指定するためのセーフティプログラム２１０４を、ソースコードを記述することなく生成することができるため、モーションセーフティ機能３６０における有効または無効の設定を容易にすることができる。
【０２０３】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は、上記した説明ではなく、特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【符号の説明】
【０２０４】
１  制御システム、２  フィールドネットワーク、４  論理コネクション、７０  セーフティステータス、９０  無効設定支援プログラム、１００  標準コントローラ、１０２，２０２，３１２，３１４，５０２  プロセッサ、１０４，２０４，３１６，５０４  メインメモリ、１０６  上位ネットワークコントローラ、１０８，２０８，３０２  フィールドネットワークコントローラ、１１０，２１０，３２０，５１０  ストレージ、１１２  メモリカードインターフェース、１１４  メモリカード、１１６  ローカルバスコントローラ、１１８，２１８，５１８  プロセッサバス、１２０，２２０，５２０  ＵＳＢコントローラ、１５０  標準制御、１７０，２７０，３７０  データ通信レイヤ、１７２，２７２  管理モジュール、１７４，２７４，３７４  プロセスデータ、２００  セーフティコントローラ、２１６  セーフティローカルバスコントローラ、２３０  セーフティＩＯユニット、２４０  セーフティデバイス、２５０  セーフティ機能、２７６，３７６  論理コネクションレイヤ、２７７  確立モジュール、２７８  セーフティ機能状態管理エンジン、３００  セーフティドライバ、３１０  制御部、３３０  ドライブ回路、３３２  フィードバック受信回路、３５０  サーボ制御、３５２  サーボ制御実行エンジン、３６０  モーションセーフティ機能、３６２  モーションセーフティ機能実行エンジン、３７８  モーションセーフティ機能状態管理エンジン、４００  サーボモータ、４０２  三相交流モータ、４０４  エンコーダ、５００  サポート装置、５０６  入力部、５０８  出力部、５１２  光学ドライブ、５１４  記録媒体、６００  通信フレーム、６０１，６０２，６０３  ユーザインターフェース、６１０  マルチビューエクスプローラ欄、６１２  切替スイッチ、６１４  設定スイッチ、６１６  無効設定アイコン、６１８  Ｉ／Ｏマップアイコン、６２０，６５０  画面、６２２  番号欄、６２４  フラグ欄、６３０  セーフティ通信フレーム、６５２  ポート欄、６５４  変数欄、６５６  変数コメント欄、６７０  アウトプットウィンドウ、６８０  転送アイコン、７００  コントロールワード、７０２  ビット欄、７０４  名称欄、７０６  説明欄、１１０２，２１０２  システムプログラム、１１０４  標準制御プログラム、１１０６，２１０６，３２０６  設定情報、２１０４  セーフティプログラム、３２０２  サーボ制御プログラム、３２０４  モーションセーフティプログラム、５１０４  サポートプログラム、５１０６  プロジェクトデータ、５１０８  標準制御ソースプログラム、５１１０  標準コントローラ設定情報、５１１２，５１１７  セーフティソースプログラム、５１１４  セーフティコントローラ設定情報、５１１６  セーフティドライバ設定情報、５２１２  生成部、５２１６  受付部、５２１８  転送部。
【図１】
2020086832.tif 000003
【図２】
2020086832.tif 000004
【図３】
2020086832.tif 000005
【図４】
2020086832.tif 000006
【図５】
2020086832.tif 000007
【図６】
2020086832.tif 000008
【図７】
2020086832.tif 000009
【図８】
2020086832.tif 000010
【図９】
2020086832.tif 000011
【図１０】
2020086832.tif 000012
【図１１】
2020086832.tif 000013
【図１２】
2020086832.tif 000014
【図１３】
2020086832.tif 000015
【図１４】
2020086832.tif 000016
【図１５】
2020086832.tif 000017
【図１６】
2020086832.tif 000018
【図１７】
2020086832.tif 000019