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

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

Info

Publication number
JP5453984B2
JP5453984B2 JP2009175917A JP2009175917A JP5453984B2 JP 5453984 B2 JP5453984 B2 JP 5453984B2 JP 2009175917 A JP2009175917 A JP 2009175917A JP 2009175917 A JP2009175917 A JP 2009175917A JP 5453984 B2 JP5453984 B2 JP 5453984B2
Authority
JP
Japan
Prior art keywords
safety
ram
related data
address
area
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.)
Active
Application number
JP2009175917A
Other languages
English (en)
Other versions
JP2011028657A (ja
Inventor
廣治 西田
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 JP2009175917A priority Critical patent/JP5453984B2/ja
Publication of JP2011028657A publication Critical patent/JP2011028657A/ja
Application granted granted Critical
Publication of JP5453984B2 publication Critical patent/JP5453984B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

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

Description

本発明は、RAMの故障診断方式に関する。
特許文献1には、メモリセルの検査手法についての開示があり、検査結果を3重に格納し、多数決により誤りの訂正をすることが開示されている。
特許文献2には、一組のデータを複数のアドレスにビット位置を変えて記憶し、制御開始時にそれらから読み出し、比較することが記載されている。
非特許文献1にはRAM診断の各種のアルゴリズムと当該アルゴリズムの診断効果が記載されている。また、非特許文献1には、ダブルRAMアルゴリズムの概要等が開示されている。
非特許文献2には、上記ダブルRAMアルゴリズム(Double RAM with hardware or software comparison and read/write test)についての概要が記載されている。非特許文献2によれば、ダブルRAMアルゴリズムによるRAM診断処理では、RAMに書き込むべきデータ(書込データ)を指定アドレスに書き込む際、この書込データの反転データを反転アドレス(上記指定アドレスを反転したアドレス)に書き込む。そして、RAMからのデータ読み出し時に、指定アドレスからデータを読み出すと共に、その反転アドレスから反転データを読出し、この反転データを反転させたものが上記指定アドレスのデータと一致するか否かを確認することで、RAM故障を検出する(不一致の場合にはRAM故障と判定する)ものである。
特表2002−536777号公報 特開平11−120086号公報
IEC61508 電気・電子・プログラマブル電子安全関連系の機能安全 Computers can now perform vital functions safely. Otto Berg von Linde, Railway Gazette International, Vol. 135, No. 11, 1979.
特にプログラマブルコントローラ等の制御分野におけるコントローラ本体(CPU、RAM等を有する)においては、このRAMには制御用データ等が格納されるので、RAMに異常が発生した場合、異常な制御が行われる可能性がある。もし、モータやプレス機等が異常動作した場合、その近くにいる作業員等に人的被害が発生する可能性がある。この為、コントローラ本体は、故障発生確率を減少させる為、自己診断(RAM診断)をある程度頻繁に行うことが望ましい。
ここで、非特許文献1には、ダブルRAMアルゴリズムは、自己診断率が高く自己診断の効果が高いことや、診断間隔と故障発生確率の関係が記載されている。
本手法では、この様な自己診断率が高く自己診断の効果が高い診断手法であるダブルRAMアルゴリズムを用いることを前提とする。
ダブルRAMアルゴリズムを用いるRAM診断に係り、故障発生確率を低減させることに関して、以下に説明する問題が生じる。
まず、一般的に、自己診断率はλDD/λDと定義されている。
(ここで λD:危険側故障確率、λDD:自己診断で検出可能な故障確率)
また、診断間隔と故障発生確率の関係として、診断間隔が短いと故障発生確率が減少することが知られている。具体的には、危険側共通原因故障ファクタβDのスコアSD=X(Z+1)+Y のZが増加しβDが減少する。βDが減少するとPFD及びPFHが減少する(尚、X;診断に関係する危険側共通原因故障ファクタのスコア値、Y;診断に関係しない危険側共通原因故障ファクタのスコア値、PFD;デマンド時の故障平均確率、PFH;1時間あたりの危険側故障確率、Z;診断試験の間隔と自己診断率に基づいて決まる値である)。
従って、ダブルRAMアルゴリズム以外のRAM診断アルゴリズムにおいては、例えば、任意の適切な診断間隔(故障発生確率が十分に低減されるように設計者等が考えて設定する)で定期的にRAMの記憶領域全体の診断処理を行うことで、RAM診断間隔の時間保証を実現でき、故障発生確率が減少させることが考えられる。
しかしながら、ダブルRAMアルゴリズムによるRAM診断処理では、定期的にRAMの記憶領域全体の診断処理を行うものではなく、上記の通りRAMからのデータ読み出し処理の際に診断を行うので、RAMの記憶領域全体に対する診断間隔というものはなく、各データ格納領域毎の診断間隔があることになる。そして、各データ格納領域毎の診断間隔は、その領域の格納データを読出す処理の処理実行間隔に依存することになり、またこの間隔は一定になるとは限らない。
上記任意の適切な診断間隔による所定期間内に(例えば診断間隔が1時間毎であった場合には1時間以内に)、上記各データ格納領域全てについて最低1回、その領域の格納データを読出す処理が実行される(これに伴い、その領域の診断処理が実行される)のであれば、結果的に、RAM診断間隔の時間保証が実現できる(上記所定期間内にRAM内の全領域の診断が行われている)ことになる。つまり、故障確率を減少させる為のRAM診断間隔の時間保証を実現できることになる。
しかしながら、例えば故障発生時の対応処理等のような、ランダムに実行され且つ実行頻度が少ない処理が扱うデータの格納領域については、上記所定期間内にRAM診断処理が実行される可能性は低く、RAM診断間隔の時間保証がされていないという問題がある。これは、換言するならば、この場合には、例えばRAMの記憶領域全てについて最低1回はRAM診断処理が実行された状態になる毎にリセットし、このリセット時から再びRAMの記憶領域全てについて最低1回はRAM診断処理が実行された状態になるまでの時間を、そのRAM全体に関するRAM診断間隔と見做すことができる。そして、このRAM診断間隔は一定ではなく不定となり、特に上記「ランダムに実行され且つ実行頻度が少ない処理」に影響されるものとなる。そして、上記の通り、RAM全体に関するRAM診断間隔は、場合によっては非常に長いものとなり、RAM診断間隔を短くすることで故障発生確率が減少させたくても、出来ないことになる。
この問題を解決する為に、例えば上記他のアルゴリズムと同様に定期的に(例えば上記所定期間の最後に)RAMの記憶領域全体の診断処理を行うことも考えられる。しかしながら、この様な全領域診断処理は、処理負荷や処理時間が大きくなり、CPUの資源を大きく消費するという問題があり、また無駄な処理が多くなる可能性がある。つまり、例えば上記データ読出し処理の際のRAM診断処理によって、上記所定期間内にRAMの記憶
領域の90%が既に診断済みの状態であるにも係らず、残りの10%の為にこの90%についても再度RAM診断処理を行うことになり、これは無駄な処理となる。
また、診断対象のRAMが、何らかの制御システムのコントローラ内のメモリであった場合、RAMに格納されるデータは大別して安全関連系データと非安全関連系データとがあることになる。この場合、特に故障発生確率を減少させたいのは、安全関連系データの格納領域であり、非安全関連系データは必ずしもRAM診断処理対象とはならない。よって、上記の説明では、RAMの記憶領域全体を診断処理対象として説明したが、安全関連系データに係る格納領域(安全関連系データの上記反転データの格納領域も含む)のみを診断処理対象としてもよく、この場合には当該診断処理対象の記憶領域についてのみ、上述したRAM診断間隔の時間保証が実現できればよい。
ここで、安全関連系データと非安全関連系データとの関係については、「IEC61508-2 7.4.2.3 備考1」に“従属故障の確率が故障確率より十分低い”と記載されている。つまり、非安全関連系データに起因する安全関連系データに影響する従属故障の確率を故障確率より十分小さくすることが必要とされている。しかしながら、その為の具体的な実現方法については記載されていない。
これに関しては、従来は、安全関連系データと非安全関連系データのCPU及びRAMを別々に設けるなどの対応をしている。つまり、安全関連系データの処理・記憶用のCPU及びRAMと、非安全関連系データの処理・記憶用のCPU及びRAMとを設けることで、上述した従属故障の確率を故障確率より十分小さくすることを実現している。
つまり、安全関連系データの記憶領域と非安全関連系データの記憶領域とを完全に分離し、例えば非安全関連系データの処理の際に何らかの原因で安全関連系データの記憶領域にアクセスするような事態が生じないようにすることで、上述した従属故障の確率を故障確率より十分小さくすることを実現できる。
しかしながら、この方法では、CPUやRAMのコストが増大してしまう。
この為、CPU及びRAMを別々に設けることなく、上述した従属故障の確率を故障確率より十分小さくすることが要望される。つまり、この場合、1つのRAM内に安全関連系データと非安全関連系データとが記憶されることになるが、この様な状況であっても上述した従属故障の確率を故障確率より十分小さくすることが要望される。
尚、上記特許文献1、特許文献2は、ダブルRAMアルゴリズムによるRAM診断手法ではなく、よって上述したダブルRAMアルゴリズムによるRAM診断手法を用いる場合のRAM診断間隔の時間保証の問題は、想到されるはずもなく、その解決手段は何等示されていない。また、安全関連系データと非安全関連系データの同一RAM内で混在した場合の上記要望についても何等考えられていない。
また、非特許文献1、非特許文献2には、ダブルRAMアルゴリズムによるRAM診断手法についての開示はあるが、上述したRAM診断間隔の時間保証の問題に関しては何等考えられておらず、よって当然、その解決手段は何等示されていない。
本発明の課題は、ダブルRAMアルゴリズムを用いるRAM診断手法に係り、処理負荷や処理時間の増大を招くことなく、故障確率を減少させる為のRAM診断間隔の時間保証を実現できるRAM診断装置等を提供することである。
本発明のRAM診断装置は、各種安全関連データがそれぞれ安全関連データ用領域内の
所定の1又は複数のアドレスに格納されるRAMに対して、ダブルRAMアルゴリズムによるRAM診断処理を行うRAM診断装置であって、前記RAMにおける前記安全関連データ用領域内の前記各アドレス毎に対応して、該アドレスについて前記RAM診断処理を実施済か未実施かを示す管理情報を記憶する管理情報記憶手段と、任意の前記安全関連データを前記RAMからリードする処理又は該RAMにライトする処理を行う手段あって、該リード処理の際に、該リードする安全関連データの格納領域に関して前記ダブルRAMアルゴリズムによるRAM診断処理を行うと共に、前記管理情報記憶手段における該RAM診断処理を行った格納領域のアドレスに対応する前記管理情報を、実施済とする安全関連データアクセス処理手段と、予め決められた診断間隔で、前記管理情報記憶手段を参照して、未実施となっている管理情報に対応するアドレスに関して、前記ダブルRAMアルゴリズムによるRAM診断処理を行う診断時限保証手段とを有する。
上記の通り、ダブルRAMアルゴリズムによるRAM診断処理では、自己診断率が高く自己診断の効果が高いことが知られている。このアルゴリズムの診断処理は、上記安全関連データアクセス処理手段によるリード/ライト処理に伴って行われる為、予め決められた診断間隔内(所定時間内)に全てのアドレスに関してリード/ライト処理が行われる保証はない。これに対して本発明のRAM診断装置では、上記管理情報記憶手段と診断時限保証手段とを備えることで、診断時限保証手段は所定の診断間隔でそのときまでに診断未実施であったアドレスに関してのみRAM診断を行う。これにより、処理負荷や処理時間の増大を招くことなく、RAM診断間隔の時間保証を実現でき、以って故障確率を減少させることができる。
また、上記RAM診断装置において、例えば更に、前記RAMにおける前記安全関連データ用領域内の前記各アドレス毎に対応して、予め要/不要情報が登録される要/不要情報記憶手段を有し、前記安全関連データアクセス処理手段は、前記ダブルRAMアルゴリズムによるRAM診断処理を行った格納領域のアドレスに対応する前記要/不要情報が、不要であった場合には、前記対応する管理情報を実施済とする処理は行わず、前記診断時限保証手段は、対応する管理情報が未実施となっているアドレスであっても、該アドレスに対応する前記要/不要情報が不要となっている場合には、該アドレスに関しては前記ダブルRAMアルゴリズムによるRAM診断処理は実行しないようにしてもよい。
要/不要情報記憶手段を設けたことで、安全関連データアクセス処理手段は管理情報を更新する処理を行わずに済むので、その分、処理時間、処理負荷を軽減できる。
本発明のRAM診断装置等によれば、ダブルRAMアルゴリズムを用いるRAM診断手法に係り、処理負荷や処理時間の増大を招くことなく、故障確率を減少させる為のRAM診断間隔の時間保証を実現できる。更に、CPU、RAMを増設することなく、非安全関連系データに起因する安全関連系データに影響する従属故障の確率を、故障確率より十分小さくすることができる。
本例のRAM診断装置のブロック図である。 (a)〜(c)は、図1に示すRAM管理テーブルのデータ構成例である。 RAM内の各領域のアドレス例である。 安全関連データ管理領域のデータ構成例である。 安全関連データ書込部の処理フローチャート図である。 安全関連データ読込部の処理フローチャート図(その1)である。 安全関連データ読込部の処理フローチャート図(その2)である。 診断時限保証処理部の処理フローチャート図(その1)である。 診断時限保証処理部の処理フローチャート図(その2)である。 EOR、ANDに関する具体例を示す図である。 非安全関連データ読み書き部の処理フローチャート図である。 安全関連アプリケーション部の処理フローチャート図である。 非安全関連アプリケーション部の処理フローチャート図である。
以下、図面を参照して本発明の実施の形態について説明する。
図1は、本例のRAM診断装置の構成ブロック図である。
尚、このRAM診断装置は、例えば上述したプログラマブルコントローラシステム(制御システム)におけるコントローラ本体に相当する。上記の通り、コントローラ本体(CPU、RAM等を有する)は、自己診断処理として自己のRAMの診断処理を行うものであり、特にこの様なRAM診断処理に係る構成を図1に示している。
図1に示すRAM診断装置は、ハードウェア的にはCPU1、ROM10、RAM20から成る。CPU1は、特に図示しないアドレス線、データ線等を介して、ROM10、RAM20にアクセスして、データ・リード/ライト処理を行う。
RAM20は、本診断装置による診断対象のメモリである。RAM20に対する診断処理は、CPU1が、ROM10に予め記憶されている各種アプリケーションプログラム(後述する)を読出し・実行することにより実現される。
ROM10には、上記各種アプリケーションとして、安全関連アプリケーション15,非安全関連アプリケーション16が記憶されており、また、安全関連データ書込関数11、安全関連データ読込関数12、非安全関連データ読み書き関数14の各種関数や、診断時限保証タスク13が格納されており、またRAM管理テーブル17が格納されている。
上記各種関数は、上記アプリケーション15,16のプログラム内にインライン展開されている。すなわち、安全関連データ書込関数11及び安全関連データ読込関数12は安全関連アプリケーション15のプログラム内にインライン展開され、安全関連アプリケーション15の実行中に呼び出されてそれぞれの処理を実行する。また、非安全関連データ読み書き関数14は、非安全関連アプリケーション16のプログラム内にインライン展開され、非安全関連アプリケーション16の処理を実行中に呼び出されてその処理を実行する。
安全関連データ書込関数11は、RAM20の安全関連データ領域22内の任意の記憶領域に任意のデータを書込むための関数である。また、安全関連データ読込関数12は、
RAM20の安全関連データ領域22内の任意の記憶領域から任意のデータを読込むための関数である。
また、診断時限保証タスク13は、予め定められた診断間隔で起動し(所定時間毎に起動し)、処理実行する。
診断時限保証タスク13は、予め定義された所定時間内に、RAM20における安全関連データに係る全記憶領域についての自己診断が行われることを保障するタスクである。つまり、上述してある故障確率を減少させる為のRAM診断間隔の時間保証を実現するものであり、更にこれを処理負荷や処理時間の増大を招くことなく実現するものである。つまり、診断時限保証タスク13は、処理実行中、安全関連データ管理領域21(RAM診断完了ビット領域45)を参照することで、定義された所定時間内に診断処理が行われていない記憶領域(アドレス)を判定し、当該アドレス(記憶領域)に関する診断を行う。この診断は上記ダブルRAM方式でテストデータの書込み・読出しを行うものである。
非安全関連読み書き関数14は、非安全関連データ領域23からのデータ読込みや非安全関連データ領域23へのデータ書込み行うための関数である。
安全関連アプリケーション15は、安全関連データに関する処理を行うアプリケーションである。
非安全関連アプリケーション16は、非安全関連データに関する処理を行うアプリケーションである。
尚、上記各種アプリケーション/関数/タスク11〜16やテーブル17は、ROM10ではなくRAM20上に配置してもよい。
ここで、CPU1は、上記各アプリケーション/関数/タスクを実行することで所定の処理機能を実現することになり、これよりCPU1は図示しないが各種処理機能部を有するものと見做してよく、本説明では以下の通り定義する。
すなわち、図1には示していないが、CPU1は、安全関連アプリケーション部15’、非安全関連アプリケーション部16’、安全関連データ書込部11’、安全関連データ読込部12’、非安全関連データ読み書き部14’、診断時限保証処理部13’の各種処理機能部を有するものである。
CPU1は、安全関連アプリケーション15を実行することにより安全関連アプリケーション部15’の処理機能を実現する。同様に、CPU1は、非安全関連アプリケーション16を実行することにより非安全関連アプリケーション部16’の処理機能を実現する。CPU1は、安全関連データ書込関数11を実行することにより安全関連データ書込部11’の処理機能を実現する。CPU1は、安全関連データ読込関数12を実行することにより安全関連データ読込部12’の処理機能を実現する。CPU1は、非安全関連データ読み書き関数14を実行することにより非安全関連データ読み書き部14’の処理機能を実現する。CPU1は、診断時限保証タスク13を実行することにより診断時限保証処理部13’の処理機能を実現する。
尚、上述したことから、安全関連データ書込部11’及び安全関連データ読込部12’は安全関連アプリケーション部15’に含まれると考えてもよく、同様に非安全関連データ読み書き部14’は非安全関連アプリケーション部16’に含まれると考えても良い。
そして、後述する図5は安全関連データ書込部11’の処理フローチャート図、図6、図7は安全関連データ読込部12の処理フローチャート図、図8、図9は診断時限保証処理部13’の処理フローチャート図、図11は非安全関連データ読み書き部14’の処理
フローチャート図、図12は安全関連アプリケーション部15’の処理フローチャート図、図13は非安全関連アプリケーション部16’の処理フローチャート図と考えて良い。
また、RAM管理テーブル17には、RAM20を管理するための各種データが格納されている。RAM管理テーブル17のデータ構成は、図2に示し、後に説明する。
また、図1に示すように、RAM20の記憶領域は図示の領域21〜25の各種記憶領域から成る。すなわち、RAM20は、安全関連データ管理領域21、安全関連データ領域22、非安全関連データ領域23、反転安全関連データ領域24、反転安全関連データ管理領域25を有する。
安全関連データ管理領域21は、安全関連データ領域22を管理するための情報を格納する領域である。図4に安全関連データ管理領域21のデータ構成例を示し、後に説明するが、図4に示す各ビット情報は、初期値として全て‘0’(ビットOFF)(未実施)が格納される。
反転安全関連データ管理領域25は、反転安全関連データ領域24を管理するための情報を格納する領域である。尚、詳しくは後述するが、反転安全関連データ管理領域25には、実質的に、安全関連データ管理領域21のデータの反転データが格納されることになる。よって、そのデータ構成自体は安全関連データ管理領域21と略同様であってよく、後に図4の説明の際に説明するが、そのビット情報の意味は、安全関連データ管理領域21とは反対であり、よって初期値として各ビット情報は全て‘1’(ビットON)(未実施)が格納される。詳しくは後述する。
安全関連データ領域22は、安全関連データ(可変データ)を格納する領域である。
非安全関連データ領域23は、非安全関連データ(可変データ)を格納する領域である。
ここで、安全関連データとは、上記従来の課題で述べた安全関連系データに相当し、例えば制御システムにおいてプログラマブルコントローラ本体が制御対象機器の動作を制御することに関するデータ等であり、特に作業員等の安全に係わるデータである。すなわち、例えば、モータやプレス機の動作の開始/停止を指示することに係るデータである。よって、安全関連データに異常が生じた場合、それによって誤った指示が制御対象機器に送られると、突然、モータやプレス機が動作開始する等して近くにいる作業員に危険が生じる可能性がある。このように、(作業員等の)安全に関連するデータであるから、安全関連データと呼ぶ。
よって、RAM20の記憶領域のなかで特に安全関連データに関する記憶領域(安全関連データ領域22等)に関しては、上述した「故障確率を減少させる為のRAM診断間隔の時間保証を実現する」ことが大事であり、本手法では処理負荷や処理時間の増大を招くことなくこれを実現するものである。
一方、上記非安全関連系データに相当する非安全関連データは、例えばランプ点灯等、誤動作しても(作業員等の)安全に特に影響しない制御に関するデータであり、よって、特にRAM診断処理を行わなくても良い。
尚、安全関連データ、非安全関連データは、例えばシステム構築者が任意に判断して各データを分類してよい。
反転安全関連データ領域24は、安全関連データ領域22のデータの反転データを格納する領域である。
ここで、反転データは、当該反転データに対応するデータが格納されている安全関連データ領域22のアドレスを反転したアドレスに格納する。(例;安全関連データ領域22において5050番地に‘0101’(16進数)のデータが格納されていれば、このデータの反転データ‘FEFE’(16進数)は、AFAF番地に格納されることになる)。
尚、ROM10の自己診断は、公知である格納されているデータのCRC(Cyclic Redundancy Check:巡回冗長度検査)などにより別途行うが、これは本手法には関係ないので説明しない。
図2(a)〜(c)に、上記RAM管理テーブル17のデータ構成例を示す。
図2(a)には全体構成を示し、そのうちのRAM時限保証診断不要ビット領域(番号31=‘11’)のデータ構成を図2(b)に、「データ番号・データバイト数」(番号31=‘12’)のデータ構成を図2(c)に示す。
図2(a)に示すように、RAM管理テーブル17は番号31と管理情報32からなる。
番号31は、各項目(レコード)を特定するための一意の通し番号である。
管理情報32には、番号31=‘1’〜‘10’に関しては特定のアドレスが格納され、番号31=‘11’、‘12’に関しては図2(b)、(c)に示すデータが格納される。
まず、番号31=‘1’〜‘10’の管理情報32(アドレス)について説明する。
図示の安全関連データ管理領域先頭アドレス(番号31=‘1’)、安全関連データ管理領域最終アドレス(番号31=‘2’)は、それぞれ、RAM20の安全関連データ管理領域21の先頭アドレス、最終アドレスである。
安全関連データ領域先頭アドレス(番号31=‘3’)、安全関連データ領域最終アドレス(番号31=‘4’)は、それぞれ、RAM20の安全関連データ領域22の先頭アドレス、最終アドレスである。
非安全関連データ領域先頭アドレス(番号31=‘5’)、非安全関連データ領域最終アドレス(番号31=‘6’)は、それぞれ、RAM20の非安全関連データ領域23の先頭アドレス、最終アドレスである。
反転安全関連データ領域先頭アドレス(番号31=‘7’)、反転安全関連データ領域最終アドレス(番号31=‘8’)は、それぞれ、RAM20の反転安全関連データ領域24の先頭アドレス、最終アドレスである。
反転安全関連データ管理領域先頭アドレス(番号31=‘9’)、反転安全関連データ管理領域最終アドレス(番号31=‘10’)は、それぞれ、RAM20の反転安全関連データ管理領域25の先頭アドレス、最終アドレスである。
RAM時限保証診断不要ビット領域(番号31=‘11’)には、RAM20の安全関連データ領域22内の各アドレス(各番地;1バイト単位)毎に対応付けて、そのアドレスに対する時限保証診断処理の要/不要を示すビット情報を格納する。詳細は図2(b)に示し後に説明する。
RAM時限保証診断不要ビット領域(番号31=‘11’)の内容は、例えば本システムの開発者等が任意に決定して設定する。基本的には、RAM20の安全関連データ領域
22内の当該アドレスからのデータ読み込み処理が、上記予め定義された所定時間内に確実に発生する場合に、当該アドレスに対応する上記ビット情報を‘1’にする。データ読み込み処理が行われれば安全関連データ読込関数12による処理によって当該アドレスに関する診断が行われるからである。つまり、換言すれば、上記予め定義された所定時間内に確実にデータ読込みに伴う診断処理があると考えられるアドレスに関しては、予め当該アドレスに対応する上記ビット情報を‘1’に設定しておく。定義した時間内に確実に診断処理があるか否かは、例えば処理の静的解析等により開発時に開発者等が決定する。
尚、RAM時限保証診断不要ビット領域における各ビットの先頭からの相対ビット数は、安全関連データ領域22の先頭からの相対アドレス(1バイト単位)と一致させる。また、尚、RAM時限保証診断不要ビット領域は、例えば通常運転時の診断と初期時の診断など診断の種類に対応させて複数設けても良い。
データ番号・データバイト数(番号31=‘11’)は、例えば図2(c)に示すテーブル情報であり、RAM20の上記安全関連データ領域22、非安全関連データ領域23に格納されている各データに対して一意に付けた通し番号43に対応付けて、当該データのバイト数43が格納されている。これは開発時に開発者等が任意に定義したデータ番号とデータのバイト数が格納されるものである。
以下、図2(b)を参照してRAM時限保証診断不要ビット領域の具体例について説明する。
図示の例のRAM時限保証診断不要ビット領域41は、図示の通り多数のビット情報(bit0、bit1、bit2、・・・bitn・・・bit(n+2))より構成される。上記の通り、これら各ビット情報は、それぞれ、安全関連データ領域22における各アドレス(1バイト単位)に対応する情報であり、そのアドレスに関して時限保証診断要か時限保証診断不要かを示している。本例ではビット情報=‘1’は時限保証診断不要、ビット情報=‘0’は時限保証診断要を意味するものとする。
例えば、RAM時限保証診断不要ビット領域41における先頭ビット(先頭からの相対ビット数=0のビット;bit0)は、安全関連データ領域22の先頭アドレス(安全関連データ領域22の先頭からの相対アドレス=0のアドレス;「先頭アドレス+0」と記すものとする)に対応するものであり、もしbit0=‘1’であったならば、領域22の先頭アドレスについては時限保証診断不要と設定されていることになる。一方、bit0=‘0’であったならば、領域22の先頭アドレスについては時限保証診断要と設定されていることになる。
尚、bit0以外のビットもbit0と同様であり、例えば、RAM時限保証診断不要ビット領域41における先頭からの相対ビット数=1のビット(bit1)は、安全関連データ領域22の“先頭アドレス+1”のアドレスに対応する診断要/不要を示すビット情報である。同様に、例えば、RAM時限保証診断不要ビット領域41における先頭からの相対ビット数=nのビット(bit n)は、安全関連データ領域22の“先頭アドレス+n”のアドレスに対する時限保証診断要/不要を示すビット情報である。
例えば、図3に示す例では、安全関連データ領域22には7000番地〜7FFF番地までの各アドレスが割り当てられており、その先頭アドレスは7000番地であり、よって上記bit0(相対ビット数=0)はこの7000番地(7000番地+0)に対応するビット情報である。同様に、上記bit1(相対ビット数=1)は7001番地(7000番地+1)に対応するビット情報であり、bit2(相対ビット数=2)は7002番地(7000番地+2)に対応するビット情報である。
尚、上記RAM時限保証診断不要ビット領域41の各ビット情報は、上記の通り開発者等が判断して設定するが、基本的には、各データ毎に対応付けて設定する。例えば上記図2(c)に示す「データ番号・データバイト数」42のテーブルのデータ番号43=‘1’、データバイト数44=‘4’のデータが、仮に安全関連データ領域22の先頭アドレスから4バイト分の領域に格納されるデータであった場合、開発者等はこのデータに関して診断不要か診断要かを判断して、上記RAM時限保証診断不要ビット領域41における対応するビット情報を設定する。つまり、この場合、RAM時限保証診断不要ビット領域41における先頭から4ビット分(図示のbit0、bit1、bit2と、更に図示していないがbit3)を設定する。もし、このデータに関しては時限保証診断不要と判断したならば、この4ビットは全て‘1’に設定され、このデータに関しては時限保証診断要と判断したならば、この4ビットは全て‘0’に設定されることになる。
図4は、上記安全関連データ管理領域21のデータ構成例である。
安全関連データ管理領域21には、図4に示すRAM診断完了ビット領域45が含まれる。ここでは、安全関連データ管理領域21=RAM診断完了ビット領域45と見做してもよい。つまり、以下の説明における安全関連データ管理領域21は、RAM診断完了ビット領域45のことであると考えても良い(その逆も同様)。
図4に示すように、安全関連データ管理領域21も、上記RAM時限保証診断不要ビット領域41と略同様に、それぞれが安全関連データ領域22における各アドレス(1バイト単位)に対応付けた複数のビット情報より成る。これら各ビット情報は、それが対応する安全関連データ領域22のアドレスについてRAM診断処理を実行済みか未実行であるかを示すものであり、ここではビット‘1’(on)は実行済み(完了)を意味し(定義した時間内にRAM診断を完了したことを示し)、ビット‘0’(off)は未実行(未完了)を意味するものとする。初期値は、全ビット‘0’とする。
例えば図示の先頭ビット(RAM診断完了ビット領域45における先頭からの相対ビット数=0のビット;bit0)は、安全関連データ領域22の先頭アドレス(「先頭アドレス+0」;本例では7000番地)に対応するビット情報であり、基本的には、bit0=‘1’であったならば先頭アドレスについては既に診断処理実行済みであり、bit0=‘0’であったならば先頭アドレスについて未だ診断処理を行っていないことを意味する。但し、時限保証診断不要の場合には、診断処理実行済みであってもビットOFF‘0’のままである。これについては後に説明するが、時限保証診断不要の場合にはビットONとする処理を行わずに済むので、この処理の分、処理時間を減少させ処理負荷を軽減することができる。
尚、bit0以外のビットもbit0と同様であり、例えば、安全関連データ管理領域21における先頭からの相対ビット数=1のビット(bit1)は、安全関連データ領域22の“先頭アドレス+1”のアドレスに対する診断完了/未完了を示すビット情報である。同様に、例えば、安全関連データ管理領域21における先頭からの相対ビット数=nのビット(bitn)は、安全関連データ領域22の“先頭アドレス+n”のアドレスに対する診断完了/未完了を示すビット情報である。
反転安全関連データ管理領域25のデータ構成も、図4に示すものと同様であってよい。但し、その意味は異なる。つまり、ビット‘1’(on)は診断未実行(未完了)を意味し、ビット‘0’(off)は診断実行済み(完了)を意味するものとする。よって、初期値は、全ビット‘1’とする。また、各ビット情報が対応するアドレスも、上記安全関連データ管理領域21のものとは異なる(例えば、先頭ビットは7000番地に対応するものではない)が、これについては後にフローチャートの説明の際に説明する。
以下、上記ROM10に格納されている各関数/タスク/アプリケーションを、CPU1が読出・実行することにより実現される処理について、図5〜図13を参照して説明する。
尚、上述してある通り、図5は安全関連データ書込部11’の処理フローチャート図、図6、図7は安全関連データ読込部12’の処理フローチャート図、図8、図9は診断時限保証処理部13’の処理フローチャート図、図11は非安全関連データ読み書き部14’の処理フローチャート図、図12は安全関連アプリケーション部15’の処理フローチャート図、図13は非安全関連アプリケーション部16’の処理フローチャート図である。
まず、図5の処理について説明する。
上記の通り、図5は、安全関連データ書込部11’の処理フローチャート図である。すなわち、安全関連データ書込関数11によって実現される機能処理を示すフローチャート図である。
尚、図5の処理に対するパラメータ(入力)は、下記の通りである。このパラメータは、安全関連アプリケーション部15’から渡される。
・データ番号(RAM20に書き込む(書込対象の)安全関連データの上記データ番号)・書込アドレス(上記書込対象の安全関連データを書き込む領域の先頭アドレス)
・書込データ(上記書込対象の安全関連データ)
・書込データバイト数(上記書込データのデータサイズ(バイト単位))
また、図5の処理による関数値(処理結果)は下記の情報であり、通常、これらは数値化されている(例えば、正常終了→1、異常終了→0)。
・正常終了/異常終了
また尚、当該関数11は安全関連アプリケーション15のプログラム内にインライン展開する。これにより、RAM20内のスタック領域(不図示)を使用しないようにする。RAM20の不図示のスタック領域は、不図示のスタック割込処理がコントロールする領域であり、診断処理を適用できないからである。
安全関連アプリケーション15は、その処理実行中に任意の安全関連データをRAM20内の任意のアドレスに書き込むイベントが発生した場合、当該関数11を呼び出して上記パラメータを渡す。これにより図5の処理が実行される。
図5の処理は、まず、RAM管理テーブル17から安全関連データ領域先頭アドレス(番号31=‘3’)と安全関連データ領域最終アドレス(番号31=‘4’)を読込む。また、上記パラメータの書込アドレスと書込データバイト数とに基づいて、上記書込データ(書込対象の安全関連データ)を書き込む領域のアドレス範囲(先頭アドレスと最終アドレス)を計算する(ステップS11)。上記の通り、書込アドレス=先頭アドレスであり、本例では例えば「書込アドレス+書込データバイト数−1」を最終アドレスとしてよい。
そして、上記読込んだ先頭/最終アドレスにより上記安全関連データ領域22のアドレス範囲が分かるので、上記書込データを書き込む領域のアドレス範囲がこの安全関連データ領域22のアドレス範囲内(領域内)に入っているか否かをチェックする(ステップS12)。安全関連データ領域22内に入っている場合にはチェックOKと判定し(ステップS12,YES)ステップS13の処理へ移行し、そうでない場合(一部でも領域22外である場合)にはチェックNGと判定し(ステップS12,NO)、異常終了とする(ステップS21)。
このチェック処理は、図1に示すRAM20のように安全関連データと非安全関連データとが記憶される場合において、何らかの理由で誤って安全関連アプリケーション15(その関数11や関数12)による処理で他の領域(特に非安全関連データ領域23)にアクセスすることが無いようにする為のものである(よって、リード時も同様の処理を行う)。また、後述する図11は非安全関連データ読み書き部14’の処理においても、誤って他の領域(特に安全関連データ領域22)にアクセスすることが無いように、同様のチェック処理を行っている。これによって、CPU、RAMを増設することなく、非安全関連系データに起因する安全関連系データに影響する従属故障の確率を、故障確率より十分小さくすることができる。
ステップS13では、上記パラメータの書込データバイト数に関するチェックを行う。すなわち、上記パラメータのデータ番号を用いて上記図2(c)に示す「データ番号・データバイト数」42のテーブルを検索して、該当するレコードのデータバイト数44を取得し、上記パラメータの書込データバイト数がこのデータバイト数44と一致するか否かをチェックする。不一致であれば(ステップS13,NO)、異常終了とする(ステップS21)。一致する場合には(ステップS13,YES)ステップS14以降の処理へ移行する。
尚、本例のRAM20の上記安全関連データ領域22に格納される各データは、予め決まった種類のデータである。例えば上記図2(c)に示す「データ番号・データバイト数」42におけるデータ番号42=‘1’のデータはセンサAによって検出されるデータ(例えばモータ回転数)、データ番号42=‘2’のデータはセンサBによって検出されるデータ(例えばステージ位置)等というように、予め決められている。また、各データのデータ量(データバイト数)は一定であり、例えば、上記センサAによって検出されるデータは必ず4バイトである(これより、上記ステップS13の判定を行っている)。そして、例えば、定期的にセンサAによって検出されるデータを取得して、この取得データを上記安全関連データ領域22においてデータ番号42=‘1’のデータ格納領域に上書き記憶する処理を行う(最新のデータへと更新する)。この処理の際に図5の処理が実行される。また、上記データ番号42=‘1’のデータ格納領域から上記センサAの最新データを読み出す際には、後述する図6、図7の処理が実行される。
以下、ステップS14以降の処理について説明する。
まず、上記パラメータの書込データを、当該パラメータの書込アドレス、書込バイト数に従って、RAM20の安全関連データ領域22内の該当領域に書込む(ステップS14)。
次に、上記書込データの反転データを、RAM20の反転安全関連データ領域24内の該当領域に書き込む処理、すなわちステップS15〜S19の処理を実行する。
これは、まず、上記書込アドレスを反転することで、反転安全関連データ領域24における上記反転データの書き込みアドレス範囲を求める(このアドレス範囲の先頭アドレスと最終アドレスを求める)(ステップS15)。これは、上記ステップS11で計算した書込アドレス範囲の先頭アドレスと最終アドレスそれぞれについてアドレス反転を行うものである。尚、例えばアドレス‘0101’(16進)の反転アドレスは‘FEFE’である。
アドレス反転を行うのは、RAMの制御は、アドレス制御機構とビット制御機構で行われているからである。すなわち、単にデータ反転を行うだけではビット制御機構の異常チェックしか出来ないので、アドレス反転によりアドレス制御機構の異常チェックも行えるようにしている。
続いて、RAM管理テーブル17から反転安全関連データ領域先頭アドレス(番号31=‘7’)と反転安全関連データ領域最終アドレス(番号31=‘8’)を読込む(ステップS16)。これより、反転安全関連データ領域24のアドレス範囲が分かるので、上記ステップS15で求めたアドレス範囲が、この反転安全関連データ領域24のアドレス範囲内(領域内)に入っているか否かをチェックする(ステップS17)。つまり、上記ステップS12と同様の処理を、反転データに関して行う。
反転安全関連データ領域24内に入っていればチェックOKであり(ステップS17,YES)、ステップS18の処理へ移行する。一方、上記ステップS15で求めたアドレス範囲が、その一部でも反転安全関連データ領域24外であるならばチェックNGとして(ステップS17,NO)、異常終了する(ステップS21)。
ステップS18の処理では、上記パラメータの書込データを反転して反転データを生成する。そして、この反転データを、上記ステップS15で求めたアドレス範囲(反転安全関連データ領域24における該当領域)に書き込む(ステップS19)。そして、正常終了の関数値をセットし終了する(ステップS20)。尚、上記ステップS21は異常終了の関数値をセットし終了するものである。
次に、以下、安全関連データ読込部12’(安全関連データ読込関数12)による処理について説明する。
図6、図7は安全関連データ読込部12’の処理フローチャート図である。尚、これは、1つのフローチャート図を2つの図面に分けて示しているものである。
尚、本処理に対するパラメータ(入力)は、下記の通りとする。
・データ番号(RAM20から読込む安全関連データ(読込対象データ)のデータ番号)・読込アドレス(RAM20における上記読込対象データの格納領域の先頭アドレス)
・読込データバイト数(上記読込対象データのデータサイズ(バイト単位))
・RAM管理テーブル17のRAM時限保証診断不要ビット領域41の情報
また、下記を復帰データとする。
・読込データ
また、下記を関数値とする。
・データ正常/データ異常/異常終了
尚、当該関数12は、安全関連アプリケーション15のプログラム内にインライン展開する。これにより、RAM20内のスタック領域(不図示)を使用しないようにする。安全関連アプリケーション15は、その処理実行中に任意の安全関連データをRAM20から読み込むイベントが発生した場合、関数12を呼び出して上記パラメータを渡す。これにより図6、図7の処理が実行される。
本処理は、図6に示すように、まず、RAM管理テーブル17から安全関連データ領域先頭アドレス(番号31=‘3’)と安全関連データ領域最終アドレス(番号31=‘4’)を読込む。また、上記パラメータの読込アドレスと読込データバイト数に基づいて、上記読込対象データの格納領域のアドレス範囲(先頭アドレスと最終アドレス)を計算する(ステップS31)。上記の通り、パラメータの読込アドレス=先頭アドレスであり、本例では例えば「読込アドレス+読込データバイト数−1」を最終アドレスとしてよい。
そして、上記読込んだ先頭/最終アドレスにより上記安全関連データ領域22のアドレス範囲が分かるので、上記読込対象データの格納領域が、安全関連データ領域22に入っているか否かをチェックする(ステップS32)。安全関連データ領域22内に入っている場合にはチェックOKと判定し(ステップS32,YES)ステップS33の処理へ移
行し、そうでない場合(一部でも領域22外である場合)にはチェックNGと判定し(ステップS32,NO)、異常終了とする(ステップS44)。
このチェック処理の意味については既に上記ステップS21の説明ので述べた内容と同様である。
ステップS33では、上記パラメータの読込データバイト数に関するチェックを行う。すなわち、上記パラメータのデータ番号を用いて上記図2(c)に示す「データ番号・データバイト数」42のテーブルを検索して、該当するレコードのデータバイト数44を取得し、上記パラメータの読込データバイト数がこのデータバイト数44と一致するか否かをチェックする。このチェック処理の意味も上記ステップS13の場合と略同様である。不一致であれば(ステップS33,NO)、異常終了とする(ステップS44)。一致する場合には(ステップS33,YES)ステップS34以降の処理へ移行する。
以下、ステップS34以降の処理について説明する。
尚、以下のステップS34〜S38の処理の間は、レベルマスクなどにより排他制御をする。
概略的には、ステップS34〜S40の処理は、上記読込対象データをRAM20からリードすると共に、上述したダブルRAMアルゴリズムにより上記読込対象データの格納領域に対するRAM故障診断を行うものである。そして、更にステップS41で時限保証診断の要/不要を判定し、時限保証診断要の場合には(ステップS41,NO)、図7に示す処理を実行する。つまり、時限保証診断要の場合には図7の処理によりRAM診断完了ビット領域45における該当ビットをON(完了)とするが、不要の場合にはこの処理は行わない。不要の場合には時限保証診断処理を行う時点では既に診断が行われているはずであり、該当ビットON(完了)する処理は省けると考えられるからである。そして、後述する“EOR”の処理により、ビットOFF(未完了)のままであっても、時限保証診断の処理対象とはならない。図7の処理を行わずに済む分だけ、処理時間を短縮でき処理負荷を軽減できる。
尚、上記該当ビットとは、上記読込対象データの格納領域(1以上のアドレス)に対応するビット情報である。
尚、上記診断不要ビット領域41を用いることは、必ず必要なものではなく、無くても良い。この場合には、ステップS41の処理は必要なく、必ず図7の処理を行うことになる。また、この場合には後述する“EOR”の処理や“AND”の処理も必要なく、単純に、RAM診断完了ビット領域45を参照して、未完了であるビット情報に対応するアドレスを、時限保証診断の処理対象とすればよい。
ステップS34以降の処理では、まず、上記ステップS31で求めた上記読込対象データの格納領域のアドレス範囲に応じて、RAM20からこのアドレス範囲のデータを読み出す(これが上記復帰データとしての読込データとなる)(ステップS34)。
次に、当該読込対象データの格納領域のアドレス範囲(先頭アドレスと最終アドレス)を反転する(これを反転アドレス範囲と呼ぶものとする)(ステップS35)。また、RAM管理テーブル17から反転安全関連データ領域先頭アドレス(番号31=‘7’)と反転安全関連データ領域最終アドレス(番号31=‘8’)を読込む(ステップS36)。これにより上記反転安全関連データ領域24のアドレス範囲が分かるので、上記ステップS35で得た反転アドレス範囲が、反転安全関連データ領域24内に入っているか否かをチェックする(ステップS37)。
もし、反転アドレス範囲の一部でも領域24内に入っていない場合にはチェックNGと
し(ステップS37,NO)、異常終了する(ステップS44)。一方、反転アドレス範囲の全てが領域24内に入っている場合にはチェックOKとし(ステップS37,YES)、ステップS38以降の処理を実行する。
まず、RAM20における上記反転アドレス範囲の記憶領域からデータを取得する(ステップS38)。そして、取得したデータを反転し(ステップS39)、この反転データが上記ステップS34で得た読込データと一致するか否かを確認する(ステップS40)。不一致の場合には(ステップS40,NO)データ異常(ステップS43)とし、処理終了する。
一方、一致する場合には(ステップS40,YES)、基本的には正常終了(診断OK)とし(ステップS42)、上記ステップS34で得た読込データを安全関連アプリケーション部15’に返すことになるが、その前にステップS41の判定処理を実行し、判定「不要」の場合には(ステップS41,YES)そのまま上記ステップS42の処理を実行して本処理を終了するが、判定「要」の場合(ステップS41,NO)には図7の処理を実行後、上記ステップS42の処理を実行して本処理を終了する(但し、図7の処理において異常終了(ステップS44)となる可能性もある。
尚、ステップS42は正常終了の関数値をセットするものであり、ステップS43はデータ異常の関数値をセットするものであり、ステップS44は異常終了の関数値をセットするものである。
ステップS41の処理では、パラメータとして与えられている、RAM管理テーブル17のRAM時限保証診断不要ビット領域41(番号31=‘11’)のビット情報に基づいて、上記読込対象データの格納領域に関する時限保証診断処理の要/不要を判定する。すなわち、上記ステップS31で求めた上記読込対象データの格納領域のアドレス範囲に基づいて、このアドレス範囲内の各アドレスに対応するRAM時限保証診断不要ビット領域41の各ビット情報を参照し、これらビット情報が全て‘1’であれば「時限保証診断処理は不要」と判定し(ステップS41,YES)そのまま上記ステップS42の処理を実行する。一方、上記ビット情報が全て‘0’であれば、「時限保証診断処理要」と判定し(ステップS41,NO)、図7のステップS45以降の処理へ移行する。
尚、時限保証診断処理の要/不要は、本例ではデータ単位で設定される為、開発者等が設定ミスしない限り、上記読込対象データに対応する各ビット情報は、全て‘1’であるか全て‘0’であるかのどちらかである。本説明では、開発者等が設定ミスするケースは考慮しないものとして説明する。
以下、図7に示すステップS45以降の処理について説明する。
まず、上記読込対象データの格納領域に対応する安全関連データ管理領域21のビット情報群(該当ビット情報群というものとする)の範囲(先頭位置と最終位置)を計算する(ステップS45)。尚、読込対象データの格納領域が1アドレスであった場合、先頭位置=最終位置となる。また、この場合、厳密にはビット情報群ではなくビット情報となるが、特に区別せず説明するものとする。
上記該当ビット情報群の範囲における上記先頭位置は、以下の計算式(1)の商と余りから得られる。
尚、安全関連データ管理領域21における各ビット情報の位置は、後述するように「アドレス(番地)におけるアドレス内相対ビット数α(α;0〜7)」(アドレス(番地)における+α)で表すものとする。
(安全関連データ領域の先頭アドレスからの相対バイト数)/8 ・・・(1)式
上記「安全関連データ領域の先頭アドレスからの相対バイト数」は、上記パラメータの読込アドレス(読込対象データの格納領域の先頭アドレス)から上記ステップS31で取得した安全関連データ領域22の先頭アドレスを差し引くことで求められる。例えば、上記パラメータの読込アドレスが7002番地であったならば、本例では安全関連データ領域22の先頭アドレスは7000番地であるので、上記「安全関連データ領域の先頭アドレスからの相対バイト数」=7002−7000=0002となる(アドレスは1バイト単位なので、“先頭アドレスからの相対バイト数”は“先頭アドレスからの相対アドレス”と考えてよい)。
上記計算式(1)の商が安全関連データ管理領域21の先頭からの相対アドレスになり、余りが当該アドレス内の先頭からの相対ビット数(先頭から何番目のビットか;上記の通り、ここでは先頭ビットは先頭から0番目と定義する)になる。つまり、商をm、余りをnとするならば、上記(1)式で求める位置は「m番地における+n」となる(このnは上記αに相当し、よって0〜7の何れかの値となる)。
上記「m番地における+n」は安全関連データ管理領域21の先頭からの相対位置を意味するので、これを絶対位置に変換する。つまり、例えば、安全関連データ管理領域21の先頭アドレス=3000番地であるならば、上記(1)式で求めた位置の絶対位置は“(3000+m)番地における+n”となる。
図4に示す安全関連データ管理領域21のビット情報群は、実際には図3に示すようにバイト単位で格納されており、1バイト分のビット情報群は、安全関連データ領域22の8バイト分に対応するものである。
例えば、図4に示す例では安全関連データ管理領域21は3000番地から始まり、安全関連データ領域22は7000番地から始まる。この例において、例えば3000番地のビット情報群(1バイト)は、7000番地〜7007番地に対応する情報である。同様に、3001番地のビット情報群(1バイト)は、7008番地〜700F番地に対応する情報である。そして、安全関連データ管理領域21の各ビット情報の位置は、「アドレス(番地)における+相対ビット数α(α;0〜7)」で表されるものとする。このαが上記“アドレス内の先頭からの相対ビット数”に相当する。
これより、例えば、位置「3000番地における+0」のビット情報は7000番地に対応するビット情報であり、位置「3000番地における+7」のビット情報は7007番地に対応するビット情報であり、位置「3001番地における+0」のビット情報は7008番地に対応するビット情報であることになる。各ビット情報は、それが対応する安全関連データ領域22のアドレスに関して診断完了か未完了かを示すものとなる。
この例において、上記パラメータの読込アドレスが7009番地であったならば、上記「安全関連データ領域の先頭アドレスからの相対バイト数」=9となるので、上記(1)式の商=1、余り=1となり、よって上記ステップS45で求める先頭位置は「3001番地における+1」(α=1)となる。つまり、3001番地における先頭から1番目のビット位置となる。また、ステップS45で求める最終位置は、上記のように求めた先頭位置におけるαに上記パラメータにおける読込データバイト数(仮にβとする)をプラスしてから−1デクリメントすればよい。つまり、“α+(β−1)”を最終位置のαとすればよい。上記の例において仮にβ=3であったならば、最終位置は「3001番地における+3」となる。
尚、“α+(β−1)”>7であったならば、番地を+1して、「“α+(β−1)”
−8」を最終位置のαとすればよい。上記の例において仮にβ=9であったならば、最終位置は「“3001+1”番地における+(“1+(9−1)”−8)」=「3002番地における+1」となる。
次に、RAM管理テーブル17から安全関連データ管理領域21の先頭アドレスと最終アドレス(アドレス範囲)を読込む(ステップS46)。
そして、ステップS45で計算したアドレス範囲が、ステップS46で読み込んだアドレス範囲内に入っているか否かをチェックする(ステップS47)。範囲内に入っていればチェックOKとして(ステップS47,YES)ステップS48以降の処理へ移行する。一方、ステップS45で計算したアドレス範囲の一部でも、ステップS46で読み込んだアドレス範囲外であったならば、チェックNGとして(ステップS47,NO)、上記異常終了(ステップS44)とする。
上記チェックOKの場合、安全関連データ管理領域21において上記ステップS45で求めた範囲内の全ビット情報をON‘1’する(ステップS48)。これは、例えば、上記ステップS45で計算した先頭位置から後ろ(下位)に上記パラメータの読込バイト数分オンする等であってもよい。上記の例では、先頭位置=「3001番地における+1」であり、例えば上記β=3の例の場合には、「3001番地における+1」、「3001番地における+2」、「3001番地における+3」(=最終位置)の3つのビット情報がONになる。
次に、ステップS45で計算した範囲の先頭位置、最終位置をそれぞれ反転することで、反転安全関連データ管理領域25における該当ビット情報群の位置範囲を求める。すなわち、上記読込対象データの反転データの格納領域に対応するビット情報群の位置範囲(先頭位置、最終位置)を求める(ステップS49)。尚、この位置範囲を反転範囲、その先頭位置を反転先頭位置、最終位置を反転最終位置というものとする。
上記の例では、先頭位置=「3001番地における+1」なのでこれを反転した反転先頭位置は「CFFE番地における+6」となる。同様に、最終位置=「3001番地における+3」なのでこれを反転した反転最終位置は「CFFE番地における+4」となる。尚、位置「番地における+α」のαの部分に関しては、“反転位置のα”=「7−α」となる(つまり、番地だけでなく番地内におけるビットの順番も反転する)。尚、これによって、反転位置は、上記の通り、反転最終位置(CFFE番地における+4)の方が反転先頭位置(CFFE番地における+6)よりも先となる(これより後述するステップS52では、上記ステップS48のような“下位”ではなく、“上位”となる)。
次に、RAM管理テーブル17から反転安全関連データ管理領域先頭アドレス(番号31=‘9’)と反転安全関連データ管理領域最終アドレス(番号31=‘10’)を読込む(ステップS50)。そして、ステップS49で得た位置範囲(反転先頭位置〜反転最終位置)が、反転安全関連データ管理領域25内に入っているか(上記ステップS50で読み込んだアドレス範囲内に入っているか)否かを判定する(ステップS51)。
領域25内に入っていればチェックOKとして(ステップS51,YES)ステップS52の処理を行う。一方、ステップS49で得たアドレス範囲の一部でも領域25外である場合にはチェックNGとして上記ステップS44の異常終了とする。
ステップS52では、反転安全関連データ管理領域25において、上記ステップS49で得た位置範囲内の全ビット情報をオフ(0)する。これは、ステップS49で得た反転先頭位置から前(上位)に上記パラメータの読込バイト数分オンする等であってもよい。上記の例では、「CFFE番地における+6」、「CFFE番地における+5」、「CF
FE番地における+4」の3つのビット情報がOFFになる。
このようにして、反転安全関連データ管理領域25において、上記読込対象データの反転データの格納領域に対応するビット情報群が全てビットOFFとなる。上述してあるように、これは、診断済み(完了)を意味する。
ステップS52の処理後は、上記ステップS42の正常終了となる。
尚、ステップS48〜S52の処理の間は、レベルマスクなどにより排他制御をする。また、ステップS45以降の処理ではRAMの当該アドレスの読込を条件に診断完了ビットをオンしているが、書込と読込のAND条件で診断完了ビットをオンすることにしても良い。
次に、以下、診断時限保証処理部13’の処理について説明する。
図8、図9は診断時限保証処理部13’(診断時限保証タスク13)による処理フローチャート図である。尚、これは、1つのフローチャート図を2つの図面に分けて示しているものである。
尚、本処理は、RAM20の診断間隔として定義した所定時間毎に起動する。ここでは、仮に、診断間隔=1時間と定義したなら、1時間経過する毎に起動する。そして、図8、図9の処理によって、この1時間内に診断処理が行われていない記憶領域について、診断処理を実行することになる。この1時間内の任意のときに既に診断処理が行われている記憶領域については、本処理では診断処理は行わない。つまり、ダブルRAMアルゴリズムを用いるRAM診断手法において、故障確率を減少させる為のRAM診断間隔の時間保証を実現できると共に、無駄な処理が行われないので、処理負荷や処理時間の増大を招くことはない。
尚、本処理は、安全関連アプリケーション15の処理より優先レベルの高いタスクレベルで動作する。
まず、図8に示すように、本処理に必要な各種データを読み込む(ステップS61)。すなわち、安全関連データ管理領域21の先頭アドレス(番号31=‘1’)と最終アドレス(番号31=‘2’)を、RAM管理テーブル17から読込む。また、反転安全関連データ管理領域25の先頭アドレス(番号31=‘9’)と最終アドレス(番号31=‘10’)を、RAM管理テーブル17から読込む。更に、RAM管理テーブル17におけるRAM時限保証診断不要ビット領域41(番号31=‘11’)の先頭アドレスを読込む。
そして、上記読み込んだ各領域(21、25、テーブル17の番号31=‘11’)の相互に対応するデータ同士を用いて、以下のステップS62,S63の所定の確認処理を行う。これは、上記先頭アドレス/最終アドレスに基づいて、各領域の先頭/最後から順に、各番地毎に(1バイト単位で)所定の確認処理を行うものである。安全関連データ管理領域21とRAM時限保証診断不要ビット領域41に関してはその先頭番地から順に、反転安全関連データ管理領域25に関してはその最終番地から順に、その番地の(1バイト分の)データを取得して、取得したデータに基づいてステップS62〜S64の処理を実行する。
これを安全関連データ管理領域21の最終番地の処理実行するまで(ステップS65がYESになるまで)繰り返し実行する。つまり、ステップS65がNOの場合、ステップS66で今回の上記所定の確認処理等の処理対象であった番地の次の番地を求めて(番地=番地+1)(但し、領域25に関しては前の番地(番地=番地−1))、これについてステップS62〜S64の処理を実行する。
尚、上述した一例では、安全関連データ管理領域21の先頭アドレスは3000番地なので、最初はこの3000番地の1バイトのデータ(「3000番地における+0」〜「3000番地における+7」のデータ;診断管理情報というものとする)を取得する。また、この例では反転安全関連データ管理領域25の最終アドレスはCFFF番地となるので、最初はこのCFFF番地の1バイトのデータ(「CFFF番地における+0」〜「CFFF番地における+7」のデータ;反転診断管理情報というものとする)を取得する。但し、反転診断管理情報は、上記の通り、ビット順が逆になっているので(つまり、例えば「3000番地における+0」に対応するのは「CFFF番地における+7」となっている)、これを元に戻す。つまり、「CFFF番地における+7」のデータが先頭で「CFFF番地における+0」のデータが最後になるように反転診断管理情報を並び替える。
上記の例では安全関連データ領域22の最初の8バイト分の記憶領域(7000番地〜7007番地)を、今回の処理対象領域として、これに関する所定の確認処理を実行し、診断未実施のアドレスがある場合には診断処理を実行するものとなる。
また、RAM時限保証診断不要ビット領域41に関しては、上述した説明では具体的な番地例は述べていないが、ここでは仮に4000番台であるものとする。よって、最初は4000番地の1バイトのデータを取得する(診断要/不要情報というものとする)。これも上記3000番地の例と同様、上記7000〜7007番地の8バイト分の安全関連データに関する診断要/不要情報であることになる。
以下の説明では、上記具体例に基づいて説明するが、他のアドレスに関しても同様の処理が行われることになる。
まず、ステップS62の処理について説明する。この処理では、まず、上述した反転診断管理情報の並び替え処理を行う。続いて、並び替えた後の反転診断管理情報を反転させる。例えば、反転診断管理情報=「11110001」であったならば、並び替えた後の反転診断管理情報=「10001111」となり、この反転データは「01110000」となる。そして、この反転データを上記診断管理情報と比較照合し、一致することを確認する(ステップS62)。異常が無ければ一致するはずであるので、もし不一致の場合には(ステップS62,NO)RAM異常アプリケーション処理を実行する(ステップS67)。この処理については特に説明しないが、RAM異常検出時に実行される所定の処理である。
一方、一致する場合には(ステップS62,YES)、続いてステップS63の処理を実行する。
ステップS63の処理では、まず、上記診断管理情報と上記診断要/不要情報とのEOR(排他的論理和)を求める。そして、このEORがFF(16進)となるか否かを確認する。EORがFF(16進)であることは(ステップS63,YES)、定義した所定時間内に(本処理が行われるまでに)処理対象の記憶領域全ての診断が実施済みであることを示す。よって、この記憶領域について再度診断処理を行う必要なく、ステップS64を経て、次の記憶領域を処理対象として同様の処理を行う。
尚、ここでは1バイト単位でEORチェックする例を示すが、当然、この様な例に限るものではなく、例えば適用するCPUで最適に実行できるバイト数単位で確認すればよい。
ステップS63の処理では、上記診断管理情報と上記診断要/不要情報の各ビット毎のEORを行い、全てが‘1’(EOR結果=‘11111111’)となるか否かを確認する。よく知られているように、EORは、両方とも0または両方とも1の場合には0と
なり、どちらか一方が1で他方が0の場合には1となる。つまり、例えば図10に示す例のように(尚、この例では簡単の為、1バイト(=8ビット)ではなくそのうちの半分(4ビット)を示している)、上記診断管理情報=「1100」、上記診断要/不要情報=「1010」であったならば、EORは「0110」となり、ステップS63の判定はNOとなる。
図10に示すように、“診断要”且つ“完了”の場合または“診断不要”且つ“未完了”の場合にEORは‘1’となるので、全てがこれら2つ場合の何れかである場合にはEOR結果=FFとなり、ステップS63の判定はYESとなる。この場合には安全関連データ管理領域21、反転安全関連データ管理領域25それぞれの今回の処理対象領域のビット情報を初期化することで(ステップS64)、今回の処理対象領域に関する処理は終了する。そして、上記の通り、ステップS65の判定を行い、判定NOならば上記ステップS66の処理を行って、次の処理対象領域について上記と同様、ステップS62〜S64の処理を実行する。
尚、上記初期化は、安全関連データ管理領域21に関してはビットOFF(0)、反転安全関連データ管理領域25に関してはビットON(1)するものである。
上記ステップS64の初期化処理により、安全関連データ管理領域21における上記処理対象領域(8バイト)に対応するビット情報群(1バイト分;本例では先頭アドレスのビット情報群)は初期値‘00’(16進)になり、反転安全関連データ管理領域25における上記処理対象領域(8バイト)に対応するビット情報群(1バイト分;本例では最終アドレスのビット情報群)は初期値‘FF’(16進)になる。
一方、1バイトのうち1ビットでもEORが‘0’となったならば(FFにならなかったならば)、図9のステップS68以降の処理を実行する。
ここで、EORが‘0’となるのは、図10に示す通り、“診断不要”且つ“完了”の場合または“診断要”且つ“未完了”の場合であるが、前者(“診断不要”且つ“完了”)のケースは通常あり得ないものである。つまり“診断不要”であるならば上記ステップS41がYESとなるので、そのままステップS42の処理が行われ、従ってステップS48の処理(完了ビットON)は行われていないので、“未完了”となっているはずであり、“完了”となることは通常はあり得ない(矛盾している;処理に何らかの異常が生じていると考えられる)。
よって、前者のケースになっていないかをステップS68で確認する。ステップS69以降の処理は、後者(“診断要”且つ“未完了”)の場合に対応して実行する処理である。
ステップS68では、上記診断管理情報と上記診断要/不要情報とのANDを求める。これにより、図10に示す通り、上記EORが‘1’となるケース、及び上記後者のケースでは、AND結果は0となる。一方、上記前者のケースではAND結果は1となる。よって、異常がなければAND結果は‘00’(16進)となり、ステップS68の判定はYESとなり、ステップS69以降の処理を実行することになる。
しかし、1ビットでも前者のケースがあれば、AND結果は‘00’(16進)にはならないので、ステップS68の判定はNOとなり、ステップS76の処理を行う。この場合は、関数等による処理に異常があったと考えられるので、処理異常アプリケーション処理を実行する(ステップS76)。この処理についてはここでは関係ないので特に説明しない。
以下、ステップS69以降の処理について説明する。
まず、RAM管理テーブル17から安全関連データ領域先頭アドレス(番号31=‘3’)と安全関連データ領域最終アドレス(番号31=‘4’)を読込む。更に、RAM管理テーブル17から反転安全関連データ領域先頭アドレス(番号31=‘7’)と反転安全関連データ領域最終アドレス(番号31=‘8’)を読込む(ステップS69)。これらにより安全関連データ領域22、反転安全関連データ領域24それぞれのアドレス範囲が分かるので、これを後のステップS71のアドレス範囲チェック処理の際に用いる。
ステップS70以降の処理は、上記「“診断要”且つ“未完了”」(EORが0でANDが0)であるビット全てを処理対象とし、当該処理対象ビットに関して1つずつ、そのビットに対応する安全関連データ記憶領域等に関して、ステップS72〜ステップS74の診断処理を実行する。全ての処理対象ビットに関して上記処理を完了したならば(ステップS75,YES)上記ステップS64の処理へ移行し、上記初期化処理を行う。未だ、全ての処理対象ビットに関して処理していないならば(ステップS75,NO)ステップS70に戻り、次の処理対象ビットに関する処理を実行する。但し、途中でステップS71のチェック処理でNGとなったならば、ステップS76の処理を実行し、本処理は終了する。
まず、ステップS70では、任意の1つの処理対象ビットに関して、この処理対象ビットに対応する安全関連データ領域アドレスと反転安全関連データ領域アドレスを算出する。
安全関連データ領域アドレスの算出式は、上記処理対象ビットの安全関連データ管理領域先頭アドレスからの相対アドレスをP、当該アドレス内相対ビット数(上記αに相当)をQとして、以下の算出式(2)となる。
安全関連データ領域先頭アドレス+P×8+Q (2)式
反転安全関連データ領域アドレスは、上記算出した安全関連データ領域アドレスを反転させればよい。
例えば、上記処理対象ビットの位置が「3001番地における+3」であったならば、上記の通り本例では安全関連データ管理領域先頭アドレスは3000番地であるので、上記相対アドレスPは0001となり、上記Qは3となる。また、上記の通り本例では安全関連データ領域先頭アドレスは7000番地である。よって、安全関連データ領域アドレスは、7008+3=「700B番地」となる。そして、反転安全関連データ領域アドレスは、「8FF4番地」となる。
そして、上記ステップS70で求めた安全関連データ領域アドレス、反転安全関連データ領域アドレスが、上記ステップS69で得た安全関連データ領域22、反転安全関連データ領域24それぞれのアドレス範囲内であるか否かをチェックする(ステップS71)。
もし、範囲内でない場合には(ステップS71,NO)、上記ステップS76の処理を実行して、本処理は終了する。
一方、範囲内であった場合には(ステップS71,YES)、上記ステップS70で求めた安全関連データ領域アドレス、反転安全関連データ領域アドレスの各記憶領域に対して、例えば、上記ダブルRAMアルゴリズムによる診断を行う。尚、当該アドレスに対しダブルRAMアルゴリズム以外の診断アルゴリズム適用しても良い。
すなわち、まず、安全関連データ領域22における上記ステップS70で算出した安全関連データ領域アドレスのデータをレジスタに退避させ、当該アドレスに任意のテストデ
ータを書き込む。また同様に、反転安全関連データ領域24における上記ステップS70で算出した反転安全関連データ領域アドレスのデータ(反転データ)をレジスタに退避させ、当該アドレスに反転テストデータ(上記テストデータを反転したもの)を書き込む(ステップS72)。
次に、上記安全関連データ領域アドレスからデータ(テストデータ)を読込み、上記ステップS72でレジスタに退避させていたデータを当該アドレスに復帰させる(当該アドレスに書き込む)。同様に、上記反転安全関連データ領域アドレスからデータ(反転テストデータ)を読込み、上記ステップS72でレジスタに退避させていた反転データを当該アドレスに復帰させる(当該アドレスに書き込む)(ステップS73)。
上記ステップS73で読み込んだ反転テストデータを反転させ、これが上記ステップS73で読み込んだテストデータと一致するか否かをチェックする(ステップS74)。不一致の場合には(ステップS74,NO)、上記ステップS67の処理(RAM異常アプリケーション処理)を実行して本処理を終了する。一方、一致した場合には(ステップS74,YES)、上記の通りステップS75の判定を行い、全ての処理対象ビットについて処理完了したら(ステップS75,YES)、上記ステップS64の処理へ移行する。
この様にして、RAM20における安全関連データに係る記憶領域において、診断未実施の記憶領域に関して診断処理を実行する。ステップS75でYesになった時点では、RAM20における安全関連データに係る記憶領域の全てのアドレスについて、上記所定時間内に最低1回は診断処理が行われていることになる。
以下、図11、図12、図13を参照して、非安全関連データ読み書き部14’の処理、安全関連アプリケーション部15’の処理、非安全関連アプリケーション部16’の処理について説明するが、これらの処理は本手法の特徴には直接的には関係しないので、簡単に説明するものとする。
まず、図11は、非安全関連データ読み書き部14’(非安全関連データ読み書き関数14)の処理フローチャート図である。
図11の処理のパラメータ(入力)は、下記の通りである。
・データ番号(書込む/読込むデータのデータ番号)
・書込/読込データアドレス(アクセス先領域の先頭アドレス)
・書込データ(書き込み処理の場合のみ)
・書込/読込データバイト数
・書込/読込種別(これにより、書込/読込を識別する)
下記を復帰値とする。
・読込データ(読込み処理の場合のみ)
下記を関数値とする。
・正常終了/異常終了
尚、当該非安全関連データ読み書き関数14は、非安全関連アプリケーション16のプログラム内にインライン展開する。これによりRAM20のスタック領域を使用しないようにする。
図11の処理では、まず、RAM管理テーブル17から非安全関連データ領域先頭アドレス(番号31=‘5’)と非安全関連データ領域最終アドレス(番号31=‘6’)を読込む。これにより非安全関連データ領域23のアドレス範囲が分かる。また、上記パラメータの書込/読込データアドレスと書込/読込データバイト数とから、アクセス先領域のアドレス範囲を求める(ステップS81)。これはステップS11等と略同様の処理であり特に説明しない。
上記アクセス先領域のアドレス範囲が、上記非安全関連データ領域23のアドレス範囲内に入っているか否かをチェックする(ステップS82)。もし、範囲内に入っていないならばチェックNGとし(ステップS82,NO)、異常終了とする(ステップS88)。例えば、何らかの異常等で非安全関連アプリケーション部16’の処理で安全関連データ領域22にアクセスしようとしても、上記ステップS82のチェックでNGとなり、アクセスできない。
範囲内に入っている場合にはチェックOKとし(ステップS82,YES)、続いて、上記パラメータのデータ番号に対応するデータバイト数44を上記「データ番号・データバイト数」42から求め、これが上記パラメータの書込/読込データバイト数と一致するか否かを判定する(ステップS83)。不一致の場合にはチェックNGとし(ステップS83,NO)上記ステップS88の処理を行う。
一方、一致する場合にはチェックOKとし(ステップS83,YES)、その後は上記パラメータの書込/読込種別に基づき処理を分岐させる。すなわち、書込みである場合には(ステップS84,YES)ステップS85の処理を実行し、正常終了とする(ステップS87)。一方、読込みの場合には(ステップS84,NO)ステップS86の処理を実行し、正常終了とする(ステップS87)。
ステップS85の処理では、上記パラメータの書込データを、上記パラメータの書込/読込データアドレスと書込/読込データバイト数に従ってアクセス先領域に書き込む。尚、書込中はレベルマスクなどにより排他制御をする。
また、ステップS86の処理では、上記パラメータの書込/読込データアドレスと書込/読込データバイト数に従ってアクセス先領域からデータを読み込む。読込中はレベルマスクなどにより排他制御をする。
尚、上記ステップS87は正常終了を関数値として終了するものであり、上記ステップS88は異常終了を関数値として終了するものである。
次に、図12を参照して、安全関連アプリケーション部15’(安全関連アプリケーション15)の処理について説明する。
尚、図12に示すステップS92、S96の処理に係る関数(安全関連データ読込関数、安全関連データ書込関数)は、当該安全関連アプリケーション15のプログラム内にインライン展開する。これによりRAM20のスタック領域を使用しないようにする。
尚、安全関連データ書込関数11に渡すパラメータは、下記の通りであり、定数は設計時に設計者等が任意に決定してプログラムコード内に記述する。
・データ番号(定数)
・書込アドレス(定数)
・書込データ
・書込データバイト数(定数)
関数値
・正常終了/異常終了
また、安全関連データ読込関数12に渡すパラメータは下記の通りであり、定数は設計時に設計者等が任意に決定してプログラムコード内に記述する。
・データ番号(定数)
・読込アドレス(定数)
・読込データバイト数(定数)
・RAM管理テーブルのRAM時限保証診断不要ビット情報(定数)
復帰データ
・読込データ
関数値
・データ正常/データ異常/異常終了
尚、これら各関数の処理に関しては、既に説明してあり、ここでは説明しない。
図12において、安全関連アプリケーション部15’は所定のアプリケーション処理を実行し(ステップS91)、このアプリケーション処理に係り安全関連データをRAM20から読込むイベントが発生した場合には上記安全関連データ読込関数12を呼び出す(ステップS92)。これによって、上述した図6、図7の処理が実行されることになる。そして、上記の通り、データ正常/データ異常/異常終了の何れかの関数値が返されてくるので、正常終了の場合以外は(ステップS93,NO)終了情報を設定し(ステップS99)、所定の処理(処理異常アプリケーション処理)を実行し(この処理については特に説明しない)(ステップS100)、本処理は終了する。
正常終了の場合(ステップS93,YES)上記アプリケーション処理を続行し(ステップS94)、処理中に安全関連データをRAM20に書き込むイベントが発生した場合には上記パラメータ(書込データ等)を設定して(ステップS95)、上記安全関連データ書込関数11を呼び出す(ステップS96)。これにより上述した図5の処理が実行されることになる。尚、図示していないが、パラメータの設定は上記ステップS92の処理の際にも行っている。
そして、上記の通り、正常終了/異常終了どちらかの関数値が返されてくるので、異常終了であったならば(ステップS97,NO)上記ステップS99、S100の処理を実行し、正常終了であったならば(ステップS97,YES)上記アプリケーション処理を続行する(ステップS98)。図示していないが、その後も、アプリケーション処理実行中に、RAM20に対する安全関連データの読込/書込イベントが発生する毎に、上述した関数呼び出しの処理が行われ、アプリケーション処理が最後まで実行されたら本処理は終了する。
次に、図13を参照して、非安全関連アプリケーション部16’(非安全関連アプリケーション16)の処理について説明する。
尚、図13に示すステップS112、S116の処理に係る関数(非安全関連データ読み書き関数14)は、当該非安全関連アプリケーション16のプログラム内にインライン展開する。これによりRAM20のスタック領域を使用しないようにする。
尚、非安全関連データ読み書き関数14へのパラメータは、下記の通りであり、定数は設計時に設計者等が任意に決定してプログラムコード内に記述する。
・データ番号(定数)
・書込/読込データアドレス(定数)
・書込データ
・書込/読込データバイト数(定数)
・書込/読込種別(定数)
復帰値
・読込データ
関数値
・正常終了/異常終了
図13において、所定のアプリケーション処理実行し(ステップS111)、当該処理実行に係り非安全関連データをRAM20から読込むイベントが発生した場合には、非安
全関連データ読み書き関数14を呼び出す。その際、上記パラメータ(書込データは除く)を設定することで当該パラメータを関数14に渡す。これより、上記図11の処理が実行される(ステップS112)。
そして、上記の通り、正常終了/異常終了どちらかの関数値が返されてくるので、異常終了であったならば(ステップS113,NO)、終了情報を設定し(ステップS119)、所定の処理(処理異常アプリケーション処理)を実行し(この処理については特に説明しない)(ステップS120)、本処理は終了する。
一方、正常終了であったならば(ステップS113,YES)上記アプリケーション処理を続行する(ステップS114)。そして、当該処理実行に係り非安全関連データをRAM20に書き込むイベントが発生した場合には、非安全関連データ読み書き関数14を呼び出す。その際、上記パラメータ(書込データも含む)を設定することで当該パラメータを関数14に渡す(ステップS115)。これより、上記図11の処理が実行される(ステップS116)。
そして、上記の通り、正常終了/異常終了どちらかの関数値が返されてくるので、異常終了であったならば(ステップS117,NO)上記ステップS119、S120の処理を実行し、正常終了であったならば(ステップS117,YES)上記アプリケーション処理を続行する(ステップS118)。図示していないが、その後も、アプリケーション処理実行中に、RAM20に対する非安全関連データの読込/書込イベントが発生する毎に、上述した関数呼び出しの処理が行われ、アプリケーション処理が最後まで実行されたら本処理は終了する。
以上説明した処理は一例であり、この例に限るものではない。例えば、RAM時限保証診断不要ビット領域41はなくてもよい。この場合における診断時限保証タスク13の処理は、安全関連データ管理領域21において‘0’(未完了)であるビットは全て、図9のステップS69〜S75の処理の処理対象にすればよい。これにより、安全関連データ領域22(反転安全関連データ領域24も同様)内において、診断時限保証タスク13の処理実行時までに自己診断処理が未実施の領域があった場合には、この領域に関して診断処理が行われるので、RAM診断間隔の時間保証を実現できる。これによって、故障発生確率を減少させることができる。
以上説明したように、本手法によれば、自己診断率の高いダブルRAMアルゴリズムを用いるRAM診断装置に係り、安全関連データに係る領域内の各記憶領域(アドレス)毎に対応して診断済みか否かが記録されるRAM診断完了ビット領域45と、故障確率を減少させる為の所定の診断間隔で処理実行する診断時限保証タスク13とにより、処理負荷や処理時間の増大を招くことなく、RAM診断間隔の時間保証を実現できる(故障確率を減少させることができる)。
つまり、診断時限保証タスク13は、その処理実行の際にRAM診断完了ビット領域45を参照することで自己診断が未実施の記憶領域(アドレス)を識別できるので、この診断未実施の記憶領域(アドレス)に対してのみRAM診断処理を行うことができる。これによって、既に診断済みの記憶領域についてまでRAM診断処理を行ってしまうことはなく、無駄な処理が生じないので、処理負荷や処理時間の増大を招くことなく、故障確率を減少させる為のRAM診断間隔の時間保証を実現できる。
更に、RAM時限保証診断不要ビット領域41を用いる場合には、予め診断時限保証タスク13による診断処理は不要である(所定時間内に診断が行われるはずである)と考えられる記憶領域(アドレス)に対応するビット情報をON(診断不要)に設定しておき、
このアドレスに関するRAM診断完了ビット領域45の更新処理をバイパスすることで、RAMアクセスのリスク軽減と処理負荷の軽減が可能となる。
また、安全関連データのアクセスを関数化することにより、開発量を削減し(作成コード量を減少させ)、開発でのシステム故障の軽減ができる。また、関数のパラメータは設計時に決定する固定値と動作時に決定するものを明確化し(固定パラメータを明確にする)、予めプログラムコード内に展開することで、可変データを減少させることができ、CPU演算故障やRAM故障によるリスクの軽減と処理の負荷軽減を図ることができる。
また、これらのことにより、ダブルRAMアルゴリズムの診断間隔が保証され、ギャルパットやアブラハムと比較して少ないCPU占有時間でRAMの自己診断が可能となり、CPUのコスト削減も可能となる。
また、同一RAM上に安全関連系のデータと非安全関連系データが混在する場合、RAM上で安全関連データ領域と非安全関連データ領域を空間的に分離し、かつ安全関連データ領域と非安全関連データ領域のアクセスを関数のみでアクセスすること、かつ安全関連データ領域をアクセスする関数と非安全関連データ領域をアクセスする関数を分離しパラメータ構成も異なるものとすること、また、それぞれの関数内でアクセスするデータ領域のチェックをアドレスの範囲とアクセスするデータバイト数によりチェックすることで、非安全関連系データに起因する安全関連系データに影響する従属故障の確率を故障確率より十分小さくすることができ、また非安全関連系を安全関連系から分離するために当該RAMを有する機器に別のCPUとRAMを搭載する必要がなくコストの低減を図ることができる。
1 CPU
10 ROM
11 安全関連データ書込関数
12 安全関連データ読込関数
13 診断時限保証タスク
14 非安全関連データ読み書き関数
15 安全関連アプリケーション
16 非安全関連アプリケーション
17 RAM管理テーブル
20 RAM
21 安全関連データ管理領域
22 安全関連データ領域
23 非安全関連データ領域
24 反転安全関連データ領域
25 反転安全関連データ管理領域
31 番号
32 管理情報
41 RAM時限保証診断不要ビット領域
42 データ番号・データバイト数
43 データ番号
44 データバイト数
45 RAM診断完了ビット領域

Claims (4)

  1. 各種安全関連データがそれぞれ安全関連データ用領域内の所定の1又は複数のアドレスに格納されるRAMに対して、ダブルRAMアルゴリズムによるRAM診断処理を行うRAM診断装置であって、
    前記RAMにおける前記安全関連データ用領域内の前記各アドレス毎に対応して、該アドレスについて前記RAM診断処理を実施済か未実施かを示す管理情報を記憶する管理情報記憶手段と、
    任意の前記安全関連データを前記RAMからリードする処理又は該RAMにライトする処理を行う手段あって、該リード処理の際に、該リードする安全関連データの格納領域に関して前記ダブルRAMアルゴリズムによるRAM診断処理を行うと共に、前記管理情報記憶手段における該RAM診断処理を行った格納領域のアドレスに対応する前記管理情報を、実施済とする安全関連データアクセス処理手段と、
    予め決められた診断間隔で、前記管理情報記憶手段を参照して、未実施となっている管理情報に対応するアドレスに関して、前記ダブルRAMアルゴリズムによるRAM診断処理を行う診断時限保証手段と
    前記RAMにおける前記安全関連データ用領域内の前記各アドレス毎に対応して、予め要/不要情報が登録される要/不要情報記憶手段とを有し、
    前記安全関連データアクセス処理手段は、前記ダブルRAMアルゴリズムによるRAM診断処理を行った格納領域のアドレスに対応する前記要/不要情報が、不要であった場合には、前記対応する管理情報を実施済とする処理は行わず、
    前記診断時限保証手段は、対応する管理情報が未実施となっているアドレスであっても、該アドレスに対応する前記要/不要情報が不要となっている場合には、該アドレスに関しては前記ダブルRAMアルゴリズムによるRAM診断処理は実行しないことを特徴とするRAM診断装置。
  2. 前記RAMには、更に非安全関連データ用領域が存在し、
    安全関連データアクセス処理手段は、前記安全関連データのリード/ライト処理の際、該リード/ライト処理に係るアクセス先領域が前記安全関連データ用領域内であるか否かをチェックし、安全関連データ用領域内では無い場合には該リード/ライト処理を行わないことを特徴とする請求項1記載のRAM診断装置。
  3. 前記RAMには、更に非安全関連データ用領域が存在し、
    前記RAMに対して非安全関連データのリード/ライト処理を行う非安全関連データアクセス処理手段を更に有し、
    該非安全関連データアクセス処理手段は、前記非安全関連データのリード/ライト処理の際、該リード/ライト処理に係るアクセス先領域が前記非安全関連データ用領域内であるか否かをチェックし、非安全関連データ用領域内では無い場合には該リード/ライト処理を行わないことを特徴とする請求項1記載のRAM診断装置。
  4. 各種安全関連データがそれぞれ安全関連データ用領域内の所定の1又は複数のアドレスに格納されるRAMに対して、ダブルRAMアルゴリズムによるRAM診断処理を行うRAM診断装置のコンピュータを、
    前記RAMにおける前記安全関連データ用領域内の前記各アドレス毎に対応して、該アドレスについて前記RAM診断処理を実施済か未実施かを示す管理情報を記憶する管理情報記憶手段と、
    前記RAMにおける前記安全関連データ用領域内の前記各アドレス毎に対応して、予め要/不要情報が登録される要/不要情報記憶手段と、
    任意の前記安全関連データを前記RAMからリードする処理又は該RAMにライトする処理を行う手段あって、該リード処理の際に、該リードする安全関連データの格納領域に関して前記ダブルRAMアルゴリズムによるRAM診断処理を行うと共に、前記管理情報記憶手段における該RAM診断処理を行った格納領域のアドレスに対応する前記管理情報を実施済とするが該アドレスに対応する前記要/不要情報が不要であった場合には該実施済とする処理は行わない安全関連データアクセス処理手段と、
    予め決められた診断間隔で、前記管理情報記憶手段を参照して、未実施となっている管理情報に対応するアドレスに関して、前記ダブルRAMアルゴリズムによるRAM診断処理を行うが、該未実施となっている管理情報に対応するアドレスに対応する前記要/不要情報が、不要となっている場合には該ダブルRAMアルゴリズムによるRAM診断処理は実行しない診断時限保証手段、
    として機能させる為のプログラム。


JP2009175917A 2009-07-28 2009-07-28 Ram診断装置、そのプログラム Active JP5453984B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2009175917A JP5453984B2 (ja) 2009-07-28 2009-07-28 Ram診断装置、そのプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2009175917A JP5453984B2 (ja) 2009-07-28 2009-07-28 Ram診断装置、そのプログラム

Publications (2)

Publication Number Publication Date
JP2011028657A JP2011028657A (ja) 2011-02-10
JP5453984B2 true JP5453984B2 (ja) 2014-03-26

Family

ID=43637298

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009175917A Active JP5453984B2 (ja) 2009-07-28 2009-07-28 Ram診断装置、そのプログラム

Country Status (1)

Country Link
JP (1) JP5453984B2 (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6145345B2 (ja) * 2013-07-22 2017-06-07 日立オートモティブシステムズ株式会社 自動車用電子制御装置
US10438679B2 (en) 2015-03-10 2019-10-08 Mitsubishi Electric Corporation Memory diagnosis apparatus and memory diagnosis program
JP6157704B2 (ja) * 2016-09-05 2017-07-05 株式会社ユニバーサルエンターテインメント 遊技機

Family Cites Families (4)

* 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 メモリチェック方式
JP3578638B2 (ja) * 1998-08-25 2004-10-20 株式会社日立ユニシアオートモティブ マイコン用メモリの診断装置
JP2004227488A (ja) * 2003-01-27 2004-08-12 Denso Corp 電子装置
JP2009087133A (ja) * 2007-10-01 2009-04-23 Fuji Xerox Co Ltd 画像処理装置およびメモリ診断プログラム

Also Published As

Publication number Publication date
JP2011028657A (ja) 2011-02-10

Similar Documents

Publication Publication Date Title
KR100316981B1 (ko) 플래시 메모리를 구비한 마이크로컴퓨터 및 플래시 메모리에 프로그램을 저장하는 방법
US7890800B2 (en) Method, operating system and computing hardware for running a computer program
CN107463516B (zh) 控制装置
JP5045584B2 (ja) プログラム書き換え装置
JP5464128B2 (ja) Ram故障診断装置、そのプログラム
JP5453984B2 (ja) Ram診断装置、そのプログラム
US10366018B2 (en) Control apparatus with access monitoring unit configured to request interrupt process
US10108469B2 (en) Microcomputer and microcomputer system
US8255769B2 (en) Control apparatus and control method
JP4941954B2 (ja) データエラー検出装置およびデータエラー検出方法
US20170052850A1 (en) Numerical controller
JP6708596B2 (ja) 電子制御装置及び制御プログラム検証方法
EP3955112A1 (en) Method and apparatus for memory error detection
JP4851525B2 (ja) データ処理システムおよびその駆動方法
JP2012226604A (ja) 半導体装置及びそのデータ異常判定方法
WO2023233611A1 (ja) 電子制御装置
JP2011128780A (ja) Ram診断装置、そのプログラム
JP2023104466A (ja) 車載電子制御装置、及びメモリ制御方法
JP2018063599A (ja) 相互監視システム
JP5786702B2 (ja) セキュリティトークン、セキュリティトークンにおける命令の実行方法及びコンピュータプログラム
JP2007064762A (ja) 半導体装置、テストモード制御回路
JP2007148570A (ja) 記憶装置の診断装置および診断方法
CN117894362A (zh) 一次性可编程存储器修改方法、装置和电子设备
JP2016177717A (ja) メモリ制御装置及びメモリ制御方法
JPH1139897A (ja) デジタル記憶手段の記憶データ検査方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20120416

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20130807

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130827

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20131017

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20131210

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20131223

R150 Certificate of patent or registration of utility model

Ref document number: 5453984

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250