(57)【要約】【課題】コントローラにダウンロードされるソフトウェアの不正利用を防止できる技術を提供する。【解決手段】コントローラは、ソフトウェアと、当該ソフトウェアについての第１ライセンス情報とを外部機器から取得するための取得部と、ソフトウェアを実行するためのプロセッサとを備える。ソフトウェアは、コントローラまたは外部機器を一意に識別するための第１固有情報からソフトウェアの実行権を生成するための生成モジュールと、実行権の生成後の所定のタイミングにおいて実行権から第２固有情報を生成し、第２固有情報が第１固有情報と一致しないときに、ソフトウェアの利用を禁止するためのチェックモジュールとを含む。【選択図】図１
2019159752.tif 000002
【特許請求の範囲】
【請求項１】
制御対象を制御するためのコントローラであって、
前記コントローラで利用されるソフトウェアを外部機器から取得するための取得部と、
前記ソフトウェアを実行するためのプロセッサとを備え、
前記ソフトウェアは、
前記コントローラまたは前記外部機器を一意に識別するための第１固有情報から前記ソフトウェアの実行権を生成するための生成モジュールと、
前記実行権の生成後の所定のタイミングにおいて前記実行権から第２固有情報を生成し、当該第２固有情報が前記第１固有情報と一致しないときに、前記ソフトウェアの利用を禁止するためのチェックモジュールとを含む、コントローラ。
【請求項２】
前記外部機器は、前記コントローラと通信可能に構成されている通信機器を含み、
前記取得部は、前記コントローラと通信接続された前記通信機器から前記ソフトウェアをダウンロードする、請求項１に記載のコントローラ。
【請求項３】
前記外部機器は、前記コントローラに電気的に接続され得るメモリカードを含み、
前記取得部は、前記コントローラに電気的に接続されたメモリカードから前記ソフトウェアを取得する、請求項１または２に記載のコントローラ。
【請求項４】
前記プロセッサは、前記取得したソフトウェアを前記コントローラから前記外部機器に移すときに、前記実行権を削除する、請求項１〜３のいずれか１項に記載のコントローラ。
【請求項５】
前記プロセッサは、前記取得したソフトウェアを前記コントローラから前記外部機器に移すときに、前記生成モジュールおよび前記チェックモジュールを削除する、請求項１〜４のいずれか１項に記載のコントローラ。
【請求項６】
前記外部機器から取得され得るソフトウェアは、前記コントローラのファームウェア上で動作するプログラムと、当該ファームウェアに追加されるプログラムと、前記コントローラで利用され得るデータとの少なくとも１つを含む、請求項１〜５のいずれか１項に記載のコントローラ。
【請求項７】
制御対象を制御するコントローラで利用されるソフトウェアのライセンスの管理方法であって、
前記コントローラで利用されるソフトウェアと、当該ソフトウェアについての第１ライセンス情報とを外部機器から取得するステップと、
前記ソフトウェアを実行するステップとを備え、
前記実行するステップは、
前記コントローラまたは前記外部機器を一意に識別するための第１固有情報から前記ソフトウェアの実行権を生成するステップと、
前記実行権の生成後の所定のタイミングにおいて前記実行権から第２固有情報を生成し、当該第２固有情報が前記第１固有情報と一致しないときに、前記ソフトウェアの利用を禁止するステップとを含む、管理方法。
【請求項８】
制御対象を制御するコントローラで利用されるソフトウェアのライセンスの管理プログラムであって、
前記管理プログラムは、前記コントローラに、
制御対象を制御するコントローラで利用されるソフトウェアを外部機器から取得するステップと、
前記ソフトウェアを実行するステップとを実行させ、
前記実行するステップは、
前記コントローラまたは前記外部機器を一意に識別するための第１固有情報から前記ソフトウェアの実行権を生成するステップと、
前記実行権の生成後の所定のタイミングにおいて前記実行権から第２固有情報を生成し、当該第２固有情報が前記第１固有情報と一致しないときに、前記ソフトウェアの利用を禁止するステップとを含む、管理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、コントローラにダウンロードされたソフトウェアの利用を管理するための技術に関する。
【背景技術】
【０００２】
様々な生産現場において、生産工程を自動化するＦＡ（Factory  Automation）システムが普及している。ＦＡシステムは、種々の産業用の駆動機器によって構成される。産業用の駆動機器は、たとえば、ワークを移動するための移動テーブルや、ワークを搬送するためのコンベアや、予め定められた目的の場所までワーク移動するためのアームロボットなどを含む。これらの駆動機器は、ＰＬＣ（Programmable Logic Controller）やロボットコントローラなどの産業用のコントローラによって制御される。
【０００３】
近年、外部機器からソフトウェアをインストールすることができるコントローラが普及している。このようなコントローラが、国際公開第２０１５／１３６９６５号（特許文献１）、国際公開第２０１５／１３６９７２号（特許文献２）、国際公開第２０１５／１３６９６６号（特許文献３）、および、国際公開第２０１５／１３６９６４号（特許文献４）に開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】国際公開第２０１５／１３６９６５号
【特許文献２】国際公開第２０１５／１３６９７２号
【特許文献３】国際公開第２０１５／１３６９６６号
【特許文献４】国際公開第２０１５／１３６９６４号
【発明の概要】
【発明が解決しようとする課題】
【０００５】
近年、種々のソフトウェアが開発されており、ソフトウェアのライセンスの管理が複雑化となっている。ライセンスが適切に管理されていない場合、購入されたソフトウェアが不正にコピーされて、ソフトウェアがライセンスを有さない他のコントローラで不正に利用される可能性がある。したがって、このような不正利用を防止する仕組みが望まれている。
【０００６】
本開示は上述のような問題点を解決するためになされたものであって、ある局面における目的は、コントローラにダウンロードされるソフトウェアの不正利用を防止できる仕組みを提供することである。
【課題を解決するための手段】
【０００７】
本開示の一例では、上記コントローラで利用されるソフトウェアを外部機器から取得するための取得部と、上記ソフトウェアを実行するためのプロセッサとを備える。上記ソフトウェアは、上記コントローラまたは上記外部機器を一意に識別するための第１固有情報から上記ソフトウェアの実行権を生成するための生成モジュールと、上記実行権の生成後の所定のタイミングにおいて上記実行権から第２固有情報を生成し、当該第２固有情報が上記第１固有情報と一致しないときに、上記ソフトウェアの利用を禁止するためのチェックモジュールとを含む。
【０００８】
この開示によれば、ライセンス情報に基づいて、取得したソフトウェアの利用が禁止されることで、当該ソフトウェアの不正利用が防止される。
【０００９】
本開示の一例では、上記コントローラと通信可能に構成されている通信機器を含む。上記取得部は、上記コントローラと通信接続された上記通信機器から上記ソフトウェアをダウンロードする。
【００１０】
この開示によれば、通信機器からダウンロードしたソフトウェアの不正利用が防止される。
【００１１】
本開示の一例では、上記外部機器は、上記コントローラに電気的に接続され得るメモリカードを含む。上記取得部は、上記コントローラに電気的に接続されたメモリカードから上記ソフトウェアを取得する。
【００１２】
この開示によれば、メモリカードから取得したソフトウェアの不正利用が防止される。
本開示の一例では、上記プロセッサは、上記取得したソフトウェアを上記コントローラから上記外部機器に移すときに、上記実行権を削除する。
【００１３】
この開示によれば、ソフトウェアのライセンス情報が複数存在することがなくなり、ソフトウェアの不正利用がより確実に防止される。
【００１４】
本開示の一例では、上記プロセッサは、上記取得したソフトウェアを上記コントローラから上記外部機器に移すときに、上記生成モジュールおよび上記チェックモジュールを削除する。
【００１５】
この開示によれば、生成モジュールおよびチェックモジュールが削除されることで、コントローラの資源が有効に利用され得る。
【００１６】
本開示の一例では、上記外部機器から取得され得るソフトウェアは、上記コントローラのファームウェア上で動作するプログラムと、当該ファームウェアに追加されるプログラムと、上記コントローラで利用され得るデータとの少なくとも１つを含む。
【００１７】
この開示によれば、不正利用の防止がファームウェア上で動作するプログラムと、当該ファームウェアに追加されるプログラムとの不正利用が防止される。
【００１８】
本開示の他の例では、制御対象を制御するコントローラで利用されるソフトウェアのライセンスの管理方法は、上記コントローラで利用されるソフトウェアと、当該ソフトウェアについての第１ライセンス情報とを外部機器から取得するステップと、上記ソフトウェアを実行するステップとを備える。上記実行するステップは、上記コントローラまたは上記外部機器を一意に識別するための第１固有情報から上記ソフトウェアの実行権を生成するステップと、上記実行権の生成後の所定のタイミングにおいて上記実行権から第２固有情報を生成し、当該第２固有情報が上記第１固有情報と一致しないときに、上記ソフトウェアの利用を禁止するステップとを含む。
【００１９】
この開示によれば、ライセンス情報に基づいて、取得したソフトウェアの利用が禁止されることで、当該ソフトウェアの不正利用が防止される。
【００２０】
本開示の他の例では、制御対象を制御するコントローラで利用されるソフトウェアのライセンスの管理プログラムは、上記管理プログラムは、上記コントローラに、制御対象を制御するコントローラで利用されるソフトウェアを外部機器から取得するステップと、上記ソフトウェアを実行するステップとを実行させる。上記実行するステップは、上記コントローラまたは上記外部機器を一意に識別するための第１固有情報から上記ソフトウェアの実行権を生成するステップと、上記実行権の生成後の所定のタイミングにおいて上記実行権から第２固有情報を生成し、当該第２固有情報が上記第１固有情報と一致しないときに、上記ソフトウェアの利用を禁止するステップとを含む。
【００２１】
この開示によれば、ライセンス情報に基づいて、取得したソフトウェアの利用が禁止されることで、当該ソフトウェアの不正利用が防止される。
【発明の効果】
【００２２】
ある局面において、コントローラにダウンロードされるソフトウェアの不正利用を防止できる。
【図面の簡単な説明】
【００２３】
【図１】実施の形態に従うＦＡシステムの概略を示す図である。
【図２】実施の形態に従うＦＡシステムの装置構成を概略的に示す模式図である。
【図３】パッケージソフトをダウンロード販売する仕組みを示す図である。
【図４】コントローラと開発支援装置とサーバとの間のデータの流れを示すシーケンス図である。
【図５】ソフトウェア管理テーブルのデータ構造を示す図である。
【図６】実施の形態に従うコントローラのハードウェア構成の一例を示す模式図である。
【図７】実施の形態に従う外部機器のハードウェア構成を示す模式図である。
【図８】パッケージソフトを開発支援装置からダウンロードする処理を表わすフローチャートである。
【図９】パッケージソフトの利用を有効化する処理を表わすフローチャートである。
【図１０】実行権のチェック処理を表わすフローチャートである。
【図１１】ダウンロードしたパッケージソフトの実行処理を表わすフローチャートである。
【図１２】パッケージソフトをメモリカードで販売する仕組みを示す図である。
【図１３】パッケージソフトをメモリカードからダウンロードする処理を表わすフローチャートである。
【図１４】パッケージソフトのディプロイ処理の流れを概略的に示す図である。
【図１５】図１４に示されるディプロイ処理の続きを示す図である。
【図１６】コントローラとメモリカードとの間でパッケージソフトを移している様子を示す図である。
【図１７】パッケージソフトをＢＴＯ（Build To Order）販売する仕組みを示す図である。
【発明を実施するための形態】
【００２４】
以下、図面を参照しつつ、本発明に従う各実施の形態について説明する。以下の説明では、同一の部品および構成要素には同一の符号を付してある。それらの名称および機能も同じである。したがって、これらについての詳細な説明は繰り返さない。
【００２５】
＜Ａ．適用例＞
図１を参照して、本発明の適用例について説明する。図１は、ＦＡシステム１０の概略を示す図である。
【００２６】
ＦＡシステム１０は、設備および装置などの制御対象を制御し、生産工程を自動化するためのシステムである。ＦＡシステム１０は、１つ以上のコントローラ１００と、１つ以上の外部機器２００と、１つ以上の駆動機器３００とで構成されている。
【００２７】
コントローラ１００は、ハードウェア構成として、取得部１０１と、プロセッサ１０２と、記憶装置１１０とを含む。記憶装置１１０は、外部機器２００からダウンロードしたパッケージソフト１４１と、コントローラ１００の固有情報１４３Ａとを格納している。
【００２８】
外部機器２００は、コントローラ１００で実行可能な種々のソフトウェアを提供する。このような外部機器２００としては、後述の開発支援装置２００Ａ（図２参照）、後述のサーバ２００Ｂ（図２参照）、後述のメモリカード２００Ｃ（図２参照）などが挙げられる。
【００２９】
取得部１０１は、外部機器２００からソフトウェアを取得する機能を有する任意のハードウェアである。一例として、取得部１０１は、外部機器２００と通信するための通信インターフェイスや、ＳＤカードなどのメモリカードが接続されるメモリカードインターフェイスなどを含む。
【００３０】
図１の例では、外部機器２００からダウンロードされたソフトウェアがパッケージソフト１４１として示されている。パッケージソフト１４１は、種々の機能がパッケージ化された販売対象のプログラムの単位を示す。パッケージソフト１４１の一例として、コントローラ１００への追加機能やデータなどが挙げられる。
【００３１】
プロセッサ１０２は、コントローラ１００の各種プログラムを実行することで、制御対象である駆動機器３００を制御する。一例として、プロセッサ１０２によって実行されるプログラムは、ダウンロードされたパッケージソフト１４１などの各種プログラムを含む。
【００３２】
ダウンロードされたパッケージソフト１４１は、生成モジュール１５４と、チェックモジュール１５６と、その他の機能モジュールとを含む。当該その他の機能モジュールがユーザによって利用され得る機能モジュールであり、生成モジュール１５４およびチェックモジュール１５６は、当該機能モジュールに付随するものである。
【００３３】
生成モジュール１５４は、コントローラ１００を一意に識別するための固有情報１４３Ａ（第１固有情報）からパッケージソフト１４１の実行権１３９を生成する。実行権１３９は、パッケージソフト１４１の実行を行うための権限に相当する。すなわち、実行権１３９を保持しているコントローラ１００がパッケージソフト１４１を実行することができる。固有情報１４３Ａは、たとえば、コントローラ１００またはプロセッサ１０２の、形式、生産情報（製造番号など）、名前、および、コントローラ１００を一意に識別するためのその他の情報を含む。
【００３４】
実行権１３９の生成方法は、任意である。一例として、生成モジュール１５４は、予め定められた暗号化方式で固有情報１４３Ａを暗号化することで実行権１３９を生成する。この場合、生成モジュール１５４は、所定の暗号化キーを用いて実行権１３９を生成する。あるいは、生成モジュール１５４は、可逆計算が可能な予め定められた算出式に固有情報１４３Ａを代入して得られた結果を実行権１３９として生成してもよい。生成された実行権１３９は、記憶装置１１０に格納される。
【００３５】
チェックモジュール１５６は、コントローラ１００の起動時やパッケージソフト１４１の実行時など実行権１３９の生成後の所定のタイミングにおいて、実行権１３９から固有情報（第２固有情報）を生成する。以下では、説明の便宜のために、コントローラ１００に予め保持されている固有情報を「固有情報１４３Ａ」と称し、実行権１３９の生成後に実行権１３９から生成された固有情報を「固有情報１４３Ｂ」と称する。チェックモジュール１５６は、固有情報１４３Ｂが本来の固有情報１４３Ａと一致しないときに、パッケージソフト１４１の利用を禁止する。
【００３６】
より具体的には、チェックモジュール１５６は、復号化モジュール１５６Ａと、比較モジュール１５６Ｂとを含む。復号化モジュール１５６Ａは、所定の復号化キーを利用する予め定められた復号化方式で実行権１３９を復号化し、固有情報１４３Ｂを生成する。
【００３７】
比較モジュール１５６Ｂは、コントローラ１００の起動時またはパッケージソフト１４１の利用時に生成された固有情報１４３Ｂを本来の固有情報１４３Ａと比較する。固有情報１４３Ｂが固有情報１４３Ａと一致する場合、比較モジュール１５６Ｂは、ダウンロードしたパッケージソフト１４１の利用を許可する。一方で、固有情報１４３Ｂが固有情報１４３Ａと一致しない場合、比較モジュール１５６Ｂは、ダウンロードしたパッケージソフト１４１の利用を禁止する。
【００３８】
ここでいう「一致する」とは、固有情報１４３Ｂの全てが固有情報１４３Ａの全てと一致する場合だけでなく、固有情報１４３Ｂの所定箇所が固有情報１４３Ａの所定箇所と一致する場合も含み得る。「一致しない」とは、「一致する」との条件が満たされない場合を指す。
【００３９】
以上のように、本来の固有情報１４３Ａと、パッケージソフト１４１の実行時などに生成される固有情報１４３Ｂとの比較結果に基づいて、パッケージソフト１４１の利用の許可／禁止が切り替えられる。これにより、たとえば、パッケージソフト１４１がダウンロード時とは異なるコントローラに不正に移動された場合に、パッケージソフト１４１の利用を防止することができる。また、ライセンスをチェックする仕組みがパッケージソフト１４１に組み込まれていることで、ライセンスのチェック機能をコントローラ１００に予め搭載する必要がなくなる。
【００４０】
＜Ｂ．ＦＡシステム１０の装置構成＞
図２を参照して、ＦＡシステム１０の装置構成の一例について説明する。図２は、ＦＡシステム１０の装置構成を概略的に示す模式図である。
【００４１】
ＦＡシステム１０は、１つ以上のコントローラ１００と、１つ以上の外部機器２００とを含む。図２の例では、ＦＡシステム１０は、２つのコントローラ１００Ａ，１００Ｂで構成されている。コントローラ１００に接続され得る外部機器２００の例として、開発支援装置２００Ａと、サーバ２００Ｂと、メモリカード２００Ｃとが示されている。
【００４２】
以下では、コントローラ１００Ａ，１００Ｂを総称してコントローラ１００ともいう。コントローラ１００は、複数の物理的な通信ポートを有する。それぞれの通信ポートには異なるネットワークが接続され得る。図２の例では、コントローラ１００は、２つの通信ポートＰ１，Ｐ２を有する。通信ポートＰ１には、ネットワークＮＷ１が接続されている。通信ポートＰ２には、ネットワークＮＷ２が接続されている。
【００４３】
ネットワークＮＷ１には、たとえば、ＥｔｈｅｒＮｅｔ／ＩＰ（登録商標）やＥｔｈｅｒＮｅｔ（登録商標）などが採用される。一例として、ネットワークＮＷ１には、開発支援装置２００Ａやサーバ２００Ｂなど、コントローラ１００との通信機能を有する各種通信機器が接続され得る。
【００４４】
開発支援装置２００Ａは、たとえば、ＰＣ（Personal Computer）、タブレット端末、または、スマートフォンなどである。開発支援装置２００Ａには、プログラム開発ツールがインストールされ得る。プログラム開発ツールは、コントローラ１００用の制御プログラムの開発を支援するためのアプリケーションである。一例として、プログラム開発ツールは、オムロン社製の「Ｓｙｓｍａｃ  Ｓｔｕｄｉｏ」である。ユーザは、プログラム開発ツール上でコントローラ１００用の制御プログラムを設計し、設計した制御プログラムをコントローラ１００にインストールすることができる。作成された制御プログラムは、開発支援装置２００Ａによってコンパイルされた実行形式のファイルとしてコントローラ１００に送られる。
【００４５】
サーバ２００Ｂは、コントローラ１００で実行可能な各種のパッケージソフト１４１を提供する装置である。提供されるパッケージソフト１４１は、たとえば、外部データーベースに接続する機能、ＮＣ（Numerical Control）制御に関する各種機能、ロボット制御に関する各種機能、ＡＩ（Artificial Intelligence）に関する各種機能、コントローラ１００で利用され得る各種データ（たとえば、ＡＩの学習処理によって得られた各種データ）、および、特定の駆動機器３００を制御するための各種機能（たとえば、振動制御機能）などを含む。なお、パッケージソフト１４１の提供元は、サーバ２００Ｂに限られず、任意の外部機器２００から提供される。一例として、パッケージソフト１４１は、メモリカード２００Ｃから提供されてもよい。
【００４６】
ネットワークＮＷ２には、データの到達時間が保証される、定周期通信を行うフィールドネットワークを採用することが好ましい。このような定周期通信を行うフィールドネットワークとしては、ＥｔｈｅｒＣＡＴ（登録商標）、ＣｏｍｐｏＮｅｔ（登録商標）などが知られている。コントローラ１００は、開発支援装置２００Ａ上で作成された制御プログラムに従って制御対象の駆動機器３００を制御する。
【００４７】
駆動機器３００は、直接的または間接的にワークに対して所定の作業を行うための機器の集合である。図２の例では、駆動機器３００は、ロボットコントローラ３００Ａや、サーボドライバ３００Ｂや、ロボットコントローラ３００Ａに制御されるアームロボット３０１Ａや、サーボドライバ３００Ｂによって制御されるサーボモータ３０１Ｂなどを含む。また、駆動機器３００は、ワークを撮影するための視覚センサや、生産工程で利用されるその他の機器などを含んでもよい。
【００４８】
＜Ｃ．パッケージソフト１４１の販売形態＞
図３を参照して、パッケージソフト１４１の販売形態の一例について説明する。図３は、パッケージソフト１４１をダウンロード販売する仕組みを示す図である。
【００４９】
図３の例では、パッケージソフト１４１の提供元のサーバ２００Ｂと、パッケージソフト１４１の提供先の開発支援装置２００Ａとが示されている。一例として、サーバ２００Ｂは、販売元の会社「Ａ」に設置されている。開発支援装置２００Ａは、パッケージソフト１４１の販売先の会社「Ｂ」に設置されている。
【００５０】
ステップ（１）において、開発支援装置２００Ａのユーザは、サーバ２００Ｂのウェブサイトなどにアクセスし、販売されているパッケージソフトの中からダウンロード対象のパッケージソフトを選択する。販売されているパッケージソフトは、コントローラ１００のファームウェア上で動作するプログラムや、ファームウェアに追加されるファームウェアプログラムなどを含む。ファームウェア上で動作するパッケージソフトは、ファームウェアから提供される基本機能に依存して動作する。
【００５１】
開発支援装置２００Ａのユーザは、購入対象のパッケージソフト１４１の選択後、購入手続きを行う。購入手続きが完了すると、サーバ２００Ｂは、購入したパッケージソフト１４１を開発支援装置２００Ａにインストールする。このとき、ステップ（２）において、サーバ２００Ｂは、パッケージソフト１４１の利用を許可するためのライセンス権１４２を開発支援装置２００Ａに送信する。
【００５２】
ステップ（３）において、開発支援装置２００Ａは、サーバ２００Ｂからインストールしたパッケージソフト１４１とライセンス権１４２とをコントローラ１００にインストールする。
【００５３】
ステップ（４）において、開発支援装置２００Ａは、パッケージソフト１４１のライセンス権を有効にするための有効化操作を受け付けたとする。このことに基づいて、開発支援装置２００Ａは、有効化命令をコントローラ１００に送信する。コントローラ１００は、有効化命令を受信したことに基づいて、コントローラ１００の固有情報１４３Ａから実行権１３９を生成する。
【００５４】
ステップ（５）において、開発支援装置２００Ａは、パッケージソフト１４１の有効化処理が正常に完了したことに基づいて、パッケージソフト１４１の利用権を行使したことをサーバ２００Ｂに送信する。このとき、利用権を行使した利用者の情報がサーバ２００Ｂに送信され、当該情報がサーバ２００Ｂに登録される。
【００５５】
＜Ｄ．データフロー＞
図４および図５を参照して、上述の図３に示されるダウンロード販売を実現するための制御フローについて説明する。図４は、コントローラ１００と開発支援装置２００Ａとサーバ２００Ｂとの間のデータの流れを示すシーケンス図である。
【００５６】
ステップＳ１０において、開発支援装置２００Ａのユーザは、サーバ２００Ｂのウェブサイトにアクセスし、パッケージソフト１４１の販売操作を行ったとする。このとき、ユーザは、パッケージソフト１４１を購入するために各種の情報（以下、「購入情報」ともいう。）を入力する。当該購入情報は、購入対象のパッケージソフト１４１を特定するための情報、購入者に関する各種情報（たとえば、名前や住所など）や、ダウンロード対象のコントローラ１００に関する各種情報を含む。入力された購入情報は、サーバ２００Ｂに送信される。
【００５７】
ステップＳ１４において、サーバ２００Ｂは、開発支援装置２００Ａから受信した購入情報に基づいて、パッケージソフト１４１のライセンス権１４２を発行する。発行されたライセンス権１４２は、購入対象のパッケージソフト１４１とともに、開発支援装置２００Ａに送信される。
【００５８】
ステップＳ２０において、開発支援装置２００Ａは、サーバ２００Ｂからダウンロードしたパッケージソフト１４１のダウンロード操作を受け付けたとする。このことに基づいて、開発支援装置２００Ａは、パッケージソフト１４１とライセンス権１４２とを指定されたコントローラ１００に送信する。
【００５９】
ステップＳ２６において、コントローラ１００は、パッケージソフト１４１を内部の記憶装置１１０（図１参照）に配置するディプロイ処理を実行する。このとき、コントローラ１００は、パッケージソフトを内部の記憶装置に配置する管理するためのソフトウェア管理テーブルを更新する。図５は、ソフトウェア管理テーブル１５５のデータ構造を示す図である。
【００６０】
ソフトウェア管理テーブル１５５は、コントローラ１００にダウンロードされたパッケージソフトを管理するためのデーターベースある。ソフトウェア管理テーブル１５５は、パッケージソフトの一覧テーブル１６０と、パッケージソフトの詳細情報１６１〜１６３とを含む。
【００６１】
パッケージソフトの一覧テーブル１６０は、パッケージソフトの略称を規定するカラム１６０Ａと、パッケージソフトのバージョンを規定するカラム１６０Ｂと、パッケージソフトの分類を規定するカラム１６０Ｃと、パッケージソフトのアドオンタイプを規定するカラム１６０Ｄと、パッケージソフトの提供形態を規定するカラム１６０Ｅと、パッケージソフトのフルネームを規定するカラム１６０Ｆと、パッケージソフトの提供元を規定するカラム１６０Ｆとを含む。
【００６２】
パッケージソフトの一覧テーブル１６０の各レコードは、パッケージソフトの詳細情報に関連付けられている。一例として、一覧テーブル１６０のカラム１６０Ａの情報をキーとして、各パッケージソフト１４１の詳細情報が関連付けられる。図５の例では、「ＥＣＡＴ」として示されるパッケージ名には、詳細情報１６１が関連付けられている。「ＡＩ」として示されるパッケージ名には、詳細情報１６２，１６３とが関連付けられている。
【００６３】
詳細情報１６１は、パッケージソフトの略称を規定するカラム１６１Ａと、対応言語の種類を示すカラム１６１Ｂと、パッケージソフトのフルネームを規定するカラム１６１Ｃと、パッケージソフトの提供元を規定するカラム１６１Ｄとを含む。
【００６４】
詳細情報１６２は、パッケージソフトの略称を規定するカラム１６２Ａと、対応言語の種類を示すカラム１６２Ｂと、パッケージソフトのフルネームを規定するカラム１６２Ｃと、パッケージソフトの提供元を規定するカラム１６２Ｄとを含む。
【００６５】
詳細情報１６３は、パッケージソフトに含まれる各種メソッド（処理）が規定されている。詳細情報１６３は、メソッドの名前を示すカラム１６３Ａと、パッケージソフトの呼出しのタイプを示すカラム１６３Ｂと、パッケージソフトのディプロイメソッドを規定しているカラム１６３Ｃと、パッケージソフトのロールバックメソッドを規定しているカラム１６３Ｄとを含む。
【００６６】
再び図４を参照して、ステップＳ２８において、コントローラ１００は、上述の生成モジュール１５４（図１参照）として、自身の固有情報１４３Ａから実行権１３９を生成する。生成モジュール１５４は、予め定められた暗号化方式で固有情報１４３Ａから実行権１３９を生成する。一例として、生成モジュール１５４は、所定の暗号化キーを用いて実行権１３９を生成する。生成された実行権１３９は、コントローラ１００の記憶装置１１０に格納される。
【００６７】
ステップＳ３０において、コントローラ１００は、所定のタイミングが到来したか否かを判断する。当該所定のタイミングは、たとえば、コントローラ１００の起動時や、パッケージソフト１４１の実行時や、実行権１３９の生成後の予め定められた任意のタイミングを含む。コントローラ１００は、当該所定のタイミングが到来したと判断した場合（ステップＳ３０においてＹＥＳ）、制御をステップＳ３２に切り替える。そうでない場合には（ステップＳ３０においてＮＯ）、コントローラ１００は、ステップＳ３０の処理を再び実行する。
【００６８】
ステップＳ３２において、コントローラ１００は、上述のチェックモジュール１５６（図１参照）として、ステップＳ２８で生成した実行権１３９から固有情報１４３Ｂを生成する。一例として、コントローラ１００は、ステップＳ２８で固有情報１４３Ａから実行権１３９を生成するために用いられた暗号化方式に対応する復号化方式で実行権１３９を復号化し、固有情報１４３Ｂを生成する。
【００６９】
ステップＳ４０において、コントローラ１００は、上述のチェックモジュール１５６（図１参照）として、ステップＳ３２で生成された固有情報１４３Ｂが本来の固有情報１４３Ａと一致するか否かを判断する。コントローラ１００は、生成された固有情報１４３Ｂが本来の固有情報１４３Ａと一致すると判断した場合（ステップＳ４０においてＹＥＳ）、制御をステップＳ４２に切り替える。そうでない場合には（ステップＳ４０においてＮＯ）、コントローラ１００は、制御をステップＳ４４に切り替える。
【００７０】
ステップＳ４２において、コントローラ１００は、ダウンロードしたパッケージソフト１４１の利用を許可する。パッケージソフト１４１の利用を許可する手段は、任意である。一例として、利用の禁止／許可を示すフラグがコントローラ１００で管理されており、コントローラ１００は、許可を示すように当該フラグを書き換える。
【００７１】
ステップＳ４４において、コントローラ１００は、ダウンロードしたパッケージソフト１４１の利用を禁止する。パッケージソフト１４１の利用を禁止する手段は、任意である。一例として、利用の禁止／許可を示すフラグがコントローラ１００で管理されており、コントローラ１００は、禁止を示すように当該フラグを書き換える。
【００７２】
＜Ｅ．ハードウェア構成＞
図６および図７を参照して、コントローラ１００および外部機器２００のハードウェア構成について順に説明する。
【００７３】
（Ｅ１．コントローラ１００のハードウェア構成）
まず、図６を参照して、コントローラ１００のハードウェア構成について説明する。図６は、コントローラ１００のハードウェア構成の一例を示す模式図である。
【００７４】
コントローラ１００は、通信インターフェイス１０１Ａと、メモリカードインターフェイス１０１Ｂと、ＣＰＵ（Central Processing Unit）やＭＰＵ（Micro-Processing Unit）などのプロセッサ１０２と、チップセット１０４と、主メモリ１０６と、不揮発性の記憶装置１１０と、内部バスコントローラ１２２と、フィールドバスコントローラ１２４とを含む。
【００７５】
プロセッサ１０２は、記憶装置１１０に格納された制御プログラム１３０を読み出して、主メモリ１０６に展開して実行することで、制御対象の駆動機器３００などに対する任意の制御を実現する。制御プログラム１３０は、コントローラ１００を制御するための各種プログラムを含む。一例として、制御プログラム１３０は、ファームウェアとしてのシステムプログラム１４０、パッケージソフト１４１、ユーザプログラム１４５などを含む。システムプログラム１４０は、データの入出力処理や実行タイミング制御などの、コントローラ１００の基本機能を提供するための命令コードを含む。ユーザプログラム１４５は、外部機器２００からダウンロードされたものである。ユーザプログラム１４５は、制御対象に応じて外部機器２００上で任意に設計され、シーケンス制御を実行するためのシーケンスプログラム１４５Ａおよびモーション制御を実行するためのモーションプログラム１４５Ｂとを含む。
【００７６】
チップセット１０４は、各コンポーネントを制御することで、コントローラ１００全体としての処理を実現する。
【００７７】
記憶装置１１０は、制御プログラム１３０の他にも種々のデータを格納する。一例として、記憶装置１１０は、パッケージソフト１４１のライセンス権１４２と、コントローラ１００を一意に識別するための固有情報１４３Ａと、上述のソフトウェア管理テーブル１５５（図５参照）などを格納する。ライセンス権１４２は、パッケージソフト１４１の実行権１３９を含む。実行権１３９は、たとえば、たとえば、パッケージソフト１４１のダウンロード時（配置時）など予め定められたタイミングで生成される。
【００７８】
内部バスコントローラ１２２は、コントローラ１００と内部バスを通じて連結される各種デバイスとデータを遣り取りするインターフェイスである。このようなデバイスの一例として、Ｉ／Ｏユニット１２６が接続されている。
【００７９】
フィールドバスコントローラ１２４は、コントローラ１００とフィールドバスを通じて連結される各種の駆動機器３００とデータを遣り取りするインターフェイスである。このようなデバイスの一例として、ロボットコントローラ３００Ａやサーボドライバ３００Ｂが接続されている。他にも、視覚センサなどの駆動機器が接続されてもよい。
【００８０】
内部バスコントローラ１２２およびフィールドバスコントローラ１２４は、接続されているデバイスに対して任意の指令を与えることができるとともに、デバイスが管理している任意のデータを取得することができる。また、内部バスコントローラ１２２および／またはフィールドバスコントローラ１２４は、ロボットコントローラ３００Ａやサーボドライバ３００Ｂとの間でデータを遣り取りするためのインターフェイスとしても機能する。
【００８１】
通信インターフェイス１０１Ａは、上述の取得部１０１（図１参照）の一例である。通信インターフェイス１０１Ａは、各種の有線／無線ネットワークを通じたデータの遣り取りを制御する。コントローラ１００は、通信インターフェイス１０１Ａを介して、開発支援装置２００Ａやサーバ２００Ｂなどの外部機器２００と通信を行う。コントローラ１００は、通信インターフェイス１０１Ａを介して外部機器２００からパッケージソフト１４１などをダウンロードすることができる。
【００８２】
メモリカードインターフェイス１０１Ｂは、上述の取得部１０１（図１参照）の一例である。メモリカードインターフェイス１０１Ｂは、外部記憶媒体の一例であるメモリカード２００Ｃ（たとえば、ＳＤカード）を電気的に接続するためのインターフェイスである。メモリカードインターフェイス１０１Ｂは、メモリカード２００Ｃを着脱可能に構成されており、メモリカード２００Ｃに対してデータを書き込み、メモリカード２００Ｃからデータを読出すことが可能になっている。コントローラ１００は、メモリカードインターフェイス１０１Ｂを介してメモリカード２００Ｃからパッケージソフト１４１などをダウンロードすることができる。また、メモリカード２００Ｃには、パッケージソフト１４１のライセンス権１４２や、メモリカード２００Ｃを一意に識別するための固有情報２４３Ａなどが格納されている。
【００８３】
（Ｅ２．外部機器２００のハードウェア構成）
次に、図７を参照して、外部機器２００のハードウェア構成について説明する。図７は、外部機器２００のハードウェア構成を示す模式図である。
【００８４】
外部機器２００は、一例として、汎用的なコンピュータアーキテクチャに準じて構成されるコンピュータからなる。外部機器２００は、たとえば、上述の開発支援装置２００Ａまたは上述のサーバ２００Ｂである。外部機器２００は、ＣＰＵやＭＰＵなどの制御装置２０２と、主メモリ２０４と、不揮発性の記憶装置２０８と、通信インターフェイス２１１と、Ｉ／Ｏ（Input/Output）インターフェイス２１４と、表示インターフェイス２２０とを含む。これらのコンポーネントは、内部バス２２５を介して互いに通信可能に接続されている。
【００８５】
制御装置２０２は、記憶装置２０８に格納されている開発支援プログラム２０８Ａを主メモリ２０４に展開して実行することで、プログラム開発ツールにおける各種処理を実現する。開発支援プログラム２０８Ａは、ユーザプログラム１４５の開発環境を提供するためのプログラムである。記憶装置２０８は、開発支援プログラム２０８Ａの他にも、配布対象のパッケージソフト１４１など各種データを格納する。
【００８６】
通信インターフェイス２１１は、他の通信機器との間でネットワークを介してデータを遣り取りする。当該他の通信機器は、たとえば、コントローラ１００、サーバなどの外部機器を含む。外部機器２００は、通信インターフェイス２１１を介して、当該他の通信機器から、開発支援プログラム２０８Ａなどの各種プログラムをダウンロード可能なように構成されてもよい。
【００８７】
Ｉ／Ｏインターフェイス２１４は、操作部２１５に接続され、操作部２１５からのユーザ操作を示す信号を取り込む。操作部２１５は、典型的には、キーボード、マウス、タッチパネル、タッチパッドなどからなり、ユーザからの操作を受け付ける。
【００８８】
表示インターフェイス２２０は、表示部２２１と接続され、制御装置２０２などからの指令に従って、表示部２２１に対して、画像を表示するための画像信号を送出する。表示部２２１は、ＬＣＤ（Liquid Crystal Display）や有機ＥＬ（Electro Luminescence）ディスプレイなどからなり、ユーザに対して各種情報を提示する。表示部２２１には、プログラム開発ツールによって提供される各種画面が表示され得る。なお、図７の例では、外部機器２００および表示部２２１が別体として示されているが、外部機器２００および表示部２２１は、一体的に構成されてもよい。
【００８９】
＜Ｆ．制御構造＞
図８〜図１２を参照して、コントローラ１００の制御構造について説明する。図８は、パッケージソフト１４１を開発支援装置２００Ａからダウンロードする処理を表わすフローチャートである。図９は、実行権１３９を生成することでパッケージソフト１４１の利用を有効化する処理を表わすフローチャートである。図１０は、実行権１３９のチェック処理を表わすフローチャートである。図１１は、ダウンロードしたパッケージソフト１４１の実行処理を表わすフローチャートである。
【００９０】
図８〜図１１に示される処理は、コントローラ１００のプロセッサ１０２がプログラムを実行することにより実現される。他の局面において、処理の一部または全部が、回路素子またはその他のハードウェアによって実行されてもよい。
【００９１】
以下では、図８〜図１１に示されるフローチャートについて順に説明する。
（Ｆ１．パッケージソフト１４１のダウンロード処理）
まず、図８を参照して、開発支援装置２００Ａからのパッケージソフト１４１のダウンロード処理について説明する。
【００９２】
ステップＳ１１０において、プロセッサ１０２は、パッケージソフト１４１のダウンロード命令を開発支援装置２００Ａから受信したか否かを判断する。当該ダウンロード命令は、たとえば、ユーザが開発支援装置２００Ａに対してダウンロード操作を行うことにより発せられる。プロセッサ１０２は、パッケージソフト１４１のダウンロード命令を開発支援装置２００Ａから受信したと判断した場合（ステップＳ１１０においてＹＥＳ）、制御をステップＳ１２０に切り替える。そうでない場合には（ステップＳ１１０においてＮＯ）、図８に示されるダウンロード処理を終了する。
【００９３】
ステップＳ１２０において、プロセッサ１０２は、ダウンロード対象のパッケージソフト１４１がダウンロード先のコントローラ１００に対応しているか否かを判断する。より具体的には、プロセッサ１０２は、ダウンロード対象のパッケージソフト１４１に関するソフト情報を外部機器２００から受信する。当該ソフト情報は、たとえば、対応しているコントローラ１００の形式情報などを含む。コントローラ１００は、パッケージ情報に規定されている形式情報を、コントローラ１００の形式情報と比較し、これらの形式情報が対応しているか否かを判断する。これらの形式情報が一致する場合、プロセッサ１０２は、ダウンロード対象のパッケージソフト１４１がコントローラ１００に対応していると判断する。
【００９４】
プロセッサ１０２は、ダウンロード対象のパッケージソフト１４１がコントローラ１００に対応していると判断した場合（ステップＳ１２０においてＹＥＳ）、制御をステップＳ１２２に切り替える。そうでない場合には（ステップＳ１２０においてＮＯ）、プロセッサ１０２は、制御をステップＳ１２６に切り替える。
【００９５】
ステップＳ１２２において、プロセッサ１０２は、パッケージソフト１４１と、当該パッケージソフト１４１のライセンス権１４２とを開発支援装置２００Ａから受信する。
【００９６】
ステップＳ１２４において、プロセッサ１０２は、受信したパッケージソフト１４１とライセンス権１４２とをコントローラ１００の記憶装置１１０に保存する。
【００９７】
ステップＳ１２６において、プロセッサ１０２は、ダウンロード対象のパッケージソフト１４１がコントローラ１００に対応していないことを示すエラーを出力する。当該エラーの出力態様は、任意である。一例として、当該エラーは、エラーログとして出力されてもよいし、エラー音やメッセージなどで出力されてもよい。
【００９８】
（Ｆ２．有効化処理）
次に、図９を参照して、パッケージソフト１４１の利用を有効化するための有効化処理について説明する。当該有効化処理の実行は、任意のタイミングで開始される。一例として、当該有効化処理の実行は、開発支援装置２００Ａが有効化命令を受信しことに基づいて開始される。当該有効化命令は、たとえば、ユーザが開発支援装置２００Ａに対して有効化操作を行ったことに基づいて指定されたコントローラ１００に発せられ。有効化処理の実行が開始されると、図９に示される各処理が順次実行される。
【００９９】
ステップＳ１８０において、コントローラ１００のプロセッサ１０２は、パッケージソフト１４１のライセンス権１４２があるか否かを判断する。典型的には、プロセッサ１０２は、ライセンス権１４２がコントローラ１００の記憶装置１１０に格納されているか否かに基づいて、ライセンス権１４２の有無を判断する。プロセッサ１０２は、パッケージソフト１４１のライセンス権１４２があると判断した場合（ステップＳ１８０においてＹＥＳ）、制御をステップＳ１８２に切り替える。そうでない場合には（ステップＳ１８０においてＮＯ）、プロセッサ１０２は、制御をステップＳ１８４に切り替える。
【０１００】
ステップＳ１８２において、プロセッサ１０２は、上述の生成モジュール１５４（図１参照）として、コントローラ１００の固有情報１４３Ａからパッケージソフト１４１の実行権１３９を生成する。
【０１０１】
ステップＳ１８４において、プロセッサ１０２は、パッケージソフト１４１のライセンス権がないことを示すエラーを出力する。当該エラーの出力態様は、任意である。一例として、当該エラーは、エラーログとして出力されてもよいし、エラー音やメッセージなどで出力されてもよい。
【０１０２】
（Ｆ３．実行権のチェック処理）
次に、図１０を参照して、図９で生成された実行権のチェック処理について説明する。当該チェック処理は、パッケージソフト１４１の利用を有効化または無効化する処理である。当該チェック処理の実行は、任意のタイミングで開始される。一例として、当該チェック処理の実行は、コントローラ１００の起動時や、パッケージソフト１４１の実行時などに開始される。ライセンスのチェック処理の実行が開始されると、図１０に示される各処理が順次実行される。
【０１０３】
より具体的には、ステップＳ２１０において、プロセッサ１０２は、パッケージソフト１４１の実行権１３９が存在するか否かを判断する。プロセッサ１０２は、パッケージソフト１４１の実行権１３９が存在すると判断した場合（ステップＳ２１０においてＹＥＳ）、制御をステップＳ２１２に切り替える。そうでない場合には（ステップＳ２１０においてＮＯ）、プロセッサ１０２は、制御をステップＳ２２４に切り替える。
【０１０４】
ステップＳ２１２において、プロセッサ１０２は、上述の復号化モジュール１５６Ａ（図１参照）として、実行権１３９からコントローラ１００の固有情報１４３Ｂを生成する。固有情報１４３Ｂは、たとえば、コントローラ１００またはプロセッサ１０２の製造番号、コントローラ名、ＭＡＣアドレス、または、コントローラ１００を一意に識別するためのその他の情報を含む。
【０１０５】
ステップＳ２２０において、プロセッサ１０２は、上述の比較モジュール１５６Ｂ（図１参照）として、ステップＳ２１２で生成した固有情報１４３Ｂがコントローラ１００に格納されている本来の固有情報１４３Ａに一致しているか否かを判断する。プロセッサ１０２は、固有情報１４３Ｂがコントローラ１００の本来の固有情報１４３Ａに一致していると判断した場合（ステップＳ２２０においてＹＥＳ）、制御をステップＳ２２２に切り替える。そうでない場合には（ステップＳ２２０においてＮＯ）、プロセッサ１０２は、制御をステップＳ２２４に切り替える。
【０１０６】
ステップＳ２２２において、プロセッサ１０２は、パッケージソフト１４１の利用を許可する。一例として、利用の禁止／許可を示すフラグがコントローラ１００の記憶装置１１０で管理されており、プロセッサ１０２は、許可を示すように当該フラグを書き換える。
【０１０７】
ステップＳ２２４において、プロセッサ１０２は、パッケージソフト１４１の利用を禁止する。一例として、利用の禁止／許可を示すフラグがコントローラ１００の記憶装置１１０で管理されており、プロセッサ１０２は、禁止を示すように当該フラグを書き換える。
【０１０８】
（Ｆ４．パッケージソフト１４１の実行処理）
次に、図１１を参照して、ダウンロードしたパッケージソフト１４１の実行処理について説明する。
【０１０９】
ステップＳ３１０において、プロセッサ１０２は、パッケージソフト１４１の実行命令を受け付けたか否かを判断する。プロセッサ１０２は、パッケージソフト１４１の実行命令を受け付けたと判断した場合（ステップＳ３１０においてＹＥＳ）、制御をステップＳ３２０に切り替える。そうでない場合には（ステップＳ３１０においてＮＯ）、プロセッサ１０２は、ステップＳ３１０の処理を再び実行する。
【０１１０】
ステップＳ３２０において、プロセッサ１０２は、実行対象のパッケージソフト１４１の利用が許可されているか否かを判断する。一例として、プロセッサ１０２は、パッケージソフト１４１の利用の禁止／許可を示すフラグが許可を示す場合に、プロセッサ１０２は、パッケージソフト１４１の利用が許可されていると判断する。プロセッサ１０２は、実行対象のパッケージソフト１４１の利用が許可されていると判断した場合（ステップＳ３２０においてＹＥＳ）、制御をステップＳ３２２に切り替える。そうでない場合には（ステップＳ３２０においてＮＯ）、プロセッサ１０２は、制御をステップＳ３２４に切り替える。
【０１１１】
ステップＳ３２２において、プロセッサ１０２は、パッケージソフト１４１を実行する。
【０１１２】
ステップＳ３２４において、プロセッサ１０２は、パッケージソフト１４１を実行せずに、パッケージソフト１４１の実行が禁止されていることを示すエラーを出力する。当該エラーの出力態様は、任意である。一例として、当該エラーは、エラーログとして出力されてもよいし、エラー音やメッセージなどで出力されてもよい。
【０１１３】
＜Ｇ．変形例１＞
（Ｇ１．パッケージソフト１４１の他の販売形態）
上述では、パッケージソフト１４１がダウンロード販売される前提で説明を行っていたが、パッケージソフト１４１の販売形態はこれに限定されない。一例として、パッケージソフト１４１は、メモリカード２００Ｃに格納された上で販売されてもよい。
【０１１４】
以下では、図１２を参照して、パッケージソフト１４１の販売形態の他の例について説明する。図１２は、パッケージソフト１４１をメモリカード２００Ｃで販売する仕組みを示す図である。
【０１１５】
図１２の例では、会社「Ａ」〜会社「Ｃ」が示されている。会社「Ａ」は、パッケージソフト１４１の管理を行うサーバ２００Ｂを有する。会社「Ｂ」は、パッケージソフト１４１を格納したメモリカード２００Ｃを販売する。会社「Ｃ」は、パッケージソフト１４１の販売先である。
【０１１６】
より具体的な販売形態として、ステップ（１）において、会社「Ｂ」において、販売対象のパッケージソフト１４１を格納したメモリカード２００Ｃが製造される。
【０１１７】
ステップ（２）において、会社「Ｂ」は、パッケージソフト１４１の登録を会社「Ａ」に対して行う。このとき、販売対象のパッケージソフト１４１に関するパッケージ情報が会社「Ａ」のサーバ２００Ｂに送信される。サーバ２００Ｂは、受信したパッケージ情報に基づいて、パッケージソフト１４１の登録処理を行う。
【０１１８】
ステップ（３）において、会社「Ｃ」の購入者は、会社「Ｂ」のウェブサイトなどにアクセスし、購入対象のパッケージソフト１４１を選択し、購入手続きを行う。購入手続きが完了すると、会社「Ｂ」は、購入されたパッケージソフト１４１を格納したメモリカード２００Ｃを準備する。このとき、パッケージソフト１４１のライセンス権１４２が発行され、ライセンス権１４２は、メモリカード２００Ｃに保存される。会社「Ｂ」は、パッケージソフト１４１およびライセンス権１４２を格納したメモリカード２００Ｃを会社「Ｃ」に送る。
【０１１９】
ステップ（４）において、購入者は、購入したメモリカード２００Ｃをコントローラ１００に接続し、パッケージソフト１４１とライセンス権１４２とをメモリカード２００Ｃからインストールする。
【０１２０】
（Ｇ２．パッケージソフト１４１のダウンロード処理）
図１３を参照して、本変形例におけるパッケージソフト１４１のダウンロード処理について説明する。図１３は、パッケージソフト１４１をメモリカード２００Ｃからダウンロードする処理を表わすフローチャートである。
【０１２１】
図１３に示される処理は、コントローラ１００のプロセッサ１０２がプログラムを実行することにより実現される。他の局面において、処理の一部または全部が、回路素子またはその他のハードウェアによって実行されてもよい。
【０１２２】
ステップＳ１５０において、プロセッサ１０２は、メモリカード２００Ｃがコントローラ１００に接続されたか否かを判断する。プロセッサ１０２は、メモリカード２００Ｃがコントローラ１００に接続されたと判断した場合（ステップＳ１５０においてＹＥＳ）、制御をステップＳ１６０に切り替える。そうでない場合には（ステップＳ１５０においてＮＯ）、プロセッサ１０２は、図１３に示されるダウンロード処理を終了する。
【０１２３】
ステップＳ１６０において、プロセッサ１０２は、パッケージソフト１４１のダウンロード命令を開発支援装置２００Ａから受信したか否かを判断する。当該ダウンロード命令は、たとえば、ユーザが開発支援装置２００Ａに対してダウンロード操作を行うことにより発せられる。プロセッサ１０２は、パッケージソフト１４１のダウンロード命令を開発支援装置２００Ａから受信したと判断した場合（ステップＳ１６０においてＹＥＳ）、制御をステップＳ１７０に切り替える。そうでない場合には（ステップＳ１６０においてＮＯ）、図１３に示されるダウンロード処理を終了する。
【０１２４】
ステップＳ１７０において、プロセッサ１０２は、ダウンロード対象のパッケージソフト１４１がダウンロード先のコントローラ１００に対応しているか否かを判断する。より具体的には、プロセッサ１０２は、ダウンロード対象のパッケージソフト１４１に関するソフト情報をメモリカード２００Ｃから取得する。当該ソフト情報は、たとえば、対応しているコントローラ１００の形式情報などを含む。コントローラ１００は、パッケージ情報に規定されている形式情報を、コントローラ１００の形式情報と比較し、これらの形式情報が対応しているか否かを判断する。これらの形式情報が一致する場合、プロセッサ１０２は、ダウンロード対象のパッケージソフト１４１がダウンロード先のコントローラ１００に対応していると判断する。
【０１２５】
プロセッサ１０２は、ダウンロード対象のパッケージソフト１４１がコントローラ１００に対応していると判断した場合（ステップＳ１７０においてＹＥＳ）、制御をステップＳ１７２に切り替える。そうでない場合には（ステップＳ１７０においてＮＯ）、プロセッサ１０２は、制御をステップＳ１７６に切り替える。
【０１２６】
ステップＳ１７２において、プロセッサ１０２は、パッケージソフト１４１と、当該パッケージソフト１４１のライセンス権１４２とをメモリカード２００Ｃから取得する。
【０１２７】
ステップＳ１７４において、プロセッサ１０２は、取得したパッケージソフト１４１とライセンス権１４２とをコントローラ１００の記憶装置１１０に保存する。
【０１２８】
ステップＳ１７６において、プロセッサ１０２は、ダウンロード対象のパッケージソフト１４１がコントローラ１００に対応していないことを示すエラーを出力する。当該エラーの出力態様は、任意である。一例として、当該エラーは、エラーログとして出力されてもよいし、エラー音やメッセージなどで出力されてもよい。
【０１２９】
＜Ｈ．パッケージソフト１４１のディプロイ処理＞
図１４および図１５を参照して、パッケージソフト１４１をコントローラ１００に配置するディプロイ処理について説明する。図１４は、パッケージソフト１４１のディプロイ処理の流れを概略的に示す図である。図１５は、図１４に示されるディプロイ処理の続きを示す図である。
【０１３０】
コントローラ１００のプロセッサ１０２は、ダウンロードしたパッケージソフトを管理するパッケージ管理モジュール１５０を含む。メモリカード２００Ｃには、ダウンロード対象のパッケージソフト１４１がパッケージソフト"Ｘ"として示されている。
【０１３１】
ステップ（１）において、ある呼出し元が、パッケージソフト"Ｘ"のディプロイ命令をパッケージ管理モジュール１５０に出力する。当該呼出し元としては、たとえば、ファームウェアのＵｐｄａｔｅｒ、外部機器２００（たとえば、開発支援装置２００Ａ）、コントローラ１００内のプロセス、コントローラ１００内のライブラリなどが挙げられる。
【０１３２】
ステップ（２）において、パッケージ管理モジュール１５０は、メモリカード２００Ｃ上のパッケージソフト"Ｘ"のディプロイメソッドを実行する。ディプロイメソッドは、「Package_X.db」に予め定義されており、パッケージ管理モジュール１５０は、このメソッドを「Package_X.db」から探し実行する。
【０１３３】
ステップ（３），（４）において、ディプロイメソッド１４１Ａは、コントローラ１００のプロセッサ１０２の形式情報がパッケージソフト"Ｘ"に対応しているか否かのチェックを開始する。
【０１３４】
より具体的には、ディプロイメソッド１４１Ａは、プロセッサ１０２の固有情報１４３Ａを参照して、プロセッサ１０２の形式情報を取得する。ディプロイメソッド１４１Ａは、プロセッサ１０２の形式情報と、パッケージソフト"Ｘ"の対応形式情報とを比較し、パッケージソフト"Ｘ"をコントローラ１００に配置できるか否かをチェックする。ディプロイメソッド１４１Ａは、取得したプロセッサ１０２の形式がパッケージソフト"Ｘ"の対応形式に合致する場合、パッケージソフト"Ｘ"をコントローラ１００に配置できると判断する。そうでない場合には、ディプロイメソッドは、パッケージソフト"Ｘ"をコントローラ１００に配置できないと判断する。
【０１３５】
ステップ（５），（６）において、ディプロイメソッド１４１Ａは、ダウンロード対象のパッケージソフト１４１と、コントローラ１００に既にダウンロードされているパッケージソフト（以下、「既存のパッケージソフト」ともいう。）との間の依存関係をチェックする。
【０１３６】
より具体的には、ディプロイメソッド１４１Ａは、パッケージソフトの一覧テーブル１６０を参照して、既存のパッケージソフトの一覧を取得する。その後、ディプロイメソッド１４１Ａは、ダウンロード対象のパッケージソフト１４１と、既存のパッケージソフトとの間の依存関係をチェックする。ダウンロード対象のパッケージソフト１４１が、既存のパッケージソフトと共存できない関係にある場合、パッケージソフト"Ｘ"をコントローラ１００に配置できないと判断する。
【０１３７】
ステップ（７）において、ディプロイメソッド１４１Ａは、各種ファイル（たとえば、soファイル）をプロセッサ１０２に配置する。
【０１３８】
ステップ（８）において、ディプロイメソッド１４１Ａは、自身の情報を記述したＤＢファイル「Package_X.db」をプロセッサ１０２に配置する。当該ＤＢファイルの一例が上述の詳細情報１６１〜１６３である。
【０１３９】
ステップ（９）において、ディプロイメソッド１４１Ａは、各種ファイルの配置が終了したことに基づいて、パッケージ管理モジュール１５０にパッケージソフト"Ｘ"を登録する。
【０１４０】
ステップ（１０）において、パッケージ管理モジュール１５０は、新たに配置したパッケージソフト"Ｘ"の情報を、パッケージソフトの一覧テーブル１６０に追加する。
【０１４１】
ステップ（１１）において、パッケージ管理モジュール１５０は、パッケージ変更／追加の記録を変更履歴１６５に保存する。
【０１４２】
なお、図１４および図１５では、パッケージソフト１４１をメモリカード２００Ｃからダウンロードする場合のディプロイ処理について説明を行ったが、パッケージソフト１４１をメモリカード２００Ｃ以外の外部機器２００からパッケージソフト１４１をダウンロードする場合であっても、図１４および図１５に示されるディプロイ処理が適用され得る。
【０１４３】
＜Ｉ．パッケージソフト１４１の移動処理＞
コントローラ１００にダウンロードされたパッケージソフト１４１は、外部機器２００に移され得る。このとき、パッケージソフト１４１の実行権１３９を含むライセンス権１４２や、ライセンスのチェックを行うための各種機能モジュールがコントローラ１００から削除される。これにより、実行権１３９やライセンス権１４２が複数存在することがなくなり、ライセンス権１４２が一意に管理され得る。
【０１４４】
以下では、図１６を参照して、パッケージソフト１４１の移動処理について説明する。図１６は、コントローラ１００とメモリカード２００Ｃとの間でパッケージソフト１４１を移している様子を示す図である。
【０１４５】
図１６（Ａ）には、パッケージソフト１４１をコントローラ１００にダウンロードする前の様子が示されている。コントローラ１００は、自身の固有情報１４３Ａを格納している。メモリカード２００Ｃは、ダウンロード対象のパッケージソフト１４１と、その実行権１３９を含むライセンス権１４２と、上述の生成モジュール１５４と、上述のチェックモジュール１５６と、メモリカード２００Ｃの固有情報２４３Ａとを格納している。
【０１４６】
図１６（Ｂ）には、パッケージソフト１４１をメモリカード２００Ｃからコントローラ１００にダウンロードする場合の様子が示されている。パッケージソフト１４１が移されたことに基づいて、パッケージソフト１４１と、その実行権１３９を含むライセンス権１４２と、生成モジュール１５４と、チェックモジュール１５６とがメモリカード２００Ｃから削除される。メモリカード２００Ｃからコントローラ１００へのパッケージソフト１４１の移動機能は、たとえば、パッケージソフト１４１自体に組み込まれおり、コントローラ１００のプロセッサ１０２によって実行される。
【０１４７】
図１６（Ｃ）には、パッケージソフト１４１をコントローラ１００からメモリカード２００Ｃに移す場合の様子が示されている。パッケージソフト１４１が移されたことに基づいて、パッケージソフト１４１と、その実行権１３９を含むライセンス権１４２と、生成モジュール１５４と、チェックモジュール１５６とがコントローラ１００から削除される。コントローラ１００からメモリカード２００Ｃへのパッケージソフト１４１の移動機能は、たとえば、パッケージソフト１４１自体に組み込まれおり、コントローラ１００のプロセッサ１０２によって実行される。
【０１４８】
なお、図１６では、コントローラ１００とメモリカード２００Ｃとの間におけるパッケージソフト１４１の移動処理について説明を行ったが、メモリカード２００Ｃ以外の外部機器２００とコントローラ１００との間におけるパッケージソフト１４１の移動時においても移動機能は応用され得る。
【０１４９】
＜Ｊ．変形例２＞
上述では、パッケージソフト１４１がダウンロード販売される例、および、パッケージソフト１４１がメモリカード２００Ｃに格納された上で販売される例について説明を行ったが、パッケージソフト１４１の販売形態はこれらに限定されない。一例として、パッケージソフト１４１は、ＢＴＯ販売されてもよい。
【０１５０】
以下では、図１７を参照して、パッケージソフト１４１の販売形態のさらに他の例について説明する。図１７は、パッケージソフト１４１をＢＴＯ販売する仕組みを示す図である。
【０１５１】
図１７の例では、会社「Ａ」〜会社「Ｃ」が示されている。会社「Ａ」は、パッケージソフト１４１の管理を行うサーバ２００Ｂを有する。会社「Ｂ」は、パッケージソフト１４１を販売する会社である。会社「Ｃ」は、会社「Ｂ」や他の会社からパッケージソフト１４１やコントローラ１００などを購入し、これらを組み合わせたシステムを販売する会社である。
【０１５２】
より具体的な販売形態として、ステップ（１）において、会社「Ｂ」の設計者は、開発支援装置２００Ａを用いて、販売対象のパッケージソフト１４１を設計する。
【０１５３】
ステップ（２）において、パッケージソフト１４１の販売元である会社「Ｂ」は、販売対象のパッケージソフト１４１の登録を会社「Ａ」に対して行う。このとき、販売対象のパッケージソフト１４１に関するパッケージ情報が会社「Ａ」のサーバ２００Ｂに送信される。サーバ２００Ｂは、受信したパッケージ情報に基づいて、パッケージソフト１４１の登録処理を行う。
【０１５４】
ステップ（３）において、会社「Ｃ」の購入者は、会社「Ｂ」のウェブサイトなどにアクセスし、ダウンロード対象のパッケージソフト１４１を選択し、購入手続きを行なう。このとき、ダウンロード先のコントローラ１００の固有情報が入力される。購入手続きが完了すると、ダウンロード先のコントローラ１００を一意に識別するための固有情報からライセンス権１４２が生成され、購入されたパッケージソフト１４１とともに会社「Ｃ」に送信される。
【０１５５】
ステップ（４）において、購入対象のパッケージソフト１４１とライセンス権１４２とがコントローラ１００にインストールされる。
【０１５６】
ステップ（５）において、会社「Ｃ」は、パッケージソフト１４１とライセンス権１４２とがインストールされたコントローラ１００を他の会社に販売する。
【０１５７】
＜Ｋ．まとめ＞
以上のように、コントローラ１００は、パッケージソフト１４１のダウンロード時などにコントローラ１００の固有情報１４３Ａからパッケージソフト１４１の実行権１３９を生成しておく。その後、コントローラ１００は、パッケージソフト１４１の実行時やコントローラ１００の起動時などにおいて実行権１３９から固有情報１４３Ｂを生成する。生成された固有情報１４３Ｂが本来の固有情報１４３Ａと一致しないときに、コントローラ１００は、パッケージソフト１４１の利用を禁止する。
【０１５８】
これにより、たとえば、パッケージソフト１４１がダウンロード時とは異なるコントローラに不正に移動された場合に、パッケージソフト１４１の利用することができる。また、ライセンスをチェックする仕組みがパッケージソフト１４１に組み込まれていることで、ライセンスのチェック機能をコントローラ１００に予め搭載する必要がなくなる。
【０１５９】
＜Ｌ．付記＞
以上のように、本実施形態は以下のような開示を含む。
【０１６０】
［構成１］
制御対象を制御するためのコントローラ（１００）であって、
前記コントローラ（１００）で利用されるソフトウェア（１４１）を外部機器（２００）から取得するための取得部（１０１）と、
前記ソフトウェア（１４１）を実行するためのプロセッサ（１０２）とを備え、
前記ソフトウェア（１４１）は、
前記コントローラ（１００）または前記外部機器（２００）を一意に識別するための第１固有情報から前記ソフトウェア（１４１）の実行権（１３９）を生成するための生成モジュール（１５４）と、
前記実行権（１３９）の生成後の所定のタイミングにおいて前記実行権（１３９）から第２固有情報を生成し、当該第２固有情報が前記第１固有情報と一致しないときに、前記ソフトウェア（１４１）の利用を禁止するためのチェックモジュール（１５６）とを含む、コントローラ。
【０１６１】
［構成２］
前記外部機器（２００）は、前記コントローラ（１００）と通信可能に構成されている通信機器を含み、
前記取得部（１０１）は、前記コントローラ（１００）と通信接続された前記通信機器から前記ソフトウェア（１４１）をダウンロードする、構成１に記載のコントローラ。
【０１６２】
［構成３］
前記外部機器（２００）は、前記コントローラ（１００）に電気的に接続され得るメモリカードを含み、
前記取得部（１０１）は、前記コントローラ（１００）に電気的に接続されたメモリカードから前記ソフトウェア（１４１）を取得する、構成１または２に記載のコントローラ。
【０１６３】
［構成４］
前記プロセッサ（１０２）は、前記取得したソフトウェア（１４１）を前記コントローラ（１００）から前記外部機器（２００）に移すときに、前記実行権（１３９）を削除する、構成１〜３のいずれか１項に記載のコントローラ。
【０１６４】
［構成５］
前記プロセッサ（１０２）は、前記取得したソフトウェア（１４１）を前記コントローラ（１００）から前記外部機器（２００）に移すときに、前記生成モジュール（１５４）および前記チェックモジュール（１５６）を削除する、構成１〜４のいずれか１項に記載のコントローラ。
【０１６５】
［構成６］
前記外部機器（２００）から取得され得るソフトウェア（１４１）は、前記コントローラ（１００）のファームウェア上で動作するプログラムと、当該ファームウェアに追加されるプログラムと、前記コントローラ（１００）で利用され得るデータとの少なくとも１つを含む、構成１〜５のいずれか１項に記載のコントローラ。
【０１６６】
［構成７］
制御対象を制御するコントローラ（１００）で利用されるソフトウェア（１４１）のライセンスの管理方法であって、
前記コントローラ（１００）で利用されるソフトウェア（１４１）と、当該ソフトウェア（１４１）についての第１ライセンス情報とを外部機器（２００）から取得するステップと、
前記ソフトウェア（１４１）を実行するステップとを備え、
前記実行するステップは、
前記コントローラ（１００）または前記外部機器（２００）を一意に識別するための第１固有情報から前記ソフトウェア（１４１）の実行権（１３９）を生成するステップと、
前記実行権（１３９）の生成後の所定のタイミングにおいて前記実行権（１３９）から第２固有情報を生成し、当該第２固有情報が前記第１固有情報と一致しないときに、前記ソフトウェア（１４１）の利用を禁止するステップとを含む、管理方法。
【０１６７】
［構成８］
制御対象を制御するコントローラ（１００）で利用されるソフトウェア（１４１）のライセンスの管理プログラムであって、
前記管理プログラムは、前記コントローラ（１００）に、
制御対象を制御するコントローラ（１００）で利用されるソフトウェア（１４１）を外部機器（２００）から取得するステップと、
前記ソフトウェア（１４１）を実行するステップとを実行させ、
前記実行するステップは、
前記コントローラ（１００）または前記外部機器（２００）を一意に識別するための第１固有情報から前記ソフトウェア（１４１）の実行権（１３９）を生成するステップと、
前記実行権（１３９）の生成後の所定のタイミングにおいて前記実行権（１３９）から第２固有情報を生成し、当該第２固有情報が前記第１固有情報と一致しないときに、前記ソフトウェア（１４１）の利用を禁止するステップとを含む、管理プログラム。
【０１６８】
今回開示された実施の形態は全ての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内での全ての変更が含まれることが意図される。
【符号の説明】
【０１６９】
１０  ＦＡシステム、１００，１００Ａ，１００Ｂ  コントローラ、１０１  取得部、１０１Ａ，２１１  通信インターフェイス、１０１Ｂ  メモリカードインターフェイス、１０２  プロセッサ、１０４  チップセット、１０６，２０４  主メモリ、１１０，２０８  記憶装置、１２２  内部バスコントローラ、１２４  フィールドバスコントローラ、１２６  Ｉ／Ｏユニット、１３０  制御プログラム、１３９  実行権、１４０  システムプログラム、１４１  パッケージソフト、１４１Ａ  ディプロイメソッド、１４２  ライセンス権、１４３Ａ，１４３Ｂ，２４３Ａ  固有情報、１４５  ユーザプログラム、１４５Ａ  シーケンスプログラム、１４５Ｂ  モーションプログラム、１５０  パッケージ管理モジュール、１５４  生成モジュール、１５５  ソフトウェア管理テーブル、１５６  チェックモジュール、１５６Ａ  復号化モジュール、１５６Ｂ  比較モジュール、１６０  一覧テーブル、１６０Ａ，１６０Ｂ，１６０Ｃ，１６０Ｄ，１６０Ｅ，１６０Ｆ，１６１Ａ，１６１Ｂ，１６１Ｃ，１６１Ｄ，１６２Ａ，１６２Ｂ，１６２Ｃ，１６２Ｄ，１６３Ａ，１６３Ｂ，１６３Ｃ，１６３Ｄ  カラム、１６１，１６２，１６３  詳細情報、１６５  変更履歴、２００  外部機器、２００Ａ  開発支援装置、２００Ｂ  サーバ、２００Ｃ  メモリカード、２０２  制御装置、２０８Ａ  開発支援プログラム、２１４  インターフェイス、２１５  操作部、２２０  表示インターフェイス、２２１  表示部、２２５  内部バス、３００  駆動機器、３００Ａ  ロボットコントローラ、３００Ｂ  サーボドライバ、３０１Ａ  アームロボット、３０１Ｂ  サーボモータ。
【図１】
2019159752.tif 000003
【図２】
2019159752.tif 000004
【図３】
2019159752.tif 000005
【図４】
2019159752.tif 000006
【図５】
2019159752.tif 000007
【図６】
2019159752.tif 000008
【図７】
2019159752.tif 000009
【図８】
2019159752.tif 000010
【図９】
2019159752.tif 000011
【図１０】
2019159752.tif 000012
【図１１】
2019159752.tif 000013
【図１２】
2019159752.tif 000014
【図１３】
2019159752.tif 000015
【図１４】
2019159752.tif 000016
【図１５】
2019159752.tif 000017
【図１６】
2019159752.tif 000018
【図１７】
2019159752.tif 000019