(57)【要約】【課題】ユーザのプログラミングにおける利便性を向上させる制御システムを提供する。【解決手段】サポート装置１５００は、少なくとも１つ以上の命令情報を組み合わせることでプログラムを生成するための開発環境をユーザに提供し、コントローラ１２００に対して少なくとも１つ以上の制御対象１３００を関連付ける関連付け部５１１１と、関連付け部５１１１によってコントローラ１２００に対して少なくとも１つ以上の制御対象１３００が関連付けられた場合に、当該少なくとも１つ以上の制御対象１３００のそれぞれが有する機能に対応する少なくとも１つ以上の命令情報を特定してユーザに利用可能とさせる特定部５１１２とを含む。【選択図】図１
2020057152.tif 000002
【特許請求の範囲】
【請求項１】
制御システムであって、
少なくとも１つ以上の制御対象と、
前記少なくとも１つ以上の制御対象を制御するコントローラと、
前記少なくとも１つ以上の制御対象を制御するために前記コントローラで実行されるプログラムの開発を支援するサポート装置とを備え、
前記少なくとも１つ以上の制御対象のそれぞれは、当該制御対象に対応する機能を有し、
前記少なくとも１つ以上の制御対象のそれぞれが有する機能は、当該各機能に対応する少なくとも１つ以上の命令情報に従って実行され、
前記サポート装置は、
前記少なくとも１つ以上の命令情報を組み合わせることで前記プログラムを生成するための開発環境をユーザに提供し、
前記コントローラに対して前記少なくとも１つ以上の制御対象を関連付ける関連付け部と、
前記関連付け部によって前記コントローラに対して前記少なくとも１つ以上の制御対象が関連付けられた場合に、当該少なくとも１つ以上の制御対象のそれぞれが有する機能に対応する前記少なくとも１つ以上の命令情報を特定してユーザに利用可能とさせる特定部とを含む、制御システム。
【請求項２】
前記少なくとも１つ以上の命令情報は、ユーザが設定値を入力することでプログラミング可能なファンクションブロックで規定される、請求項１に記載の制御システム。
【請求項３】
前記コントローラは、前記制御システムにおける安全を管理するセーフティコントローラであり、
前記少なくとも１つ以上の制御対象は、前記セーフティコントローラからの指令に従って所定のセーフティ機能を実行するセーフティスレーブである、請求項１または請求項２に記載の制御システム。
【請求項４】
前記制御システムは、モータを制御する標準コントローラを備え、
前記セーフティスレーブは、前記標準コントローラからの指令に従って前記モータを動作させる一方で、前記セーフティコントローラからの指令に従って前記所定のセーフティ機能を実行するセーフティドライバである、請求項３に記載の制御システム。
【請求項５】
前記少なくとも１つ以上の命令情報は、安全に関する認証を受けている、請求項３または請求項４に記載の制御システム。
【請求項６】
前記特定部は、前記関連付け部によって前記コントローラに関連付けられた前記少なくとも１つ以上の制御対象が有する固有の識別情報を手掛かりに、当該少なくとも１つ以上の制御対象のそれぞれが有する機能に対応する前記少なくとも１つ以上の命令情報を特定する、請求項１〜請求項５のいずれか１項に記載の制御システム。
【請求項７】
前記特定部は、前記関連付け部によって前記コントローラに関連付けられた前記少なくとも１つ以上の制御対象のそれぞれが有する機能に対応する少なくとも１つ以上の前記ファンクションブロックと同じ名前のファンクションブロックが既にユーザに利用可能とされている場合、所定の条件が成立したときに、当該少なくとも１つ以上のファンクションブロックをユーザに利用可能とさせる、請求項２〜請求項６のいずれか１項に記載の制御システム。
【請求項８】
前記所定の条件は、利用対象である前記少なくとも１つ以上のファンクションブロックと、既にユーザに利用可能とされているファンクションブロックとで、巡回冗長検査用のデータが一致しないときに成立する、請求項７に記載の制御システム。
【請求項９】
前記所定の条件は、利用対象である前記少なくとも１つ以上のファンクションブロックと、既にユーザに利用可能とされているファンクションブロックとで、作成者が同じであり、かつ、利用対象である前記少なくとも１つ以上のファンクションブロックが、既にユーザに利用可能とされているファンクションブロックよりも、バージョンまたは更新日時が新しいときに成立する、請求項８に記載の制御システム。
【請求項１０】
少なくとも１つ以上の制御対象を制御するためにコントローラで実行されるプログラムの開発を支援するサポート装置であって、
前記少なくとも１つ以上の制御対象のそれぞれは、当該制御対象に対応する機能を有し、
前記少なくとも１つ以上の制御対象のそれぞれが有する機能は、当該各機能に対応する少なくとも１つ以上の命令情報に従って実行され、
前記サポート装置は、
前記少なくとも１つ以上の命令情報を組み合わせることで前記プログラムを生成するための開発環境をユーザに提供し、
前記コントローラに対して前記少なくとも１つ以上の制御対象を関連付ける関連付け部と、
前記関連付け部によって前記コントローラに対して前記少なくとも１つ以上の制御対象が関連付けられた場合に、当該少なくとも１つ以上の制御対象のそれぞれが有する機能に対応する前記少なくとも１つ以上の命令情報を特定してユーザに利用可能とさせる特定部とを備える、サポート装置。
【請求項１１】
少なくとも１つ以上の制御対象を制御するためにコントローラで実行されるプログラムの開発を支援するサポートプログラムであって、
前記少なくとも１つ以上の制御対象のそれぞれは、当該制御対象に対応する機能を有し、
前記少なくとも１つ以上の制御対象のそれぞれが有する機能は、当該各機能に対応する少なくとも１つ以上の命令情報に従って実行され、
前記サポートプログラムは、前記少なくとも１つ以上の命令情報を組み合わせることで前記プログラムを生成するための開発環境をユーザに提供し、
前記サポートプログラムは、コンピュータに、
前記コントローラに対して前記少なくとも１つ以上の制御対象を関連付けるステップと、
前記コントローラに対して前記少なくとも１つ以上の制御対象が関連付けられた場合に、当該少なくとも１つ以上の制御対象のそれぞれが有する機能に対応する前記少なくとも１つ以上の命令情報を特定してユーザに利用可能とさせるステップとを実行させる、サポートプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、制御システム、ならびに、制御システムに用いられるサポート装置およびサポートプログラムに関する。
【背景技術】
【０００２】
近年、様々な生産現場において、生産工程を自動化するＦＡ（Factory  Automation）システムのような制御システムが普及している。制御システムにおいては、製造装置や製造設備などのＦＡ機器が、ＰＬＣ（Programmable Logic Controller）やロボットコントローラなどの産業用のコントローラによって制御される。
【０００３】
このような制御システムとして、コントローラがプログラムを実行することで制御対象を制御するように構成されたものがある。
【０００４】
たとえば、特開２０１６−８４１７６号公報（特許文献１）においては、コントローラがライブラリプログラムを実行することで、ロータを回転駆動するドライバを制御するように構成されたシステムが開示されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１６−８４１７６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
特許文献１においては、コントローラによって実行されるライブラリプログラムの開発について特に開示されておらず、プログラム開発におけるユーザのさらなる利便性が要求される。
【０００７】
本発明は、上述したような課題を解決することを一つの目的とし、ユーザのプログラミングにおける利便性を向上させる制御システムを提供する。
【課題を解決するための手段】
【０００８】
本開示の一例に従えば、制御システムが提供される。制御システムは、少なくとも１つ以上の制御対象と、少なくとも１つ以上の制御対象を制御するコントローラと、少なくとも１つ以上の制御対象を制御するためにコントローラで実行されるプログラムの開発を支援するサポート装置とを備える。少なくとも１つ以上の制御対象のそれぞれは、当該制御対象に対応する機能を有する。少なくとも１つ以上の制御対象のそれぞれが有する機能は、当該各機能に対応する少なくとも１つ以上の命令情報に従って実行される。サポート装置は、少なくとも１つ以上の命令情報を組み合わせることでプログラムを生成するための開発環境をユーザに提供し、コントローラに対して少なくとも１つ以上の制御対象を関連付ける関連付け部と、関連付け部によってコントローラに対して少なくとも１つ以上の制御対象が関連付けられた場合に、当該少なくとも１つ以上の制御対象のそれぞれが有する機能に対応する少なくとも１つ以上の命令情報を特定してユーザに利用可能とさせる特定部とを含む。
【０００９】
この開示によれば、サポート装置を用いたユーザによるプログラムの開発時において、ユーザは、コントローラに対して少なくとも１つ以上の制御対象を関連付けることができ、コントローラに対して少なくとも１つ以上の制御対象を関連付けた場合に、当該少なくとも１つ以上の制御対象のそれぞれが有する機能に対応する少なくとも１つ以上の命令情報を利用することができる。これにより、ユーザは、コントローラに対して関連付けた制御対象が有する機能に対応する命令情報を自分で特定する必要がなく、ユーザのプログラミングにおける利便性を向上させることができる。また、コントローラにおいてプログラムが予め組み込まれているような形態ではなく、サポート装置を用いてユーザが生成したプログラムをコントローラで実行するような形態であるため、ソフトウェアのバージョンアップを行う際にコントローラ自体をバージョンアップする必要がなく、サポート装置でプログラム開発時に用いられるソフトウェアをバージョンアップすることで事足りるため、バージョンアップに掛ける費用を極力抑えることができる。
【００１０】
上述の開示において、少なくとも１つ以上の命令情報は、ユーザが設定値を入力することでプログラミング可能なファンクションブロックで規定される。
【００１１】
この開示によれば、ユーザは、ファンクションブロックに対して設定値を入力することでプログラミング可能である。そして、ユーザは、コントローラに対して少なくとも１つ以上の制御対象を関連付けた場合に、当該少なくとも１つ以上の制御対象のそれぞれが有する機能に対応する少なくとも１つ以上のファンクションブロックを利用することができる。これにより、ユーザは、コントローラに対して関連付けた制御対象が有する機能に対応するファンクションブロックを自分で特定する必要がなく、ユーザのプログラミングにおける利便性を向上させることができる。
【００１２】
上述の開示において、コントローラは、制御システムにおける安全を管理するセーフティコントローラである。少なくとも１つ以上の制御対象は、セーフティコントローラからの指令に従って所定のセーフティ機能を実行するセーフティスレーブである。
【００１３】
この開示によれば、制御システムにおける安全を管理するセーフティコントローラで実行されるプログラムの開発において、ユーザのプログラミングにおける利便性を向上させることができる。
【００１４】
上述の開示において、制御システムは、モータを制御する標準コントローラを備える。セーフティスレーブは、標準コントローラからの指令に従ってモータを動作させる一方で、セーフティコントローラからの指令に従って所定のセーフティ機能を実行するセーフティドライバである。
【００１５】
この開示によれば、標準コントローラからの指令に従ってモータを動作させるセーフティドライバに対して指令を送るセーフティコントローラについても、プログラムの開発において、ユーザのプログラミングにおける利便性を向上させることができる。
【００１６】
上述の開示において、少なくとも１つ以上の命令情報は、安全に関する認証を受けている。
【００１７】
この開示によれば、制御システムにおける安全を管理するセーフティコントローラで実行されるプログラムの安全性を担保することができる。
【００１８】
上述の開示において、特定部は、関連付け部によってコントローラに関連付けられた少なくとも１つ以上の制御対象が有する固有の識別情報を手掛かりに、当該少なくとも１つ以上の制御対象のそれぞれが有する機能に対応する少なくとも１つ以上の命令情報を特定する。
【００１９】
この開示によれば、制御対象が有する固有の識別情報を手掛かりに、より確実に、コントローラに関連付けられた制御対象が有する機能に対応する命令情報をユーザに利用可能とさせることができる。
【００２０】
上述の開示において、特定部は、関連付け部によってコントローラに関連付けられた少なくとも１つ以上の制御対象のそれぞれが有する機能に対応する少なくとも１つ以上のファンクションブロックと同じ名前のファンクションブロックが既にユーザに利用可能とされている場合、所定の条件が成立したときに、当該少なくとも１つ以上のファンクションブロックをユーザに利用可能とさせる。
【００２１】
この開示によれば、利用対象であるファンクションブロックと同じ名前のファンクションブロックが既にユーザに利用可能とされている場合であっても、適切にファンクションブロックをユーザに利用可能とさせることができる。
【００２２】
上述の開示において、所定の条件は、利用対象である少なくとも１つ以上のファンクションブロックと、既にユーザに利用可能とされているファンクションブロックとで、巡回冗長検査用のデータが一致しないときに成立する。
【００２３】
この開示によれば、利用対象であるファンクションブロックと同じ名前のファンクションブロックが既にユーザに利用可能とされている場合であっても、巡回冗長検査用のデータの整合性に基づき、適切にファンクションブロックをユーザに利用可能とさせることができる。
【００２４】
上述の開示において、所定の条件は、利用対象である少なくとも１つ以上のファンクションブロックと、既にユーザに利用可能とされているファンクションブロックとで、作成者が同じであり、かつ、利用対象である少なくとも１つ以上のファンクションブロックが、既にユーザに利用可能とされているファンクションブロックよりも、バージョンまたは更新日時が新しいときに成立する。
【００２５】
この開示によれば、利用対象であるファンクションブロックと同じ名前のファンクションブロックが既にユーザに利用可能とされている場合であっても、両者の作成者、バージョン、および更新日時を考慮して、適切にファンクションブロックをユーザに利用可能とさせることができる。
【００２６】
本開示の別の一例に従えば、少なくとも１つ以上の制御対象を制御するためにコントローラで実行されるプログラムの開発を支援するサポート装置が提供される。少なくとも１つ以上の制御対象のそれぞれは、当該制御対象に対応する機能を有する。少なくとも１つ以上の制御対象のそれぞれが有する機能は、当該各機能に対応する少なくとも１つ以上の命令情報に従って実行される。サポート装置は、少なくとも１つ以上の命令情報を組み合わせることでプログラムを生成するための開発環境をユーザに提供し、コントローラに対して少なくとも１つ以上の制御対象を関連付ける関連付け部と、関連付け部によってコントローラに対して少なくとも１つ以上の制御対象が関連付けられた場合に、当該少なくとも１つ以上の制御対象のそれぞれが有する機能に対応する少なくとも１つ以上の命令情報を特定してユーザに利用可能とさせる特定部とを備える。
【００２７】
この開示によれば、サポート装置を用いたユーザによるプログラムの開発時において、ユーザは、コントローラに対して少なくとも１つ以上の制御対象を関連付けることができ、コントローラに対して少なくとも１つ以上の制御対象を関連付けた場合に、当該少なくとも１つ以上の制御対象のそれぞれが有する機能に対応する少なくとも１つ以上の命令情報を利用することができる。これにより、ユーザは、コントローラに対して関連付けた制御対象が有する機能に対応する命令情報を自分で特定する必要がなく、ユーザのプログラミングにおける利便性を向上させることができる。また、コントローラにおいてプログラムが予め組み込まれているような形態ではなく、サポート装置を用いてユーザが生成したプログラムをコントローラで実行するような形態であるため、ソフトウェアのバージョンアップを行う際にコントローラ自体をバージョンアップする必要がなく、サポート装置でプログラム開発時に用いられるソフトウェアをバージョンアップすることで事足りるため、バージョンアップに掛ける費用を極力抑えることができる。
【００２８】
本開示の別の一例に従えば、少なくとも１つ以上の制御対象を制御するためにコントローラで実行されるプログラムの開発を支援するサポートプログラムが提供される。少なくとも１つ以上の制御対象のそれぞれは、当該制御対象に対応する機能を有する。少なくとも１つ以上の制御対象のそれぞれが有する機能は、当該各機能に対応する少なくとも１つ以上の命令情報に従って実行される。サポートプログラムは、少なくとも１つ以上の命令情報を組み合わせることでプログラムを生成するための開発環境をユーザに提供する。サポートプログラムは、コンピュータに、コントローラに対して少なくとも１つ以上の制御対象を関連付けるステップと、コントローラに対して少なくとも１つ以上の制御対象が関連付けられた場合に、当該少なくとも１つ以上の制御対象のそれぞれが有する機能に対応する少なくとも１つ以上の命令情報を特定してユーザに利用可能とさせるステップとを実行させる。
【００２９】
この開示によれば、サポート装置を用いたユーザによるプログラムの開発時において、ユーザは、コントローラに対して少なくとも１つ以上の制御対象を関連付けることができ、コントローラに対して少なくとも１つ以上の制御対象を関連付けた場合に、当該少なくとも１つ以上の制御対象のそれぞれが有する機能に対応する少なくとも１つ以上の命令情報を利用することができる。これにより、ユーザは、コントローラに対して関連付けた制御対象が有する機能に対応する命令情報を自分で特定する必要がなく、ユーザのプログラミングにおける利便性を向上させることができる。また、コントローラにおいてプログラムが予め組み込まれているような形態ではなく、サポート装置を用いてユーザが生成したプログラムをコントローラで実行するような形態であるため、ソフトウェアのバージョンアップを行う際にコントローラ自体をバージョンアップする必要がなく、サポート装置でプログラム開発時に用いられるソフトウェアをバージョンアップすることで事足りるため、バージョンアップに掛ける費用を極力抑えることができる。
【図面の簡単な説明】
【００３０】
【図１】本実施の形態に係る制御システムの適用例を示す模式図である。
【図２】本実施の形態に係る制御システムの構成例を示す模式図である。
【図３】本実施の形態に係る制御システムを構成する標準コントローラのハードウェア構成例を示す模式図である。
【図４】本実施の形態に係る制御システムを構成するセーフティコントローラのハードウェア構成例を示す模式図である。
【図５】本実施の形態に係る制御システムを構成するセーフティドライバおよびサーボモータのハードウェア構成例を示す模式図である。
【図６】本実施の形態に係る制御システムを構成するサポート装置のハードウェア構成例を示す模式図である。
【図７】本実施の形態に係るサポート装置が保持するネットワーク構成情報を説明するための模式図である。
【図８】本実施の形態に係るサポート装置が保持する対応データを説明するための模式図である。
【図９】本実施の形態に係る制御システムの機能分担の一例を示す模式図である。
【図１０】本実施の形態に係る制御システムのセーフティドライバによるセーフティ機能に係る処理手順の一例を示すシーケンス図である。
【図１１】本実施の形態に係る制御システムが提供するモーションセーフティ機能の一例を示す図である。
【図１２】本実施の形態に係るサポート装置が実行する自動インポート処理を説明するためのフローチャートである。
【図１３】本実施の形態に係るサポート装置が提供するセーフティコントローラにセーフティドライバを関連付けるためのユーザインターフェイスの一例を示す図である。
【図１４】本実施の形態に係るサポート装置が提供するセーフティコントローラにセーフティドライバを関連付けるためのユーザインターフェイスの一例を示す図である。
【図１５】本実施の形態に係るサポート装置が提供する標準制御プログラム開発からセーフティプログラム開発へと切り替えるためのユーザインターフェイスの一例を示す図である。
【図１６】本実施の形態に係るサポート装置が提供するセーフティプログラムを開発するためのユーザインターフェイスの一例を示す図である。
【図１７】本実施の形態に係るサポート装置が提供するセーフティプログラムを開発するためのユーザインターフェイスの一例を示す図である。
【図１８】変形例に係るサポート装置が実行する自動インポート処理を説明するためのフローチャートである。
【図１９】変形例に係る制御システムの適用例を示す模式図である。
【発明を実施するための形態】
【００３１】
本発明の実施の形態について、図面を参照しながら詳細に説明する。なお、図中の同一または相当部分については、同一符号を付してその説明は繰返さない。
【００３２】
＜Ａ．適用例＞
まず、本発明が適用される場面の一例について説明する。
【００３３】
図１は、本実施の形態に係る制御システム１０００の適用例を示す模式図である。図１を参照して、本実施の形態に係る制御システム１０００は、主として、コントローラ１２００、ならびに、コントローラ１２００とフィールドネットワーク１００２を介して接続される１または複数の制御対象１３００（１３００ａ，１３００ｂ，１３００ｃ）を含む。制御対象１３００の各々には、１または複数の駆動部１４００（１４００ａ，１４０ｂ，１４００ｃ）が電気的に接続されている。
【００３４】
コントローラ１２００は、プログラムに従って、制御対象１３００に対する制御を実行する。典型的には、コントローラ１２００は、１または複数のセンサ（図示していない）などからの入力信号に応じた制御演算をサイクリック実行することで、制御対象１３００に対する指令を周期的に算出する。コントローラ１２００で実行されるプログラムは、コントローラ１２００と通信可能に接続されたサポート装置１５００が提供する開発環境を利用して、ユーザによって予め作成され、コントローラ１２００に転送される。
【００３５】
制御対象１３００は、コントローラ１２００からの指令に従って、駆動部１４００を駆動する。
【００３６】
サポート装置１５００は、コントローラ１２００で実行されるプログラムの開発を支援する。たとえば、サポート装置１５００は、少なくとも１つ以上の命令情報を組み合わせることでプログラムを生成するための開発環境（プログラム作成編集ツール、パーサ、コンパイラなど）をユーザに提供する。
【００３７】
本実施の形態においては、命令情報がファンクションブロックとして規定されており、プログラムを生成するための各種ファンクションブロック（ユーザ定義ファンクションブロック）がサポート装置１５００にインポートされる。ユーザは、サポート装置１５００にインポートされたファンクションブロックに対して設定値を入力することができ、設定値を入力したファンクションブロック（命令情報）を組み合わせることで、プログラムに係るプログラミングが可能である。
【００３８】
プログラムにおけるファンクションブロックは、コントローラ１２００に関連付けられた制御対象１３００が有する機能に対応している。具体的には、ユーザは、コントローラ１２００に対して、少なくとも１以上の制御対象１３００を通信可能に接続させることが可能であり、各制御対象１３００は、実行可能な機能が予め定められている。そして、各機能に対応するように、ファンクションブロック（命令情報）が予め設けられている。コントローラ１２００に対して少なくとも１以上の制御対象１３００が接続されると、接続された制御対象１３００が有する機能に対応するファンクションブロックが、サポート装置１５００にインポートされ、ユーザによって利用可能とされる。
【００３９】
具体的には、サポート装置１５００は、ネットワーク構成情報５２３１を保持する。ネットワーク構成情報５２３１には、制御システム１０００において接続されている構成を特定するための情報が格納されている。たとえば、更新前のネットワーク構成情報５２３１ａには、制御システム１０００として、コントローラ１２００と、当該コントローラ１２００に接続された制御対象１３００ａおよび制御対象１３００ｂとで、ネットワークが構成されている旨の情報が格納されている。
【００４０】
サポート装置１５００は、コントローラ１２００に対して少なくとも１つ以上の制御対象１３００を関連付ける関連付け部５１１１を有する。たとえば、関連付け部５１１１は、コントローラ１２００に対して新たに制御対象１３００ｃが接続された場合、ネットワーク構成情報５２３１ａを更新してネットワーク構成情報５２３１ｂを生成する。更新後のネットワーク構成情報５２３１ｂには、制御システム１０００の構成について、コントローラ１２００と、当該コントローラ１２００に接続された制御対象１３００ａ、制御対象１３００ｂ、および制御対象１３００ｃとで、ネットワークが構成されている旨の情報が格納されている。このようにして、コントローラ１２００に対して新たに制御対象１３００ｃが関連付けられる。
【００４１】
また、サポート装置１５００は、対応データ５２０５を保持する。対応データ５２０５には、コントローラ１２００によって実行可能な各機能に対応する命令情報を特定するための情報が格納されている。対応データ５２０５における各機能は、制御対象１３００ごとに有されるか否かが予め決められている。たとえば、制御対象１３００ａは機能１および機能２を有し、制御対象１３００ｂは機能１および機能３を有し、制御対象１３００ｃは機能３および機能４を有する。
【００４２】
ネットワーク構成情報５２３１の更新前においては、ネットワーク構成情報５２３１ａに示すように、制御対象１３００として、制御対象１３００ａおよび制御対象１３００ｂがコントローラ１２００に関連付けられている。この場合、ユーザは、制御対象１３００ａについては、機能１に対応する命令情報１、および機能２に対応する命令情報２を利用してプログラミング可能である。また、ユーザは、制御対象１３００ｂについては、機能１に対応する命令情報１、および機能３に対応する命令情報３を利用してプログラミング可能である。
【００４３】
一方、ネットワーク構成情報５２３１の更新後においては、ネットワーク構成情報５２３１ｂに示すように、新たに制御対象１３００ｃがコントローラ１２００に関連付けられている。ここで、ユーザ自身が、数ある命令情報の中から、新たにコントローラ１２００に関連付けられた制御対象１３００ｃが有する機能３および機能４のそれぞれに対応する命令情報を探し出して特定することは利便性に乏しい。そこで、本実施の形態に係る制御システム１０００において、サポート装置１５００は、少なくとも１つ以上の制御対象１３００のそれぞれが有する機能に対応する少なくとも１つ以上の命令情報を特定してユーザに利用可能とさせる特定部５１１２を有する。
【００４４】
サポート装置１５００は、ネットワーク構成情報５２３１ｂに示すように、新たに制御対象１３００ｃがコントローラ１２００に関連付けられた場合、特定部５１１２によって、制御対象１３００ｃが有する機能３に対応する命令情報３および機能４に対応する命令情報４を特定し、プログラム開発のプロジェクトにインポートすることで、命令情報３および命令情報４を、ユーザに利用可能とさせる。これにより、ユーザは、制御対象１３００ｃについて、機能３に対応する命令情報３、および機能４に対応する命令情報４を利用してプログラミング可能となる。
【００４５】
このように、サポート装置１５００を用いたユーザによるプログラムの開発時において、ユーザは、コントローラ１２００に対して少なくとも１つ以上の制御対象１３００を関連付けることができ、コントローラ１２００に対して少なくとも１つ以上の制御対象１３００を関連付けた場合に、当該少なくとも１つ以上の制御対象１３００のそれぞれが有する機能に対応する少なくとも１つ以上の命令情報を利用することができる。これにより、ユーザは、コントローラ１２００に対して関連付けた制御対象１３００が有する機能に対応する命令情報を自分で特定する必要がなく、ユーザのプログラミングにおける利便性を向上させることができる。また、コントローラ１２００においてプログラムが予め組み込まれているような形態ではなく、サポート装置１５００を用いてユーザが生成したプログラムをコントローラ１２００で実行するような形態であるため、ソフトウェアのバージョンアップを行う際にコントローラ１２００自体をバージョンアップする必要がなく、サポート装置１５００でプログラム開発時に用いられるソフトウェアをバージョンアップすることで事足りるため、バージョンアップに掛ける費用を極力抑えることができる。
【００４６】
なお、上述した「コントローラ」は、後述するように、モータを制御する標準コントローラ１００、および制御システム１における安全を管理するセーフティコントローラ２００のいずれも含む。また、上述した「制御対象」は、セーフティ機能を有する任意のセーフティスレーブ、およびセーフティ機能を有さない任意のスレーブを含む。たとえば、「コントローラ」として標準コントローラ１００を適用させた場合、後述する図１８に示すように、「制御対象」は、ロードセル入力ユニット、温度調整ユニット、および位置インターフェイスユニットなど、任意のセンサやアクチュエータに指令を送るセーフティ機能を有さない任意のスレーブ（制御対象２３００）であってもよい。また、たとえば、「コントローラ」としてセーフティコントローラ２００を適用させた場合、後述する図２に示すように、「制御対象」は、サーボモータ４００などのモータに指令を送る一方で所定のセーフティ機能を実行するセーフティドライバ３００であってもよいし、セーフティ機能を有するロボットやライトカーテンなどのセーフティデバイス２４０であってもよい。
【００４７】
＜Ｂ．制御システム１の構成例＞
上述した適用例に係る制御システム１０００を具体化した例として、制御システム１を例示しながら説明する。
【００４８】
図２は、本実施の形態に係る制御システム１の構成例を示す模式図である。本実施の形態に係る制御システム１は、たとえば、ＩＥＣ  ６１５０８などに規定されたセーフティ機能に加えて、非特許文献（"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）、ＳＢＣ（Safe Brake Control）などの、ドライブ装置に関連するいくつかのセーフティ機能を提供する。
【００４９】
図２を参照して、制御システム１は、主として、標準コントローラ１００、ならびに、標準コントローラ１００とフィールドネットワーク２を介して接続されるセーフティコントローラ２００、および１または複数のセーフティドライバ（セーフティサーボドライバ）３００を含む。セーフティドライバ３００の各々は、セーフティスレーブの一例であり、電気的に接続されたサーボモータ４００を駆動する。なお、サーボモータ４００に限らず、任意の種類のモータを採用できる。また、セーフティドライバ３００の実体は、サーボドライバであってもよいし、汎用的なインバータ装置であってもよい。
【００５０】
標準コントローラ１００は、後述する標準制御プログラム１１０４に従って、サーボモータ４００に対する標準制御１５０を実行する。典型的には、標準コントローラ１００は、１または複数のセンサ（図示していない）などからの入力信号に応じた制御演算をサイクリック実行することで、サーボモータ４００などのアクチュエータに対する指令を周期的に算出する。標準制御プログラム１１０４は、標準コントローラ１００と通信可能に接続されたサポート装置５００が提供する開発環境を利用して、ユーザによって予め作成され、標準コントローラ１００に転送される。
【００５１】
セーフティコントローラ２００は、セーフティプログラム２１０４に従って、セーフティドライバ３００に対してセーフティ機能２５０の動作に係るセーフティ指令を送信する。より具体的には、セーフティコントローラ２００は、標準コントローラ１００とは独立して、制御対象に対するセーフティ機能２５０を実現するための監視および制御演算をサイクリック実行する。これにより、セーフティコントローラ２００は、制御システム１における安全を管理する。
【００５２】
セーフティコントローラ２００は、任意のセーフティデバイス２４０からの入力信号の受付、および／または、任意のセーフティデバイス２４０への指令の出力が可能になっている。セーフティプログラム２１０４は、セーフティコントローラ２００と通信可能に接続されたサポート装置５００が提供する開発環境を利用して、ユーザによって予め作成され、セーフティコントローラ２００に転送される。
【００５３】
セーフティドライバ３００は、標準コントローラ１００からの指令に従って、サーボモータ４００に電力を供給することで、サーボモータ４００を駆動する。セーフティドライバ３００は、サーボモータ４００からのフィードバック信号などに基づいて、サーボモータ４００の回転位置、回転速度、回転加速度および発生するトルクなどを周期的に算出する。
【００５４】
さらに、セーフティドライバ３００は、セーフティコントローラ２００からの指令に従って、サーボモータ４００の駆動に関する所定のセーフティ機能２５０を実行する。より具体的には、セーフティドライバ３００は、セーフティ機能２５０に必要な状態情報をセーフティコントローラ２００へ提供するとともに、要求されるセーフティ機能２５０に応じて、サーボモータ４００に供給する電力を調整または遮断する。
【００５５】
サーボモータ４００は、セーフティドライバ３００からの電力を受けて回転するモータ（後述する三相交流モータ４０２）を有するとともに、モータの回転軸に結合されたエンコーダ４０４からの検出信号をフィードバック信号としてセーフティドライバ３００へ出力する。
【００５６】
サポート装置５００は、標準コントローラ１００で実行される標準制御プログラム１１０４、およびセーフティコントローラ２００で実行されるセーフティプログラム２１０４の開発を支援する。たとえば、サポート装置５００は、少なくとも１つ以上の命令情報を組み合わせることでプログラムを生成するための開発環境（プログラム作成編集ツール、パーサ、コンパイラなど）をユーザに提供する。
【００５７】
本実施の形態においては、命令情報がファンクションブロックとして規定されており、標準制御プログラム１１０４やセーフティプログラム２１０４を生成するための各種ファンクションブロック（ユーザ定義ファンクションブロック）がサポート装置５００にインポートされる。ユーザは、サポート装置５００にインポートされたファンクションブロックに対して設定値を入力することができ、設定値を入力したファンクションブロック（命令情報）を組み合わせることで、標準制御プログラム１１０４やセーフティプログラム２１０４に係るプログラミングが可能である。
【００５８】
セーフティプログラム２１０４におけるファンクションブロックは、セーフティコントローラ２００に関連付けられたセーフティドライバ３００が有する機能に対応している。具体的には、ユーザは、セーフティコントローラ２００に対して、少なくとも１以上のセーフティドライバ３００を通信可能に接続させることが可能であり、各セーフティドライバ３００は、実行可能なセーフティ機能２５０が予め定められている。そして、各セーフティ機能２５０に対応するように、ファンクションブロック（命令情報）が予め設けられている。セーフティコントローラ２００に対して少なくとも１以上のセーフティドライバ３００が接続されると、接続されたセーフティドライバ３００が有するセーフティ機能２５０に対応するファンクションブロックが、サポート装置５００にインポートされ、ユーザによって利用可能とされる。
【００５９】
このように、サポート装置５００を用いたユーザによるセーフティプログラム２１０４の開発時において、ユーザは、セーフティコントローラ２００に対して少なくとも１つ以上のセーフティドライバ３００を関連付けることができ、セーフティコントローラ２００に対して少なくとも１つ以上のセーフティドライバ３００を関連付けた場合に、当該少なくとも１つ以上のセーフティドライバ３００のそれぞれが有するセーフティ機能２５０に対応する少なくとも１つ以上のファンクションブロックを利用することができる。これにより、ユーザは、セーフティコントローラ２００に対して関連付けたセーフティドライバ３００が有するセーフティ機能２５０に対応するファンクションブロックを自分で特定する必要がなく、ユーザのプログラミングにおける利便性を向上させることができる。また、セーフティコントローラ２００においてセーフティプログラムが予め組み込まれているような形態ではなく、サポート装置５００を用いてユーザが生成したセーフティプログラムをセーフティコントローラ２００で実行するような形態であるため、ソフトウェアのバージョンアップを行う際にセーフティコントローラ２００自体をバージョンアップする必要がなく、サポート装置５００でプログラム開発時に用いられるソフトウェアをバージョンアップすることで事足りるため、バージョンアップに掛ける費用を極力抑えることができる。
【００６０】
本明細書において、「デバイス」は、フィールドネットワーク２などの任意のネットワークを介して、他の装置とデータ通信可能な装置の総称である。本実施の形態に係る制御システム１において、「デバイス」は、標準コントローラ１００、セーフティコントローラ２００、およびセーフティドライバ３００を包含する。
【００６１】
本明細書において、「標準制御」および「セーフティ制御」の用語を対比的に用いる。「標準制御」は、予め定められた要求仕様に沿って、制御対象を制御するための処理の総称である。一方、「セーフティ制御」は、設備や機械などによって人の安全が脅かされることを防止するための処理を総称する。「セーフティ制御」は、ＩＥＣ  ６１５０８などに規定されたセーフティ機能を実現するための要件を満たすように設計される。
【００６２】
本明細書においては、ドライブ装置に特有のセーフティ機能を「モーションセーフティ機能」と総称する。典型的には、「機能」は、上述の非特許文献に規定されるドライブ装置に関連するセーフティ機能を包含する。たとえば、制御軸の位置や速度を監視して安全を確保するための制御を含む。
【００６３】
＜Ｃ．制御システム１に含まれるデバイスの構成例＞
次に制御システム１に含まれるデバイスの構成例について説明する。
【００６４】
（ｃ１：標準コントローラ１００）
図３は、本実施の形態に係る制御システム１を構成する標準コントローラ１００のハードウェア構成例を示す模式図である。図３を参照して、標準コントローラ１００は、プロセッサ１０２と、メインメモリ１０４と、ストレージ１１０と、上位ネットワークコントローラ１０６と、フィールドネットワークコントローラ１０８と、ＵＳＢ（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）などの光学記録媒体）から、その中に格納されたプログラムが読取られてストレージ５１０などにインストールされる。
【０１１１】
サポート装置５００で実行されるサポートプログラム５１０４などは、コンピュータ読取可能な記録媒体５１４を介してインストールされてもよいが、ネットワーク上のサーバ装置などからダウンロードする形でインストールするようにしてもよい。また、本実施の形態に係るサポート装置５００が提供する機能は、ＯＳが提供するモジュールの一部を利用する形で実現される場合もある。
【０１１２】
図６には、プロセッサ５０２がプログラムを実行することで、サポート装置５００として必要な機能が提供される構成例を示したが、これらの提供される機能の一部または全部を、専用のハードウェア回路（たとえば、ＡＳＩＣまたはＦＰＧＡなど）を用いて実装してもよい。
【０１１３】
なお、制御システム１が稼動中において、サポート装置５００は、標準コントローラ１００から取り外されていてもよい。
【０１１４】
＜Ｄ．ネットワーク構成情報５１３１＞
図７は、本実施の形態に係るサポート装置が保持するネットワーク構成情報５１３１を説明するための模式図である。図７を参照して、ネットワーク構成情報５１３１は、制御システム１において接続されている構成を特定するための情報を含む。
【０１１５】
具体的には、本実施の形態に係る制御システム１においては、ＮＯ．０〜１２７までの１２８個の構成がネットワーク接続可能である。この例では、ＮＯ．０には、標準コントローラ１００の型式（型名）である「Ｍａｓｔｅｒ」が対応付けられている。ＮＯ．１には、セーフティコントローラ２００の型式（型名）である「ＮＸ−ＥＣＣ２０３」が対応付けられている。ＮＯ．２には、セーフティドライバ３００の型式（型名）である「Ｒ８８Ｄ−１ＳＡＮ０２Ｈ−ＥＣＴ」が対応付けられている。
【０１１６】
サポート装置５００は、ネットワーク構成情報５１３１に基づき、制御システム１においてネットワーク接続されている構成を把握することができる。
【０１１７】
＜Ｅ．対応データ５１０５＞
図８は、本実施の形態に係るサポート装置が保持する対応データ５１０５を説明するための模式図である。図８を参照して、対応データ５１０５は、セーフティコントローラ２００によって実行可能な各セーフティ機能２５０に対応するファンクションブロックを特定するための情報を含む。
【０１１８】
具体的には、対応データ５１０５においては、複数のセーフティドライバ３００の型式（型名）と、これら複数のセーフティドライバ３００のそれぞれが有するセーフティ機能２５０と、各セーフティ機能２５０に対応するファンクションブロック（ユーザ定義ファンクションブロック）とが対応付けられている。たとえば、「Ｒ８８Ｄ−１ＳＡＮ０２Ｈ−ＥＣＴ」のセーフティドライバ３００は、セーフティ機能２５０としてＳＳ１およびＳＳ２を有する。そして、ＳＳ１に対応するファンクションブロックとして「ＯＣ＿ＳＦ＿ＳＳ１」が対応付けられ、ＳＳ２に対応するファンクションブロックとして「ＯＣ＿ＳＦ＿ＳＳ２」が対応付けられている。
【０１１９】
サポート装置５００は、対応データ５１０５に基づき、セーフティドライバ３００が有するセーフティ機能２５０、および当該セーフティ機能２５０を実現するためのセーフティプログラム２１０４におけるファンクションブロックを把握することができる。
【０１２０】
なお、各セーフティ機能２５０に対応するファンクションブロックは、全て安全に関する認証（たとえば、機能安全に関する製品の評価を行っている外部組織による認証）を受けている。より具体的には、各セーフティ機能２５０に対応するファンクションブロックにおけるプログラムの内容（命令情報）はユーザにとってブラックボックスになっており、ユーザが改変することができないようになっている。しかも、ファンクションブロックにおけるプログラムの内容（命令情報）は、安全に関する認証を受けており、安全が保証されている。これにより、セーフティコントローラ２００で実行されるセーフティプログラム２１０４の安全性を担保することができる。
【０１２１】
＜Ｆ．制御システム１の機能分担＞
次に、制御システム１における機能分担の一例について説明する。図９は、本実施の形態に係る制御システム１の機能分担の一例を示す模式図である。
【０１２２】
図９を参照して、標準コントローラ１００が実行する標準制御１５０に関して、セーフティドライバ３００はサーボ制御３５０を実行する。標準制御１５０は、制御対象に予め設定されたユーザプログラムに従って、サーボモータ４００を駆動するための指令を周期的に算出する処理を含む。また、サーボ制御３５０は、標準制御１５０により周期的に算出される指令に従ってサーボモータ４００を駆動するための制御、および、サーボモータ４００の動作状態を示す状態値を取得して出力する処理を含む。サーボ制御３５０は、セーフティドライバ３００のプロセッサ３１２（図５参照）が担当する。
【０１２３】
一方、セーフティコントローラ２００が提供するセーフティ機能２５０に対応して、セーフティドライバ３００はモーションセーフティ機能３６０を提供する。モーションセーフティ機能３６０は、セーフティドライバ３００のプロセッサ３１４（図５参照）が担当する。
【０１２４】
セーフティ機能２５０は、標準コントローラ１００が実行する標準制御１５０が保持する状態値、セーフティデバイス２４０からの信号によって示される状態値、および、セーフティドライバ３００が保持する状態値などに基づいて、予め定められた条件が成立すると、予め指定されているセーフティ機能２５０を有効化する。
【０１２５】
予め指定されているセーフティ機能２５０を有効化する処理は、たとえば、セーフティドライバ３００に対するセーフティ指令の出力、あるいは、セーフティデバイス２４０に対してセーフティ指令の出力（たとえば、特定の装置への電力供給に係るセーフティリレーを遮断する）などを含む。
【０１２６】
セーフティドライバ３００は、セーフティコントローラ２００からのセーフティ指令に応答して、指定されたモーションセーフティ機能３６０を提供する。指定されたモーションセーフティ機能３６０の種類に応じて、サーボ制御３５０によるサーボモータ４００の制御に介入して、サーボモータ４００への電力供給を遮断する処理、あるいは、サーボ制御３５０によるサーボモータ４００の制御の状態値が予め定められた制限範囲内に収まっているか否かを監視する処理などが実行される。なお、各セーフティドライバ３００においては、実行可能なモーションセーフティ機能３６０が予め定められている。
【０１２７】
図１０は、本実施の形態に係る制御システム１のセーフティドライバ３００によるセーフティ機能２５０に係る処理手順の一例を示すシーケンス図である。図１０を参照して、標準コントローラ１００の標準制御１５０により周期的に指令が算出されて、セーフティドライバ３００（サーボ制御３５０）に出力される（シーケンスＳＱ２）。セーフティドライバ３００のサーボ制御３５０は、標準制御１５０からの指令に従って、サーボモータ４００を駆動する（シーケンスＳＱ４）。
【０１２８】
あるタイミングにおいて、セーフティデバイス２４０（たとえば、セーフティセンサ）からのセーフティイベントが発生すると（シーケンスＳＱ６）、セーフティコントローラ２００は、セーフティドライバ３００（モーションセーフティ機能３６０）にセーフティ指令を出力する（シーケンスＳＱ８）。このセーフティ指令に応答して、セーフティドライバ３００のモーションセーフティ機能３６０は、指定されたセーフティ機能２５０を有効化する（シーケンスＳＱ１０）。
【０１２９】
セーフティ機能２５０の有効化に応答して、標準コントローラ１００の標準制御１５０からは、当該有効化されたセーフティ機能２５０に応じた指令が算出および出力されるようになる（シーケンスＳＱ１２）。一方、セーフティドライバ３００（モーションセーフティ機能３６０）は、サーボモータ４００の動作状態が予め定められた制限範囲内に収まっているか否かを監視する。サーボモータ４００の動作状態が予め定められた制限範囲内に収まっていないと判断されると、あるいは、予め定められた停止時間が到来すると、セーフティドライバ３００（モーションセーフティ機能３６０）は、サーボモータ４００への電力供給を遮断する（シーケンスＳＱ１４）。
【０１３０】
このように、セーフティドライバ３００は、標準コントローラ１００（標準制御１５０）からの指令に従ってサーボモータ４００を駆動できるとともに、セーフティ機能２５０を有効化するための指令に応じて、セーフティコントローラ２００（セーフティ機能２５０）に対するモーションセーフティ機能３６０を実現することができる。
【０１３１】
＜Ｇ．制御システム１のモーションセーフティ機能３６０＞
次に、制御システム１が提供するモーションセーフティ機能３６０の一例について説明する。
【０１３２】
図１１は、本実施の形態に係る制御システム１が提供するモーションセーフティ機能３６０の一例を示す図である。図１１（Ａ）には、ＳＴＯ（Safe Torque Off）に対応するサーボモータ４００の挙動の一例を示し、図１１（Ｂ）には、ＳＳ１（Safe Stop 1）に対応するサーボモータ４００の挙動の一例を示す。
【０１３３】
図１１（Ａ）を参照して、サーボモータ４００がある回転速度で運転している状態において、時刻ｔ１でセーフティ指令（ＳＴＯ）が与えられると、セーフティドライバ３００は、サーボモータ４００への電力供給を遮断して、サーボモータ４００で発生するトルクをゼロにする。この結果、サーボモータ４００は惰性で回転した後に停止する。なお、サーボモータ４００にブレーキが装着されている場合には、サーボモータ４００は即座に停止することもできる。
【０１３４】
図１１（Ｂ）を参照して、サーボモータ４００がある回転速度で運転している状態において、時刻ｔ１でセーフティ指令（ＳＳ１）が与えられると、セーフティドライバ３００は、予め定められた加速度で回転速度を低減する。このとき、セーフティドライバ３００は、サーボモータ４００からの電力回収（すなわち、回生）などを実行してもよい。そして、時刻ｔ２においてサーボモータ４００の回転速度がゼロになると、セーフティドライバ３００は、サーボモータ４００への電力供給を遮断して、サーボモータ４００で発生するトルクをゼロにする。時刻ｔ２以降においては、図１１（Ａ）に示すＳＴＯと同様の状態になる。
【０１３５】
図１１（Ａ）に示されるＳＴＯおよび図１１（Ｂ）に示されるＳＳ１のうち、サーボモータ４００と機械的に連結されている設備の特性などに応じて、より安全に停止できるセーフティ機能２５０が適宜選択される。
【０１３６】
上述した非特許文献は、図１１（Ａ）および図１１（Ｂ）に示すモーションセーフティ機能３６０だけではなく、複数のモーションセーフティ機能３６０を規定する。各モーションセーフティ機能３６０を実現するためには、サーボモータ４００の挙動を規定するための設定が必要となる。
【０１３７】
＜Ｈ．自動インポート処理＞
次に、サポート装置５００が実行する自動インポート処理について説明する。
【０１３８】
図１２は、本実施の形態に係るサポート装置５００が実行する自動インポート処理を説明するためのフローチャートである。図１２を参照して、サポート装置５００は、セーフティドライバ３００が追加登録されたか否か、具体的には、図７に示すネットワーク構成情報５１３１にセーフティドライバ３００が追加登録されたか否かを判定する（Ｓ２）。サポート装置５００は、セーフティドライバ３００が追加登録されていない場合（Ｓ２でＮＯ）、本処理を終了する。
【０１３９】
一方、サポート装置５００は、セーフティドライバ３００が追加登録されている場合（Ｓ２でＹＥＳ）、保持しているファンクションブロック群５１０３の中から対応するファンクションブロックを特定する（Ｓ４）。このとき、サポート装置５００は、ネットワーク構成情報５１３１に追加されたセーフティドライバ３００の型式（型名）を手掛かりに、対応データ５１０５において対応付けられたファンクションブロックを特定する。そして、サポート装置５００は、特定したファンクションブロックを読み込む（Ｓ６）。
【０１４０】
これにより、サポート装置５００は、セーフティドライバ３００が有する固有の識別情報を手掛かりに、より確実に、セーフティコントローラ２００に関連付けられたセーフティドライバ３００が有する機能に対応するファンクションブロックをユーザに利用可能とさせることができる。なお、サポート装置５００は、型式（型名）に限らず、製造番号など、セーフティドライバ３００が有する固有の識別情報であれば、いずれの情報を用いてファンクションブロックを特定してもよい。
【０１４１】
サポート装置５００は、読み込んだファンクションブロックと同じ名前のファンクションブロックが既に開発プロジェクトに存在するか否か、すなわち既に同じ名前のファンクションブロックがインポートされておりユーザによって利用可能であるか否かを判定する（Ｓ８）。サポート装置５００は、読み込んだファンクションブロックと同じ名前のファンクションブロックが開発プロジェクトに存在しない場合（Ｓ８でＮＯ）、本処理を終了する。
【０１４２】
一方、サポート装置５００は、読み込んだファンクションブロックと同じ名前のファンクションブロックが開発プロジェクトに存在する場合（Ｓ８でＹＥＳ）、読み込んだファンクションブロックと既に存在する同じ名前のファンクションブロックとの間でＣＲＣ（Cyclic Redundancy Check）データが一致するか否かを判定する（Ｓ１０）。ＣＲＣデータは、巡回冗長検査用のデータであり、データの一致を判定するためのものである。
【０１４３】
サポート装置５００は、読み込んだファンクションブロックと既に存在する同じ名前のファンクションブロックとの間でＣＲＣデータが一致する場合（Ｓ１０でＹＥＳ）、同一のファンクションブロックを重複して開発プロジェクトにインポートすることになるため、読み込んだファンクションブロックをインポートすることなく、本処理を終了する。
【０１４４】
一方、サポート装置５００は、読み込んだファンクションブロックと既に存在する同じ名前のファンクションブロックとの間でＣＲＣデータが一致しない場合（Ｓ１０でＮＯ）、読み込んだファンクションブロックと既に存在する同じ名前のファンクションブロックとで作成者が同じであり、かつ読み込んだファンクションブロックが既に存在する同じ名前のファンクションブロックよりもバージョンまたは更新日時が新しいか否かを判定する（Ｓ１２）。
【０１４５】
サポート装置５００は、読み込んだファンクションブロックと既に存在する同じ名前のファンクションブロックとで作成者が同じでないか、あるいは、読み込んだファンクションブロックが既に存在する同じ名前のファンクションブロックよりもバージョンまたは更新日時が新しくない場合（Ｓ１２でＮＯ）、既に存在する同じ名前のファンクションブロックが上書きされることがないように、読み込んだファンクションブロックをインポートすることなく、本処理を終了する。
【０１４６】
一方、サポート装置５００は、読み込んだファンクションブロックと既に存在する同じ名前のファンクションブロックとで作成者が同じであり、かつ読み込んだファンクションブロックが既に存在する同じ名前のファンクションブロックよりもバージョンまたは更新日時が新しい場合（Ｓ１２でＹＥＳ）、読み込んだファンクションブロックを、既に存在する同じ名前のファンクションブロックに上書きしてインポートする（Ｓ１４）。その後、サポート装置５００は、本処理を終了する。
【０１４７】
このように、サポート装置５００は、読み込んだ利用対象であるファンクションブロックと同じ名前のファンクションブロックが既にユーザに利用可能とされている場合であっても、巡回冗長検査用のデータの整合性に基づき、適切にファンクションブロックをユーザに利用可能とさせることができる。
【０１４８】
さらに、サポート装置５００は、読み込んだ利用対象であるファンクションブロックと同じ名前のファンクションブロックが既にユーザに利用可能とされている場合であっても、両者の作成者、バージョン、および更新日時を考慮して、適切にファンクションブロックをユーザに利用可能とさせることができる。また、たとえば、第三者が動作検証などを行っていないファンクションブロックが自動でインポートされることを極力防止することができる。
【０１４９】
＜Ｉ．セーフティコントローラ２００にセーフティドライバ３００を関連付けるためのユーザインターフェイス７００＞
次に、サポート装置５００が提供するセーフティコントローラ２００にセーフティドライバ３００を関連付けるためのユーザインターフェイス７００の一例について説明する。
【０１５０】
図１３および図１４は、サポート装置５００が提供するセーフティコントローラ２００にセーフティドライバ３００を関連付けるためのユーザインターフェイス７００の一例を示す図である。ユーザは、サポート装置５００においてサポートプログラム５１０４を実行することで、図１３および図１４に示すようなユーザインターフェイス７００における画面を表示させることができる。
【０１５１】
図１３を参照して、サポート装置５００の画面の左側には、マルチビューエクスプローラ欄７０１が設けられている。マルチビューエクスプローラ欄７０１には、開発対象となるプログラムを指定するための切替スイッチ７１１が含まれる。この例では、切替スイッチ７１１において、標準制御プログラム１１０４に対応する「new_Controller_0」が指定されている。
【０１５２】
さらに、マルチビューエクスプローラ欄７０１には、制御システム１においてネットワーク接続される構成を設定するための切替スイッチ７１２が含まれる。また、この例では、切替スイッチ７１２によって「構成・設定」に切り替えられた上で、制御システム１においてネットワーク接続される構成を設定するための項目としてＥｔｈｅｒＣＡＴ（登録商標）アイコン７１３が指定されている。なお、本実施の形態においては、ＥｔｈｅｒＣＡＴ（登録商標）は、フィールドネットワーク２のプロトコルの一例として採用されている。
【０１５３】
ＥｔｈｅｒＣＡＴ（登録商標）アイコン７１３が指定されると、サポート装置５００の画面の中央に配置されたＥｔｈｅｒＣＡＴ（登録商標）７０２において、現時点で制御システム１においてネットワーク接続されている構成が示される。この例では、「Ｍａｓｔｅｒ」である標準コントローラ１００、および「ＮＸ−ＥＣＣ２０３」であるセーフティコントローラ２００が示されている。
【０１５４】
一方、サポート装置５００の画面の右側には、ツールボックス７０３が設けられている。ツールボックス７０３には、制御システム１において追加可能な構成が一覧表示されている。この例では、追加可能な構成として、セーフティドライバ３００の型式（型名）が一覧表示されている。ユーザは、一覧表示された複数のセーフティドライバ３００の中から所望のセーフティドライバ３００を選択した上で、挿入アイコン７３１を指定すると、セーフティコントローラ２００に対して新たなセーフティドライバ３００を関連付けることができる。たとえば、図１３においては、「Ｒ８８Ｄ−１ＳＡＮ０２Ｈ−ＥＣＴ」の型式（型名）を有するセーフティドライバ３００が選択されており、当該セーフティドライバ３００の詳細な情報が詳細情報欄７３２に表示されている。
【０１５５】
「Ｒ８８Ｄ−１ＳＡＮ０２Ｈ−ＥＣＴ」の型式（型名）を有するセーフティドライバ３００が選択されて挿入アイコン７３１が指定されると、図１４のＥｔｈｅｒＣＡＴ（登録商標）７０２に示すように、「Ｒ８８Ｄ−１ＳＡＮ０２Ｈ−ＥＣＴ」の型式（型名）を有するセーフティドライバ３００が制御システム１に追加されて、「Ｍａｓｔｅｒ」である標準コントローラ１００、および「ＮＸ−ＥＣＣ２０３」であるセーフティコントローラ２００に関連付けられる。「Ｒ８８Ｄ−１ＳＡＮ０２Ｈ−ＥＣＴ」のセーフティドライバ３００が制御システム１に追加されると、図７のＮＯ．２に示したように、「Ｒ８８Ｄ−１ＳＡＮ０２Ｈ−ＥＣＴ」の型式（型名）がネットワーク構成情報５１３１に追加される。
【０１５６】
このように、ユーザは、サポート装置５００を用いて、セーフティコントローラ２００に対して少なくとも１つ以上のセーフティドライバ３００を関連付けることができる。
【０１５７】
＜Ｊ．開発プログラムの切替のためのユーザインターフェイス８００＞
次に、サポート装置５００が提供する開発プログラムの切替のためのユーザインターフェイス８００の一例について説明する。
【０１５８】
図１５は、本実施の形態に係るサポート装置５００が提供する標準制御プログラム開発からセーフティプログラム開発へと切り替えるためのユーザインターフェイス８００の一例を示す図である。ユーザは、サポート装置５００においてサポートプログラム５１０４を実行することで、図１５に示すようなユーザインターフェイス８００における画面を表示させることができる。
【０１５９】
図１５を参照して、サポート装置５００の画面の左側には、マルチビューエクスプローラ欄８０１が設けられている。さらに、マルチビューエクスプローラ欄８０１には、開発対象となるプログラムを指定するための切替スイッチ８１１が含まれる。
【０１６０】
ユーザは、切替スイッチ８１１を用いてドロップダウンされたリストの中から「new_Controller_0」を指定することで、標準制御プログラム１１０４を開発するための画面を表示させることができ、ドロップダウンされたリストの中から「new_SafetyCPU0」を指定することで、セーフティプログラム２１０４を開発するための画面を表示させることができる。
【０１６１】
この例では、切替スイッチ８１１において、セーフティプログラム２１０４に対応する「new_SafetyCPU0」が指定されている。
【０１６２】
＜Ｋ．セーフティプログラム開発のためのユーザインターフェイス９００＞
次に、サポート装置５００が提供するセーフティプログラム２１０４を開発するためのユーザインターフェイス９００の一例について説明する。
【０１６３】
図１６および図１７は、本実施の形態に係るサポート装置５００が提供するセーフティプログラム２１０４を開発するためのユーザインターフェイス９００の一例を示す図である。ユーザは、図１５に示した開発プログラムの切替のためのユーザインターフェイス８００において「new_SafetyCPU0」を指定することで、図１６に示すようなユーザインターフェイス９００における画面を表示させることができる。
【０１６４】
図１６を参照して、サポート装置５００の画面の左側には、マルチビューエクスプローラ欄９０１が設けられている。さらに、マルチビューエクスプローラ欄９０１には、開発対象となるプログラムを指定するための切替スイッチ９１１が含まれる。この例では、切替スイッチ９１１において、セーフティプログラム２１０４に対応する「new_SafetyCPU0」が指定されている。
【０１６５】
また、マルチビューエクスプローラ欄９０１には、プログラミングに関して設定対象となる項目を指定するための切替スイッチ９１２が含まれる。切替スイッチ９１２によってドロップダウンされたリストの中には、プログラムを指定するための切替スイッチ９１３が含まれる。
【０１６６】
さらに、切替スイッチ９１２によってドロップダウンされたリストの中には、利用可能なファンクションブロックの一覧を表示するための切替スイッチ９１４が含まれる。この例では、「new_SafetyCPU0」が有する機能を実現するために利用可能なファンクションブロックとして、「OC_SF_SS1」、「OC_SF_SS2」、および「OC_SF_ResetSafe」が表示されている。ここで表示されるファンクションブロックは、図１３および図１４に示したユーザインターフェイス７００において、ユーザが追加したセーフティドライバ３００の種類に応じて変化する。つまり、追加されたセーフティドライバ３００が有する機能に対応するファンクションブロックがインポートされ、ユーザインターフェイス９００における画面に表示される。なお、ファンクションブロックが自動でインポートされる他、ユーザが手動で所望のファンクションブロックを追加でインポートすることで、新たなファンクションブロックを利用可能とすることもできる。
【０１６７】
図１７を参照して、切替スイッチ９１３において、「Program0」が指定されている。さらに、サポート装置５００の画面の右側には、利用可能なセーフティプログラム２１０４におけるユーザ定義ファンクションブロックのうちからユーザが所望するユーザ定義ファンクションブロックを指定するための切替スイッチ９０３が設けられている。この例では、切替スイッチ９０３において、「OC_SF_SS1」が指定されている。
【０１６８】
ユーザが切替スイッチ９０３において、設定値の入力対象として「OC_SF_SS1」のファンクションブロックを指定すると、サポート装置５００の画面の中央にセーフティプログラム２１０４を開発するためのプログラム画面９０２が表示される。
【０１６９】
この例では、図１１（Ｂ）に示したような、モーションセーフティ機能３６０としてＳＳ１を実現するためのファンクションブロックが表示されている。ユーザは、プログラム画面９０２に表示されたファンクションブロックに対して設定値を入力（指定）することで、セーフティプログラム２１０４を作成することができる。
【０１７０】
このように、サポート装置５００を用いたユーザによるセーフティプログラム２１０４の開発時において、ユーザは、セーフティコントローラ２００に対して少なくとも１つ以上のセーフティドライバ３００を関連付けることができ、セーフティコントローラ２００に対して少なくとも１つ以上のセーフティドライバ３００を関連付けた場合に、当該少なくとも１つ以上のセーフティドライバ３００のそれぞれが有する機能に対応する少なくとも１つ以上のファンクションブロックを利用することができる。これにより、ユーザは、セーフティコントローラ２００に対して関連付けたセーフティドライバ３００が有する機能に対応するファンクションブロックを自分で特定する必要がなく、ユーザのプログラミングにおける利便性を向上させることができる。また、セーフティコントローラ２００においてプログラムが予め組み込まれているような形態ではなく、サポート装置５００を用いてユーザが生成したセーフティプログラム２１０４をセーフティコントローラ２００で実行するような形態であるため、ソフトウェアのバージョンアップを行う際にセーフティコントローラ２００自体をバージョンアップする必要がなく、サポート装置５００でプログラム開発時に用いられるソフトウェアをバージョンアップすることで事足りるため、バージョンアップに掛ける費用を極力抑えることができる。
【０１７１】
＜Ｌ．変形例＞
上述した実施例においては、「コントローラ」としてセーフティコントローラ２００を例示したが、「コントローラ」として標準コントローラ１００を適用してもよい。このような変形例について、図１８および図１９を参照しながら説明する。
【０１７２】
図１８は、変形例に係るサポート装置５００ａが実行する自動インポート処理を説明するためのフローチャートである。図１８を参照して、サポート装置５００ａは、デバイス定義ファイルに追加のデバイスの記載があるか否かを判定する（Ｓ２ａ）。デバイス定義ファイルは、変形例に係る制御システム２０００において接続されている構成を特定するための情報を含む。つまり、サポート装置５００ａは、制御システム２０００において接続されている構成に対して新たなデバイスが追加されたか否かを判定する。サポート装置５００は、デバイス定義ファイルに追加のデバイスの記載がない場合（Ｓ２ａでＮＯ）、本処理を終了する。一方、サポート装置５００は、デバイス定義ファイルに追加のデバイスの記載がある場合（Ｓ２ａでＹＥＳ）、Ｓ４の処理に移行する。Ｓ４以降の処理は、図１２に示した自動インポート処理におけるＳ４以降の処理と同じである。
【０１７３】
図１９は、変形例に係る制御システム２０００の適用例を示す模式図である。図１９を参照して、変形例に係る制御システム２０００は、主として、標準コントローラ２１００、ならびに、標準コントローラ２１００とフィールドネットワーク２００２を介して接続される１または複数の制御対象２３００（２３００ａ，２３００ｂ，２３００ｃ）を含む。
【０１７４】
標準コントローラ２１００は、上述した標準コントローラ１００と同様の構成および機能を有する。制御対象２３００ａは、たとえば、ロードセル入力ユニットであり、荷重を電気信号に変換するロードセル２４００ａに接続されている。制御対象２３００ｂは、たとえば、温度調整ユニットであり、ヒータ２４００ｂに接続されている。制御対象２３００ｃは、たとえば、位置インターフェイスユニットであり、エンコーダ２４００ｃに接続されている。これら制御対象２３００（２３００ａ，２３００ｂ，２３００ｃ）は、各々に接続された各駆動部２４００（２４００ａ，２４００ｂ，２４００ｃ）を駆動制御する。
【０１７５】
標準コントローラ２１００は、プログラムに従って、制御対象２３００に対する制御を実行する。標準コントローラ２１００で実行されるプログラムは、標準コントローラ２１００と通信可能に接続されたサポート装置２５００が提供する開発環境を利用して、ユーザによって予め作成され、標準コントローラ２１００に転送される。
【０１７６】
制御対象２３００は、標準コントローラ２１００からの指令に従って、各駆動部２４００（２４００ａ，２４００ｂ，２４００ｃ）を駆動制御する。
【０１７７】
サポート装置２５００は、標準コントローラ２１００で実行されるプログラムの開発を支援する。たとえば、サポート装置２５００は、少なくとも１つ以上の命令情報（ファンクションブロック）を組み合わせることでプログラムを生成するための開発環境（プログラム作成編集ツール、パーサ、コンパイラなど）をユーザに提供する。
【０１７８】
プログラムにおけるファンクションブロックは、標準コントローラ２１００に関連付けられた制御対象２３００が有する機能に対応している。具体的には、ユーザは、標準コントローラ２１００に対して、少なくとも１以上の制御対象２３００を通信可能に接続させることが可能であり、各制御対象２３００は、実行可能な機能が予め定められている。そして、各機能に対応するように、ファンクションブロック（命令情報）が予め設けられている。標準コントローラ２１００に対して少なくとも１以上の制御対象２３００が接続されると、接続された制御対象２３００が有する機能に対応するファンクションブロックが、サポート装置２５００にインポートされ、ユーザによって利用可能とされる。
【０１７９】
サポート装置２５００は、標準コントローラ２１００に対して少なくとも１つ以上の制御対象２３００を関連付ける関連付け部５２１１を有する。たとえば、関連付け部５２１１は、標準コントローラ２１００に対して新たに制御対象２３００ｃが接続された場合、ネットワーク構成情報５３３１ａを更新してネットワーク構成情報５３３１ｂを生成する。更新後のネットワーク構成情報５３３１ｂには、制御システム２０００の構成について、標準コントローラ２１００と、当該標準コントローラ２１００に接続された制御対象２３００ａ、制御対象２３００ｂ、および制御対象２３００ｃとで、ネットワークが構成されている旨の情報が格納されている。このようにして、標準コントローラ２１００に対して新たに制御対象２３００ｃが関連付けられる。
【０１８０】
また、サポート装置２５００は、対応データ５３０５を保持する。対応データ５３０５には、標準コントローラ２１００によって実行可能な各機能に対応する命令情報を特定するための情報が格納されている。対応データ５３０５における各機能は、制御対象２３００ごとに有されるか否かが予め決められている。たとえば、制御対象２３００ａは機能１および機能２を有し、制御対象２３００ｂは機能１および機能３を有し、制御対象２３００ｃは機能３および機能４を有する。
【０１８１】
ネットワーク構成情報５３３１の更新前においては、ネットワーク構成情報５３３１ａに示すように、制御対象２３００として、制御対象２３００ａおよび制御対象２３００ｂが標準コントローラ２１００に関連付けられている。この場合、ユーザは、制御対象２３００ａについては、機能１に対応する命令情報１、および機能２に対応する命令情報２を利用してプログラミング可能である。また、ユーザは、制御対象２３００ｂについては、機能１に対応する命令情報１、および機能３に対応する命令情報３を利用してプログラミング可能である。
【０１８２】
一方、ネットワーク構成情報５３３１の更新後においては、ネットワーク構成情報５３３１ｂに示すように、新たに制御対象２３００ｃが標準コントローラ２１００に関連付けられている。本実施の形態に係る制御システム２０００において、サポート装置２５００は、少なくとも１つ以上の制御対象２３００のそれぞれが有する機能に対応する少なくとも１つ以上の命令情報を特定してユーザに利用可能とさせる特定部５２１２を有する。
【０１８３】
サポート装置２５００は、ネットワーク構成情報５３３１ｂに示すように、新たに制御対象２３００ｃが標準コントローラ２１００に関連付けられた場合、特定部５２１２によって、制御対象２３００ｃが有する機能３に対応する命令情報３および機能４に対応する命令情報４を特定し、プログラム開発のプロジェクトにインポートすることで、命令情報３および命令情報４を、ユーザに利用可能とさせる。これにより、ユーザは、制御対象２３００ｃについて、機能３に対応する命令情報３、および機能４に対応する命令情報４を利用してプログラミング可能となる。
【０１８４】
このように、サポート装置２５００を用いたユーザによるプログラムの開発時において、ユーザは、標準コントローラ２１００に対して少なくとも１つ以上の制御対象２３００を関連付けることができ、標準コントローラ２１００に対して少なくとも１つ以上の制御対象２３００を関連付けた場合に、当該少なくとも１つ以上の制御対象２３００のそれぞれが有する機能に対応する少なくとも１つ以上の命令情報を利用することができる。これにより、ユーザは、標準コントローラ２１００に対して関連付けた制御対象２３００が有する機能に対応する命令情報を自分で特定する必要がなく、ユーザのプログラミングにおける利便性を向上させることができる。また、標準コントローラ２１００においてプログラムが予め組み込まれているような形態ではなく、サポート装置２５００を用いてユーザが生成したプログラムを標準コントローラ２１００で実行するような形態であるため、ソフトウェアのバージョンアップを行う際に標準コントローラ２１００自体をバージョンアップする必要がなく、サポート装置２５００でプログラム開発時に用いられるソフトウェアをバージョンアップすることで事足りるため、バージョンアップに掛ける費用を極力抑えることができる。
【０１８５】
＜Ｍ．付記＞
以上のように、本実施の形態では以下のような開示を含む。
【０１８６】
［構成１］
制御システム（１０００）であって、
少なくとも１つ以上の制御対象（１３００）と、
前記少なくとも１つ以上の制御対象を制御するコントローラ（１２００）と、
前記少なくとも１つ以上の制御対象を制御するために前記コントローラで実行されるプログラムの開発を支援するサポート装置（１５００）とを備え、
前記少なくとも１つ以上の制御対象のそれぞれは、当該制御対象に対応する機能を有し、
前記少なくとも１つ以上の制御対象のそれぞれが有する機能は、当該各機能に対応する少なくとも１つ以上の命令情報に従って実行され、
前記サポート装置は、
前記少なくとも１つ以上の命令情報を組み合わせることで前記プログラムを生成するための開発環境をユーザに提供し、
前記コントローラに対して前記少なくとも１つ以上の制御対象を関連付ける関連付け部（５１１１）と、
前記関連付け部によって前記コントローラに対して前記少なくとも１つ以上の制御対象が関連付けられた場合に、当該少なくとも１つ以上の制御対象のそれぞれが有する機能に対応する前記少なくとも１つ以上の命令情報を特定してユーザに利用可能とさせる特定部（５１１２）とを含む、制御システム（１０００）。
【０１８７】
［構成２］
前記少なくとも１つ以上の命令情報は、ユーザが設定値を入力することでプログラミング可能なファンクションブロックで規定される、構成１の制御システム。
【０１８８】
［構成３］
前記コントローラは、前記制御システムにおける安全を管理するセーフティコントローラ（２００）であり、
前記少なくとも１つ以上の制御対象は、前記セーフティコントローラからの指令に従って所定のセーフティ機能を実行するセーフティスレーブ（２４０，３００）である、構成１または構成２の制御システム。
【０１８９】
［構成４］
前記制御システムは、モータ（４００）を制御する標準コントローラ（１００）を備え、
前記コントローラは、前記制御システムにおける安全を管理するセーフティコントローラ（２００）であり、
前記セーフティスレーブは、前記標準コントローラからの指令に従って前記モータを動作させる一方で、前記セーフティコントローラからの指令に従って前記所定のセーフティ機能を実行するセーフティドライバ（３００）である、構成３の制御システム。
【０１９０】
［構成５］
前記少なくとも１つ以上の命令情報は、安全に関する認証を受けている、構成３または構成４の制御システム。
【０１９１】
［構成６］
前記特定部は、前記関連付け部によって前記コントローラに関連付けられた前記少なくとも１つ以上の制御対象が有する固有の識別情報を手掛かりに、当該少なくとも１つ以上の制御対象のそれぞれが有する機能に対応する前記少なくとも１つ以上の命令情報を特定する、構成１〜構成５のいずれかの制御システム。
【０１９２】
［構成７］
前記特定部は、前記関連付け部によって前記コントローラに関連付けられた前記少なくとも１つ以上の制御対象のそれぞれが有する機能に対応する少なくとも１つ以上の前記ファンクションブロックと同じ名前のファンクションブロックが既にユーザに利用可能とされている場合、所定の条件が成立したときに、当該少なくとも１つ以上のファンクションブロックをユーザに利用可能とさせる、構成２〜構成６のいずれかの制御システム。
【０１９３】
［構成８］
前記所定の条件は、利用対象である前記少なくとも１つ以上のファンクションブロックと、既にユーザに利用可能とされているファンクションブロックとで、巡回冗長検査用のデータが一致しないときに成立する、構成７の制御システム。
【０１９４】
［構成９］
前記所定の条件は、利用対象である前記少なくとも１つ以上のファンクションブロックと、既にユーザに利用可能とされているファンクションブロックとで、作成者が同じであり、かつ、利用対象である前記少なくとも１つ以上のファンクションブロックが、既にユーザに利用可能とされているファンクションブロックよりも、バージョンまたは更新日時が新しいときに成立する、構成８の制御システム。
【０１９５】
［構成１０］
少なくとも１つ以上の制御対象（１３００）を制御するためにコントローラ（１２００）で実行されるプログラムの開発を支援するサポート装置（１５００）であって、
前記少なくとも１つ以上の制御対象のそれぞれは、当該制御対象に対応する機能を有し、
前記少なくとも１つ以上の制御対象のそれぞれが有する機能は、当該各機能に対応する少なくとも１つ以上の命令情報に従って実行され、
前記サポート装置は、
前記少なくとも１つ以上の命令情報を組み合わせることで前記プログラムを生成するための開発環境をユーザに提供し、
前記コントローラに対して前記少なくとも１つ以上の制御対象を関連付ける関連付け部（５１１１）と、
前記関連付け部によって前記コントローラに対して前記少なくとも１つ以上の制御対象が関連付けられた場合に、当該少なくとも１つ以上の制御対象のそれぞれが有する機能に対応する前記少なくとも１つ以上の命令情報を特定してユーザに利用可能とさせる特定部（５１１２）とを備える、サポート装置。
【０１９６】
［構成１１］
少なくとも１つ以上の制御対象（１３００）を制御するためにコントローラ（１２００）で実行されるプログラムの開発を支援するサポートプログラム（５１０４）であって、
前記少なくとも１つ以上の制御対象のそれぞれは、当該制御対象に対応する機能を有し、
前記少なくとも１つ以上の制御対象のそれぞれが有する機能は、当該各機能に対応する少なくとも１つ以上の命令情報に従って実行され、
前記サポートプログラムは、前記少なくとも１つ以上の命令情報を組み合わせることで前記プログラムを生成するための開発環境をユーザに提供し、
前記サポートプログラムは、コンピュータ（５０２）に、
前記コントローラに対して前記少なくとも１つ以上の制御対象を関連付けるステップと、
前記コントローラに対して前記少なくとも１つ以上の制御対象が関連付けられた場合に、当該少なくとも１つ以上の制御対象のそれぞれが有する機能に対応する前記少なくとも１つ以上の命令情報を特定してユーザに利用可能とさせるステップとを実行させる、サポートプログラム。
【０１９７】
＜Ｎ．利点＞
本実施の形態に係る制御システム１によれば、サポート装置１５００を用いたユーザによるプログラムの開発時において、ユーザは、コントローラ１２００に対して少なくとも１つ以上の制御対象１３００を関連付けることができ、コントローラ１２００に対して少なくとも１つ以上の制御対象１３００を関連付けた場合に、当該少なくとも１つ以上の制御対象１３００のそれぞれが有する機能に対応する少なくとも１つ以上の命令情報を利用することができる。これにより、ユーザは、コントローラ１２００に対して関連付けた制御対象１３００が有する機能に対応する命令情報を自分で特定する必要がなく、ユーザのプログラミングにおける利便性を向上させることができる。また、コントローラ１２００においてプログラムが予め組み込まれているような形態ではなく、サポート装置１５００を用いてユーザが生成したプログラムをコントローラ１２００で実行するような形態であるため、ソフトウェアのバージョンアップを行う際にコントローラ１２００自体をバージョンアップする必要がなく、サポート装置１５００でプログラム開発時に用いられるソフトウェアをバージョンアップすることで事足りるため、バージョンアップに掛ける費用を極力抑えることができる。
【０１９８】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は、上記した説明ではなく、特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【符号の説明】
【０１９９】
１，１０００，２０００  制御システム、２，１００２，２００２  フィールドネットワーク、１００，２１００  標準コントローラ、１０２，２０２，３１２，３１４，５０２  プロセッサ、１０４，２０４，３１６，５０４  メインメモリ、１０６  上位ネットワークコントローラ、１０８，２０８，３０２  フィールドネットワークコントローラ、１１０，２１０，３２０，５１０  ストレージ、１１２  メモリカードインターフェイス、１１４  メモリカード、１１６  ローカルバスコントローラ、１１８，２１８，５１８  プロセッサバス、１２０，２２０，５２０  ＵＳＢコントローラ、１５０  標準制御、２００  セーフティコントローラ、２１６  セーフティローカルバスコントローラ、２３０  セーフティＩＯユニット、２４０  セーフティデバイス、２５０  セーフティ機能、３００  セーフティドライバ、３１０  制御部、３３０  ドライブ回路、３３２  フィードバック受信回路、３５０  サーボ制御、３６０  モーションセーフティ機能、４００  サーボモータ、４０２  三相交流モータ、４０４，２４００ｃ  エンコーダ、５００，５００ａ，１５００，２５００  サポート装置、５０６  入力部、５０８  出力部、５１２  光学ドライブ、５１４  記録媒体、７００，８００，９００  ユーザインターフェイス、１１０２，２１０２  システムプログラム、１１０４  標準制御プログラム、１１０６，２１０６，３２０３  設定情報、１１６１，５１３１，５２３１，５２３１ａ，５２３１ｂ，５３３１，５３３１ａ，５３３１ｂ  ネットワーク構成情報、１２００  コントローラ、１３００，１３００ａ，１３００ｂ，１３００ｃ，２３００，２３００ａ，２３００ｂ，２３００ｃ  制御対象、１４００，２４００  駆動部、２１０４  セーフティプログラム、２４００ａ  ロードセル、２４００ｂ  ヒータ、３２０１  サーボ制御プログラム、３２０２  モーションセーフティプログラム、５１０３  ファンクションブロック群、５１０４  サポートプログラム、５１０５，５２０５，５３０５  対応データ、５１０６  プロジェクトデータ、５１０８  標準制御ソースプログラム、５１１０  標準コントローラ設定情報、５１１１，５２１１  関連付け部、５１１２，５２１２  特定部、５１１４  セーフティコントローラ設定情報、５１１６  セーフティドライバ設定情報、５１１７  セーフティソースプログラム。
【図１】
2020057152.tif 000003
【図２】
2020057152.tif 000004
【図３】
2020057152.tif 000005
【図４】
2020057152.tif 000006
【図５】
2020057152.tif 000007
【図６】
2020057152.tif 000008
【図７】
2020057152.tif 000009
【図８】
2020057152.tif 000010
【図９】
2020057152.tif 000011
【図１０】
2020057152.tif 000012
【図１１】
2020057152.tif 000013
【図１２】
2020057152.tif 000014
【図１３】
2020057152.tif 000015
【図１４】
2020057152.tif 000016
【図１５】
2020057152.tif 000017
【図１６】
2020057152.tif 000018
【図１７】
2020057152.tif 000019
【図１８】
2020057152.tif 000020
【図１９】
2020057152.tif 000021