JP4484074B2 - プログラマブルコントローラ用ユニット及びメモリ自動復旧方法 - Google Patents

プログラマブルコントローラ用ユニット及びメモリ自動復旧方法 Download PDF

Info

Publication number
JP4484074B2
JP4484074B2 JP2005311614A JP2005311614A JP4484074B2 JP 4484074 B2 JP4484074 B2 JP 4484074B2 JP 2005311614 A JP2005311614 A JP 2005311614A JP 2005311614 A JP2005311614 A JP 2005311614A JP 4484074 B2 JP4484074 B2 JP 4484074B2
Authority
JP
Japan
Prior art keywords
memory
user program
abnormality
data
backup
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.)
Expired - Lifetime
Application number
JP2005311614A
Other languages
English (en)
Other versions
JP2006059382A (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.)
Omron Corp
Original Assignee
Omron Corp
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 Omron Corp filed Critical Omron Corp
Priority to JP2005311614A priority Critical patent/JP4484074B2/ja
Publication of JP2006059382A publication Critical patent/JP2006059382A/ja
Application granted granted Critical
Publication of JP4484074B2 publication Critical patent/JP4484074B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Images

Landscapes

  • Programmable Controllers (AREA)
  • Testing And Monitoring For Control Systems (AREA)

Description

この発明は、プログラマブルコントローラ用ユニット及びメモリ自動復旧方法に関するものである。
ファクトリーオートメーション(FA)の制御装置として、プログラマブルコントローラ(PLC)が用いられている。このPLCは、複数のユニットから構成される。すなわち、電源供給源の電源ユニット,PLC全体の制御を統率するCPUユニット,FAの生産装置や設備装置の適所に取り付けたスイッチやセンサの信号を入力する入力ユニット,アクチュエータなどに制御出力を出す出力ユニット,通信ネットワークに接続するための通信ユニットなどの各種のユニットを適宜組み合わせて構成される。
PLC(CPUユニット)は、入力ユニットで入力した信号をCPUユニットのI/Oメモリに取り込み(INリフレッシュ)、予め登録されたユーザプログラムに基づき論理演算をし(演算実行)、その演算実行結果をI/Oメモリに書き込んで出力ユニットに送り出し(OUTリフレッシュ)、その後、いわゆる周辺処理を行うと言うことを繰り返し処理する。PLCは、この繰り返し処理をすることで非制御対象を制御する。
そして、上記したユーザプログラムや、設定データ(以下、「ユーザデータ」と称する)は、RAMと呼ばれるメモリに格納されており、演算実行時に逐次読み書きするようになっている。
一方、PLCが設置される工場内の環境は、サーボモータ,インバータ,高圧電力装置など多種多様な装置がPLCに接続され、あるいはPLCの付近に配置されている。そのため、放射ノイズ,電源の瞬時停電,電磁界などにより、PLC内のメモリに格納されたデータの破壊が発生しやすくなっている。また、PLC内のメモリのデータ破壊の現象は、宇宙線によっても生じる。なお、前者の原因によるデータ破壊は、通常数ビット単位で発生し、後者の宇宙線によるデータ破壊は、1ビット単位で発生することが多い。
当然のことながら、係るデータ破壊が生じたユーザデータに基づいて制御すると正常動作しないので、PLCは、運転中に係るデータ破壊が発生していないか確認している。具体的には、PLCは、RAM上にあるデータのサム値を計算し、予め格納してあるサム値と比較し、一致することで異常がないことを確認している。
つまり、PLCは、ユーザデータが新規にダウンロードされたり、変更された際に、そのユーザデータの先頭から最終までの値を加算し、得られた値を「サム値」として別エリアに格納する。そして、実際の運転中は、RAM上にあるユーザデータのサム値を複数回に分けて算出し、最終データのサム値算出までを終えると、別エリアに格納しているサム値と比較する。このとき、サム値が一致しない場合は、何らかの理由でRAM上のデータが壊れた(メモリ異常)と判断し、暴走・不正出力を防止するためPLCを停止させていた。
また、ユーザプログラムは、命令オブジェクトコードというユーザプログラムを高速に実行可能な専用IC(ASIC)や汎用のMPUが理解するためのコードで構成されており、使用されるコードは予め決められている。
通常は、まずASICが命令オブジェクトコードを解釈し、ASIC自身で実行すべき命令か、MPUで実行すべき命令かを判断する。このとき、ASICがASIC自身でもMPUでも実行できないコードを検出した場合は、異常をMPUに通知する。この通知を受けて、MPU処理内で「オブジェクトコードを格納しているRAMが壊れた」と判断し、PLCを停止する方法もとられている。
上記のようにPLCを停止した後、メモリの修復作業を実行する。しかし、この修復作業を実行するには、ユーザプログラム転送,送信をするパソコン等のツールをPLCに接続する必要があるが、PLCは、一般に制御盤の奥に設置されているので、その接続は簡単ではない。
さらに、サム値の照合の場合、データ破壊を起こしていても、偶然にサム値が一致してしまうおそれがあり、また、データ破壊によってオブジェクトコードが変更されても、変更後のコードもASICやMPUが実行可能なものになっていると正常と判断してしまう。従って、確実にデータ破壊を検出することは困難である。
係る問題を解決するため、例えば特許文献1に記載のプログラマブルコントローラ用表示装置がある。この特許文献1は、PLCのメモリに格納されたユーザデータと同一内容のデータをバックアップデータとして表示装置に格納しておき、電源投入時と、その後所定の時間を経過したときに、PLCのメモリに格納されているデータの破壊の有無を検査し、破壊されている場合には、表示装置に格納されたバックアップデータを基に、PLCのメモリの復旧作業を行うようにしている。また、不一致情報をロギングしておき、その内容を表示する機能も有する。そして、破壊の有無の検査は、表示装置内のPLCバックアップ用メモリに格納されたバックアップデータと、PLCのメモリ中のPLCデータとを順次吸い上げ、表示装置内のワークメモリを使って比較照合し、PLCバックアップデータとPLCデータとが不一致となったとき、データ破壊があったと判断する。そして、データ破壊があった部分を、PLCにダウンロードすることにより復旧作業を行う。
特開平11−143784の明細書の段落[0022],[00023],[0034],図面の図1から図3など参照
しかしながら、上記した特許文献1に示した発明では、以下に示す問題がある。すなわち、表示装置はPLCから比較的離れた位置に設置され、ネットワークを介して接続されている。従って、PLCのメモリの読み出しは、ネットワークを介して行うことになり、頻繁に行うことができない。そのため、特許文献1では、電源投入時の後は、一定時間経過毎に行うとしている。この一定時間が具体的などれくらいの期間かは明記されていないが、明細書全体の記載から判断しても、比較的長い間隔であるといえる。従って、従来のサム値によるチェックに比べ、検査する間隔が長く、データ破壊が生じても直ぐに検知することは困難である。
さらに、異常発生を表示装置で検知し、それに基づいて正しいデータをPLCにダウンロードする方式では、PLCに対して異常を通知するのが遅れるばかりでなく、係る表示装置からのダウンロードによる修復処理では、通常、PLCを一旦停止させる必要があり、リアルタイムでのメモリ復旧をすることが困難となる。
さらに、サム値によるチェックでも、サイクリックに動作するPLCの1サイクル毎にユーザプログラム全体をチェックすることはできず、一部分を順次計算し、その計算結果の合計によりサム値を求める。よって、データ破壊を生じてから実際に検出されるまでのタイムラグが大きくなる。
本発明は、メモリのデータ破壊を迅速かつ正確に検出でき、かつ、データ破壊のメモリ異常を検出した場合には、PLCの運転を継続しながら自動復旧することのできるPLC用ユニット及びメモリ自動復旧方法を提供することを目的とする。
この発明によるPLC用ユニットは、共通処理,演算処理,I/Oリフレッシュ処理および周辺サービス処理をサイクリックに実行するプログラマブルコントローラ用ユニットであって、
前記演算処理時に読み出されるユーザプログラムが格納されるユーザプログラムメモリと、
前記ユーザプログラムメモリに格納されたユーザプログラムと同一内容のデータが格納されたバックアップメモリと、
サイクリック実行中に前記ユーザプログラムメモリに格納されたユーザプログラムのメモリ異常を検出するメモリ異常検出機能と、
前記メモリ異常検出機能がメモリ異常を検出した際に、検出したメモリ異常箇所のデータを前記バックアップメモリの該当箇所のデータで修復する修復機能とを備え、
データ修復後もサイクリック実行を継続するようにしたものであり、
前記サイクリックによる演算処理は、ASICが前記ユーザプログラムメモリに格納されたユーザプログラムを構成するオブジェクトコードを順次読み出して実行するものであり、
かつ、前記メモリ異常検出機能は、
1サイクル毎で複数ブロックに分割された前記バックアップメモリと前記ユーザプログラムメモリの内容をブロック単位で比較し、比較した結果が不一致の場合はメモリ異常と判定する第1の検出機能と、前記演算処理の実行時に前記ASICが読み出した前記オブジェクトコードが予め定められたオブジェクトコードと異なる場合にメモリ異常と判定する第2の検出機能とからなり、
前記修復機能は、
前記第1の検出機能によりメモリ異常を検出した場合は、前記バックアップメモリの該当箇所のデータで修復するものであり、
前記第2の検出機能によりメモリ異常を検出した場合は、メモリ異常と判定した際に、前記ASICが異常を検知したオブジェクトコードが格納されたアドレス情報に基づいて、前記バックアップメモリと前記ユーザプログラムメモリの内容を比較して不一致箇所を検出することにより、メモリ異常を発生している箇所を特定し、前記バックアップメモリの該当箇所のデータで修復するようにした。
ユーザプログラムメモリは、実施の形態では、ユーザメモリに対応する。そして、比較する内容には、ユーザプログラムやパラメータエリア等を含ませることができる。
ここで、比較する内容のユーザプログラムの代表的な例としては、ユーザがパソコン等のツールを用いてラダー言語等の制御プログラム記述言語で作成したプログラムがPLCで実行可能なコード(オブジェクトコード)に変換されたものである。また、パラメータエリアに格納されるデータとしては、PLCのシステム設定に関するデータや、ネットワーク通信の設定に関するデータ等、ユーザプログラムの実行モードでは変更されないデータが該当する。
もちろん、1サイクルでユーザプログラムメモリのユーザプログラム全体をチェックするようにした場合でも、本発明のようにI/Oデータの待避,復旧をすることなく、ユーザプログラムのメモリ復旧をするようにしてももちろんよい。このメモリのチェックとしては、例えばサム値チェックやメモリとバックアップメモリの比較等各種のものにより実現できる。
一方、本発明に係るメモリ自動復旧方法は、共通処理,演算処理,I/Oリフレッシュ処理および周辺サービス処理をサイクリックに実行するPLC用ユニットにおけるメモリ自動復旧方法であって、前記PLC用ユニットには、前記演算処理時に読み出されるユーザプログラムが格納されるユーザプログラムメモリと、前記ユーザプログラムメモリに格納されたユーザプログラムと同一内容のデータが格納されたバックアップメモリとを備えたものを前提とする。そして、サイクリック実行中に前記ユーザプログラムメモリに格納されたユーザプログラムのメモリ異常を検出するメモリ異常検出処理を行い、次いで、前記異常検出処理を実行した結果、メモリ異常を検出した場合には、検出したメモリ異常箇所のデータに対応するデータを前記バックアップメモリから読み出すとともに、前記ユーザプログラムメモリに書き込むことによりデータを修復する修復処理を行う。そして、データ修復後もサイクリック実行を継続することである。そして、前記サイクリックによる演算処理は、ASICが前記ユーザプログラムメモリに格納されたユーザプログラムを構成するオブジェクトコードを順次読み出して実行し、かつ、前記メモリ異常検出処理は、1サイクル毎で複数ブロックに分割された前記バックアップメモリと前記ユーザプログラムメモリの内容を比較し、比較した結果が不一致の場合は、メモリ異常と判定する第1検出処理と、前記演算処理の実行時に前記ASICが読み出した前記オブジェクトコードが予め定められたオブジェクトコードと異なる場合にメモリ異常と判定する第2の検出処理を有する。そして、前記修復処理は、前記第1の検出処理によりメモリ異常を検出した場合は、前記バックアップメモリの該当箇所のデータで修復し、前記第2の検出処理によりメモリ異常を検出した場合は、メモリ異常と判定した際に、前記ASICが異常を検知したオブジェクトコードが格納されたアドレス情報に基づいて、前記バックアップメモリと前記ユーザプログラムメモリの内容を比較して不一致箇所を検出することにより、メモリ異常を発生している箇所を特定し、前記バックアップメモリの該当箇所のデータで修復する。
PLCによる制御(上記演算処理)は速度が要求されるため、演算実行時には高速処理可能なメモリを使用している。ユーザプログラムメモリをこの種のメモリで構成することにより、演算処理の速度向上が図れる。ところで、この種のメモリは、電源OFF時にデータを保持できないため(この種のメモリはスタンバイ電流が大きく、ユーザプログラムを格納するサイズ分のメモリのデータを長期間保持するためには大量の電池等が必要となり、PLC用ユニットに実装することは構造的にも価格的にも現実的でない)、ユーザプログラムは別途不揮発性のバックアップメモリに保存しておき、電源投入の際にバックアップメモリからユーザプログラムメモリに転送し、サイクリックな処理を実行するようになっている。従って、電源ON時においては、ユーザプログラム等のデータは、同一内容がユーザプログラムメモリとバックアップメモリに格納されることになる。
そこで本発明では、メモリ異常のチェックをPLC用ユニット側で行い、ユーザプログラムメモリのデータが破壊されたメモリ異常を生じた場合には、バックアップメモリに格納された対応するデータを用いて正しい内容に書き換え、ユーザプログラムメモリの復旧をする。これにより、ユーザプログラムメモリ上のユーザプログラムデータは正常となり、PLCは運転を続けることができる。係るバックアップメモリに格納されたユーザプログラムをユーザプログラムメモリへ格納する処理は、内部メモリの転送であり、サイクリックな処理中にリアルタイムで瞬時にユーザプログラムメモリを復旧することができ、データ修復後もサイクリック実行を継続することができる。よって、PLCを停止することなく、ユーザプログラムメモリの自動復旧を行うことが可能となる。
また、メモリ異常を検知する手法として、(1)ユーザプログラムメモリとバックアップメモリのユーザプログラム格納領域のデータを比較し、一致するかどうか判定する方法と、(2)ASICが理解できるオブジェクトコードか否か判定する方法と、(3)サム値チェックで判定する方法の3種類を示したが、これらは何れか一つを組み込んでも良いし、任意の複数の方法を組み込んでも良い。もちろん他の方法が有ればそれを組み込むこともできる。
そして、上記(1),(2)の両方を組み込むとより好ましい。すなわち、サイクルタイムをむやみに延ばさないためには、(1)のデータの比較は1サイクルで数バイト程度(このサイズはPLCの性能により適宜決定すれば良い)しか実行できない。したがって、このデータの比較によりあるアドレスのデータが正常と判断されたのち、該当アドレスでデータ化けが発生した場合は、次回の該当アドレスのデータ比較まで、メモリ異常を検出できずにPLCの運転上好ましくない状態が続くことになる。しかし、(2)を併用することにより、データ化け発生箇所がユーザプログラム記憶エリアのオブジェクトコード格納部分である場合は、ASICによるユーザプログラム実行時(具体的には、オブジェクトコード読み出し時)にデータ化け検出が可能となるため、早期にメモリ異常を認識できるので、PLCの信頼性が向上する。
なお、(1)による数バイト単位での検査では、全てのデータに対してチェックが完了するまでに複数サイクル分がかかるものの、メモリ異常が存在する部分を検査すると、そのサイクル中に異常を検知することができる。
なおまた、本発明では、1サイクルでユーザプログラムメモリのユーザプログラム全体をチェックするものももちろん含む。この場合に、上記した(1),(2)の何れも利用できるし、(3)のサム値チェックも有効な機能の1つとなる。
以上のように、この発明では、メモリのデータ破壊を迅速かつ正確に検出でき、かつ、データ破壊のメモリ異常を検出した場合には、PLCの運転を継続しながら自動復旧することができる。
図1は、本発明の好適な一実施の形態を示すPLC用のCPUユニット10の構成図である。図1に示すように、システムプログラム(ファームウェア)はフラッシュメモリからなるシステムメモリ(SROM)11に格納されており、このシステムプロクラムは、MPU12に呼び出され、MPU12は、ワークメモリ(WRAM)13を適宜使用しながらプログラムに従った所定の処理を実行する。
また、運転時において、ユーザデータの1つであるユーザプログラムは、ユーザプログラムメモリであるユーザメモリ14に格納されている。このユーザメモリ14は、高速RAMであるSRAMにより構成され、電源OFF時には内容を保持することができない。従って、同一内容のユーザプログラムを、電源OFF時にも内容を保持するフラッシュメモリから構成されるバックアップメモリ15に格納しておく。そして、電源ON時にバックアップメモリ15に格納されたユーザプログラムをユーザメモリ14に転送するようにしている。
また、I/Oデータやパラメータは、IOメモリ16に格納されている。このIOメモリ16もユーザメモリ14と同様にSRAMで構成されているが、本実施の形態では、電源OFF時でも内部バッテリにより通電される構成を採っているため、記憶内容は保持される。
ASIC17は、ユーザメモリ14に格納されたユーザプログラム(命令オブジェクトコード)を順次呼び出し、呼び出した命令オブジェクトコードを解析し、命令実行をする。また、この命令実行時に、適宜IOメモリ16にアクセスし、I/Oデータを読み書きしたり、パラメータを取得する。さらに、I/Oデータは、I/Oバス18を介して他のユニットひいては、入出力機器との間で送受される。
また、ASIC17は、命令オブジェクトコードを解析した際に、自己が理解できない不正なコードになっている場合には、異常と判断し、MPU12に対して異常通知をする。なお、上記した構成並びに作用は、基本的に従来公知のものと同様であるので詳細な説明を省略する。なおまた、PLCは、このCPUユニット10以外に、電源ユニットやI/Oユニットなど各種のユニットをバス接続して連結して構成される。
ここで本発明では、図2に示すように、MPU12が、ユーザメモリ14に格納されたユーザプログラムのデータと、バックアップメモリ15のユーザプログラムのデータを照合し(1)、内容が一致しているか否かを判断する。そして、一致している場合には、ユーザメモリ14はデータ破壊されていないと判断し、そのままユーザメモリ14に格納されたユーザプログラムの実行を継続する。一方、図2に示す「アドレス3」のように不一致の場合には、ユーザメモリ14のデータ破壊が発生したと判断し、バックアップメモリ15に格納された該当するデータ(アドレス3のデータ)をユーザメモリ14に上書きする(2)ことによってユーザメモリ14上のデータを正しいものに修正する。これにより、PLCは運転を続けることができる。なお、両メモリの比較処理は、例えば比較対照のデータを読み出してワークメモリ(WRAM)13に格納し、そこにおいて比較するなどの他、各種の方法をとることができる。
また、ASIC17は、命令実行時に理解できないコード(ASIC17もMPU12も共に実行できない命令のコード)を検出した場合は、異常をMPU12に通知する機能を持っている。係る理解できないコードの検出に基づく通知をMPU12が認識すると、バックアップメモリ15にある該当するデータに基づいてユーザメモリ14を修復し、その修復したコードを再度ASIC17に読み込ませる。これにより、ASIC17は、正しいコードを読み取り実行する。よって、PLCを停止することなくメモリの自動復旧を行える。
一例を示すと、例えば図2においてアドレス3の命令オブジェクトが理解できないコードとすると、ASIC17の動作は以下のようになる。つまり、ASIC17は、命令オブジェクトコードをアドレス順に順次読み取り、その命令内容を解析し、実行する。従って、まずアドレス1に格納された命令オブジェクトコードに基づく命令を実行し、次いでアドレス2に格納された命令オブジェクトコードの命令を実行する。そして、次の命令を実行すべくアドレス3の命令オブジェクトコードを読み取ると、理解できない命令コードであるため、その命令を実行することなく、MPU12に異常を通知する。
これを受けて、MPU12は、バックアップメモリ15中に格納された該当するアドレス3の内容でユーザメモリ14のアドレス3の内容を修正する。そして、ASIC17に再度アドレス3の命令オブジェクトコードを読み取らせることによって、ASIC17は、修復後のアドレス3の命令を実行する。その後、通常通り、アドレス4の命令オブジェクトコードを読み取り、その命令を実行する。このように、ユーザプログラムの演算実行中に、異常を発見した場合、PLCを停止することなく自動的にユーザプログラムの内容を修復し、正しい内容で演算実行を継続することができる。
次に、上記した各種のメモリ異常検出並びにそれに伴うメモリ自動復旧を行うための具体的な処理機能を説明する。まず、PLC(CPUユニット10)は、共通処理,演算処理(ユーザプログラムの実行),I/Oリフレッシュ処理および周辺サービス処理をサイクリックに繰り返し実行するようになっている。そこで、上記したユーザメモリ14の異常チェックもサイクリックに行うことになるが、ユーザメモリ14のユーザプログラム全体を1サイクルでチェックする方法と、複数サイクルに分けてチェックする方法がある。
複数サイクルに分けてチェックする場合は、ユーザメモリ14のユーザプログラムを複数(N個)のブロックに分割し、1サイクルで1つのブロックに対してチェックを行い、Nサイクルでユーザプログラム全体のチェックが完了するようになる。そして、あるサイクルで異常が検知されたならば、そのサイクルで検査中のブロックのみをメモリ自動復旧することになる。そして、複数回に分けてチェックする場合のMPUの機能は、図3に示すようになる。
すなわち、複数に分けたユーザメモリ14のユーザプログラムの1ブロック分に対し、メモリチェックをする(ST1)。具体的には、ユーザメモリ14とバックアップメモリ15を比較する。そして、不一致があるか否かを判断する(ST2)。そして一致している場合には正常で、不一致の場合にはユーザメモリ14のデータ破壊(メモリ異常)を生じていると判断する。
そこで、不一致が検出された場合は、現在処理中の1ブロック内の不一致箇所のメモリの自動復旧を行う(ST3)。つまり、両メモリの内容に不一致が生じた場合、メモリの安定性等の原因からユーザメモリ14側にデータ破壊が生じたと推定できるため、上記した如く不一致の場合には該当するデータをバックアップメモリ15から読み出してユーザメモリ14に上書きするようにした。
但し、本発明はこれに限ることはなく、バックアップメモリ15のユーザプログラムのサム値チェックを行い、バックアップメモリ15の内容が正しいことを確認の上、ユーザメモリ14への上書き処理を行うようにするとなお良い。バックアップメモリ15のユーザプログラムのサム値チェックを行う理由は、バックアップメモリを構成する不揮発性メモリにおいてもデータ化けが発生する可能性が0ではないためである。
このようにして、メモリ異常があった箇所を正しいデータに修正後、或いはメモリが一致している場合に、通常のサイクリックな処理を実行する。つまり、ASIC17が、ユーザメモリ14に格納されたユーザプログラム(命令オブジェクトコード)を順次読み出し、コードを解析して命令を実行する(ST4)。次いで、I/Oリフレッシュを行う(ST5)。
従って、メモリ異常があった場合には、プログラム実行前にCPUユニット10内のバックアップメモリ15に格納されたバックアップデータに基づいて自動的に修復された後、プログラムが実行される。よって、従来のようにPLCを一旦停止することなく、継続運転が可能となる。
さらに、本実施の形態では、ステップ4のユーザプログラム実行時においてもメモリ異常(データ破壊)の有無を監視し、異常を検知した場合には自動復旧するようにしている。つまり、ASIC17が読み出した命令オブジェクトコードが理解できないコードの場合には、異常と判断し、通知する。これに基づき、MPU12がユーザメモリ14とバックアップメモリ15を比較し、異常箇所を特定後、該当する部分のデータを修復させる。このため、ASIC17が理解できないコードは実行されず、修復後にASIC17が実行することにより、PLCを停止することなく、データ破壊が生じたメモリを自動復旧することが可能となる。また、MPU12は、ASIC17が異常を通知してきた時のASIC17が示すアドレスを知ることができる。したがって、MPU12は、そのアドレスの周囲の所定のサイズのデータを検査すればよいので、短時間で異常箇所を発見できる。なお、この処理の詳細は後述する。
なお、両メモリのユーザプログラムの比較であるが、この例では各サイクリックごとに、ユーザプログラム(データ)の一部について順次実行しているため、ユーザプログラム全体のチェックが完了するのは複数サイクルごとになる。但し、従来のようにサム値のチェックではないので、メモリ異常が生じている場合には、その異常箇所のブロックを検査することにより異常を検知できるので、異常箇所の発見は早期に行えるとともに、メモリ復旧も、当該異常を発生している箇所のみ行えば良く、さらに自動的に復旧されるので、従来のものよりも早期に修正処理を行うことができる。
つまり、ユーザメモリ14のユーザプログラムをN個にブロックに分割した場合、Nサイクルでユーザプログラム全体のチェックが完了するが、n番目(n<N)にメモリ異常が生じている場合、従来のサム値チェックではNサイクルごとに初めて異常を検知することができ、しかも、異常があったことを知ることはできるものの異常箇所の特定まではできないので、ユーザプログラム全体を更新する必要がある。そこで、一旦PLCを停止し、修正処理を行うことになる。
これに対し、本実施の形態では、図4に示すように、分割したブロック単位で検査し、(n−1)サイクルまでは、メモリ異常無しなのでそのまま通常のサイクリックな処理を行い、n番目のサイクル実行時にメモリの不一致を検知すると、自動的に当該部分(ブロックn)のメモリを自動復旧させ、そのままPLCを停止することなくユーザプログラムの実行を行うことになる。このように、本実施の形態では、n回(N回未満)目でメモリ異常を発見でき、しかもPLCを停止することなく自動復旧させるとともに、正しい内容でPLCは運転を続行することができる。
なお、図3に示したフローチャートでは、上記したステップ1から5までの処理を繰り返し実行するようにしているが、本発明はこれに限ることはなく、例えばメモリチェックを毎サイクル行うのではなく、所定サイクルごとに行うようにしてもよい。さらには、従来のサム値チェックによるメモリチェック機能(異常検出時はPLCを停止)を組み込むようにしてもよい。その場合には、係る従来方式と、上記した実施の形態によるユーザメモリ14とバックアップメモリ15のデータ内容の比較によるチェックのいずれかを切り替えて実行することになる。
次に、メモリチェック並びにそれに伴う自動復旧処理について説明する。まず、ステップ2は、具体的には図5に示す処理を実行する。すなわち、ユーザメモリ(RAM)14とバックアップメモリ(BROM)15を比較する(ST11)。このとき比較するデータは、ユーザデータの一部であり、例えば4バイト分とする。そして、一致しているか否かを判断し(ST12)、一致している場合には、そのまま正常終了する。また、一致していない場合には、バックアップメモリ15中の該当箇所(不一致だった部分)のデータをユーザメモリ14の該当箇所に上書きする(ST13)。つまり、データの一部であっても、対応する部分同士を対比するので、比較した部分についての異常の有無を判定することができる。
これによりメモリの復旧が行われるが、本実施の形態では、さらに確実に復旧処理を行うために、ユーザメモリ14のデータを再度読み出し(ST14)、バックアップメモリ(BROM)15の内容と比較する(ST15)。すると、通常であれば、ステップ13の処理により正しい内容に復旧されているためこの判定処理はYESとなって正常終了する。但し、書き込みエラーなどにより正しく復旧できなかった場合には、ステップ15の分岐判断はNoとなるので、ステップ16に進み、バックアップメモリ15中の該当箇所(不一致だった部分)のデータをユーザメモリ14の該当箇所に上書きする。
そして、ユーザメモリ14のデータを再度読み出し(ST17)、バックアップメモリ(BROM)15の内容と比較する(ST18)。なお、この2回の書き込み処理でもメモリの不一致が認められる場合には、メモリのハード的な故障の恐れがあるので、メモリ異常として処理を終了する。つまり、この場合には、PLCを停止することになる。
例えば、ユーザメモリ(RAM)14並びにバックアップメモリ(BROM)15に格納されたデータが、それぞれ図5のフローチャートの横に記載されたようになっているとすると、4番目のデータが不一致であるため、ステップ13或いはステップ16の処理により、ユーザメモリの内容が正しいものに修正される。なお、ステップ2で説明したように、バックアップメモリのサム値チェックをする場合には、図5に示すフローチャートでは、ステップ11を実行する前に行うとよい。
一方、ステップ4のユーザプログラム実行時に行うチェックは、図6に示すようなフローチャート実行することになる。従来と同様にASIC17が持つ異常検知機能により、自己が理解できないコードを取得した場合には、異常と判定し、MPU12に通知するので、MPU12は係る通知を受信するのを待つ(ST21)。この通知を受け取ったMPU12は、異常発生の事実を知り、ASIC17のもつアドレスを取得する。MPU12は、取得したアドレスから上下所定の長さ分のデータに対し、ユーザメモリ(RAM)14とバックアップメモリ(BROM)15を比較する。そして、一致しないデータの箇所を検出すると、その位置を異常データ位置と特定し、検出処理を終了する(ST22からST24)。ここで前記「上下所定の長さ分」とは、各命令オブジェクトコードの先頭を現すフラグが化けることを想定すると命令オブジェクトコードの最大長とすれば良い。
そして、異常データ位置のデータを、バックアップメモリ15から読み出してユーザメモリ14に上書きし、復旧を行う(ST25)。なお、この復旧処理も、図5で説明したように、正しく書き込めたかを複数回確認するようにするとよい。これにより、自動復旧が完了する。
そして、ASIC17に対し、異常データを含む命令の先頭アドレスをセットする(ST26)。これにより、ASIC17は、異常検出に伴い完了できなかった命令を、当該異常データが正しい内容に復旧された正しい命令のもとで実行することができる。
さらに上記した命令実行時の処理の詳細は、図7に示すようになる。まず、命令実行時のASICは、正しいASIC命令(ASICで実行可能な命令コード)を受けている場合には、その命令を実行し、正しいASIC命令でない場合(正常なMPU実行可能命令或いは不正命令)には、ASICを停止し、MFN_STPフラグをONにする(ST31,ST32)。
そして、命令の種類が正常命令か不正命令かを判断する(ST33)。そして、正常命令の場合には、MFNレジスタ(命令を格納するレジスタ)に命令番号をセットする(ST35)。また、不正命令の場合にはMFNレジスタに不正命令番号をセットする(ST36)。
一方、MPU12は、MFN_STPがONになっているか否かを監視し(ST37)、ONの場合にはASICが停止したと判断し、MPUが命令実行する(ST38)。すなわち、ステップ33の分岐判断で正常命令の場合には、正常なMPU実行可能命令であるので、指定された位置で命令実行を行う。つまり、MFNレジスタにセットされた命令番号を実行する。また、不正命令(MFNレジスタの内容が不正命令番号、例えば0x3FFC)の場合には、メモリの自動復旧を行う。具体的には、図5に示したフローチャートを実行する。その後、ASIC17を再起動し(ST39)、ステップ31に戻りユーザプログラムの処理を実行する。
上記した実施の形態では、複数回に分けてユーザメモリ14のユーザプログラムとバックアップメモリ15のユーザプログラムとの比較チェックを行うようにしたが、本発明はこれに限ることはなく、1サイクルでユーザメモリ14のユーザプログラム全体のチェックを行うようにすることもできる。この場合に、図3に示すステップ1のメモリ異常のチェックをユーザメモリ14のユーザプログラム全体に対して行うこともできる。また、1サイクルでユーザプログラム全体を比較チェックするかわりに、1サイクルでユーザプログラム全体のサム値チェックを行うようにしても良い。その場合には、例えば図8に示すフローチャートのようにサム値チェックを行うことになる。
すなわち、ユーザプログラムを実行する(ST41)。この演算実行時に、上記した実施の形態のようにコードチェックをしてももちろん良い。次いで、ユーザメモリ14のユーザプログラム全体のサム値チェックを行う(ST42)。そして、異常の有無を判断し(ST43)、異常が生じていない場合には、現在のIOメモリ16上のI/Oデータを読み出して、バックアップメモリ(例えば、WRAM13上に設ける)に待避する(ST44)。その後、I/Oリフレッシュ処理をする(ST47)。
また、異常が発生した場合には、ユーザメモリ14のユーザプログラム全体のメモリ自動復旧を行う(ST45)。具体的には、MPU12またはASIC17は、ユーザメモリ14のユーザプログラムとバックアップメモリ15のユーザプログラムを比較し、この比較で不一致箇所を検出すると、当該不一致箇所のユーザメモリ14上の不正データを該当するバックアップメモリ15上のデータで書き換える。別の方法としては、バックアップメモリ15に格納されたユーザプログラム等を読み出してユーザメモリ14に書き込むことによりユーザプログラム全体を復旧するようにしても良い。サム値チェックにより異常を検知した場合には、メモリ異常箇所の特定はできないため、ユーザプログラム全体の復旧を行う。
ついで、I/Oデータの復旧処理を行う(ST46)。つまり、正常であった前回にバックアップメモリ15に待避しておいたI/Oデータを読み出して、IOメモリ16に書き込む。そして、その後、I/Oリフレッシュ処理をする(ST47)。
なお、待避並びに復旧するデータとしては、I/Oデータの他に、IOメモリ16の他のデータ(例えば、パラメータ等のI/Oリフレッシュ処理の対象とならないデータ)を含めても良い。
そして、上記した1サイクルでユーザメモリ14のユーザプログラム全体に対してチェックを行う方法の実際の動作は、図9に示すように、ユーザプログラム実行後にユーザメモリ14のユーザプログラム全体をチェックし、異常がない場合には、I/Oデータを待避後、I/Oリフレッシュを行う。そして、メモリ異常が生じた場合には、ユーザメモリ14の復旧と前回待避したI/Oデータに基づいてI/Oメモリの復旧を行うことになる。
なお、上記した実施の形態では、ユーザメモリ14とバックアップメモリ15のユーザプログラムとを比較するなど、チェック対象はユーザプログラムであったが、例えば、IOメモリ16に格納されたパラメータなどの設定値もバックアップメモリ15に格納しておき、メモリチェックの際にIOメモリ16に対してもデータ破壊(メモリ異常)の有無のチェック並びに異常時のメモリ自動復旧をすると良い。
上記した実施の形態で、ユーザメモリ14のユーザプログラムとバックアップメモリ15のユーザプログラムとを比較するとは、それぞれのユーザプログラム格納領域のデータを比較することで実行する。具体的には、ユーザプログラムが、ユーザメモリ14またはバックアップメモリ15に格納される際に予め計算されたユーザプログラムの格納領域のエリアサイズも一緒に格納しておき、比較時は、そのエリアサイズ分のデータ比較をすれば良い。
なお、上記した実施の形態においてバックアップメモリ15は、予めユニットに内蔵されたメモリで構成しても良いし、メモリカードのようにユニットに着脱可能なメモリで構成しても良い。
他の実施形態として、ユーザメモリ14内の異なる領域に同じオブジェクトコードの2つのユーザプログラム(どちらか一方を第1ユーザプログラムと呼び、他方を第2ユーザプログラムと呼ぶ)を格納した場合のメモリ自動復旧方法を示す。この実施形態では、PLCがプログラムの実行を開始すると、ASIC17は命令実行する前に第1ユーザプログラムと第2ユーザプログラムを命令単位で読み出して比較する。比較結果が一致の場合は、命令実行を行う。また、比較結果が不一致となった場合は、ASIC17はMPU12に異常を通知する。この通知を受けたMPU12は、不一致箇所のアドレスに該当するバックアップメモリ15上のアドレスのデータで第1ユーザプログラムと第2ユーザプログラムの不正データを書き換えることによりユーザプログラムを復旧する。ユーザプログラムを復旧した後、MPU12は、ASIC17の第1ユーザプログラムと第2ユーザプログラムの比較処理に制御を戻す。これらの処理をASIC17とMPU12は、ユーザプログラムの先頭から最後まで行なう。このような実施の形態とすることで、データ化けの発生していないオブジェクトコードでユーザプログラムの実行が可能となる。なお、この実施形態では、第1ユーザプログラムと第2ユーザプログラムをユーザメモリ14内の異なる領域に格納するものとしたが、これに限ることはなく、ASIC17がアクセス可能な別々のメモリ上にそれぞれ第1ユーザプログラム、第2ユーザプログラムを格納するようにしても良い。
更に、他の実施形態として、上記した複数のメモリ自動復旧の機能を実行するかどうかを選択可能なPLC用ユニットを示す。一般に、PLC用ユニットは、その動作を設定するためのメモリを備えている。そのメモリの所定領域に、メモリ自動復旧を実行しないモード、メモリ自動復旧を実行するモード(この場合は、複数あるメモリ自動復旧機能からどの機能を実行するかを指定可能に構成する)を指定するためのメモリ自動復旧動作モード指定領域を新たに設ける。PLC用ユニットの利用者は、PLC用ユニットを運転させる前に所定のツールを用いてこのメモリ自動復旧動作モード指定領域に所定のデータを設定することでメモリ自動復旧するかどうか、メモリ自動復旧するとした場合は、どのメモリ自動復旧機能を実行させるかどうかを指定する。PLC用ユニットは、ユーザプログラムの実行に先立って、メモリ自動復旧動作モード指定領域のデータを参照し、メモリ自動復旧に関する動作モードを取得する。この取得した動作モードがメモリ自動復旧を実行しない動作モードの場合は、PLC用ユニットは、運転中にメモリ異常が発生するとメモリ自動復旧動作は行わず、メモリ異常が発生したことを報知し、運転を停止する。一方、取得した動作モードがメモリ自動復旧を実行するモードの場合は、PLC用ユニットは、運転中にメモリ異常が発生すると指定されたメモリ自動復旧動作を行う。このメモリ自動復旧動作については、上記したいづれの実施形態でも良いため説明は省略する。この実施形態では、メモリ自動復旧動作モードを指定する方法としてPLC用ユニット内のメモリの所定領域にデータを設定する方法を示した。メモリ自動復旧動作モードを指定する他の方法として、メモリ自動復旧動作モードを指定する専用命令をユーザプログラムの先頭に記述し、この専用命令を実行することで動作モードを決定するように構成しても良い。この実施形態のPLC用ユニットは、メモリ自動復旧動作に伴う1サイクルに要する時間の延びが許容されるシステムではメモリ自動復旧動作を行い、メモリ自動復旧動作に伴う1サイクルに要する時間の延びが許容されないシステムではメモリ自動復旧動作を行わないように動作させることができる。つまり、この実施形態のPLC用ユニットは、メモリ自動復旧動作に伴う1サイクルに要する時間の延びが許容されるシステムおよびメモリ自動復旧動作に伴う1サイクルに要する時間の延びが許容されないシステムの両方に使用可能である。
本発明に係るユニットの内部構成の一例を示す図である。 動作原理を説明する図である。 機能を説明するフローチャートである。 機能を説明するフローチャートである。 第1の機能(データ比較)を説明するフローチャートである。 第2の機能(コードチェック)を説明するフローチャートである。 第2の機能(コードチェック)を説明するフローチャートである。 メモリチェックの別の方法を説明するフローチャートである。 メモリチェックの別の方法を説明するフローチャートである。
符号の説明
10 CPUユニット(PLC用ユニット)
11 システムメモリ
12 MPU
13 ワークメモリ(WRAM)
14 ユーザメモリ(RAM)
15 バックアップメモリ(BROM)
16 IOメモリ
17 ASIC
18 I/Oバス

Claims (2)

  1. 共通処理,演算処理,I/Oリフレッシュ処理および周辺サービス処理をサイクリックに実行するプログラマブルコントローラ用ユニットであって、
    前記演算処理時に読み出されるユーザプログラムが格納されるユーザプログラムメモリと、
    前記ユーザプログラムメモリに格納されたユーザプログラムと同一内容のデータが格納されたバックアップメモリと、
    サイクリック実行中に前記ユーザプログラムメモリに格納されたユーザプログラムのメモリ異常を検出するメモリ異常検出機能と、
    前記メモリ異常検出機能がメモリ異常を検出した際に、検出したメモリ異常箇所のデータを前記バックアップメモリの該当箇所のデータで修復する修復機能とを備え、
    データ修復後もサイクリック実行を継続するようにしたものであり、
    前記サイクリックによる演算処理は、ASICが前記ユーザプログラムメモリに格納されたユーザプログラムを構成するオブジェクトコードを順次読み出して実行するものであり、
    かつ、前記メモリ異常検出機能は、
    1サイクル毎で複数ブロックに分割された前記バックアップメモリと前記ユーザプログラムメモリの内容をブロック単位で比較し、比較した結果が不一致の場合はメモリ異常と判定する第1の検出機能と、前記演算処理の実行時に前記ASICが読み出した前記オブジェクトコードが予め定められたオブジェクトコードと異なる場合にメモリ異常と判定する第2の検出機能とからなり、
    前記修復機能は、
    前記第1の検出機能によりメモリ異常を検出した場合は、前記バックアップメモリの該当箇所のデータで修復するものであり、
    前記第2の検出機能によりメモリ異常を検出した場合は、メモリ異常と判定した際に、前記ASICが異常を検知したオブジェクトコードが格納されたアドレス情報に基づいて、前記バックアップメモリと前記ユーザプログラムメモリの内容を比較して不一致箇所を検出することにより、メモリ異常を発生している箇所を特定し、前記バックアップメモリの該当箇所のデータで修復するものである、
    ことを特徴とするプログラマブルコントローラ用ユニット。
  2. 共通処理,演算処理,I/Oリフレッシュ処理および周辺サービス処理をサイクリックに実行するプログラマブルコントローラ用ユニットにおけるメモリ自動復旧方法であって、
    前記プログラマブルコントローラ用ユニットには、前記演算処理時に読み出されるユーザプログラムが格納されるユーザプログラムメモリと、前記ユーザプログラムメモリに格納されたユーザプログラムと同一内容のデータが格納されたバックアップメモリとを備え、
    サイクリック実行中に前記ユーザプログラムメモリに格納されたユーザプログラムのメモリ異常を検出するメモリ異常検出処理を行い、
    前記異常検出処理を実行した結果、メモリ異常を検出した場合には、検出したメモリ異常箇所の不正データに対応するデータを前記バックアップメモリから読み出すとともに、前記ユーザプログラムメモリに書き込むことにより不正データを修復する修復処理を行い
    不正データ修復後もサイクリック実行を継続するものであり、
    前記サイクリックによる演算処理は、ASICが前記ユーザプログラムメモリに格納されたユーザプログラムを構成するオブジェクトコードを順次読み出して実行し、
    かつ、前記メモリ異常検出処理は、
    1サイクル毎で複数ブロックに分割された前記バックアップメモリと前記ユーザプログラムメモリの内容を比較し、比較した結果が不一致の場合は、メモリ異常と判定する第1検出処理と、前記演算処理の実行時に前記ASICが読み出した前記オブジェクトコードが予め定められたオブジェクトコードと異なる場合にメモリ異常と判定する第2の検出処理を有し、
    前記修復処理は、
    前記第1の検出処理によりメモリ異常を検出した場合は、前記バックアップメモリの該当箇所のデータで修復し、
    前記第2の検出処理によりメモリ異常を検出した場合は、メモリ異常と判定した際に、前記ASICが異常を検知したオブジェクトコードが格納されたアドレス情報に基づいて、前記バックアップメモリと前記ユーザプログラムメモリの内容を比較して不一致箇所を検出することにより、メモリ異常を発生している箇所を特定し、前記バックアップメモリの該当箇所のデータで修復するものであることを特徴とするメモリ自動復旧方法。
JP2005311614A 2002-12-27 2005-10-26 プログラマブルコントローラ用ユニット及びメモリ自動復旧方法 Expired - Lifetime JP4484074B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2005311614A JP4484074B2 (ja) 2002-12-27 2005-10-26 プログラマブルコントローラ用ユニット及びメモリ自動復旧方法

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JP2002382444 2002-12-27
JP2005311614A JP4484074B2 (ja) 2002-12-27 2005-10-26 プログラマブルコントローラ用ユニット及びメモリ自動復旧方法

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP2003421589A Division JP3961478B2 (ja) 2002-12-27 2003-12-18 プログラマブルコントローラ用ユニット及びメモリ自動復旧方法

Publications (2)

Publication Number Publication Date
JP2006059382A JP2006059382A (ja) 2006-03-02
JP4484074B2 true JP4484074B2 (ja) 2010-06-16

Family

ID=36106743

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2005311614A Expired - Lifetime JP4484074B2 (ja) 2002-12-27 2005-10-26 プログラマブルコントローラ用ユニット及びメモリ自動復旧方法

Country Status (1)

Country Link
JP (1) JP4484074B2 (ja)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2013134508A (ja) * 2011-12-23 2013-07-08 Toshiba Corp プログラマブル制御装置、方法、及びプログラム
CN103970119B (zh) * 2013-02-06 2016-12-28 施耐德电器工业公司 可编程逻辑控制器的错误处理方法
US10809687B2 (en) 2014-09-30 2020-10-20 Emerson Process Management Lllp. Field device with self-recovery
JP7447755B2 (ja) 2020-09-30 2024-03-12 株式会社明電舎 メモリエラー検出・訂正システム、メモリエラー検出・訂正方法

Also Published As

Publication number Publication date
JP2006059382A (ja) 2006-03-02

Similar Documents

Publication Publication Date Title
JP3961478B2 (ja) プログラマブルコントローラ用ユニット及びメモリ自動復旧方法
US8280579B2 (en) Memory management apparatus
EP0173515B1 (en) Error recovery system in a data processor having a control storage
US6715106B1 (en) Bios corruption detection system and method
JP4484074B2 (ja) プログラマブルコントローラ用ユニット及びメモリ自動復旧方法
JP2000221238A (ja) 回路基板自己試験のための試験システム
CN107657153B (zh) 一种芯片内flash区的代码保护方法及装置
JP2005208958A (ja) マイコンにおけるプログラムエリアのデータ保全方法
JP4708088B2 (ja) 障害復旧方法およびマイクロコンピュータ
JP2009223714A (ja) 演算回路及び演算回路の異常解析方法
JP4135413B2 (ja) メモリチェックシステムおよびメモリチェック方法、信号処理装置および信号処理装置のメモリチェック方法、ならびに、メモリチェックプログラム
JP2007304972A (ja) マイクロプロセッサシステム
US20100083073A1 (en) Data processing apparatus, memory controlling circuit, and memory controlling method
JP6907976B2 (ja) コントローラ及びデータ保存方法
CN110297455B (zh) 可编程逻辑控制器及其自检和恢复方法
CN116185461B (zh) 固件升级方法及系统
TW201604781A (zh) 寫入基本輸入輸出系統程式碼的電路與寫入方法
JP2001014027A (ja) プロセス制御コントローラの故障解析支援システム
JPH1055316A (ja) 制御装置
CN100388230C (zh) 相机程序的检测与更新方法
JP4562695B2 (ja) ディジタル保護制御装置
EP0655686B1 (en) Retry control method and device for control processor
JP2002251385A (ja) マイクロコンピュータ
JP2000194605A (ja) フラッシュメモリのリフレッシュ装置、そのリフレッシュ方法及びフラッシュメモリ
JPH03211619A (ja) データ処理装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20061215

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20090820

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20091013

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: 20100303

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

R150 Certificate of patent or registration of utility model

Ref document number: 4484074

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20100316

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130402

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130402

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20140402

Year of fee payment: 4

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

EXPY Cancellation because of completion of term