(57)【特許請求の範囲】
【請求項１】
支援装置とコントローラとを有するコントローラシステムであって、
前記コントローラは、
１以上の補正パターンを記憶する補正パターン記憶手段と、
プログラム中の任意の変数と任意の前記補正パターンとの対応関係が記憶される対応関係記憶手段と、
前記コントローラによる制御対象となる機器の異常時に、該機器に対応する変数の値を強制的に書き換える強制設定が行われる場合、該変数に割り当てられたメモリアドレスに、これまで格納されていた通常値に代えて強制設定値を格納する強制設定手段と、
前記変数への前記強制設定が解除される場合、前記プログラムの実行に伴って、前記対応関係記憶手段に該解除対象の変数に対応する前記補正パターンがある場合には、該対応する補正パターンを実行することで、前記解除対象の変数の前記メモリアドレスの格納値を、前記強制設定値から徐々に通常値に近づけていく強制設定解除手段と、
を有し、
前記通常値は、前記プログラムの実行による前記変数に係わる所定の処理によって得られる値であり、前記コントローラは、通常時には、該通常値を該変数に割り当てられた前記メモリアドレスに格納する、
ことを特徴とするコントローラシステム。
【請求項２】
前記対応関係記憶手段に記憶される前記対応関係は、任意の前記補正パターンが対応付けられた変数それぞれについて、該変数に割り当てられたメモリアドレスに関連付けて、該対応付けられた補正パターンが登録されたものであることを特徴とする請求項１記載のコントローラシステム。
【請求項３】
前記支援装置は、
ユーザに前記補正パターンを任意に作成させ、該補正パターンを前記コントローラに転送して前記補正パターン記憶手段に記憶させる補正パターン管理手段を有することを特徴とする請求項１又は２に記載のコントローラシステム。
【請求項４】
前記支援装置は、
任意の前記変数に対して任意の前記補正パターンを関連付けさせ、該関連付け結果と前記プログラムのコンパイルの際の各変数への任意のメモリアドレス割当結果とに基づいて前記対応関係を生成して、該対応関係を前記コントローラに転送して前記対応関係記憶手段に記憶させる対応関係管理手段を有することを特徴とする請求項２記載のコントローラシステム。
【請求項５】
前記支援装置は、
任意の変数に応じた前記強制設定値を任意に設定させて、該変数のメモリアドレスと該強制設定値を、強制設定の指示と共に前記コントローラに通知する第１の指示手段を有し、
前記コントローラにおいて、
前記任意の変数に対する強制設定が行われる場合は、該第１の指示手段による通知を受信した場合であることを特徴とする請求項１記載のコントローラシステム。
【請求項６】
前記支援装置は、
任意の指示に応じて、強制設定の解除コマンドを前記コントローラに通知する第２の指示手段を更に有し、
前記コントローラにおいて、
前記変数への前記強制設定が解除される場合は、該解除コマンドを受信した場合であることを特徴とする請求項１記載のコントローラシステム。
【請求項７】
前記コントローラは、
強制設定中の変数に関する所定情報を記憶する強制設定管理情報記憶手段を更に有し、
前記強制設定手段は、前記第１の指示手段による通知を受信すると、該通知されたメモリアドレスと強制設定値を、前記強制設定管理情報記憶手段に新規登録することを特徴とする請求項５記載のコントローラシステム。
【請求項８】
前記強制設定解除手段は、前記メモリアドレスの格納値を前記通常値に戻し終えたら、前記強制設定管理情報記憶手段から該当する情報を削除することを特徴とする請求項７記載のコントローラシステム。
【請求項９】
支援装置とコントローラとを有するコントローラシステムにおける前記コントローラであって、
１以上の補正パターンを記憶する補正パターン記憶手段と、
プログラム中の任意の変数と任意の前記補正パターンとの対応関係が記憶される対応関係記憶手段と、
前記コントローラによる制御対象となる機器の異常時に、該機器に対応する変数の値を強制的に書き換える強制設定が行われる場合、該変数に割り当てられたメモリアドレスに、これまで格納されていた通常値に代えて強制設定値を格納する強制設定手段と、
前記変数への前記強制設定が解除される場合、前記プログラムの実行に伴って、前記対応関係記憶手段に該解除対象の変数に対応する前記補正パターンがある場合には、該対応する補正パターンを実行することで、前記解除対象の変数の前記メモリアドレスの格納値を、前記強制設定値から徐々に通常値に近づけていく強制設定解除手段と、
を有し、
前記通常値は、前記プログラムの実行による前記変数に係わる所定の処理によって得られる値であり、前記コントローラは、通常時には、該通常値を該変数に割り当てられた前記メモリアドレスに格納する、
ことを特徴とするコントローラ。
【請求項１０】
支援装置とコントローラとを有するコントローラシステムにおける前記支援装置であって、
ユーザに１以上の補正パターンを任意に作成させると共に、前記コントローラで実行させる任意のプログラムにおける任意の変数に対して任意の前記補正パターンを関連付けさせ、該関連付け結果と前記１以上の補正パターンを前記コントローラに記憶させることで、前記コントローラによる制御対象となる機器の異常時における該機器に対応する変数の値を強制的に書き換える強制設定が解除される際に、該解除の対象となる変数に関連付けられた前記補正パターンを前記コントローラに実行させる解除支援手段を有し、
前記通常値は、前記プログラムの実行による前記変数に係わる所定の処理によって得られる値であり、通常時には、前記通常値は、前記変数に割り当てられた前記コントローラの前記メモリアドレスに格納され、
前記補正パターンは、前記コントローラによって実行されることで、前記解除の対象となる前記変数の前記メモリアドレスの格納値を、前記強制設定値から徐々に通常値に近づけていく処理である、
ことを特徴とする支援装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラマブルコントローラシステムに関する。
【背景技術】
【０００２】
ソフトウエア開発でデバッグを実施する時、プログラム動作の確認のため変数の値を書き換えて実施することがある。この一例として、特許文献１に示すように、内部変数とプログラムの一部を書き換える方法がある。また、プラントシステムの稼働中に一部の計器などが故障して正常な値が取り込めない状態では、システムの正常稼働に影響が発生するため、一時的に値を強制的に書き換えて、システムの稼働を継続することが求められる。
【０００３】
このような場合、オペレータが監視画面から変数の値の書き換えを実施する必要があり、変数の値を書き換えた後、異常要因が無くなれば解除する必要があるが、強制設定を解除して通常値に直ちに戻すと、場合によっては、システムの運用に支障が発生する可能性がある。しかし、従来技術では、強制設定を解除すると直ちに通常値に戻している。
【０００４】
尚、通常は、上記変数の値として上記通常値が書き込まれる。これは、変数に割り当てられた記憶領域に書き込まれる。そして、この記憶領域の格納データを用いて何等かの処理が行われる。通常値が例えば任意のセンサの計測値である場合、何等かの原因でセンサ計測値が異常となった場合、これを上記記憶領域に書き込むと、上記処理結果が異常となる。この為、この様な場合、上記記憶領域の格納データを強制的に所定値（強制設定値）に書き換える。
【０００５】
上記のように、プラントシステムの稼働中に一部の計器などが故障して正常な値が取り込めない状態では、システムの正常稼働に影響が発生するため、一時的に値を強制的に書き換えて、システムの稼働を継続することが求められる。
【０００６】
プラントシステムの稼働中に一部の計器などが故障して正常な値が取り込めない状態になったら、この値を強制的に書き換えることで対応する。例えば、システム稼動中、コントローラには各計器（センサなど）の計測値が入力され、各計器に対して予め割り当てられているメモリ領域に、計測値が格納される(データ収集する)。この様なデータ収集処理は例えば定周期で実行され、以って定周期で上記各メモリ領域の格納データが更新されることになる。
【０００７】
稼動中に任意の計器が故障等すると、故障した計器に対応する変数のメモリ領域には、異常値が格納されることになり、以ってこのメモリ領域の値を用いる何らかの処理に、悪影響が生じる可能性がある。これを避ける為に上記のように値を強制的に書き換えることで、システム稼働を継続できる。これは、例えば、故障した計器に対応するメモリ領域に、所定の設定値を書き込むものである。
【０００８】
しかしながら、これによってシステム稼働を継続することで、上記定周期のデータ収集処理も続行されるので、上記故障した計器に対応するメモリ領域には再び異常値が格納されてしまうことになる。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開2010-122824号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
従来では、強制的に書き換えた値を戻す場合（異常状態が解消され、強制設定を解除する場合）、単純に直ちに通常値に戻している。これは、例えば、現在の上記センサ計測値を、上記記憶領域に書き込んでいる。異常状態が解消されているので、通常値は正常な値であるはずであり、これ自体は問題ない。
【００１１】
しかし、場合によっては、強制的に書き込みした値（強制設定値）と解除した値（通常値）の差が大きい場合、システムの動作に支障をきたす可能性がある。しかし、システムに対して強制設定解除による支障発生の有無は、ユーザが定義した変数（メモリ）の役割に依存する。そのため、一律でシステムに支障が発生しない強制設定解除を実現することは困難である。
【００１２】
本発明の課題は、任意の変数に対する強制設定を解除する際に、場合によってはこの変数に応じた補正パターンを用いて、システムの動作に支障が発生しないように通常値に戻すことができるコントローラシステム、その支援装置、コントローラ等を提供することである。
【課題を解決するための手段】
【００１３】
本発明のコントローラシステムは、支援装置とコントローラとを有するコントローラシステムであって、前記コントローラは、
・１以上の補正パターンを記憶する補正パターン記憶手段と、
・プログラム中の任意の変数と任意の前記補正パターンとの対応関係が記憶される対応関係記憶手段と、
・前記コントローラによる制御対象となる機器の異常時に、該機器に対応する変数の値を強制的に書き換える強制設定が行われる場合、該変数に割り当てられたメモリアドレスに、これまで格納されていた通常値に代えて強制設定値を格納する強制設定手段と、
・前記変数への前記強制設定が解除される場合、前記プログラムの実行に伴って、前記対応関係記憶手段に該解除対象の変数に対応する前記補正パターンがある場合には、該対応する補正パターンを実行することで、前記解除対象の変数の前記メモリアドレスの格納値を、前記強制設定値から徐々に通常値に近づけていく強制設定解除手段と、
を有し、前記通常値は、前記プログラムの実行による前記変数に係わる所定の処理によって得られる値であり、前記コントローラは、通常時には、該通常値を該変数に割り当てられた前記メモリアドレスに格納する、ことを特徴とするものである。
【発明の効果】
【００１４】
本発明のコントローラシステム、その支援装置、コントローラ等によれば、任意の変数に対する強制設定を解除する際に、場合によってはこの変数に応じた補正パターンを用いて、システムの動作に支障が発生しないように通常値に戻すことができる。
【図面の簡単な説明】
【００１５】
【図１】本例のコントローラシステムの構成図である。
【図２】システム構成設定画面例である。
【図３】（ａ）、（ｂ）は機器−補正パターン対応表、（ｃ）はアドレス−補正パターン対応表の具体例を示す。
【図４】補正パターンの具体例を示す図である。
【図５】強制ＯＮアドレス一覧のデータ構成例である。
【図６】強制設定コマンド受信の際の処理フローチャート図である。
【図７】強制設定の解除コマンド受信の際の処理フローチャート図である。
【図８】書込み処理に係わる処理を示すフローチャート図（その１）である。
【図９】書込み処理に係わる処理を示すフローチャート図（その２）である。
【図１０】テンプレート（機器−補正パターンＤＢ）の具体例である。
【発明を実施するための形態】
【００１６】
以下、図面を参照して本発明の実施の形態について説明する。
図１は、本例のコントローラシステムの構成図である。
図示の例のコントローラシステムは、支援装置１０、コントローラ３０等を有する。
【００１７】
尚、支援装置１０やコントローラ３０は、ネットワーク１に接続されており、ネットワーク１を介して相互にデータ送受信可能となっている。また、尚、コントローラ３０は、ＰＬＣの制御装置であってもよいし、ＤＣＳ（分散制御システム；distributed control system）の制御装置であってもよい。
【００１８】
支援装置１０は、ユーザにプログラム開発環境を提供するコンピュータ装置（ローダ等）である。支援装置１０は、所定のアプリケーションプログラムをコンピュータで実行することで実現される各種処理機能等を有する。これは、例えば、ユーザにコントローラ３０用の任意のプログラムのソースコード１３を記述させる為のユーザインターフェース機能を有する。また、ユーザが作成したソースコード１３をターゲット上で動作する機械語オブジェクト１５に変換するコンパイラ機能（フロントエンドコンパイラ１１、バックエンドコンパイラ１２）を有する。更に、生成された機械語オブジェクト１５をターゲットに送信する通信機能を有する。これら各機能は基本的には既存の一般的な機能であるので、コンパイラ機能以外については特に図示せず、上記簡単な説明のみとする。
【００１９】
上記プログラム開発環境上でユーザによって記述されたソースコード１３は、フロントエンドコンパイラ１１によって中間コード１４に変換される。バックエンドコンパイラ１２は、生成された中間コード１４を、ターゲット上で動作する機械語オブジェクト１５に変換する。尚、ターゲットとは、例えばコントローラ３０である。この機械語オブジェクト１５のファイルは、上記不図示の送信機能によりターゲットに送信される。また、“中間コード”については、例えば特開2013-084112号公報などで説明されている。
【００２０】
また、上記コンパイラ機能（フロントエンドコンパイラ１１、バックエンドコンパイラ１２）は、上記変換処理に伴って、上記ソースコード１３に記述されている各変数に対して任意のメモリアドレスを割り当てる。これは、例えば、コントローラ３０のメモリ３２内の任意の記憶領域のアドレスを割り当てるものであり、この処理も既存機能であるので、特に詳細には説明しない。そして、この様な変数へのアドレス割当て結果を、変数−アドレス対応表１６に記録しておく。
【００２１】
変数−アドレス対応表１６の具体例は特に図示しないが、例えば上記ソースコード１３に記述されている各変数の変数名などに対応付けて、その変数に割り当てられたアドレスが格納されたテーブル等である。変数名が、上記計器や機器の名称等とされている場合もある。
【００２２】
更に、制御対象機器の構成を定義するために、システム構成定義設定部２２の機能を使用して、ユーザがシステム構成の定義や各機器の設定を任意に実施するようにしてもよい。この機能自体も既存の機能であるので、特に詳細には説明しない。
【００２３】
上述したように、例えば一例として、任意の計器が故障等すると、故障した計器に対応する変数のメモリ領域には、異常値が格納されることになり、以ってこのメモリ領域の値を用いる何らかの処理に、悪影響が生じる可能性がある。この為、システムの正常稼働に影響が発生するため、一時的に変数の値（対応するメモリ領域の格納データ）を強制的に所定値に書き換えて（強制設定を行って）、システムの稼働を継続することが求められる。しかしながら、上述したように、この強制設定の解除の際に問題が生じる場合がある。
【００２４】
ある変数に係わる強制設定を解除する際に単純に解除を実施するとシステムに支障が発生すると開発者等が判断した場合、開発者等は予めその変数に対して安全に解除を実施するための補正パターンを関連付ける。この補正パターンは予め作成済みのものを選択して関連付けるようにしてもよいし、ユーザがオリジナルの補正パターンを作成して関連付けるようにしてもよい。
【００２５】
上記任意の変数に対する任意の補正パターンの関連付け結果は、機器−補正パターン対応表２４に反映されるようにしている。機器−補正パターン対応表２４は、例えばユーザが手作業で作成する。
【００２６】
支援装置１０は、上記のようにコンパイル機能で変数に任意のメモリアドレスを割り付けるが、本手法では更に、このメモリアドレスと補正パターンとの対応情報（アドレス−補正パターン対応表２５）を生成する。これは、例えば、上記機器−補正パターン対応表２４などに基づいて、アドレス−補正パターン対応表２５を生成するものであるが、この例に限らない。
【００２７】
上記機器−補正パターン対応表２４を作成させる機能やアドレス−補正パターン対応表２５を生成する処理は、例えば上記コンパイラ機能が実現してもよいし、不図示の他の処理機能部が実現してもよい。何れにしても支援装置１０が有する何等かの機能部が実現することになる。尚、この様な処理機能を含む上述した各種処理機能は、図示／不図示に関係なく全て、支援装置１０の不図示の演算プロセッサが、不図示の記憶部に記憶されている所定のアプリケーションプログラムを実行することにより実現される。
【００２８】
また、支援装置１０は、更に不図示の監視・指示機能を備えるものであってもよい。
この監視・指示機能は、コントローラ３０の状態をモニタする既存機能に加えて、更に以下に説明する機能を有する。尚、上記既存のモニタ機能は、コントローラ３０側の既存機能である異常検出機能と連動して、異常があった場合に異常個所や対応するメモリアドレスなどを画面上に表示する異常通知機能や、この異常が解消されて正常に戻ったことを画面上に表示する復旧通知機能等である。正常に戻った場合も、該当する箇所や対応するメモリアドレス等も画面上に表示する。あるいは、上記メモリアドレスだけでなく対応する変数（変数名など）も表示するようにしてもよい。変数−アドレス対応表１６を参照すれば、メモリアドレスに対応する変数名が分かる。
【００２９】
そして、本例の監視・指示機能では、更に、ユーザに任意の入力操作を行わせて、それに応じて後述する強制書き込みコマンドや強制設定の解除コマンドを、コントローラ３０に送信する処理機能も有する。
【００３０】
この処理機能は、例えば、強制書込み対象のアドレスと、このアドレスに強制的に書き込ませる値（強制設定値）を、ユーザに任意に入力させる。ユーザは、例えば、上記異常通知機能による表示があると、表示されたアドレスを、上記強制書込み対象のアドレスとして入力する。また、強制設定値はユーザが任意に決めて入力する。これより、支援装置１０は、これら入力されたアドレスと強制設定値を含む上記強制書き込みコマンドを生成してコントローラ３０に送信する。
【００３１】
また、上記処理機能は、例えば、強制設定解除対象のアドレスを、ユーザに任意に入力させる。ユーザは、例えば、上記復旧通知機能による表示があると、表示されたアドレスを、上記強制設定解除対象のアドレスとして入力する。これより、支援装置１０は、入力されたアドレスを含む上記強制設定の解除コマンドを生成してコントローラ３０に送信する。
【００３２】
尚、支援装置１０は、ハードウェア的には例えばパソコン等の汎用コンピュータであり、例えば一般的なパソコン等のハードウェア構成を有している。よって、特に図示しないが、例えばＣＰＵ等の上記演算プロセッサ、ハードディスク、メモリ等の上記記憶部、液晶ディスプレイ等の表示部、キーボード、マウス等の操作部、通信機能部等を有している。記憶部には予め上記所定のアプリケーションプログラムが記憶されている。
【００３３】
尚、同様に、コントローラ３０も、特に図示しない演算プロセッサや記憶部等を有しており、記憶部には予め所定のアプリケーションプログラムが記憶されている。演算プロセッサがこのアプリケーションプログラムを実行することで、コントローラ３０の後述する各種機能が実現される。
【００３４】
上記生成したアドレス−補正パターン対応表２５は、コントローラ３０に転送して図示のアドレス−補正パターン対応表３４として記憶させる。
また、図には示していないが、支援装置１０は、上記各種補正パターンを記憶している。そして、例えば、アドレス−補正パターン対応表２５に登録されている補正パターンは全て、上記対応表２５の転送の際に一緒にコントローラ３０に転送して記憶させるようにしてもよい。これより、コントローラ３０も補正パターンを記憶している。
【００３５】
尚、補正パターンは後述する一例のようにプログラム部品（サブルーチン等）であり、例えばコンパイルしてコントローラ３０で実行可能な形式に変換してからコントローラ３０に転送する。
【００３６】
上記アドレス−補正パターン対応表２５は、上記変数−アドレス対応表１６と機器−補正パターン対応表２４に基づいて、例えばコンパイラ機能によって自動的に生成される。機器−補正パターン対応表２４は、例えば開発者等が予め作成しておく。作成の際に例えばシステム構成情報２３を利用するようにしてもよいが、この例に限らない。
【００３７】
尚、上記アドレス−補正パターン対応表２５、機器−補正パターン対応表２４や、後述する強制ＯＮアドレス一覧３５は、後に具体例を示して説明する。
また、コントローラ３０は、強制ＯＮアドレス一覧３５を保持している。支援装置１０から任意のアドレスに対する任意の強制設定値の上記強制書き込み指示（コマンド）があると、このアドレスと強制設定値を強制ＯＮアドレス一覧３５に登録すると共に、メモリ３２における当該アドレスに強制設定値を書き込む。その後、支援装置１０から強制設定の解除コマンドが来るまでの間は、メモリ３２の当該アドレスには強制設定値が格納された状態を維持する。
【００３８】
そして、コントローラ３０は、任意のメモリアドレスに対する上記強制設定の解除コマンドを受信した時、アドレス−補正パターン対応表３４を参照して（更に強制ＯＮアドレス一覧３５も参照／更新しつつ）、該当する補正パターンがある場合にはこの補正パターンの処理を実行することで、例えば段階的な解除を実施する。段階的な解除とは、上記強制設定値が格納されているメモリアドレスの格納データを、強制設定値から通常値に直ちに戻すのではなく、強制設定値から徐々に通常値に近づけていくことを意味する。
【００３９】
尚、通常値とは、上述したように、機械語オブジェクト３３中の任意の変数に係わる処理結果として得られる値（例えば任意のセンサの計測値など）であり、通常時はこの変数に対応するメモリアドレスには通常値が書き込まれる。
【００４０】
コントローラ３０側に（その制御対象機器やセンサ等に）何等かの問題が生じた場合、上記通常値が異常値になり、対応するメモリアドレスには異常値が書き込まれ、以って制御動作に異常が生じる可能性がある。この様な事態が発生することを阻止する為に、この様な場合に該当するメモリアドレスに強制的に所定値（強制設定値）を書き込むと共に、異常状態が解消するまではその状態を維持する。
【００４１】
すなわち、上記何等かの異常が生じた場合、コントローラ３０は、支援装置１０から該当するメモリアドレスと強制設定値が送られてくると、このメモリアドレスと強制設定値を強制ＯＮアドレス一覧３５に登録すると共に、このメモリアドレスに強制設定値を書き込む。コントローラ３０は、随時、制御プログラム（機械語オブジェクト３３）を実行し、この実行によりメモリ３２からのデータ読出し、メモリ３２へのデータ書込み等の処理を含む様々な処理を実行している。
【００４２】
そして、任意のメモリアドレスへのデータ書込み処理が発生する毎に、書込先のアドレスが「強制ＯＮアドレス一覧」３５に存在するか否かをチェックし、存在する場合には、書き込みを実施しないことで、強制的にメモリ格納値を所定値（上記強制設定値）に維持する。この時、本来ならメモリに書き込むべき値（上記“通常値”に相当；以下、ソース値と記す場合もある）は、アキュムレータに格納されている。上記のように異常状態ではソース値は異常値となっている可能性が高いが、強制設定解除時にはソース値は正常値に戻っているはずである。しかしながら、例えばソース値と強制設定値との差が大きい場合など、直ちにソース値に戻すと問題が生じる場合があり得る。これより、本手法では、該当するメモリアドレス（これに対応する変数）に応じた補正パターンを用いて、ソース値や強制設定値等に基づいて、メモリアドレスの格納データ値を決定する。これは、例えば、強制設定値から段階的に（徐々に）ソース値に近づけるように、メモリアドレスの格納データ値を決定する。
【００４３】
尚、上述した（更に後述する）コントローラ３０の各種処理は、例えばプログラム実行管理部３１が行っても良いが、この例に限らず、不図示の何等かの処理機能部が行っても良い。プログラム実行管理部３１は、基本的には制御プログラム（機械語オブジェクト３３）を定周期で実行させる既存機能を有する。そして、更に、例えば、この制御プログラム実行に伴って生じる処理（例えば強制ＯＮアドレス一覧３５の更新など）を行うようにしてもよい。あるいは、更に、上記支援装置１０からのコマンドに応じた処理を行うようにしてもよい。また、後述する図６、図７、図８、図９の処理は、プログラム実行管理部３１が実行するものとしてもよいし、この例に限らず、不図示の何等かの処理機能部が行っても良い。
【００４４】
以下、具体例を示して更に詳細に説明する。
支援装置１０は、既存の機能としてシステム構成定義設定部２２の機能も有しており、ユーザは、この機能を利用して、コントローラ３０が制御する機器の構成の設定を、任意に行うことができる。図２には、この様な機器のシステム構成設定画面例を示す。図２の例では、コントローラが制御する機器が、サーボ１台、入力アナログ機器１台、インバータ１台の構成である。
【００４５】
ユーザは、例えばプログラム（ソースコード１３）作成の際に任意の変数名を付ける。例えば各機器の情報にアクセスするために変数名を付ける。上記コンパイラ機能は、ソースコード１３をコンパイルして機械語オブジェクト１５を生成する際に、各変数に対して任意のメモリアドレスを割当てて、この割当結果を上記変数−アドレス対応表１６に登録する。ここまでは既存技術であるが、本手法では更に、例えば予め開発者等が、任意の補正パターンを作成すると共に、これに応じて機器−補正パターン対応表２４を作成する。
【００４６】
まず、補正パターン作成に関しては、例えば、サーボで位置制御している場合は、指令値を強制的に設定した場合、コントローラが演算した結果の指令値との差が著しい状態で強制設定を解除するとシステムの動作に支障がでる可能性がある。そこで、強制設定の解除をいきなり実施するのではなく、強制設定値をソース値に段階的に近づけていく補正パターンを、予め作成しておく。
【００４７】
尚、必ずしも全ての変数（機器）に関して補正パターンを作成する必要はない。例えば、水位センサの場合、センサの故障時には強制的に値を設定するが、故障が解消された後は、すぐに現在の値で制御しても問題無いと考えられるので、補正パターンを作成する必要はない。
【００４８】
補正パターンとは、例えば、強制設定の解除の際に、ソース値と強制設定値に基づいて、システムの動作に支障が出ないように、強制設定値から徐々にソース値に近づける処理である。この処理は、予め決められた補正パターンから選択する場合や、ユーザのプログラミングによる補正パターンを実行することも可能である。
【００４９】
補正パターンの設定は、図２上の機器毎の設定としてユーザに指定させるか、機器の一覧表で設定する方法がある。例えば一例としては、システム構成定義設定部２２の機能により、「機器（変数名）」「属性」「機器識別情報」等をユーザに任意に設定させ、この機器（変数）に関連する補正パターンを設定させると、機器−補正パターン対応表２４が生成される。勿論、この例に限るものではなく、例えば図３（ａ）、（ｂ）に示す構成のテーブルを画面上に表示して、このテーブル内の任意の欄に任意のデータを、ユーザに入力させることで、機器−補正パターン対応表２４をユーザに手作業で作成させるようにしてもよい。
【００５０】
図３（ａ）（ｂ）に、機器−補正パターン対応表２４の具体例を示す。
図示の例では、機器−補正パターン対応表２４は、機器（変数名）４１、属性４２、機器識別情報４３、アドレス４４、補正パターン４５の各データ項目より成る。
【００５１】
ソースコード１３に記述されている各変数のなかで、ユーザが補正パターンを用いる必要があると判断した変数全てについて、機器−補正パターン対応表２４に登録される。つまり、この様な変数それぞれについて、その変数名が機器（変数名）４１に登録されると共に、少なくともその変数に対応付けられた補正パターンの識別情報（ファイル名等）が補正パターン４５の欄に格納される。また、その変数に係わる所定の情報（図示の例では属性４２、機器識別情報４３）も更に格納されてもよいが、これらは本説明上は無くてもよいので、特に説明しない。
【００５２】
また、アドレス４４の欄は、上記ユーザによる登録の際には空欄となっており（図３（ａ）はこの未完成状態を示している）、その後、ソースコード１３のコンパイルの際にその変数に割り当てられたメモリアドレスが、コンパイル機能によってアドレス４４の欄に自動的に格納される。これによって、機器−補正パターン対応表２４は、図３（ｂ）に示すような完成状態となる。あるいは、既に生成済みの変数−アドレス対応表１６を用いて、アドレス４４の欄に上記メモリアドレスを格納することで、機器−補正パターン対応表２４を上記完成状態とするようにしてもよい。
【００５３】
尚、上記メモリアドレス割当に伴って変数−アドレス対応表１６が作成され、これは上述したように各変数の変数名に対応付けて、その変数への割当メモリアドレスが登録されているものである。この変数と割当メモリアドレスとの対応関係は、上記の通り機器−補正パターン対応表２４に含まれているが、対応表２４に登録される変数は補正パターンが関連付けられたものであるのに対して、対応表１６には基本的に全ての変数について登録されるという違いはある。
【００５４】
また、尚、コンパイラ機能による各変数へのメモリアドレス割当て処理は、既存の処理であり、ここではアドレス決定方法については特に説明しない。
支援装置１０は、例えば上記機器−補正パターン対応表２４からアドレス−補正パターン対応表２５を生成して、これをコントローラ３０に転送する。コントローラ３０は、これを図示のアドレス−補正パターン対応表３４として記憶する。
【００５５】
図３（ｃ）にアドレス−補正パターン対応表２５（３４）の具体例を示す。
図示の例では、アドレス−補正パターン対応表２５（３４）は、アドレス５１、補正パターン５２、実行中フラグ５３の各データ項目より成る。
【００５６】
機器−補正パターン対応表２４から上記アドレス４４と補正パターン４５を取得してアドレス５１と補正パターン５２に格納することで、アドレス−補正パターン対応表２５（３４）が生成される。尚、実行中フラグ５３は、コントローラ３０側で後述する処理中に設定／参照／更新されるものであるが、代わりに強制ＯＮアドレス一覧３５の実行中フラグ６５を用いてもよいので、実行中フラグ５３は必ずしも必要ない。実行中フラグ５３（６５）の利用方法については、詳しくは後述する。
【００５７】
ここで、ユーザが補正パターンを定義する例について記載する。
上記の通り、補正パターンは、ユーザが所望の内容のものを自由に作成してよい。
図４に、補正パターンの一例を示す。補正パターンは、コントローラ３０側で実行させるプログラム部品である。
【００５８】
図４に示す補正パターンの具体例は、強制ＯＮアドレス一覧３５を利用するものであって、強制ＯＮアドレス一覧３５が例えば図５に示す内容であることを前提としている。
これより、図４の補正パターンの説明の前に、図５について簡単に説明しておく。
【００５９】
図５は、強制ＯＮアドレス一覧３５のデータ構成例である。
図５の例では、強制ＯＮアドレス一覧３５は、管理番号６１、強制ＯＮメモリアドレス６２、ソース値６３、補正パターン６４、実行中フラグ６５、強制設定値６６、実行回数６７、開始時刻６８の各データ項目より成る。尚、管理番号６１は各レコードに付されるシリアル番号等である。
【００６０】
任意のメモリアドレスに係わる何等かの異常が発生すると、支援装置１０はコントローラ３０に対して上記強制書き込みコマンド（強制設定コマンドと言う場合もあるものとする）を送信する。この強制設定コマンドには上記異常に係わるメモリアドレスと、支援装置１０側でユーザが任意に設定した強制設定値が含まれている。強制設定コマンド中のこれらのデータが、強制ＯＮアドレス一覧３５の強制ＯＮメモリアドレス６２と強制設定値６６の欄に格納される。更に、この強制ＯＮメモリアドレス６２に対応する補正パターンの名称などをアドレス−補正パターン対応表３４から取得して、補正パターン６４に格納する。対応する補正パターンが無い場合には、補正パターン６４には“無し”を格納する。
【００６１】
強制ＯＮアドレス一覧３５には、基本的には、強制設定を実行中の変数に関する所定の情報が格納されるのであり、強制設定が完全に解除された変数の情報は強制ＯＮアドレス一覧３５から削除される。但し、本手法では、補正パターンがある場合には、解除コマンドを受信してから強制設定が完全に解除されるまでにある程度時間が掛かる場合があり、その間、強制ＯＮアドレス一覧３５を参照／更新しながら後述する解除時の処理（図８、図９）が実行される。解除コマンドには、例えば、解除対象の変数に係わるメモリアドレスが含まれる。
【００６２】
デフォルト状態では、開始時刻６８は“ＮＵＬＬ”であり、実行回数６７は‘０’であり、実行中フラグ６５は“FALSE”である。コントローラ３０は、上記強制設定の解除コマンドを受信すると、強制ＯＮアドレス一覧３５の該当レコード（その強制ＯＮメモリアドレス６２が、上記解除対象のメモリアドレスと一致するレコード）について、その補正パターン６４に何等かの補正パターンの名称等が格納されている場合には、この補正パターン６４の処理を開始する。その際、開始時刻６８に現在時刻を格納すると共に、実行中フラグ６５を“FALSE”から“TRUE”に変更し、アキュムレータの値をソース値６３に格納する。
【００６３】
その後、補正パターン６４の処理を繰り返し実行するが、仮に補正パターン６４が図４の内容である場合には、処理実行後に、まず引数として、ソース値６３と強制設定値６６と実行回数６７と経過時間を取得する。経過時間は、現在時刻−開始時刻６８により求める。
【００６４】
そして、上記引数を用いて、図示の処理を実行することになる。すなわち、未だ実行回数６７が規定値（＝１０）に達していないならば、新設定値の値を「強制設定値６６−（強制設定値６６−ソース値６３）／（１０−実行回数６７）」によって求める。また、実行中フラグ６５は“TRUE”を維持する。一方、実行回数６７が規定値（＝１０）に達したならば、新設定値の値はソース値とし、実行中フラグ６５を“FALSE”に戻す。
【００６５】
この様に、図示例は、新設定値を、１０分割でソース値に近づけ、１０回目でソース値になり補正パターンの実行をやめる例である。
尚、上記新設定値とは、上記解除対象のメモリアドレスに格納する値である。上記の例では、上記解除対象のメモリアドレスに格納する値を、強制設定値６６から徐々にソース値６３に近づけていき、最終的にはソース値６３となるようにしている。
【００６６】
以下、図６〜図９のフローチャート図について説明する。
図６、図７、図８、図９は、何れも、コントローラ３０で実行される処理である。
図６は、強制設定コマンド受信の際の処理フローチャート図である。
【００６７】
支援装置１０は、上記の通り、任意の変数について何等かの異常があった場合、上記強制設定コマンドをコントローラ３０へ送信する。これを受けてコントローラ３０は、上記のように、このコマンド中の所定の情報を強制ＯＮアドレス一覧３５に新規登録する（ステップＳ１１）。これについては既に説明済みであり、ここでは簡単に説明するならば、強制ＯＮアドレス一覧３５に新規レコードが追加されると共にコマンド中のアドレスと強制設定値が、新規レコードの強制ＯＮメモリアドレス６２と強制設定値６６の欄に格納される。
【００６８】
続いて、インデックスを初期値（＝１）に設定し（ステップＳ１２）、ステップＳ１３以降の処理を、ステップＳ１４またはＳ１５がＹＥＳとなるまで、インデックスを更新しつつ繰り返し実行する。尚、インデックスは、アドレス−補正パターン対応表３４における現在の処理対象レコードを示すものであり、例えばインデックス＝２は、アドレス−補正パターン対応表３４における２番目のレコードを示す。
【００６９】
まず、アドレス−補正パターン対応表３４から、現在のインデックスが示すレコードのアドレス５１を取得し（ステップＳ１３）、このアドレス５１がＮＵＬＬである場合には（ステップＳ１４，ＹＥＳ）、本処理を終了する。
【００７０】
尚、対応表３４では、登録レコード群の次のレコード（最後のレコード）のアドレス５１がＮＵＬＬとなるようにしてある。これより、ステップＳ１３でアドレス５１がＮＵＬＬである場合とは、対応表３４の全ての登録レコードについてステップＳ１５の判定済みであり且つ全て判定結果がＮＯであった場合であり、つまり、上記新規登録した変数については対応する補正パターンが無い場合である。よって、この場合には、強制ＯＮアドレス一覧３５における上記新規登録レコードの補正パターン６４は“無し”となり、これより解除の際には直ちにソース値に戻される。
【００７１】
また、上記ステップＳ１３で取得したアドレス５１が、新規登録アドレス（上記新規レコードの強制ＯＮメモリアドレス６２）と一致するか否かをチェックし（ステップＳ１５）、一致する場合にはステップＳ１６の処理を実行して本処理を終了する。
【００７２】
ここで、本例では上記インデックスは最初は‘１’であり、最初はアドレス−補正パターン対応表３４の先頭レコードのアドレス５１を取得し（ステップＳ１３）、これが上記新規登録アドレスと一致するか否かをチェックする（ステップＳ１５）。不一致であれば（ステップＳ１５，ＮＯ）、インデックスを＋１インクリメントして処理対象を更新してステップＳ１３に戻る。上記一例では、今度はアドレス−補正パターン対応表３４の２番目のアドレス５１を取得し（ステップＳ１３）、これがＮＵＬＬか否かをチェックしたり（ステップＳ１４）、ＮＵＬＬでなければ上記新規登録アドレスと一致するか否かをチェックすることになる（ステップＳ１５）。
【００７３】
この様にして、新規登録アドレスがアドレス−補正パターン対応表３４に登録されているか否かをチェックし、登録されている場合にはステップＳ１６の処理を実行する。ステップＳ１６では、該当するアドレス（上記一致するアドレス５１）に対応する補正パターン５２（ファイル名等）を、ステップＳ１１で強制ＯＮアドレス一覧３５に新規追加したレコードにおける補正パターン６４の欄に格納すると共に、当該レコードの実行中フラグ６５は“FALSE”に設定する。
【００７４】
この様にして、強制設定コマンド受信毎に、強制ＯＮアドレス一覧３５に新規レコードを追加すると共に、この新規レコードの強制ＯＮメモリアドレス６２、補正パターン６４、実行中フラグ６５、強制設定値６６に、上記のようにデータが設定される。
【００７５】
支援装置１０のユーザが、上記強制設定を行った変数に係わる異常が解消した等と判断した場合、所定の操作を行うことで、支援装置１０は強制設定の解除コマンドをコントローラ３０へ送信する。この解除コマンドには解除対象の変数のメモリアドレスが含まれている。
【００７６】
コントローラ３０は、上記解除コマンドを受信すると、図７の処理を実行する。
図７は、強制設定の解除コマンド受信の際の処理フローチャート図である。
図７の処理では、まず、インデックスを初期値（＝１）に設定し（ステップＳ２１）、ステップＳ２２以降の処理を、ステップＳ２３またはＳ２４がＹＥＳとなるまで、インデックスを更新しつつ繰り返し実行する。尚、本処理におけるインデックスとは、強制ＯＮアドレス一覧３５における現在の処理対象レコードを示すものとなる。
【００７７】
まず、強制ＯＮアドレス一覧３５から、現在のインデックスが示すレコードの強制ＯＮメモリアドレス６２を取得し（ステップＳ２２）、このアドレス６２がＮＵＬＬである場合には（ステップＳ２３，ＹＥＳ）、本処理を終了する。
【００７８】
このアドレス６２がＮＵＬＬではなく（ステップＳ２３，ＮＯ）且つ上記解除コマンドのアドレスと一致する場合には（ステップＳ２４，ＹＥＳ）、強制ＯＮアドレス一覧３５の処理対象レコードの実行中フラグ６５を“TRUE”に設定する。
【００７９】
上記アドレス６２が上記解除コマンドのアドレスと不一致の場合には（ステップＳ２４，ＮＯ）、インデックスを＋１インクリメントして（ステップＳ２６）ステップＳ２２に戻る。解除コマンドのアドレスが、強制ＯＮアドレス一覧３５に登録されていない場合に、上記ステップＳ２３の判定がＹＥＳとなることになる。図５の例では、処理対象が３番目のレコードとなったときに、ステップＳ２３の判定がＹＥＳとなる。
【００８０】
上記図７の処理例では、解除対象の変数が、強制ＯＮアドレス一覧３５に登録されている場合には、該当レコードの実行中フラグ６５を“TRUE”に設定する。実行中フラグ６５を“TRUE”に変更することは解除処理の開始を意味する。
【００８１】
コントローラ３０は、機械語オブジェクト３３を例えば定周期で繰り返し実行する。機械語オブジェクト３３を実行することで様々な処理を行い、その中で任意のメモリアドレスへの書込み処理が発生する毎に図８、図９の処理を実行する。
【００８２】
図８、図９は、書込み処理に係わる処理を示すフローチャート図（その１）、（その２）であり、１つの処理を２つの図面に分けて示している。よって、図８と図９を特に区別せずに纏めて図８等などと記すものとする。
【００８３】
図８等の処理では、まず、書込み先のメモリアドレスが強制ＯＮアドレス一覧３５に存在するか否かをチェックし（ステップＳ３１）、存在しない場合には（ステップＳ３１，ＮＯ）書込み先アドレスは強制設定中ではないことになるので、通常のメモリ書込み処理を実行して（ステップＳ３２）本処理を終了する。通常のメモリ書込み処理とは、上記通常値を上記書込み先のメモリアドレスに格納する処理である。通常値はアキュムレータに格納されている。
【００８４】
一方、書込み先のメモリアドレスが強制ＯＮアドレス一覧３５に存在する場合には（ステップＳ３１，ＹＥＳ）、書込み先アドレスは強制設定中であることになる。その場合、まず、強制ＯＮアドレス一覧３５における該当レコードの実行中フラグ６５が“TRUE”であるか否かをチェックする（ステップＳ３３）。
【００８５】
そして、上記実行中フラグ６５が“FALSE”である場合には（ステップＳ３３，ＮＯ）、メモリへの書込みを実施することなく（ステップＳ３５）本処理を終了する。この場合は、書込み先アドレスは強制設定中であり且つ未だ解除は始まっていない状態であるからである。尚、その際、現在のアキュムレータの格納データ（通常値）を、強制ＯＮアドレス一覧３５における該当レコードのソース値６３の欄に格納するようにしてもよい（ステップＳ３４）。尚、通常の書込み処理は、現在のアキュムレータの格納データを、書込み先のメモリアドレスに書き込む処理となる。
【００８６】
尚、上記該当レコードとは、その強制ＯＮメモリアドレス６２が上記書込み先のメモリアドレスと一致するレコードである。
一方、上記該当レコードの実行中フラグ６５が“TRUE”である場合には（ステップＳ３３，ＹＥＳ）、まず、該当レコードの補正パターン６４の欄に補正パターンがあるか否かをチェックし（ステップＳ３６）、補正パターンが“無し”の場合には（ステップＳ３６，ＮＯ）、該当レコードを強制ＯＮアドレス一覧３５から削除して（ステップＳ３７）本処理を終了する。これより、その後、このメモリアドレスへの書込み処理に伴う図８等の処理が実行されると、今度はステップＳ３１がＮＯとなり、通常のメモリ書込み処理が行われることになる。つまり、このケースでは従来通りの単純な強制設定解除が行われることになる。ステップＳ３７の処理の際に、上記通常の書込み処理も行うようにしてもよい。
【００８７】
一方で、該当レコードに補正パターンが登録されている場合には（ステップＳ３６，ＹＥＳ）、ステップＳ３８〜ステップＳ４６の処理を実行したうえで、もしステップＳ４６の判定がＮＯであれば上記ステップＳ３７の処理が行われて、解除処理が完了することになる。換言すれば、ステップＳ４６がＮＯとなるまでの間は、本手法による段階的な解除処理の途中の状態であると言える。
【００８８】
まず、ステップＳ３８で、現在時刻を取得する。そして、強制ＯＮアドレス一覧３５の該当レコードの開始時刻６８がＮＵＬＬである場合すなわち未だ段階的な解除処理が開始されていない場合には（ステップＳ３９，ＹＥＳ）、現在時刻を開始時刻６８に格納し（ステップＳ４０）、以って段階的な解除処理の開始とする。一方、開始時刻６８がＮＵＬＬではない場合には（ステップＳ３９，ＮＯ）、「現在時刻−開始時刻６８」によって開始からの経過時間を求める（ステップＳ４１）。尚、ステップＳ４１の処理はステップＳ４０を実行する場合にも行うが、当然、この場合は経過時間は‘０’となる。
【００８９】
そして、上記該当レコードの補正パターン６４（ファイル名など）に基づいて、該当する補正パターン（そのプログラムファイル等）を獲得し（ステップＳ４２）、また、現在のアキュムレータの格納データを上記該当レコードのソース値６３の欄に上書き格納する（ステップＳ４３）。尚、ステップＳ４３の処理は段階的な解除処理の開始時（ステップＳ４０の処理が行われたとき）のみ実行するようにしてもよい。
【００９０】
そして、上記ステップＳ４２で獲得した補正パターンを実行する（ステップＳ４４）。補正パターンが上記図４の例の場合、上記強制ＯＮアドレス一覧３５の上記該当レコードのソース値６３、強制設定値６６、実行回数６７、及びステップＳ４１で求めた経過時間を、引数として、図４に示す処理を実行する。この処理については説明済みである。
【００９１】
そして、補正パターンを実行したら、所定の後処理を実行する（ステップＳ４５）。後処理は、例えば、実行回数６７の更新（＋１インクリメント）、実行中フラグ６５の更新などである。このうち、実行中フラグ６５の更新に関しては、図４の例の場合、実行回数が未だ規定値（＝１０）に達していない場合には現状（＝“TRUE”）を維持し、実行回数が規定値に達したら“FALSE”とする。
【００９２】
これより、ステップＳ４５に続くステップＳ４６の「実行中フラグ６５は“TRUEか？”」の判定は、実行回数が未だ規定値（＝１０）に達していない場合にはＹＥＳとなってそのまま本処理を終了することになり、実行回数が規定値に達したらＮＯとなって上記ステップＳ３７の処理を実行することになる。ステップＳ３７では、上記の通り、上記該当レコードを強制ＯＮアドレス一覧３５から削除することになり、以って段階的な解除処理が完了することになる。
【００９３】
尚、上述した処理は一例を示すものであり、この例に限らない。例えば、上述した一例では処理の終了判定に“実行回数”を用いた。つまり、実行回数６７が規定値（＝１０）に達したら実行中フラグ６５を“FALSE”とすることで、ステップＳ４６の判定がＮＯとなるようにしていたが、“実行回数”の代わりに上記“経過時間”を用いるようにしてもよい。つまり、経過時間が、予め設定される所定時間Ｔを越えたら（経過時間＞Ｔ）、実行中フラグ６５を“FALSE”とするようにしてもよい。勿論、これも一例であり、この例に限らず、例えば“実行回数”と“経過時間”の両方を用いて何等かの終了判定を行うようにしてもよい。
【００９４】
また、上記補正パターンは、上述した一例では、解除対象の変数に係わるメモリアドレスの格納値を、強制設定値から徐々に（段階的に）通常値に近づけていき、最終的には通常値に戻す処理としたが、この例に限らない。補正パターンは、様々な処理であってよいが、少なくとも、補正パターンを実行することで、上記メモリアドレスの格納値を、強制設定値から直ちに通常値に戻すことは行わないようにする。補正パターンの処理は、システムの動作に支障が発生しないように通常値に戻すことができるものであれば何でも良い。
【００９５】
尚、ユーザが機器の構成情報を定義する時、機器によっては補正パターンのテンプレートが定義できるものもあり、機器に対応した補正パターンのテンプレートを用意し、ユーザがシステム構成定義設定部２２で任意の機器を設定する際に、テンプレート（機器−補正パターンＤＢ２１）の補正パターンを設定するようにしてもよい。尚、システム構成定義設定部２２は、ユーザに任意のシステム構成情報２３を入力させる機能部であり、特に詳細には説明しない。上記図２がシステム構成情報２３の具体例を表示したものと見做してよく、上記の通り、ユーザは例えばシステム構成情報２３を参照（表示）して上記機器−補正パターン対応表２４を作成するようにしてもよい。
【００９６】
図１０は、上記テンプレート（機器−補正パターンＤＢ２１）の具体例である。
図示の例のテンプレート２１は、機器（型式）７１、属性７２、オフセット７３、補正パターン７４の各データ項目より成る。機器（型式）７１には任意に機器の識別情報（例えば型式など）が格納され、任意の機器７１の各属性７２（指令値、現在値、加速値など）に応じた補正パターンの識別情報（ファイル名など）が、補正パターン７４の欄に登録されている。
【００９７】
機器によっては、補正パターンが予めある程度決定できるものがあるので、機器毎に補正パターンのテンプレートを登録したＤＢ（データベース）を用意する。この一例が上記機器−補正パターンＤＢ２１である。
【００９８】
上記機器（型式）７１には、機器を識別するための情報を格納する。例えば、製品の型番などであり、補正パターンが予め決定できる機器の型番などが、機器（型式）７１に登録される。属性７２は、各機器が持っている属性を示す。機器毎に所有する属性が異なるが、機器毎に固定の情報である。
【００９９】
オフセット７３は、その属性の情報が割り付けられている相対位置情報であり、メモリのアドレスを算出する時に必要な情報である。例えば、RYT-VE を％IW1.0 に割り付けた場合、アドレスは、その機器を割り付けた先頭アドレスからオフセットを足したアドレス（％IW1.2）になる。
【０１００】
補正パターン７４については上述してある通りである。
この機器-補正パターンＤＢ２１（テンプレート）からユーザがシステム構成機能で機器を挿入した時、機器で検索し、該当する補正パターンのテンプレートを設定する。ユーザは、必要に応じて補正パターンを変更することが可能である。
【０１０１】
尚、テンプレート２１は必須の構成ではなく、上記テンプレート２１を用いる処理も必須ではない。上記のように機器−補正パターン対応表２４や補正パターンの作成方法は様々であってよく、ユーザが一から手作業で作成してもよい。
【０１０２】
また、上述したことから、本例のコントローラシステムは、特に図示しないが、下記の各種処理機能部を有するものと言うこともできる。
まず、コントローラ３０は、不図示の補正パターン記憶部、不図示の対応関係記憶部、不図示の強制設定部、不図示の強制設定解除部等を有する。
【０１０３】
補正パターン記憶部は、１以上の上記補正パターンを記憶する。
対応関係記憶部は、プログラム中の任意の変数と任意の補正パターンとの対応関係が記憶される。対応関係記憶部の一例が上記アドレス−補正パターン対応表３４である。
【０１０４】
強制設定部は、任意の変数に対する強制設定が行われる場合、該変数に割り当てられたメモリアドレスに強制設定値を格納する。
強制設定解除部は、上記変数への上記強制設定が解除される場合、上記プログラムの実行に伴って、上記対応関係記憶手段に該解除対象の変数に対応する補正パターンがある場合には、該補正パターンを実行する。
【０１０５】
また、例えば、上記強制設定解除部は、補正パターンを実行することで、上記メモリアドレスの格納値を、上記強制設定値から直ちに通常値に戻すことは行わないようにする。その一例として、強制設定解除部は、補正パターンを実行することで、上記メモリアドレスの格納値を上記強制設定値から徐々に通常値に近づけていき、最終的には通常値に戻すようにする。例えばこの様にすることで、任意の変数に対する強制設定を解除する際に、システムの動作に支障が発生しないように通常値に戻すことができる。
【０１０６】
ここで、上記通常値は、上記プログラムの実行による上記変数に係わる所定の処理によって得られる値であり、コントローラ３０は、通常時は、該通常値を該変数に割り当てられたメモリアドレスに格納するが、強制設定時には上記強制設定値を当該メモリアドレスに格納するようにしている。
【０１０７】
また、例えば、上記対応関係記憶部に記憶される上記対応関係は、任意の補正パターンが割り当てられた変数それぞれについて、該変数に割り当てられたメモリアドレスに関連付けて、該割り当てられた補正パターンが登録されたものである。その一例が上記アドレス−補正パターン対応表３４である。
【０１０８】
また、例えば、支援装置１０は、上記補正パターンを任意に作成させて該補正パターンをコントローラ３０に転送して上記補正パターン記憶部に記憶させる補正パターン管理部（不図示）を更に有するものであってもよい。
【０１０９】
あるいは、例えば、支援装置１０は、任意の変数に対して任意の補正パターンを関連付けさせ（例えばユーザが手作業で行う）、該関連付け結果と、プログラムのコンパイルの際の各変数への任意のメモリアドレス割当結果とに基づいて上記対応関係を生成して、該対応関係をコントローラ３０に転送して上記対応関係記憶部に記憶させる対応関係管理部（不図示）を更に有するものであってもよい。
【０１１０】
また、例えば、支援装置１０は、任意の変数に応じた強制設定値を任意に設定させて、該変数のメモリアドレスと該強制設定値を強制設定の指示と共にコントローラ３０に通知する第１の指示部（不図示）を更に有しても良い。
【０１１１】
この場合、コントローラ３０において、任意の変数に対する強制設定が行われる場合は、該第１の指示部による通知を受信した場合である。
また、例えば、支援装置１０は、任意の指示に応じて強制設定の解除コマンドをコントローラ３０に通知する第２の指示部（不図示）を更に有しても良い。
【０１１２】
この場合、コントローラ３０において、変数への強制設定が解除されるときは、該解除コマンドを受信した場合である。
また、例えば、コントローラ３０は、強制設定中の変数に関する所定情報を記憶する強制設定管理情報記憶部（不図示）を更に有してもよい。その一例が上記強制ＯＮアドレス一覧３５である。
【０１１３】
この場合、上記強制設定部は、上記第１の指示部による通知を受信すると、該通知されたメモリアドレスと強制設定値を、上記強制設定管理情報記憶部に新規登録する。
また、この場合、上記強制設定解除部は、メモリアドレスの格納値を通常値に戻し終えたら、上記強制設定管理情報記憶部から該当する情報を削除するようにしてもよい。
【０１１４】
上述した支援装置１０の各種処理機能は、支援装置１０の上記不図示の演算プロセッサが、上記不図示の記憶部に記憶されている所定のアプリケーションプログラムを実行することにより実現される。同様に、上述したコントローラ３０の各種処理機能は、コントローラ３０の上記不図示の演算プロセッサが、上記不図示の記憶部に記憶されている所定のアプリケーションプログラムを実行することにより実現される。
【０１１５】
上記のように、本例のコントローラシステムでは、支援装置１０は、コントローラ３０上で動作する処理を記述したソースコード１３を、コンパイラ機能によって、コントローラ３０で実行可能な形態（機械語オブジェクト１５）に変換すると共に、変数−アドレス対応表１６を生成する。変数−アドレス対応表１６は、ソースコード１３の各変数と、その変数に割り付けられたメモリアドレスとの対応情報を有する。メモリアドレスは、コントローラ３０内のメモリ３２のアドレスである。
【０１１６】
支援装置１０において、ユーザによって、上記ソースコード１３の各変数（機器）と、強制設定を解除した時の補正パターンとの関連付け情報（機器−補正パターン対応表２４）を生成する。この機器−補正パターン対応表２４と、上記変数−アドレス対応表１６から、アドレス−補正パターン対応表２５を生成しコントローラ３０に送信する。
【０１１７】
補正パターンは、予め作成されたプログラム、あるいは、ユーザが任意に記述したプログラム等である。ユーザは、例えば、任意の変数に関して、これら各補正パターンのなかから任意の補正パターンを選択して、対応付ける作業を行う。
【０１１８】
更に補正パターンを機器毎に関連付けしたテンプレート情報を利用し、ユーザがシステム構成定義を実施する時、選択した機器に合った補正パターンを関連付けすることができる。
【０１１９】
上記本例のコントローラシステムにおいては、ユーザのソフトウエア開発作業中、又はシステムが運用中でコントローラ３０が稼働中に、機械語オブジェクトの変更無しに、変数の値を強制的に変更した後、その状態を解除する時、補正パターンを実施しながら段階的に（徐々に）にソース値に戻す。
[発明の効果]
例えば、システムのセンサが故障した場合に、システムを安定的に動作させるために強制的に値を書き換えることがある。これは、故障したセンサに対応する変数に割り当てられたメモリアドレスの格納データを、強制的に、所定値（強制設定値）に書き換えるものである。
【０１２０】
その後、故障が直った場合は、上記強制設定を解除するが、センサの値がシステムに対する役割や、通常値と強制設定値に乖離がある場合、単純に強制設定を解除するだけではシステムが不安定になる可能性がある。尚、単純に強制設定を解除するとは、例えば、上記メモリアドレスの格納データを、強制設定値から直ちに通常値に変更することである。
【０１２１】
この為、この様な事態が想定し得るセンサに関しては、予めその変数に上記補正パターンを対応付けておき、強制設定解除の際に、この補正パターンを用いて、この変数の値（メモリアドレスの格納データ）を、強制設定値から段階的に（徐々に）通常値に近づけていく。
【０１２２】
本手法によれば、コントローラ３０が自動で補正しながら解除を実施するので、解除時の調整が不要であり、更に、システムに詳しくないユーザでも単に解除するだけでシステムに支障をきたさないで強制設定の解除が実施できる効果がある。
【０１２３】
また、解除時の効果だけでなく、上記一例の場合には、システム稼働中にコントローラの任意のメモリ領域の値を強制的に書き換えると共に、この強制設定されたメモリ領域へのその後の書込みを（通常値の書込みを）、上記解除が行われるまでの間は禁止でき、以ってシステム稼働を安定して継続できる
本手法では、変数（メモリ）に対して強制設定解除の補正パターンを関連付け、強制設定を解除する時、変数に関連付けた補正パターンを用いて、システムの動作に支障が発生しないように値を戻すようにする。
【０１２４】
更に、ユーザがシステム構成を定義する時、機器毎に強制設定解除の際の補正パターンと関連付けを実施し、コンパイラ機能により“機器に割りついた補正パターン”をメモリに自動で関連付け、メモリに対して強制設定の解除を実施した時、関連付いた補正パターンを用いて安全に強制設定解除を実施する。
【符号の説明】
【０１２５】
１  ネットワーク
２  支援装置
１１  フロントエンドコンパイラ
１２  バックエンドコンパイラ
１３  ソースコード
１４  中間コード
１５  機械語オブジェクト
１６  変数−アドレス対応表
２１  機器−補正パターンＤＢ（テンプレート）
２２  システム構成定義
２３  システム構成情報
２４  機器−補正パターン対応表
２５  アドレス−補正パターン対応表
３０  コントローラ
３１  プログラム実行管理部
３２  メモリ
３３  機械語オブジェクト
３４  アドレス−補正パターン対応表
３５  強制ＯＮアドレス一覧
３６  補正パターン
４１  機器（変数名）
４２  属性
４３  機器識別情報
４４  アドレス
４５  補正パターン
５１  アドレス
５２  補正パターン
５３  実行中フラグ
６１  管理番号
６２  強制ＯＮメモリアドレス
６３  ソース値
６４  補正パターン
６５  実行中フラグ
６６  強制設定値
６７  実行回数
６８  開始時刻
【図１】
0006798156.tif 000002
【図２】
0006798156.tif 000003
【図３】
0006798156.tif 000004
【図４】
0006798156.tif 000005
【図５】
0006798156.tif 000006
【図６】
0006798156.tif 000007
【図７】
0006798156.tif 000008
【図８】
0006798156.tif 000009
【図９】
0006798156.tif 000010
【図１０】
0006798156.tif 000011