(57)【要約】  制御装置（１０）は、機器を制御するための制御処理を実行し、受付部（１１）と、算出部（１４）と、判定部（１５）と、実行部（１３）と、を備える。受付部（１１）は、制御処理を実行するためのプログラムに含まれる監視対象である対象プログラム（１２２）の変更を検出するための検出コードを算出する算出処理と、算出された検出コード（１２３）を過去に対象プログラム（１２２）から算出された比較コード（１２４）と比較する比較処理と、を含むコード処理の実行指示を受け付ける。算出部（１４）は、対象プログラム（１２２）から検出コードを算出する。判定部（１５）は、検出コード（１２３）が比較コード（１２４）に等しいか否かを判定する。実行部（１３）は、実行手順に従ってコード処理を実行する。
2021005691.tif 000002
【特許請求の範囲】
【請求項１】
機器を制御するための制御処理を実行する制御装置であって、
前記制御処理を実行するためのプログラムに含まれる監視対象である対象プログラムの変更を検出するための検出コードを算出する算出処理と、算出された前記検出コードを過去に前記対象プログラムから算出された比較コードと比較する比較処理と、を含むコード処理の実行指示を受け付ける受付手段と、
前記対象プログラムから前記検出コードを算出する算出手段と、
前記検出コードが前記比較コードに等しいか否かを判定する判定手段と、
前記実行指示に従って前記コード処理を実行する実行手段と、
を備える制御装置。
【請求項２】
前記対象プログラムは、前記制御処理を実行するための複数のプログラムのうちユーザによって指定されたプログラムである、
請求項１に記載の制御装置。
【請求項３】
前記受付手段は、前記算出処理及び前記比較処理を含む前記コード処理を構成する処理の実行手順を受け付け、
前記実行手段は、前記実行手順に従って前記コード処理を実行する、
請求項１又は２に記載の制御装置。
【請求項４】
機器を制御するための制御処理を実行する制御装置によって実行されるプログラム監視方法であって、
受付手段が、前記制御処理を実行するためのプログラムに含まれる監視対象である対象プログラムの変更を検出するための検出コードを算出する算出処理と、算出された前記検出コードを過去に前記対象プログラムから算出された比較コードと比較する比較処理と、を含むコード処理の実行指示を受け付ける受付ステップと、
算出手段が、前記対象プログラムから前記検出コードを算出する算出ステップと、
判定手段が、前記検出コードが前記比較コードに等しいか否かを判定する判定ステップと、
実行手段が、前記実行指示に従って、前記コード処理を実行する実行ステップと、
を含むプログラム監視方法。
【請求項５】
機器を制御するための制御処理を実行する制御装置を、
前記制御処理を実行するためのプログラムに含まれる監視対象である対象プログラムの変更を検出するための検出コードを算出する算出処理と、算出された前記検出コードを過去に前記対象プログラムから算出された比較コードと比較する比較処理と、を含むコード処理の実行指示を受け付ける受付手段、
前記対象プログラムから前記検出コードを算出する算出手段、
前記検出コードが前記比較コードに等しいか否かを判定する判定手段、
前記実行指示に従って、前記コード処理を実行する実行手段、
として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、制御装置、プログラム監視方法及びプログラムに関する。
【背景技術】
【０００２】
ＦＡ（Factory Automation）の現場では、制御装置が種々の機器を制御することで、生産工程、加工工程、検査工程、その他の工程が実現される。通常、制御装置は、ユーザから提供されるプログラムを実行することで、ユーザによって任意に規定された処理を実行する。この処理が実行される際には、処理内容の正当性を確認することが望ましい。そこで、制御装置におけるデータを検証する技術を利用することが考えられる（例えば、特許文献１を参照）。【０００３】
特許文献１には、プログラマブルコントローラの動作モードを決定するパラメータの正当性を検証する技術について記載されている。また、プログラマブルコントローラの初期起動時にパラメータの正当性を検証することも記載されている。この技術では、パラメータからチェックコードが計算されて、計算されたチェックコードが記憶部に保持されたチェックコードと異なるときに、プログラマブルコントローラがパラメータを読み込んで動作モードの設定をする。この技術によれば、パラメータの値が変更されたときに、プログラマブルコントローラを再起動することなくパラメータの更新を反映することができる。また、初期起動時にパラメータの正当性を検証するので、プログラマブルコントローラが誤った動作モードで稼働することを防止することができる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００９−１８７３７３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
プログラムの正当性の確認に特許文献１の技術を適用する場合には、プログラムからチェックコードを計算することが考えられる。しかしながら、特許文献１の技術では、パラメータが更新される度にチェックコードが計算されるため、プログラマブルコントローラの制御処理による演算負荷の状態に関わらずチェックコードの計算負荷がかかり、制御装置の制御処理に影響を及ぼすおそれがあった。したがって、プログラムの正当性を確認するタイミングをコントロールすることで、制御処理を実行する際の演算負荷をコントロールすることが望ましい。【０００６】
本発明は、プログラムの正当性を確認するタイミングをコントロールすることで、制御処理を実行する際の演算負荷をコントロールすることを目的とする。
【課題を解決するための手段】
【０００７】
上記目的を達成するため、本発明の制御装置は、機器を制御するための制御処理を実行する制御装置であって、制御処理を実行するためのプログラムに含まれる監視対象である対象プログラムの変更を検出するための検出コードを算出する算出処理と、算出された検出コードを過去に対象プログラムから算出された比較コードと比較する比較処理と、を含むコード処理の実行指示を受け付ける受付手段と、対象プログラムから検出コードを算出する算出手段と、検出コードが比較コードに等しいか否かを判定する判定手段と、実行指示に従ってコード処理を実行する実行手段と、を備える。
【発明の効果】
【０００８】
本発明によれば、受付手段が、算出処理と比較処理とを含むコード処理の実行指示を受け付けて、実行手段が、実行指示に従ってコード処理を実行する。このため、コード処理が実行されるタイミングを、ユーザが任意に設定することができる。これにより、プログラムの正当性を確認する際の制御装置による演算のタイミングをコントロールすることが可能となる。したがって、プログラムの正当性を確認するタイミングをコントロールすることで、制御処理を実行する際の演算負荷をコントロールすることができる。
【図面の簡単な説明】
【０００９】
【図１】本発明の実施の形態に係る制御システムの構成を示す図
【図２】実施の形態に係るユーザ端末及び制御装置のハードウェア構成を示す図
【図３】実施の形態に係る制御装置の機能的な構成を示す図
【図４】実施の形態に係るラダープログラムの具体例を示す図
【図５】実施の形態に係る記憶部に記憶される情報の一例を示す図
【図６】実施の形態に係るコード処理を示すフローチャート
【図７】実施の形態に係るラダープログラムの一例を示す図
【発明を実施するための形態】
【００１０】
以下、本発明の実施の形態に係る制御装置１０について、図面を参照しつつ詳細に説明する。
【００１１】
実施の形態１．
図１には、本実施の形態に係る制御装置１０により形成される制御システム１００の構成が示されている。制御システム１００は、製造ラインを稼働させるために工場に構築されるシステムである。制御システム１００は、機器３０を制御する制御装置１０と、制御装置１０によって実行される制御処理を設定するためのユーザ端末２０と、製造ラインに設置された機器３０と、を有する。なお、図１には、１つの機器３０が代表的に示されているが、制御システム１００は、制御装置１０の制御対象である複数の機器３０を含んでもよい。
【００１２】
制御装置１０とユーザ端末２０とは、専用線又はネットワークを介して通信可能に接続される。例えば、制御装置１０とユーザ端末２０とは、ＵＳＢ（Universal Serial Bus）ケーブルを介して接続されてもよいし、ＬＡＮ（Local Area Network）ケーブルを介して接続されてもよい。また、制御装置１０と機器３０とは、ＦＡネットワークを介して通信可能に接続される。
【００１３】
制御装置１０は、工場内の機器３０を統括的に制御することで連動させて、一連の製造ラインを実現させるＰＬＣ（Programmable Logic Controller）である。制御装置１０は、ユーザ端末２０からプログラムを受け付けて、当該プログラムにより規定される制御処理を実行することで機器３０を制御する。このプログラムは、例えば、ラダー言語で記述されたラダープログラムからユーザ端末２０においてコンパイルされた実行形式のオブジェクトプログラムである。ユーザによって作成されるプログラムは、ユーザプログラムとも呼称される。制御装置１０は、特定のプログラムを監視して、当該プログラムの正当性を確認するプログラム監視装置としても機能する。この正当性の確認の詳細については、後述する。
【００１４】
ユーザ端末２０は、ＩＰＣ（Industrial Personal Computer）に代表されるＰＣ（Personal Computer）、タブレット端末、その他のＵＩ（User Interface）端末である。ユーザ端末２０は、ユーザ２１がプログラムを設定するための画面を提供し、ユーザ２１によって入力されたプログラムを取得して、当該プログラムを実行形式に変換してから制御装置１０に提供する。ユーザ端末２０は、ユーザ２１がユーザ端末２０のキーボードを用いることで入力されたプログラムを取得してもよいし、ユーザ２１が指定した内部又は外部のメモリアドレスからプログラムを読み込んでもよい。
【００１５】
機器３０は、例えば、製造ラインに設置されるセンサ、アクチュエータ、ロボット、その他のＦＡ機器である。機器３０は、制御装置１０からの指示に従って動作する。例えば、センサである機器３０は、制御装置１０から指定された周期で、センシング結果を制御装置１０に通知する。また、アクチュエータである機器３０は、制御装置１０から指定されたタイミング及び速度でワークを移動させる。
【００１６】
図２には、制御装置１０及びユーザ端末２０のハードウェア構成が模式的に示されている。図２に示されるように、制御装置１０及びユーザ端末２０は、プロセッサ４１と、主記憶部４２と、補助記憶部４３と、ＲＯＭ（Read Only Memory）４４と、入力部４５と、出力部４６と、通信部４７と、を有する。主記憶部４２、補助記憶部４３、ＲＯＭ４４、入力部４５、出力部４６及び通信部４７はいずれも、内部バス４８を介してプロセッサ４１に接続される。
【００１７】
プロセッサ４１は、ＣＰＵ（Central Processing Unit）又はＭＰＵ（Micro Processing Unit）を含む。プロセッサ４１は、補助記憶部４３に記憶されるプログラムＰ１及びＲＯＭ４４に記憶されるファームウェアＰ２を実行することにより、制御装置１０及びユーザ端末２０の種々の機能を実現して、後述の処理を実行する。
【００１８】
主記憶部４２は、ＲＡＭ（Random Access Memory）を含む。主記憶部４２には、補助記憶部４３からプログラムＰ１がロードされ、ＲＯＭ４４からファームウェアＰ２がロードされる。そして、主記憶部４２は、プロセッサ４１の作業領域として用いられる。
【００１９】
補助記憶部４３及びＲＯＭ４４はそれぞれ、ＥＥＰＲＯＭ（Electrically Erasable Programmable Read-Only Memory）及びＨＤＤ（Hard Disk Drive）に代表される不揮発性メモリを含む。補助記憶部４３は、プログラムＰ１の他に、プロセッサ４１の処理に用いられる種々のデータを記憶する。補助記憶部４３及びＲＯＭ４４は、プロセッサ４１の指示に従って、プロセッサ４１によって利用されるデータをプロセッサ４１に供給する。また、補助記憶部４３は、プロセッサ４１から供給されたデータを記憶する。
【００２０】
入力部４５は、ハードウェアスイッチ、入力キー及びポインティングデバイスに代表される入力デバイスを含む。入力部４５は、制御装置１０又はユーザ端末２０のユーザ２１によって入力された情報を取得して、取得した情報をプロセッサ４１に通知する。
【００２１】
出力部４６は、ＬＥＤ（Light Emitting Diode）、ＬＣＤ（Liquid Crystal Display）及びスピーカに代表される出力デバイスを含む。出力部４６は、プロセッサ４１の指示に従って、種々の情報をユーザに提示する。
【００２２】
通信部４７は、外部の装置と通信するためのネットワークインタフェース回路を含む。通信部４７は、外部から信号を受信して、この信号により示されるデータをプロセッサ４１へ出力する。また、通信部４７は、プロセッサ４１から出力されたデータを示す信号を外部の装置へ送信する。なお、図２には、通信部４７が代表的に１つ示されているが、これには限定されない。例えば、制御装置１０は、ユーザ端末２０と通信するための通信部４７と、機器３０と通信するための通信部４７と、を個別に有してもよい。
【００２３】
図２に示されるハードウェアの構成要素が協働することで、制御装置１０は、図３に示される機能を発揮する。制御装置１０は、図３に示されるように、その機能として、制御装置１０が実行すべきプログラムをユーザ端末２０から受け付けて、このプログラムの実行指示を受け付ける受付部１１と、種々の情報を記憶する記憶部１２と、実行指示に従ってプログラムを実行する実行部１３と、プログラムに含まれる算出のコマンドが実行されたときに算出コードを算出する算出部１４と、プログラムに含まれる比較のコマンドが実行されたときに２つの算出コードを比較して判定する判定部１５と、を有する。算出コードは、特定のデータの変更を検出するためのコードであって、変更をチェックするためのチェックコードとも呼称される。なお、図３中の矢印は、受付部１１、実行部１３、算出部１４及び判定部１５と、記憶部１２と、の間における情報の授受を示しているが、制御装置１０は、図３に矢印で示されていない情報の伝送経路を含む。例えば、受付部１１が受け付けた実行指示は、受付部１１と同様にプロセッサ４１により実現される実行部１３に通知される。
【００２４】
受付部１１は、主として制御装置１０の入力部４５、通信部４７及びファームウェアＰ２を実行するプロセッサ４１の協働により実現される。受付部１１は、ユーザ端末２０から提供される制御処理プログラム１２０及びコード処理プログラム１２１を取得して、取得した制御処理プログラム１２０及びコード処理プログラム１２１を記憶部１２に格納する。また、受付部１１は、制御処理プログラム１２０の実行指示及びコード処理プログラム１２１の実行指示を受け付ける。受付部１１は、制御装置１０においてコード処理の実行指示を受け付ける受付手段の一例に相当する。コード処理とは、後述するようにコード処理プログラム１２１により実行される処理である。
【００２５】
制御処理プログラム１２０は、図２に示される制御装置１０のプログラムＰ１に相当する。制御処理プログラム１２０は、制御装置１０が実行すべき機器３０を制御するための制御処理を規定するプログラムであって、この処理は、制御装置１０によって繰り返し実行される。制御装置１０は、制御処理プログラム１２０を実行することで制御処理を実行する。ここでは、制御処理プログラム１２０は、ユーザ２１によって任意に設定された複数のユーザプログラムと、監視対象となる対象プログラム１２２と、を含む。
【００２６】
コード処理プログラム１２１は、対象プログラム１２２を監視して、対象プログラム１２２の変更を検出するためのコマンドを含む。詳細には、コード処理プログラム１２１は、対象プログラム１２２の変更を検出するための算出コードを算出する算出処理の実行指令である算出コマンド１２１１と、算出された第１の算出コードである検出コードを過去に対象プログラム１２２から算出された第２の算出コードである比較コードと比較する比較処理の実行指令である比較コマンド１２１２と、比較結果に基づく結果処理の実行指令である結果コマンド１２１３と、を含む。コード処理プログラム１２１は、ユーザによって規定された算出処理、比較処理及び結果処理を含む一連のコード処理の実行手順を規定する。すなわち、コード処理は、検出コードを算出する算出処理と、算出された検出コードを比較コードと比較する比較処理と、を含む。
【００２７】
図４には、コード処理プログラム１２１のソースコードに相当するラダー図の具体例が示されている。図４の上段において、算出コマンド１２１１は、「ＳＰ．ＰＩＤＲＤ」というコマンドである。このコマンドには、対象プログラム１２２を名称により指定する「“ｔａｒｇｅｔ．ｐｒｇ”」という第１引数と、算出処理において発生したエラーを識別するためのエラーコードが格納される記憶領域のアドレスである「Ｄ０」という第２引数と、算出された比較コードが格納される記憶領域のアドレスである「Ｄ１０」という第３引数と、算出処理が完了したか否かを示す完了ビットが格納される記憶領域のアドレスである「Ｍ１０」という第４引数と、が指定されている。図４の中段においては、算出コマンド１２１１が再度記述されているが、第２引数が「Ｄ１」に変更され、算出された検出コードが格納される記憶領域のアドレスである「Ｄ２０」に第３引数が変更され、第４引数が「Ｍ２０」に変更されている。なお、アドレスは、記憶部１２におけるデータの所在を示すメモリアドレスである。
【００２８】
図４に示される算出コマンド１２１１は、記憶部１２に記憶されている対象プログラム１２２のバイナリファイルからＣＲＣ（Cyclic Redundancy Check）に従って比較コード及び検出コードを算出するためのコマンドである。ただし、算出コマンド１２１１はこれに限定されず、チェックサムを算出するためのコマンドであってもよいし、ＭＤ５に代表されるハッシュ値を算出するためのコマンドであってもよい。対象プログラム１２２の変更の前後で異なる比較コードと検出コードが算出されれば、算出方式は任意である。また、図４では、名称により対象プログラム１２２が指定されたが、アドレスにより指定されてもよいし、他の方法により指定されてもよい。
【００２９】
図４の下段において、比較コマンド１２１２は、「Ｄ＜＞Ｄ１０  Ｄ２０」というコマンドである。このコマンドは、Ｄ１０というアドレスにより示される記憶領域に格納された比較コードの値と、Ｄ２０というアドレスにより示される記憶領域に格納された検出コードの値と、が異なるか否かを判定するコマンドである。そして、これらの比較コードと検出コードとの比較の結果、比較コマンド１２１２に続いて記述された結果コマンド１２１３が実行される。この結果コマンド１２１３は、「ＳＥＴ  Ｍ３０」というコマンドであって、比較の結果が異なる場合に、Ｍ３０というアドレスにより示される記憶領域に１という値を格納し、比較の結果が等しい場合に、Ｍ３０というアドレスにより示される記憶領域にゼロという値を格納する命令である。すなわち、比較コードと検出コードが異なるときには、アドレス「Ｍ３０」の値が１になり、比較コードと検出コードが等しいときには、アドレス「Ｍ３０」の値がゼロになる。
【００３０】
図３に戻り、対象プログラム１２２は、ユーザ２１が記述したプログラムであってもよいし、ユーザ２１が予め用意して制御処理プログラム１２０に組み込んだプログラムであってもよい。対象プログラム１２２は、制御処理プログラム１２０に含まれる特定のプログラムである。制御装置１０は、制御処理プログラム１２０を繰り返し実行し、ユーザの任意のタイミングで入力した実行指示に従ってコード処理プログラム１２１を実行する。なお、制御装置１０が実行する制御処理には、制御処理プログラム１２０とコード処理プログラム１２１との両方を実行する場合と、制御処理プログラム１２０のみを実行する場合と、コード処理プログラム１２１のみを実行する場合と、が含まれてもよい。
【００３１】
実行部１３は、主として制御装置１０のプロセッサ４１によって実現される。実行部１３は、制御装置１０の入力部４５であるハードウェアスイッチがＯＦＦからＲＵＮに切り換えられると、ＲＵＮが選択されたことの通知を受付部１１から受けて、記憶部１２に記憶されている制御処理プログラム１２０を実行する。また、実行部１３は、ユーザ端末２０上で実行されるツールからの実行指示を受け付けたことが受付部１１から通知されると、コード処理プログラム１２１を実行する。そして、実行部１３は、コード処理プログラム１２１に含まれる算出コマンド１２１１については、算出部１４に算出処理を実行させ、コード処理プログラム１２１に含まれる比較コマンド１２１２については、判定部１５に比較処理を実行させる。実行部１３は、制御装置１０においてコード処理の実行指示に従ってコード処理を実行する実行手段の一例に相当する。
【００３２】
算出部１４は、主として制御装置１０のファームウェアＰ２を実行するプロセッサ４１によって実現される。算出部１４は、算出コマンドの第１引数から第４引数までを取得し、第１引数によって指定された対象プログラム１２２を記憶部１２から読み出して、読み出した対象プログラム１２２からＣＲＣ−３２により検出コード及び比較コードを算出する。検出コード及び比較コードの算出に際して、算出部１４は、指定された対象プログラム１２２の読み出しに失敗した場合に、予め定められたエラーコードを、第２引数により指定されたアドレスにより示される記憶領域に格納する。そして、算出部１４は、検出コード及び比較コードを算出すると、算出した検出コード及び比較コードを第３引数により指定されたアドレスにより示される記憶領域に格納し、算出処理の完了を示す「１」という完了ビットを第４引数により指定されたアドレスにより示される記憶領域に格納する。図４に示されるコード処理プログラム１２１が実行される場合には、算出部１４は、図４中の中段に示す２つ目の算出コマンド１２１１により、図３に示される検出コード１２３を算出して記憶部１２に格納し、図４中の上段に示す１つ目の算出コマンド１２１１により、図３に示される比較コード１２４を算出して記憶部１２に格納する。算出部１４は、制御装置１０において対象プログラム１２２から検出コードを算出する算出手段の一例に相当する。
【００３３】
判定部１５は、主として制御装置１０のファームウェアＰ２を実行するプロセッサ４１によって実現される。判定部１５は、比較コマンド１２１２により指定された２つのアドレスにより示される記憶領域それぞれに格納されている値が等しいか否かを判定して、判定結果を実行部１３に返す。図４に示されるコード処理プログラム１２１が実行される場合には、判定部１５は、図３に示される検出コード１２３及び比較コード１２４を比較する。そして、比較結果に応じて、コード処理プログラム１２１のうちの結果コマンドが実行される。判定部１５は、制御装置１０において検出コードが比較コードに等しいか否かを判定する判定手段の一例に相当する。
【００３４】
図５には、記憶部１２に書き込まれる比較コード、検出コード及び比較結果の具体例が示されている。アドレス「Ｄ１０」には、算出された比較コード１２４として「０ｘ３４ＤＢ」という値が格納され、アドレス「Ｄ２０」には、算出された検出コード１２３として「０ｘ３４ＤＢ」という値が格納されている。これらの比較コード及び検出コードの値が等しいため、アドレス「Ｍ３０」には、比較結果として「ゼロ」の値が格納されている。
【００３５】
続いて、制御装置１０によって実行されるコード処理の一例について、図６を参照して説明する。なお、このコード処理とは並列に、制御装置１０によって制御処理プログラム１２０が実行される。コード処理は、制御処理による演算負荷が少ないタイミングをユーザが見計らうことで実行される。
【００３６】
制御装置１０は、ユーザ２１により提供されるコード処理プログラム１２１を、ユーザ端末２０を介して受け付ける（ステップＳ１）。具体的には、受付部１１が、ユーザ端末２０からコード処理プログラム１２１を受信して記憶部１２に格納する。これにより、受付部１１は、コード処理に含まれる算出処理、比較処理、結果処理、その他の処理について、ユーザ２１により指定された実行手順を受け付けることとなる。
【００３７】
次に、制御装置１０は、ユーザ２１からのコード処理の実行指示を受け付ける（ステップＳ２）。具体的には、受付部１１が、ユーザ端末２０から受信した実行の指示を実行部１３に通知する。なお、受付部１１は、制御装置１０のハードウェアスイッチの切り換えによるコード処理の実行指示を受け付けてもよい。ステップＳ２は、制御装置１０によって実行されるプログラム監視方法において、コード処理の実行指示を受け付ける受付ステップの一例に相当する。
【００３８】
次に、制御装置１０は、コード処理プログラム１２１を実行する（ステップＳ３）。具体的には、実行部１３が、コード処理プログラム１２１を記憶部１２から読み出して実行する。ステップＳ３は、制御装置１０によって実行されるプログラム監視方法において、コード処理を実行する実行ステップの一例に相当する。
【００３９】
次に、制御装置１０は、制御処理プログラム１２０に含まれる監視対象である対象プログラム１２２の比較コード１２４を算出して記憶部１２に格納する（ステップＳ４）。具体的には、算出部１４が、コード処理プログラム１２１に記述された算出コマンド１２１１及び引数に従って、対象プログラム１２２の比較コード１２４を算出して、算出した比較コード１２４を記憶部１２に書き込む。
【００４０】
次に、制御装置１０は、ステップＳ４で対象プログラム１２２から比較コード１２４を算出したタイミングとは異なるタイミングで、実行中の対象プログラム１２２に対して検出コード１２３を算出して記憶部１２に格納する（ステップＳ５）。具体的には、算出部１４が、コード処理プログラム１２１に記述された算出コマンド１２１１及び引数に従って、対象プログラム１２２の検出コード１２３を算出して、算出した検出コード１２３を、記憶部１２に書き込む。これにより、ステップＳ４の比較コードとは異なるタイミングで算出された検出コードが、ステップＳ４で比較コードが書き込まれたアドレスとは異なるアドレスに書き込まれる。ステップＳ５は、制御装置１０によって実行されるプログラム監視方法において、検出コードを算出する算出ステップの一例に相当する。
【００４１】
次に、制御装置１０は、検出コード１２３が比較コード１２４に等しいか否かを判定する（ステップＳ６）。具体的には、判定部１５が、コード処理プログラム１２１において指定された２つのアドレスから値を読み出して、読み出した値が等しいか否かを判定することにより比較する。ステップＳ６は、制御装置１０によって実行されるプログラム監視方法において、検出コードが等しいか否かを判定する判定ステップの一例に相当する。
【００４２】
検出コード１２３が比較コード１２４に等しいと判定された場合（ステップＳ６；Ｙｅｓ）、制御装置１０は、制御処理プログラム１２０の実行を続ける（ステップＳ７）。図４に示される例では、アドレス「Ｍ３０」の値が「ゼロ」であるときに、対象プログラム１２２の実行が継続される。その後、制御装置１０は、図６に示されるようにステップＳ５以降の処理を繰り返してもよいし、コード処理を終了してもよい。
【００４３】
一方、検出コード１２３が比較コード１２４に等しくはないと判定された場合（ステップＳ６；Ｎｏ）、制御装置１０は、対象プログラム１２２に変更があったことをユーザ２１に報知する（ステップＳ８）。ステップＳ４の実行以降において制御処理プログラム１２０が実行される間に、対象プログラム１２２が変更された場合には、比較コードと検出コードが異なると判定されて、ユーザ２１への報知が実行される。図４に示される例では、アドレス「Ｍ３０」の値が１であるときに、ユーザ２１への報知が実行される。ユーザ２１への報知は、変更を検知したことをユーザ端末２０に表示することであってもよいし、制御装置１０のＬＥＤを点灯或いは点滅させることであってもよい。
【００４４】
次に、制御装置１０は、制御処理を停止する（ステップＳ９）。具体的には、実行部１３が、制御処理プログラムの実行を停止する。その後、コード処理が終了する。
【００４５】
以上、説明したように、受付部１１が、算出処理と比較処理とを含むコード処理の実行指示を受け付けて、実行部１３が、実行指示に従ってコード処理を実行する。このため、コード処理が実行されるタイミングを、ユーザが任意に設定することができる。これにより、プログラムの正当性を確認する際の制御装置による演算のタイミングをコントロールすることが可能となる。したがって、プログラムの正当性を確認するタイミングをコントロールすることで、制御処理を実行する際の演算負荷をコントロールすることができる。例えば、制御装置が行う機器３０を制御するための処理での演算による制御装置の演算負荷が比較的小さいときに、コード処理を行うことで制御装置にかかる演算負荷を軽減することができる。すなわち、プログラムの正当性を確認しつつ制御処理を実行する際の演算負荷を軽減することができる。
【００４６】
換言すると、上述の特許文献１に記載の技術では、制御装置にチェックコードの計算負荷がかかり、制御装置の制御処理に影響を及ぼすおそれがあった。したがって、プログラムの正当性を確認するための計算負荷による制御処理への影響を軽減する余地があった。これに対して本実施の形態に係る制御装置１０によれば、プログラムの正当性を確認するための計算負荷による制御処理への影響を軽減することが可能になる。
【００４７】
また、ユーザ２１は、制御処理プログラム１２０が１回実行される度に比較コードと検出コードの算出及び比較を実行するコード処理プログラム１２１を実行してもよい（コード処理の実行）。また、比較コードがすでに算出され記憶部１２に書き込み完了している場合、制御処理プログラム１２０が１回実行される度にコード処理プログラム１２１に含まれる検出コードの算出及び検出コードと比較コードとの比較を実行してもよい（コード処理の実行）。なお、比較コードの算出と記憶部１２への書き込みは、ユーザ２１が制御処理プログラム１２０の全て、または一部をユーザが意図して書き換えた際に、制御処理プログラム１２０の全てまたは制御処理プログラム１２０に含まれる対象プログラム１２２に対して実行すればよく、コード処理プログラム１２１の実行の際に常に含まれる必要はない。さらに、比較コードは、コード処理プログラム１２１の実行により算出される必要はなく、ステップＳ１においてコード処理プログラム１２１とともに外部から受け付けられた比較コードが記憶部１２に格納されてもよい。
【００４８】
さらに、制御処理プログラム１２０が１回実行される度にコード処理を実行するのに代えて、制御処理プログラム１２０が１０回実行される毎にコード処理を実行するように制御処理を設定してもよい。制御処理プログラム１２０が１０回実行される度にコード処理が実行されれば、制御装置の演算負荷を考えたうえで、制御処理が所定回数だけ実行される毎に自動でコード処理を実行することができる。これにより、プログラムの正当性を定期的に確認することができる。
【００４９】
ここで、制御処理を１０回実行する度にコード処理を実行するラダー図の一例について、図７を参照して説明する。このラダー図に示されるラダープログラムを実行する制御装置１０は、制御処理プログラム１２０とコード処理プログラム１２１との双方を実行するサイクルを繰り返し実行するが、コード処理プログラム１２１に関しては１０サイクルのうち１サイクルでコードの算出及び比較を実行し、残りの９サイクルでは実質的な処理を実行しない。
【００５０】
図７において、２行の命令からなるコマンド群５１は、初めて制御処理が実行される場合、又は、ユーザが制御処理プログラム１２０を更新したことにより上述の比較コード１２４の算出が必要となった場合に実行される接点を備えている。コマンド群５１のうちの算出コマンド１２１１は、図４に示されたものと同様のコマンドである。コマンド群５１のうちのリセットコマンド５１１は、アドレス「Ｄ１００」に格納されているサイクル数を示す値をゼロにリセットするコマンドである。アドレス「Ｄ１００」は、記憶部１２内のアドレスでもよいし、制御装置１０に接続された記録媒体における記憶領域を示すアドレスでもよい。
【００５１】
図７において３行の命令からなるコマンド群５２は、常に実行される接点を備えている。コマンド群５２のうち、上段の加算コマンド５２１は、アドレス「Ｄ１００」に格納されているサイクル数に「１」を加算するコマンドである。また、中段の除算コマンド５２２は、アドレス「Ｄ１００」に格納されている値を、「Ｋ１０」により示される１０進数の整数１０で除して得る商をアドレス「Ｄ２００」に格納し、このアドレスに続くアドレス「Ｄ２０１」に剰余を格納するコマンドである。アドレス「Ｄ２００」，「Ｄ２０１」は、記憶部１２内のアドレスでもよいし、制御装置１０に接続された記録媒体における記憶領域を示すアドレスでもよい。また、下段の判定コマンド５２３は、アドレス「Ｄ１００」に格納されているサイクル数が、「Ｋ６００００」により示される１０進数の整数「６００００」以上であるか否かを判定するコマンドであって、この判定が肯定された場合には格納コマンド５２４が実行される。格納コマンド５２４は、「Ｋ０」により表される１０進数の整数「ゼロ」をアドレス「Ｄ１００」に格納するコマンドである。この格納コマンド５２４が実行されると、アドレス「Ｄ１００」の値は「ゼロ」にリセットされる。
【００５２】
図７において２行の命令からなるコマンド群５３は、アドレス「Ｍ３０」に格納されている値が「ゼロ」の場合に実行される接点を備えている。このアドレス「Ｍ３０」の初期値はゼロであって、制御装置１０がラダープログラムを初めて実行する際には、コマンド群５３が実行されるが、その後に結果コマンド１２１３によりアドレス「Ｍ３０」の値が１になると、コマンド群５３は実行されない。
【００５３】
コマンド群５３のうち上段の判定コマンド５３１は、アドレス「Ｄ２０１」に格納されている剰余が「Ｋ０」により表される整数ゼロに等しいか否かを判定するコマンドである。この判定が肯定された場合には、続く算出コマンド１２１１、比較コマンド１２１２、及び結果コマンド１２１３が実行される。
【００５４】
図７に示されるようなラダープログラムが実行されると、このラダープログラムにより規定される実行手順に従って実行部１３がコード処理を実行する。具体的には、アドレス「Ｄ１００」に格納されているサイクル数を１０で除したときの剰余がゼロに等しければ、検出コードを算出する算出コマンド１２１１、比較コマンド１２１２及び結果コマンド１２１３が実行される。つまり、１０サイクルに一度だけコマンド群５３が実質的に実行される。これにより、コードの計算負荷による制御処理の影響を低減することができる。なお、除算コマンド５２２において「Ｋ１０」の値を変更することで、コード処理が実行される周期を変更することができる。
【００５５】
制御装置１０によって繰り返し実行される制御処理が一巡する時間を、スキャンタイムという。スキャンタイムは一定の時間であることが望ましいが、制御処理において演算負荷が大きい処理があると、スキャンタイムに影響が及ぶことがある。本実施の形態に係る制御装置１０によれば、演算負荷が軽減された制御処理の実行が可能になるため、スキャンタイムに与える影響を軽減することができる。
【００５６】
また、比較コードと検出コードとが異なる場合に、制御処理の実行が停止される。このため、ユーザ２１が意図せず変更された対象プログラム１２２の実行が回避される。これにより、ユーザ２１が設定した状態の対象プログラム１２２の実行が保証される。
【００５７】
また、検出コードは、算出コマンド１２１１の第２引数により指定された対象プログラム１２２の変更を検出するためのコードであって、当該対象プログラム１２２から算出された。すなわち、検出コードは、制御処理プログラム１２０のうちユーザ２１によって指定された一部のデータに相当する対象プログラム１２２から算出された。このため、制御装置１０は、制御処理プログラム１２０全体を監視することなく、監視範囲を対象プログラム１２２に限定することができる。これにより、制御処理プログラムのうち、重要な部分を優先的に監視することができる。
【００５８】
以上、本発明の実施の形態について説明したが、本発明は上記実施の形態によって限定されるものではない。
【００５９】
また、上記実施形態では、コード処理プログラム１２１によりコード処理が開始された場合でも、コード処理実行中に制御処理プログラム１２０は繰り返し実行され続けていたが、コード処理が開始された場合に、制御処理プログラム１２０の実行を一時停止することとし、コード処理完了後、検出コードと比較コードとが等しい結果を受けた場合に、制御処理プログラム１２０の実行を再開してもよい。なお、この時の制御処理プログラム１２０の一時停止は、制御処理プログラム１２０の実行途中で停止してもよいし、制御処理プログラム１２０が一巡したところで停止させてもよい。また、この時の制御処理プログラム１２０の再開は、一時停止した個所の続きから、制御処理プログラム１２０の実行を再開してもよいし、制御処理プログラム１２０の最初の時点に戻って再開してもよい。このように、コード処理開始時に制御処理プログラム１２０を停止することで、ユーザ２１が意図せず変更された制御処理プログラム１２０に含まれる対象プログラム１２２の実行が回避される。これにより、ユーザ２１が設定した状態の対象プログラム１２２の実行が保証される。
【００６０】
また、上記実施の形態では、機器３０を制御するための複数のプログラムを含む制御処理プログラム１２０とコード処理を行うためのコード処理プログラム１２１が、個別にプログラムされている場合について説明したが、これには限定されない。例えば、制御処理プログラム１２０にコード処理プログラム１２１が組み込まれていてもよい。
【００６１】
また、上記実施の形態では、制御処理プログラム１２０に含まれる１つの対象プログラム１２２に対してコード処理を実行したが、制御処理プログラム１２０の一部に相当する複数のプログラム或いは全てに対してコード処理を実行してもよい。また、制御処理プログラム１２０は必ずしも複数のプログラムを含む必要はなく、対象プログラム１２２のみが制御処理プログラム１２０であってもよい。
【００６２】
また、制御装置１０の機能は、専用のハードウェアによっても、また、通常のコンピュータシステムによっても実現することができる。
【００６３】
例えば、プロセッサ４１によって実行されるプログラムＰ１を、コンピュータ読み取り可能な非一時的な記録媒体に格納して配布し、そのプログラムＰ１をコンピュータにインストールすることにより、上述の処理を実行する装置を構成することができる。このような記録媒体としては、例えばフレキシブルディスク、ＣＤ−ＲＯＭ（Compact Disc Read−Only Memory）、ＤＶＤ（Digital Versatile Disc）、ＭＯ（Magneto−Optical Disc）が考えられる。
【００６４】
また、プログラムＰ１をインターネットに代表される通信ネットワーク上のサーバ装置が有するディスク装置に格納しておき、例えば、搬送波に重畳させて、コンピュータにダウンロードするようにしてもよい。
【００６５】
また、通信ネットワークを介してプログラムＰ１を転送しながら起動実行することによっても、上述の処理を達成することができる。
【００６６】
さらに、プログラムＰ１の全部又は一部をサーバ装置上で実行させ、その処理に関する情報をコンピュータが通信ネットワークを介して送受信しながらプログラムを実行することによっても、上述の処理を達成することができる。
【００６７】
なお、上述の機能を、ＯＳ（Operating System）が分担して実現する場合又はＯＳとアプリケーションとの協働により実現する場合等には、ＯＳ以外の部分のみを媒体に格納して配布してもよく、また、コンピュータにダウンロードしてもよい。
【００６８】
また、制御装置１０の機能を実現する手段は、ソフトウェアに限られず、その一部又は全部を、回路を含む専用のハードウェアによって実現してもよい。
【００６９】
本発明は、本発明の広義の精神と範囲を逸脱することなく、様々な実施の形態及び変形が可能とされるものである。また、上述した実施の形態は、本発明を説明するためのものであり、本発明の範囲を限定するものではない。つまり、本発明の範囲は、実施の形態ではなく、請求の範囲によって示される。そして、請求の範囲内及びそれと同等の発明の意義の範囲内で施される様々な変形が、本発明の範囲内とみなされる。
【産業上の利用可能性】
【００７０】
本発明は、プログラムの正当性の確認に適している。
【符号の説明】
【００７１】
１００  制御システム、  １０  制御装置、  １１  受付部、  １２  記憶部、  １３  実行部、  １４  算出部、  １５  判定部、  ２０  ユーザ端末、  ２１  ユーザ、  ３０  機器、  ４１  プロセッサ、  ４２  主記憶部、  ４３  補助記憶部、  ４４  ＲＯＭ（Read Only Memory）、  ４５  入力部、  ４６  出力部、  ４７  通信部、  ４８  内部バス、  １２０  制御処理プログラム、  １２１  コード処理プログラム、  １２１１  算出コマンド、  １２１２  比較コマンド、  １２１３  結果コマンド、  １２１４  複製コマンド、  １２２  対象プログラム、  １２３  検出コード、  １２４  比較コード、  ５１，５２，５３  コマンド群、  ５１１  リセットコマンド、  ５２１  加算コマンド、  ５２２  除算コマンド、  ５２３，５３１  判定コマンド、  ５２４  格納コマンド、  Ｐ１  プログラム、  Ｐ２  ファームウェア。
【図１】
2021005691.tif 000003
【図２】
2021005691.tif 000004
【図３】
2021005691.tif 000005
【図４】
2021005691.tif 000006
【図５】
2021005691.tif 000007
【図６】
2021005691.tif 000008
【図７】
2021005691.tif 000009
【手続補正書】
【提出日】令和2年4月30日(2020.4.30)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】０００７
【補正方法】変更
【補正の内容】
【０００７】
上記目的を達成するため、本発明の制御装置は、機器を制御するための制御処理を実行する制御装置であって、制御処理を実行するためのプログラムに含まれる監視対象である対象プログラムの変更を検出するための検出コードを算出するための算出コマンドと、算出された検出コードを過去に対象プログラムから算出された比較コードと比較するための比較コマンドと、を含むコード処理プログラムを受け付けて、コード処理プログラムの実行指示を受け付ける受付手段と、前記算出コマンドに従って対象プログラムから検出コードを算出する算出手段と、前記比較コマンドに従って検出コードが比較コードに等しいか否かを判定する判定手段と、実行指示に従ってコード処理プログラムを実行する実行手段と、ファームウェアを記憶する記憶手段と、を備え、算出手段及び判定手段は、ファームウェアの実行により実現される。
【手続補正２】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
機器を制御するための制御処理を実行する制御装置であって、
前記制御処理を実行するためのプログラムに含まれる監視対象である対象プログラムの変更を検出するための検出コードを算出するための算出コマンドと、算出された前記検出コードを過去に前記対象プログラムから算出された比較コードと比較するための比較コマンドと、を含むコード処理プログラムを受け付けて、前記コード処理プログラムの実行指示を受け付ける受付手段と、
前記算出コマンドに従って前記対象プログラムから前記検出コードを算出する算出手段と、
前記比較コマンドに従って前記検出コードが前記比較コードに等しいか否かを判定する判定手段と、
前記実行指示に従って前記コード処理プログラムを実行する実行手段と、
ファームウェアを記憶する記憶手段と、
を備え、
前記算出手段及び前記判定手段は、前記ファームウェアの実行により実現される、制御装置。
【請求項２】
前記対象プログラムは、前記制御処理を実行するための複数のプログラムのうちユーザによって指定されたプログラムである、
請求項１に記載の制御装置。
【請求項３】
機器を制御するための制御処理を実行する制御装置によって実行されるプログラム監視方法であって、
受付手段が、前記制御処理を実行するためのプログラムに含まれる監視対象である対象プログラムの変更を検出するための検出コードを算出するための算出コマンドと、算出された前記検出コードを過去に前記対象プログラムから算出された比較コードと比較するための比較コマンドと、を含むコード処理プログラムを受け付けて、前記コード処理プログラムの実行指示を受け付ける受付ステップと、
算出手段が、前記算出コマンドに従って前記対象プログラムから前記検出コードを算出する算出ステップと、
判定手段が、前記比較コマンドに従って前記検出コードが前記比較コードに等しいか否かを判定する判定ステップと、
実行手段が、前記実行指示に従って、前記コード処理プログラムを実行する実行ステップと、
を含み、
前記算出手段及び前記判定手段は、ファームウェアの実行により実現される、プログラム監視方法。
【請求項４】
機器を制御するための制御処理を実行する制御装置を、
前記制御処理を実行するためのプログラムに含まれる監視対象である対象プログラムの変更を検出するための検出コードを算出するための算出コマンドと、算出された前記検出コードを過去に前記対象プログラムから算出された比較コードと比較するための比較コマンドと、を含むコード処理プログラムを受け付けて、前記コード処理プログラムの実行指示を受け付ける受付手段、
前記算出コマンドに従って前記対象プログラムから前記検出コードを算出する算出手段、
前記比較コマンドに従って前記検出コードが前記比較コードに等しいか否かを判定する判定手段、
前記実行指示に従って、前記コード処理プログラムを実行する実行手段、
として機能させ、
前記算出手段及び前記判定手段は、ファームウェアの実行により実現される、プログラム。
【国際調査報告】
2021005691.tif 000010
2021005691.tif 000011
2021005691.tif 000012
2021005691.tif 000013