(57)【要約】      （修正有）【課題】ネットワーク化あるいはインテリジェント化に伴って生じ得る脅威に対してコントローラシステムを保護する。【解決手段】コントローラシステム（制御ユニット１００）は、コントローラシステム（制御ユニット）への電源投入により、制御プログラム１１０４が記憶されたサーバから制御プログラム１１０４を取得するプログラム取得部１５２と、コントローラシステムに電源が供給される間、プログラム取得部１５２により取得された制御プログラム１１０４を記憶する主記憶装置１０６と、主記憶装置１０６に記憶された制御プログラム１１０４を実行するプログラム実行部１５４とを備える。【選択図】図７
2020161048.tif 000002
【特許請求の範囲】
【請求項１】
コントローラシステムであって、
前記コントローラシステムへの電源投入により、制御プログラムが記憶されたサーバから前記制御プログラムを取得するプログラム取得部と、
前記コントローラシステムに電源が供給される間、前記プログラム取得部により取得された前記制御プログラムを記憶し、前記コントローラシステムへの電源の供給の停止により、前記制御プログラムを消去する揮発性記憶装置と、
前記揮発性記憶装置に記憶された前記制御プログラムを実行するプログラム実行部とを備える、コントローラシステム。
【請求項２】
前記コントローラシステムは、
前記制御プログラムに関連付けられた情報の同一性を検証することにより、前記制御プログラムの正当性を管理するプログラム管理部をさらに備える、請求項１に記載のコントローラシステム。
【請求項３】
前記プログラム取得部は、前記サーバとの間の暗号化通信により、前記制御プログラムと、前記制御プログラムに付随するプログラムＩＤとを前記サーバから受信し、
前記プログラム管理部は、前記制御プログラムおよび前記プログラムＩＤが改ざんされていないことを検証し、かつ、前記制御プログラムに予め付与された検証ＩＤと、前記プログラムＩＤとが一致することを検証した場合に、前記制御プログラムを前記揮発性記憶装置に格納する、請求項２に記載のコントローラシステム。
【請求項４】
前記プログラム管理部は、前記コントローラシステムの状態を保持するための変数である保持変数を生成して、前記コントローラシステムのシャットダウン時に前記保持変数を、前記サーバにアップロードし、
前記プログラム取得部は、前記制御プログラムおよび前記プログラムＩＤとともに前記保持変数を前記サーバから取得する、請求項３に記載のコントローラシステム。
【請求項５】
前記コントローラシステムは、前回に実行された前記制御プログラムから生成されたハッシュ値を不揮発的に保存する不揮発性記憶装置をさらに備え、
前記プログラム管理部は、前記プログラム取得部により取得された前記制御プログラムのハッシュ値を生成して、前記プログラム管理部により生成されたハッシュ値が、前記不揮発性記憶装置に記憶されたハッシュ値と一致する場合に、前記制御プログラムを前記揮発性記憶装置に格納する、請求項２に記載のコントローラシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、制御プログラムを実行するコントローラシステムのセキュリティに関する。
【背景技術】
【０００２】
各種設備および各設備に配置される各種装置の制御には、ＰＬＣ（プログラマブルロジックコントローラ）などのコントローラシステムが用いられる。制御装置は、制御対象の設備や機械に生じる異常を監視するとともに、制御装置自体の異常を監視することも可能である。何らかの異常が検知されると、制御装置から外部に対して何らかの方法で通知がなされる。
【０００３】
例えば、特開２０００−１３７５０６号公報（特許文献１）は、異常履歴が登録されたとき、または、予め定められた時間が到来したときに、予め指定された宛先に電子メールを送信するプログラマブルコントローラを開示する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０００−１３７５０６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
近年のＩＣＴ（Information and Communication Technology）の進歩に伴って、コントローラシステムも様々な外部装置とネットワークで接続されるとともに、コントローラシステムにおいて実行される処理も高度化している。このようなネットワーク化あるいはインテリジェント化に伴って、コントローラシステムがさまざまな脅威にさらされることが想定される。したがって想定される脅威からコントローラシステムを守るための方策が必要である。
【０００６】
従来のコントローラシステムにおいては、設備や機械に生じた異常、または、コントローラシステム自体に生じた異常を検知するのみであり、ネットワーク化あるいはインテリジェント化に伴って生じ得る脅威については、何ら想定されていない。
【０００７】
本発明の１つの目的は、コントローラシステムのネットワーク化あるいはインテリジェント化に伴って生じ得る脅威に対する保護という新たな課題を解決することである。
【課題を解決するための手段】
【０００８】
本開示の一例は、コントローラシステムであって、コントローラシステムへの電源投入により、制御プログラムが記憶されたサーバから制御プログラムを取得するプログラム取得部と、コントローラシステムに電源が供給される間、プログラム取得部により取得された制御プログラムを記憶し、コントローラシステムへの電源の供給の停止により、制御プログラムを消去する揮発性記憶装置と、揮発性記憶装置に記憶された制御プログラムを実行するプログラム実行部とを備える。
【０００９】
上記によれば、コントローラシステムに電源が供給される間のみコントローラシステムに制御プログラムが記憶される。コントローラシステムに電源が供給されないときには制御プログラムはコントローラシステムに格納されていない。したがって、コントローラシステムから情報（制御プログラム）が漏洩する可能性を低減できる。この結果、コントローラシステムのネットワーク化あるいはインテリジェント化に伴って生じ得る脅威に対する保護を実現できる。
【００１０】
好ましくは、コントローラシステムは、制御プログラムに関連付けられた情報の同一性を検証することにより、制御プログラムの正当性を管理するプログラム管理部をさらに備える。
【００１１】
上記によれば、制御プログラムに関連付けられた情報が同一である（変更されていない）ことを確認することにより、コントローラシステムは、サーバから取得した制御プログラムが正当なものであるかどうかを判断することができる。
【００１２】
好ましくは、プログラム取得部は、サーバとの間の暗号化通信により、制御プログラムと、制御プログラムに付随するプログラムＩＤとをサーバから受信し、プログラム管理部は、制御プログラムおよびプログラムＩＤが改ざんされていないことを検証し、かつ、制御プログラムに予め付与された検証ＩＤと、プログラムＩＤとが一致することを検証した場合に、制御プログラムを揮発性記憶装置に格納する。
【００１３】
上記によれば、サーバから取得した制御プログラムが正しいかどうかをコントローラシステムにおいて判断することができる。したがって、制御プログラムの改ざんがあった場合に、コントローラシステムは、改ざんを検知することができる。また、プログラムＩＤと検証ＩＤとの比較により、制御プログラムが正しいかどうかをコントローラシステムにおいて判断することができる。「プログラムＩＤ」とはプログラムに付されたＩＤを意味する。プログラムを特定できるＩＤであれば、ＩＤの種類は限定されない。たとえばプログラムのシリアルＩＤを「プログラムＩＤ」として用いてもよい。
【００１４】
好ましくは、プログラム管理部は、コントローラシステムの状態を保持するための変数である保持変数を生成して、コントローラシステムのシャットダウン時に保持変数を、サーバにアップロードし、プログラム取得部は、制御プログラムおよびプログラムＩＤとともに保持変数をサーバから取得する。
【００１５】
上記によれば、再起動後にコントローラシステムの状態を復元することができる。さらに、コントローラシステムをシャットダウンした後に、コントローラシステムの稼働時の状態を表す様々な情報がコントローラシステムから漏洩することを防ぐことができる。
【００１６】
好ましくは、コントローラシステムは、前回に実行された制御プログラムから生成されたハッシュ値を不揮発的に保存する不揮発性記憶装置をさらに備え、プログラム管理部は、プログラム取得部により取得された制御プログラムのハッシュ値を生成して、プログラム管理部により生成されたハッシュ値が、不揮発性記憶装置に記憶されたハッシュ値と一致する場合に、制御プログラムを揮発性記憶装置に格納する。
【００１７】
上記によれば、サーバから取得した制御プログラムが、前回実行された制御プログラムと同一か否かをコントローラシステムにおいて判断することができる。したがって、制御プログラムの改ざんがあった場合に、コントローラシステムは、改ざんを検知することができる。
【発明の効果】
【００１８】
本発明によれば、コントローラシステムのネットワーク化あるいはインテリジェント化に伴って生じ得る脅威に対する保護という新たな課題を解決できる。
【図面の簡単な説明】
【００１９】
【図１】本実施の形態に係るコントローラシステムの構成例を示す外観図である。
【図２】本実施の形態に従うコントローラシステムを構成する制御ユニットのハードウェア構成例を示す模式図である。
【図３】本実施の形態に従うコントローラシステムを構成するセキュリティユニットのハードウェア構成例を示す模式図である。
【図４】本実施の形態に従うコントローラシステムを構成するセーフティユニットのハードウェア構成例を示す模式図である。
【図５】本実施の形態に従うコントローラシステムを含む制御システムの典型例を示す模式図である。
【図６】本実施の形態に係る制御システムと、一般的なシンクライアントシステムとの間の一部の相違点を表形式で示した図である。
【図７】本実施の形態に従う制御ユニットが備える機能構成例を示す模式図である。
【図８】本実施の形態に従う、制御ユニットへのユーザプログラムの転送を説明する図である。
【図９】制御ユニットとサーバとの間のセキュア通信による制御プログラムの転送および実行の流れを説明した模式図である。
【図１０】制御プログラムおよびシリアルＩＤとともにサーバから転送される情報の例を説明した模式図である。
【図１１】制御プログラムの更新あるいは再配信のための制御プログラムの転送を説明する図である。
【図１２】本実施の形態により実施可能な、制御プログラムの改ざんを検知する方法を示した模式図である。
【発明を実施するための形態】
【００２０】
本発明の実施の形態について、図面を参照しながら詳細に説明する。なお、図中の同一または相当部分については、同一符号を付してその説明は繰り返さない。
【００２１】
＜Ａ．コントローラシステム１＞
まず、本実施の形態に従うコントローラシステム１の構成について説明する。
【００２２】
図１は、本実施の形態に係るコントローラシステム１の構成例を示す外観図である。図１を参照して、コントローラシステム１は、制御ユニット１００と、セキュリティユニット２００と、セーフティユニット３００と、１または複数の機能ユニット４００と、電源ユニット４５０とを含む。
【００２３】
制御ユニット１００とセキュリティユニット２００との間は、任意のデータ伝送路（例えば、ＰＣＩ  Ｅｘｐｒｅｓｓ（登録商標）あるいはイーサネット（登録商標）など）を介して接続されている。制御ユニット１００とセーフティユニット３００および１または複数の機能ユニット４００との間は、図示しない内部バスを介して接続されている。
【００２４】
制御ユニット１００は、コントローラシステム１において中心的な処理を実行する。制御ユニット１００は、任意に設計された要求仕様に従って、制御対象を制御するための制御演算を実行する。セーフティユニット３００で実行される制御演算との対比で、制御ユニット１００で実行される制御演算を「標準制御」とも称す。図１に示す構成例において、制御ユニット１００は、１または複数の通信ポートを有している。制御ユニット１００は、標準制御プログラムに従って標準制御を実行する処理実行部に相当する。
【００２５】
セキュリティユニット２００は、制御ユニット１００に接続され、コントローラシステム１に対するセキュリティ機能を担当する。図１に示す構成例において、セキュリティユニット２００は、１または複数の通信ポートを有している。セキュリティユニット２００が提供するセキュリティ機能の詳細については、後述する。
【００２６】
セーフティユニット３００は、制御ユニット１００とは独立して、制御対象に関するセーフティ機能を実現するための制御演算を実行する。セーフティユニット３００で実行される制御演算を「セーフティ制御」とも称す。通常、「セーフティ制御」は、ＩＥＣ  ６１５０８などに規定されたセーフティ機能を実現するための要件を満たすように設計される。「セーフティ制御」は、設備や機械などによって人の安全が脅かされることを防止するための処理を総称する。
【００２７】
機能ユニット４００は、コントローラシステム１による様々な制御対象に対する制御を実現するための各種機能を提供する。機能ユニット４００は、典型的には、Ｉ／Ｏユニット、セーフティＩ／Ｏユニット、通信ユニット、モーションコントローラユニット、温度調整ユニット、パルスカウンタユニットなどを包含し得る。Ｉ／Ｏユニットとしては、例えば、デジタル入力（ＤＩ）ユニット、デジタル出力（ＤＯ）ユニット、アナログ出力（ＡＩ）ユニット、アナログ出力（ＡＯ）ユニット、パルスキャッチ入力ユニット、および、複数の種類を混合させた複合ユニットなどが挙げられる。セーフティＩ／Ｏユニットは、セーフティ制御に係るＩ／Ｏ処理を担当する。
【００２８】
電源ユニット４５０は、コントローラシステム１を構成する各ユニットに対して、所定電圧の電源を供給する。
【００２９】
＜Ｂ．各ユニットのハードウェア構成例＞
次に、本実施の形態に従うコントローラシステム１を構成する各ユニットのハードウェア構成例について説明する。
【００３０】
（ｂ１：制御ユニット１００）
図２は、本実施の形態に従うコントローラシステム１を構成する制御ユニット１００のハードウェア構成例を示す模式図である。図２を参照して、制御ユニット１００は、主たるコンポーネントとして、ＣＰＵ（Central Processing Unit）やＧＰＵ（Graphical Processing Unit）などのプロセッサ１０２と、チップセット１０４と、主記憶装置１０６と、二次記憶装置１０８と、通信コントローラ１１０と、ＵＳＢ（Universal Serial Bus）コントローラ１１２と、メモリカードインターフェイス１１４と、ネットワークコントローラ１１６，１１８，１２０と、内部バスコントローラ１２２と、インジケータ１２４とを含む。
【００３１】
プロセッサ１０２は、各種プログラムを主記憶装置１０６に展開して実行することで、標準制御に係る制御演算、および、後述するような各種処理を実現する。プロセッサ１０２としては、複数のコアを有する構成を採用してもよいし、プロセッサ１０２を複数配置してもよい。すなわち、制御ユニット１００は、１または複数のプロセッサ１０２、および／または、１または複数のコアを有するプロセッサ１０２を有している。チップセット１０４は、プロセッサ１０２と各コンポーネントとの間のデータの遣り取りを仲介することで、制御ユニット１００全体としての処理を実現する。
【００３２】
主記憶装置１０６は、揮発性記憶装置であり、制御ユニット１００に電源が供給される間、情報を保持する。
【００３３】
二次記憶装置１０８は、不揮発性の記憶装置であり、システムプログラムを格納する。二次記憶装置１０８には、暗号化通信のための鍵および証明書が格納されていてもよい。本実施の形態では、プロセッサ１０２により実行される制御プログラムは、制御ユニット１００の起動時に、リモート（サーバ）から取得されて、主記憶装置１０６に展開される。制御プログラムは、二次記憶装置１０８には格納されない。したがって、制御ユニット１００の電源がオフされると、主記憶装置１０６から制御プログラムが削除される。この結果、制御ユニット１００に制御プログラムが保存されない。制御ユニット１００に電源が供給される間のみ、制御ユニット１００に制御プログラムが格納される。
【００３４】
通信コントローラ１１０は、セキュリティユニット２００との間のデータの遣り取りを担当する。通信コントローラ１１０としては、例えば、ＰＣＩ  Ｅｘｐｒｅｓｓあるいはイーサネットなどに対応する通信チップを採用できる。
【００３５】
ＵＳＢコントローラ１１２は、ＵＳＢ接続を介して任意の情報処理装置との間のデータの遣り取りを担当する。
【００３６】
メモリカードインターフェイス１１４は、メモリカード１１５を着脱可能に構成されており、メモリカード１１５に対して制御プログラムや各種設定などのデータを書込み、あるいは、メモリカード１１５から制御プログラムや各種設定などのデータを読出すことが可能になっている。
【００３７】
ネットワークコントローラ１１６，１１８，１２０の各々は、ネットワークを介した任意のデバイスとの間のデータの遣り取りを担当する。ネットワークコントローラ１１６，１１８，１２０は、ＥｔｈｅｒＣＡＴ（登録商標）、ＥｔｈｅｒＮｅｔ／ＩＰ（登録商標）、ＤｅｖｉｃｅＮｅｔ（登録商標）、ＣｏｍｐｏＮｅｔ（登録商標）などの産業用ネットワークプロトコルを採用してもよい。
【００３８】
内部バスコントローラ１２２は、コントローラシステム１を構成するセーフティユニット３００や１または複数の機能ユニット４００との間のデータの遣り取りを担当する。内部バスには、メーカ固有の通信プロトコルを用いてもよいし、いずれかの産業用ネットワークプロトコルと同一あるいは準拠した通信プロトコルを用いてもよい。
【００３９】
インジケータ１２４は、制御ユニット１００の動作状態などを通知するものであり、ユニット表面に配置された１または複数のＬＥＤなどで構成される。インジケータ１２４は、制御プログラムの改ざん等のエラーを通知する通知部に相当する。
【００４０】
図２には、プロセッサ１０２がプログラムを実行することで必要な機能が提供される構成例を示したが、これらの提供される機能の一部または全部を、専用のハードウェア回路（例えば、ＡＳＩＣ（Application Specific Integrated Circuit）またはＦＰＧＡ（Field-Programmable Gate Array）など）を用いて実装してもよい。あるいは、制御ユニット１００の主要部を、汎用的なアーキテクチャに従うハードウェア（例えば、汎用パソコンをベースとした産業用パソコン）を用いて実現してもよい。この場合には、仮想化技術を用いて、用途の異なる複数のＯＳ（Operating System）を並列的に実行させるとともに、各ＯＳ上で必要なアプリケーションを実行させるようにしてもよい。
【００４１】
（ｂ２：セキュリティユニット２００）
図３は、本実施の形態に従うコントローラシステム１を構成するセキュリティユニット２００のハードウェア構成例を示す模式図である。図３を参照して、セキュリティユニット２００は、主たるコンポーネントとして、ＣＰＵやＧＰＵなどのプロセッサ２０２と、チップセット２０４と、主記憶装置２０６と、二次記憶装置２０８と、通信コントローラ２１０と、ＵＳＢコントローラ２１２と、メモリカードインターフェイス２１４と、ネットワークコントローラ２１６，２１８と、インジケータ２２４とを含む。
【００４２】
プロセッサ２０２は、二次記憶装置２０８に格納された各種プログラムを読み出して、主記憶装置２０６に展開して実行することで、後述するような各種セキュリティ機能を実現する。チップセット２０４は、プロセッサ２０２と各コンポーネントとの間のデータの遣り取りを仲介することで、セキュリティユニット２００全体としての処理を実現する。
【００４３】
二次記憶装置２０８には、システムプログラムに加えて、システムプログラムが提供する実行環境上で動作するセキュリティシステムプログラムが格納される。二次記憶装置２０８には、暗号通信のための鍵（秘密鍵や公開鍵）および証明書が格納されていてもよい。
【００４４】
通信コントローラ２１０は、制御ユニット１００との間のデータの遣り取りを担当する。通信コントローラ２１０としては、制御ユニット１００に通信コントローラ２１０と同様に、例えば、ＰＣＩ  Ｅｘｐｒｅｓｓあるいはイーサネットなどに対応する通信チップを採用できる。
【００４５】
ＵＳＢコントローラ２１２は、ＵＳＢ接続を介して任意の情報処理装置との間のデータの遣り取りを担当する。
【００４６】
メモリカードインターフェイス２１４は、メモリカード２１５を着脱可能に構成されており、メモリカード２１５に対して制御プログラムや各種設定などのデータを書込み、あるいは、メモリカード２１５から制御プログラムや各種設定などのデータを読出すことが可能になっている。
【００４７】
ネットワークコントローラ２１６，２１８の各々は、ネットワークを介した任意のデバイスとの間のデータの遣り取りを担当する。ネットワークコントローラ２１６，２１８は、イーサネットなどの汎用的なネットワークプロトコルを採用してもよい。
【００４８】
インジケータ２２４は、セキュリティユニット２００の動作状態などを通知するものであり、ユニット表面に配置された１または複数のＬＥＤなどで構成される。
【００４９】
図３には、プロセッサ２０２がプログラムを実行することで必要な機能が提供される構成例を示したが、これらの提供される機能の一部または全部を、専用のハードウェア回路（例えば、ＡＳＩＣまたはＦＰＧＡなど）を用いて実装してもよい。あるいは、セキュリティユニット２００の主要部を、汎用的なアーキテクチャに従うハードウェア（例えば、汎用パソコンをベースとした産業用パソコン）を用いて実現してもよい。この場合には、仮想化技術を用いて、用途の異なる複数のＯＳを並列的に実行させるとともに、各ＯＳ上で必要なアプリケーションを実行させるようにしてもよい。
【００５０】
（ｂ３：セーフティユニット３００）
図４は、本実施の形態に従うコントローラシステム１を構成するセーフティユニット３００のハードウェア構成例を示す模式図である。図４を参照して、セーフティユニット３００は、主たるコンポーネントとして、ＣＰＵやＧＰＵなどのプロセッサ３０２と、チップセット３０４と、主記憶装置３０６と、二次記憶装置３０８と、メモリカードインターフェイス３１４と、内部バスコントローラ３２２と、インジケータ３２４とを含む。
【００５１】
プロセッサ３０２は、二次記憶装置３０８に格納された各種プログラムを読み出して、主記憶装置３０６に展開して実行することで、セーフティ制御に係る制御演算、および、後述するような各種処理を実現する。チップセット３０４は、プロセッサ３０２と各コンポーネントとの間のデータの遣り取りを仲介することで、セーフティユニット３００全体としての処理を実現する。
【００５２】
二次記憶装置３０８には、システムプログラムに加えて、システムプログラムが提供する実行環境上で動作するセーフティプログラムが格納される。
【００５３】
メモリカードインターフェイス３１４は、メモリカード３１５を着脱可能に構成されており、メモリカード３１５に対してセーフティプログラムや各種設定などのデータを書込み、あるいは、メモリカード３１５からセーフティプログラムや各種設定などのデータを読出すことが可能になっている。
【００５４】
内部バスコントローラ３２２は、内部バスを介した制御ユニット１００との間のデータの遣り取りを担当する。
【００５５】
インジケータ３２４は、セーフティユニット３００の動作状態などを通知するものであり、ユニット表面に配置された１または複数のＬＥＤなどで構成される。
【００５６】
図４には、プロセッサ３０２がプログラムを実行することで必要な機能が提供される構成例を示したが、これらの提供される機能の一部または全部を、専用のハードウェア回路（例えば、ＡＳＩＣまたはＦＰＧＡなど）を用いて実装してもよい。あるいは、セーフティユニット３００の主要部を、汎用的なアーキテクチャに従うハードウェア（例えば、汎用パソコンをベースとした産業用パソコン）を用いて実現してもよい。この場合には、仮想化技術を用いて、用途の異なる複数のＯＳを並列的に実行させるとともに、各ＯＳ上で必要なアプリケーションを実行させるようにしてもよい。
【００５７】
＜Ｃ．制御システム１０＞
次に、本実施の形態に従うコントローラシステム１を含む制御システム１０の典型例について説明する。図５は、本実施の形態に従うコントローラシステム１を含む制御システム１０の典型例を示す模式図である。
【００５８】
一例として、図５に示す制御システム１０は、２つのライン（ラインＡおよびラインＢ）を制御対象とする。典型的には、各ラインは、ワークを搬送するコンベアに加えて、コンベア上のワークに対して任意の物理的作用を与えることが可能なロボットが配置されているとする。
【００５９】
ラインＡおよびラインＢのそれぞれに制御ユニット１００が配置されている。ラインＡを担当する制御ユニット１００に加えて、セキュリティユニット２００およびセーフティユニット３００がコントローラシステム１を構成する。なお、説明の便宜上、図５には、機能ユニット４００および電源ユニット４５０の記載を省略している。
【００６０】
コントローラシステム１のセキュリティユニット２００は、通信ポート２４２（図３のネットワークコントローラ２１６）を介して第１ネットワーク２に接続されている。第１ネットワーク２には、サポート装置６００およびＳＣＡＤＡ（Supervisory Control And Data Acquisition）装置７００が接続されているとする。第１ネットワーク２には、イーサネットあるいはＯＰＣ−ＵＡ（Object Linking and Embedding for Process Control Unified Architecture）などを採用することができる。
【００６１】
サポート装置６００は、少なくとも制御ユニット１００にアクセス可能になっており、コントローラシステム１に含まれる各ユニットで実行されるプログラムの作成、デバッグ、各種パラメータの設定などの機能をユーザへ提供する。サポート装置６００には開発等の目的のためのツールがインストールされていてもよい。ツールはたとえばオムロン社製の「Ｓｙｓｍａｃ  Ｓｔｕｄｉｏ」である。
【００６２】
ＳＣＡＤＡ装置７００は、コントローラシステム１での制御演算によって得られる各種情報をオペレータへ提示するとともに、オペレータからの操作に従って、コントローラシステム１に対して内部コマンドなどを生成する。ＳＣＡＤＡ装置７００は、コントローラシステム１が扱うデータを収集する機能も有している。
【００６３】
コントローラシステム１の制御ユニット１００は、通信ポート１４２（図２のネットワークコントローラ１１６）を介して第２ネットワーク４に接続されている。第２ネットワーク４には、ＨＭＩ（Human Machine Interface）８００、データベース９００およびサーバ５０が接続されているとする。
【００６４】
ＨＭＩ８００は、パーソナルコンピュータにより実現可能である。ＨＭＩ８００は、コントローラシステム１での制御演算によって得られる各種情報をオペレータへ提示するとともに、オペレータからの操作に従って、コントローラシステム１に対して内部コマンドなどを生成する。ＨＭＩ８００は、コントローラシステム１との暗号通信のための証明書を格納してもよい。
【００６５】
ＨＭＩ８００は、ＦＡの保守者が携帯可能に構成され得る。データベース９００は、コントローラシステム１から送信される各種データ（例えば、各ワークから計測されたトレーサビリティに関する情報など）を収集する。
【００６６】
サーバ５０は、制御ユニット１００により実行される制御プログラム５１を格納する。さらにサーバ５０は、制御プログラム５１の正当性を保証するための各種の情報を格納してもよい。たとえばサーバ５０は、制御プログラム５１の正当性を確保する情報（制御プログラム５１が改ざんされていないことを証明するための情報）を格納してもよい。
【００６７】
コントローラシステム１の制御ユニット１００は、通信ポート１４４（図２のネットワークコントローラ１１８）を介して、１または複数のフィールドデバイス５００と接続されている。フィールドデバイス５００は、制御対象から制御演算に必要な各種情報を収集するセンサや検出器、および、制御対象に対して何らかの作用を与えるアクチュエータなどを含む。図５に示す例では、フィールドデバイス５００は、ワークに対して何らかの外的な作用を与えるロボット、ワークを搬送するコンベヤ、フィールドに配置されたセンサやアクチュエータとの間で信号を遣り取りするＩ／Ｏユニットなどを含む。
【００６８】
同様に、ラインＢを担当する制御ユニット１００についても同様に、通信ポート１４４（図２のネットワークコントローラ１１８）を介して、１または複数のフィールドデバイス５００と接続されている。
【００６９】
ここで、コントローラシステム１の機能面に着目すると、制御ユニット１００は、標準制御に係る制御演算を実行する処理実行部である制御エンジン１５０と、外部装置との間でデータを遣り取りする情報エンジン１６０とを含む。セキュリティユニット２００は、後述するようなセキュリティ機能を実現するためのセキュリティエンジン２５０を含む。セーフティユニット３００は、セーフティ制御に係る制御演算を実行する処理実行部であるセーフティエンジン３５０を含む。
【００７０】
各エンジンは、各ユニットのプロセッサなどの任意のハードウェア要素または各種プログラムなどの任意のソフトウェア要素、あるいは、それら要素の組合せによって実現される。各エンジンは任意の形態で実装できる。
【００７１】
さらに、コントローラシステム１は、エンジン同士の遣り取りを仲介するブローカー１７０を含む。ブローカー１７０の実体は、制御ユニット１００およびセキュリティユニット２００の一方または両方に配置してもよい。
【００７２】
制御エンジン１５０は、制御対象を制御するための制御演算の実行に必要な変数テーブルおよびファンクションブロック（ＦＢ）などを保持している。変数テーブルに格納される各変数は、Ｉ／Ｏリフレッシュ処理により、フィールドデバイス５００から取得された値で周期的に収集されるとともに、フィールドデバイス５００へ各値が周期的に反映される。制御エンジン１５０での制御演算のログはログデータベース１８０に格納されてもよい。
【００７３】
情報エンジン１６０は、制御ユニット１００が保持するデータ（変数テーブルで保持される変数値）に対して任意の情報処理を実行する。典型的には、情報エンジン１６０は、制御ユニット１００が保持するデータを周期的にデータベース９００などへ送信する処理を含む。このようなデータの送信には、ＳＱＬなどが用いられる。
【００７４】
セキュリティエンジン２５０は、コントローラシステム１に発生する不正侵入の検知、検知された不正侵入に応じた処理、インシデントの発生有無判断、発生したインシデントに応じた処理などを実行する。セキュリティエンジン２５０の挙動は、セキュリティ情報２６０として保存される。
【００７５】
セキュリティエンジン２５０は、セキュリティに関する何らかのイベントが発生したこと、あるいは発生しているセキュリティに関するイベントのレベルなどを、インジケータ２２４で通知する。
【００７６】
セーフティエンジン３５０は、コントローラシステム１において何らかの不正侵入が発生したか否かを検知する検知手段に相当する。セーフティエンジン３５０は、制御ユニット１００を介して、セーフティ制御に係る制御演算の実行に必要なセーフティＩ／Ｏ変数を取得および反映する。セーフティエンジン３５０でのセーフティ制御のログはログデータベース３６０に格納されてもよい。
【００７７】
ブローカー１７０は、例えば、セキュリティエンジン２５０が何らかのイベントを検知すると、制御エンジン１５０、情報エンジン１６０およびセーフティエンジン３５０の動作などを変化させる。
【００７８】
＜Ｄ．本実施の形態と一般的なシンクライアント方式との相違点＞
本実施の形態では、制御ユニット１００に電源が供給される間のみ、制御ユニット１００に制御プログラムが格納される。サーバ側にプログラムが不揮発的に格納されているという点において、本実施の形態はシンクライアント（Thin client）方式のシステムに類似する。しかし、シンクライアントは、ユーザが使用するクライアントの機能を必要最小限として、サーバ側で主な処理を行う仕組みである。一方、本実施の形態では、制御システム１０はＦＡ（Factory Automation）の現場で稼働される。このため制御システム１０およびコントローラシステム１には高速かつ高精度の制御を実行することが要求される。高速かつ高精度の制御のために、コントローラシステム１が制御処理を実行する。この点において、本実施の形態は、一般的なシンクライアントシステムとは相違する。
【００７９】
図６は、本実施の形態に係る制御システムと、一般的なシンクライアントシステムとの間の一部の相違点を表形式で示した図である。本実施の形態に係る制御システムは、図６では「ＦＡ」と表記される。一方、一般的なシンクライアントシステムは、図６では「ＩＴ」と表記される。本実施の形態に係る制御システムと一般的なシンクライアントシステムとの間の相違点として、上述の相違点に加えて、以下の点を挙げることができる。
【００８０】
（１）入力（ＩＮ）
本実施の形態では、制御システムへの入力はセンサ等からのＩ／Ｏ入力である。一方、シンクライアントシステムでは、入力は、キーボードあるいはマウスなど、ユーザの使用する入力装置からの入力である。
【００８１】
（２）出力（ＯＵＴ）
本実施の形態では、制御システムからの出力は、フィールドデバイス（サーボモータなど）等へのＩ／Ｏ出力である。一方、シンクライアントシステムでは、サーバから画面情報がクライアントに出力される。
【００８２】
（３）高速性
本実施の形態では、制御ユニットと他のユニットとの同期などの理由により、処理の高速性が要求される。一例では、処理はマイクロ秒の単位で実行される。すなわち実質的にリアルタイムに実行される処理が要求される。一方、シンクライアントシステムでは、クライアント側の画面の更新がユーザにとって遅いと思われない程度の処理速度でもよい。一例では、処理速度は１００ｍｓ〜１秒程度である。
【００８３】
（４）サーバとのインタラクション
本実施の形態では、制御装置（コントローラシステム１）とサーバとの間のインタラクションであるのに対して、シンクライアントシステムでは、人（ユーザ）とサーバとの間のインタラクションである。
【００８４】
（５）認証の対象
本実施の形態では、認証の対象が装置（たとえばシリアルＩＤあるいはセキュリティチップ等）である。これに対して、シンクライアントシステムでは、認証の対象はユーザ（ログイン情報）である。
【００８５】
（６）ダウンロードデータ
本実施の形態では、コントローラシステム１はサーバ５０から制御プログラム（具体的にはオブジェクトコード）をダウンロードする。一方、シンクライアントシステムでは、基本的にクライアントはサーバからデータをダウンロードしない。
【００８６】
＜Ｅ．制御ユニット１００の機能構成例＞
図７は、本実施の形態に従う制御ユニット１００が備える機能構成例を示す模式図である。図７を参照して、制御ユニット１００において、主記憶装置１０６は、制御プログラム１１０４を格納する。プロセッサ１０２は、ＯＳ（Operating System）の元で制御プログラム１１０４を周期的に実行する。プロセッサ１０２は、サーバ問合部１５１と、プログラム取得部１５２と、プログラム管理部１５３と、プログラム実行部１５４とを含む。
【００８７】
コントローラシステム１への電源投入により、コントローラシステム１が起動される。サーバ問合部１５１は、制御プログラム（ユーザプログラム）をサーバ５０（図５を参照）からダウンロードするために、サーバ５０への問い合わせおよび認証を実行する。サーバ５０が制御ユニット１００を認証すると、プログラム取得部１５２は、所定の手続きに従って、サーバから制御プログラムを取得する（ダウンロードする）。
【００８８】
プログラム管理部１５３は、ダウンロードされた制御プログラムの正当性を検証する。具体的には、プログラム管理部１５３は、制御プログラムに関連付けられた情報の同一性を検証することにより、制御プログラムの正当性を管理する。ダウンロードされた制御プログラムが正当である場合、制御プログラムは、主記憶装置１０６に格納される。一方、ダウンロードされたユーザプログラムが正当ではない場合、プログラム管理部１５３は、通知を出力するようにインジケータ１２４を含む通知部を制御する。プログラム実行部１５４は、主記憶装置１０６に記憶された制御プログラム１１０４を実行する。
【００８９】
＜Ｆ．情報の漏洩の防止＞
図８は、本実施の形態に従う、制御ユニット１００へのユーザプログラムの転送を説明する図である。図８を参照して、電源オンの前には、主記憶装置１０６に情報は記憶されていない（ステップ（１））。
【００９０】
サポート装置６００は、ユーザが作成したソースコード６０１をプログラム（オブジェクトコード）に変換して制御プログラム５１（図８では「ＵＰＧ１」と表記）を生成し、その制御プログラム５１をサーバ５０に格納する。
【００９１】
電源オンにより、制御ユニット１００が起動される。プロセッサ１０２（図７に示すサーバ問合部１５１）は、サーバ５０に対して問い合わせおよび認証処理を実行する（ステップ（２））。
【００９２】
サーバ５０が、制御ユニット１００を認証する。プロセッサ１０２（図７に示すプログラム取得部１５２）は、制御プログラム５１をサーバ５０からダウンロードする。制御プログラム５１は、主記憶装置１０６に格納される（ステップ（３））。
【００９３】
制御プログラム５１が主記憶装置１０６に格納されると、プロセッサ１０２（図７に示すプログラム実行部１５４）は、その制御プログラム５１を含む制御プログラムを呼び出して実行する（ステップ（４））。これにより制御ユニット１００は正常運転を行う。
【００９４】
制御ユニット１００の電源がオフされると、主記憶装置１０６に記憶された情報が消去される（ステップ（５））。
【００９５】
上記のように、制御ユニット１００の電源をオフすることによって、制御プログラム５１は主記憶装置１０６から消去される。これにより、制御ユニット１００からの情報の漏洩を防ぐことができる。加えて、制御プログラムはバイナリコードで記述されている。制御ユニット１００の電源がオンのときに、制御プログラムが制御ユニット１００から読み出されたとしても、制御プログラムの解析は困難である。この点においても、本実施の形態では、情報の漏洩を防ぐことができる。
【００９６】
＜Ｇ．暗号化通信の利用＞
セキュリティの観点からは、サーバ５０からの制御プログラムのダウンロードに関して、以下の２つの点を考慮する必要がある。
【００９７】
第１の点は、サーバ５０が偽装されている可能性があるという点である。制御ユニット１００が偽のサーバから、不正な制御プログラムをダウンロードする可能性を考慮する必要がある。
【００９８】
第２の点は、不正なクライアントがサーバ５０にアクセスする可能性があるという点である。サーバ５０から制御プログラムが盗まれる可能性を考慮する必要がある。
【００９９】
本実施の形態では、サーバ５０と制御ユニット１００との間の通信に暗号化通信を用いる。一実施形態によれば、サーバ５０と制御ユニット１００との間の通信のプロトコルにＳＳＬ（Secure Sockets Layer）が利用される。
【０１００】
図９は、制御ユニット１００とサーバ５０との間のセキュア通信による制御プログラムの転送および実行の流れを説明した模式図である。図９を参照して、サーバ５０には証明書６３（ＳＳＬ証明書）が格納されるとともに、制御ユニット１００には証明書６４（ＳＳＬ証明書）が格納される。これにより、サーバ５０および制御ユニット１００の各々が本物であることが証明される。
【０１０１】
本実施の形態では、公開鍵暗号方式を用いて、サーバ５０から制御ユニット１００に制御プログラムを転送する。これにより、制御ユニット１００は、正しい制御プログラムを受信することができる。
【０１０２】
加えて本実施の形態では、サーバ５０から制御プログラムだけでなくシリアルＩＤも転送される。シリアルＩＤは、制御プログラムに関連付けられた情報であり、サーバ５０に格納された制御プログラムに付随するＩＤ（プログラムＩＤ）である。一方、制御ユニット１００も、シリアルＩＤを不揮発的に記憶する。制御ユニット１００に記憶されたシリアルＩＤは、制御プログラムに予め付与されたプログラムＩＤである。
【０１０３】
制御ユニット１００は、このシリアルＩＤを検証ＩＤとして用いる。具体的には、制御ユニット１００は、サーバ５０から制御プログラム５１とともに転送されたシリアルＩＤと、制御ユニット１００内に記憶された検証ＩＤとを比較する。すなわち、制御ユニット１００は、制御プログラムに関連付けられた情報（シリアルＩＤ）の同一性を検証する。２つのシリアルＩＤが一致する場合に、制御ユニット１００は、制御プログラムを主記憶装置１０６に格納して実行する。したがって制御ユニット１００が不正なプログラムを実行する可能性がより小さくなる。
【０１０４】
上述の処理を実行するための手順を以下に説明する。まず、ステップＳ１０において、サポート装置６００は、転送データを作成する。具体的には、サポート装置６００は、ハッシュ関数を用いて、制御プログラム５３（図９では「ＵＰＧ５」と表記）、およびシリアルＩＤ５５（図９の例では「５５５５」）のハッシュ値を生成する。さらにサポート装置６００は、秘密鍵６１を用いて、ハッシュ値を暗号化して、デジタル署名５６を作成する。サポート装置６００は、制御プログラム５３、シリアルＩＤ５５およびデジタル署名５６の組をサーバ５０に格納する。
【０１０５】
制御ユニット１００は、サーバ５０に認証済みである。制御ユニット１００は、サーバ５０にアクセスして制御プログラムを要求する（ステップＳ１１）。サーバ５０は、制御ユニット１００からの要求に応答して、制御プログラム５３、シリアルＩＤ５５およびデジタル署名５６の組を、制御ユニット１００に転送する（ステップＳ１２）。制御ユニット１００では、プログラム取得部１５２（図７を参照）が、制御プログラム５３、シリアルＩＤ５５およびデジタル署名５６の組を取得する。
【０１０６】
制御ユニット１００（プログラム管理部１５３）は、デジタル署名５６を検証する（ステップＳ１３）。詳細には、プログラム管理部１５３は、公開鍵６２を用いてデジタル署名５６を復号してハッシュ値を得る。さらに、プログラム管理部１５３は、ハッシュ関数を用いて制御プログラム５３およびシリアルＩＤ５５からハッシュ値を生成する。プログラム管理部１５３は、制御プログラム５３から生成されたハッシュ値と、デジタル署名５６から復号されたハッシュ値とを比較する。
【０１０７】
両方のハッシュ値が一致する場合に、制御プログラム５３が改ざんされていないことが検証される。この場合に、プログラム管理部１５３は、サーバ５０から転送されたシリアルＩＤ５５と、制御ユニット１００に予め格納されたシリアルＩＤ１１１０とを照合する（ステップＳ１４）。シリアルＩＤ１１１０は、二次記憶装置１０８（図２を参照）に不揮発的に格納される。
【０１０８】
シリアルＩＤ５５およびシリアルＩＤ１１１０が一致する場合、プログラム管理部１５３は、制御プログラム５３を主記憶装置１０６に転送する。プログラム実行部１５４（図７を参照）は、主記憶装置１０６に格納された制御プログラム５３を実行する。一方、シリアルＩＤ５５およびシリアルＩＤ１１１０が一致しなければ、プログラム管理部１５３は、制御プログラム５３を消去する。
【０１０９】
なお、制御ユニット１００の起動時において、制御プログラム５３、およびシリアルＩＤ５５がデジタル署名５６に加えて、他の情報もサーバ５０から制御ユニット１００に転送されてもよい。
【０１１０】
図１０は、制御プログラム５３およびシリアルＩＤ５５とともにサーバ５０から転送される情報の例を説明した模式図である。図１０を参照して、制御ユニット１００は、シャットダウン処理の際に、保持変数５８をサーバ５０にアップロードする（ステップＳ１６）。保持変数５８は、制御ユニット１００のシャットダウン前の状態を、制御ユニット１００の再起動後にも保持するための変数である。
【０１１１】
ステップＳ１０〜Ｓ１５の処理は、基本的には、図９に示した処理と同じである。ステップＳ１０において、サポート装置６００は、制御プログラム５３およびシリアルＩＤ５５に加えて、保持変数５８からハッシュ値を生成する。サポート装置６００は、秘密鍵６１を用いてハッシュ値を暗号化してデジタル署名５６を生成する。
【０１１２】
制御ユニット１００は、サーバ５０にアクセスして制御プログラムを要求する（ステップＳ１１）。サーバ５０は、制御ユニット１００からの要求に応答して、制御プログラム５３、シリアルＩＤ５５、保持変数５８およびデジタル署名５６の組を、制御ユニット１００に転送する（ステップＳ１２）。
【０１１３】
プログラム管理部１５３は、公開鍵６２を用いてデジタル署名５６を復号してハッシュ値を得る。さらに、プログラム管理部１５３は、ハッシュ関数を用いて、制御プログラム５３、シリアルＩＤ５５および保持変数５８からハッシュ値を生成する。プログラム管理部１５３は、そのハッシュ値と、デジタル署名５６から復号されたハッシュ値とを比較して、デジタル署名を検証する（ステップＳ１３）。両方のハッシュ値が一致すれば、プログラム管理部１５３は、サーバ５０から転送されたシリアルＩＤ５５と、制御ユニット１００に予め格納されたシリアルＩＤ１１１０とを照合する（ステップＳ１４）。シリアルＩＤ５５およびシリアルＩＤ１１１０が一致する場合、プログラム管理部１５３は、制御プログラム５３を主記憶装置１０６に転送する。プログラム実行部１５４（図７を参照）は、主記憶装置１０６に格納された制御プログラム５３を実行する。
【０１１４】
保持変数５８は、主記憶装置１０６に格納されてもよい。保持変数５８をサーバ５０にアップロードした後に制御ユニット１００をシャットダウンする。制御ユニット１００のシャットダウンにより、保持変数５８を制御ユニット１００から消去することができる。
【０１１５】
＜Ｈ．制御プログラムの更新／再配信＞
制御ユニット１００の動作中に、制御プログラムを更新することが望ましい場合も起こりえる。たとえば、機能の追加あるいは更新のために制御プログラムが更新される。あるいは、サーバ５０から制御ユニット１００への制御プログラムの再配信が必要な場合も起こりえる。たとえばインシデントの発生によって、制御ユニット１００が再起動するような場合には、サーバ５０から制御ユニット１００への制御プログラムの再配信が必要となり得る。
【０１１６】
図１１は、制御プログラムの更新あるいは再配信のための制御プログラムの転送を説明する図である。図１１を参照して、制御ユニット１００は、電源オンの状態で、制御プログラム５１（図１１では「ＵＰＧ１」と表記）に従って運転する（ステップ（１））。
【０１１７】
制御プログラムが更新され、サーバ５０には、新しい制御プログラム５２（図１１では「ＵＰＧ２」と表記）格納される。この場合、サーバ５０から制御ユニット１００にプログラムの更新の通知が送られてもよい。制御ユニット１００は、サーバ５０から制御プログラム５２をダウンロードするために、サーバ５０に対して問い合わせおよび認証処理を実行する（ステップ（２））。
【０１１８】
サーバ５０から制御ユニット１００に制御プログラム５２がダウンロードされる。制御ユニット１００は、図９あるいは図１０に示された処理を実行して、主記憶装置１０６に制御プログラム５２を格納する（ステップ（３））。制御プログラム５１は、新しい制御プログラム５２に置き換えられる。
【０１１９】
プロセッサ１０２は、主記憶装置１０６から、制御プログラム５２を読み出して、実行する。これにより制御ユニット１００は正常運転を行う（ステップ（４））。この場合にも、制御プログラムは主記憶装置１０６にのみ格納されているため、制御ユニット１００の電源がオフされると、制御プログラムが主記憶装置１０６から削除される（ステップ（５））。したがって、制御プログラムが漏洩する可能性を低減することができる。
【０１２０】
＜Ｉ．制御プログラムの改ざんの検知＞
図９および図１０に示すように、本実施の形態では、電子署名および鍵を利用することにより制御プログラムの改ざんを検知することができる。これにより、情報の漏洩を検知することができる。しかし、上述の方法に限定されず、制御プログラムの改ざんを検知する他の方法を本実施の形態に適用してもよい。
【０１２１】
図１２は、本実施の形態により実施可能な、制御プログラムの改ざんを検知する方法を示した模式図である。図１２を参照して、前回実行された制御プログラム５１のハッシュ値６５が制御ユニット１００の二次記憶装置１０８に記憶される。ハッシュ値６５は、プログラム管理部１５３（図７を参照）によって生成されてもよい。二次記憶装置１０８は不揮発性記憶装置であるので、制御ユニット１００の電源がオフされていても、ハッシュ値６５は制御ユニット１００に保存される（ステップ（１））。
【０１２２】
電源オンにより、制御ユニット１００が起動される。制御ユニット１００は、サーバ５０に対して問い合わせおよび認証処理を実行する（ステップ（２））。
【０１２３】
サーバ５０は、制御プログラム５１（図８では「ＵＰＧ１」と表記）を格納する。しかし外部からサーバ５０への不正アクセス等の理由により、サーバ５０に格納された制御プログラム５１が改ざんされたとする。この場合、サーバ５０には不正な制御プログラム５９が格納される。
【０１２４】
制御ユニット１００は、サーバ５０から制御プログラム５９をダウンロードする。プロセッサ１０２（プログラム管理部１５３）は、制御プログラム５９のハッシュ値６６を生成する。プロセッサ１０２（プログラム管理部１５３）は、ハッシュ値６６とハッシュ値６５とを照合する（ステップ（３））。
【０１２５】
この場合、ハッシュ値６６とハッシュ値６５とは一致しない。したがって、プロセッサ１０２は、エラーを検知するとともに、そのエラーをユーザに通知する。プロセッサ１０２は、エラーを通知するためにインジケータ１２４を点灯させてもよい（ステップ（４））。あるいはプロセッサ１０２は、ＨＭＩ８００（図５を参照）にエラーメッセージを表示させるのでもよい。なお、ハッシュ値６６とハッシュ値６５とが一致した場合、サーバ５０からダウンロードされた制御プログラムは、制御ユニット１００が前回実行した制御プログラムと同じである。したがって、この場合には、サーバ５０からダウンロードされた制御プログラムは、主記憶装置１０６に格納される。
【０１２６】
以上のように、本実施の形態によれば、制御ユニット１００への電源投入時に、制御ユニット１００はサーバから制御プログラムをダウンロードする。制御プログラムは、制御ユニット１００の主記憶装置（揮発性記憶装置）に格納される。電源をオフすることにより、制御ユニット１００から制御プログラム５１が消去される。したがって、制御ユニット１００から漏洩する可能性を低減することができる。
【０１２７】
＜Ｊ．付記＞
以上説明したように、本実施形態は以下に列挙する開示を含む。
【０１２８】
１．コントローラシステム（１）であって、
前記コントローラシステム（１）への電源投入により、制御プログラムが記憶されたサーバ（５０）から前記制御プログラムを取得するプログラム取得部（１５２）と、
前記コントローラシステム（１）に電源が供給される間、前記プログラム取得部（１５２）により取得された前記制御プログラムを記憶し、前記コントローラシステムへの電源の供給の停止により、前記制御プログラムを消去する揮発性記憶装置（１０６）と、
前記揮発性記憶装置（１０６）に記憶された前記制御プログラムを実行するプログラム実行部（１５４）とを備える、コントローラシステム（１）。
【０１２９】
２．前記コントローラシステム（１）は、
前記制御プログラムに関連付けられた情報の同一性を検証することにより、前記制御プログラムの正当性を管理するプログラム管理部（１５３）をさらに備える、請求項１に記載のコントローラシステム（１）。
【０１３０】
３．前記プログラム取得部（１５２）は、前記サーバ（５０）との間の暗号化通信により、前記制御プログラムと、前記制御プログラムに付随するプログラムＩＤ（５５）とを前記サーバ（５０）から受信し、
前記プログラム管理部（１５３）は、前記制御プログラムおよび前記プログラムＩＤ（５５）が改ざんされていないことを検証し、かつ、前記制御プログラムに予め付与された検証ＩＤ（１１１０）と、前記プログラムＩＤ（５５）とが一致することを検証した場合に、前記制御プログラムを前記揮発性記憶装置（１０６）に格納する、請求項２に記載のコントローラシステム（１）。
【０１３１】
４．前記プログラム管理部（１５３）は、前記コントローラシステム（１）の状態を保持するための変数である保持変数を生成して、前記コントローラシステム（１）のシャットダウン時に前記保持変数を、前記サーバ（５０）にアップロードし、
前記プログラム取得部（１５２）は、前記制御プログラムおよび前記プログラムＩＤとともに前記保持変数を前記サーバ（５０）から取得する、請求項３に記載のコントローラシステム（１）。
【０１３２】
５．前記コントローラシステム（１）は、前回に実行された前記制御プログラムから生成されたハッシュ値（６５）を不揮発的に保存する不揮発性記憶装置（１０８）をさらに備え、
前記プログラム管理部（１５３）は、前記プログラム取得部（１５２）により取得された前記制御プログラムのハッシュ値（６６）を生成して、前記プログラム管理部（１５３）により生成されたハッシュ値が、前記不揮発性記憶装置に記憶されたハッシュ値と一致する場合に、前記制御プログラムを前記揮発性記憶装置（１０６）に格納する、請求項２に記載のコントローラシステム（１）。
【０１３３】
今回開示された実施の形態はすべての点で例示であって制限的なものでないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【符号の説明】
【０１３４】
１  コントローラシステム、２  第１ネットワーク、４  第２ネットワーク、１０  制御システム、５０  サーバ、５１，５２，５３，５９，１１０４  制御プログラム、５５，１１１０  シリアルＩＤ、５６  デジタル署名、５８  保持変数、６１  秘密鍵、６２  公開鍵、６３，６４  証明書、６５，６６  ハッシュ値、１００  制御ユニット、１０２，２０２，３０２  プロセッサ、１０４，２０４，３０４  チップセット、１０６，２０６，３０６  主記憶装置、１０８，２０８，３０８  二次記憶装置、１１０，２１０  通信コントローラ、１１２，２１２  ＵＳＢコントローラ、１１４，２１４，３１４  メモリカードインターフェイス、１１５，２１５，３１５  メモリカード、１１６，１１８，１２０，２１６，２１８  ネットワークコントローラ、１２２，３２２  内部バスコントローラ、１２４，２２４，３２４  インジケータ、１４２，１４４，２４２  通信ポート、１５０  制御エンジン、１５１  サーバ問合部、１５２  プログラム取得部、１５３  プログラム管理部、１５４  プログラム実行部、１６０  情報エンジン、１７０  ブローカー、１８０，３６０  ログデータベース、２００  セキュリティユニット、２５０  セキュリティエンジン、２６０  セキュリティ情報、３００  セーフティユニット、３５０  セーフティエンジン、４００  機能ユニット、４５０  電源ユニット、５００  フィールドデバイス、６００  サポート装置、６０１  ソースコード、７００  装置、９００  データベース、Ｓ１０〜Ｓ１６  ステップ。
【図１】
2020161048.tif 000003
【図２】
2020161048.tif 000004
【図３】
2020161048.tif 000005
【図４】
2020161048.tif 000006
【図５】
2020161048.tif 000007
【図６】
2020161048.tif 000008
【図７】
2020161048.tif 000009
【図８】
2020161048.tif 000010
【図９】
2020161048.tif 000011
【図１０】
2020161048.tif 000012
【図１１】
2020161048.tif 000013
【図１２】
2020161048.tif 000014