JP4836419B2 - 産業オートメーション用のcilコード・プログラムのオンライン修正 - Google Patents

産業オートメーション用のcilコード・プログラムのオンライン修正 Download PDF

Info

Publication number
JP4836419B2
JP4836419B2 JP2004222850A JP2004222850A JP4836419B2 JP 4836419 B2 JP4836419 B2 JP 4836419B2 JP 2004222850 A JP2004222850 A JP 2004222850A JP 2004222850 A JP2004222850 A JP 2004222850A JP 4836419 B2 JP4836419 B2 JP 4836419B2
Authority
JP
Japan
Prior art keywords
program
class
intermediate code
code
control
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
JP2004222850A
Other languages
English (en)
Other versions
JP2005056415A (ja
Inventor
ペティグ ミヒャエル
シュレッテ シュテフェン
レヴァンドウスキ ハンノ
Original Assignee
カーヴェー−ソフトウエア ゲーエムベーハー
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 カーヴェー−ソフトウエア ゲーエムベーハー filed Critical カーヴェー−ソフトウエア ゲーエムベーハー
Publication of JP2005056415A publication Critical patent/JP2005056415A/ja
Application granted granted Critical
Publication of JP4836419B2 publication Critical patent/JP4836419B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G05CONTROLLING; REGULATING
    • G05BCONTROL OR REGULATING SYSTEMS IN GENERAL; FUNCTIONAL ELEMENTS OF SUCH SYSTEMS; MONITORING OR TESTING ARRANGEMENTS FOR SUCH SYSTEMS OR ELEMENTS
    • G05B19/00Programme-control systems
    • G05B19/02Programme-control systems electric
    • G05B19/04Programme control other than numerical control, i.e. in sequence controllers or logic controllers
    • G05B19/042Programme control other than numerical control, i.e. in sequence controllers or logic controllers using digital processors
    • G05B19/0426Programming the control sequence
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • G06F8/656Updates while running
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • G06F8/658Incremental updates; Differential updates
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4488Object-oriented
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45516Runtime code conversion or optimisation
    • GPHYSICS
    • G05CONTROLLING; REGULATING
    • G05BCONTROL OR REGULATING SYSTEMS IN GENERAL; FUNCTIONAL ELEMENTS OF SUCH SYSTEMS; MONITORING OR TESTING ARRANGEMENTS FOR SUCH SYSTEMS OR ELEMENTS
    • G05B2219/00Program-control systems
    • G05B2219/20Pc systems
    • G05B2219/23Pc programming
    • G05B2219/23255Object oriented programming, OOP
    • GPHYSICS
    • G05CONTROLLING; REGULATING
    • G05BCONTROL OR REGULATING SYSTEMS IN GENERAL; FUNCTIONAL ELEMENTS OF SUCH SYSTEMS; MONITORING OR TESTING ARRANGEMENTS FOR SUCH SYSTEMS OR ELEMENTS
    • G05B2219/00Program-control systems
    • G05B2219/20Pc systems
    • G05B2219/23Pc programming
    • G05B2219/23327Modification of program in real time

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Automation & Control Theory (AREA)
  • Stored Programmes (AREA)
  • Programmable Controllers (AREA)
  • Devices For Executing Special Programs (AREA)

Description

一般的に言って、本発明は、産業オートメーション・システムに関し、具体的には、動作中のオブジェクト指向プログラム、特にオートメーション設備を制御するプログラムの修正ならびにオートメーション設備の制御ユニット内の実行中の制御プログラムのランタイム・システムに関する。
制御システムは、ますます頻繁に、たとえば産業製造アセンブリまたは最終アセンブリなど、特に大規模な産業プロセスまたは動作シーケンスの制御または調整に使用されている。同様に、制御システムは、可能な最大の範囲まで自動的に操作されるプロセスを監視し、現在のプロセス状況を示すのに使用される。
そのようなオートメーション設備または自動化プラントは、それによって容易にされる高い度合の生産性のゆえに、産業製造で著しい重要性を達成してきた。
生産性の目減りを避けるために、オートメーション設備を停止させるかある状態にする必要なしに、オートメーション設備の制御プログラムを修正することが可能でなければならない。
それ以外に、たとえば荷作り機の場合に、制御プログラムと、それに含まれる変数の現在の内容の間の関係が、プログラム修正の結果として失われ、したがって、現在のプロセス状態に関する情報がもはや入手可能でない場合に、包装材料ならびに包装される商品の両方を除去する必要がある。
オートメーション設備のめいめいの最新の状態に関わりなく、修正されたプログラムを採用できるようにするために、ある必要条件を満たさなければならない。その一方で、プログラム切り替えは、リアル・タイムで行われなければならない。これは、制御プログラムのセット応答時間または実行インターバルを超えてはならないことを意味する。さらに、現在のプログラム状態、特にデータ、たとえばオートメーション設備の現在のプロセス状態に関する情報を含むデータを、修正されたプログラムによって維持し、使用し続けることが非常に重要である。
SPS制御システムの場合に、これらは産業オートメーションで使用されるので、さまざまな異なるプログラミング・システムが、現在、すでに、プログラム実行を中断する必要なしに、プログラム修正を実施することができる。この特徴を、頻繁に、「オンライン・プログラミング」と称する。しかし、これらのシステムでは、プログラミング・システムと制御システムのランタイム・システムの間の緊密な調整を必要とするプロセスが使用される。それを行う際に、プログラミング・システムは、修正の前にプログラムの状態に関する情報を管理し、したがって、その情報から、プログラム修正を実施するのに必要な、必要な処置を導出する。
しかし、今日のプログラミング・システムは、頻繁に、機能性に関する制約を特徴とする。したがって、たとえば、リアルタイム態様は、一般に、極まれに考慮に入れられる。それよりも、プログラム実行の中断の持続時間がクリティカルでないと仮定される。これは、プログラム・コマンドの修正だけを許容し、変数オブジェクトまたはオブジェクト構造に対する変更(インスタンス化)をサポートしないプログラミング・システムに関してそうである。他のシステムでは、グローバル・データ・オブジェクトが使用されるが、この場合には、ユーザが手作業でプログラム変数に対処する。しかし、ユーザは、プログラム修正が実施された後に変数が古い内容を保っていることを保証する責任を負う。そのような単純なプログラミング・モデルの主な短所は、オブジェクト指向ではなく、データ・カプセル化を許容しないことである。
使用されるプログラミング・システムに対する要求によって、産業制御エンジニアリングの分野での展開のために特に開発されたプログラミング・ツールを使用することだけが可能になる。
したがって、本発明の目的は、展開されたプログラミング・システムの機能性に今まで課せられていた制限の広範囲のまたは本質的に完全な除去を与える、オートメーション設備の動作中にその制御プログラムに対する修正を実行する方法という問題を解く、建設的な形を識別することである。具体的に言うと、目的は、特にこの目的のために適合されたことがないプログラミング・ツールを使用してプログラムを修正することである。
本発明のもう1つの課題は、動作中の制御プログラムを修正する時に、オートメーション設備のリアルタイム要件を厳守する形を示すことである。
この課題は、独立請求項の1つに基づくオブジェクトを使用することによって、驚くほど簡単に解決することができる。有用な実施形態およびさらなる開発が、サブクレームで概要を示されている。
しかし、まず、この説明および請求項全体に適用可能ないくつかの用語を、定義するか明瞭にする。
オブジェクト指向プログラミングでは、クラスによって、オブジェクトを再生する抽象エンティティが記述される。オブジェクトは、クラスのインスタンスすなわち、クラス・テンプレート基づいて生成される、コンピュータ・システムのメモリ内のイメージを構成する。
クラスは、異なるいわゆるメンバを有することができる。とりわけ、これには、クラスのメソッドおよびフィールドが含まれる。サブクラスも、クラスのメンバとすることができる。
スタックは、プログラムが状況データをバッファリングする、専用のストレージ・エリアを指す。ヒープは、データ構造が一時的に保管されるメモリの部分であり、そのデータ構造の存在およびサイズは、プログラムを実行する前に判定することができない。
本発明による、動作中のオブジェクト指向プログラム、具体的には、中間コードの形でメモリに保管され、ラン・タイムに実行可能機械コードに変換できる、オートメーション設備を制御するプログラムを修正する方法に、やはり中間コードの形での、修正されたプログラムまたは修正されたプログラム・モジュールの提供、修正を判定するための修正されたプログラムの中間コードと実行中のプログラムの中間コードの比較、ならびに実行中のプログラムでの修正の実施が含まれる。
この手順の大きな利益は、ソース・コードから中間コードを生成するプログラミング・ツールが、実施されるプログラム修正に関する追加情報を生成する必要がないという事実にある。したがって、プログラミング・ツールは、実行中のプロセスでプログラム修正を実施するための追加機能を一切必要としない。この課題は、ランタイム・システム、具体的にはeCLRランタイム・システム(Embedded Common Language Runtime)によって引き受けられる。用語“eCLR”は、埋め込みされた共通の言語ランタイム(Embedded Common Language Runtime)」の略語である。eCLRシステムは、典型的には極めて資源の制約されたデバイスである埋め込み化デバイスに特に適合するランタイム環境を指す。eCLRシステムは、例えばNETマイクロフレームワークにより提供される。これによって、プロセスの動作中にプログラミング・ツールを使用してプログラム修正をサポートできるようになり、このプログラミング・ツールは、産業制御エンジニアリングの分野での使用のために特に開発されたものではない。
ここでは、中間コードとしてCIL(Common Intermediate Language)またはMSIL(Microsoft Intermediate Language)を使用することが好ましい。CILおよびMSILは、同一の中間コードの異なる用語である。CIL中間コードは、Microsoft(登録商標)社の.NETプラットフォームの構成部分である。CLI中間コードを使用することの長所は、クラスの構成に関する完全な記述が含まれるという事実である。
中間コードを、やはり.NETプラットフォームの一部であるJIT(ジャストインタイム)コンパイラを使用して、実行可能機械コードに変換することが好ましい。
動作中のプログラムに対する修正の実施に、1つまたは複数の第1プログラム・オブジェクトの生成と、1つまたは複数の第2プログラム・オブジェクトに含まれるデータの、前述の1つまたは複数の第1プログラム・オブジェクトへのコピー(第2プログラム・オブジェクトは、動作中のプログラムの一部である)と、1つまたは複数の第2プログラム・オブジェクトから1つまたは複数の第1プログラム・オブジェクトへの切り替えが含まれ、第2プログラム・オブジェクトが、動作中のプログラムの一部であることが好ましい。
これには、バックグラウンドであるステップを実行することによって、プログラム修正を準備することが可能であるという利点がある。
さらに、修正プログラムが生成され、これは、修正の実施に非常に有用である。規則として、これは、ランタイム・システムによって行われ、プログラム修正を実施するのに必要なステップの編成された自動的シーケンスを提供するように働く。このために、たとえば、ランタイム・システムは、中間コードを生成し、この中間コードは、JITコンパイラによって実行可能機械コードに変換され、自動的に実行される。
修正が実施された後に、もはや使用されないプログラム・オブジェクトに割り振られたメモリが、割振り解除される。CLRランタイム・システムのいわゆる「ガーベジ・コレクション」機能を、この目的に使用することができる。
オートメーション設備で動作するプロセスは、一般に、あるリアルタイム要件の対象である。厳守されなければならないリアルタイム判断基準に基づいて、プログラムによって制御されるオートメーション・システムの少なくとも1つの応答時間および/またはプログラムの少なくとも1つの実行インターバルを条件として、修正を実施する時に超えてはならない最大時間をセットすることが、可能である。
このために、手順に、シミュレーションによって、修正を実施するのに必要な時間を判定できる有用な機能が含まれる。
やはり特に有利なのが、修正が、少なくとも2つのサブステージで実施されるという事実である。ここで、準備処置、たとえばプログラム・オブジェクトの生成およびデータのコピーが、第1サブステージ中に実施され、第2サブステージ中に、システムが、たとえば、新たに生成されたプログラム・オブジェクトに切り替えられる。第1サブステージ中に、動作中のプログラムの動作シーケンスで、たとえば既にコピーされたデータの修正をもたらす可能性があるイベントが発生する場合に、後の時点で第1サブステージを繰り返すことが可能である。
制御プログラムで通常そうであるように、動作中のプログラムが、アクティブ状態とアイドル状態の間で周期的に切り替えられる場合に、この手順では、とりわけ、プログラムがアクティブ状態に切り替えられる1つまたは複数の時点を便利に計算することができる。
修正の実施に必要な時間も既知である場合には、オートメーション設備のリアルタイム条件を厳守すると同時に修正を実施できる特定の時点を判定することが可能である。
さらに、本発明には、メモリ内容を読み取り、書き込む手段を含む、特に上で説明した手順を実施する、オートメーション設備の制御ユニットで制御プログラムを実行するランタイム・システムであって、制御ユニットが、アドレス可能メモリを有し、制御プログラムが、第1メモリ・エリア内の第1中間コードの形で検索可能にファイリングされ、第1中間コードの少なくとも一部を、実行可能制御コマンドに変換することができ、この実行可能制御コマンドが、プロセスがオートメーション設備で動作中である間に第2メモリ・エリアにファイリングされ、ランタイム・システムが、第3メモリ・エリア内で割り振られる第2中間コードの提供に応答し、これによって、オートメーション設備のプロセス・シーケンスが修正される、ランタイム・システムも含まれる。
オートメーション設備の動作シーケンスは、第3メモリ・エリアの少なくとも1区画と、第2メモリ・エリアの区画の開始アドレスが保管される第2メモリ・エリアの少なくとも1つのストレージ・ユニットとを選択することと、第1メモリ・エリアに保管された第1中間コードと第3メモリ・エリアに保管された第2中間コードを比較することと、第3メモリ・エリアの区画に保管された中間コードを、第4メモリ・エリアに保管される実行可能制御コマンドに変換することと、第2メモリ・エリアの区画から第3メモリ・エリアの区画にデータをコピーすることと、第4メモリ・エリアの開始アドレスを第2メモリ・エリアのストレージ・ユニットに保管することとによって、便利に修正することができる。
ランタイム・システムは、CLRランタイム・システム、特にeCLRランタイム・システムであることが好ましい。というのは、このタイプのランタイム・システムが、上で説明した効果を達成するのに特に適する機能を特徴とするからである。
本発明による手順の説明で既に述べたように、中間コードとしてCIL中間コードを使用することが好ましい。さらに、中間コードを実行可能制御コマンドに変換するランタイム・システムに、JITコンパイラも好ましく含まれなければならない。
編成された形でプログラム修正を実行するために、ランタイム・システムは、制御コマンドの生成、保管、および実行の有用な手段を特徴とする。
リアルタイム環境でランタイム・システムを使用する時には、時間の所与の期間内でプロセス・シーケンスの修正をもたらすことが可能である。このために、ランタイム・システムに、オートメーション設備のプロセス・シーケンスの修正をもたらすのに必要な期間を計算する有用な手段が含まれる。
リアルタイム条件を厳守するために、オートメーション設備のプロセス・シーケンスで修正をも当たらすために実行されるルーチンを、全体的にまたは部分的にのいずれかで繰り返すことができる。
本発明の範囲には、上で説明したランタイム・システムが統合され、上で説明した手順の実行に適するオートメーション・システムの識別も含まれる。
以下では、添付図面を参照し、好ましい実施形態に基づいて詳細に例示される本発明の概要を示す。それを行う際に、図面の同一の符号は、同一のまたは類似する構成要素を指す。
本発明による手順の以下の実施形態では、eCLRランタイム・システムが使用され、このシステムは、ECMA標準規格(European Computer Manufacturers’ Association)で指定されたCIL中間コードに基づいてプログラムを実行するように働く。eCLRランタイム・システムでは、Microsoft(登録商標)の.NETプラットフォームのCommon Language Infrastructure(CLI)の仕様が使用される。
検討されるeCLRランタイム・システムを用いると、動作中にオートメーション設備の制御プログラムに対する変更を行えるようになる。この実施形態ではCIL中間コードの形の制御プログラムが、規則として、個々のモジュール(アセンブリ)からなり、モジュールのそれぞれに、CIL中間コードが含まれる。したがって、制御プログラムは、本質的に、1つまたは複数の修正されたアセンブリを採用し、アクティブ化することによって修正される。
まず、修正を、修正されるプログラムまたはアセンブリのソース・コードに対して行う。ソース・コードは、たとえば、C#またはIEC61131仕様に対応するプログラミング言語など、さまざまな異なるプログラミング言語でプログラムすることができる。CIL中間コードを、プログラミング・ツールを使用して、修正されたソースから生成する。CIL中間コードを生成できるすべてのプログラミング・ツールが、この目的に適する。
すべての修正されるアセンブリのCIL中間コードを、eCLRランタイム・システムにロードする。
次のステップで、eCLRランタイム・システムによって、新たにロードされたCIL中間コード・モジュールが分析され、現在動作しているプログラムと比較される。それを行う際に、存在するすべての相違が検出される。これは、CIL中間コードに、メソッドだけではなくクラスのフィールドも含めて、クラスの構造の完全な記述が含まれるという事実によって可能にされるものである。
次に、プログラム更新を準備する。ここで、eCLRランタイム・システムが、プログラム・コードを生成し、そのプログラム・コードによって、採用される個々の処置が編成される。これには、特に、修正されたプログラムでも使用される、すべての存在するデータの採用が含まれる。さらに、新しいデータを初期化する。生成されるプログラム・コードの一部に、いわゆるコピー・コンストラクタおよびデルタ・コンストラクタが含まれる。
コピー・コンストラクタおよびデルタ・コンストラクタは、修正されるクラスごとに生成される。次のステップ中に、修正されるクラスのオブジェクトが、New演算子によって生成され、それに続いて、デルタ・コンストラクタが実行される。
このステップでは、クラスのすべての追加の新しいメンバが、生成され、かつ/または初期化される。次のステップで、コピー・コンストラクタによって、オブジェクトの現在の値が古いクラスにコピーされる。最後に、古いオブジェクトのすべての参照を、新しいオブジェクトに切り替える。実行のこのステップについて、制御プログラムが、短い時間期間の間ブロックされる。
eCLRランタイム・システムは、所与のプログラムの参照を制御するが、これを、マネージ・データ(managed data)とも称する。参照は、ヒープに保管される。スタックには、ヒープ内のメモリ・アドレスへの参照が含まれる。生成および解放、メモリ空間の割振り、ならびにクラスのメンバへのアクセスは、ポインタを使用して編成される。
各アセンブリに、いわゆるメタ・データが含まれ、メタ・データには、ラン・タイム中にアクセスすることができる。
図1に、メタ・データ(21から24、31、および32)とアセンブリのコード表現11から14の相互作用41を示す。各アセンブリに、図1に示されているように、たとえばXおよびYなど、クラスに関する情報、ならびにそのフィールド31および32、メソッド21から24が含まれる。この情報は、アセンブリのメタ・データに含まれる。クラスのメソッドおよびフィールドには、依存性42も示されている。アセンブリがeCLRシステムにロードされる時には、必ず、対応する中間コードが、JITコンパイラによって実行可能機械コードに変換される。クラスの各メソッドは、メモリの管理されるコード・ヒープ内の連続するコード・ブロック11から14によって表される。クラスおよびメソッドに関するすべての必要な情報、たとえばどのメソッドがどのクラスまたはメソッド・シグニチャに属するかが、静的データ・エリアであるメタ・データ・ワークスペースに保管される。クラスXのメソッド22を表すコード・ブロック12が実行される時に、たとえば、クラスYのメソッド24へのアクセス43を有することも可能である。各アセンブリに、1つまたは複数のクラスが含まれる。アセンブリの修正または交換が必要になった場合に、実行中のアセンブリと修正されたアセンブリの対応するクラスの間の相違が、まず評価される。この時に、さまざまな異なるケースを考慮に入れる。
第1のケースでは、両方のクラスに、同一のメソッドおよびフィールドが含まれる。同様に、中間コードも同一である。これは、たとえば、コードのCRC検証の助けによって検証することができる。中間コードの間に相違がないので、このケースでは、さらなるステップは不要である。
第2のケースでは、両方のクラスに、同一のメソッドおよびフィールドが含まれる。しかし、動作中のアセンブリの対応するクラスと比較して、修正されたアセンブリの1つまたは複数のメソッドが、修正された中間コードを有することが明らかになる。このケースでは、修正されたメソッドのコンパイルが実行され、この形で生成されたコードへのポインタが、元のメソッドの記述子に割り振られる。このケースでは、1つのポインタ要素だけが割り振られるので、切り替えは非常にすばやい。
第3のケースでは、両方のクラスに、もはや同一のメソッドが含まれない。これは、修正されたクラスに追加のメソッドがある場合、元のクラスに前に存在したメソッドがもはや含まれない場合、または両方のクラスに異なるシグネチャを有するメソッドが含まれる場合のいずれかに、そうなる可能性がある。このケースでは、メソッドの1つを削除する必要が生じる場合がある。そうである場合には、削除されるメソッドに、すべての修正が実行された後のアクティブ・コードへの参照が含まれるかどうかを確認するために、検証を実行する。これを、下の例によって示す。この例では、2つのアセンブリAおよびBを検討し、アセンブリAには、クラスXが含まれ、アセンブリBには、クラスYが含まれる。メソッドX::process()が、メソッドY::process()を呼び出す。クラスYのメソッドprocess()が削除される場合に、追加の対応する修正が、メソッドX::process()で実装される。これに関して、同時に複数のアセンブリを修正する必要がある場合もある。
第4のケースでは、2つのクラスの少なくとも1つのフィールドが異なる。このケースでは、オブジェクトを修正しなければならない。削除されるフィールドに関する検証を最初に実行するが、これは、第3のケースで説明した検証と同一の形で行われる。すべての修正が許容可能である場合に、コピー・コンストラクタを生成する。
修正されたクラスが元のクラス型のメンバを採用する形の基本的な説明を、下で示す。規則として、これは、コピー・コンストラクタの助けを得て行われる。コピー・コンストラクタは、古いクラス型並びに新しいクラス型の両方に含まれるすべてのクラス・メンバをコピーする、特殊な関数である。
クラス・メンバが両方のクラスに含まれるか否かを判定するために、3つのケースを区別する必要がある。
クラス・メンバの名前とデータ型が同一である場合に、そのクラス・メンバは、同一である。この第1のケースでは、クラス・メンバの間の強い関係が記述される。このケースが適用されるすべてのクラス・メンバが、コピー・コンストラクタによって、1対1でコピーされる。
クラス・メンバの名前だけが同一で、データ型が要素データ型である場合に、クラス・メンバの間に弱い関係がある。このケースが適用されるすべてのクラス・メンバが、コピーされ、たとえば「byte」データ型から「int」データ型に、変換される。
第1のケースおよび第2のケースの両方があてはまらない場合に、クラス・メンバは、異なり、したがって関連しないと考えられる。これらのクラス・メンバは、コピー・コンストラクタによって処理されない。
これを、図2の例によってもう一度説明する。図2で符号61から63の矢印によって表されるように、最初のクラス51のクラス・メンバa、b、およびdは、修正されたクラス52のクラス・メンバa、b、およびdと同一であり、コピー・コンストラクタによってコピーされる。クラス51のクラス・メンバcは、クラス52のクラス・メンバcと同一の名前であるが、データ型が異なる。名前cを有するこの2つのクラス・メンバの間に、弱い関係がある。したがって、クラス・メンバcをコピーする時に、変換64も行われる。クラスe、f、およびgは、関係せず、したがって、コピー・コンストラクタによって処理されない。
スタティック・クラス・メンバは、インスタンスごとではなく、クラス型ごとに表されるだけなので、コピー・コンストラクタは、非スタティック・クラス・メンバだけを考慮に入れる。
元のクラス型および修正されたクラス型のメタ・データにアクセスすることによって、eCLRランタイム・システムは、クラス型の間の差を分析でき、めいめいのクラス型に対応するコピー・コンストラクタを生成することができる。
中間コードの形のコピー・コンストラクタの例を、下に示す。
.method public hidebysig instance void copyctor(...)
ldarg,0
ldarg.1
ldfld int32 Application.Test2/* 02000005 */::x1/* 04000022 */
stfld int32 Application.Test1/* 02000006 */::x1/* 04000025 */
ldarg,0
ldarg.1
ldfld char Application.Test2/* 02000005 */::x2 /* 04000023 */
stfld int32 Application.Test1/* 02000006 */::x2/* 04000026 */
ldarg.0
ldarg.1
ldfld int32 Application.Test2/* 02000005 */::x3/* 04000024 */
stfld int32 Application.Test1/* 02000006 */::x3/* 04000027 */
ret
本質的に、コピー・コンストラクタには、2つの中間コード・コマンドldfld(load field)およびstfld(store field)が含まれる。このコマンドの対は、データ型に関して異ならないフィールドに使用される。フィールドの間の弱い関係は、データ型が異なるが、基本データ型すなわち、bool、int8、uint8、int16、uint16、int32、uint32、int64、uint64、real32、およびreal64に属する場合に仮定される。この場合に、弱い関係を示すクラス・メンバを互いに変換するために、conv.i4(int32)またはconv.r4(real32)などの演算子を使用する必要が生じる場合がある。
中間コードの形で引用される次の例では、データ型intのあるクラスのフィールドX1が、データ型realに変換される。
ldfld X: :X1 // int データ型
conv.r4
stfld X*: :X1 // real データ型
eCLRランタイム・システムは、JITコンパイラによって、コピー・コンストラクタを実行可能機械コードに変換する。たとえば、下に示すIntelベースのアセンブラ・コードを、コピー・コンストラクタの変換の結果とすることができる。
mov esi dword ptr [ebp+8] ; ソース・オブジェクト
mov edi dword ptr [ebp+12] ; 宛先オブジェクト
mov eax dword ptr [esi+4]; x1 (古いクラス)
mov dword ptr [di+8], eax ; x1 (新しいクラス)
基本データ型に割り振ることができない修正されたデータ型を示すフィールドの場合には、2つの異なるケースを区別する必要がある。
基底型が「システム.オブジェクト」である場合には、オブジェクトが、eCLRランタイム・システム自体によって更新される。基底型が「システム.値型」である場合には、コピー・コンストラクタに、この修正されたクラスのコピー・コンストラクタを実行するコードが含まれる。
次の例で、修正されるクラスのサブクラスの場合のコピー・コンストラクタの階層構造を示す。
C#
----
structs S { int x1; int x2; }
class X {
int x1;
S s1;}
}
ILコード・コピー・コンストラクタX::copyctor:
-------------------------------------
ldfld X: :X1 // int データ型
stfld X*::X1
ldflda X::s1
ldflda X*::s1
call S::copyctor
この場合に、このクラス型の対応するコピー・コンストラクタを呼び出すために、中間コード・コマンドldflda(load address of field)が、サブクラスのアドレスをロードするのに使用される。
すべてのコピー・コンストラクタを実行可能機械コードに変換した後に、eCLRランタイム・システムは、コピー・コンストラクタが生成された修正されたクラスへのすべての参照を収集する。そのような参照は、たとえば、グローバル・データ・エリア内の静的参照、あるいはローカル・コール・スタック内または他のオブジェクト内のサブクラスについて、局所化することができる。すべてのオブジェクト参照のリストを生成した場合に、修正されたオブジェクトが、New演算子を使用して、eCLRランタイム・システムによって再生成される。生成され、初期化された後に、オブジェクトがコピーされる。この時に、コピー・コンストラクタによって、古いオブジェクトの現在の内容が、すべての新しいオブジェクトに割り振られる。
この時点までに、修正されるプログラムに割り振られたスレッドが、この処理中にアクティブ化されたことをeCLRシステムが検出した場合に、参照の収集ならびにオブジェクトの生成およびコピーを、繰り返すことができる。
次に来るのが、クリティカル・フェーズであり、これは、中断できず、このフェーズで、すべての参照が修正される。このフェーズでは、修正されるプログラムが、ブロックされる。ポインタ割振り、したがってこの目的に必要な時間は、オブジェクト・インスタンスおよびその参照の数ならびに修正のスコープに依存する。
オブジェクト参照を修正することによって切り替えが行われた後に、その間に修正されたプログラムの実行を、再開することができる。スレッドのブロックが、解除される。eCLRランタイム・システムのもう1つの機能が、もはや不要な、予約されたメモリの割振り解除である。
本発明のもう1つの態様が、制御プロセスに関して明記されたリアルタイム判断基準が、プログラム修正が実行されている時に常に厳守されることを保証するプロセスである。規則として、制御プログラムは、周期的に実行される。リアルタイム判断基準は、プログラムの実行インターバルによって定義され、このインターバルに、入力が読み取られ、制御プログラムが実行され、出力が書き込まれる。
リアルタイム判断基準の厳守は、上で既に述べたように、プログラム修正の実施形態を、準備フェーズおよびクリティカル・フェーズに副分割することによって達成される。プログラム修正を成功裡に実施するために、制御プログラムのプログラム・コマンドを、このどちらのフェーズでも実行してはならない。
準備フェーズは、プログラム修正を実施するすべての必要な処置の事実上すべて(約99%)を含むが、準備フェーズに、何回でも割り込み、繰り返すことができる
準備フェーズがプログラム・コマンドの実行によって割り込まれるイベントにおいて、この準備フェーズをいつでももう一度開始することができる。
クリティカル・フェーズには、新しいプログラムのアクティブ化が含まれる。一貫性のために、アクティブ化は、すべてのプログラム・オブジェクトについて同時に行わなければならない。これが、このプロセスに割り込めない理由である。
本発明を使用すると、両方のフェーズに必要な時間を、正確に判定することができる。プログラム修正を実施する実行時間は、どの場合でも、アプリケーション・プログラムの最短の実行インターバルより短くしなければならない。通常のリアルタイム要件では、約10msの領域のサイクル・タイムが要求される。
プログラム・サイクルの次のアクティブ化までの時間を、前もって計算することができる。したがって、周期的に実行されるプログラムの場合に、次の実行が行われる時を予測することも可能である。
イベント制御式プログラムについては、予測を行うことができない。しかし、クリティカル・フェーズの持続時間は、いわゆるジッタに影響する。したがって、クリティカル・フェーズ中にイベントが発生する場合に、速くてもそのクリティカル・フェーズが完了した後でなければ、そのイベントを対応するプログラムによって処理することができない。最大ジッタ許容範囲が、プログラムのクリティカル・フェーズを実行するのに必要な時間より短い場合には、このように定義されたリアルタイム判断基準を厳守することによって、プログラム修正を実行することがいつでも不可能になる。
動作シーケンスを、時間に関する異なる優先順位の異なるタスクのアクティビティを示す、例示的な優先順位/時間図によって、図3に示す。あるタスクがアクティブ状態に切り替えられる場合に、より低い優先順位を有する他のすべてのタスクが、割り込まれる。
タスク73は、割り振られたプログラム・モジュールP3を有する、動作中のプログラムのメイン・タスクである。このタスクは、15msの時間インターバルで周期的に実行される。この例に示された実行中のプログラムのさらなるタスクに、10msの時間インターバルの、割り振られたプログラム・モジュールP1を有する周期的タスク71、ならびに割り振られたプログラム・モジュールP2を有するイベント指向タスク72が含まれる。リアルタイム要件に起因して、動作中のプログラムに割り振られるタスクは、最高の優先順位を有する。
図3で修正マネージャと称するeCLRランタイム・システムによって、プログラム修正が編成される。修正マネージャに割り振られたタスク81および82によって、修正が実施される。この例では、タスク81は、メイン・タスク73がアイドル状態に切り替えられた後に開始される。しかし、実行中に、タスク71がアクティブ状態に切り替えられるので、タスク81はタスク71によって割り込まれる。その後、この例ではメイン・タスク73がアイドル状態に切り替えられる次の可能な時点の間に、修正を実施するタスク82が再開始される。タスク82は、他のタスクによって割り込まれず、これは、修正が成功裡に実施されることを意味する。この例では、プログラム・モジュールP3が変更された。成功裡に修正されたので、修正されたプログラム・モジュールP3*を実行する。タスク74は、たとえば通信またはデバッグに使用される、eCLRシステムのもう1つのタスクである。
アセンブリのメタデータおよびコード表現を示す概略図である。 クラスのフィールドの修正を示す図である。 動作中のプログラムの複数のタスクならびにこのプログラムの修正を実施するタスクの詳細を示す優先順位/時間図である。

Claims (4)

  1. 現在実行されつつあるオブジェクト指向プログラムを修正する方法であって、該方法は、メモリ内容を読み取り、書き込む手段を含み、オートメーション設備の制御ユニット内で制御プログラムを実行するランタイム・システムによって実行され、
    該制御ユニットは、アドレス可能メモリを有し、該制御プログラムは、第1メモリ・エリア内に第1中間コードの形で検索可能にファイリングされ、該第1中間コードの少なくとも一部が、実行可能制御コマンドに変換され、該実行可能制御コマンドが、プロセスがオートメーション設備で動作中である間に第2メモリ・エリアにファイリングされ、ランタイム・システムが、第3メモリ・エリア内で割り振られる第2中間コードの提供に応答し、それによって該オートメーション設備内で該プロセスのシーケンスを修正し、該第1の中間コードは、メソッド及びそれぞれのクラスのフィールド含む、実行中のプログラムのクラスの構造の完全な記述を含んでおり、該第2の中間コードは、メソッド及びそれぞれのクラスを含む、修正されたプログラムのクラスの構造の完全な記述を含んでおり、
    該オートメーション設備の動作シーケンスは、バックグラウンドで自動的に修正することができ、該修正の実行は、
    該第1の中間コートと該第2の中間コードとを比較して修正されたクラスを決定するステップと、
    準備フェーズにおいて、
    該第2の中間コードに基づいて、決定された1つの修正されたクラスの少なくとも1つの第1のプログラム・オブジェクトを生成し、
    該実行中のプログラムの一部である少なくとも1つの第2のプログラム・オブジェクト内に含まれるデータを、少なくとも1つの第1のプログラム・オブジェクト内にコピーするステップと、
    クリティカル・フェーズにおいて、
    該少なくとも1つの第2のプログラム・オブジェクトから該少なくとも1つの第1のプログラム・オブジェクトに切り換え、該実行中のプログラムの一部である該少なくとも1つの第1のプログラム・オブジェクトを形成するステップとを含み、
    該修正は、該制御プログラムのタスクに割り当てられた優先順位よりも低い優先順位を該ランタイム・システムのタスクに割り当てることで、該制御プログラムが実行されている該制御プログラムの実行インターバルによって定義される、該制御プログラムに関して明記されたリアルタイム判断基準が、該制御プログラムの修正が実行されているときはいつでも常に遵守されることを保証するように、実行され、該準備フェーズがプログラム・コマンドの実行によって中断される場合には、該準備フェーズはもう一度開始され、該クリティカル・フェーズの実行のために、該制御プログラムは、割り当てられた優先順位に関わりなくブロックされ、該制御プログラムの最大ジッタ許容範囲が、該クリティカル・フェーズを実行するのに要求される時間よりも長い方法。
  2. 該中間コードの実行可能機械コードへの該変換が、JITコンパイラによって行われる、請求項1に記載の方法。
  3. 該修正を実施した後に、もはや使用されないプログラム・オブジェクトに割り振られたメモリが、もう一度割振り解除される、請求項1又は2の何れか1項に記載の方法。
  4. 該修正を実施するのに必要な時間が、シミュレーションによって判定される、請求項1乃至3の何れか1項に記載の方法。
JP2004222850A 2003-08-01 2004-07-30 産業オートメーション用のcilコード・プログラムのオンライン修正 Expired - Lifetime JP4836419B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
DE10335989.3 2003-08-01
DE10335989.3A DE10335989B4 (de) 2003-08-01 2003-08-01 Online-Änderungen von CIL-Code-Programmen für die Industrieautomatisierung

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP2007336097A Division JP2008135049A (ja) 2003-08-01 2007-12-27 産業オートメーション用のcilコード・プログラムのオンライン修正

Publications (2)

Publication Number Publication Date
JP2005056415A JP2005056415A (ja) 2005-03-03
JP4836419B2 true JP4836419B2 (ja) 2011-12-14

Family

ID=34042155

Family Applications (2)

Application Number Title Priority Date Filing Date
JP2004222850A Expired - Lifetime JP4836419B2 (ja) 2003-08-01 2004-07-30 産業オートメーション用のcilコード・プログラムのオンライン修正
JP2007336097A Pending JP2008135049A (ja) 2003-08-01 2007-12-27 産業オートメーション用のcilコード・プログラムのオンライン修正

Family Applications After (1)

Application Number Title Priority Date Filing Date
JP2007336097A Pending JP2008135049A (ja) 2003-08-01 2007-12-27 産業オートメーション用のcilコード・プログラムのオンライン修正

Country Status (6)

Country Link
US (1) US8108852B2 (ja)
JP (2) JP4836419B2 (ja)
CN (1) CN100388193C (ja)
DE (1) DE10335989B4 (ja)
FR (1) FR2858436B1 (ja)
IT (1) ITMI20041557A1 (ja)

Families Citing this family (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7027880B2 (en) * 2003-09-30 2006-04-11 Rockwell Automation Technologies, Inc. Safety controller providing rapid recovery of safety program data
US8942834B2 (en) * 2005-06-27 2015-01-27 Rockwell Automation Technologies, Inc. Method and apparatus for communicating transactions between an industrial controller and a programming interface
TWI263908B (en) * 2005-07-12 2006-10-11 Inventec Corp Update system and method
US7743363B2 (en) * 2005-10-13 2010-06-22 Microsoft Corporation Extensible meta-data
EP1916583A1 (de) * 2006-10-26 2008-04-30 Siemens Aktiengesellschaft Verfahren zur Durchführung von Online-Programmänderungen an einem Automatisierungssystem
US20080127142A1 (en) * 2006-11-28 2008-05-29 Microsoft Corporation Compiling executable code into a less-trusted address space
US20090193392A1 (en) * 2008-01-29 2009-07-30 Michael David Downen Dynamic intermediate language modification and replacement
US20100146481A1 (en) * 2008-12-09 2010-06-10 Microsoft Corporation Developing applications at runtime
EP2214101A1 (de) 2009-01-29 2010-08-04 Siemens Aktiengesellschaft Verändern von Objekten einer Anwendung
EP2249217B1 (de) * 2009-05-08 2013-04-24 Siemens Aktiengesellschaft Automatisierungsgerät und Automatisierungssystem
US20110047687A1 (en) * 2009-09-02 2011-03-03 Lee Jeong-Hee Apparatus and Method for Providing a Hygienic Toilet Seat
DE102010027906A1 (de) * 2010-04-19 2011-10-20 Beckhoff Automation Gmbh Datenverwaltungsverfahren und speicherprogrammierbare Steuerung
CN103198240B (zh) * 2012-09-29 2016-03-16 网易(杭州)网络有限公司 一种用于保护代码安全的方法和装置
US9523969B2 (en) 2013-02-20 2016-12-20 General Electric Company Systems and methods for tracking the quality and efficiency of machine instructions for operating an associated controller
DE102013005542A1 (de) * 2013-04-03 2014-10-09 Phoenix Contact Gmbh & Co. Kg Verfahren und Steuerungsvorrichtung zur Ausgabe von Daten auf einen Lokalbus
EP2869145B1 (de) * 2013-10-29 2016-04-27 dSPACE digital signal processing and control engineering GmbH Verfahren zur Beeinflussung eines Steuerprogramms eines Steuergerätes
US9958848B2 (en) 2015-02-19 2018-05-01 Rockwell Automation Technologies, Inc. Techniques for improving industrial control systems
CN105005486B (zh) * 2015-06-25 2018-11-09 许继集团有限公司 一种智能变电站设备程序在线升级方法
JP6927089B2 (ja) * 2018-03-05 2021-08-25 オムロン株式会社 制御装置、システムプログラム、制御方法
IT201800005542A1 (it) * 2018-05-21 2019-11-21 Sistema per la progettazione e/o l’aggiornamento di programmi per l’interfaccia operatore e la gestione di macchinari e/o impianti di automazione
JP6954256B2 (ja) * 2018-11-02 2021-10-27 横河電機株式会社 エンジニアリング装置、エンジニアリング装置の制御方法及びプログラム
JP6950665B2 (ja) 2018-11-02 2021-10-13 横河電機株式会社 エンジニアリング装置、エンジニアリング装置の制御方法及びプログラム
CN113009873A (zh) * 2021-02-03 2021-06-22 深圳市显控科技股份有限公司 Plc梯形图在线编译和下载的方法、plc及存储介质

Family Cites Families (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH07200279A (ja) 1993-12-28 1995-08-04 Toshiba Corp オブジェクト管理システム及びネットワーク管理システム
JPH0895807A (ja) 1994-09-21 1996-04-12 Toyota Motor Corp タスク実行制御方法
US5970243A (en) * 1996-08-27 1999-10-19 Steeplechase Software, Inc. Online programming changes for industrial logic controllers
US6092079A (en) * 1998-01-29 2000-07-18 International Business Machines Corporation Apparatus and method for updating an object without affecting the unique identity of the object
US6282698B1 (en) * 1998-02-09 2001-08-28 Lucent Technologies Inc. Detecting similarities in Java sources from bytecodes
US6092076A (en) 1998-03-24 2000-07-18 Navigation Technologies Corporation Method and system for map display in a navigation application
JPH11306008A (ja) 1998-04-20 1999-11-05 Mitsubishi Electric Corp プログラム制御装置及びプログラム制御方法
US6260187B1 (en) * 1998-08-20 2001-07-10 Wily Technology, Inc. System for modifying object oriented code
US6272677B1 (en) 1998-08-28 2001-08-07 International Business Machines Corporation Method and system for automatic detection and distribution of code version updates
GB2341462B (en) 1998-09-12 2003-06-11 Ibm Method for deployment of incremental versions of applications
US6202208B1 (en) 1998-09-29 2001-03-13 Nortel Networks Limited Patching environment for modifying a Java virtual machine and method
US6298353B1 (en) * 1998-11-19 2001-10-02 International Business Machines Corporation Checking serialization compatibility between versions of java classes
JP2000276381A (ja) 1999-03-23 2000-10-06 Toshiba Corp タスク実行時間の見積もり方法
JP3751466B2 (ja) * 1999-03-26 2006-03-01 沖電気工業株式会社 プログラム応答時間予測装置
GB2357168A (en) * 1999-12-10 2001-06-13 Inventec Corp Dynamically maintaining the functional module of an application program
JP3986721B2 (ja) * 2000-01-20 2007-10-03 三菱電機株式会社 ソフトウェア・モジュール動的交換方法及びソフトウェア・モジュール動的交換プログラム記録媒体
US6973646B1 (en) * 2000-07-21 2005-12-06 International Business Machines Corporation Method for compiling program components in a mixed static and dynamic environment
US20030182414A1 (en) * 2003-05-13 2003-09-25 O'neill Patrick J. System and method for updating and distributing information
JP2002318703A (ja) 2001-04-20 2002-10-31 Seiko Epson Corp 制御システム
US8205193B2 (en) 2001-06-11 2012-06-19 Hewlett-Packard Development Company, L.P. Runtime updating of virtual machine class files
JP2003122409A (ja) * 2001-10-11 2003-04-25 Fuji Electric Co Ltd プログラムチェック方法、シーケンスプログラム編集装置、記録媒体、及びプログラム
US7603662B2 (en) * 2002-10-09 2009-10-13 Microsoft Corporation System and method for sensing types of local variables
US7784044B2 (en) 2002-12-02 2010-08-24 Microsoft Corporation Patching of in-use functions on a running computer system
US7461373B2 (en) * 2002-12-05 2008-12-02 Samsung Electronics Co., Ltd. Apparatus and method for upgrading software of a wireless mobile station
US7536678B2 (en) * 2003-12-04 2009-05-19 International Business Machines Corporation System and method for determining the possibility of adverse effect arising from a code change in a computer program
US20050257205A1 (en) * 2004-05-13 2005-11-17 Microsoft Corporation Method and system for dynamic software updates
JP4870915B2 (ja) * 2004-07-15 2012-02-08 株式会社日立製作所 ストレージ装置
CA2601937C (en) * 2005-04-18 2013-01-22 Research In Motion Limited Implementing data-compatibility-based version scheme

Also Published As

Publication number Publication date
FR2858436A1 (fr) 2005-02-04
FR2858436B1 (fr) 2007-09-28
DE10335989B4 (de) 2019-07-11
CN1580994A (zh) 2005-02-16
JP2008135049A (ja) 2008-06-12
JP2005056415A (ja) 2005-03-03
US8108852B2 (en) 2012-01-31
ITMI20041557A1 (it) 2004-10-30
DE10335989A1 (de) 2005-03-17
CN100388193C (zh) 2008-05-14
US20050066320A1 (en) 2005-03-24

Similar Documents

Publication Publication Date Title
JP4836419B2 (ja) 産業オートメーション用のcilコード・プログラムのオンライン修正
US6718533B1 (en) Method for building a real-time control system with mode and logical rate
US5493682A (en) Object based system for software maintenance
EP0664903B1 (en) Loader system
US7331037B2 (en) Static memory allocation in a graphical programming system
JPH09152961A (ja) ソフトウエアプログラムにバージョン設定情報を付す方法および装置
US7096456B2 (en) Method and apparatus for providing dynamically scoped variables within a statically scoped computer programming language
EP0784264B1 (en) A computer-implemented process for determining a minimum code set for an executable application in a data processing system
US7584452B1 (en) System and method for controlling the visibility and use of data in a programming environment
JP4319082B2 (ja) プログラミングシステム
US6854113B1 (en) Mixed-mode execution for object-oriented programming languages
US20010039650A1 (en) Method in a software controlled system
US20070113051A1 (en) Apparatus and method for live loading of control applications in a process control environment
CN110990018B (zh) 一种嵌入式系统的编译方法及编译系统
EP1835407A2 (en) Apparatus and method for managing resources in a Java environment
López Martínez et al. Scheduling configuration of real-time component-based applications
WO2008015110A2 (en) Methods, apparatus and computer programs for modelling computer programs
US6311227B1 (en) Procedure calling method
JP7499966B2 (ja) 制御装置、及び、アドレス管理方法
US20070113236A1 (en) Program flow method and method for expanding a program component system
Guo et al. A (re) configuration mechanism for resource-constrained embedded systems
Ramos-Hernandez et al. Towards a control software design environment using a meta-modelling technique
US20050005264A1 (en) Computer programming object externalization
Lüders et al. A Component-Based Software Architecture for Industrial Control
CN112114844A (zh) 基于虚拟机的电能表专用系统

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20070207

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20070507

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20070510

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20070807

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20070829

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20071127

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20071227

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20080219

A912 Re-examination (zenchi) completed and case transferred to appeal board

Free format text: JAPANESE INTERMEDIATE CODE: A912

Effective date: 20080307

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20100119

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20100122

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20100126

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20101102

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20101108

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110202

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20110516

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20110519

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110816

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

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20110927

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

Free format text: PAYMENT UNTIL: 20141007

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Ref document number: 4836419

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

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

EXPY Cancellation because of completion of term