(57)【要約】【課題】制御装置を停止させることなくプログラムの更新と検証を行うことを課題とする。【解決手段】実施形態の検証システムは、複数の演算部を有する制御装置と、前記制御装置のプログラムを更新する際に、前記複数の演算部のうち１つの演算部の前記プログラムの更新および動作の検証を実施した後、検証結果が適正であれば、残りの前記演算部についても順次、前記プログラムの更新および動作の検証を実施する検証装置と、を備える。【選択図】図１
2018014046.tif 000002
【特許請求の範囲】
【請求項１】
複数の演算部を有する制御装置と、
前記制御装置のプログラムを更新する際に、前記複数の演算部のうち１つの演算部の前記プログラムの更新および動作の検証を実施した後、検証結果が適正であれば、残りの前記演算部についても順次、前記プログラムの更新および動作の検証を実施する検証装置と、を備える検証システム。
【請求項２】
前記制御装置は、
現在の動作モードが通常モードと検証モードのいずれであるのかを格納するモード格納部と、
前記動作モードに応じて、外部からの入力データの入力先を前記複数の演算部の少なくともいずれかに切り替える入力動作切替部と
前記動作モードに応じて、前記複数の演算部それぞれの演算結果の出力先を制御信号出力部と検証結果出力部のいずれかに切り替える出力動作切替部と
前記出力動作切替部から受け取った前記演算結果である制御信号を被制御装置に出力する前記制御信号出力部と、
前記出力動作切替部から受け取った前記演算結果である検証結果を前記検証装置に出力する前記検証結果出力部と、を備え、
前記検証装置は、
前記制御装置が使用する前記プログラム、更新プログラムを格納するとともに、検証用データと、前記制御装置から受信した検証結果と、を格納する記憶部と、
前記制御装置のプログラムを更新する際に前記モード格納部が前記検証モードに遷移した場合、前記複数の演算部のうち１つの演算部に対して、前記更新プログラムを送信するとともに、前記検証用データによる動作の検証を実施した後、検証結果が適正であれば、残りの前記演算部についても順次、前記更新プログラムを送信するとともに、前記検証用データによる動作の検証を実施する検証部と、を備える、請求項１に記載の検証システム。
【請求項３】
前記モード格納部が前記通常モードから前記検証モードへ遷移すると、
前記入力動作切替部は、前記モード格納部を参照して、前記検証装置から受信した前記検証用データを更新対象の前記演算部にのみ入力するようにデータの経路を切り替え、
前記出力動作切替部は、前記モード格納部を参照して、更新対象の前記演算部の検証結果を前記検証結果出力部へ出力するようデータの経路を切り替える、請求項２に記載の検証システム。
【請求項４】
前記検証装置の検証部は、前記演算部の検証結果について、当該演算部による出力値とその出力のタイミングのそれぞれが適正であるか否かを判定する、請求項２または請求項３に記載の検証システム。
【請求項５】
前記検証装置の検証部は、更新対象の前記演算部に対して、前記検証用データとして異常系テストのデータを送信し、当該演算部が前記異常系テストの出力値に対応して送信したエラーコードに基づいて、当該演算部の動作が適正か否かを判定する、請求項２から請求項４のいずれか一項に記載の検証システム。
【請求項６】
前記検証装置の検証部は、更新対象の前記演算部に対して、更新後の動作が不適正だと判定した場合には、更新前の前記プログラムを再度配信する、請求項２から請求項５のいずれか一項に記載の検証システム。
【請求項７】
前記制御装置は、
現在の動作モードが通常モードと検証モードのいずれであるのかを格納するモード格納部と、
前記動作モードに応じて、外部からの入力データの入力先を前記複数の演算部の少なくともいずれかに切り替える入力動作切替部と、を備え、
前記検証装置は、
前記制御装置が使用する前記プログラム、更新プログラム、前記更新プログラムと演算内容が同一で検証結果送信機能を有する検証プログラムを格納するとともに、前記制御装置から受信した検証結果を格納する記憶部と、
前記制御装置のプログラムを更新する際に前記モード格納部が前記検証モードに遷移した場合、前記複数の演算部のうち１つの演算部に対して、前記検証プログラムを送信するとともに、前記検証プログラムを実行した当該演算部から受信した検証結果が適正であれば、残りの前記演算部についても順次、前記検証プログラムを送信するとともに前記検証プログラムによる検証結果に基づく検証を実施する検証部と、を備える、請求項１に記載の検証システム。
【請求項８】
前記検証装置の検証部は、前記複数の演算部のうち１つの演算部に対して、前記検証プログラムを送信するとともに、前記検証プログラムを実行した当該演算部から受信した検証結果が適正であれば、当該演算部に前記更新プログラムを配信する、請求項７に記載の検証システム。
【請求項９】
前記検証装置の検証部は、前記複数の演算部のうち１つの演算部に対して、前記検証プログラムを送信するとともに、前記検証プログラムを実行した当該演算部から受信した検証結果が不適正であれば、当該演算部に更新前の前記プログラムを再度配信する、請求項７に記載の検証システム。
【請求項１０】
前記検証装置の記憶部は、正常系テスト用の前記検証プログラムによる検証結果の正解データである正常系適正値データを記憶しており、
前記検証装置の検証部は、更新対象の前記演算部に対して、正常系テスト用の前記検証プログラムを送信し、前記検証プログラムを実行した当該演算部から受信した計算結果と、前記記憶部の正常系適正値データとに基づいて、当該演算部の動作が適正か否かを判定する、請求項７から請求項９のいずれか一項に記載の検証システム。
【請求項１１】
前記検証装置の検証部は、更新対象の前記演算部に対して、異常系テスト用の前記検証プログラムを送信し、当該演算部が前記検証プログラムを実行して前記異常系テストの出力値に対応して送信したエラーコードに基づいて、当該演算部の動作が適正か否かを判定する、請求項７から請求項１０のいずれか一項に記載の検証システム。
【請求項１２】
複数の演算部を有する制御装置のプログラムを更新する際に、前記複数の演算部のうち１つの演算部の前記プログラムの更新および動作の検証を実施するステップと、
検証結果が適正であれば、残りの前記演算部についても順次、前記プログラムの更新および動作の検証を実施するステップと、を含む検証方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、検証システムおよび検証方法に関する。
【背景技術】
【０００２】
従来から、プラント、フィールド機器等を監視・制御する制御装置（制御システム）は、生産性やアベイラビリティの観点から、連続運転が求められている。しかし、制御装置のプログラムにバグや脆弱性が発見された場合にはプログラムを更新する必要があり、一般的に、プログラムを更新している間は、制御装置を停止する必要がある。また、プログラムを更新した後、そのプログラムが適正に動作することを検証する必要もある。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１６−３１６２３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、従来技術において、制御装置を停止することなくプログラムの更新と検証を行うことができるものはない。
【０００５】
そこで、本発明は、このような状況に鑑みてなされたものであり、制御装置を停止させることなくプログラムの更新と検証を行うことを課題とする。
【課題を解決するための手段】
【０００６】
実施形態の検証システムは、複数の演算部を有する制御装置と、前記制御装置のプログラムを更新する際に、前記複数の演算部のうち１つの演算部の前記プログラムの更新および動作の検証を実施した後、検証結果が適正であれば、残りの前記演算部についても順次、前記プログラムの更新および動作の検証を実施する検証装置と、を備える。
【図面の簡単な説明】
【０００７】
【図１】図１は、第１実施形態の検証システムの構成例を示すブロック図である。
【図２】図２は、第１実施形態の検証システムの通常モード時の動作の説明図である。
【図３】図３は、第１実施形態の検証システムの検証モード時の動作の説明図である。
【図４】図４は、第１実施形態の検証システムの動作例を示すフローチャートである。
【図５】図５は、第１実施形態における検証結果の例を示す図である。
【図６】図６は、第１実施形態における正常系比較検証の動作例を示すフローチャートである。
【図７】図７は、第１実施形態における異常系適正値データの例を示す図である。
【図８】図８は、第１実施形態における異常系比較検証の動作例を示すフローチャートである。
【図９】図９は、第２実施形態の検証システムの構成例を示すブロック図である。
【図１０】図１０は、第２実施形態の検証システムの通常モード時の動作の説明図である。
【図１１】図１１は、第２実施形態の検証システムの検証モード時の動作の説明図である。
【図１２】図１２は、第２実施形態の検証システムの動作例を示すフローチャートである。
【図１３】図１３は、第２実施形態における正常系保存データの例を示す図である。
【図１４】図１４は、第２実施形態における正常系比較検証の動作例を示すフローチャートである。
【図１５】図１５（ａ）は、第２実施形態における検証プログラムの一部の例を示す図である。図１５（ｂ）は、第２実施形態における異常系保存データの例を示す図である。
【図１６】図１６は、第２実施形態における異常系比較検証の動作例を示すフローチャートである。
【発明を実施するための形態】
【０００８】
以下、実施形態の検証システムおよび検証方法について、図面を参照して説明する。まず、図１〜図８を参照して第１実施形態について説明し、次に、図９〜図１６を参照して第２実施形態について説明する。
【０００９】
（第１実施形態）
図１は、第１実施形態の検証システムＳの構成例を示すブロック図である。検証システムＳは、制御装置１、検証装置２、被制御装置３、および、検出装置４を備えている。
【００１０】
制御装置１は、プラント、フィールド機器等を監視・制御するコンピュータ装置であって、通信部１０１、入力動作切替部１０２、第１演算部１０３、第２演算部１０４、第１記憶部１０５、第２記憶部１０６、出力動作切替部１０７、制御信号出力部１０８、検証結果出力部１０９、モード格納部１１０、および、検出信号入力部１１１を備える。
【００１１】
通信部１０１は、検証装置２との間でデータの送受信を行うためのインタフェースである。入力動作切替部１０２は、通信部１０１、第１演算部１０３、第２演算部１０４と接続され、モード格納部１１０を参照して動作モード（通常モード、検証モードのいずれか）に応じてデータの経路を第１演算部１０３、第２演算部１０４の間で切り替える。なお、検証モードとは、制御装置１が被制御装置３の制御を行いながら、検証装置２が制御装置１の更新プログラムの検証を行うモードである。また、通常モードとは、検証モード以外で制御装置１が被制御装置３の制御を行うモードである。
【００１２】
第１演算部１０３は、第１記憶部１０５に格納された制御プログラム等に基づき、入力情報に対する演算結果を出力する。第１記憶部１０５は、制御プログラム等を記憶する記憶手段である。
【００１３】
第２演算部１０４は、第２記憶部１０６に格納された制御プログラム等に基づき、入力情報に対する演算結果を出力する。第２記憶部１０６は、制御プログラム等を記憶する記憶手段である。なお、以下において、第１演算部１０３と第２演算部１０４を特に区別しないときは、符号無しで単に「演算部」と記載する場合もある。
【００１４】
出力動作切替部１０７は、第１演算部１０３、第２演算部１０４と接続され、モード格納部１１０を参照して動作モードに応じてそれらの演算結果の出力先を制御信号出力部１０８と検証結果出力部１０９のいずれかに切り替える。
【００１５】
制御信号出力部１０８は、出力動作切替部１０７から受け取った演算結果である制御信号を被制御装置３に出力する。検証結果出力部１０９は、出力動作切替部１０７から受け取った演算結果である検証結果を検証装置２に出力（送信）する。
【００１６】
モード格納部１１０は、現在の動作モードが通常モードと検証モードのいずれであるのかを格納する。制御装置１は、モード格納部１１０の状態により、通常モードと検証モードの大きく２種類の異なる動作を行う。例えば、モード格納部１１０が通常モードから検証モードへ遷移すると、入力動作切替部１０２は、モード格納部１１０を参照して、検証装置２から受信した検証用データを更新対象の演算部にのみ入力するようにデータの経路を切り替える。また、出力動作切替部１０７は、モード格納部１１０を参照して、更新対象の演算部の検証結果を検証結果出力部１０９へ出力するようデータの経路を切り替える。
【００１７】
なお、モード格納部１１０に保持される動作モードは、ユーザ端末（不図示）や検証装置２からの伝送情報によって変化してもよいし、また、ＤＩＰスイッチなどの物理的切り替えによって変化してもよい。検出信号入力部１１１は、検出装置４からの入力情報を受信する。
【００１８】
検証装置２は、制御装置１のプログラムを更新する際に、第１演算部１０３と第２演算部１０４のうち一方のプログラムの更新および動作の検証を実施した後、検証結果が適正であれば、他方についてもプログラムの更新および動作の検証を実施するコンピュータ装置である。検証装置２は、通信部２１、検証信号入力部２２、検証部２３、および、記憶部２４を備える。
【００１９】
通信部２１は、制御装置１との間でデータの送受信を行うためのインタフェースである。検証信号入力部２２は、制御装置１から出力された検証信号を入力する。
【００２０】
検証部２３は、制御装置１のプログラムを更新する際にモード格納部１１０が検証モードに遷移した場合、第１演算部１０３と第２演算部１０４の一方に対して、更新プログラムを送信するとともに、検証用データによる動作の検証を実施した後、検証結果が適正であれば、他方についても、更新プログラムを送信するとともに、検証用データによる動作の検証を実施する。また、例えば、検証部２３は、演算部の検証結果について、出力値とタイミングのそれぞれが適正であるか否かを判定する。
【００２１】
また、例えば、検証部２３は、更新対象の演算部に対して、検証用データとして異常系テストのデータを送信し、当該演算部が異常系テストの出力値に対応して送信したエラーコードに基づいて、当該演算部の動作が適正か否かを判定する。また、例えば、検証部２３は、更新対象の演算部に対して、更新後の動作が不適正だと判定した場合には、更新前プログラムを再度配信する。
【００２２】
記憶部２４は、プログラム、更新プログラム、検証用データ、正常系適正値データ、異常系適正値データ、検証結果等を格納する。
【００２３】
プログラム（更新前プログラム）と更新プログラムは、制御装置１によって使用される。検証用データは、正常系検証用データと異常系検証用データとから構成される。正常系検証用データとは、正常系テストで検証用に用いられるデータである。正常系テストとは、正常な入力に対して適正な出力がされるかを調べるテストである。
【００２４】
一方、異常系検証用データとは、異常系テストで検証用に用いられるデータである。異常系テストとは、異常な入力に対して適正な出力（例えば適正なエラーコードの出力）がされるかを調べるテストである。
【００２５】
正常系適正値データは、正常系テストの正解データであり、つまり、正常系テストに関して適正か否かを判定するためのデータである。異常系適正値データは、異常系テストの正解データであり、つまり、異常系テストに関して適正か否かを判定するためのデータである。検証結果は、正常系テストの結果、および、異常系テストの結果である。
【００２６】
被制御装置３は、制御装置１によって制御される装置である。検出装置４は、検出信号を出力する各種のセンサである。
【００２７】
次に、検証システムＳの通常モード時の動作について説明する。図２は、第１実施形態の検証システムＳの通常モード時の動作の説明図である。通常モードでは、入力動作切替部１０２は、検出装置４からのＤＩ（Digital  Input）やＡＩ（Analog  Input）といったデータ入力情報を検出信号入力部１１１経由で受け取ると（Ｓ１、Ｓ２）、第１演算部１０３と第２演算部１０４の両方へ転送する（Ｓ３，Ｓ４）。
【００２８】
第１演算部１０３は、この入力値（データ入力情報）を用いて、第１記憶部１０５に格納された制御プログラムに基づき演算し、演算結果を出力動作切替部１０７に送る（Ｓ５）。また、第２演算部１０４は、この入力値（データ入力情報）を用いて、第２記憶部１０６に格納された制御プログラム（第１記憶部１０５に格納された制御プログラムと同じ）に基づき演算し、演算結果を出力動作切替部１０７に送る（Ｓ６）。
【００２９】
出力動作切替部１０７は、受け取った演算結果を制御信号出力部１０８に送る（Ｓ７）。このとき、出力動作切替部１０７は、受け取った演算結果の二重化比較照合や、先着優先処理などのデータ選択処理を実施してもよい。次に、制御信号出力部１０８は、演算結果（制御信号）を被制御装置３に送信する（Ｓ８）。被制御装置３（アクチュエータなど）は、受信した演算結果（制御信号）によって制御される。なお、通常モードでは、検証装置２は、使用されないため、除外してもよい。
【００３０】
次に、検証システムＳの検証モード時の動作について説明する。図３は、第１実施形態の検証システムＳの検証モード時の動作の説明図である。ユーザは、制御装置１のプログラムを更新する場合、モード格納部１１０の動作モードを通常モードから検証モードに切り替える。これによって、入力動作切替部１０２と出力動作切替部１０７がデータの経路を切り替える。
【００３１】
まず、通常モードと同様の動作は、第１演算部１０３が実行する（Ｓ１→Ｓ２→Ｓ３→Ｓ５→Ｓ７→Ｓ８）。
【００３２】
一方、プログラムの更新、検証の動作時のデータの流れは、図３の破線で示す通りである。以下、図４を参照して具体的に説明する。図４は、第１実施形態の検証システムＳの動作例を示すフローチャートである。
【００３３】
まず、検証装置２の検証部２３は、記憶部２４に格納された更新プログラムを制御装置１の第２演算部１０４に送信する（Ｓ１０１）。第２演算部１０４は、その更新プログラムを受信（ダウンロード）する（Ｓ１０２）。
【００３４】
次に、検証部２３は、Ｓ１０３〜Ｓ１０８で正常系テストを実行する。具体的には、検証部２３は、記憶部２４に格納された正常系検証用データ（検出装置４からの検出信号を模したデータ）を第２演算部１０４に送信する（Ｓ１０３）。第２演算部１０４はその正常系検証用データを受信する（Ｓ１０４）。次に、第２演算部１０４は、更新プログラムと正常系検証用データを用いて制御演算を実行し（Ｓ１０５）、演算結果を検証装置２に出力する（Ｓ１０６）。検証装置２はその演算結果を受信する（Ｓ１０７）。
【００３５】
次に、検証部２３は、受信した演算結果を用いて正常系比較検証して（Ｓ１０８）、図５に示す検証結果（正常系テストの検証結果）を記憶部２４に格納する。ここで、図５は、第１実施形態における検証結果の例を示す図である。図５の検証結果について、左から順に、検証入力値は、正常系検証用データである。なお、この検証入力値は、制御装置１のとり得る最小から最大までのすべてでもよいし、間引いたものであってもよい。想定値は、正解データ（正常系適正値データ）である。読み込み値は、第２演算部１０４による演算結果である。前回出力との時間差は、実測値であり、許容範囲として「８〜１２ｍｓ」が設定されている。なお、この許容範囲は、ユーザごとに設定可能でもよいし、ベンダーが仕様として予め定義してもよい。判定は、ＯＫ（適正）とＮＧ（不適正）の２択である。
【００３６】
次に、正常系比較検証（Ｓ１０８）の動作例について説明する。図６は、第１実施形態における正常系比較検証の動作例を示すフローチャートである。検証部２３は、すべての検証入力値について、Ｓ１０８２〜Ｓ１０８４を実行する（Ｓ１０８１〜Ｓ１０８５）。ただし、Ｓ１０８２とＳ１０８３のいずれかでＮｏとなった場合は、その時点で処理を終了する。
【００３７】
Ｓ１０８２において、検証部２３は、読み込み値が想定値と同じであるか否かを判定し、Ｙｅｓの場合はＳ１０８３に進み、Ｎｏの場合はＳ１０８６に進む。Ｓ１０８３において、検証部２３は、前回出力との時間差が許容範囲内か否かを判定し、Ｙｅｓの場合はＳ１０８４に進み、Ｎｏの場合はＳ１０８６に進む。Ｓ１０８４において、検証部２３は、検証結果における判定結果としてＯＫを保存する（図５）。
【００３８】
Ｓ１０８６において、検証部２３は、検証結果における判定結果としてＮＧを保存する（図５）。その後、検証部２３は、記憶部２４に格納されている更新前プログラムを第２演算部１０４に配信する（Ｓ１０８７）。これは、更新プログラムが適正に動作しなかったためである。その後、検証部２３は、検証を終了し（Ｓ１０８８）、処理を終了する。なお、このＳ１０８８を経由した後は、図４の処理も中止する。また、動作モードを検証モードから通常モードに戻す。Ｓ１０８５を経由してＳ１０８を終了した場合は、図４の処理に戻る。
【００３９】
図４に戻って、Ｓ１０８の後、検証部２３は、Ｓ１０９〜Ｓ１１４で異常系テストを実行する。具体的には、検証部２３は、記憶部２４に格納された異常系検証用データを第２演算部１０４に送信する（Ｓ１０９）。第２演算部１０４はその異常系検証用データを受信する（Ｓ１１０）。次に、第２演算部１０４は、更新プログラムと異常系検証用データを用いてエラー検出を実行し（Ｓ１１１）、エラーコードを検証装置２に送信する（Ｓ１１２）。検証装置２はそのエラーコードを受信する（Ｓ１１３）。
【００４０】
前記したように、異常系テストとは、異常な入力に対して適正な出力がされるかを調べるテストである。また、異常系適正値データは、異常系テストの正解データであり、つまり、異常系テストに関して適正か否かを判定するためのデータである。図７は、第１実施形態における異常系適正値データの例を示す図である。図７に示すように、異常系適正値データでは、エラーの種類とエラーコードとが対応付けられている。
【００４１】
数値が許容範囲外のエラーには、エラーコード「００００」が対応付けられている。数値が許容範囲外のエラーとは、例えば、許容範囲が「０」〜「２０」のときに、「２１」という数値を受けた場合である。
【００４２】
また、データ内容が異常のエラーには、エラーコード「０００１」が対応付けられている。データ内容が異常のエラーとは、例えば、データサイズが不適正である場合である。
【００４３】
また、暗復号異常のエラーには、エラーコード「００１０」が対応付けられている。暗復号異常のエラーとは、例えば、暗号化データを復号化したら必ず先頭データが「０１２３」であるべきなのに別のデータになっている場合である。
【００４４】
図４に戻って、Ｓ１１３の後、検証部２３は、受信したエラーコードを用いて異常系比較検証して（Ｓ１１４）、検証結果（不図示）を記憶部２４に格納する。次に、異常系比較検証（Ｓ１１４）の動作例について説明する。図８は、第１実施形態における異常系比較検証の動作例を示すフローチャートである。検証部２３は、すべての検証入力データ（異常系検証用データ）について、Ｓ１１４２、Ｓ１１４３を実行する（Ｓ１１４１〜Ｓ１１４４）。ただし、Ｓ１１４２でＮｏとなった場合は、その時点で処理を終了する。
【００４５】
Ｓ１１４２において、検証部２３は、受信したエラーコードが適正であるか否かを判定し、Ｙｅｓの場合はＳ１１４３に進み、Ｎｏの場合はＳ１１４５に進む。Ｓ１１４２では、例えば、数値の許容範囲が「０」〜「２０」の場合に「２１」という数値が検証入力データであった場合に、エラーコード「００００」を受信すれば適正であり（Ｙｅｓ）、他のデータ（「００００」以外のエラーコード等）を受信すれば不適正である（Ｎｏ）。Ｓ１１４３において、検証部２３は、検証結果における判定結果としてＯＫを保存する。
【００４６】
Ｓ１１４５において、検証部２３は、検証結果における判定結果としてＮＧを保存する。その後、検証部２３は、記憶部２４に格納されている更新前プログラムを第２演算部１０４に配信する（Ｓ１１４６）。これは、更新プログラムが適正に動作しなかったためである。その後、検証部２３は、検証を終了し（Ｓ１１４７）、処理を終了する。なお、このＳ１１４７を経由した後は、図４の処理も中止する。また、動作モードを検証モードから通常モードに戻す。Ｓ１１４４を経由してＳ１１４を終了した場合は、図４の処理に戻る。
【００４７】
図４に戻って、Ｓ１１４の後、検証部２３は、記憶部２４に格納されている更新前プログラムを第２演算部１０４に送信する（Ｓ１１５）。第２演算部１０４は、その更新前プログラムを受信（ダウンロード）する（Ｓ１１６）。ここで、第２演算部１０４を更新前プログラムに戻すのは、これから第１演算部１０３のプログラムの更新、検証を行うにあたり、その間、通常モードと同様の処理を第２演算部１０４に実行させるためである。
【００４８】
次に、検証部２３は、Ｓ１１７〜Ｓ１３０において、第１演算部１０３のプログラムの更新、検証の処理を行うが、Ｓ１０１〜Ｓ１１４と同様であるため、説明を省略する。
【００４９】
Ｓ１３０の後、つまり、第２演算部１０４、第１演算部１０３ともにプログラムの更新、検証で問題がなかった場合、検証部２３は、記憶部２４に格納された更新プログラムを制御装置１の第２演算部１０４に送信する（Ｓ１３１）。第２演算部１０４は、その更新プログラムを受信（ダウンロード）する（Ｓ１３２）。これにより、第２演算部１０４、第１演算部１０３ともに更新プログラムに更新された。その後、モード格納部１１０は検証モードから通常モードに遷移する。
【００５０】
このように、第１実施形態の検証システムＳによれば、制御装置１を停止させることなくプログラムの更新と検証を行うことができる。具体的には、検証装置２の検証部２３は、制御装置１のプログラムを更新する際にモード格納部１１０が検証モードに遷移した場合、第１演算部１０３と第２演算部１０４の一方に対して、更新プログラムを送信するとともに、検証用データによる動作の検証を正常系テストと異常系テストの両方について実施した後、検証結果が適正であれば、他方についても同様の動作を実行する。これにより、制御装置１のプログラムを更新するだけでなく、更新後の動作も保障することができる。
【００５１】
（第２実施形態）
次に、第２実施形態の検証システムＳについて説明する。なお、第１実施形態と同様の構成には同様の符号を付し、重複する説明を適宜省略する。図９は、第２実施形態の検証システムＳの構成例を示すブロック図である。
【００５２】
図９の制御装置１は、図１の制御装置１と比較して、検証結果出力部１０９が無い点で異なっている。
【００５３】
また、図９の検証装置２は、図１の検証装置２と比較して、次の点で異なっている。まず、検証信号入力部２２が無い。また、記憶部２４が正常系検証プログラムと異常系検証プログラムからなる検証プログラムをさらに記憶している。つまり、第２実施形態では、更新プログラムではなく、更新プログラムと演算内容が同一で検証結果送信機能を有する
検証プログラムを用いて検証を行う。検証プログラムの場合、更新プログラムとは異なり、図１１に示すように、制御装置１において演算の結果を出力動作切替部１０７に伝送しない。また、検証プログラムは、演算結果を保持し、検証入力値と、その検証入力値に基づいた演算結果（出力値）と演算周期を検証装置２へ伝送する機能を有している（図１３）。
【００５４】
また、検証装置２は、制御装置１と同一の場所に設置されるローカル機器でもよいし、クラウドサーバなど、遠隔地に設置されるものでもよい。
【００５５】
また、例えば、検証部２３は、制御装置１のプログラムを更新する際にモード格納部１１０が検証モードに遷移した場合、第１演算部１０３と第２演算部１０４の一方に対して、検証プログラムを送信するとともに、検証プログラムを実行したその一方から受信した検証結果が適正であれば、他方についても、検証プログラムを送信する。
【００５６】
また、例えば、検証部２３は、第１演算部１０３と第２演算部１０４の一方に対して、検証プログラムを送信するとともに、検証プログラムを実行したその一方から受信した検証結果が適正であれば、その一方に更新プログラムを配信する。
【００５７】
また、例えば、検証部２３は、第１演算部１０３と第２演算部１０４の一方に対して、検証プログラムを送信するとともに、検証プログラムを実行したその一方から受信した検証結果が不適正であれば、その一方に更新前プログラムを再度配信する。
【００５８】
また、例えば、検証部２３は、更新対象の演算部に対して、正常系検証プログラムを送信し、それを実行した当該演算部から受信した計算結果と、記憶部２４の正常系適正値データとに基づいて、当該演算部の動作が適正か否かを判定する。
【００５９】
また、例えば、検証部２３は、更新対象の演算部に対して、異常系検証プログラムを送信し、それを実行した当該演算部から受信した計算結果と、記憶部２４の異常系適正値データとに基づいて、当該演算部の動作が適正か否かを判定する。
【００６０】
次に、検証システムＳの通常モード時の動作について説明する。図１０は、第２実施形態の検証システムＳの通常モード時の動作の説明図である。図１０のＳ２１〜Ｓ２８は、図２のＳ１〜Ｓ８と同様であるので、説明を省略する。
【００６１】
次に、検証システムＳの検証モード時の動作について説明する。図１１は、第２実施形態の検証システムＳの検証モード時の動作の説明図である。ユーザは、制御装置１のプログラムを更新する場合、モード格納部１１０の動作モードを通常モードから検証モードに切り替える。これによって、入力動作切替部１０２と出力動作切替部１０７がデータの経路を切り替える。
【００６２】
まず、通常モードと同様の動作は、第１演算部１０３が実行する（Ｓ２１→Ｓ２２→Ｓ２３→Ｓ２５→Ｓ２７→Ｓ２８）。
【００６３】
一方、プログラムの更新、検証の動作時のデータの流れは、図１１の破線で示す通りである。以下、図１２を参照して具体的に説明する。図１２は、第２実施形態の検証システムＳの動作例を示すフローチャートである。
【００６４】
まず、検証装置２の検証部２３は、記憶部２４に格納された検証プログラム（正常系検証プログラム、異常系検証プログラムの両方）を制御装置１の第２演算部１０４に送信する（Ｓ２０１）。第２演算部１０４は、その検証プログラムを受信（ダウンロード）する（Ｓ２０２）。
【００６５】
次に、検証部２３は、Ｓ２０３〜Ｓ２０８で正常系テストを実行する。具体的には、検証部２３は、記憶部２４に格納された正常系検証用データを第２演算部１０４に送信する（Ｓ２０３）。第２演算部１０４はその正常系検証用データを受信する（Ｓ２０４）。次に、第２演算部１０４は、正常系検証プログラムと正常系検証用データを用いて制御演算を実行し（Ｓ２０５）、演算結果（出力値）を保存（蓄積）してから、ひとまとまりの演算結果として検証装置２に送信する（Ｓ２０６）。検証装置２はその演算結果を受信する（Ｓ２０７）。
【００６６】
ここで、図１３は、第２実施形態における正常系保存データ（ひとまとまりの演算結果）の例を示す図である。図１３の正常系保存データについて、左から順に、検証入力値は、正常系検証用データである。演算結果は、検証入力値に基づいて演算した結果である。演算周期は、演算の時間長である。
【００６７】
図１２に戻って、Ｓ２０７の後、検証部２３は、受信した演算結果を用いて正常系比較検証して（Ｓ２０８）、検証結果（図５と同様）を記憶部２４に格納する。この正常系比較検証（Ｓ２０８）の動作例について説明する。図１４は、第２実施形態における正常系比較検証の動作例を示すフローチャートである。
【００６８】
検証部２３は、すべての検証入力値について、Ｓ２０８２〜Ｓ２０８４を実行する（Ｓ２０８１〜Ｓ２０８５）。ただし、Ｓ２０８２とＳ２０８３のいずれかでＮｏとなった場合は、その時点で処理を終了する。
【００６９】
Ｓ２０８２において、検証部２３は、演算結果（図１３）が想定値（図５）と同じであるか否かを判定し、Ｙｅｓの場合はＳ２０８３に進み、Ｎｏの場合はＳ２０８６に進む。Ｓ２０８３において、検証部２３は、演算周期（図１３）が許容範囲（図５）内か否かを判定し、Ｙｅｓの場合はＳ２０８４に進み、Ｎｏの場合はＳ２０８６に進む。Ｓ２０８４において、検証部２３は、検証結果における判定結果としてＯＫを保存する。
【００７０】
Ｓ２０８６において、検証部２３は、検証結果における判定結果としてＮＧを保存する。その後、検証部２３は、記憶部２４に格納されている更新前プログラムを第２演算部１０４に配信する（Ｓ２０８７）。これは、検証プログラムが適正に動作しなかったためである。その後、検証部２３は、検証を終了し（Ｓ２０８８）、処理を終了する。なお、このＳ２０８８を経由した後は、図１２の処理も中止する。また、動作モードを検証モードから通常モードに戻す。Ｓ２０８５を経由してＳ２０８を終了した場合は、図１２の処理に戻る。
【００７１】
図１２に戻って、Ｓ２０８の後、検証部２３は、Ｓ２０９〜Ｓ２１４で異常系テストを実行する。具体的には、検証部２３は、記憶部２４に格納された異常系検証用データ（異常系テスト番号）を第２演算部１０４に送信する（Ｓ２０９）。第２演算部１０４はその異常系検証用データを受信する（Ｓ２１０）。次に、第２演算部１０４は、異常系検証プログラムと異常系検証用データを用いてエラー検出を実行し（Ｓ２１１）、エラーコードを保存（蓄積）してから、ひとまとまりの演算結果として検証装置２に送信する（Ｓ２１２）。検証装置２はその演算結果を受信する（Ｓ２１３）。
【００７２】
なお、Ｓ２０６やＳ２１２での第２演算部１０４から検証装置２へのデータの送信タイミングは、処理の所定単位ごとでもよいし、一定数のデータサイズが保存された場合でもよいし、また、すべての処理が終わった場合でもよい。
【００７３】
ここで、図１５（ａ）は、第２実施形態における検証プログラムの一部の例を示す図である。図１５（ｂ）は、第２実施形態における異常系保存データ（ひとまとまりの演算結果）の例を示す図である。この検証プログラムにおいて、正常な処理では、ｂとｃの加算によりａを算出し（図１５（ａ）のＬ１）、ａとｄが一致する（図１５（ａ）のＬ５、Ｌ６）。そして、異常系テスト番号「１」のテスト（ＴＥＳＴ１）では、ａに１を加算することで（図１５（ａ）のＬ３）、ａ≠ｄという環境を創作可能になる（図１５（ａ）のＬ７〜Ｌ９）。なお、図１５（ａ）のＬ８の「ＥＲＲＯＲ」はエラーコード（例えば「００００」）を意味する。このような異常系テストを複数用意することで、図１５（ｂ）に示すような異常系保存データ（ひとまとまりの演算結果）を作成可能となる。また、検証装置２の記憶部２４の異常系適正値データには、この図１５（ｂ）に示す情報が正解テーブルとして保存されている。なお、このような検証プログラムを用いれば、図１２におけるＳ２０９、Ｓ２１０の処理を省略できる。
【００７４】
図１２に戻って、Ｓ２１３の後、検証部２３は、受信した演算結果（エラーコード）を用いて異常系比較検証して（Ｓ２１４）、検証結果（不図示）を記憶部２４に格納する。次に、異常系比較検証（Ｓ２１４）の動作例について説明する。図１６は、第２実施形態における異常系比較検証の動作例を示すフローチャートである。検証部２３は、すべての異常系テスト番号のテストについて、Ｓ２１４２、Ｓ２１４３を実行する（Ｓ２１４１〜Ｓ２１４４）。ただし、Ｓ２１４２でＮｏとなった場合は、その時点で処理を終了する。
【００７５】
Ｓ２１４２において、検証部２３は、エラーコードが適正であるか否かを判定し、Ｙｅｓの場合はＳ２１４３に進み、Ｎｏの場合はＳ２１４５に進む。Ｓ２１４３において、検証部２３は、検証結果における判定結果としてＯＫを保存する。
【００７６】
Ｓ２１４５において、検証部２３は、検証結果における判定結果としてＮＧを保存する。その後、検証部２３は、記憶部２４に格納されている更新前プログラムを第２演算部１０４に配信する（Ｓ２１４６）。これは、検証プログラムが適正に動作しなかったためである。その後、検証部２３は、検証を終了し（Ｓ２１４７）、処理を終了する。なお、このＳ２１４７を経由した後は、図１２の処理も中止する。また、動作モードを検証モードから通常モードに戻す。Ｓ２１４４を経由してＳ２１４を終了した場合は、図１２の処理に戻る。
【００７７】
図１２に戻って、Ｓ２１４の後、検証部２３は、記憶部２４に格納されている更新前プログラムを第２演算部１０４に送信する（Ｓ２１５）。第２演算部１０４は、その更新前プログラムを受信（ダウンロード）する（Ｓ２１６）。ここで、第２演算部１０４を更新前プログラムに戻すのは、これから第１演算部１０３のプログラムの更新、検証を行うにあたり、その間、通常モードと同様の処理を第２演算部１０４に実行させるためである。
【００７８】
次に、検証部２３は、Ｓ２１７〜Ｓ２３０において、第１演算部１０３のプログラムの更新、検証の処理を行うが、Ｓ２０１〜Ｓ２１４と同様であるため、説明を省略する。
【００７９】
Ｓ２３０の後、つまり、第２演算部１０４、第１演算部１０３ともにプログラムの更新、検証で問題がなかった場合、検証部２３は、記憶部２４に格納された更新プログラムを制御装置１の第２演算部１０４と第１演算部１０３に送信する（Ｓ２３１）。第２演算部１０４、第１演算部１０３は、その更新プログラムを受信（ダウンロード）する（Ｓ２３２、Ｓ２３３）。これにより、第２演算部１０４、第１演算部１０３ともに更新プログラムに更新された。その後、モード格納部１１０は検証モードから通常モードに遷移する。
【００８０】
このように、第２実施形態の検証システムＳによれば、制御装置１を停止させることなくプログラムの更新と検証を行うことができる。具体的には、検証装置２の検証部２３は、制御装置１のプログラムを更新する際にモード格納部１１０が検証モードに遷移した場合、第１演算部１０３と第２演算部１０４の一方に対して、検証プログラムを送信するとともに、正常系テストと異常系テストの両方について実施した後、検証結果が適正であれば、他方についても同様の動作を実行する。これにより、制御装置１のプログラムを更新するだけでなく、更新後の動作も保障することができる。また、制御装置１の検証の際に制御装置１からの実際の出力値を使用しないため、離れた場所に検証装置２を設置でき、利便性が向上する。
【００８１】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【００８２】
例えば、制御装置１の演算部が３つ以上の場合であっても、同様に、それぞれの演算部について順番にプログラムの更新および動作の検証を実施することで、制御装置１を停止させることなくプログラムの更新と検証を行うことができる。
【符号の説明】
【００８３】
１      制御装置
１０１  通信部
１０２  入力動作切替部
１０３  第１演算部
１０４  第２演算部
１０５  第１記憶部
１０６  第２記憶部
１０７  出力動作切替部
１０８  制御信号出力部
１０９  検証結果出力部
１１０  モード格納部
１１１  検出信号入力部
２      検証装置
２１    通信部
２２    検証信号入力部
２３    検証部
２４    記憶部
３      被制御装置
４      検出装置
Ｓ      検証システム
【図１】
2018014046.tif 000003
【図２】
2018014046.tif 000004
【図３】
2018014046.tif 000005
【図４】
2018014046.tif 000006
【図５】
2018014046.tif 000007
【図６】
2018014046.tif 000008
【図７】
2018014046.tif 000009
【図８】
2018014046.tif 000010
【図９】
2018014046.tif 000011
【図１０】
2018014046.tif 000012
【図１１】
2018014046.tif 000013
【図１２】
2018014046.tif 000014
【図１３】
2018014046.tif 000015
【図１４】
2018014046.tif 000016
【図１５】
2018014046.tif 000017
【図１６】
2018014046.tif 000018