以下、図面を参照して本発明の実施の形態について説明する。
図1は、本例のRAM診断装置の構成ブロック図である。
尚、このRAM診断装置は、例えば上述したプログラマブルコントローラシステム(制御システム)におけるコントローラ本体に相当する。上記の通り、コントローラ本体(CPU、RAM等を有する)は、自己診断処理として自己のRAMの診断処理を行うものであり、特にこの様なRAM診断処理に係る構成を図1に示している。勿論、コントローラ本体は診断処理以外の処理(制御処理等)も行っているが、これについては特に図示/説明しない。
図1に示すRAM診断装置は、ハードウェア的にはCPU1、ROM10、RAM20から成る。CPU1は、特に図示しないアドレス線、データ線等を介して、ROM10、RAM20にアクセスして、プログラムの読出し・実行や、データ・リード/ライト処理を行う。
RAM20は、本診断装置による診断対象のメモリである。RAM20に対する診断処理は、CPU1が、ROM10に予め記憶されている各種アプリケーションプログラム(後述する)を読出し・実行することにより実現される。ROM10は、実行形式のプロブラムや固定データを格納するメモリであり、ROMに限らずフラッシュメモリやRAM等であってよい。
ROM10には、上記実行形式のプログラムとして例えば安全関連アプリケーション処理11,RAMテストパターン診断処理12、安全関連データアクセス関数13等が記憶されている。また、ROM10には、RAM管理テーブル14等が格納されている。
上記安全関連データアクセス関数13は、例えば上記安全関連アプリケーション処理11のプログラム内にインライン展開されており、安全関連アプリケーション処理11の実行中に呼び出されて所定の処理を実行する。安全関連データアクセス関数13は、RAM20の安全関連データ領域21内の任意の記憶領域に対して任意のデータをリード/ライトするための関数である。但し、データ・リード/ライトに伴って、上記ダブルRAM方式のRAM診断に係る処理も実行するものであり、反転安全関連データ領域22に対する反転データのリード/ライトも一緒に行うことになる。ライト(書込)時の処理を図4に示し、リード(読込)時の処理を図5に示し、後に説明するものとする。
RAM管理テーブル14は、本方式のRAM診断の管理をするためのテーブルである。
図3(a)、(b)にRAM管理テーブル14のデータ構成例を示す。
図3(a)、(b)に示すように、RAM管理テーブル14は、例えばRAMテストパターン方式診断管理テーブル30、ダブルRAM方式診断管理テーブル40等の複数のテーブルより成るものである。RAMテストパターン方式診断管理テーブル30はRAMテストパターン診断処理12の処理で参照されるテーブルであり、ダブルRAM方式診断管理テーブル40は安全関連データアクセス関数13の処理で参照されるテーブルである。これらのテーブル30,40の詳細については後に説明する。
RAMテストパターン診断処理12は、所定のRAMテストパターンによる診断テストを定周期で実施する為のアプリケーションプログラムである。図6に、RAMテストパターン診断処理12の処理フローチャート図を示し、後に説明する。
安全関連アプリケーション処理11は、安全関連データに係わる処理(各種制御処理や上述した安全機能の処理(例えば非常停止ボタン押下に応じた処理等)等)を実行するアプリケーションプログラムである。図8に安全関連アプリケーション処理11による処理例のフローチャート図を示し、後に説明する。
ここで、CPU1は、上記各アプリケーション/関数を実行することで所定の処理機能を実現することになり、これよりCPU1は図示しないが各種処理機能部を有するものと見做してよく、本説明では以下の通り定義する。
すなわち、図1には示していないが、CPU1は、安全関連アプリケーション処理部11’、RAMテストパターン診断処理部12’、安全関連データアクセス処理部13’の各種処理機能部を有するものである。
CPU1は、安全関連アプリケーション処理11のプログラムを実行することにより上記安全関連アプリケーション処理部11’の処理機能を実現する。同様に、CPU1は、RAMテストパターン診断処理12のプログラムを実行することにより上記RAMテストパターン診断処理部12’の処理機能と実現する。CPU1は、安全関連データアクセス関数13のプログラムを実行することにより上記安全関連データアクセス処理部13’の処理機能を実現する。
尚、上述したように安全関連データアクセス関数13は安全関連アプリケーション11から呼び出されることから、安全関連データアクセス処理部13’は、安全関連アプリケーション処理部11’の処理機能の一部と見做してもよい。
そして、後述する図4、図5は安全関連データアクセス処理部13’の処理フローチャート図、図6はRAMテストパターン診断処理部12’の処理フローチャート図、図8は安全関連アプリケーション処理部11’の処理フローチャート図であると言うこともできる。
次に、図1に示すRAM20について説明する。
RAM20には、安全関連データ領域21、反転安全関連データ領域22等の記憶領域が存在する。
安全関連データ領域21は、各種安全関連データを格納する記憶領域であり、RAM20において特に故障診断を必要とするRAMデータ領域を示す。
ここで、安全関連データとは、例えば制御システムにおいてプログラマブルコントローラ本体が制御対象機器の動作を制御することに関するデータ等であり、特に作業員等の安全に係わるデータである。すなわち、例えば、モータやプレス機の動作の開始/停止を指示することに係るデータである。よって、安全関連データに異常が生じた場合、それによって誤った指示が制御対象機器に送られると、突然、モータやプレス機が動作開始する等して近くにいる作業員に危険が生じる可能性がある。このように、(作業員等の)安全に関連するデータであるから、安全関連データと呼ぶ。
よって、RAM20の記憶領域のなかで特に安全関連データに関する記憶領域(上記安全関連データ領域21)に関しては、異常が発生した場合には確実にかつ早期に検出することが重要である。
尚、特に図示/説明等しないが、RAM20には制御に係るデータであるが安全関連データではないデータ(非安全関連データというものとする)も記憶されていてもよい。同様に、ROM10にはこの様な非安全関連データを用いた制御処理を実行させるプログラムも格納されていてもよい。
また、反転安全関連データ領域22は、上記安全関連データ領域21に格納される安全関連データの反転データが格納される記憶領域である。換言すれば、ダブルRAM方式によるRAM診断処理で必要とする反転データを格納するRAMデータ領域である。尚、反転データに関しては、既に従来技術の課題において説明している。
上述した構成により、本例のRAM診断装置では、RAMテストパターン方式とダブルRAM方式の2種類の診断方式によるRAM診断を実行する。この様な2種類のRAM診断処理を、例えば、図2に示すようにして実行させる。
図2は、本例のRAM診断処理のタスクスケジュールを示す図である。
図2に示す「安全関連アプリケーション処理」は、上記安全関連アプリケーション処理部11’の処理であり、その処理中に上記安全関連データアクセス処理部13’の処理も実行される。つまり、図示の「安全関連アプリケーション処理」では、任意の安全関連データのリード/ライト処理に伴って、この安全関連データの格納領域に対するRAMテスト(ダブルRAM方式によるRAMテスト)が実行される。また、図2に示す「RAMテストパターン診断処理」は、上記RAMテストパターン診断処理部12’によるRAM診断処理である。
図2は、イベント駆動の場合の例であり、「安全関連アプリケーション処理」ではダブルRAM方式によるRAM診断を実施し、「RAMテストパターン診断処理」ではRAMテストパターン方式によるRAM診断を実施する。そして、「RAMテストパターン診断処理」は、「安全関連アプリケーション処理」より低いタスクレベルとしている。従って、「RAMテストパターン診断処理」を実行中であっても「安全関連アプリケーション処理」の処理実行が優先され、「RAMテストパターン診断処理」は処理を一時中断しなければならないことになる。
テストのためにRAMデータを書き変えている間は安全機能を実行できないため、例えばプレス機の緊急停止のイベントが発生し、これに応じた「安全関連アプリケーション処理」を実行する場合に「RAMテストパターン診断処理」が実行中であると問題となる。しかし、本例では上記の通り「RAMテストパターン診断処理」のタスクレベルが低い為、「RAMテストパターン診断処理」を中断して「安全関連アプリケーション処理」が実行されるので、問題を解消できる。
尚、時間駆動の場合、「RAMテストパターン診断処理」は、「安全関連アプリケーション処理」の空き時間に分割して処理する形になる。
図3(a)、(b)に、RAM管理テーブル14の具体例を示す。既に述べたように、RAM管理テーブル14は、例えば図3(a)に示すRAMテストパターン方式診断管理テーブル30、図3(b)に示すダブルRAM方式診断管理テーブル40等の複数のテーブルより成るものである。
図3(a)に示すRAMテストパターン方式診断管理テーブル30には、RAMテストパターン方式による診断処理で必要とする管理データが格納される。当該テーブル30は、図示の“RAMテストパターン方式診断登録領域番号”31、管理データ32から成る。
管理データ32には、RAMテストパターン方式によるRAM診断を行う記憶領域のアドレス範囲(登録領域先頭アドレスと登録領域最終アドレス)が格納される。
“RAMテストパターン方式診断登録領域番号”31は、上記各管理データ32(各診断対象領域のアドレス範囲)に対して任意の管理番号を付与したものであり、本例では図示の通り、番号31は‘1’から連番で付与する。
この様に、RAMテストパターン方式診断管理テーブル30には、RAMテストパターン方式の診断対象となる各記憶領域(アドレス範囲)が、管理番号(登録領域番号31)付きで予め登録されている。尚、以下、上記管理データ32によって示されるアドレス範囲(登録領域先頭アドレスと登録領域最終アドレス)を、登録領域という場合もあるものとする。
ここで、管理データ32で示されているアドレス範囲(登録領域先頭アドレスと登録領域最終アドレス)は、後述するダブルRAM方式診断管理テーブル40で管理されるアドレス範囲を包含しなければならない。すなわち、ダブルRAM方式による診断対象領域は、RAMテストパターン方式によっても診断することで二重に診断する必要がある。当該条件を満たせば上記アドレス範囲(登録領域先頭アドレスと登録領域最終アドレス)は任意に設定してよい。よって例えば、ダブルRAM方式による診断対象領域を含む広範囲の領域を、管理データ32のアドレス範囲としてもよい。
また、図3(b)に示すダブルRAM方式診断管理テーブル40は、“ダブルRAM方式診断ブロック番号”41、管理データ42から成る。
本例のダブルRAM方式診断管理テーブル40には、ダブルRAM方式でのアクセス単位に対応したアドレス範囲を予め登録する。ダブルRAM方式でのアクセス単位は、任意のデータとその反転データのリード・ライトであり、本例の場合は上記安全関連アプリケーション処理部11’の処理に係る各安全関連データとその反転データのリード・ライトである。よって、本例における上記ダブルRAM方式でのアクセス単位に対応したアドレス範囲は、各安全関連データの記憶領域及びその反転データの記憶領域を示すアドレス範囲となる。
これより、図3(b)に示すダブルRAM方式診断管理テーブル40は、各々に上記ダブルRAM方式でのアクセス単位に対応したアドレス範囲が登録された複数のブロックより成り、各ブロックには識別番号(ダブルRAM方式診断ブロック番号41)が割り当てられている。尚、本例では“ダブルRAM方式診断ブロック番号”41は‘1’から連番で設定する(1、2、3、4・・・)。
そして、各ブロック毎に、管理データ42として、安全関連データの記憶領域のアドレス範囲(安全関連データ領域先頭アドレスと安全関連データ領域最終アドレス)、当該安全関連データの反転データの記憶領域のアドレス範囲(反転安全関連データ領域先頭アドレスと反転安全関連データ領域最終アドレス)とが登録されている。
尚、管理データ42が示すアドレス範囲は、必ず、ダブルRAM方式でのアクセス単位と一致させる。すなわち、上記安全関連アプリケーション処理部11’は、各安全関連データへのアクセス時(リード/ライト時)に、上記の通り安全関連データアクセス処理部13’を呼び出すと共にパラメータを渡す。このパラメータには(図4、図5に示しており詳しくは後述するが)アクセス対象の安全関連データの格納領域を示す情報(先頭アドレス、バイト数等)、この安全関連データの反転データの格納領域を示す情報(先頭アドレス、バイト数等)、ブロック番号等が含まれている。
このパラメータが示す上記「格納領域を示す情報」と、上記管理データ42が示すアドレス範囲とが一致するように、安全関連データアクセス処理部13’のパラメータとダブルRAM方式診断管理テーブル40とを作成しておく。但し、メモリ異常等が原因で一致しない状況となる場合があり、後述するチェック処理によって異常検出することになる。以下、更に詳しく説明する。
上記アクセス対象の安全関連データの格納領域は、当然、図1に示す安全関連データ領域21内の一部の記憶領域であり、その反転データの格納領域も当然、図1に示す反転安全関連データ領域22内の一部の記憶領域である。
これら各安全関連データ等の格納領域アドレスは、例えば上記安全関連アプリケーション処理11のプログラム作成者が、任意に決めて(あるいは予め決まっているアドレスを用いて)、当該プログラム内に記述するものであり、更にこの格納領域アドレスをダブルRAM方式診断管理テーブル40に登録しておくものである。すなわち、上記アクセス対象の安全関連データとその反転データの格納領域を示すアドレス範囲を、上記管理データ42の各アドレス範囲として登録しておく。
ここで、この様にして事前に作成されたダブルRAM方式診断管理テーブル40があるならば、上記パラメータとしてはブロック番号等があればよく、ブロック番号を用いて管理テーブル40を検索すれば、アクセス対象の安全関連データ(及びその反転データ)の格納領域が分かることになる。あるいは、逆に、パラメータに格納領域情報が含まれているならばテーブル40を参照しなくてもアクセス対象領域が分かることになる。
これに対して、本手法では、上記の通り、テーブル40を設けると共に、パラメータにはアクセス対象の安全関連データ(及びその反転データ)の格納領域を示す情報も含まれている。これは、後述するように図4、図5の処理においてアドレス範囲チェックを行うことで、安全関連アプリケーション処理11のプログラムやテーブル40を記憶する記憶領域(例えばROM10内の任意の記憶領域)に異常が生じてデータが変化した場合には、これを検出できるようにする為である。
図4や図5の処理におけるパラメータが示す格納領域と、ダブルRAM方式診断管理テーブル40に登録されている格納領域(そのブロック番号41がパラメータのブロック番号と同一である管理データ42が示す各領域)とは、本来は一致していなければならない。不一致の場合には、ROM10等に異常が生じた可能性がある。本手法では、RAMの異常に限らず、この様なROM等の異常も検出できる。
以下、図4、図5を参照して、安全関連データアクセス処理部13’の処理について説明する。図4は安全関連データのライト(書込)処理、図5は安全関連データのリード(読込)処理の処理フローチャート図である。
まず、図4を参照して、安全関連データアクセス処理部13’による安全関連データのライト(書込)処理について説明する。
上述したように、安全関連データアクセス処理部13’には、安全関連アプリケーション処理部11’から呼び出される際にパラメータが与えられる。ライト(書込)処理の際には、図4に示すように、パラメータとして、書込先頭アドレス、反転書込先頭アドレス、書込データ、書込データバイト数、管理テーブルブロック番号が与えられる。尚、パラメータには、更に、ライト(書込)処理であるのかリード(読込)処理であるのかを示す情報等も含まれていてもよい。また、書込データは、書込先頭アドレスと書込データバイト数とによって示される記憶領域に書き込むべき、任意の安全関連データである。
管理テーブルブロック番号は、図3(b)のダブルRAM方式診断管理テーブル40のダブルRAM方式診断ブロック番号41に相当する番号である。また、図4の処理の処理結果としてのレジスタ渡し関数値は、“正常終了”または“異常終了”となる。
本処理は、基本的に、上記パラメータの書込データを上記書込先頭アドレス及び書込データバイト数によって示される領域に書き込むと共に、上記書込データの反転データを、上記反転書込先頭アドレス及び書込データバイト数によって示される領域に書き込む。そして、書き込んだ書込データ及びその反転データに基づくRAM診断を行う。更に、上記パラメータの管理テーブルブロック番号等を用いたROM10等のチェックも行う。
図4の処理を実現する上記安全関連データアクセス関数13は、安全関連アプリケーション処理中において任意の安全関連データを安全関連データ領域21へダブルRAM方式にて書き込む場合に使用する関数である。
図4の処理では、まず、上記パラメータの管理テーブルブロック番号を用いて上記管理テーブル40を検索して、該当するブロック(そのブロック番号41が上記パラメータのブロック番号と同じであるレコード)の管理データ42の一部を取得する。すなわち、上記パラメータで指定されたブロックに対応した安全関連データ領域先頭アドレス、安全関連データ領域最終アドレスを読み込む。換言すれば、上記パラメータの書込データの書込先の記憶領域のアドレス範囲(先頭アドレスと最終アドレス)を読み込む。更に、上記パラメータの書込先頭アドレスと書込データバイト数から、上記安全関連データの書込先の記憶領域の最終アドレスを計算する(ステップS11)。
そして、ステップS11において管理テーブル40から取得した上記安全関連データ領域先頭アドレス及び安全関連データ領域最終アドレスと、上記パラメータの書込先頭アドレス及び計算した最終アドレスとを比較して、両者が一致するか否かを判定する。換言すれば、書込データの書込先のアドレス範囲が、パラメータと管理テーブル40とで一致するか否かを判定する(ステップS12)。
書込データの書込先のアドレス範囲が不一致の場合にはアドレス範囲チェックNGとなり(ステップS12,NO)、異常終了となる(ステップS21)。
書込データの書込先のアドレス範囲が一致した場合にはアドレス範囲チェックOKとなり(ステップS12,YES)、ステップS13以降の処理へと進む。
尚、各書込データ毎に対応するブロック番号が予め決められている(例えばプログラマが決める)。また、上記ステップS11,S12の処理は、特に、RAM管理テーブル14(そのテーブル40)のアドレスデータまたはパラメータのデータビット化け等を検出するため(上記ROM等の異常を検出するため)に行うものである。
ステップS13では、上記パラメータの書込データを上記書込先の記憶領域に書き込む。すなわち、上記パラメータにより指定される記憶領域(書込先頭アドレスから書込データバイト数分の領域)に、書込データを書き込む(ステップS13)。勿論、テーブル40の安全関連データ領域先頭アドレスから安全関連データ領域最終アドレスまでの領域に、書込データを書き込むものであってもよい(一致検証済みなので、同じことである)。
続いて、上記パラメータの書込データの反転データを書き込む記憶領域に関しても、上記データビット化け等を検出する為の処理を上記書込データの場合と略同様にして行う。すなわち、まず、管理テーブル40の上記“該当するレコード”から、その管理データ42の一部として今度は反転安全関連データ領域先頭アドレス、反転安全関連データ領域最終アドレスを読み込む。更に、上記パラメータの反転書込先頭アドレスと書込データバイト数から、書込データの反転データの書込先の記憶領域の最終アドレスを計算する(ステップS14)。
そして、ステップS14において管理テーブル40から取得した上記反転安全関連データ領域先頭アドレス及び反転安全関連データ領域最終アドレスと、上記パラメータの反転書込先頭アドレス及び計算した最終アドレスとを比較して、両者が一致するか否かを判定する。換言すれば、書込データの反転データの書込先のアドレス範囲が、パラメータと管理テーブル40とで一致するか否かを判定する(ステップS15)。
書込データの反転データの書込先のアドレス範囲が、パラメータと管理テーブル40とで一致しない場合には、アドレス範囲チェックNGとなり(ステップS15,NO)、異常終了となる(ステップS21)。一方、書込データの反転データの書込先のアドレス範囲が、パラメータと管理テーブル40とで一致した場合には、アドレス範囲チェックOKとなり(ステップS15,YES)、ステップS16以降の処理へと進む。
ステップS16以降の処理では、まず、上記パラメータの書込データを反転させて“書込データの反転データ”を生成する(ステップS16)。続いて、ステップS16で生成した“書込データの反転データ”を、上記反転データの書込先のアドレス範囲の記憶領域に書き込む。すなわち、例えば上記パラメータの反転書込先頭アドレスから書込データバイト数分の記憶領域に、“書込データの反転データ”を書き込む(ステップS17)。
そして、ステップS13で書込データを書き込んだ記憶領域からデータ(第1データというものとする;正常であれば書込データであるはず)を読出すと共に、ステップS17で“書込データの反転データ”を書き込んだ記憶領域からデータ(第2データというものとする;正常であれば“書込データの反転データ”であるはず)を読み出す。そして、ステップS17で読み出した第2データを反転させて、当該“第2データの反転データ”が上記第1データと一致するか否かを確認する(ステップS18)。
データ一致の場合には(ステップS19,YES)、正常終了となり、例えば「正常終了」を関数値として呼び出し元に復帰する(ステップS20)。一方、データ不一致の場合には(ステップS19,NO)、上記異常終了となる(ステップS21)。この場合には、例えば「異常終了」を関数値として呼び出し元に復帰する(ステップS21)。
次に、図5を参照して、安全関連データアクセス処理部13’による安全関連データのリード(読込)処理について説明する。上記安全関連データアクセス関数13は、安全関連アプリケーション処理11が安全関連データ領域21のデータをダブルRAM方式にて読み込む場合に使用する関数である。
上述したように、安全関連データアクセス処理部13’は、安全関連アプリケーション処理部11’から読み出される際にパラメータが与えられる。リード(読込)処理の際には、図5に示すように、パラメータとして、読込先頭アドレス、反転読込先頭アドレス、読込データバイト数、管理テーブルブロック番号が与えられる。また、図4の処理の処理結果としてのレジスタ渡し復帰データは“読込データ”となる。レジスタ渡し復帰データとして、RAM20の指定領域(読込先頭アドレスから読込データバイト数分の記憶領域)から読み込んだデータ(読込データ)が、予め定められたレジスタ等に格納される。また、レジスタ渡し関数値は“正常終了”または“異常終了”となる。
本処理は、基本的に、上記指定領域(読込先頭アドレスから読込データバイト数分の記憶領域)からデータ(第3データというものとする)を読み込むと共に、“指定領域の反転領域”(上記反転読込先頭アドレスから読込データバイト数分の記憶領域)からデータ(第4データというものとする)を読み込む。換言すれば、所定の記憶領域に記憶されているデータ(上記第3データ)を読み出すと共に、この第3データの反転データが記憶されているはずの記憶領域からデータ(上記第4データ)を読み出す。
そして、上記第4データを反転させて、この“第4データの反転データ”が上記第3データと一致するか否かを確認する。この様にして、ダブルRAMアルゴリズムによるデータリード時のRAM診断を行う。更に、上記パラメータの管理テーブルブロック番号等を用いたROM等の異常チェック(データビット化けの検出等)も、図4の場合と略同様に行う。
図5の処理を実現する上記安全関連データアクセス関数13は、安全関連アプリケーション処理中において、上記書き込みの場合だけでなく、任意の安全関連データを安全関連データ領域21から読み込む場合にも使用する関数である。
図5の処理では、まず、上記パラメータの管理テーブルブロック番号を用いて上記管理テーブル40を検索して、該当するブロック(そのブロック番号41が上記パラメータのブロック番号と同じであるレコード)の管理データ42の一部を取得する。すなわち、上記パラメータで指定されたブロックに対応した安全関連データ領域先頭アドレス、安全関連データ領域最終アドレスを読み込む。換言すれば、読込データの格納領域のアドレス範囲(先頭アドレスと最終アドレス)を読み込む。更に、上記パラメータの読込先頭アドレスと読込データバイト数から、上記読込データの記憶領域の最終アドレスを計算する(ステップS31)。
そして、ステップS31において管理テーブル40から取得した上記安全関連データ領域先頭アドレス及び安全関連データ領域最終アドレスと、上記パラメータの読込先頭アドレス及び計算した最終アドレスとを比較して、両者が一致するか否かを判定する。換言すれば、読込データの格納領域のアドレス範囲が、パラメータと管理テーブル40とで一致するか否かを判定する(ステップS32)。
読込データの格納領域のアドレス範囲が不一致の場合にはアドレス範囲チェックNGとなり(ステップS32,NO)、異常終了となる(ステップS40)。
読込データの格納領域のアドレス範囲が一致した場合にはアドレス範囲チェックOKとなり(ステップS32,YES)、ステップS33以降の処理へと進む。
上記ステップS31,S32の処理は、例えばRAM管理テーブル14(そのテーブル40)のアドレスデータまたはパラメータのデータビット化け等を検出するために行うものである。
ステップS33では、上記パラメータで指定される記憶領域に格納されているデータ(第3データ)を読み込む。すなわち、上記読込先頭アドレスから読込データバイト数分の記憶領域から上記第3データ(読込データ)を読み込む(ステップS33)。勿論、テーブル40の安全関連データ領域先頭アドレスから安全関連データ領域最終アドレスまでの領域から、上記第3データを読み込むものであってもよい(一致検証済みなので、同じことである)。
ここで、図4で説明したように、データ書き込みの際に、その反転データを反転安全関連データ領域22に書き込んでいる。リード処理では、この反転データの管理データに関しても、上記データビット化け等(ROM異常等)を検出する為の処理を上記読込データの場合と略同様にして行う。
すなわち、まず、管理テーブル40の上記“該当するレコード”から、その管理データ42の一部として今度は反転安全関連データ領域先頭アドレス、反転安全関連データ領域最終アドレスを読み込む。更に、上記パラメータの反転読込先頭アドレスと読込データバイト数から、“読込データの反転データ”の格納領域の最終アドレスを計算する(ステップS34)。
そして、ステップS34において管理テーブル40から取得した上記反転安全関連データ領域先頭アドレス及び反転安全関連データ領域最終アドレスと、上記パラメータの反転読込先頭アドレス及び計算した最終アドレスとを比較して、両者が一致するか否かを判定する。換言すれば、“読込データの反転データ”の格納領域のアドレス範囲が、パラメータと管理テーブル40とで一致するか否かを判定する(ステップS35)。
“読込データの反転データ”の格納領域のアドレス範囲が不一致の場合にはアドレス範囲チェックNGとなり(ステップS35,NO)、異常終了となる(ステップS40)。一方、“読込データの反転データ”の格納領域のアドレス範囲が一致した場合にはアドレス範囲チェックOKとなり(ステップS35,YES)、ステップS36以降の処理へと進む。
ステップS36以降の処理では、まず、上記“読込データの反転データ”の格納領域からデータ(上記第4データ)を読み出す。これは、例えば、パラメータの反転読込先頭アドレスから読込データバイト数分の記憶領域から上記第4データを読み込む(ステップS36)。この第4データは、異常がなければ、上記“読込データ(第3データ)の反転データ”であるはずである。これより、ステップS36で読み込んだ第4データを反転させて(ステップS37)、当該“第4データの反転データ”が上記ステップS3で読み込んだ第3データ(読込データ)と一致するか否かを確認する(ステップS38)。
データ一致の場合には(ステップS38,YES)、正常終了となり、例えば「正常終了」を関数値として読込データと共に呼び出し元に復帰する(ステップS39)。一方、データ不一致の場合には(ステップS38,NO)、上記異常終了となる(ステップS40)。この場合には、例えば「異常終了」を関数値として呼び出し元に復帰する。
次に、RAMテストパターン診断処理12について説明する。
図6は、上記RAMテストパターン診断処理部12’によるRAMテストパターン診断処理のフローチャート図である。本処理は、RAMの診断間隔として定義された所定の時間周期で起動する。この時間周期は、たとえばプログラマ等が任意に決めてよい。本処理では、RAMテストパターン方式による診断を実施する。但し、図2の例の場合には、安全関連アプリケーション処理11実行時には本処理は中断することになる。
本処理では、上記RAM管理テーブル14のRAMテストパターン方式診断管理テーブル30に登録されている各記憶領域(上記登録領域)について順次、RAMテストパターン診断を実行することで、全ての登録領域についてRAMテストパターン診断を行う。また、各登録領域毎に、その登録領域内の各アドレスについて順次、RAMテストパターン診断を実行することで、当該登録領域内の全てのアドレスについてRAMテストパターン診断を行う。尚、以下の説明では図3(a)に示す例を用いるものとし、上記各登録領域は、図3(a)に示す登録領域番号31に従って区別して呼ぶものとする。すなわち、RAMテストパターン方式診断登録領域番号31が‘1’である登録領域を登録領域1、登録領域番号31が‘2’である登録領域を登録領域2等と呼ぶものとする。
図6の処理では、まず、上記RAMテストパターン方式診断管理テーブル30から登録領域1の管理データ32(登録領域1のアドレス範囲;登録領域先頭アドレスと登録領域最終アドレス)を読み込む(ステップS51)。
そして、上記登録領域1のアドレス範囲内の各アドレスを、順次、診断チェック対象アドレス(以下、対象アドレスというものとする)として、各対象アドレスに対してステップS53〜S65のテストパターン方式のRAM診断を実行する(但し、途中で一度でもステップS57の判定がYESになったら、ステップS68〜S70の処理を実行し、本処理は終了する)。
概略的には、最初は上記登録領域先頭アドレスを対象アドレスとしてテストパターン方式のRAM診断を実行し、ステップS66の処理によって対象アドレスを順次変えながらテストパターン方式のRAM診断を実行していき、最後は上記登録領域最終アドレスを対象アドレスとしてテストパターン方式のRAM診断を行い、異常が無ければ登録領域1に関するRAM診断は完了したことになる。そして、ステップS67の処理により、今度は登録領域2が診断対象となり、登録領域1の場合と略同様にしてRAM診断を実行し、異常が無ければ(図3(a)の例によれば)本処理は終了となる。
以下、詳細に説明する。尚、本方式では基本的に複数のテストデータパターンを用いるものとし、本例ではテストデータパターン1、テストデータパターン2の2つのテストデータパターンを用いるものとする。更に、図6に示す例では、テストデータパターン1として16進数‘5555’を用い、テストデータパターン2として16進数‘AAAA’を用いるものとするが、この例に限らない。
例えば更に複雑な故障を検出するため、テストデータパターンをN個設定することもできる。例えば、N=10のテストデータパターンの例として下記が挙げられる。
16進数‘5555’,16進数‘AAAA’,16進数‘3333’,16進数‘9999’,16進数‘CCCC’,16進数‘6666’,16進数‘0000’,16進数‘FFFF’,16進数‘F0F0’,16進数‘0F0F’。
本手法において複数のテストデータパターンとして例えば16進数‘5555’と16進数‘AAAA’とを用いるのは、例えば対象アドレスの全ビット列のオンオフを試行することを1つの目的としている。尚、言うまでもないが、16進数‘5’は4ビット‘0101’であり、16進数‘A’は4ビット‘1010’である。よって、16進数‘5’と‘A’とを順次書き込むことで4ビットの全てのビットについてオンオフを試行することができる。
これより、例えば、上述した‘0’固着状態のビットに対して‘0’を書き込んでも異常検出できないが‘1’を書き込むことで異常を検出することができる。その逆に、上述した‘1’固着状態のビットに対して‘1’を書き込んでも異常検出できないが‘0’を書き込むことで異常を検出することができる。対象アドレスの全ビットのオンオフを試行することで、対象アドレスの全ビットの固着異常を確実に検出できる。
あるいは、信号線の短絡を検出できる。例えば、対象アドレスの1ビット目と2ビット目とが短絡(ショート)していた場合、‘1010’を書き込むと‘1110’となるので(1ビット目の‘1’につられて2ビット目も‘1’になるので)、異常を検出できる。尚、1ビット目とは最上位ビット(最も左側のビット)を意味する。
但し、1ビット目と3ビット目とが短絡(ショート)していた場合には、‘1010’を書き込むと‘1010’となるので(1ビット目と3ビット目の両方が‘1’であるので)、異常を検出できない。これは、‘0101’の場合でも同様である。従って、この様な異常は、上述した複数のテストデータパターンとして16進数‘5555’と16進数‘AAAA’とを用いる場合には、検出できないことになる。
更に、後述するように対象アドレスだけでなくその前後のアドレスにもテストデータパターンを格納するのは、対象アドレスのRAMメモリセルのチェック方法の1つとしてその前後のセルによる対象アドレスのデータの変化をチェックすることを目的としている。
すなわち、上記信号線の短絡(ショート)が生じるのは、対象アドレス内のセル同士に限らず、対象アドレスのセルと他のアドレスのセルとの間で生じる場合もある。これより、例えば、対象アドレスの1ビット目とその直前(または直後)のアドレスの1ビット目とに信号線の短絡(ショート)があった場合、対象アドレスに上記‘0101’を書き込んだだけでは異常検出できないし、その前後アドレスに上記‘0101’を書き込んでも異常検出できないが、その前後アドレスに上記‘1010’を書き込むことで対象アドレスデータが上記‘0101’から‘1101’に変化することになり、これを以って異常検出できる。このように、本手法では、対象アドレスのセルと前後アドレスのセルとの信号線間の短絡等も検出することができる。
尚、信号線間の短絡は、上記前後アドレスに限らず、可能性としてはRAM内の他の全てのアドレスが有り得る。よって、信号線間の短絡故障を完全に検出しようとするならば、対象アドレスと他の全てのアドレスに対して上記複数のテストデータパターンを適用する必要があるが、当然、処理負荷が異常に増大し、処理時間が非常に掛かることになり、定周期の制御処理や安全機能の妨げとなり、現実的には実行困難である。
本手法では、テストデータパターンの適用を、対象アドレスとその前後アドレスとすることで、処理負荷を増大させることなく高速に診断処理を行うことが可能となる。また、対象アドレスと前後アドレスのチェックだけでもある程度高い自己診断率を実現できる。特に、上記のように適切なテストデータパターンを用いることで、効率よく高い確率で故障検出することが可能となる。
但し、上記の通り、例えば1ビット目と3ビット目とが短絡(ショート)していた場合のように、2つのテストパターンのみでは故障検出できない場合もある。この為、上記10個のテストパターンを全て用いることが望ましい。これにより、例えば1ビット目と3ビット目とが短絡(ショート)していた場合、例えば16進数‘CCCC’=‘1100’を書き込むと‘1110’になるので、異常を検出できる。これは一例であり、他にも様々な故障があるが、上記10個のテストパターンを全て用いることで殆どの故障に対応することができる。
尚、上記N=10のテストデータパターンを用いる場合において、例えば上記16進数‘5555’と‘AAAA’との組と同様の組(例えば、16進数‘3333’と‘CCCC’との組(3=‘0011’、C=‘1100’)を用いてもよく、この様な組を例えば「ビットオンオフパターンが相互に異なる複数のテストパターン」または「各アドレスの全ビットのオンオフを実施させる複数のテストパターン」等と呼ぶものとする。
本例では、「ビットオンオフパターンが相互に異なる複数のテストパターン」(各アドレスの全ビットのオンオフを実施させる複数のテストパターン)の一例として、上記の通り16進数‘5555’と‘AAAA’の2つのテストデータパターンを用いる例に従って説明する。
まず、上記の通り、最初は登録領域1が処理対象の記憶領域となり、その先頭アドレス(管理データ32の登録領域先頭アドレス)が、最初の診断チェック対象アドレスとなる(ステップS52)。
そして、まず、対象アドレスとその前後のアドレスへの割り込みのマスクをする(ステップS53)。これによりステップS54以降の処理によって診断チェック対象アドレス等のデータを書き変えている間に、他の処理が対象アドレス等をアクセスしないようにする。
続いて、対象アドレスとその前後のアドレスとの少なくとも3つ以上のアドレスのデータを、レジスタに退避する。更に、上記2つのテストデータパターンの一方(テストデータパターン1;本例では16進数‘5555’)をテストデータとする(ステップS54)。
尚、上記「前後のアドレス」とは、本例では対象アドレスの直前のアドレスと直後のアドレスを意味するものとするが、この例に限らない。例えば、直前及びその前のアドレス、直後及びその後のアドレスの合計4つのアドレスを、前後のアドレスとしてもよい。この場合には、対象アドレスも含めて5つのアドレスのデータを、レジスタに退避することになる。また、この場合には、この5つのアドレスにテストデータパターンを書き込むことになる。
そして、上記ステップS54で設定したテストデータ(‘5555’)を対象アドレスに書き込む。これによって(異常が無ければ)図7(a)に示す状態となる。続いて、テストデータをテストデータパターン1(本例では16進数‘5555’)とする(ステップS55)。尚、ここではこの処理によってテストデータが変化するわけではないが(‘5555’のままである)、後述するように変化する場合がある。
次に、対象アドレスの前後のアドレスに(上記の通り、ここでは対象アドレスの直前のアドレスと直後のアドレス)、上記ステップS55で設定したテストデータ(‘5555’)を書き込む(ステップS56)。これによって(異常が無ければ)図7(b)に示す状態となる。更に、対象アドレスからデータを読み込む(ステップS56)。この読込データは、異常が無ければ、上記ステップS55で対象アドレスに書き込んだテストデータ(‘5555’)であるはずである。これより、ステップS56で対象アドレスから読み込んだデータが、上記ステップS55で対象アドレスに書き込んだテストデータ(‘5555’)と一致しているか否かを確認する(ステップS57)。
データ不一致の場合には(ステップS57,NO)、RAM20(その対象アドレスのセル)は異常であり、異常終了の為のステップS68〜S70の処理を実行する。すなわち、まず、対象アドレスとその前後アドレスのデータをレジスタから復元する(ステップS68)。つまり、ステップS54でレジスタに退避させていた対象アドレスのデータとその前後アドレスのデータを、それぞれ、対象アドレスとその前後アドレスに戻す。続いて、割り込みのマスクを解除する(ステップS69)。最後に、所定のRAM異常検出に対応したRAM故障処理を行い(ここでは特に説明しない)(ステップS70)、本処理を終了する。
一方、データ一致の場合には(ステップS57,YES)、ステップS58へ移行する。
ステップS58では、対象アドレスの前後のアドレスに対して、上記テストデータパターン2(本例では16進数‘AAAA’)を適用済みか否かを判定する。ここでは、未だ、パターン2は適用していないので(ステップS58,NO)、上記テストデータパターン2(本例では16進数‘AAAA’)を新たなテストデータに設定して(ステップS65)、ステップS56に戻る。
これより、ステップS56の処理では、今度は、対象アドレスの前後のアドレスそれぞれに、上記ステップS65で設定したテストデータ(‘AAAA’)を書き込む。これによって(異常が無ければ)図7(c)に示す状態となる。上記の通りステップS56では更に対象アドレスからデータを読み込む処理を行う。
そして、再び上記ステップS57の処理を行う。今度も、異常が無ければ、対象アドレスの格納データは‘5555’のままであるはずである。しかしながら、例えば対象アドレスと前後のアドレスとで配線が短絡等していることで、前後のアドレスに格納するデータによっては対象アドレスの格納データが変化する場合があり得る。
例えば、まず、16進数を4bit表記すると、例えば16進数‘0’は‘0000’であり、16進数‘F’は‘1111’であり、16進数‘5’は‘0101’であり、16進数‘A’は‘1010’である。ここで、仮に、対象アドレスとその直前のアドレスとで最上位ビットの配線同士が短絡しているものとする。この場合、図7(b)に示す状態では対象アドレスとその前のアドレスには両方とも16進数‘5555’であるので、両方とも最上位ビットは‘0’であり、配線ショートによる影響は受けない(前後アドレスに‘5555’を格納しても対象アドレスの格納データは変化なし)。
しかしながら、前後アドレスに16進数‘AAAA’を格納すると、直前アドレスの最上位ビットが‘1’になるので、配線ショートによる影響により、対象アドレスも最上位ビットが‘1’になってしまう。つまり、‘0101’が‘1101’になってしまう(16進数‘5’が16進数‘D’になってしまう)。本手法によれば、例えばこの様な故障を確実に検出することができる。
上記ステップS57の判定結果がYESならば、再び上記ステップS58の判定を行い、今度は既にパターン2を前後アドレスに適用済みなので判定YESとなり(ステップS58,YES)、ステップS59へ移行する。ステップS59では、対象アドレスに対して上記テストデータパターン2(本例では16進数‘AAAA’)を適用済みか否かを判定する。ここでは、未だ、パターン2は適用していないので(ステップS59,NO)、上記テストデータパターン2(本例では16進数‘AAAA’)を新たなテストデータに設定して(ステップS64)、ステップS55に戻る。
これにより、上記ステップS55の「対象アドレスにテストデータを書き込む」処理は、今度は対象アドレスに16進数‘AAAA’を書き込む処理となり、その結果(正常であれば)図7(d)に示す状態となる。上記の通りステップS55では更にテストデータを16進数‘5555’とする処理が行われるので、次のステップS56の処理によって前後アドレスに16進数‘5555’を書き込むことで、その結果(正常であれば)図7(e)に示す状態となる。上記の通り、ステップS56では更に対象アドレスからデータを読み出す。ここでは(正常であれば)16進数‘AAAA’を読み出すことになる。
続くステップS57では、ステップS56で対象アドレスから読み出したデータが、ステップS55で対象アドレスに書き込んだデータ(ここでは16進数‘AAAA’)と一致するか否かを確認する。上述したように、RAM20に異常が無ければデータ一致するはずである(ステップS57,YES)。
続くステップS58では、対象アドレスの前後のアドレスに対して、上記テストデータパターン2(本例では16進数‘AAAA’)を適用済みか否かを判定する。ここでは、未だ、パターン2は適用していないので(ステップS58,NO)、上記テストデータパターン2(本例では16進数‘AAAA’)を新たなテストデータに設定して(ステップS65)、ステップS56に戻る。
これより、ステップS56の処理では、今度は、対象アドレスの前後のアドレスそれぞれに、上記ステップS65で設定したテストデータ(‘AAAA’)を書き込む。これによって(異常が無ければ)図7(f)に示す状態となる。上記の通りステップS56では更に対象アドレスからデータを読み込む処理を行う。
そして、再び上記ステップS57の処理を行う。今度も、異常が無ければ、対象アドレスの格納データは‘AAAA’のままであるはずである。しかしながら、例えば対象アドレスと前後のアドレスとで配線が短絡等していることで、前後のアドレスに格納するデータによっては対象アドレスの格納データが変化する場合があり得る。
上記ステップS57の判定処理でデータ一致した場合には(ステップS57,YES)、本例では上記2つのテストパターンによるRAM診断は終了したので、ステップS58、S59の判定は何れもYESとなり、ステップS60へ移行する。
但し、テストデータパターンがN個ある場合は、N個のテストデータパターン全てを適用したか否かをチェックし、未終了の場合はテストデータパターンを変更してステップS54から処理再開する(但し、データをレジスタに退避する処理は行わなくてよい(既に退避済みであるので))。例えば、16進数‘3333’を新たなテストデータパターン1とし、16進数‘CCCC’を新たなテストデータパターン2とする。この場合、処理再開直後のステップS54〜S56の処理では、対象アドレス及びその前後アドレスに16進数‘3333’が書き込まれることになる。
上記テストデータパターンがN個ある場合の処理は、別の説明の仕方をするならば例えば下記の通りとなる。
すなわち、変数n(n;1〜N)を設け、nの初期値は‘1’とする。そして、テストデータパターンnとテストデータパターンn+1とをペアにして、1つのペアについて上記ステップS54〜S59、S64,S65の一連の処理が完了したら、nを+2インクリメントすることで、テストデータパターンのペアを更新していく。この場合、ステップS59がYESになったら更に「“n+1”=N?」の判定を行い、判定NOならば上記ペアの更新を行うようにしてもよい。尚、この場合、例えば図6におけるテストデータパターン1をテストデータパターンnに置き換え、テストデータパターン2をテストデータパターンn+1に置き換えてもよい。また、尚、この場合、ステップS66の直後またはステップS67の直後に、nを初期値‘1’へとリセットする。
上記ステップS59の判定がYESとなったら、まず、上記ステップS68と略同様に、対象アドレスとその前後アドレスのデータを、レジスタから復元する(ステップS60)。続いて、上記ステップS69と略同様に、割り込みのマスクを解除する(ステップS61)。そして、現在の対象アドレスが、現在の処理対象の登録領域(ここでは上記登録領域1)の最後のアドレス(管理データ32の登録領域最終アドレス)であるか否かを判定する(ステップS62)。
つまり、現在の処理対象の登録領域内の全アドレスについてRAM診断が実行されたか否かを判定し、未だ最後のアドレスまで診断していないならば(ステップS62,NO)、チェック対象を次のアドレスに更新する(ステップS66)。つまり、現在の対象アドレスの“直後のアドレス”が、新たな対象アドレスとなる。そして、ステップS53に戻り、上述した処理を繰り返す。
ステップS62の判定がYESとなったら、全ての登録領域についてRAM診断実行したか否かを確認し(ステップS63)、未処理の登録領域がある場合には(ステップS63,NO)、次の登録領域を処理対象として(例えば登録領域番号を更新して(+1インクリメント等))(ステップS67)、ステップS52に戻る。本例では登録領域1に関する診断処理が終了したら、続いて登録領域2の診断処理を実行することになる。全ての登録領域についてRAM診断実行完了したならば(ステップS63,YES)、本処理を終了する。尚、図3(a)に示す例では、登録領域2(登録領域番号=‘2’の管理データ32が示す領域)についてRAM診断実行完了した時点で、ステップS63の判定がYESとなり、本処理を終了することになる。
次に、図8を参照して、安全関連アプリケーション処理部11’(安全関連アプリケーション処理11)の処理について説明する。
図8は、安全関連アプリケーション処理部11’の処理フローチャート図である。
尚、図8に示すステップS82、S86の処理に係る関数(安全関連データアクセス関数13)は、安全関連アプリケーション処理11のプログラム内にインライン展開する。
図8において、安全関連アプリケーション処理部11’は、所定のアプリケーション処理(制御処理等)を実行し(ステップS81)、このアプリケーション処理に係り安全関連データをRAM20から読込むイベントが発生した場合には上記安全関連データアクセス関数13を呼び出し、上記図4で説明した各種パラメータを渡す(ステップS82)。これによって、上述した図4の処理が実行されることになる。そして、上記の通り、正常終了/異常終了の何れかの関数値が返されてくるので、異常終了の場合は(ステップS83,NO)所定の故障処理を実行し(この故障処理については特に説明しない)(ステップS89)、本処理は終了する。
正常終了の場合(ステップS83,YES)上記アプリケーション処理を続行し(ステップS84)、処理中に安全関連データをRAM20に書き込むイベントが発生した場合には、安全関連データ領域21に書き込むデータ等をパラメータとして設定し(図5で説明した各種パラメータの設定)(ステップS85)、上記安全関連データアクセス関数13を呼び出す(ステップS86)。これにより上述した図5の処理が実行されることになる。
そして、上記の通り、正常終了/異常終了どちらかの関数値が返されてくるので、異常終了であったならば(ステップS87,NO)上記ステップS89の処理を実行し、正常終了であったならば(ステップS87,YES)上記アプリケーション処理を続行する(ステップS88)。図示していないが、その後も、アプリケーション処理実行中に、RAM20に対する安全関連データの読込/書込イベントが発生する毎に、上述した関数13の呼び出しの処理が行われ、アプリケーション処理が最後まで実行されたら本処理は終了する。
以上説明した本例のRAM診断装置によれば、下記の様々な効果が得られる。
すなわち、本例のRAM診断装置によれば、ダブルRAM方式によるオンライン処理のタイミングでのRAM診断と、定周期起動でのRAMテストパターン方式によるRAM診断(特に適切なテストパターンを用いる場合、例えば上述した例のように「全ビットのオン・オフ実施させる複数のテストパターン」または/且つ「ビットオン・オフパターンが相互に異なる複数のテストパターン」を用いる診断)の両方を行うことにより、高い自己診断率を実現し、故障による危害度の高い鉄道関係や化学プラント関係にも当該RAM診断を適用したシステムを使用することができる。
また、RAMテストパターン方式によるRAM診断において、診断チェック対象アドレスとその前後のアドレス等の3つ以上の連続したアドレス(対象アドレスを含む3つ以上の連続したアドレス)をテストパターン書込対象アドレスとして、対象アドレス以外のアドレス(例えば前後アドレス)のRAMセルへのデータ書き込みによる対象アドレスのRAMセルへの影響有無を診断することで、例えば信号線の短絡等の故障を確実に検出でき、高い自己診断率を実現できる。
また、ダブルRAM方式と他の診断方式とを組み合わせたRAM診断として、例えば、ダブルRAM方式とギャルパット方式との組み合わせや、ダブルRAM方式とアブラハム方式との組み合わせ等も考えられる。これらの組み合わせの場合でも、ダブルRAM方式単体の場合に比べれば、自己診断率の高いRAM診断を実現することができる。但し、本例のダブルRAM方式とRAMテストパターン方式との組み合わせによれば、これらギャルパット方式やアブラハム方式との組み合わせに比べて、容易な処理方法で診断実現でき処理の高速化を図ることができる。勿論、ダブルRAM方式単体の場合に比べて、自己診断率の高いRAM診断を実現することができる。
上記処理の高速化は、例えば上述したような適切なテストパターンを用いることや、対象アドレスに係るテストパターン書込対象を「前後のアドレス」に限っている(他の全てのアドレス等とはしない)ことや、データ退避にレジスタを用いること等によって実現できる。
更に、RAMテストパターン方式によるRAM診断の場合には、処理対象アドレスの格納データを退避させてから診断処理を行い診断処理完了したらデータ復旧させる(退避先から元に戻す)が、本手法では、上記3つ以上の連続したアドレスの格納データをレジスタに退避するので、高速なデータ退避およびデータ復旧が実現でき、CPUへの処理負荷が小さく、かつRAM診断処理が高速化することによりRAM診断処理によってCPUが占有される時間が短縮することで安全機能への影響が小さくなる。また、従来ではデータ退避先としてRAM内に退避領域を設けていたが、本手法ではこの様なRAM退避領域が必要なくなる。
また、ダブルRAM方式によるRAM診断において、RAMアクセス時にアクセス前に、アクセス先アドレスに関して関数のパラメータのアドレスとRAM診断管理テーブルに登録されているアドレスとを比較チェックする機能を備えることにより、RAM診断管理テーブルが配置されているメモリ(本例ではROM10)の異常または関数のパラメータが配置されているメモリの異常、パラメータのデータビット化け等を検出することができ、所定の故障処理(特に説明しない)を実行することで、当該異常が危険源となる故障を事前に除去することができる。
本手法では、ダブルRAM方式のみではRAM故障診断を完全に担保できない(確実な故障検出を実現できない。または故障検出できるが早期検出が困難)という課題に対して、「データ/アドレスの直流化」の故障(固定(固着)故障、固定オープン、高インピーダンス、信号線間の短絡等)を検出できるRAMテストパターン方式による診断を併用することで、確実かつ早期にRAM故障を検出できるようになる。
また、RAMテストパターン方式を適用する際に、対象アドレスを含む連続した3つ以上のアドレス(例えば対象アドレスとその前後(隣接)アドレス等)に対して、複数のテストパターンを適用して対象アドレスを診断する方法を用いることで、対象アドレスに対する他のアドレス(例えば隣接したアドレス)のセルの影響をチェックできる。これによって、例えば上記隣接したアドレスのセルとの信号線間の短絡等を、確実に検出出来るようになる。
また、当該診断方式において上記3つ以上の連続したアドレスのデータをレジスタに退避することで、RAM退避領域の削減と、RAMデータの待避および復元処理を高速に行うことが実現できる。
尚、RAMテストパターン方式による診断を適用してもオンライン処理のタイミングで‘0’固定、‘1’固定のRAM異常を検出できない可能性があるが、当該確率はダブルRAM方式のみを使用する場合と比較して大幅に減少する。
RAMの各種の故障モードによる故障を複数の診断手法により検知することでRAM故障を確実に検出できる。例えば、ダブルRAM方式をオンラインの処理タイミングで適用し、かつRAMテストパターン方式による診断を同一領域に対して適用する。これによりソフトエラーの検知とその他のRAMの故障モードによる故障検知をすることができる。
また、RAMテストパターン方式による診断と二重化CPUで同一処理を行って処理結果を突き合わせる診断とを組み合わせる方法、RAMテストパターン方式による診断と同一CPUで同一処理を複数回行って処理結果を突き合わせる診断とを組み合わせる方法などがある。
なお、固定データの場合はあらかじめ固定データの領域を複数設定しそれぞれにCRCデータなどのチェックコードを付加し、アクセスするタイミングでチェックコードのチェックを行うことで故障を検出できる。
RAMテストパターン方式による診断にはIEC61508にギャルパット、アブラハム、ウオークパス、チェックボード、マーチなどの診断手法が例として記載されおり、必要とする自己診断率に合わせて診断手法を適用する。
ダブルRAM方式をオンラインの処理タイミングで適用し、かつRAMテストパターンによる診断を同一領域に対して適用する場合、RAMテストパターンによる診断を行い、かつ安全機能をプロセスの安全を担保できる時間内に実施するため、RAMテストパターンによる診断をダブルRAM方式による診断を行う処理より低いタスクレベルに割りつける。この場合、テストのためにRAMデータを書き変えている間は安全機能を実行できないため、当該時間を短くする処理方法をとる。当該例として本発明の実施例に示す方法やギャルパットやアブラハムで一度にテストするアドレスの範囲を1つのRAMチップが実装されているアドレス範囲内に限定する方法などがある。
本発明の実施例に示すRAMテストパターンによる診断では、連続した3つ以上の診断対象アドレスに例えば、16進数‘5555’や16進数‘AAAA’などのテストパターンを書き込み、当該アドレスのデータを読み込む。これによりデータの直流化(固定故障、固定オープン、高インピーダンス、信号線間の短絡)、隣接するメモリセル間の干渉、アドレス化無し等の各種RAM故障を検出することができる。
本方式では当該アドレスのデータ退避について、上述したレジスタに退避する方法またはRAMに退避領域を設けて退避する方法のいずれも採用することができる。但し、上記の通り、レジスタに退避する方法を採ることで高速化が図れる。RAMテストパターンによる診断に関して、診断対象アドレスとその前後アドレス等のような連続した3つ以上の処理対象アドレスの格納データの退避について、上記実施例では、レジスタに処理対象アドレスのデータを退避する方式を提案している。このことで退避用RAM領域の削減と高速処理が実現できる。一般的にCPUはアクセスのパフォーマンスをあげるためレジスタアクセスはRAMアクセスより高速にアクセスできるよう設計されている。