(57)【特許請求の範囲】
【請求項１】
プログラムを複数モジュールに分割し当該モジュールを順番に演算処理するプロセッサと、該プロセッサ及びタイマにクロックを供給するクロック生成器とを備えるモジュール演算処理装置であって、
前記プロセッサは、予めシーケンス管理テーブルにモジュールの呼出し順にモジュールのシーケンス番号と処理時間を対応付けて格納し且つ各モジュールの演算処理に先立ってシーケンススタックにシーケンス番号を設定すると共に、前記クロック生成器に指示して前記タイマにクロックを供給してモジュールの処理時間をカウントせしめ、
また前記プロセッサは、各モジュールの演算処理終了時点における前記シーケンススタックに設定されているシーケンス番号を確認し、該確認時における前記タイマのカウント値を読込み、当該モジュールの演算処理前の当該モジュールについて読み込んだ前記タイマのカウント値との差分に前記クロック生成器のクロック周期を乗算した値と当該モジュールに関して予め前記シーケンス管理テーブルに格納されている当該モジュールの処理時間との差が所定時間範囲内に納まっているかを確認して、当該モジュールの演算処理の異常の有無を検知する、
ことを特徴とするモジュール演算処理装置。
【請求項２】
前記プロセッサに供給するクロック生成器と、前記タイマに供給するクロック生成器とを別構成にして互いに同期させたことを特徴とする請求項１に記載のモジュール演算処理装置。
【請求項３】
プログラムを複数モジュールに分割し当該モジュールを順番に演算処理するプロセッサと、該プロセッサ及びタイマにクロックを供給するクロック生成器とを備えるモジュール演算処理装置における異常検知方法であって、前記プロセッサは、
予めシーケンス管理テーブルにモジュールの呼出し順にモジュールのシーケンス番号と処理時間を対応付けて格納し且つ各モジュールの演算処理に先立ってシーケンススタックにシーケンス番号を設定する過程、
前記クロック生成器から前記タイマにクロックを供給してモジュールの処理時間をカウントせしめる過程、
各モジュールの演算処理終了時点における前記シーケンススタックに設定されているシーケンス番号を確認する過程、
該確認時における前記タイマのカウント値を読込む過程、
当該モジュールの演算処理前の当該モジュールについて読み込んだ前記タイマのカウント値との差分に前記クロック生成器のクロック周期を乗算した値と当該モジュールに関して予め前記シーケンス管理テーブルに格納されている当該モジュールの処理時間との差が所定時間範囲内に納まっているかを確認する過程、および、
前記各モジュールの演算処理終了時点における前記シーケンススタックに設定されているシーケンス番号の確認および前記処理時間差が所定時間範囲内に納まっていることの確認を介して当該モジュールの演算処理の異常の有無を検知する過程、
を含むことを特徴とするモジュール演算処理装置における異常検知方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、モジュールの演算処理における割込み発生など不測のハードウェア異常が発生したとしてもその異常を検知できるモジュール演算処理装置に関する。
【背景技術】
【０００２】
一般に、信頼性や安全性が求められる制御システムにおいては、制御プログラムの演算処理が正しく行われることを確認するために、制御プログラムの演算処理を複数モジュールに分割し、各モジュールに次のような機能を組み込むようにされる。すなわち、
【０００３】
（１）各モジュールに独立した識別子(シーケンス番号)を設定する。
（２）モジュールの演算処理前に、シーケンス番号をシーケンススタックに格納する。
（３）モジュールの演算処理後に、シーケンススタックに本モジュールまでのシーケンス番号が格納されていることを確認し、シーケンス番号を確認して異常があれば異常処理を行う。
【０００４】
このように従来は、各モジュールでシーケンス番号を確認することで、制御プログラムの演算処理を順番に監視するプログラム・シーケンス監視処理が行われる。
図６を用いてこれを詳しく説明すると、図６に示すプログラム・シーケンス監視処理は、モジュールの演算処理の開始にあたり、まずシーケンス番号１をシーケンススタック61の一番目62（図示矢印参照）に設定する（ステップS61）。そのあとでモジュール処理１を実行する（ステップS62）。モジュール処理１の処理が終了した時点でシーケンススタックが１であることを確認する（ステップS63）。以下、同様に、シーケンス番号２をシーケンススタック61の二番目63（図示矢印参照）に設定する（ステップS64）。そのあとでモジュール処理２を実行する（ステップS65）。モジュール処理２の処理が終了した時点でシーケンススタックが１，２であることを確認する（ステップS66）。
【０００５】
そしてシーケンス番号３をシーケンススタック61の三番目64（図示矢印参照）に設定する（ステップS67）。そのあとでモジュール処理３を実行する（ステップS68）。モジュール処理３の処理が終了した時点でシーケンススタックが１，２，３であることを確認する（ステップS69）。ここでシーケンス監視を要するプログラムが組込装置に組み込まれるとき、上記の例のように組み込むべきプログラムモジュール数が３であったとすれば、モジュール処理３が終了した段階で、シーケンススタックからのシーケンス番号読込みでシーケンス番号１〜３の全てを確認できたことになるので、それを確認できた段階でプログラム・シーケンス監視処理を終了する。また図示していないが、モジュール処理３が終了した段階におけるシーケンススタックからのシーケンス番号読込みでシーケンス番号１〜３を確認できなければ異常処理を行うことになる。
【０００６】
このように上記した従来のプログラム・シーケンス監視処理では、モジュール処理３の終了段階で、シーケンス番号１〜３がシーケンススタック61に格納されていることを確認するだけなので、モジュール処理に費やした処理時間に異常があってもそれを監視することはできないという問題があった。
【０００７】
そんな中、下記の特許文献１では、シーケンスプログラムを実行し、所定の移行条件により次の動作ステップに移行しながら制御対象を制御する場合において、シーケンス制御における次動作ステップの移行条件の充足と所定の時間内における処理を終了せずに監視タイマがタイムアップした場合には異常を登録するシーケンス制御技術を開示している。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開平８−１０１７０５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
上記特許文献１に開示された従来のシーケンス制御技術は、指定された制御データにおける監視タイマ値が有意であるときに監視タイマの計時をアクティブにして次動作ステップへの移行における処理時間をタイマ監視によって監視するもので、結局のところ、指定された制御データに関連付けられたシーケンスを監視するだけであって、上述したプログラムの実行順を監視するプログラム・シーケンス監視とはなんら関連付けられていない。そのうえ、モジュール処理のシーケンスに影響を与えない異常(例えば、割込み発生など不測のハードウェア異常)が発生したことを検知できないという課題があった。
【００１０】
そこで本発明は、モジュールの演算処理における割込み発生など不測のハードウェア異常が発生したとしてもその異常を検知できるモジュール演算処理装置を提供することを目的とする。
【課題を解決するための手段】
【００１１】
上記課題を解決するために本発明は、プログラムを複数モジュールに分割し当該モジュールを順番に演算処理するプロセッサと、該プロセッサ及びタイマにクロックを供給するクロック生成器とを備えるモジュール演算処理装置であって、前記プロセッサは、予めシーケンス管理テーブルにモジュールの呼出し順にモジュールのシーケンス番号と処理時間を対応付けて格納し且つ各モジュールの演算処理に先立ってシーケンススタックにシーケンス番号を設定すると共に、前記クロック生成器に指示して前記タイマにクロックを供給してモジュールの処理時間をカウントせしめ、また前記プロセッサは、各モジュールの演算処理終了時点における前記シーケンススタックに設定されているシーケンス番号を確認し、該確認時における前記タイマのカウント値を読込み、当該モジュールの演算処理前の当該モジュールについて読み込んだ前記タイマのカウント値との差分に前記クロック生成器のクロック周期を乗算した値と当該モジュールに関して予め前記シーケンス管理テーブルに格納されている当該モジュールの処理時間との差が所定時間範囲内に納まっているかを確認して、当該モジュールの演算処理の異常の有無を検知する、ことを特徴とする。
【００１２】
また本発明は、前記プロセッサに供給するクロック生成器と、前記タイマに供給するクロック生成器とを別構成にして互いに同期させたことを特徴とする。
【発明の効果】
【００１３】
本発明によれば、カウントアップタイマを持ち、プログラムを複数モジュールに分割し当該モジュールを順番に処理するモジュール演算処理装置において、モジュール毎のシーケンス監視と共に、モジュールの処理時間チェックを行うことが可能となる。このためモジュールの演算処理での異常の検知能力を向上させることができ、そのため割込み発生など不測のハードウェア異常が発生したとしてもその異常を検知できる。その結果、制御システム（組込装置）の信頼性と安全性を向上させることができる。また、クロックをプロセッサとタイマとで別構成にして互いに同期させた場合には、プロセッサまたはタイマのいずれかのクロック異常も検知できるようになり、制御システム（組込装置）の信頼性と安全性を更に向上させることができる。
【図面の簡単な説明】
【００１４】
【図１】本発明の実施形態に係るモジュール演算処理装置の構成概要を示す図である。
【図２】図１に示されたモジュール演算処理装置のソフトウェア構成の概要を示す図である。
【図３】図２に示されたソフトウェア構成の動作を説明する図である。
【図４】本発明の正常時における処理動作を示す図（その１）である。
【図５】本発明の異常時における処理動作を示す図（その２）である。
【図６】従来のプログラム・シーケンス監視処理を説明する図である。
【発明を実施するための形態】
【００１５】
以下、本発明の実施の形態について、詳細に説明する。
図１は、本発明の実施形態に係るモジュール演算処理装置の構成概要を示す図である。図１において本発明の実施形態に係るモジュール演算処理装置は、メモリに格納されるプログラムやデータを用いて後述する演算処理を実行するプロセッサ11と、プロセッサとタイマに所定周期のクロックを供給するクロック生成器12と、プログラムやデータを格納するメモリ13と、モジュールの処理時間を計測するタイマ14とで構成され、プロセッサ11、メモリ13及びタイマ14はバス15により互に接続されている。タイマ14は所定周期毎にカウントアップするカウンタで構成され、プロセッサ11の指示でリセット可能に構成されている。
【００１６】
図２は、図１に示されたモジュール演算処理装置のソフトウェア構成の概要を示す図である。図２にしたがって図１に示されたモジュール演算処理装置のソフトウェア構成の概要を説明すると、図１に示されたモジュール演算処理装置は、複数のプログラムモジュールを順番に呼び出して処理するモジュール演算処理部24、呼び出して処理したモジュールの処理時間をカウントして保持する前回タイマ処理部25、モジュール演算処理部24がシーケンス番号をシーケンススタックに格納し管理するシーケンススタック処理部26、及び、モジュール演算処理部24におけるモジュール呼出しをシーケンス管理テーブルにより順に管理するテーブル管理処理部27、から成るソフトウェアで構成される。このうちテーブル管理処理部27は、モジュール呼出し順に、予めモジュールのシーケンス番号と処理時間を対応付けてシーケンス管理テーブル内に格納する。
【００１７】
次に図３を用いて図２に示したソフトウェア構成の動作を詳しく説明する。図３(ａ)は、モジュール演算処理部24（図２参照）による演算処理の処理フローを示す図であり、図３(ａ)に示されるように、演算処理は、モジュール演算処理部24によって最初にタイマをリセットして（ステップS31）、前回タイマ値を0にクリアする。次いでシーケンススタックを0にクリアする（ステップS32）。そして、複数のモジュール1〜nを順に呼び出す（ステップS33〜S36）。呼び出されたモジュールについては、図３(ｂ)に示されるような、以下の処理が行われる。
【００１８】
（１）シーケンススタック処理部26（図２参照）によりシーケンス番号をシーケンススタックに設定する（ステップS41）。
（２）モジュール演算処理部24により呼び出したモジュールの個別処理(サブルーチン)を行う（ステップS42）。
【００１９】
（３）モジュール演算処理部24は、シーケンススタックに呼び出した本モジュールまでのシーケンス番号が格納されていることを確認し（ステップS43）、そのシーケンス番号を確認して異常がある場合は異常処理を行う（ステップS44、S50）。
【００２０】
（４）モジュール演算処理部24は、タイマのカウント値を読込み（ステップS45）、前回読込んだタイマのカウント値との差分を求め（ステップS46）、前回読込みタイマカウント値との差分にクロック周期を乗算した値とシーケンス管理テーブルのシーケンス番号対応のモジュール処理時間とを比較し（ステップS47）、その差分が制御システムにより予め決められている所定時間以内であれば正常とし、そうでない場合は異常処理(サブル
ーチン)を行う（ステップS48、S50）。正常である場合には、モジュール演算処理部24が前回タイマ処理部25に指示してタイマのカウント値を前回タイマのカウント値に設定する（ステップS49）。なお異常処理(サブルーチン)の内容は、制御システム固有に記述する内容が含まれ、その内容にしたがって異常処理が実行される。一般的に異常処理の内容としては、外部に異常を表示又は警告を発する、通信手段を介して異常が発生したことをしかるべき部署に通知する、或いは、処理を停止又は処理を遷移する、などが適宜実施される。
【００２１】
図４および図５は、本発明の実施形態に係るモジュール演算処理装置の具体的な動作を説明する図であり、図４は本発明の正常時における処理動作を示す図（その１）であり、また図５は本発明の異常時における処理動作を示す図（その２）である。
【００２２】
図４において、モジュール演算処理部24（図２も参照）が演算処理するモジュール1を呼び出すと共に、シーケンススタック処理部26（図２も参照）を用いてシーケンススタックの一番目26-1にシーケンス番号1を設定する。そしてモジュール演算処理部24が当該モジュール1の処理を実行する。実行するにあたり前回タイマ処理部25（図２も参照）に指示してタイマカウントを開始させる。この場合、最初のモジュールの処理となるので前回タイマ処理部25は、カウント値が0の状態に置かれている。モジュール1の処理終了時点41においてモジュール演算処理部24は、シーケンススタックの一番目26-1に設定されているシーケンス番号を確認し、そのシーケンス番号が確認できた場合には、タイマのカウント読込みを行い、前回のカウント値との差分を求める。この場合、前回のカウント値が0なので、タイマのカウント値がそのまま差分となる。そしてカウント値の差分にクロック周期を乗算した値（当該モジュールにおける処理時間、図示例では10 ms と表示されている）とシーケンス管理テーブルの一番目27-1に格納されている、処理時間（10 ms）を比較する。比較の結果、両者の差が所定値以内に収まっているのを確認した場合にはモジュール１処理が正常処理されたと判定し、タイマのカウント値を前回タイマの値、すなわちタイマのカウント読込み時の値に前回タイマ処理部25に指示して設定する。こうしてモジュール1の処理を終了する。
【００２３】
次いでモジュール2の処理に移行する。モジュール1の処理と同様に、まずモジュール演算処理部24が演算処理するモジュール2を呼び出すと共にシーケンススタック処理部26（図２も参照）を用いてシーケンススタックの二番目26-2にシーケンス番号2を設定する。そしてモジュール演算処理部24が当該モジュール2の処理を実行する。実行するにあたり前回タイマ処理部25に指示してタイマカウントを開始させる。この場合は、二番目のモジュールの処理となるので前回タイマ処理部25は、カウント値がモジュール1の終了時点41のカウント状態に設定されている。そしてモジュール2の処理終了時点42においてモジュール演算処理部24は、シーケンススタックの二番目26-2までに設定されているシーケンス番号1,2を確認し、それが確認できた場合には、タイマのカウント読込みを行い、前回のカウント値との差分を求める。この場合、前回のカウント値がモジュール1の終了時点41のカウント状態なので、モジュール2の終了時点42のカウント値とモジュール1の終了時点41のカウント値との差分となる。そしてカウント値の差分にクロック周期を乗算した値(当該モジュールにおける処理時間)とシーケンス管理テーブルの二番目27-2に格納されている、処理時間（20 ms）を比較する。なお図示例では、モジュール1処理における比較だけを図示していることに注意されたい。比較の結果、両者の差が所定値以内に収まっているのを確認できた場合にはモジュール2処理が正常処理されたと判定し、タイマのカウント値を前回タイマの値、すなわちタイマのカウント読込み時42の値に前回タイマ処理部25に指示して設定する。こうしてモジュール2の処理を終了する。
【００２４】
次にモジュール3の処理に移行する。モジュール2の処理と同様に、まずモジュール演算処理部24が演算処理するモジュール3を呼び出すと共にシーケンススタック処理部26（図
２も参照）を用いてシーケンススタックの三番目26-3にシーケンス番号3を設定する。そしてモジュール演算処理部24が当該モジュール3の処理を実行する。実行するにあたり前回タイマ処理部25に指示してタイマカウントを開始させる。この場合は、三番目のモジュールの処理となるので前回タイマ処理部25は、カウント値がモジュール2の終了時点42のカウント状態に設定されている。そしてモジュール3の処理終了時点43においてモジュール演算処理部24は、シーケンススタックの三番目26-3までに設定されているシーケンス番号1,2,3を確認し、それが確認できた場合には、タイマのカウント読込みを行い、前回のカウント値との差分を求める。この場合、前回のカウント値がモジュール2の終了時点42のカウント状態なので、モジュール3の終了時点43のカウント値とモジュール2の終了時点42のカウント値との差分となる。そしてカウント値の差分にクロック周期を乗算した値(当該モジュールにおける処理時間)とシーケンス管理テーブルの三番目27-3に格納されている、処理時間（25 ms）を比較する。なお図示例では、モジュール1処理における比較だけを図示していることに注意されたい。比較の結果、両者の差が所定値以内に収まっているのを確認できた場合にはモジュール3処理が正常処理されたと判定し、タイマのカウント値を前回タイマの値、すなわちタイマのカウント読込み時43の値に前回タイマ処理部25に指示して設定する。こうしてモジュール3の処理を終了する。以上が本発明の正常時における動作処理である。
【００２５】
次に図５を用いて本発明の異常時における処理動作を説明する。図５においてモジュール2処理までの動作は、図４に示した正常時における動作と同じなのでその説明を省略する。図５ではモジュール3処理における異常処理動作についてもっぱら説明する。
【００２６】
図５においてモジュール演算処理部24（図２も参照）が、演算処理するモジュール3を呼び出すと共にシーケンススタック処理部26（図２も参照）を用いてシーケンススタックの三番目26-3にシーケンス番号3を設定する。そしてモジュール演算処理部24が当該モジュール3の処理を実行する。実行するにあたり前回タイマ処理部25（図２も参照）に指示してタイマカウントを開始させる。この場合は、三番目のモジュールの処理となるので前回タイマ処理部25は、カウント値がモジュール2の終了時点42のカウント状態に設定されている。そして図示例では、モジュール3の処理終了時点43直前において、不測の割込みが発生してプロセッサ（図１参照）がその処理に追われるため、正常処理時のタイミング43ではモジュール3の処理を終了させることができず、割込み処理が終了した後のタイミング44にてモジュール3処理が終了する。そのため、モジュール演算処理部24はモジュール3の処理終了時点44でシーケンススタックの三番目26-3までに設定されているシーケンス番号1,2,3を確認することとなる。それが確認できた後に、タイマのカウント読込みを行い、前回のカウント値との差分を求める。この場合、前回のカウント値がモジュール2の終了時点42のカウント状態なので、モジュール3の終了時点44のカウント値とモジュール2の終了時点42のカウント値との差分は、正常処理時の値と異なりその差分が大きくなる。そのため、カウント値の差分にクロック周期を乗算した値(当該モジュールにおける処理時間)とシーケンス管理テーブルの三番目27-3に格納されている、処理時間（25 ms）を比較すると、両者の差が所定値以内に収まらずに、モジュール処理に要した処理時間が所定値以内の条件をクリアできないためモジュール3処理が異常と判定され、異常処理が実行される。異常処理は、図３に説明したように、制御システム固有に記述する内容が含まれ、その内容にしたがって異常処理が実行される。以上が本発明の異常時における動作処理であるが、図示例に止まらずいずれのモジュール処理で異常が発生するかは予測がつかないことに留意すべきである。
【００２７】
図１に示した実施形態ではプロセッサ11とタイマ14にクロックを供給するクロック生成器12を設ける例を示したが、これとは異なりプロセッサ11とタイマ14にクロックを別々に供給する複数の互いに同期するクロック生成器（図示せず）を設けた場合には、プロセッサ11のクロック異常またはタイマ14のクロック異常のいずれかを上述した処理時間の比較
を通して検知できる。例えばプロセッサ11にクロック異常が発生した例を説明すると、プロセッサ11のクロックが遅くなった場合は、一定時間で処理できる命令数が減少するためモジュール処理時間は大きくなり、また逆にプロセッサ11のクロックが早くなった場合は、一定時間で処理できる命令数が増大するためモジュール処理時間は小さくなる。このようにクロックをプロセッサとタイマとで別構成にすることで、プロセッサまたはタイマのいずれかのクロック異常も検知できるようになり、これにより制御システムの信頼性と安全性を更に向上させることができる。
【符号の説明】
【００２８】
11  プロセッサ
12  クロック生成器
13  メモリ
14  タイマ
15  バス
24  モジュール演算処理部
25  前回タイマ処理部(タイマカウンタ)
26  シーケンススタック処理部
27  管理テーブル処理部
【図１】
0005493929.tif 000002
【図２】
0005493929.tif 000003
【図３】
0005493929.tif 000004
【図４】
0005493929.tif 000005
【図６】
0005493929.tif 000006
【図５】
0005493929.tif 000007