(57)【特許請求の範囲】
【請求項１】
予め実行順番が定められている複数のサブルーチンを実行するメインルーチンが、複数回実行されるコンピューターシステムに用いられ、前記サブルーチンの実行状態を監視するサブルーチン実行監視装置において、
前回までの前記メインルーチンの実行回数を示すカウンタ値に“１”を加算した値を記憶する第１の実行回数記憶部と、
全ての前記サブルーチンが実行されるまで、前記サブルーチンが実行される度に、前記第１の実行回数記憶部に記憶されたカウンタ値に前記サブルーチンの実行回数を示すカウンタ値を加えた値を記憶する第２の実行回数記憶部と、
前記サブルーチン毎に設けられ、前記サブルーチンの実行を示すカウンタ値として、前記サブルーチンが実行されるまでに実行された全ての前記サブルーチンの実行回数を示すカウンタ値と前記メインルーチンの実行回数を示すカウンタ値の和を前記サブルーチン毎に記憶するサブルーチン実行回数記憶部と、
前記メインルーチンの実行が開始される度に、前回までの前記メインルーチンの実行回数を示すカウンタ値に“１”を加算した値を前記第１及び第２の実行回数記憶部に書き込んで、前記第１及び第２の実行回数記憶部に記憶される前記カウンタ値の初期化を行うカウンタ値初期化部と、
前記第２の実行回数記憶部に記憶された前記カウンタ値を読出して、前記サブルーチンの実行状態を検証する実行状態検証部と、を備え、
前記実行状態検証部は、前記第１の実行回数記憶部から読出したカウンタ値及び前記サブルーチンの実行順番の和と、前記実行順番に対応して設けられた前記サブルーチン実行回数記憶部から読出したカウンタ値とを比較し、不一致の場合は、前記サブルーチンが前記実行順番の通りに実行されなかったと判断することを特徴とするサブルーチン実行監視装置。
【請求項２】
前記実行状態検証部は、前記第１の実行回数記憶部から読出したカウンタ値と、前記第２の実行回数記憶部から読出したカウンタ値を比較し、一致した場合は、前記複数のサブルーチンが１回も実行されなかったと判断することを特徴とする
請求項１に記載のサブルーチン実行監視装置。
【請求項３】
前記実行状態検証部は、検証対象となるサブルーチン実行後のどの位置で実行してもよいことを特徴とする
請求項１又は２に記載のサブルーチン実行監視装置。
【請求項４】
前記実行状態検証部は、複数のサブルーチンの実行状態を一度に検証することを特徴とする
請求項１又は２に記載のサブルーチン実行監視装置。
【請求項５】
予め実行順番が定められている複数のサブルーチンを実行するメインルーチンが、複数回実行されるコンピューターシステムに用いられ、前記サブルーチンの実行状態を監視するサブルーチン実行監視方法において、
前回までの前記メインルーチンの実行回数を示すカウンタ値に“１”を加算した値を第１の実行回数記憶部に記憶するステップと、
全ての前記サブルーチンが実行されるまで、前記サブルーチンが実行される度に、前記第１の実行回数記憶部に記憶されたカウンタ値に前記サブルーチンの実行回数を示すカウンタ値を加えた値を第２の実行回数記憶部に記憶するステップと、
前記サブルーチン毎に設けられ、前記サブルーチンの実行を示すカウンタ値として、前記サブルーチンが実行されるまでに実行された全ての前記サブルーチンの実行回数を示すカウンタ値と前記メインルーチンの実行回数を示すカウンタ値の和を前記サブルーチン毎にサブルーチン実行回数記憶部に記憶するステップと、
前記メインルーチンの実行が開始される度に、前回までの前記メインルーチンの実行回数を示すカウンタ値に“１”を加算した値を前記第１及び第２の実行回数記憶部に書き込んで、前記第１及び第２の実行回数記憶部に記憶される前記カウンタ値を前記初期値とする初期化を行うステップと、
前記第２の実行回数記憶部に記憶された前記カウンタ値を読出して、前記サブルーチンの実行状態を検証する場合に、前記第１の実行回数記憶部から読出したカウンタ値及び前記サブルーチンの実行順番の和と、前記実行順番に対応して設けられた前記サブルーチン実行回数記憶部から読出したカウンタ値とを比較し、不一致の場合は、前記サブルーチンが前記実行順番の通りに実行されなかったと判断するステップと、を有することを特徴とするサブルーチン実行監視方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、例えば、プログラマブルコントローラーがメインルーチン内で周期的に実行する複数のサブルーチンが、予め設定された順番通りに実行されているかどうかを監視する場合に適用して好適なサブルーチン実行監視装置及びサブルーチン実行監視方法に関する。
【背景技術】
【０００２】
従来、火力、水力、原子力等の発電所において用いられるプラント制御システムのプログラマブルコントローラーは、メインルーチンを一定周期で実行して制御を行っている。このメインルーチンは、入力、演算、出力等の複数のサブルーチンを、予め設定された順番で実行する機能を有する。このようなプラントでは、高い信頼性が要求されており、処理の誤動作を防止するために各種の制御が行われている。
【０００３】
近年では、世界的に「機能安全」が注目されており、その一環として、上述したプラント制御システムで用いられるプラント制御方法に関しても、予め設定された順番で複数のサブルーチンが実行されているかを監視する手法が求められている。従来のサブルーチン実行の監視を行う技術には、以下のようなものがある。
【０００４】
特許文献１には、複数のサブルーチンを実行することによって、サブルーチンの実行状態を判断する技術が開示されている。この技術では、サブルーチンを実行後に、実行したサブルーチンの情報を記憶する。そして、次のサブルーチンが実行される前に、次に実行するサブルーチンに対応するサブルーチンの情報と、記憶しているサブルーチンの情報を比較する。この比較した情報が相違している場合にサブルーチン実行状態に異常ありと判断することを特徴とするものである。
【０００５】
特許文献２には、プログラムが実行される度に識別情報を比較して、プログラムの正常動作又は暴走発生状態を識別する技術が開示されている。この技術では、プログラムの特定の複数の実行順序を記憶させておき、コンピューターが、プログラムの実行を開始する前に、１番目の識別情報を記憶する。そして、プログラムの実行位置が特定の複数の位置のいずれか１つに到達するごとに、記憶していた識別情報と当該特定位置に対応する識別情報を比較して、識別情報が一致すると正常動作とみなし、特定位置の次の接続順序にあたる特定位置の識別情報を記憶する。一方、識別情報が不一致である場合に、コンピューターは、暴走発生状態とみなすことを特徴とするものである。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０００−３３９１９７号公報
【特許文献２】特開平６−３２４９１４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
ところで、前述した１つ目の従来例（特許文献１）では、例えば、呼出しサブルーチンがサブルーチンＳＲ４であるか判断した後（ＳＴ２ａ）、サブルーチンＳＲ１の処理（ＳＴ２ｂ）が２回実行されると、サブルーチンの重複実行に基づく異常を検出することができない。この原因は、サブルーチンを実行したという記録を、実行したサブルーチン内で行っていないためである。
【０００８】
また、前述した２つ目の従来例（特許文献２）では、例えば、チェックプログラムをコールするプログラムが全て実行されなかった場合は、異常を検出することができない。この原因は、プログラムの実行をチェックするチェックプログラムが、サブルーチン内で実行されておらず、そもそもプログラムが実行されなければ、チェックプログラムが実行されないためである。
【０００９】
本発明では、上述した従来技術の問題点を解消するため、メインルーチン内で実行される複数のサブルーチンの実行状態を確実に監視することを目的とする。
【課題を解決するための手段】
【００１０】
上述した課題を解決し、目的を達成するために、本発明に係るサブルーチン実行監視装置は、予め実行順番が定められている複数のサブルーチンを実行するメインルーチンが、複数回実行されるコンピューターシステムに用いられ、サブルーチンの実行状態を監視するサブルーチン実行監視に適用される。
このとき、前回までのメインルーチンの実行回数を示すカウンタ値に“１”を加算した値を第１の実行回数記憶部に記憶し、全てのサブルーチンが実行されるまで、サブルーチンが実行される度に、第１の実行回数記憶部に記憶されたカウンタ値にサブルーチンの実行回数を示すカウンタ値を加えた値を第２の実行回数記憶部に記憶し、サブルーチン毎に設けられ、サブルーチンの実行を示すカウンタ値として、サブルーチンが実行されるまでに実行された全てのサブルーチンの実行回数を示すカウンタ値とメインルーチンの実行回数を示すカウンタ値の和をサブルーチン毎にサブルーチン実行回数記憶部に記憶する。
そして、メインルーチンの実行が開始される度に、前回までのメインルーチンの実行回数を示すカウンタ値に“１”を加算した値を第１及び第２の実行回数記憶部に書き込んで、第１及び第２の実行回数記憶部に記憶されるカウンタ値を初期値とする初期化を行い、第２の実行回数記憶部に記憶されたカウンタ値を読出して、サブルーチンの実行状態を検証する場合に、第１の実行回数記憶部から読出したカウンタ値及びサブルーチンの実行順番の和と、実行順番に対応して設けられたサブルーチン実行回数記憶部から読出したカウンタ値とを比較し、不一致の場合は、サブルーチンが実行順番の通りに実行されなかったと判断するものである。
【発明の効果】
【００１１】
本発明によれば、実行すべきサブルーチンが実行されなかったり、重複して実行されたり、誤った順序で実行されてしまったことを検出することが可能である。このため、判定結果より、予め実行順序が定められたサブルーチンが確実に実行されていること保証することができる。特に従来技術と比較し、サブルーチンが全く実行されなかった場合も検出することが可能である。
【図面の簡単な説明】
【００１２】
【図１】本発明の一実施の形態例に係るプログラマブルコントローラーの回路構成を示すブロック図である。
【図２】本発明の一実施の形態例に係る中央演算処理装置がアクセスするメモリ、カウンタ及びプログラムの構成例を示すブロック図である。
【図３】本発明の一実施の形態例に係るメインルーチンの処理手順を示すフローチャートである。
【図４】本発明の一実施の形態例に係る監視カウンタを初期化する処理手順を示すフローチャートである。
【図５】本発明の一実施の形態例に係る監視カウンタを更新する処理手順を示すフローチャートである。
【図６】本発明の一実施の形態例に係る監視カウンタをチェックする処理手順を示すフローチャートである。
【図７】本発明の一実施の形態例に係る正常状態における監視カウンタの変化例を示す説明図である。
【図８】本発明の一実施の形態例に係る起動番号２のサブルーチンが実行されなかった場合の監視カウンタの変化を示す説明図である。
【図９】本発明の一実施の形態例に係る起動番号２のサブルーチンが２回実行された場合の監視カウンタの変化を示す説明図である。
【発明を実施するための形態】
【００１３】
＜１．一実施の形態＞
以下、本発明の一実施の形態例について、添付図面を参照して説明する。本実施の形態では、予め実行順番が定められている複数のサブルーチンを実行するメインルーチンが、複数回実行されるコンピューターシステムに用いられ、サブルーチンの実行状態を監視するサブルーチン実行監視装置として、プログラマブルコントローラー１に適用した例について説明する。
【００１４】
図１は、プログラマブルコントローラー１の内部構成例を示す。
プログラマブルコントローラー１は、各部の処理を制御する中央演算処理装置（ＣＰＵ：Central Processing Unit）１ａ、プログラムメモリとして用いられるＲＯＭ（Read Only Memory）１ｂ、ワークメモリとして用いられるＲＡＭ（Random Access Memory）１ｃ、時間を監視するウォッチドッグタイマー１ｄ、Ｉ／Ｏ（Input/Output）制御部１ｅ、基幹ネットワークへのデータの送受信を制御するネットワーク制御部１ｆから構成されている。プログラマブルコントローラー１は、例えば、プラント等を制御するメインルーチンで呼び出されるサブルーチンの実行有無や実行回数等を監視する機能を有する。
【００１５】
ＲＯＭ１ｂは、外部からの不正なアクセスを遮断するためプロテクトが施されている。ＲＯＭ１ｂ内には、ＯＳ（Operating System）と、プラント制御を行うためのメインルーチン１３と、複数のサブルーチン１４−１〜１４−３（後述する図２参照）と、各種の演算に用いる固定情報が格納されている。
【００１６】
Ｉ／Ｏ制御部１ｅは、制御プラント６から入力するプラント入力データ２をＲＡＭ１ｃ内に一時的に保存し、ＲＡＭ１ｃ内のプラント出力データ３を制御プラント６へ出力する制御を行う。ネットワーク制御部１ｆは、基幹ネットワーク７から入力するネットワーク入力データ４をＲＡＭ１ｃ内に一時的に保存し、ＲＡＭ１ｃ内のネットワーク出力データ５を基幹ネットワーク７へ出力する制御を行う。
【００１７】
ウォッチドッグタイマー１ｄは、ＯＳから、定周期で起動されるメインルーチンが実際に実行されているかどうかをメインルーチン１３が更新するウォッチドッグタイマーがタイムアップする前に更新されるかどうかで監視する。ＲＡＭ１ｃ内には、本発明に関わるサブルーチン実行監視に使用するカウンタ情報（カウンタ値）を図２に示す監視メモリ１０に保存する。
【００１８】
図２は、中央演算処理装置１ａがアクセスするメモリ、カウンタ及びプログラムの構成例を示す。
【００１９】
ＲＯＭ１ｂには、監視メモリ１０が備える各種のカウンタを初期化する監視用カウンタ初期化プログラム１１と、監視メモリ１０に格納されたカウンタ値をチェックする監視用カウンタチェックプログラム１２が格納される。監視用カウンタ初期化プログラム１１は、メインルーチンの実行が開始される度に、ベースカウンタＭ１とカレントカウンタＭ２に記憶されるカウンタ値を初期化するカウンタ値初期化部として用いられる。また、カウンタチェックプログラム１２は、カレントカウンタＭ２に記憶されたカウンタ値を読出して、サブルーチンの実行状態を検証する実行状態検証部として用いられる。
【００２０】
また、ＲＯＭ１ｂには、メインルーチン１３と、メインルーチン１３によって順序が定められて実行されるサブルーチン１４−１〜１４−３と、各サブルーチンの実行に伴い、監視メモリ１０内の起動番号１用カウンタＭ３を更新する起動番号１用カウンタ更新プログラム１５−１〜起動番号３用カウンタＭ５を更新する起動番号３用カウンタ更新プログラム１５−３が格納される。以下、起動番号が“ｎ”である場合に実行されるサブルーチンの実行回数を更新するプログラムを、「起動番号ｎ用カウンタ更新プログラム」と呼び、このプログラムが監視メモリ１０の所定位置にカウンタ値を書き込む領域を、「起動番号ｎ用カウンタ」と呼ぶ。
【００２１】
サブルーチン１４−１〜１４−３には、起動順として、予め起動番号１〜３が割り振られる。サブルーチン１４−１〜１４−３内の任意の位置には、監視メモリ１０内の起動番号ｎ用カウンタを更新するための起動番号ｎ用カウンタ更新プログラムが、起動番号に対応してそれぞれ設けられている。
【００２２】
中央演算処理装置１ａは、サブルーチン１４−１〜１４−３を全て実行した後、監視用カウンタチェックプログラム１２を起動して、ベースカウンタＭ１から読出したカウンタ値及びサブルーチンの実行順番の和と、実行順番に対応して設けられたサブルーチン実行回数記憶部から読出したカウンタ値とを比較し、不一致の場合は、サブルーチンが実行順番の通りに実行されなかったと判断する。これにより、中央演算処理装置１ａは、監視メモリ１０から取り出した各カウンタ値より、サブルーチンの実行順番、未実行又は重複実行の有無等の実行結果を確認することができる。
【００２３】
ＲＡＭ１ｃに構成される監視メモリ１０は、メインルーチンの実行回数を示すカウンタ値を記憶する第１の実行回数記憶部としてベースカウンタＭ１と、サブルーチンの実行回数を示すカウンタ値を記憶する第２の実行回数記憶部としてカレントカウンタＭ２を備える。また、監視メモリ１０は、サブルーチン毎に設けられ、サブルーチンの実行を示すカウンタ値として、サブルーチンの実行回数を示すカウンタ値とメインルーチンの実行回数を示すカウンタ値の和をサブルーチン毎に記憶するサブルーチン実行回数記憶部として、起動番号１用カウンタＭ３〜起動番号３用カウンタＭ５を備える。
【００２４】
ベースカウンタＭ１は、中央演算処理装置１ａがメインルーチン１３を実行する際に、初期値を格納する。カレントカウンタＭ２は、メインルーチン１３の実行に際して、サブルーチン１４−１〜１４−３が起動番号順に実行される度に“１”ずつカウントアップしたカウンタ値を格納する。
【００２５】
中央演算処理装置１ａは、ＲＯＭ１ｂから読出す監視用カウンタ初期化プログラム１１，監視用カウンタチェックプログラム１２を用いて、ＲＡＭ１ｃに構成する監視メモリ１０の各種のカウンタ値を演算する。また、中央演算処理装置１ａは、ＯＳから定周期（例えば、１００ミリ秒〜２００ミリ秒）で起動されたメインルーチン１３が、複数のサブルーチン１４−１〜１４−３を実行することで、ＲＡＭ１ｃ内の入力情報とＲＯＭ１ｂ内に格納されている演算情報を元に演算を行い、ＲＡＭ１ｃ内に出力情報を格納する。
【００２６】
上述したように、中央演算処理装置１ａがメインルーチン１３を実行すると、サブルーチン１４−１〜１４−３が起動番号順に実行される。そして、サブルーチン１４−１〜１４−３が実行される度に、監視メモリ１０に割り当てられた起動番号ｎ用カウンタのうち、起動番号ｎに対応する起動番号ｎ用カウンタのカウンタ値を“１”ずつカウントアップして更新する起動番号ｎ用カウンタ更新プログラムが実行される。
【００２７】
図３は、メインルーチン１３の処理手順を示す。
始めに、中央演算処理装置１ａは、監視用カウンタ初期化プログラム１１を実行し、ベースカウンタＭ１とカレントカウンタＭ２のカウンタ値を更新する（ステップＳ１）。次に、中央演算処理装置１ａは、ウォッチドッグタイマー１ｄに対して、タイマのリフレッシュ動作を指示する（ステップＳ２）。
【００２８】
次に、メインルーチン１３は、起動されるサブルーチンの順番に従い、予め起動番号が設定された、起動番号１〜３のサブルーチン１４−１〜１４−３（ステップＳ３〜Ｓ５）を順に実行する。各サブルーチン１４−１〜１４−３は、自身の実行に合わせて、起動番号ｎ用カウンタ更新プログラム（ステップＳ７〜Ｓ９）を実行し、起動番号ｎ用カウンタのカウンタ値を更新する。
【００２９】
そして、中央演算処理装置１ａは、監視用カウンタチェックプログラム１２を実行し（ステップＳ６）、監視メモリ１０に格納された各カウンタ値より、サブルーチン１４−１〜１４−３の実行が正常に行われたかどうかをチェックする。
【００３０】
図４は、監視用カウンタ初期化プログラム１１の処理内容を示す。
中央演算処理装置１ａによって実行される監視用カウンタ初期化プログラム１１は、ＲＡＭ１ｃから、ベースカウンタＭ１のカウンタ値に“１”を加算して、ベースカウンタＭ１に加算した値を書き戻す（ステップＳ１０）。そして、ベースカウンタＭ１に書き戻したカウンタ値を、カレントカウンタＭ２にも書込む（ステップＳ１１）。
【００３１】
図５は、起動番号ｎ用カウンタ更新プログラムの処理内容を示す。
中央演算処理装置１ａによって実行される起動番号ｎ用カウンタ更新プログラムは、ＲＡＭ１ｃから、カレントカウンタＭ２のカウンタ値に“１”を加算して、カレントカウンタＭ２に書き戻す（ステップＳ２０）。そして、カレントカウンタＭ２に書き戻したカウンタ値を、実行されたサブルーチンに設定されている起動番号ｎに対応する起動番号ｎ用カウンタにも書込む（ステップＳ２１）。
【００３２】
図６は、監視用カウンタチェックプログラム１２の処理内容を示す。
中央演算処理装置１ａによって実行される監視用カウンタチェックプログラム１２は、ＲＡＭ１ｃから、ベースカウンタＭ１とカレントカウンタＭ２からカウンタ値を読出し、カウンタ値が一致しているかどうかを判定する（ステップＳ３０）。
【００３３】
判定結果が“Ｙｅｓ”の場合、監視用カウンタチェックプログラム１２は、サブルーチンが一度も実行されていないと判断し、異常処理を実行する。この異常処理とは、例えば、二重系のシステムであれば、主従のシステムを切替えたり、プログラマブルコントローラー１の動作を停止したりする処理である。判定結果が“Ｎｏ”の場合、監視用カウンタチェックプログラム１２は、起動番号１〜ｎが振られた全ての起動番号１用カウンタＭ３〜起動番号３用カウンタＭ５に対して以下の処理を行う。
【００３４】
始めに、ベースカウンタＭ１にサブルーチンの起動番号ｎを加算した数値が、起動番号ｎ用カウンタに格納されているカウンタ値と一致しているかを、起動番号１用カウンタＭ３から順に判定する（ステップＳ３１）。判定結果が“Ｎｏ”の場合は、サブルーチンが設定された順番通りに実行されなかったと判断し、異常処理を行う。判定結果が“Ｙｅｓ”の場合は、設定された最大の起動番号（本例では、ｎ＝３）に達するまで、ステップＳ３１に示したチェック処理を行う（ステップＳ３２）。
【００３５】
次に、監視メモリ１０に格納された各カウンタ値の例について、図７〜図９を参照して説明する。
【００３６】
図７は、メインルーチン１３が正常に終了した場合におけるカウンタ値の例を示す。
ここでは、監視用カウンタ初期化プログラム１１が実行された後にベースカウンタＭ１と、カレントカウンタＭ２の初期値が“１０”となっていた場合を想定する。このとき、正常に起動番号１〜３のサブルーチン１４−１〜１４−３が実行されると、起動番号ｎ用カウンタは、各サブルーチンの実行に合わせて図７に示すように変化する。このため、監視用カウンタチェックプログラム１２は、監視カウンタのカウンタ値を読出して、図６に示す処理を実行することによって、サブルーチン１４−１〜１４−３が正常に実行されたことを検証できる。なお、メインルーチン１３が一定周期後に再起動され、監視用カウンタ初期化プログラム１１が実行された場合におけるベースカウンタＭ１と、カレントカウンタＭ２の初期値は“１１”となる。
【００３７】
図８は、起動番号２のサブルーチン１４−２が実行されなかった場合における、監視カウンタの例を示す。
この場合、起動番号２用カウンタＭ４には、前の周期に格納されたカウンタ値“１１”が残っている。ここで、監視用カウンタチェックプログラム１２は、起動番号２用カウンタに格納された値“１１”と、ベースカウンタＭ１に格納された数値“１０”に起動番号２を加算した数値である“１２”を比較する（図６のステップＳ３２）。このとき、比較結果が一致しないため、監視用カウンタチェックプログラム１２は、サブルーチン１４−２が正常に実行されなかったことを検出できる。
【００３８】
図９は、起動番号２のサブルーチンが２回実行された場合における、監視カウンタの例を示す。
この場合、起動番号２用カウンタＭ４は、２回実行されたことを示すカウンタ値“１３”が格納される。ここで、監視用カウンタチェックプログラム１２にて、ベースカウンタＭ１と起動番号２を加算した数値である“１２”を比較する（図６のステップＳ３２）。このとき、比較結果が一致しないため、監視用カウンタチェックプログラム１２は、サブルーチン１４−２が２回実行されたことを検出できる。
【００３９】
以上説明した本実施の形態に係るプログラマブルコントローラー１によれば、実行すべき複数のサブルーチンにそれぞれ実行順番を表す起動番号を付与し、監視メモリ１０に、ベースとなるベースカウンタＭ１、プログラム実行ごとにカウントアップするカレントカウンタＭ２、及び実行すべきサブルーチンの数と同じ数の実行カウンタとして起動番号ｎ用カウンタを備える。そして、サブルーチン１４−１〜１４−３の実行前には、カレントカウンタＭ２に記憶されるカウンタ値をベースカウンタＭ１にコピーしておき、サブルーチンの実行ごとにカレントカウンタＭ２に”１”を加算し、加算した値を実行したサブルーチンに対応する起動番号ｎ用カウンタに格納する。そして、特定のチェックポイントにおいて、ベースカウンタＭ１とカレントカウンタＭ２に格納したカウンタ値が一致すれば、サブルーチンが１度も実行されていないということを判定する。一方、各サブルーチンに割り当てられる起動番号ｎ用カウンタに格納されたカウンタ値が、ベースカウンタＭ１と起動番号を加算した値と一致していることで、サブルーチンの実行が正常であったということを判定する。
【００４０】
このように、一周期のメインルーチン内で複数のサブルーチンを実行した後、中央演算処理装置１ａが監視用カウンタチェックプログラム１２を実行して、カウンタ値をチェックすることによって、サブルーチンの正常実行、未実行、重複実行を検出することができる。このため、サブルーチンの未実行や重複実行を速やかに検出し、システムへの影響を最小限に抑えることができるという効果がある。
【００４１】
また、従来は、サブルーチンを実行する度に実行状態をチェックしたが、複数のサブルーチンが実行された後、まとめて各サブルーチンの実行状態をチェックすることができる。これにより、サブルーチンの重要度の軽重に併せて、監視用カウンタチェックプログラム１２を起動させることが可能となる。
【００４２】
なお、上述した実施の形態例において、監視用カウンタチェックプログラム１２の起動タイミングを、サブルーチン１４−１〜１４−３を実行した後としたが（図３のステップＳ６）、検証対象となるサブルーチンを実行した後であれば、どの位置で実行してもよい。このため、図３のステップＳ３，Ｓ４の実行後に、監視用カウンタチェックプログラム１２の起動タイミングを設定してもよい。このように、サブルーチンの実行をチェックする監視用カウンタチェックプログラム１２の位置を任意とすることが可能であり、サブルーチンを機能単位で纏めてチェックすることができるようになっているため、処理効率を向上させることが可能である。
【００４３】
また、本発明は上述した実施の形態例に限られるものではなく、特許請求の範囲に記載した本発明の要旨を逸脱しない限りその他種々の応用例、変形例を取り得ることは勿論である。
【符号の説明】
【００４４】
１…プログラマブルコントローラー、１ａ…中央演算処理装置、１ｂ…ＲＯＭ、１ｃ…ＲＡＭ、１ｄ…ウォッチドッグタイマー、１ｅ…Ｉ／Ｏ制御部、１ｆ…ネットワーク制御部、６…制御プラント、７…基幹ネットワーク、１０…監視メモリ、１１…監視用カウンタ初期化プログラム、１２…監視用カウンタチェックプログラム、１３…メインルーチン、１４−１〜１４−３…サブルーチン、１５−１〜１５−３…起動番号３用カウンタ更新プログラム、Ｍ１…ベースカウンタ、Ｍ１…起動番号１用カウンタ、Ｍ２…カレントカウンタ、Ｍ３…起動番号１用カウンタ、Ｍ４…起動番号２用カウンタ、Ｍ５…起動番号３用カウンタ
【図１】
0005590667.tif 000002
【図２】
0005590667.tif 000003
【図３】
0005590667.tif 000004
【図４】
0005590667.tif 000005
【図５】
0005590667.tif 000006
【図６】
0005590667.tif 000007
【図７】
0005590667.tif 000008
【図８】
0005590667.tif 000009
【図９】
0005590667.tif 000010