JP2011128780A - Ram診断装置、そのプログラム - Google Patents

Ram診断装置、そのプログラム Download PDF

Info

Publication number
JP2011128780A
JP2011128780A JP2009285223A JP2009285223A JP2011128780A JP 2011128780 A JP2011128780 A JP 2011128780A JP 2009285223 A JP2009285223 A JP 2009285223A JP 2009285223 A JP2009285223 A JP 2009285223A JP 2011128780 A JP2011128780 A JP 2011128780A
Authority
JP
Japan
Prior art keywords
ram
area
address
diagnosis
data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2009285223A
Other languages
English (en)
Inventor
Koji Nishida
廣治 西田
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fuji Electric Co Ltd
Original Assignee
Fuji Electric Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fuji Electric Co Ltd filed Critical Fuji Electric Co Ltd
Priority to JP2009285223A priority Critical patent/JP2011128780A/ja
Publication of JP2011128780A publication Critical patent/JP2011128780A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Techniques For Improving Reliability Of Storages (AREA)
  • For Increasing The Reliability Of Semiconductor Memories (AREA)

Abstract

【課題】ダブルRAMアルゴリズムによるRAM診断手法を用い、RAM診断間隔の時間保証を実現できる。
【解決手段】ダブルRAM領域22に関してはダブルRAMアルゴリズムによるRAM診断処理を適用する。ダブルRAM領域22には、予めRAM診断間隔が保証されると判断されたデータが格納される。但し、何らかの異常が生じる場合も有り得るので、ダブルRAM監視タスク13により、定期的に(例えばRAM診断間隔に相当する時間毎に)ダブルRAM領域22の全アドレスが診断完了か否かをチェックする。もし診断未実施のアドレスが1つでもあれば、アラーム報知する。
【選択図】図1

Description

本発明は、RAMの故障診断方式に関する。
特許文献1には、所定の診断タイミング毎にリード・ライト方式で、予め定めた診断バイト数で、DMAの状態を判断するRAMの診断装置が開示されている。
非特許文献1にはRAM診断の各種のアルゴリズムと当該アルゴリズムの診断効果が記載されている。また、非特許文献1には、ダブルRAMアルゴリズムの概要等が開示されている。
非特許文献2は、非特許文献1に開示されているRAM診断アルゴリズムであるダブルRAMアルゴリズム(Double RAM with hardware or software comparison and read/write test)についての概要が記載されている。非特許文献2によれば、ダブルRAMアルゴリズムでは、データ書込みの際に、このデータを指定アドレスに書き込むと共に、このデータの反転データを上記指定アドレスを反転したアドレスに書き込む。そして、データ読み出し時に、上記反転データを再反転して上記データとの一致を確認することでRAM故障を検出する旨が書かれている。
特開2000−66965号公報
IEC61508 電気・電子・プログラマブル電子安全関連系の機能安全 Computers can now perform vital functions safely. Otto Berg von Linde, Railway Gazette International, Vol. 135, No. 11, 1979.
特許文献1には、所定の診断タイミング毎にリード・ライト方式で、予め定めた診断バイト数で、DMAの状態を判断するRAMの診断装置について開示されているが、非特許文献1に記載されているダブルRAMアルゴリズム(Double RAM with hardware or software comparison and read/write test)によるランダムなタイミングで行うオンライン診断については触れられていない。
非特許文献2にはダブルRAMアルゴリズムの概要が記載され、高頻度で実施する旨が記載されているが、具体的実現方法については書かれていない。
非特許文献1には、ダブルRAMアルゴリズムの概要と、ダブルRAMアルゴリズムは自己診断率が高く自己診断の効果が高いこと、診断間隔と故障発生確率の関係が書かれているが、具体的なダブルRAMアルゴリズムによる診断の実現方法については記載されていない。
ここで、特にプログラマブルコントローラ等の制御分野におけるコントローラ本体(CPU、RAM等を有する)においては、このRAMには制御用データ等が格納されるので、RAMに異常が発生した場合、異常な制御が行われる可能性がある。もし、モータやプレス機等が異常動作した場合、その近くにいる作業員等に人的被害が発生する可能性があ
る。この為、コントローラ本体は、故障発生確率を減少させる為、自己診断(RAM診断)をある程度頻繁に行うことが望ましい。
上記の通り、非特許文献1には、ダブルRAMアルゴリズムは、自己診断率が高く自己診断の効果が高いことや、診断間隔と故障発生確率の関係が記載されている。よって、上記プログラマブルコントローラ等の制御分野におけるコントローラ本体におけるRAMの診断に、この様な自己診断率が高く自己診断の効果が高い診断手法であるダブルRAMアルゴリズムを用いることは、望ましいものである。
ここで、ダブルRAMアルゴリズムを用いるRAM診断に係り、故障発生確率を低減させることに関して、以下に説明する問題が生じる。
まず、一般的に、自己診断率はλDDと定義されている。
(ここで λ:危険側故障確率、λDD:自己診断で検出可能な故障確率)
また、診断間隔と故障発生確率の関係として、診断間隔が短いと故障発生確率が減少することが知られている。これは例えば冗長化システムでは、危険側共通原因故障ファクタβのスコアS=X(Z+1)+Y のZが増加しβが減少する。βが減少するとPFD及びPFHが減少する(尚、X;診断に関係する危険側共通原因故障ファクタのスコア値、Y;診断に関係しない危険側共通原因故障ファクタのスコア値、PFD;デマンド時の故障平均確率、PFH;1時間あたりの危険側故障確率、Z;診断試験の間隔と自己診断率に基づいて決まる値である)。
また、冗長化のないシステムではPST(Process Safety Time;危険事象が発生してから故障に至るまでの時間)より診断間隔Tを短くする必要がある。
従って、ダブルRAMアルゴリズム以外のRAM診断アルゴリズムにおいては、例えば、任意の適切な診断間隔T(故障発生確率が十分に低減されるように設計者等が考えて設定する)で定期的にRAMの記憶領域全体の診断処理を行うことで、RAM診断間隔の時間保証を実現でき、故障発生確率が減少させることが考えられる。
しかしながら、ダブルRAMアルゴリズムによるRAM診断処理では、定期的にRAMの記憶領域全体の診断処理を行うものではなく、上記の通りRAMからのデータ読み出し処理の際に診断を行うので(ランダムに実行される診断処理であるので)、RAMの記憶領域全体に対する診断間隔というものはなく、各データ格納領域毎の診断間隔があることになる。そして、各データ格納領域毎の診断間隔は、その領域の格納データを読出す処理の処理実行間隔に依存することになり、またこの間隔は一定になるとは限らない。つまり、RAM診断間隔の時間保証が実現されないことになる。
例えば故障処理等の処理がランダムで頻度が少ない処理が扱うデータのRAM領域についてはRAM診断の処理間隔が長く、また、RAM診断間隔の時間保証がされていない。
上記任意の適切な診断間隔Tに相当する所定時間内に(例えば診断間隔が1時間毎であった場合には1時間以内に)、上記各データ格納領域全てについて最低1回、その領域の格納データを読出す処理が実行される(これに伴い、その領域の診断処理が実行される)のであれば、結果的に、RAM診断間隔の時間保証が実現できる(上記所定期間内にRAM内の全領域の診断が行われている)ことになる。つまり、故障確率を減少させる為のRAM診断間隔の時間保証を実現できることになる。
しかしながら、例えば故障発生時の対応処理等のような、ランダムに実行され且つ実行頻度が少ない処理が扱うデータの格納領域については、上記所定期間内にRAM診断処理が実行される可能性は低く、RAM診断間隔の時間保証がされていないという問題がある。これは、換言するならば、この場合には、例えばRAMの記憶領域全てについて最低1
回はRAM診断処理が実行された状態になる毎にリセットし、このリセット時から再びRAMの記憶領域全てについて最低1回はRAM診断処理が実行された状態になるまでの時間を、そのRAM全体に関するRAM診断間隔と見做すことができる。そして、このRAM診断間隔は一定ではなく不定となり、特に上記「ランダムに実行され且つ実行頻度が少ない処理」に影響されるものとなる。そして、上記の通り、RAM全体に関するRAM診断間隔は、場合によっては非常に長いものとなり、RAM診断間隔を短くすることで故障発生確率が減少させたくても、出来ないことになる。
この問題を解決する為に、例えば上記他のアルゴリズムと同様に定期的に(例えば上記所定時間経過毎に)RAMの記憶領域全体の診断処理を行うことも考えられる。しかしながら、この様な全領域診断処理は、処理負荷や処理時間が大きくなり、CPUの資源を大きく消費するという問題があり、高価な処理能力の高いCPUを使用する、CPUを増設するなどの対応が必要であった。
また、診断対象のRAMが、何らかの制御システムのコントローラ内のメモリであった場合、RAMに格納されるデータは大別して安全関連データと非安全関連データとがあることになる。この場合、特に故障発生確率を減少させたいのは、安全関連データの格納領域であり、非安全関連データは必ずしもRAM診断処理対象とはならない。よって、上記の説明では、RAMの記憶領域全体を診断処理対象として説明したが、安全関連データに係る格納領域(安全関連データの上記反転データの格納領域も含む)のみを診断処理対象としてもよく、この場合には当該診断処理対象の記憶領域についてのみ、上述したRAM診断間隔の時間保証が実現できればよい。
上記特許文献1は、ダブルRAMアルゴリズムによるRAM診断手法ではなく、よって上述したダブルRAMアルゴリズムによるRAM診断手法を用いる場合のRAM診断間隔の時間保証の問題は、想到されるはずもなく、その解決手段は何等示されていない。
また、非特許文献1、非特許文献2には、ダブルRAMアルゴリズムによるRAM診断手法についての開示はあるが、上述したRAM診断間隔の時間保証の問題に関しては何等考えられておらず、よって当然、その解決手段は何等示されていない。
本発明の課題は、自己診断率の高いダブルRAMアルゴリズムを用いる場合でも、故障確率を減少させる為のRAM診断間隔の時間保証を実現でき、更にもしRAM診断間隔の時間保証を実現できなかった場合でもこれを検出してアラーム報知することができ、また処理負荷を軽減でき、更に定期的な診断処理を併用しつつ当該処理の処理時間・負荷を軽減できるRAM診断装置等を提供することである。
本発明のRAM診断装置は、各種安全関連データがそれぞれ所定の1又は複数のアドレスに格納されるRAMと、該RAMに対する診断処理を行う診断処理部とからなるRAM診断装置であって、前記RAMにおいて、予め所定のRAM診断間隔が保証されると判断された安全関連データを格納する領域である第1領域と、予めRAM診断間隔が保証されないと判断された安全関連データを格納する領域である第2領域とを設け、更に前記第1領域内の前記各アドレス毎に対応して、そのアドレスについて前記診断処理を実施済か未実施かを示す管理情報が記憶され、前記診断処理部は、前記第1領域に対しては、ダブルRAMアルゴリズムによって該第1領域内の任意のデータにアクセスした際に該データの格納アドレスに対する診断処理を行うと共に、該RAM診断処理を行ったアドレスに対応する前記管理情報を実施済とする診断処理手段と、前記RAM診断間隔に相当する所定時間毎に、前記管理情報を参照して未実施となっている管理情報があるか否かをチェックして、未実施となっている管理情報がある場合にはアラーム出力する監視手段とを有する。
また、上記RAM診断装置において例えば、前記診断処理手段は、前記第2領域に対しては、前記RAM診断間隔に相当する所定時間毎に又は該RAM診断間隔より短い所定時間毎に、任意の診断アルゴリズムによる診断処理を実行する。
上記RAM診断装置では、第1領域に関しては、ダブルRAMアルゴリズムによる任意のデータアクセスに伴う診断処理、つまりランダムに実行される診断処理であっても、RAM診断間隔の時限保証を実現できる。但し、何らかの異常等によってRAM診断間隔の時限保証が実現されない事態となる可能性があることから、監視手段によって監視を行って、異常があればアラーム出力することで対応可能となる。
また、第2領域に関しては、例えばRAM診断間隔に相当する所定時間毎に定期的な診断処理を行う。従来の定期的な診断処理では、RAMの全領域に対する診断処理であった為、処理負荷や処理時間が大きくなり、CPUの資源を大きく消費するという問題があったが、本手法では第1領域は除外して第2領域のみを処理対象とできるので、この様な問題を解消できる。
また、前記第1領域または/及び前記第2領域は、複数のブロックに分割されているようにしてもよい。
そして、更に、前記診断処理手段は、前記RAM診断間隔より短い所定時間毎に前記第2領域の1又は複数のブロックに対して前記任意の診断アルゴリズムによる診断処理を実行し、前記RAM診断間隔内に前記第2領域の全てのブロックについて診断処理を実行するようにしてもよい。
上記第2領域に関する定期的な診断処理を、第2領域全体に対して一度に行うのではなく各ブロック毎に行うことで、1回の処理当たりの処理時間を短縮することができ、診断処理によって本来のアプリケーション処理等が実行できなくなる時間を短縮することができる。
本発明のRAM診断装置等によれば、自己診断率の高いダブルRAMアルゴリズムを用いる場合でも、故障確率を減少させる為のRAM診断間隔の時間保証を実現でき、更にもしRAM診断間隔の時間保証を実現できなかった場合でもこれを検出してアラーム報知することができる。また処理負荷を軽減できる。更に定期的な診断処理を併用しつつ当該処理の処理時間・負荷を軽減できる。
本例のRAM診断装置の構成ブロック図である。 (a)〜(c)は、ダブルRAM管理情報記憶部のデータ構成例である。 (a)、(b)は、ダブルRAM管理領域に格納されるデータ構成例である。 ブロックに関する一例を示す図である。 ダブルRAM書込関数による処理のフローチャート図である。 図5のステップS24の処理の詳細フローチャート図である。 RAM診断完了ビット領域の各ビット情報とダブルRAM領域の各アドレスとの対応関係の一例を示す図である。 ダブルRAM読込関数による処理のフローチャート図である。 図8のステップS54の処理の詳細フローチャート図である。 ダブルRAM監視タスクによる処理のフローチャート図である。 RAM診断タスクによる処理のフローチャート図である。 図11のステップS93の処理の詳細フローチャート図(その1)である。 図12のステップS105の処理について説明する為の図である。 図11のステップS93の処理の詳細フローチャート図(その2)である。 安全関連アプリケーション部の処理フローチャート図である。
以下、図面を参照して本発明の実施の形態について説明する。
図1は、本例のRAM診断装置の構成ブロック図である。
尚、このRAM診断装置は、例えば一例としては、プログラマブルコントローラシステム(制御システム)におけるコントローラ本体であるが、この例に限らない。この例で言うならば、例えば、コントローラ本体(CPU、RAM等を有する)は、自己診断処理として自己のRAMの診断処理を行うものであり、特にこの様なRAM診断処理に係る構成を図1に示している。
図1に示すRAM診断装置は、CPU1、ROM10、RAM20から成る。CPU1は、アドレス線、データ線等を介して、ROM10、RAM20にアクセスして、任意のデータのリード/ライト処理等を行う。あるいは、CPU1は、ROMから各種プログラムを読出し・実行する。
RAM20は、本例のRAM診断装置による診断対象のメモリである。RAM20に対する診断処理は、CPU1が、ROM10に予め記憶されている各種アプリケーションプログラムやタスク、関数等を実行することにより実現される。
まず、ROM10について説明する。
ROM10には、ダブルRAM書込関数11、ダブルRAM読込関数12、ダブルRAM監視タスク13、RAM診断タスク14、安全関連アプリケーション15等が予め格納されている。また、ROM10にはダブルRAM管理情報16も予め格納されている。尚、ROM10の自己診断は、公知技術である、格納されているデータのCRC(Cyclic Redundancy Check:巡回冗長度検査)等により別途行うが、ここでは特に関係ないものであり、また公知技術であるので、特に説明しない。
上記各関数(ダブルRAM書込関数11とダブルRAM読込関数12)は、安全関連アプリケーション15のプログラム内にインライン展開されており、安全関連アプリケーション15の実行中に呼び出されてそれぞれの処理を実行する。
ダブルRAM書込関数11は、RAM20のダブルRAM領域22内の任意の記憶領域
(アドレス)に任意のデータを書込む処理を行うための関数である。また、この任意のデータを反転させたデータ(反転データ)を反転ダブルRAM領域25に書込む処理を行う。上述したように、ダブルRAMアルゴリズムによる診断処理では、反転データを用いる必要がある。例えば一例としては、上記のようにデータ書込みの際にその反転データを生成・格納しておき、ダブルRAM読込関数12によるデータ読込みの際に、反転データを用いて診断を行う。
但し、この例に限らず、データ書込みの際にもダブルRAMアルゴリズムによる診断処理を行うようにしてもよい。これより、本説明においては、ダブルRAM書込関数11は、上述した処理に加えて、更に、上述したダブルRAMアルゴリズムによるRAM20の診断処理(書込データの記憶領域に関する診断)を行うものとして説明するが、この例に限るものではない。但し、データ書込みの際にも診断処理を行う理由は、メモリの書き込み回路のチェックを行うことで、より厳密にRAM診断を行う為である。
尚、ダブルRAM書込関数11は、RAM20の診断処理を行う場合には、更に、後述するRAM診断完了ビット領域62の該当ビット情報の更新処理を行う。後述するように、ダブルRAM監視タスク13の処理の際には、RAM診断完了ビット領域62を参照する。
ダブルRAM書込関数11による処理フローチャートは、図5、図6に示し、後に説明する。
ダブルRAM読込関数12は、RAM20のダブルRAM領域22内の任意の記憶領域(アドレス)から任意のデータを読込むと共に、このデータの反転データを反転ダブルRAM領域25から読込んで、RAM20の診断(読込データの記憶領域に関する診断)を行う(すなわち上述したダブルRAMアルゴリズムによる診断処理を行う)ための関数である。更に、後述するRAM診断完了ビット領域62の該当ビット情報の更新処理を行う。
ダブルRAM読込関数12による処理フローチャートは、図5、図6に示し、後に説明する。
上記のように、ダブルRAM書込関数11は、上記ダブルRAM領域22へのデータ書き込みの際に、反転ダブルRAM領域25に、このデータを反転させたデータ(反転データというものとする)を書き込む。これは、例えば、上記ダブルRAM領域22への書込データの格納アドレスを反転させたアドレスに上記反転データ書き込むものである(例;ダブルRAM領域22における5050番地に16進数‘0101’のデータを格納する場合、その反転データ(16進数‘FEFE’)はAFAF番地に格納する)。尚、この例の場合、反転ダブルRAM領域25のアドレスは、ダブルRAM領域22のアドレスによって自動的に決まるものとなり、自由に決められるものではないことになる。
また、上記のように、ダブルRAM書込関数12は、上記ダブルRAM領域22から任意のデータを読み込む際に、この読込データに対応する反転データを反転ダブルRAM領域25から取得する(例えば、5050番地からデータを読み出す際には、AFAF番地から反転データも取得する)。そして、この反転データを反転させたものが上記読込データと一致するか否かによりこのアドレス領域(5050番地等)の診断を行う。
尚、上記のようにデータ読込み時だけでなくデータ書込みの際にもRAM診断処理が実行される例の場合には、ダブルRAM領域22に格納すべきデータは、上述した任意の適切な診断間隔T(故障発生確率が十分に低減されるように設計者等が考えて予め設定する)内に、データ読込処理、データ書込処理の少なくともどちらか一方が確実に実行される(勿論、両方実行されてもよい)と判断されるデータとなる。一方、データ書込みの際に
は反転データの生成・格納は行うが診断は行わない例、すなわちデータ読込処理の際だけ診断を行う例の場合、ダブルRAM領域22に格納すべきデータは、上述した任意の適切な診断間隔内に、データ読込処理が確実に実行されると判断されるデータとなる。
上記の通り、本説明においては一例として、データ読込みの際だけでなくデータ書込み際にも、ダブルRAMアルゴリズムによる診断処理も行う。よって、後述するフローチャート図もこの例に応じた内容となっている。
上記ダブルRAM書込関数11、ダブルRAM書込関数12の機能・処理については、詳しくは後に図5〜図9のフローチャート図を参照して説明する。
ダブルRAM監視タスク13は、ダブルRAM領域22内の全てのデータ格納領域について、上記予め設定された診断間隔T内に診断が実施されているかを監視するタスクである。ダブルRAM監視タスク13は、例えば上記診断間隔Tに相当する所定時間毎に起動して処理実行する。
後にダブルRAM領域22に関して説明する通り、ダブルRAM領域22に格納するデータは全て、予め設定された診断間隔T内に上記ダブルRAM書込関数11またはダブルRAM書込関数12による診断が実施されているはずであるが、何らかの異常等によって診断実施されていない可能性もあるので、ダブルRAM監視タスク13によって監視を行うものである。
ダブルRAM監視タスク13の処理フローチャート図は、図10に示し、後に説明する。
RAM診断タスク14は、ダブルRAM混在領域23に対するRAM診断を行うタスクである。ダブルRAM混在領域23には、リード/ライトによってはRAM診断間隔が保証されないデータ等が格納される。つまり、ダブルRAM混在領域23には、上記診断間隔T内に上記ダブルRAM書込関数11またはダブルRAM書込関数12による診断処理が必ず実行されるとは限らない(つまり、リード/ライトが行われるとは限らない)データ等が格納される。
この為、ダブルRAM混在領域23に関しては、RAM診断タスク14が、例えば上記診断間隔Tに相当する所定時間毎に起動して診断処理を行う。これによって、ダブルRAM混在領域23に関しても、予め設定された診断間隔T内に診断が実施されることになる。また、上記ダブルRAM領域22のようにリード/ライトの際に診断処理を行うと、RAM診断タスク14の診断処理によって重複して診断が行われることになるので、ダブルRAM混在領域23に関しては、リード/ライトの際の診断処理は行われない。
RAM診断タスク14による処理の一例を、図11、図12等に示し、後に説明する。
尚、RAM診断タスク14によるRAMの診断方法は、例えばダブルRAMアルゴリズム以外のアルゴリズムを用いる。図12では一例としてギャルパットを用いる例を示している。勿論、図12に示すアルゴリズムに限るものではなく、ダブルRAMアルゴリズム以外のアルゴリズムとして、例えばIEC61508-2 Table A.6に示されている手法などを使用することができる。但し、図14に示すように、ダブルRAMアルゴリズムを用いてもよい。但し、定期的な診断処理でダブルRAMアルゴリズムを利用する場合は、非特許文献2で説明されているように、他のアルゴリズム(ギャルパット等)に比べて診断間隔を短くし、高頻度の診断間隔とする必要がある。
安全関連アプリケーション15は、例えば上記安全関連データに係る何らかの処理を行うアプリケーションである。安全関連アプリケーション15の処理フローチャートを図13に示し後に説明する。
ダブルRAM管理情報16は、RAM20に格納されるデータ(ダブルRAM領域22、ダブルRAM混在領域23等に格納されるデータ等)を管理するための各種管理データである。ダブルRAM管理情報16の具体的なデータ構成例は、図2に示し、後に説明する。
ここで、CPU1は、上記各アプリケーション/関数/タスクを実行することで所定の処理機能を実現することになり、これよりCPU1は図示しないが各種処理機能部を有するものと見做してよい。すなわち、図1には示していないが、CPU1は、ダブルRAM書込部11’、ダブルRAM読込部12’、ダブルRAM監視部13’、RAM診断部14’、安全関連アプリケーション部15’の各種処理機能部を有するものである。
CPU1は、ダブルRAM書込関数11を実行することによりダブルRAM書込部11’の処理機能を実現する。これは、例えば図5、図6に示す処理を実行するものである。また、CPU1は、ダブルRAM読込関数12を実行することによりダブルRAM読込部12’の処理機能を実現する。これは、例えば図8、図9に示す処理を実行するものである。
同様にして、CPU1は、ダブルRAM監視タスク13を実行することにより、ダブルRAM監視部13’の処理機能を実現する。これは、例えば図10に示す処理を実行するものである。CPU1は、RAM診断タスク14を実行することにより、RAM診断部14’の処理機能を実現する。これは、例えば図11、図12(あるいは図14)に示す処理を実行するものである。CPU1は、安全関連アプリケーション15を実行することにより、安全関連アプリケーション部15’の処理機能を実現する。これは、例えば図15に示す処理を実行するものである。
次に、以下、RAM20について説明する。
RAM20は、各種記憶領域を有する。すなわち、図示のダブルRAM管理領域21、ダブルRAM領域22、ダブルRAM混在領域23、バッファ領域24、反転ダブルRAM領域25を有する。
ダブルRAM管理領域21は、RAM診断監視を管理するための情報を格納する領域である。詳しくは後に図3を参照して説明するが、ダブルRAM管理領域21には、RAM診断カウンタ、RAM診断完了ビット等のRAM管理情報が格納される。尚、これらカウンタ、ビットの値は、初期値として‘0’が設定される。
ダブルRAM領域22は、ダブルRAMアルゴリズムによる診断処理(データリード/ライトに伴う診断処理)によって上記診断間隔Tを満たすと判断された可変データを格納する領域である。診断間隔Tは、予め設計により要求された(上記のように故障発生確率が十分に低減されるように設計者等が考えた/定義した)診断間隔である。基本的には、そのデータに対する書込み又は読込み処理(換言すれば、ダブルRAMアルゴリズムによる診断処理)が、予め定義された所定時間内(診断間隔T内)に確実に発生すると考えられるデータは、ダブルRAM領域22に格納するように設定する。定義した所定時間内に確実に診断処理があるか否かは、例えば処理の静的解析等により開発時に開発者等が決定する。
このように、基本的には、ダブルRAM領域22に格納されるデータ(当該データの記憶領域)に関しては、診断間隔Tを満たすようにしてダブルRAMアルゴリズムによる診断処理が実行されるはずである。しかしながら、現実には、必ずその様になるという保証はなく、何らかの異常等によって診断間隔Tが満たされない事態が生じる可能性がある。
例えば、設計ミスや実装ミス、処理プログラムのエラー、ハードウェアの故障に起因する処理エラー等が発生する可能性がある。
特にプログラマブルコントローラ等の制御分野におけるコントローラ本体においては、その内蔵RAMには制御用データ等が格納されるので、RAMに異常が発生した場合、異常な制御が行われる可能性がある。もし、モータやプレス機等が異常動作した場合、その近くにいる作業員等に人的被害が発生する可能性がある。この為、特に故障発生確率を減少させることが必要となる。
この様な問題に対応する為に、本手法では、上記ダブルRAM監視タスク13を設けている。上記ダブルRAM監視部13’の処理(図10の処理)は、例えば診断間隔Tと同じ所定時間毎に実行されるものであり、後述する図3(b)に示すRAM診断完了ビット領域62を参照することで、ダブルRAM領域22に格納される全てのデータの記憶領域)について、上記所定時間内に上記ダブルRAM書込部11’または上記ダブルRAM読込部12’による診断処理が実行済みであるか否かをチェックする。
上記の通り、何等かの異常が発生していないならば、全てのデータ記憶領域について診断処理が実行済みであるはずである。よって、もし1つでも診断処理が未実行である記憶領域があるならば、何等かの異常があるものとしてアラーム出力する。このアラームによって、作業者/開発者等が、何らかの対応を行うことができる。例えば、アラームが出力された場合は、ダブルRAM領域22の見直しを行い、定数を変更すること等の対応が可能となる。これによって、ダブルRAM領域22に関して診断間隔の時限保証をすることができる。
また、診断間隔Tを満たすものと判断されたデータを、所定の記憶領域(ダブルRAM領域22)にまとめて格納しておくことで、上記ダブルRAM監視部13’のチェック処理が効率的に行えることになり、処理時間が短縮できる。
一方、ダブルRAM混在領域23には、上記ダブルRAM領域22に格納されるデータ以外のデータが格納される。すなわち、上述した診断間隔Tを満たすものと判断されたデータ以外のデータが格納される。つまり、ダブルRAM混在領域23に格納されるデータに関しては、上記ダブルRAM書込関数11やダブルRAM読込関数12の処理による診断が、上記診断間隔T内に実行されている保証はないので、定期的な診断処理を実行する。すなわち、上記RAM診断タスク14による診断処理を、例えば診断間隔Tと同じ所定時間毎に実行することで、ダブルRAM混在領域23に関しても診断間隔の時限保証をすることができる。
尚、ダブルRAM混在領域23に格納されるデータの一例は、下記の通りであるが、この例に限るものではない。
・外部から設定するパラメータ設定値
・プログラムで使用する定数
・故障時にしか使用しない可変データ等、そのデータ更新が診断時限(診断間隔T)を超過するようなデータ
・外部機器のDMA(Direct Memory Access)によるデータ
上記の通り、本例では例えば一例として、RAM20内には上記安全関連データが格納されるものとし、各安全関連データは、ダブルRAM領域22、ダブルRAM混在領域23の何れかに格納されるものであり、その分類方法は既に述べた通りである。
そして、ダブルRAM領域22に関しては、基本的にはダブルRAMアルゴリズムの診断処理によって診断間隔の時限保証をすることができ、万が一異常等によって診断間隔T
内に診断が実行されなかった場合でも、監視処理を行っていることから、異常を検出して速やかに対応を図ることができ、診断間隔の時限保証をすることができる。自己診断率の高いダブルRAMアルゴリズムを使用し且つ診断間隔を保証することによって、故障確率を減少させることができる。
また、ダブルRAM混在領域23に関しては定期的な診断処理によって診断間隔の時限保証をすることができる。従来の課題で述べた通り、RAMの全領域に対して定期的な診断処理を行うと、処理負荷や処理時間が大きくなり、CPUの資源を大きく消費するという問題がある。これに対して、本手法では、全領域ではなく、ダブルRAM混在領域23のみに対して定期的な診断処理を行うので、従来に比べて、処理負荷や処理時間が大きくなることはなく、CPUの資源を大きく消費することもない。
また、上記RAM診断タスク14による診断処理は、例えば後述するようにRAM20の記憶領域を複数ブロックに分割する構成例の場合には、診断間隔Tより短い所定時間毎に実行することになる。例えば後述する診断カウント=1、2、・・・Nの場合には、RAM診断タスク14による診断処理周期をtとすると、「“t×N”≦診断間隔T」となるようにtを設定することになる。この様にすることで、定期的な診断処理に係る処理負荷や処理時間を更に少なくすることができる。詳しくは後述する。
また、上記の通り、ダブルRAM領域22、ダブルRAM混在領域23に格納されるデータは、何れも上記従来の課題で述べた安全関連データであるが、上記非安全関連データもRAM20に格納されてもよい。但し、上述した通り、診断間隔の時限保証が必要なデータは安全関連データであるので、非安全関連データに関しては、ここでは特に示さないし、説明もしない。
また、上記のことから、安全関連データに係る何らかの所定の処理を実行するアプリケーションである安全関連アプリケーション15は、その処理実行中に、ダブルRAM領域22またはダブルRAM混在領域23の安全関連データにアクセスすることになる。
反転ダブルRAM領域25は、既に説明したように、ダブルRAM領域22の格納データの反転データを格納する領域である。これは、既に述べた通り、ダブルRAM領域22のアドレスを反転したアドレスとなっている(例;5050番地の反転アドレスはAFAF番地)。
バッファ領域24は、RAM診断タスク14による処理においてデータ退避に使用する領域である。詳しくは後述する。尚、当該領域24のRAM自己診断は、公知である格納されているデータのCRC(Cyclic Redundancy Check:巡回冗長度検査)などにより別途行う。なお、RAM診断タスク14による診断処理がダブルRAMアルゴリズムを利用した診断処理である場合は、レジスタにデータを退避するため当該領域24は不要である。
以下、図2以降を参照して更に詳細に説明する。
図2(a)〜(c)は、上記ROM10に予め格納されているダブルRAM管理情報16のデータ構成例である。図示の例では、ダブルRAM管理情報16は、図2(a)に示すデータ番号管理テーブル30、図2(b)に示すRAM診断制御テーブル40、図2(c)に示すダブルRAM領域アドレスデータテーブル50等の各種テーブルである。
尚、図2(b)に示すRAM診断制御テーブル40は、後述するようにRAM20の記憶領域が複数ブロックに分割されている構成例に対応するものであり、よって複数ブロックに分割されていない場合には必要ないものである。この場合、ダブルRAM領域アドレスデータテーブル50に関しても、図示のようなブロック番号毎とする必要はないことに
なる。
図2(a)に示すデータ番号管理テーブル30は、RAMに格納されている各安全関連データに対して一意に付与した通し番号であるデータ番号31に対応付けて、当該安全関連データのデータ量であるデータバイト数32を格納する。このデータは、アクセスするデータのアドレス範囲のチェックに使用する(図5のステップS12の処理等で使用する)。
図2(b)に示すRAM診断制御テーブル40は、上記の通り、RAM20の記憶領域を複数のブロックに分割した構成である場合に設けられ、ダブルRAM混在領域23に対する診断処理の際に、処理対象のブロックを決定する為に用いられる。
RAM診断制御テーブル40は、図示の例では、診断カウント41と「診断ダブルRAM混在領域ブロック番号」42とから成る。つまり、診断を時分割で行うことを可能とするため、各診断カウント値に対応付けて、その診断カウント値の時に診断を行うべきダブルRAM混在領域23のブロック番号を格納する。
診断カウンタ41には、例えば1,2、3、・・・というように連続する整数が格納される。ここで、後述する図3(a)に示すRAM診断カウンタが設けられており、RAM診断タスク14による処理では後述する図11に示すように処理実行毎に当該RAM診断カウンタのカウント値を更新(+1インクリメント等)する。RAM診断カウンタは、ここでは1〜Nまでカウントするものであり、Nの次は1に戻る。つまり、RAM診断カウンタによるカウント値は、1→2→3→・・N→1→2・・・となる。この例の場合、診断カウント41には、1,2、3、・・・Nが格納される。
そして、詳しくは後述するように、RAM診断タスク14による処理において、そのときの上記RAM診断カウンタのカウント値を得て、このカウント値に対応する「診断ダブルRAM混在領域ブロック番号」42を取得することで、処理対象のブロックを決定する。図示の例では例えば診断カウント値=‘1’であったならば、ブロック番号=‘2’のブロックが処理対象となる。
尚、「診断ダブルRAM混在領域ブロック番号」42には、ダブルRAM混在領域23が格納されているブロックのブロック番号のみが格納される。図示の例は、後述する図4に示す例に対応するものであり、よって図示の通りブロック番号1と4は格納されていない。
図2(c)に、ダブルRAM領域アドレスデータテーブル50のデータ構成例を示す。
ダブルRAM領域アドレスデータテーブル50には、各ブロック番号50−1に対応付けて、そのブロックに対応した領域に関係するアドレス50−2(各種領域それぞれの先頭アドレスと最終アドレス)が格納されている。
図示の例では、アドレス50−2には、ダブルRAM領域先頭アドレス51、ダブルRAM領域最終アドレス52、反転ダブルRAM領域先頭アドレス53、反転ダブルRAM領域最終アドレス54、診断完了ビット領域先頭アドレス55、診断完了ビット領域最終アドレス56、ダブルRAM混在領域先頭アドレス57、ダブルRAM混在領域最終アドレス58が格納される。
但し、これらのアドレス51〜58の全てが格納されるわけではない。
例えば、ダブルRAM混在領域23が格納される任意のブロックに関しては、このブロックのブロック番号50−1に対応するアドレス50−2には、このダブルRAM混在領
域23の先頭アドレス57と最終アドレス58が格納されている(これは、このブロックの先頭/最終アドレスに相当することになる)。
あるいは、ダブルRAM領域22が格納される任意のブロックに関しては、このブロックのブロック番号50−1に対応するアドレス50−2には、このダブルRAM領域22の先頭アドレス51と最終アドレス52が格納されており、更に後述する図3(b)等に示すRAM診断完了ビット領域62の先頭アドレス55と最終アドレス56が格納されており、更にこのダブルRAM領域22に対応する反転ダブルRAM領域25の先頭アドレス53と最終アドレス54も格納されている。尚、複数ブロック分割の例の場合、後述する図3(b)等に示すRAM診断完了ビット領域62は、ダブルRAM領域22が格納される各ブロック毎に対応して存在する。
ここで、図4に、上記ブロックに関する一例を示す。
図4に示す一例では、例えばブロック番号=‘1’のブロックはブロック1、例えばブロック番号=‘2’のブロックはブロック2等として示すものとする。そして、この例では、ブロック1〜ブロック6の6つのブロックから成り、各ブロック1〜6にはそれぞれダブルRAM領域22、ダブルRAM混在領域23の何れかが格納される。図示の例では、ブロック1、4にはダブルRAM領域22が格納され、ブロック2,3,5,6にはダブルRAM混在領域23が格納される。但し、これは、別の見方をすれば、ダブルRAM領域22、ダブルRAM混在領域23それぞれが、複数のブロックに分割されているとも言える。何れにしても本例では、ダブルRAM領域22、ダブルRAM混在領域23は、それぞれ、1つではなく複数存在するものであり、この様な形態を「複数のブロックに分割された構成例」、「複数ブロックの例」等と呼ぶものとする。
また、図示していないが、ブロック1とブロック4の各ダブルRAM領域22にそれぞれ対応する反転ダブルRAM領域25も格納されており、これらもブロック1、ブロック2として扱われる。
よって、例えばブロック1を例にすると、図示の通りブロック1のアドレス範囲は2000番地〜27FF番地であるので、そのダブルRAM領域22に対応する反転ダブルRAM領域25のアドレス範囲はAFFF番地〜A800番地となる。よって、ダブルRAM領域アドレスデータテーブル50におけるブロック番号=1に対応するデータは、上記ダブルRAM領域先頭アドレス51、ダブルRAM領域最終アドレス52として2000番地、27FF番地が格納され、上記反転ダブルRAM領域先頭アドレス53、反転ダブルRAM領域最終アドレス54としてA800番地、AFFF番地が格納されることになる。また、図示していないが上記の通り、ブロック1に対応するRAM診断完了ビット領域62も所定の記憶領域に記憶されており、その先頭アドレス55、最終アドレス56も格納されていることになる。
同様にして、例えばブロック2を例にすると、図示の通りブロック2にはダブルRAM混在領域23が格納されており、そのアドレス範囲は2800番地〜37FF番地であるので、ダブルRAM領域アドレスデータテーブル50におけるブロック番号=2に対応するデータは、上記ダブルRAM混在領域先頭アドレス57、ダブルRAM混在領域最終アドレス58として2800番地、37FF番地が格納されることになる。
ダブルRAM領域アドレスデータテーブル50は、後述するように、アドレスを求めたり、アドレス範囲をチェックするために使用する。
図3(a)、(b)に、RAM20のダブルRAM管理領域21に格納されるデータ構成例を示す。図示の通り、ダブルRAM管理領域21には、図3(a)のRAM診断カウンタ61、図3(b)のRAM診断完了ビット領域62等が格納される。
図3(a)に示すRAM診断カウンタ61は、例えば任意のカウント値を保持する記憶領域である。このカウント値は、RAM診断タスク14の処理の際に参照され、また更新される(上述した一例では、1→2→3→・・N→1→2・・・と更新される)。
上記の通り、RAM診断カウンタ61は、RAM20の記憶領域が複数のブロックに分割された構成例に対応して設けられるものであり、複数ブロックではない構成の場合には必要ないものである。
複数ブロックの例である場合、上記の通りダブルRAM領域22、ダブルRAM混在領域23がそれぞれ複数存在することになる。そして、ダブルRAM混在領域23に対するRAM診断タスク14による診断処理は、1回の処理で全ての処理対象ブロックについて(換言すれば全てのダブルRAM混在領域23について)診断処理を行うのではなく、そのときの上記カウント値に対応する1又は複数のブロックについてのみ診断処理を行う。つまり、ダブルRAM混在領域23に関しては、診断を時分割で行う。これによって、例えば全てのダブルRAM混在領域23に関して一度に診断しようとする場合、時間が掛かり、診断中は本来の処理(安全関連アプリケーション15の処理)が実行できないことになるが、この様な問題を解消できる。
次に、図3(b)に示すRAM診断完了ビット領域62について説明する。
上記の通り、ダブルRAM領域22に関しては、基本的に必ず上記診断間隔T内にアクセスがあるはずであり、このアクセスによって上記ダブルRAM書込関数11またはダブルRAM書込関数12による診断が実行されているはずである。しかし、本手法では、上記の通り異常等によって診断が実行されない可能性があることに対応して、ダブルRAM監視部13’による監視を行うようにしている。そして、その為にRAM診断完了ビット領域62を用いる。
図3(b)に示すRAM診断完了ビット領域62には、ダブルRAM領域22内の各アドレス(1バイト単位)に対応するビット情報群が格納される。つまり、図示のビット情報群(bit0、bit1、bit2、・・・bitn・・・bitn+2)が格納される。このビット情報は、それが対応するアドレスに関して上記アクセスに伴うRAM診断(ダブルRAM書込関数11またはダブルRAM書込関数12による診断)が実行済みであるか否かを示すものである(定義した時間内にRAM診断を実行したか否かを示す)。本例では、ビットON=‘1’はRAM診断実行済み(完了)を意味し、ビットOFF=‘0’はRAM診断が未完了であることを意味するものとする。これより、初期状態では全てのビット情報は‘0’に設定される。
例えば、RAM診断完了ビット領域62の先頭ビット(bit 0)は、ダブルRAM領域22の“先頭アドレス+0”のアドレス(すなわち、先頭アドレス)に対応するビット情報である。よって、ダブルRAM領域22の先頭アドレスに対するアクセスがあった場合(これに伴う診断処理があった場合)には、bit 0は‘1’になる。
同様に、RAM診断完了ビット領域62の先頭から2番目のビット(bit 1)は、ダブルRAM領域22の“先頭アドレス+1”のアドレスに対応するビット情報である。仮に、ダブルRAM領域22の先頭アドレスが8000番地であったならば、bit 1は、8001番地に対応するビット情報ということになる。同様にして、例えばbitnは、ダブルRAM領域22の“先頭アドレス+n”のアドレスに対応するビット情報である。
RAM診断完了ビット領域62は、ダブルRAM書込関数11またはダブルRAM書込関数12の処理の際に更新される(アクセス先データの格納アドレスに対応するビット情
報が‘1’にセットされる)。また、RAM診断完了ビット領域62は、ダブルRAM監視部13’による処理の際に参照される。また、ダブルRAM監視部13’による処理実行毎に、例えば当該処理の最後で全てのビット情報は‘0’にリセットされる。
また、既に述べたが、RAM20の記憶領域が複数ブロックに分割された構成例の場合には、RAM診断完了ビット領域62は、各ブロック毎に対応してそれぞれ設けられる。
以下、図5以降のフローチャート図を参照して、上記各種関数/タスク/アプリケーションの処理例について説明する。
まず、ダブルRAM書込関数11について説明する。
図5は、ダブルRAM書込関数11(ダブルRAM書込部11’)による処理フローチャート図である。図6は、図5におけるステップS24の処理の詳細フローチャート図である。
尚、図5の処理に係るパラメータ(入力)、関数値(出力)は下記の通りとする。
パラメータ
・データ番号
・書込アドレス
・書込データ
・書込データバイト数
関数値
・正常終了/異常終了/データ異常
尚、上記パラメータにおいて、データ番号は書込データのデータ番号であり、書込アドレスは書込データの書込み先領域の先頭アドレスを意味する。
また、尚、ダブルRAM書込関数11は、安全関連アプリケーション15のプログラム内にインライン展開する。これにより、スタック領域等の可変のRAM領域の使用を制限し、領域オーバなどのリスクを軽減する。
図5の処理は、まず、上記パラメータの書込アドレスに基づいて書込み先領域(複数ブロックの例の場合には書込み先ブロック)を認識できるので、この書き込み先領域すなわちダブルRAM領域22、ダブルRAM混在領域23の何れかの領域の先頭アドレスと最終アドレスを、上記ダブルRAM領域アドレスデータテーブル50から取得する。これより、書き込み先領域(ダブルRAM領域22/ダブルRAM混在領域23)のアドレス範囲が分かる。更に、上記パラメータの書込アドレスと書込データバイト数とから、上記書込データの書込み先アドレス範囲(先頭アドレスと最終アドレス;以下、書込データの格納領域という場合もある)を計算する(ステップS11)。上記の通り“書込アドレス=先頭アドレス”であり、最終アドレスは、例えば「書込アドレス+書込データバイト数−1」によって求めることができる。
そして、上記書込データの書込み先アドレス範囲が、書き込み先領域(ダブルRAM領域22/ダブルRAM混在領域23)内であるか否かを判定する(ステップS12)。もし、書込データのアクセス先が書き込み先領域内では無い場合には(ステップS12,NO)、何等かの異常があるものとして異常終了する(ステップS26)。これは、上記関数値として異常終了を返すものである。尚、ステップS12の判定は、例えば何らかの異常により例えばアドレスデータが変化していないかを念の為に確認するものであり、よって、この処理は必ずしも必要なものではない。
一方、異常が無い場合には、すなわち上記書込データのアドレス範囲が上記書き込み先領域内である場合には(ステップS12,YES)、続いて、上記パラメータの書込デー
タバイト数に関するチェックを行う(ステップS13)。すなわち、上記パラメータのデータ番号を用いて上記図2(a)に示すデータ番号管理テーブル30を検索して、該当するレコードのデータバイト数32を取得し、上記パラメータの書込データバイト数がこのデータバイト数32と一致するか否かをチェックする。不一致であれば(ステップS13,NO)、異常終了とする(ステップS26)。一致する場合には(ステップS13,YES)ステップS14以降の処理へ移行する。
尚、ステップS13の判定も上記ステップS12の判定と同様、念の為のチェック処理であり、必ずしも必要な処理ではない。
上記ステップS12,S13の処理により異常が無いことを確認したら、上記書込データを書込アドレス(先頭アドレス)から書込データバイト数分書込む(ステップS14)。
そして、上記書き込み先領域が、ダブルRAM混在領域23であったならば(ステップS15,NO)、ステップS16以降の処理を行うことなく、本処理を終了する(ステップS23の正常終了とする)。尚、これは上記関数値として正常終了を返すものである。
ダブルRAM混在領域23に関しては、後にRAM診断タスク14による定期的な診断処理を行うため、ここで診断を行うと重複して診断を行うことになり無駄な処理が発生する為、基本的にはデータ書込みを行うだけで本処理を終了する。
一方、上記書き込み先領域が、ダブルRAM領域22であった場合には(ステップS15,YES)ステップS16以降の処理へ移行する。すなわち、まず、ダブルRAMアルゴリズムによる診断処理を行う。
まず、上記ステップS14で書込データを書き込んだ記憶領域から、データを読み出す。これは、RAM診断のために読出すものであり、読み出したデータは後述するステップS21の判定の際に用いる。尚、異常がなければ読み出されたデータは書込データであるはずである。更に、上記パラメータの書込アドレスを反転する(反転アドレスを求める)(ステップS16)。例えばアドレス‘0101’(16進)の反転アドレスは‘FEFE’である。
尚、アドレス反転を行うのは、RAMの制御は、アドレス制御機構とビット制御機構で行われているからである。すなわち、単にデータ反転を行うだけではビット制御機構の異常チェックしか出来ないので、アドレス反転によりアドレス制御機構の異常チェックも行えるようにしている。
次に、上記ダブルRAM領域アドレスデータテーブル50を参照して、反転ダブルRAM領域25のアドレス範囲(先頭アドレスと最終アドレス)を取得する(ステップS17)。そして、ステップS16で求めた反転アドレスが反転ダブルRAM領域25内であるか否かをチェックする(ステップS18)。領域25内で無ければ(ステップS18,NO)上記ステップS26の異常終了とする。尚、ステップS17,S18の処理も、上記ステップS12等と同様、必ずしも必要なものではない。
一方、異常が無い場合すなわち反転アドレスが領域25内である場合には(ステップS18,YES)、上記パラメータの書込データを反転する(反転データを求める)(ステップS19)。そして、この反転データを上記反転アドレスから上記書込データバイト数分、書き込む。更に、この反転データを書き込んだ記憶領域から、データを読み出す(ステップS20)。これは、RAM診断のために読出すものであり、異常がなければ読み出されたデータは上記反転データであるはずである。
そして、ステップS20で読込んだデータを反転させて(異常が無ければ反転データを反転させて元の書込データに戻すことになる)、これがステップS16で読込んだデータ(異常が無ければ書込データのはずである)と一致するか否かを確認する(ステップS21)。一致しない場合は(ステップS21,NO)、データ異常とする(ステップS25)。これは、上記関数値としてデータ異常を返すものである。
一致する場合には(ステップS21,YES)、データ異常はないものとして(診断結果は正常であるものとして)、続いて、ダブルRAM監視処理を実行し(ステップS24)、本処理を終了する。
図6に、ステップS24のダブルRAM監視処理の詳細フローチャート図を示す。
図6の処理では、まず、上記ステップS11で計算した書込データの書込み先アドレス範囲(先頭アドレスと最終アドレス)に基づいて、RAM診断完了ビット領域62における当該アドレス範囲に対応するビット範囲(先頭位置と最終位置)を求める(ステップS31)。尚、書込データの格納領域が1アドレスであった場合、上記ビット範囲の先頭位置と最終位置は同じものとなる。
上記ビット範囲の先頭位置は、以下の計算式(1)の商と余りから得られる。
(ダブルRAM領域22の先頭アドレスからの相対バイト数)/8 ・・・(1)式
上記(1)式の商が、RAM診断完了ビット領域62の先頭からの相対アドレスになり、余りがこのアドレス内の先頭からの相対ビット位置になる。
尚、RAM診断完了ビット領域62における各ビット情報の位置は、「アドレス(番地)におけるアドレス内相対ビット数α(α;0〜7)」(アドレス(番地)における+α)で表すものとする(後に、図7の例を用いて説明するものとする)。
上記(1)式に示す「ダブルRAM領域22の先頭アドレスからの相対バイト数」は、上記パラメータの書込アドレス(書込データの格納領域の先頭アドレス)から上記ステップS11で取得したダブルRAM領域22の先頭アドレスを差し引くことで求められる。
上記計算式(1)の商がRAM診断完了ビット領域62の先頭からの相対アドレスになり、余りが当該アドレス内の先頭からの相対ビット数(先頭から何番目のビットか;ここでは先頭ビットは先頭から0番目と定義する)になる。つまり、商をm、余りをnとするならば、上記(1)式で求める位置は「m番地における+n」となる(このnは上記αに相当し、よって0〜7の何れかの値となる)。
但し、上記(1)式によって求められる「m番地における+n」は、RAM診断完了ビット領域62の先頭からの相対位置を意味するので、これを絶対位置に変換する必要がある。つまり、例えば、RAM診断完了ビット領域62の先頭アドレス=3000番地であるならば、上記書込データの書き込み先領域に対応するRAM診断完了ビット領域62のビット情報の絶対位置は、“(3000+m)番地における+n”となる。
上記(1)式に関して具体例を用いて説明するならば、例えば図7に示すように、ダブルRAM領域22の先頭アドレスは7000番地、RAM診断完了ビット領域62の先頭アドレスは3000番地であるとする。
図3(b)に示すRAM診断完了ビット領域62のビット情報群は、実際には図7に示すようにバイト単位で格納されており、1バイト分のビット情報群は、ダブルRAM領域22の8バイト分に対応するものである。
この例では、例えば3000番地における最初のビット(“3000番地における+0)は、7000番地に対応するものである。同様にして、3000番地における2番目のビット(3000番地における+1)は、7001番地に対応するものであり、最後のビット(3000番地における+7)は、7007番地に対応するものである。また、例えば、3001番地における最初のビット(3001番地における+0)は、7008番地に対応するものである。尚、各ビット情報は、それが対応するダブルRAM領域22のアドレスに関して診断完了か未完了かを示すものとなる。
この例において、例えば上記パラメータの書込アドレスが7009番地であったならば、上記(1)式に示す「ダブルRAM領域22の先頭アドレスからの相対バイト数」は、7009−7000=0009となる(アドレスは1バイト単位なので、“先頭アドレスからの相対バイト数”は“先頭アドレスからの相対アドレス”と考えてよい)。よって、この例の場合、上記(1)式における商は1、余りは1となる。よって、上記絶対位置は、“3001番地における+1”となる。つまり、3001番地における2番目のビットとなる。
以上の処理により、ステップS31で求めるべきビット範囲(先頭位置と最終位置)のうち、まず先頭位置が求められる。続いて、最終位置を求める。
これについては、上記のように求めた先頭位置における“+n”に上記パラメータにおける読込データバイト数(仮にβとする)をプラスしてから−1デクリメントすればよい。つまり、“n+(β−1)”を最終位置の“+n”とすればよい。上記の例において仮にβ=3であったならば、最終位置は「3001番地+3」となる。
尚、“n+(β−1)”>7であったならば、番地を+1して、「“n+(β−1)”−8」を最終位置の“+n”とすればよい。上記の例において仮にβ=9であったならば、最終位置は「“3001+1”番地+(“1+(9−1)”−8)」=「3002番地+1」となる。
以上により、ステップS31で求めるべきビット範囲(書込データの格納領域に対応するビット情報群の先頭ビット位置と最終ビット位置)が求められる。
続いて、ステップS32以降の処理を実行する。
まず、ダブルRAM領域アドレスデータテーブル50から、RAM診断完了ビット領域62の先頭アドレスと最終アドレス(領域62のアドレス範囲)を取得する(ステップS32)。
そして、ステップS31で求めたビット範囲が、ステップS32で取得したアドレス範囲内に入っているか否かをチェックする(ステップS33)。範囲内に入っていればチェックOKとして(ステップS33,YES)ステップS34以降の処理へ移行する。一方、ステップS31で計算したビット範囲の一部でも、ステップS32で取得したアドレス範囲外であったならば、チェックNGとして(ステップS33,NO)、異常終了(ステップS36)とする。尚、ステップS32,S33の処理も、必ず必要というものではない。
上記チェックOKの場合、RAM診断完了ビット領域62において上記ステップS31で求めたビット範囲内の全ビット情報をON(‘1’)する(ステップS34)。その後、正常終了とする(ステップS35)。
尚、ステップS34の処理は、例えば、上記ステップS31で計算した先頭位置から後
ろ(下位)に上記パラメータの読込バイト数に対応するビット数分オンする等であってもよい。上記の例では、先頭位置=「3001番地+1」であり、例えば上記β=3の例の場合には、「3001番地+1」、「3001番地+2」、「3001番地+3」(=最終位置)の3つのビット情報がONになる。
図8は、ダブルRAM読込関数12(ダブルRAM読込部12’)による処理のフローチャート図であり、図9は、図8におけるステップS54のダブルRAM監視処理の詳細フローチャート図である。
図8の処理に関するパラメータは、下記の通りである。
・データ番号
・読込アドレス
・読込データバイト数
復帰データ
・読込データ
関数値
・正常終了/データ異常/異常終了
尚、ダブルRAM読込関数12は、安全関連アプリケーション15のプログラム内にインライン展開する。これによって、スタック領域など可変のRAM領域の使用を制限し、領域オーバなどのリスクを軽減する。
尚、上記パラメータのデータ番号は読込対象データのデータ番号であり、読込アドレスは読込対象データの格納領域の先頭アドレスであり、読込データバイト数は読込対象データのデータ量である。
図8において、まずステップS41〜S43の処理は、上記ステップS11〜S13の処理と略同様の処理であり(読込か書込かの違いだけ)、単なるチェック処理であるので、ここでは特に説明しない。
ステップS42、S43のチェック処理により異常が無ければ(ステップS42,S43;共にYES)、上記パラメータの読込アドレスから読込データバイト数分、データを読込む(ステップS44)。つまり、読込対象データを読込む。
そして、上記データ読込を行った記憶領域がダブルRAM領域22であるかダブルRAM混在領域23であるかによって処理を分岐させる(ステップS45)。ダブルRAM混在領域23である場合には(ステップS45,NO)、この領域23に関してはRAM診断タスク14による定期的な診断処理を行うため、ここでは診断処理を行うことなく、そのまま正常終了して(ステップS54)本処理を終了させる。一方、ダブルRAM領域22である場合には、ステップS46以降の処理へ移行し、ダブルRAMアルゴリズムによる診断処理を行うと共に、ステップS55のダブルRAM監視処理を行う。
ステップS46以降の処理では、まず、上記の通り説明は省略したがステップS41の処理の際にはステップS11と略同様にして読込対象データの格納領域のアドレス範囲(先頭アドレスと最終アドレス)を求めており、この先頭アドレスと最終アドレスをそれぞれ反転する(ステップS46)。つまり、上記読込対象データの反転データが格納されている領域のアドレス範囲(反転ダブルRAM領域25内のどこか)を求める。続いて、ダブルRAM領域アドレスデータテーブル50を参照して、反転ダブルRAM領域25の先頭アドレス53と最終アドレス54を取得する(ステップS47)。
そして、ステップS46で求めたアドレス範囲が、反転ダブルRAM領域25内にある
か否かを判定する(ステップS48)。もし、領域25内にない場合には(ステップS48,NO)、異常終了とする(ステップS53)。一方、ステップS46で求めたアドレス範囲が、反転ダブルRAM領域25内にある場合には(ステップS48,YES)、ステップS46で求めたアドレス範囲のデータを読み込む(ステップS49)。
上記の通り、このアドレス範囲には、上記読込対象データの反転データが格納されているはずであり、ステップS49で読み込んだデータを反転させて(ステップS50)、これがステップS44で読込んだデータと一致するか否かを判定する(ステップS51)。もし、両者が不一致であれば(ステップS51,NO)、データ異常として(ステップS52)本処理を終了する。つまり、この場合にはRAM診断により異常が検出されたことになる。
一方、両者が一致するならば(ステップS51,YES)、RAM診断により異常は検出されないことになり、続いて、ステップS55のダブルRAM監視処理を実行したうえで、本処理を終了することになる。
以下、図9を参照して、ステップS55のダブルRAM監視処理の詳細フローについて説明する。
図9の処理では、まず、上記読込対象データの格納領域のアドレス範囲(ステップS41で求めた先頭アドレスと最終アドレス)に基づいて、このアドレス範囲に対応するRAM診断完了ビット領域62のビット情報の位置(アドレス(番地)とアドレス内相対ビット位置)を計算する(ステップS61)。これは、上記ステップS31と同様に、上述した計算式(1)を用いて、その商と余りにより、RAM診断完了ビット領域62において上記読込対象データの格納領域の先頭アドレスに対応するビット情報の位置を求めるものである。また、最終アドレスに対応するビット情報の位置も求める。対象が書込データではなく読込データであるという違いがあるが、ステップS31に関して説明したものと略同様であるので、ここでは特に説明しないが、ステップS61の処理によって、RAM診断完了ビット領域62における該当ビット情報群(上記読込対象データの格納領域に対応するビット情報群)の範囲(先頭位置と最終位置)が求められる。
続いてステップS62の処理により、ダブルRAM領域アドレスデータテーブル50を参照して、RAM診断完了ビット領域62の先頭アドレス55と最終アドレス56を取得する。そして、ステップS61で求めた該当ビット情報群の範囲が、RAM診断完了ビット領域62内にあるか否かを判定する(ステップS63)。もし、範囲内に無ければ(ステップS63,NO)、異常終了とする(ステップS66)。もし、範囲内にあれば(ステップS63,YES)、ステップS61で求めた該当ビット情報群の全ビットをONする(ステップS64)。そして、正常終了とする(ステップS65)。
以上、図8、図9の処理において、図9の処理が実行される場合には、読込対象データの格納領域に対するRAM診断が行われて異常が無いことが確認されたうえで、この格納領域に関するRAM診断が完了済みであることをRAM診断完了ビット領域62に記録しておくことになる。そして、以下に説明するダブルRAM監視タスク13の処理では、RAM診断完了ビット領域62を参照することになる。
図10は、ダブルRAM監視タスク13(ダブルRAM監視部13’)による処理のフローチャート図である。
ダブルRAM監視タスク13は、予め開発者等が監視間隔として定義した所定の時間周期で起動する。これは、例えば、上記診断間隔Tに相当する所定時間毎に起動して処理実行するものである。
また、ダブルRAM監視タスク13は、安全関連アプリケーション15より優先レベルの高いタスクレベルで動作する。
尚、本処理例は、複数ブロックに分割された構成例の場合を例にしており、図10の処理は、ダブルRAM領域22を格納する全てのブロックを処理対象として、各ブロック毎に順次実行することになる。図4に示す例では、最初はブロック1が処理対象となり、次にブロック4が処理対象となり、ブロック4に関する処理が完了したら本処理は終了となる。
図10に示す処理では、まず、ダブルRAM領域アドレスデータテーブル50における処理対象ブロック(上記の例では最初はブロック1)のデータから、RAM診断完了ビット領域62の先頭アドレス55と最終アドレス56を取得する(ステップS71)。尚、ここでは、先頭アドレス55は、当該アドレスの先頭ビットからRAM診断完了ビット領域62が始まっているものとして、アドレス情報のみとなっている。一方、最終アドレス56は、RAM診断完了ビット領域62の最後が、最終アドレスの最後のビットとなっているとは限らないので、アドレス情報と当該アドレス内の相対ビット位置の情報からなっているものとする。
但し、この例に限らず、最終アドレス56もアドレス情報のみとなっていてもよい。この場合には、計算により上記相対ビット位置を求める。すなわち、この場合には更に、ダブルRAM領域アドレスデータテーブル50からダブルRAM領域22の先頭アドレス51と最終アドレス52を取得して、「(最終アドレス52−先頭アドレス51)/8」を計算して、その余りが上記相対ビット位置として求められる。
そして、RAM診断完了ビット領域62において、上記先頭アドレス55から順に1アドレスずつ(1バイトずつ)処理対象として、そのアドレスのデータがFF(16進数)であるか否かをチェックする(ステップS72)。つまり、このアドレスの全てのビットが‘1’(ON)(完了/診断実施済み)となっているか否かをチェックする。
もし、1つでもビットONになっていないならばFF(16進数)ではないことになるので(ステップS72,NO)、RAMチェック漏れアラームを出力して(ステップS81)本処理を終了する。尚、図示の例では、この様な異常の場合でも一応、チェック対象のアドレスの全ビットを初期化するが(‘0’を書き込む)(ステップS80)、この例に限らない。
既に述べた通り、ダブルRAM領域22に格納されているデータは、何らかの異常が無い限り、予め監視間隔として定義した時間周期内に診断処理が行われているはずである。すなわち、上記時間周期内に、ダブルRAM書込関数11または/及びダブルRAM読込関数12によるアクセスが実行され、それによって上記の通りダブルRAMアルゴリズムによる診断処理が実行されると共にRAM診断完了ビット領域62における該当ビット(アクセス先アドレスに対応するビット)がONされているはずである。よって、ステップS72の判定がNOとなるということは、何らかの異常が発生したことを意味すると考えられ、上記の通りアラーム出力(アラーム表示、アラーム音の発生等)するものである。
このアラームによって、ユーザは何らかの異常が発生したと認識して、何らかの対応を行うことになる。例えば、保守員等が、保守マニュアルに従って、ハードウェア故障か、設計等によるエラーかを切り分けて、それぞれの対応を行う。何れにしても重要なことは、診断間隔が満たされない状態のまま運用し続けることで、最悪の場合、作業員等に人的被害が発生する可能性があるが、この様な事態が生じることを防止できる。
一方、処理対象のアドレスのデータがFF(16進数)であるならば(ステップS72
,YES)、異常は生じていないことになるので、このアドレスの全ビットを初期化する(‘0’を書き込む)(ステップS73)。そして、次のアドレスを処理対象として、次のアドレスのデータを取得して(ステップS75)、再び当該データがFFであるか否かの判定を行うが(ステップS72)、その前に次のアドレスが最終アドレスであるか否かをチェックする(ステップS74)。次のアドレスが最終アドレスでなければ(ステップS74,NO)上記ステップS75の処理へ移行するが、次のアドレスが最終アドレスである場合には(ステップS74,YES)ループを抜けてステップS76の処理へ移行する。
ステップS76では、この最終アドレスにおける先頭ビットから上記ステップS71で得た上記相対ビット位置までの全てのビットが‘1’(ON)であるか否かをチェックする(ステップS76)。これは、上記の通り、最終アドレスに関しては8ビットであるとは限らないので、上記‘FF’の判定を行えるとは限らない為であり、本質的には上記‘FF’の判定と同じものである。
よって、1つでも‘1’(ON)となっていないビットがあった場合には(ステップS76,NO)、上記ステップS72の判定がNOとなった場合と同様に、上記ステップS80、S81の処理を実行することになる。
一方、全てのビットが‘1’(ON)であったならば(ステップS76,YES)、これら全てのビットを初期化する(‘0’を書き込む)(ステップS77)。これにより、この処理対象ブロックに関するチェックは正常終了したことになり、続いて、ダブルRAM領域22を格納する全てのブロックについて本処理を実行したか否かを判定し(ステップS78)、未だ未処理のブロックがあるならば(ステップS78,NO)、この未処理のブロックを次の処理対象ブロックとして(ステップS79)、ステップS71に戻り、上記と同様の処理を行う。全てのブロックについて本処理を実行したら(ステップS78,YES)、本処理は終了となる。
図11は、RAM診断タスク14(RAM診断部14’)による処理のフローチャート図である。また、図12、図14は、図11におけるステップS93の処理の詳細フローチャート図(その1)、(その2)である。
本処理は、例えば、RAMの診断間隔Tとして定義した時間周期で起動する。但し、複数ブロックに分割された構成例の場合には、既に述べた通り、RAM診断タスク14による診断処理周期をtとすると、例えば「“t×N”≦診断間隔T」となるようにtを設定することになる。すなわち、RAMの診断間隔T内にRAM診断部14’による処理が複数回実行され、結果的にRAMの診断間隔T内に全てのダブルRAM混在領域23に関する診断処理が実行完了するように診断処理周期tを設定する。
また、RAM診断タスク14は、安全関連アプリケーション15より優先レベルの高いタスクレベルで動作する。これは、換言すれば、RAM診断タスク14の処理を実行中は、安全関連アプリケーション15による処理(本来の処理)が実行されないことになり、RAM診断タスク14の処理時間が長いと、本来の処理が実行されない期間が長くなり、運用に支障が出る可能性があることを意味する。しかし、本手法では、RAM診断タスク14による定期的な診断処理の対象は、ダブルRAM混在領域23のみであり、ダブルRAM領域22は対象外であることから、RAM診断タスク14の処理時間を短くできる。更に、複数ブロックに分割された構成例の場合には、例えばRAM診断タスク14による1回の処理で1ブロックのみを処理対象とする事等が実現できるので、1回の処理に掛かる時間は非常に短くて済み、安全関連アプリケーション15による処理を妨げる期間が非常に短くて済む。
図11に示す処理例は、複数ブロックに分割された構成例に対応するものである。
よって、まず、上記RAM診断カウンタ61のカウント値を読み込み、続いてこのRAM診断カウンタ61のカウント値を更新する(+1インクリメントする)(ステップS91)。尚、既に述べた通り、RAM診断カウンタ61のカウント値は、1→2→3→・・N→1→2・・の順で更新される。また、尚、カウント値の更新は、カウント値を読み込んだ後であれば本処理内のどこで行っても良く、例えばステップS95の処理後に行っても良い。
次に、図2(b)のRAM診断制御テーブル40を参照して、ステップS91で読み込んだカウント値に対応するブロック番号42を取得する。ブロック番号42に複数のブロック番号が格納されている場合にはそのうちの1つを取得する(まだ本診断処理を行っていないブロックのブロック番号を1つ取得する)。つまり、処理対象とするブロックのブロック番号を取得する。そして、ダブルRAM領域アドレスデータテーブル50を参照して、上記取得したブロック番号におけるダブルRAM混在領域先頭アドレス57とダブルRAM混在領域最終アドレス58を取得する(ここまで、ステップS92)。
尚、既に述べた通り、ブロック番号42にはダブルRAM混在領域23を格納するブロックのブロック番号のみが格納されている。よって、処理対象ブロックは必ずダブルRAM混在領域23を格納するブロックとなる。
そして、上記処理対象ブロックに関するRAM自己診断処理を実行する(ステップS93)。この診断の結果が“異常”であったならば(ステップS94,NO)、本処理は終了とする。一方、診断結果が“正常”ならば(ステップS94,YES)、ブロック番号42に格納されていた全てのブロックについて本診断処理を実行したならば(ステップS95,YES)本処理は終了し、未だ本診断処理を実行していないブロックがあるならば(ステップS95,NO)、未処理のブロックのうちの1つを次の処理対象ブロックとして(ステップS96)、上記ステップS92〜S94の処理を実行する。
ここで、ステップS93のRAM自己診断処理の詳細フローチャートを、図12、図14に示す。図12は、RAM自己診断処理をダブルRAMアルゴリズム以外のアルゴリズムで行う場合を示しており、ここでは一例としてギャルパット(Galpat)アルゴリズムを例にするが、この例に限らない。また、図14は、RAM診断処理をダブルRAMアルゴリズムを利用した処理で行う場合を示している。この様に、ダブルRAM混在領域23に対するRAM診断処理は、ダブルRAMアルゴリズムを用いて行っても良いし、それ以外のアルゴリズムを用いて行っても良い。
但し、図14の処理は、任意のデータアクセスに伴って診断処理を行うものではなく、定期的に実行される処理となるので、その意味では厳密にはダブルRAMアルゴリズムの診断処理とは言えないかもしれない点を考慮して、上記のように「ダブルRAMアルゴリズムを利用した処理(診断処理)」というものとする。
尚、ステップS93の処理は、RAM診断タスク14の内部関数により実行される。
まず、図12に示すRAM診断処理の詳細フローチャート(その1)について説明する。尚、本処理は上記の通り既存のアルゴリズム(ギャルパット)による処理であり、特に詳細には説明しないものとする。
図12の処理では、まず、診断対象領域の全データ、すなわち上記ステップS92で取得した先頭アドレス57から最終アドレス58までの領域のデータを、バッファ領域24に退避させる。尚、その際、退避データのCRC(Cyclic Redundancy Check:巡回冗長度
検査)を付加するなど、バッファ領域24の診断に必要な処理を行うようにしてもよいが、ここでは特に関係ないので説明しない。
そして、例えば上記先頭アドレス57から最終アドレス58まで順番に例えば1アドレスずつ処理対象として、この処理対象アドレスについて以下のステップS102〜S109の処理を実行する。そして、最終アドレス58まで処理実行したら(ステップS110,YES)、ステップS111以降の処理を実行する。但し、途中で異常が検出された場合には、ステップS115のRAM異常アラーム出力を行って異常終了することになる。
上記処理対象アドレスについて、まず、RAM20における当該処理対象アドレスにテストデータパターンを書込む(ステップS102)。テストデータパターンは、当該アドレスのメモリセルをテストするための任意のデータであり、ここでは複数のテストデータパターンを用いるものとし、この複数のテストデータパターンのうちの1つを書き込む。
そして、この処理対象アドレスのデータを読込み(ステップS103)、この読込データが上記ステップS102で書き込んだデータ(テストデータパターン)と一致するか否かをチェックする(ステップS104)。もし、不一致であったならば(ステップS104,NO)、ステップS115のRAM異常アラーム出力を行い、異常終了とする。また、バッファ領域24に退避してあったデータをRAMへ復元させる(ステップS112)。尚、この場合、上記ステップS94の判定はNOとなることになる。
一方、データ一致の場合には(ステップS104,YES)、更に、例えば図13に示すように、処理対象アドレス以外のアドレスのデータを参照して、これらのデータがバッファ領域24に退避してあったデータと同じか否かをチェックする(ステップS105)。これは、処理対象アドレスにテストデータを書き込むことにより他のアドレスのデータが誤動作等により変化していないか(クロストークしていないか)を確認する為である。
尚、ステップS105の処理におけるチェック対象は、先頭アドレス57から最終アドレス58までの領域のデータのうち処理対象アドレス以外の全データとしてもよいし、処理対象アドレスの前後の一定のアドレス範囲(例えば±10番地程度)としてもよい。
他のアドレスデータに変化があった場合には(ステップS106,NO)、上記ステップS104の判定がNOとなった場合と同様に、上記ステップS115の処理(RAM異常アラーム出力等)を実行し、上記ステップS112の処理を実行して、本処理を終了する。
一方、他のアドレスデータに変化がない場合には(ステップS106,YES)、上記複数のテストデータパターン全てについて処理実行したか否かを判定し(ステップS107)、未処理のテストデータパターンがある場合には(ステップS107,NO)そのなかから次のテストデータパターンを決定・設定して(ステップS113)、このテストデータを用いて上記ステップS102〜S106の処理を実行する。
上記複数のテストデータパターン全てについて上記ステップS102〜S106の処理を実行したならば(ステップS107,YES)、処理対象アドレスのデータを復元する(ステップS108)。つまり、このときRAM20における処理対象アドレスにはテストデータが格納されているので、バッファ領域24に退避してあった元のデータを、処理対象アドレスに書き込む。更に続いて、この処理対象アドレスからデータを読込み、これがステップS108で書込んだデータと一致するか確認する(ステップS109)。読込んだデータも書込データも上記“バッファ領域24に退避してあった元のデータ”であるので、一致するはずであるが、何らかの異常により不一致となる場合も有り得る。もし、
不一致であったならば(ステップS109,NO)、上記ステップS104の判定がNOとなった場合と同様に、上記ステップS115の処理(RAM異常アラーム出力等)を実行し、上記ステップS112の処理を実行して、本処理を終了する。
一方、一致する場合には(ステップS109,YES)、この処理対象アドレスに関する診断結果は“正常”であることになり、この処理対象アドレスが最終アドレス58である場合以外は(ステップS110,NO)、次のアドレスを処理対象アドレスとして(処理対象アドレス=処理対象アドレス+1)(ステップS114)、当該次の処理対象アドレスについて上記ステップS102〜S109の処理を実行する。
そして、ダブルRAM混在領域23(上記先頭アドレス57から最終アドレス58まで)の全てのアドレスについて、途中で異常終了(ステップS115)となることなく上述したステップS102〜S109の診断処理を実行したらならば(ステップS110,YES)、このダブルRAM混在領域23には異常は無いことになり、正常終了とする(ステップS111)(これによって上記ステップS94の判定がYESとなる)。
そして最後に、バッファ領域24に退避してあった全てのデータ(ダブルRAM混在領域23の全データ)を、RAM20に復元させる(ステップS112)。尚、その際、復元データのCRC(Cyclic Redundancy Check:巡回冗長度検査)などを行い、異常があればRAM20のバッファ領域24に異常があるとみなしRAM異常アラーム出力をし、異常終了するようにしてもよい。CRCは既存技術であり、また本手法には直接関係しないので、特に説明しない。
次に、図14に示すRAM診断処理の詳細フローチャート(その2)について説明する。これは、上記の通り、ステップS93のRAM自己診断処理にダブルRAMアルゴリズムを利用した場合の、ステップS93の詳細フロー例を示すものである。
尚、この処理例の場合には、図1には示していないが、RAM20には更に不図示の反転ダブルRAM混在領域が存在するものとする。上記反転ダブルRAM領域25がダブルRAM領域22の格納データの反転データを格納する領域であるのと同様、反転ダブルRAM混在領域はダブルRAM混在領域23の格納データの反転データを格納する領域である。また、上記反転ダブルRAM領域25と同様、反転ダブルRAM混在領域の各アドレスは、ダブルRAM混在領域23の各アドレスを反転させたものである。例えば、ダブルRAM混在領域23内に4000番地があったならば、その反転アドレスである反転ダブルRAM混在領域内のBFFF番地に、4000番地のデータの反転データが格納されていることになる。
また、これより、図2(c)には示していないが、ダブルRAM領域アドレスデータテーブル50において、ダブルRAM混在領域23を格納するブロックのブロック番号50−1に対応するアドレス50−2には、上記ダブルRAM混在領域の先頭アドレス57と最終アドレス58だけでなく、上記不図示の反転ダブルRAM混在領域の先頭アドレスと最終アドレスも格納されている。そして、後述するステップS122の処理では、これら4つのアドレスを取得することになる。
図14の処理では、まず、予め用意されているテストデータパターンを読み込む(ステップS121)。尚、テストデータパターンは、予め固定値で複数用意しておき、診断カウンタの値によって適用するテストデータパターンを選択するようにしてもよい(当該RAM自己診断アルゴリズムが呼ばれる毎に変更し、RAMの異常を検出可能とする)。
また、ダブルRAM領域アドレスデータテーブル50を参照して、上述したダブルRA
M混在領域の先頭アドレス57と最終アドレス58、及び不図示の反転ダブルRAM混在領域の先頭アドレスと最終アドレスを取得する(ステップS122)。
そして、例えば、ダブルRAM混在領域の先頭アドレス57から最終アドレス58まで順番に各アドレスを処理対象アドレスとして、この処理対象アドレスについて以下のステップS123〜S130の処理を実行する。
まず、処理対象アドレス(本例では最初は先頭アドレス57)とその反転アドレスのデータをレジスタに退避する(ステップS123)。上述したように、例えば、処理対象アドレスが4000番地であったならば、その反転アドレスはBFFF番地である。
次に、上記テストデータパターンを処理対象アドレスに書き込む(ステップS124)。更に、このテストデータパターンを反転して(ステップS125)、この反転テストデータパターンを上記反転アドレスに書き込む(ステップS126)。
そして、処理対象アドレスのデータを読込む(ステップS127)。また、反転アドレスのデータを読込み、これを反転させる(異常が無ければ、上記反転テストデータパターンを反転させることになり、上記テストデータパターンが得られるはずである)(ステップS128)。
そして、ステップS127で読込んだデータとステップS128で得られたデータ(反転アドレスのデータを反転させたもの)とが、一致するか否かを判定する(ステップS129)。もし不一致であれば(ステップS129,NO)、上記レジスタへの退避データを復旧させて(処理対象アドレスとその反転アドレスに元データを戻す)、RAM異常アラームを出力し、異常終了し、呼び出し元タスクに復帰する(ステップS134)。尚、この場合、上記ステップS94の判定はNOとなる。
一方、一致した場合には(ステップS129,YES)、上記レジスタへの退避データを復旧させて(ステップS130)、当該処理対象アドレスに関する診断結果は“正常”であるものとし、ダブルRAM混在領域23の全てのアドレスについて処理実行したならば、すなわち当該処理対象アドレスが最終アドレス58であるならば(ステップS131,YES)、正常終了し(ステップS132)、呼び出し元タスクに復帰する。尚、この場合、上記ステップS94の判定はYESとなる。
一方、未だダブルRAM混在領域23の全てのアドレスについて処理実行していないならば(ステップS131,NO)、当該処理対象アドレスの次のアドレスを処理対象アドレスとして(例えば、処理対象アドレス=処理対象アドレス+1)(ステップS133)、ステップS123に戻る。この様にして、ダブルRAM混在領域23の全てのアドレスについて処理実行するまで、ステップS123〜S131の処理を繰り返し実行する。
最後に、図15を参照して、安全関連アプリケーション15の処理について説明する。
図15は、安全関連アプリケーション部15’の処理フローチャート図である。
図示の各処理において、ステップS142の処理は、上記ダブルRAM書込関数11によって上述した図5、図6の処理を実行させるものである。同様に、ステップS146の処理は、上記ダブルRAM読込関数12によって上述した図8、図9の処理を実行させるものである。尚、これらの関数11、12は、安全関連アプリケーション15のプログラム内にインライン展開することにより、RAMのスタック領域を使用しないようにする。
尚、ダブルRAM書込関数11のパラメータは下記の通りであり、下記の(定数)は設計時に決まり、プログラムコード内に記載されるデータとなる。
・データ番号(定数)
・書込アドレス(定数)
・書込データ
・書込データバイト数(定数)
関数値
・正常終了/異常終了/データ異常
また、尚、ダブルRAM読込関数12のパラメータは下記の通りであり、下記の(定数)は設計時に決まり、プログラムコード内に記載されるデータとなる。
・データ番号(定数)
・読込アドレス(定数)
・読込データバイト数(定数)
復帰データ
・読込データ
関数値
・正常終了/異常終了/データ異常
尚、これら各関数の処理に関しては、既に説明してあり、ここでは説明しない。
以下、図15のフローチャートについて簡単に説明する。
図15において、安全関連アプリケーション部15’は所定のアプリケーション処理を実行し(ステップS141)、このアプリケーション処理に係り安全関連データをRAM20から読込むイベントが発生した場合には上記ダブルRAM読込関数12を呼び出す(ステップS142)。これによって、上述した図8、図9の処理が実行されることになる。そして、上記正常終了/異常終了/データ異常の何れかの関数値が返されてくるので、正常終了以外の場合は(ステップS143,NO)終了情報を設定し(ステップS149)、所定の処理(処理異常アプリケーション処理)を実行し(この終了情報や所定の処理については特に説明しない)(ステップS150)、本処理は終了する。
正常終了の場合(ステップS143,YES)上記アプリケーション処理を続行し(ステップS144)、処理中に安全関連データをRAM20に書き込むイベントが発生した場合には上記パラメータ(書込データ等)を設定して(ステップS145)、上記ダブルRAM書込関数11を呼び出す(ステップS146)。これにより上述した図5、図6の処理が実行されることになる。尚、図示していないが、パラメータの設定は上記ステップS142の処理の際にも行っている。
そして、上記正常終了/異常終了/データ異常の何れかの関数値が返されてくるので、正常終了以外の場合は(ステップS147,NO)上記ステップS149、S150の処理を実行し、正常終了であったならば(ステップS147,YES)上記アプリケーション処理を続行する(ステップS148)。図示していないが、その後も、アプリケーション処理実行中に、RAM20に対する安全関連データの読込/書込イベントが発生する毎に、上述した関数呼び出しの処理が行われ、アプリケーション処理が最後まで実行されたら本処理は終了する。
以上説明したように、本例のRAM診断装置では、予め設計者等によりRAM診断間隔Tを満たすと判断されたデータはダブルRAM領域に格納すると共に、運用中は本当にRAM診断間隔Tを満たしているかを監視し、満たしていない場合はアラームを出力する。尚、RAM診断間隔Tは、予め設計・検証により要求される(上記のように故障発生確率が十分に低減されるように設計者等が考えた/定義した)所定の診断間隔であり、これを満たす場合には故障発生確率が十分に低減される。
上記の本例のRAM診断装置によれば、自己診断率の高いダブルRAMアルゴリズムで
診断を行うと共にRAM診断間隔Tを保証することができる(RAM診断間隔の時限保証を実現できる)。診断間隔が保証されないことでRAMの故障検出が遅れて重大な故障が発生するといった事態は生じることを防止することができる。更に、ダブルRAMアルゴリズムによるRAM自己診断が要求された診断間隔Tを満たすことを監視することができる。また、ダブルRAM対象領域が適切であることを検証することができる。また、この検証は、設計・検証時および運用時に適用できる。つまり、本手法のRAM診断処理は、基本的には運用時に適用するものであるが、設計・検証時に適用することで、例えば設計ミス等を検出できる。
また、上記監視の対象はまとめてダブルRAM領域に格納されており、上記の通りビット情報を用いてまとめて効率よくチェックできるので、監視処理に係るCPUの負荷を軽減することができる。
また、上記ダブルRAM領域に格納するデータ以外のデータ、換言すれば予め設計・検証により要求されるRAM診断間隔を満たさないと判断されたデータは、ダブルRAM混在領域に格納する。そして、例えばRAM診断間隔Tに相当する所定時間毎に、ダブルRAM混在領域に対するRAM診断を行う。まとめて効率よく診断できると共に、ダブルRAM領域は診断対象から除外されるので、少なくとも従来のような全領域診断処理を行う手法に比べて、処理時間を短縮できCPUの負荷を軽減することができる。
また、これによりCPU資源を有効に使用することができ、CPUの数や能力、RAMの数を削減することでコストを削減することができる。
また、ダブルRAM領域、ダブルRAM混在領域それぞれの領域に適したRAM自己診断方式を採用でき、自己診断処理のパフォーマンスを向上することができる。
また、上記ダブルRAM領域やダブルRAM混在領域は、それぞれ連続した領域とする必要なく、複数ブロック化してもよい。そして、例えば図4に示すように、ダブルRAM領域の複数ブロックとダブルRAM混在領域の複数ブロックとが混在するようにしてもよい。これは、例えば、図4において最初はブロック1とブロック2のみが格納されていたとして、その後、例えばダブルRAM領域に格納すべき新たなデータが生じた場合、複数ブロック化しない場合には、ブロック1の領域を拡げ、これに伴ってブロック2の領域も移動させる必要があるが、複数ブロック化により、新たなダブルRAM領域のブロックを追加すれば済むことになる。
また、複数ブロック化により、上記診断カウンタを用いた処理のように、ダブルRAM混在領域に対する診断処理を、一度に行うことなく、時分割して行うことができ、1回の診断処理の時間を短くすることができ、診断処理によって長時間、本来の処理が実行できなくなるという事態を防止することができる。RAM自己診断により故障発生時のリアクションタイムが長くなることを防止でき、安全性能を向上することができる。
また、上記関数11、12等のように処理を関数化し作成コード量を減少させることで、システム故障の削減を図ることができる。
また、関数のパラメータは設計時に決定する固定値と動作時に決定するものを明確化し、あらかじめプログラムコード内に展開することで可変データを減少させ、CPU演算故障やRAM故障によるリスクの軽減と処理の負荷軽減を図ることができる。
1 CPU
10 ROM
11 ダブルRAM書込関数
12 ダブルRAM読込関数
13 ダブルRAM監視タスク
14 RAM診断タスク
15 安全関連アプリケーション
11’ ダブルRAM書込部
12’ ダブルRAM読込部
13’ ダブルRAM監視部
14’ RAM診断部
15’ 安全関連アプリケーション部
16 ダブルRAM管理情報
20 RAM
21 ダブルRAM管理領域
22 ダブルRAM領域
23 ダブルRAM混在領域
24 バッファ領域
25 反転ダブルRAM領域
30 データ番号管理テーブル
31 データ番号
32 データバイト数
40 RAM診断制御テーブル
41 診断カウント
42 診断ダブルRAM混在領域ブロック番号
50 ダブルRAM領域アドレスデータテーブル
50−1 ブロック番号
50−2 アドレス50−2
51 ダブルRAM領域先頭アドレス
52 ダブルRAM領域最終アドレス
53 反転ダブルRAM領域先頭アドレス
54 反転ダブルRAM領域最終アドレス
55 診断完了ビット領域先頭アドレス
56 診断完了ビット領域最終アドレス
57 ダブルRAM混在領域先頭アドレス
58 ダブルRAM混在領域最終アドレス
61 RAM診断カウンタ
62 RAM診断完了ビット領域

Claims (6)

  1. 各種安全関連データがそれぞれ所定の1又は複数のアドレスに格納されるRAMと、該RAMに対する診断処理を行う診断処理部とからなるRAM診断装置であって、
    前記RAMにおいて、予め所定のRAM診断間隔が保証されると判断された安全関連データを格納する領域である第1領域と、予めRAM診断間隔が保証されないと判断された安全関連データを格納する領域である第2領域とを設け、更に前記第1領域内の前記各アドレス毎に対応して、そのアドレスについて前記診断処理を実施済か未実施かを示す管理情報が記憶され、
    前記診断処理部は、
    前記第1領域に対しては、ダブルRAMアルゴリズムによって該第1領域内の任意のデータにアクセスした際に該データの格納アドレスに対する診断処理を行うと共に、該RAM診断処理を行ったアドレスに対応する前記管理情報を実施済とする診断処理手段と、
    前記RAM診断間隔に相当する所定時間毎に、前記管理情報を参照して未実施となっている管理情報があるか否かをチェックして、未実施となっている管理情報がある場合にはアラーム出力する監視手段と、
    を有することを特徴とするRAM診断装置。
  2. 前記診断処理手段は、前記第2領域に対しては、前記RAM診断間隔に相当する所定時間毎に又は該RAM診断間隔より短い所定時間毎に、任意の診断アルゴリズムによる診断処理を実行することを特徴とする請求項1記載のRAM診断装置。
  3. 前記第1領域または/及び前記第2領域は、複数のブロックに分割されていることを特徴とする請求項2記載のRAM診断装置。
  4. 前記診断処理手段は、前記RAM診断間隔より短い所定時間毎に前記第2領域の1又は複数のブロックに対して前記任意の診断アルゴリズムによる診断処理を実行し、前記RAM診断間隔内に前記第2領域の全てのブロックについて診断処理を実行することを特徴とする請求項3記載のRAM診断装置。
  5. 各種安全関連データがそれぞれ所定の1又は複数のアドレスに格納されるRAMと、該RAMに対する診断処理を行う診断処理装置とからなるRAM診断装置における前記診断処理装置であって、
    予めRAM診断間隔が保証されると判断された安全関連データを格納する領域である第1領域と、予めRAM診断間隔が保証されないと判断された安全関連データを格納する領域である第2領域とが設けられると共に、前記第1領域内の前記各アドレス毎に対応して、そのアドレスについて前記診断処理を実施済か未実施かを示す管理情報が記憶される前記RAMに対する診断処理を行う手段であって、前記第1領域に対しては、ダブルRAMアルゴリズムによって該第1領域内の任意のデータにアクセスした際に該データの格納アドレスに対する診断処理を行うと共に、該RAM診断処理を行ったアドレスに対応する前記管理情報を実施済とする診断処理手段と、
    前記RAM診断間隔に相当する所定時間毎に、前記管理情報を参照して未実施となっている管理情報があるか否かをチェックして、未実施となっている管理情報がある場合にはアラーム出力する監視手段と、
    を有することを特徴とするRAM診断装置の診断処理装置。
  6. 各種安全関連データがそれぞれ所定の1又は複数のアドレスに格納されるRAMと、該RAMに対する診断処理を行う診断処理装置とからなるRAM診断装置における前記診断処理装置のコンピュータを、
    予めRAM診断間隔が保証されると判断された安全関連データを格納する領域である第
    1領域と、予めRAM診断間隔が保証されないと判断された安全関連データを格納する領域である第2領域とが設けられると共に、前記第1領域内の前記各アドレス毎に対応して、そのアドレスについて前記診断処理を実施済か未実施かを示す管理情報が記憶される前記RAMに対する診断処理を行う手段であって、前記第1領域に対しては、ダブルRAMアルゴリズムによって該第1領域内の任意のデータにアクセスした際に該データの格納アドレスに対する診断処理を行うと共に、該RAM診断処理を行ったアドレスに対応する前記管理情報を実施済とする診断処理手段と、
    前記RAM診断間隔に相当する所定時間毎に、前記管理情報を参照して未実施となっている管理情報があるか否かをチェックして、未実施となっている管理情報がある場合にはアラーム出力する監視手段、
    として機能させる為のプログラム。
JP2009285223A 2009-12-16 2009-12-16 Ram診断装置、そのプログラム Pending JP2011128780A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2009285223A JP2011128780A (ja) 2009-12-16 2009-12-16 Ram診断装置、そのプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2009285223A JP2011128780A (ja) 2009-12-16 2009-12-16 Ram診断装置、そのプログラム

Publications (1)

Publication Number Publication Date
JP2011128780A true JP2011128780A (ja) 2011-06-30

Family

ID=44291336

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009285223A Pending JP2011128780A (ja) 2009-12-16 2009-12-16 Ram診断装置、そのプログラム

Country Status (1)

Country Link
JP (1) JP2011128780A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2016035637A (ja) * 2014-08-01 2016-03-17 大日本印刷株式会社 信号処理装置、icカード、信号処理方法、及び信号処理プログラム

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04542A (ja) * 1990-04-17 1992-01-06 Pfu Ltd メモリチェック方式
JPH09160837A (ja) * 1995-12-07 1997-06-20 Ricoh Co Ltd メモリチェックシステム
JP2007148684A (ja) * 2005-11-25 2007-06-14 Nec Saitama Ltd メモリチェック装置、携帯端末、携帯電話機およびそのメモリチェック方法
JP2007226640A (ja) * 2006-02-24 2007-09-06 Nec Corp メモリ診断処理回路およびメモリ診断処理方法
JP2008269115A (ja) * 2007-04-18 2008-11-06 Yokogawa Electric Corp メモリチェック装置及びメモリチェック方法
JP2009087133A (ja) * 2007-10-01 2009-04-23 Fuji Xerox Co Ltd 画像処理装置およびメモリ診断プログラム
JP2010188748A (ja) * 2009-02-16 2010-09-02 Hitachi Automotive Systems Ltd 車両搭載機器の制御装置のメモリ診断装置
JP2011020544A (ja) * 2009-07-15 2011-02-03 Hitachi Automotive Systems Ltd 車両搭載機器の制御装置のメモリ診断装置

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04542A (ja) * 1990-04-17 1992-01-06 Pfu Ltd メモリチェック方式
JPH09160837A (ja) * 1995-12-07 1997-06-20 Ricoh Co Ltd メモリチェックシステム
JP2007148684A (ja) * 2005-11-25 2007-06-14 Nec Saitama Ltd メモリチェック装置、携帯端末、携帯電話機およびそのメモリチェック方法
JP2007226640A (ja) * 2006-02-24 2007-09-06 Nec Corp メモリ診断処理回路およびメモリ診断処理方法
JP2008269115A (ja) * 2007-04-18 2008-11-06 Yokogawa Electric Corp メモリチェック装置及びメモリチェック方法
JP2009087133A (ja) * 2007-10-01 2009-04-23 Fuji Xerox Co Ltd 画像処理装置およびメモリ診断プログラム
JP2010188748A (ja) * 2009-02-16 2010-09-02 Hitachi Automotive Systems Ltd 車両搭載機器の制御装置のメモリ診断装置
JP2011020544A (ja) * 2009-07-15 2011-02-03 Hitachi Automotive Systems Ltd 車両搭載機器の制御装置のメモリ診断装置

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2016035637A (ja) * 2014-08-01 2016-03-17 大日本印刷株式会社 信号処理装置、icカード、信号処理方法、及び信号処理プログラム

Similar Documents

Publication Publication Date Title
US8140940B2 (en) Method and apparatus for controlling memory
US20080046802A1 (en) Memory controller and method of controlling memory
US10789184B2 (en) Vehicle control device
JP5464128B2 (ja) Ram故障診断装置、そのプログラム
US8255769B2 (en) Control apparatus and control method
JP4941954B2 (ja) データエラー検出装置およびデータエラー検出方法
JP2013175118A (ja) 制御装置、及びそのメモリ故障検出方法、その自己診断方法
JP5849491B2 (ja) ディスク制御装置、ディスク装置異常検出方法、及びプログラム
JP2005141505A (ja) メモリ装置、メモリ制御方法および表示装置
JP2011128780A (ja) Ram診断装置、そのプログラム
JP6654230B2 (ja) 車両制御装置
JPH06324914A (ja) コンピュータの暴走検出方法
JP2010097432A (ja) Ram診断装置、そのプログラム
JP5453984B2 (ja) Ram診断装置、そのプログラム
US20060195849A1 (en) Method for synchronizing events, particularly for processors of fault-tolerant systems
JP6884298B1 (ja) メモリ診断装置、メモリ診断方法、及びプログラム
JP6914430B2 (ja) メモリ診断装置及びメモリ診断方法
US20210357285A1 (en) Program Generation Apparatus and Parallel Arithmetic Device
JPH11249972A (ja) フラッシュメモリの異常検出回路
JP3951681B2 (ja) メモリ検査方法およびメモリ検査プログラム
JP2008242592A (ja) メモリ監視回路、情報処理装置、及びメモリ監視方法
KR100216045B1 (ko) 프로그램형 제어기의 비트 연산 처리방법 및 그 장치
JPS6362776B2 (ja)
JP6358122B2 (ja) マイクロコンピュータ
JP2006058982A (ja) 二重化プロセッサ装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20121214

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20131009

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20131029

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20140304