(57)【要約】【課題】  そのＰＬＣが提供する異常メモリの仕様を容易に理解させることができると共に、専用の異常発生命令を使用する場合のように、ラダー図プログラム中に別途異常発生用の専用ロジックを組み込むことなく、所望する異常ビットの論理値を簡単な操作で異常相当値へと変化させることができること。【解決手段】  ＰＬＣの異常メモリエリアの意味を示す文字や図形を表示し、その文字を選択し書き込み指示を与えることで異常メモリエリアのアドレスからＰＬＣのシミュレーション機器の内部メモリエリアに変換したメモリに書き込みを行い、シミュレータと接続したＰＬＣモニタ機器上でラダーの異常ロジックをデバッグ可能とした。【選択図】  図７
2008293488.tif 000002
【特許請求の範囲】
【請求項１】
実ＰＬＣの動作をエミュレートする仮想ＰＬＣと、前記仮想ＰＬＣの開発支援装置として機能するツールと、前記仮想ＰＬＣに生ずる異常をシミュレートするためのエラーシミュレータとをコンピュータ上にてソフトウェア的に実現してなるものであって、
前記仮想ＰＬＣには、
前記ツールとの間における仮想通信機能を提供するための仮想通信ユニットと、
前記仮想通信ユニットを介して前記ツールから受信されるエミュレートすべきＰＬＣの機種情報を記憶するためのＰＬＣ機種情報メモリと、
前記ＰＬＣ機種情報メモリに格納されたＰＬＣ機種情報に対応する機種のＰＬＣの動作をエミュレートするＰＬＣシミュレーションエンジンと、
前記ＰＬＣシミュレーションエンジンで実行されるべきユーザプログラムを記憶するためのユーザメモリ、前記ＰＬＣにて発生するハードウェア異常、通信異常等の様々な異常項目に関する異常発生の有無を示す異常情報を各異常項目別に記憶するための異常メモリ、入出力データを記憶するための入出力メモリ等の様々なメモリで構成されるＰＬＣ仮想メモリと、
前記仮想通信ユニットを経由することなく、前記エラーシミュレータから当該仮想ＰＬＣへのアクセスを許容する機能を提供するためのシミュレーションエンジンインタフェースとが含まれており、
前記エラーシミュレータには、
ＰＬＣに発生し得る異常項目のそれぞれと、それらの異常項目に関する異常発生有無の情報が記憶される前記仮想ＰＬＣ内の異常メモリのアドレスとの関係を少なくとも含むＰＬＣ異常情報を、ＰＬＣの機種毎に記憶させた機種別ＰＬＣ異常情報メモリと、
前記シミュレーションエンジンインタフェースを介して、前記ＰＬＣ機種情報メモリからＰＬＣ機種情報を取り込むための機種情報取り込み部と、
前記機種情報取り込み部を介して取り込まれた機種情報に対応するＰＬＣ機種のＰＬＣ異常情報を前記機種別異常情報メモリから取り込むための機種依存情報取り込み部と、
前記機種依存情報取り込み部を介して取り込まれたＰＬＣ異常情報を構成する異常項目を前記コンピュータの画面に一覧表示することにより、ユーザに対して異常項目の選択及びその異常項目に関する異常発生有無の指定を促す表示部と、
ユーザによる所定の操作により、前記異常項目の選択並びに前記異常発生有無の指定が行われたとき、前記シミュレーションエンジンインタフェースを介して、前記仮想ＰＬＣの異常メモリ内の該当するアドレスに、異常発生有無の指定に応じた情報を書き込むためのシミュレータＰＬＣ書き込み部とが含まれており、
それにより、前記ツールを介して前記仮想ＰＬＣ内のＰＬＣ機種情報メモリに所望のＰＬＣ機種情報を記憶させたのち、前記コンピュータの画面上における異常項目の一覧表示を頼りとして、所定の異常項目選択操作並びに異常発生有無の指定操作を行うことにより、前記仮想ＰＬＣ内の異常メモリの対応するアドレスの状態を、前記ツールの操作を経由することなく、所望の状態に設定可能とした、ことを特徴とするＰＬＣのシミュレーション装置。
【請求項２】
前記エラーシミュレータの表示部は、
前記ユーザにより選択された異常項目と選択されていない異常項目とが視覚的に区別可能、かつ前記指定された異常発生有無の状態が視覚的に区別可能となるように、前記コンピュータの画面上に、異常項目と異常メモリのアドレスとの関係を一覧表示する、ことを特徴とする請求項１に記載のＰＬＣのシミュレーション装置。
【請求項３】
前記エラーシミュレータの機種別ＰＬＣ異常情報メモリには、
異常項目と異常メモリのアドレスとの関係に加えて、各異常項目の意味内容を示すテキスト情報が記憶されており、
前記エラーシミュレータの表示部は、
前記テキスト情報に基づいて、各異常項目の意味内容を示す文章を含めて、前記コンピュータの画面上に、異常項目を一覧表示する、ことを特徴とする請求項２に記載のＰＬＣのシミュレーション装置。
【請求項４】
前記エラーシミュレータの機種別ＰＬＣ異常情報メモリには、
各ＰＬＣ機種に発生する複数の異常項目が階層構造を含めて記憶されており、
前記エラーシミュレータの表示部は、
階層構造を明示する表示態様をもって、前記コンピュータの画面上に、異常項目を一覧表示する、ことを特徴とする請求項２に記載のＰＬＣのシミュレーション装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、プログラマブル・コントローラ（以下、「ＰＬＣ」と言う）のシミュレーション装置に関する。
【背景技術】
【０００２】
一般的なＰＬＣの機能として、ＰＬＣはハードウェアに起因する異常や通信に起因する異常の発生を記憶するためのメモリを保持している。異常発生のの有無の状態はたいていの場合ビットで表され、異常なしなら“０”、異常ありなら“１”となる。
【０００３】
ＰＬＣで実行されるユーザが作成するプログラム（ユーザプログラムと呼ぶ）は、これらのＰＬＣの異常発生を検知し、これらに対応した処理（異常処理と呼ぶ）を記述することが一般的である。これらの異常処理が記述されていないと、システムを運用後、万が一ＰＬＣの故障等が発生した場合に、システムが正しく止まらなかったり、異常発生を検知しなかったりすることになり、システムに甚大な影響を及ぼす。
【０００４】
図２８に、一般的なＰＬＣの異常発生を検出するユーザプログラムの例を示す。ＡＲ４０２．１２（基本ＩＯ異常）、ＡＲ４０２．０８（ＩＮＮＥＲボード異常）、ＡＲ４０２．０７（ＣＰＵ高機能ユニット異常）、ＡＲ４０２．０６（高機能ＩＯユニット異常）が異常発生を記憶するメモリのアドレスであり、これらのアドレスに対応するフラグがＯｎになった場合、運転継続可能なＣＰＵユニットのハードウエア異常と検知し、異常処理を行う。
【０００５】
これらの異常発生を記憶するメモリは通常、ユーザプログラムで誤って書き換えてしまわないように、リードオンリーにすることが一般的である。このとき、異常処理が正しく動作することを確認するために、異常を故意的に発生させる必要がある。
【０００６】
異常を故意的に発生させるもっとも原始的な方法は、実際に異常を発生する状況を物理的に作り出す方法である。この場合、ユニットを取り外したり通信ケーブルを抜くなどして、異常を故意に発生させることを試みる。しかし、ハードウエアが故障しない限り発生しない異常もあるため、故意的に全ての異常を発生させることは困難である。
【０００７】
別の方法としては、異常を擬似的に発生させるための特別な命令（異常発生命令）を埋め込み、その異常発生命令が実行されることにより異常を擬似的に発生させてデバッグを行うことができる。図２９は、異常を擬似的に発生させるユーザプログラムの一例を示している。異常を擬似的に発生するための特別な命令（図２９の例では、ＦＡＬ命令が該当）を含むプログラムを作成し、デバッグ用に利用する。しかし、この方法では、わざわざ異常発生のプログラムを作成する必要があり、手間である。また、その異常発生命令を実稼動時には削除する必要があり、作業忘れなどにより意図しない異常発生を起こしかねない。
【０００８】
ＰＬＣのデバッグをパソコン上で実現するシミュレーション機能も存在するが、実機と同じ操作性を実現しているために、上記異常発生を記憶するメモリも書き込み禁止となっているために異常状態をシミュレーション上で再現することはできない。
【０００９】
ＰＬＣの異常のデバッグでのもう１つの問題は異常処理の記述漏れである。マニュアルには色々な種類の異常やＰＬＣの状態を示すフラグなどは異常発生を記憶するメモリに存在するが、多種多様な情報があるため、システムの中で、どのフラグをどうハンドリングしておけばよいかがわかりにくい。特に、機種やバージョンが変わるごとに異常としてハンドリングすべきフラグが増えたりすることにより、異常処理の記述漏れが発生し、システム稼動時に大きな問題となることがある。従来はマニュアルをできるだけわかりやすくするなどの方法がとられているが、異常記述漏れを防ぐ確実な方法とはなっていない。
【００１０】
なお、ＰＬＣおよび外部機器を接続せずにプログラムの検証を行なうＰＬＣのプログラムのシミュレーション装置は、従来より知られている（特許文献１参照）。
【特許文献１】特開２００４−２５８９２６号公報
【発明の開示】
【発明が解決しようとする課題】
【００１１】
上述のように、従来、異常発生を検出するユーザプログラムの動作検証を目的として、異常発生を記憶するメモリ上の特定アドレスに割り付けたフラグの内容を異常相当値に変化させるためには、実際に異常事態を物理的に発生させたり、専用の異常発生命令をユーザプログラム中に組み込んで実行させる等の方法があったが、前者は適用可能な異常が僅かしかなく、広く異常一般に適用することは困難である一方、後者は目的とするフラグの内容を仮想的に異常相当値に変化させることはできるものの、その専用の異常発生命令をユーザプログラム中から除去し忘れると、稼働中に不測の事態を招く虞が想定され、採用が躊躇されがちである。
【００１２】
また、そもそも、そのような専用の異常発生命令が使用できるとしても、一般のＰＬＣの異常発生を記憶するメモリ内には極めて多数のフラグが存在することに加えて、各フラグの意味内容を正確に理解するには、操作マニュアル等が提供するガイド用のメモリマップ等の無味乾燥な図表を参照するほかはなく、そのため、フラグ群の内容理解の不足から、ユーザプログラムを作成する際に適切なフラグを参照する命令を組み込み忘れたり、不適切なフラグを参照する命令を組み込む等により、異常発生時にシステムを十分に保護できないことも生じがちであった。
【００１３】
この発明は、このような従来の問題点に着目してなされたものであり、その目的とするところは、そのＰＬＣ機種ごとのいろいろな異常に対応するフラグの仕様を容易に理解させることができると共に、専用の異常発生命令を使用する場合のように、ユーザプログラム中に別途異常発生用の専用ロジックを組み込むことなく、所望するフラグの論理値を簡単な操作で異常相当値へと変化させることができ、それにより、デバックモードから稼働モードへの切換に際して、異常発生用の専用ロジックの削除忘れに起因する不測の誤動作の発生を危惧する必要もないようにしたＰＬＣのシミュレーション装置を提供することにある。
【００１４】
この発明のさらに他の目的並びに作用効果については、明細書の以下の記述を参照することにより、当業者であれば容易に理解されるであろう。
【課題を解決するための手段】
【００１５】
上述の技術的な課題は、以下の構成を有するＰＬＣのシミュレーション装置により解決することができる。
【００１６】
すなわち、この発明のＰＬＣのシミュレーション装置は、実ＰＬＣの動作をエミュレートする仮想ＰＬＣと、前記仮想ＰＬＣの開発支援装置として機能するツールと、前記仮想ＰＬＣに生ずる異常をシミュレートするためのエラーシミュレータとをコンピュータ上にてソフトウェア的に実現してなるものである。
【００１７】
前記仮想ＰＬＣには、前記ツールとの間における仮想通信機能を提供するための仮想通信ユニットと、前記仮想通信ユニットを介して前記ツールから受信されるエミュレートすべきＰＬＣの機種情報を記憶するためのＰＬＣ機種情報メモリと、前記ＰＬＣ機種情報メモリに格納されたＰＬＣ機種情報に対応する機種のＰＬＣの動作をエミュレートするＰＬＣシミュレーションエンジンと、前記ＰＬＣシミュレーションエンジンで実行されるべきユーザプログラムを記憶するためのユーザメモリ、前記ＰＬＣにて発生するハードウェア異常、通信異常等の様々な異常項目に関する異常発生の有無を示す異常情報を各異常項目別に記憶するための異常メモリ、入出力データを記憶するための入出力メモリ等の様々なメモリで構成されるＰＬＣ仮想メモリと、前記仮想通信ユニットを経由することなく、前記エラーシミュレータから当該仮想ＰＬＣへのアクセスを許容する機能を提供するためのシミュレーションエンジンインタフェースとが含まれている。
【００１８】
一方、前記エラーシミュレータには、ＰＬＣに発生し得る異常項目のそれぞれと、それらの異常項目に関する異常発生有無の情報が記憶される前記仮想ＰＬＣ内の異常メモリのアドレスとの関係を少なくとも含むＰＬＣ異常情報を、ＰＬＣの機種毎に記憶させた機種別ＰＬＣ異常情報メモリと、前記シミュレーションエンジンインタフェースを介して、前記ＰＬＣ機種情報メモリからＰＬＣ機種情報を取り込むための機種情報取り込み部と、前記機種情報取り込み部を介して取り込まれた機種情報に対応するＰＬＣ機種のＰＬＣ異常情報を前記機種別異常情報メモリから取り込むための機種依存情報取り込み部と、前記機種依存情報取り込み部を介して取り込まれたＰＬＣ異常情報を構成する異常項目を前記コンピュータの画面に一覧表示することにより、ユーザに対して異常項目の選択及びその異常項目に関する異常発生有無の指定を促す表示部と、ユーザによる所定の操作により、前記異常項目の選択並びに前記異常発生有無の指定が行われたとき、前記シミュレーションエンジンインタフェースを介して、前記仮想ＰＬＣの異常メモリ内の該当するアドレスに、異常発生有無の指定に応じた情報を書き込むためのシミュレータＰＬＣ書き込み部とが含まれている。
【００１９】
このような構成によれば、前記ツールを介して前記仮想ＰＬＣ内のＰＬＣ機種情報メモリに所望のＰＬＣ機種情報を記憶させたのち、前記コンピュータの画面上における異常項目の一覧表示を頼りとして、所定の異常項目選択操作並びに異常発生有無の指定操作を行うことにより、前記仮想ＰＬＣ内の異常メモリの対応するアドレスの状態を、前記ツールの操作を経由することなく、所望の状態に設定することができる。
【００２０】
そのため、本発明によれば、そのＰＬＣが提供する異常メモリの仕様を容易に理解させることができると共に、専用の異常発生命令を使用する場合のように、ラダー図プログラム中に別途異常発生用の専用ロジックを組み込むことなく、所望する異常ビットの論理値を簡単な操作で異常相当値へと変化させることができ、それにより、デバックモードから稼働モードへの切換に際して、復旧処理の失念に起因する不測の誤動作の発生を危惧する必要もないと言う利点がある。
【００２１】
上述の本発明において、前記エラーシミュレータの表示部は、前記ユーザにより選択された異常項目と選択されていない異常項目とが視覚的に区別可能、かつ前記指定された異常発生有無の状態が視覚的に区別可能となるように、前記コンピュータの画面上に、異常項目と異常メモリのアドレスとの関係を一覧表示する、ようにしてもよい。
【００２２】
このような構成によれば、現在、どの異常項目が選択された状態にあるか、またその選択された異常項目に関する異常発生有無の指定がどのような状態にあるかを視覚的に容易に理解できるから、異常項目の選択解除、異常発生有無の指定解除をし忘れる等の操作ミスを生じにくいと言う利点がある。
【００２３】
上述の本発明において、前記エラーシミュレータの機種別ＰＬＣ異常情報メモリには、異常項目と異常メモリのアドレスとの関係に加えて、各異常項目の意味内容を示すテキスト情報が記憶されており、前記エラーシミュレータの表示部は、前記テキスト情報に基づいて、各異常項目の意味内容を示す文章を含めて、前記コンピュータの画面上に、異常項目を一覧表示する、ようにしてもよい。
【００２４】
このような構成によれば、単なる異常項目の一覧表示に加えて、各異常項目にはその意味内容を示す説明文が付されるため、多数の異常項目が存在する場合には、ユーザは各異常項目の中から最適な異常項目を容易に選択することができる。
【００２５】
上述の本発明において、前記エラーシミュレータの機種別ＰＬＣ異常情報メモリには、
各ＰＬＣ機種に発生する複数の異常項目が階層構造を含めて記憶されており、前記エラーシミュレータの表示部は、階層構造を明示する表示態様をもって、前記コンピュータの画面上に、異常項目を一覧表示する、ようにしてもよい。
【００２６】
このような構成によれば、階層構造を明示する表示態様をもって、異常項目は一覧表示されるため、例えば、複数の異常項目が互いに階層構造的に有機的関係にあるような場合には、それらの関係を一目瞭然に理解することが可能となる。
【発明の効果】
【００２７】
本発明によれば、そのＰＬＣが提供する異常メモリの仕様を容易に理解させることができると共に、専用の異常発生命令を使用する場合のように、ラダー図プログラム中に別途異常発生用の専用ロジックを組み込むことなく、所望する異常ビットの論理値を簡単な操作で異常相当値へと変化させることができ、それにより、デバックモードから稼働モードへの切換に際して、復旧処理の失念に起因する不測の誤動作の発生を危惧する必要もないと言う利点がある。
【発明を実施するための最良の形態】
【００２８】
以下に、本発明に係るＰＬＣのシミュレーション装置の好適な実施の一形態を添付図面を参照しながら詳細に説明する。
【００２９】
この実施形態におけるシミュレーション装置のシステム構成を図１に示す。同図に示されるように、図示のＰＬＣのシミュレーション装置１は、オペレーティングシステム（ＯＳ）１１と、通信ドライバ１２と、ツール・アプリケーション１３と、仮想ＰＬＣ１４と、エラーシミュレータ１５とを含んで構成される。
【００３０】
ここで、ツール・アプリケーション１３は、ＰＬＣの設計ツール１３１や表示器設計ツール１３２のほか、ＰＬＣ監視、制御等のユーザアプリケーション１３３を含んで構成される。
【００３１】
仮想ＰＬＣ１４は、当業者にはよく知られているように、ＰＣ上に実ＰＬＣ２をエミュレートする機能を提供するものである。この仮想ＰＬＣ１４内には、ＰＬＣ情報１４１、ＰＬＣシミュレーションエンジン１４２、仮想通信ユニット１４３、ＰＬＣ仮想メモリ１４４、シミュレーションエンジンＩＦ（シミュレーションエンジンインタフェース）１４５が含まれている。
【００３２】
仮想通信ユニット１４３は、仮想ＰＬＣ１４において通信ユニットを仮想的に提供し、ツール・アプリケーション１３に含まれるツールやユーザアプリケーションからのアクセスに対して、実機と同様のインタフェースを提供する機能モジュールである。シミュレーションエンジンＩＦ１４５は、仮想ＰＬＣ１４にアクセスする際、仮想通信ユニット１４３経由ではなく直接仮想ＰＬＣユニットにアクセスするためのインタフェースを提供するものである。
【００３３】
エラーシミュレータ１５は、のちに詳細に説明するように、異常情報を一覧で提供し発行できる機能を提供するものである。このエラーシミュレータ１５には、異常履歴テーブル１５１と、異常履歴部１５２と、表示部１５３と、異常コントロール部１５４と、シミュレータＰＬＣ書き込み部１５５と、機種情報取り込み部１５６と、機種依存情報取り込み部１５７と、機種別ＰＬＣ異常情報１５８と、ユーザ定義異常情報１５９とが含まれている。
【００３４】
ここで、機種別ＰＬＣ異常情報１５８とは、ＰＬＣの機種ごとに異常の意味、対応アドレス、表示方法を記述した構造化テキストである。また、実ＰＬＣ２は、実機のＰＬＣを意味している。
【００３５】
なお、上記の機能構成により表されるシミュレーション装置１は、図２に示されるハードウェア構成を有するパソコン（ＰＣ）上で動作する。図２において、演算部１０１は、ＯＳ１１を含めたそれぞれのソフトウェアを実行制御する。ＲＯＭもしくはＨＤＤ１０２は、それぞれのソフトウェアの実行モジュールを格納する。ＲＡＭ１０３は、それぞれのソフトウェアが実行時に必要とするワーク領域（仮想ＰＬＣも異常メモリなど）を保持するのに使用する。通信制御部１０４は、ＰＬＣ等の外部の機器との通信を制御するのに使用する。利用者への表示は表示部を介して行われる。これは一般的なＰＣのハードウェア構成と同じである。
【００３６】
次に、図１に示される機能構成を有するシミュレーション装置１の作用について、以下に、順を追って説明する。
（１）ＰＬＣの設計ツール１３１は、ユーザが指定したＰＬＣ機種に基づいて仮想ＰＬＣ１４に接続を行う。そのＰＬＣ機種の情報は、仮想ＰＬＣ１４の仮想通信ユニット１４３を介してＰＬＣシミュレーションエンジン１４２に渡され、ＰＬＣ機種情報１４１に格納される。これにより仮想ＰＬＣ１４はユーザが指定した機種のＰＬＣをパソコン内でシミュレートすることとなる。
（２）エラーシミュレータ１５で仮想ＰＬＣ１４に接続することにより、機種情報取り込み部１５６を介して仮想ＰＬＣ１４がシミュレートしているＰＬＣの機種情報を取得する。
（３）取得した機種情報に対応した機種別ＰＬＣ異常情報１５８から、機種依存情報取り込み部１５７を介して、機種に対応した異常一覧情報を取得する。異常一覧には発生させるべき異常の名称、内容、異常コード、異常発生時にＯｎさせるべきフラグのアドレス情報、異常発生に必要な追加情報、追加情報を入力させる方式を示す情報、などが含まれている。
（４）異常一覧情報をもとに文字情報や図情報などによりユーザに該当機種で発生する異常の一覧を表示部１５３に表示する。
（５）ユーザの異常選択により、発生させるべき異常を決定する。異常は複数同時に選択しても良い。
（６）決定した異常を、仮想ＰＬＣ１４のシミュレーションエンジンＩＦ１４５に発行する。
（７）シミュレーションエンジンＩＦ１４５では、指定された仮想ＰＬＣ１４の異常を格納する異常メモリ１４４ｄに対して異常情報を記述する。このシミュレーションエンジンＩＦ１４５は、仮想通信ユニット１４３からのアクセスとは異なり、仮想ＰＬＣ１４のメモリエリア（１４４ｂ，１４４ｃ，１４４ｄ）を自由に更新できる。このため、ツール・アプリケーション１３からのアクセスに対しては読み込み専用である異常メモリ１４４ｄの値をエラーシミュレータ１５は変更することができる。
（８）ユーザプログラムは異常メモリに異常が書き込まれたことにより異常処理を実行する。また、ツール・アプリケーション１３も仮想ＰＬＣ１４で発生した異常に対応した動作を行う。
（９）エラーシミュレータ１５では、どの異常を発生させたかどうかがわかるよう、文字情報や図情報を更新する。
（１０）ユーザはエラーシミュレータ１５により発生させた異常を復旧させることができる。
（１１）ユーザの異常選択により、発生解除させるべき異常を決定する。異常は複数同時に選択しても良い。
（１２）決定した異常解除を、仮想ＰＬＣ１４のシミュレーションエンジンＩＦ１４５に発行する。
（１３）シミュレーションエンジンＩＦ１４５では、指定された仮想ＰＬＣの異常を格納する異常メモリ１４４ｄに対して異常解除の情報を記述する。
（１４）ユーザプログラムは、異常メモリ１４４ｄに異常解除が書き込まれたことにより異常解除処理を実行する。また、ツール・アプリケーション１３も仮想ＰＬＣ１４の異常解除に対応した動作を行う。
【００３７】
そして、以上の構成よりなるＰＬＣのシミュレーション装置１によれば、次のような、格別の作用効果を奏するものである。
（１）異常を一覧で表示できる。これによりユーザがマニュアル等でどの異常に対して処理を記述すべきかを容易に理解でき、異常処理の記述漏れがなくなる。またこれらを実際に異常一覧から発生させることにより、もれなく異常処理を確認できる。
（２）異常を発生させるデバッグ用のプログラムを設計、デバッグする必要がない。またこのデバッグ用プログラムを運転稼動時に取り除く処理が必要がなくなり、抜き取りミスを防止できる。
（３）異常一覧より異常を発生させたもの、復旧させたものについては異常一覧の文字色、背景色、図形などを変化せせることにより、どの異常については確認を実施したから記述することができる。
【００３８】
次に、図１及び図２を参照しながら説明したＰＬＣのシミュレーション装置１の動作をより詳細に説明する。
【００３９】
まず、異常が発生した場合における異常メモリの該当ビットの状態変化について説明する。異常メモリの内容の一部を表にして示す図が図３に示されている。
（１）同図に示されるように、ＰＬＣシステムの異常が発生すると、異常メモリのあるフラグがＯｎになる。図示の例の場合には、異常（この場合は、メモリ異常）が発生すると、Ａ４０１１５アドレスがＯｎになる。
（２）ＰＬＣシステムの異常が発生すると、異常内容通知エリアにエラーコードが記述される。図示の例にあっては、異常コード格納エリア（Ａ４００）にエラー内容を示すコードが記述される。
（３）異常メモリは、異常ごとに、必要により異常の詳細情報を格納するエリアを有する。例えば、上記のメモリ異常の場合、Ａ４０３００−Ａ４０３０９の内容により、どのようなメモリ異常であるかが明確になる。
【００４０】
次に、ＰＬＣのユーザプログラムやツール・アプリケーション１３では、異常が発生していた場合、上記のエリアの変化を検知し異常に対する処理を記述することとなる。そして、これらの処理が正しく動作するかどうかをデバッグ時に確認を行なう。
【００４１】
機種別ＰＬＣ異常情報１５８の一部を示すＸＭＬフォーマットで表現した例が図４に示される。また、そのＸＭＬフォーマットで表現する場合の項目を説明する例が図５に示されている。同図に示されるように、ＰＬＣの機種ごとにこのような異常情報を記述したリストを用意する。この例では、ＸＭＬの記述形態で記述しているが、リレーショナルデータベースの形態や、データを区切り記号でつなげた形式など、形式は何でもかまわない。
【００４２】
次に、異常履歴テーブル１５１の内容が図６に示されている。同図に示されるように、異常履歴テーブル１５１は、発生可能な異常の一覧が表形式で記述されており、機種別ＰＬＣ異常情報１５８（図１参照）を読み込むことにより作成される。このテーブルは、異常が発生した日時（発生日時）、発生解除した日時（復旧日時）、異常コード、現在の異常ステータス（異常を一度も発生させていない、異常を発生させた状態、異常を発生後復旧させた状態）などの情報を含む。
【００４３】
図６の例ではメモリ異常のＩＯテーブルチェックサム異常について発生２００７／０３／１６  １２：２１：３４に異常を発生させている。また、ＩＯバス異常は２００７／０３／１６  １２：２５：０４に発生させ、２００７／０３／１６  １２：２６：１５に復旧させていることがわかる。異常ステータスはそれぞれ発生中（Ｇｅｎａｒａｔｅｄ）と解除完了（Ｃｌｅａｒｅｄ）を示している。
【００４４】
このテーブルは、異常一覧の中で発生させたもの、および発生させたあと復旧したもの、まだ発生させていないものなどを色を分けて表示するとき活用される。異常シミュレーション画面での異常発生、復旧の表示イメージを図２０に示す。この情報をファイルとして格納することにより、異常テスト実行記録として活用できる。異常シミュレーション画面イメージの一例を図７に示す。さらに、発生させている異常をまとめて解除する場合、異常ステータスがＧｅｎｅｒａｔｅｄになっている異常を全て異常解除することにより、発生させた異常の一括解除が行える（図７のＣｌｅａｒＡｌｌボタン参照）。
【００４５】
異常シミュレーション一覧表示処理を示すフローチャートが図８に示されている。同図において、処理が開始されると、異常シミュレーション部は仮想ＰＬＣのシミュレーションエンジンＩＦに接続し（ステップ１０１）、続けてシミュレーションエンジンＩＦからＰＬＣの機種情報を取得する（ステップ１０２）。ここで、機種情報はツール・アプリケーション１３に含まれるツール、またはユーザアプリケーションが仮想ＰＬＣに接続された段階で設定されている。
【００４６】
次いで、機種情報に対応した機種別ＰＬＣ異常情報ファイルが開かれ（ステップ１０３）、ＥｒｒｏｒＧｒｏｕｐ／ＥｒｒｏｒＳｕｂＧｒｏｕｐ／Ｅｒｒｏｒの各内容を元にエラーが階層的に画面表示される（ステップ１０４）。ここで全ての異常についての一覧表示が完了していない場合には（ステップ１０５ＮＯ）、ステップ１０４に戻りエラーの階層表示を繰り返す。一方、全ての異常についての一覧表示が完了した場合には（ステップ１０５ＹＥＳ）、読み込んだ異常一覧を元に異常履歴テーブルが作成され、異常が未発生状態とされる（ステップ１０６）。ここで、異常が未発生状態とされるとは、図６に示される異常履歴テーブルの例の場合、発生日時、復旧日時、異常コード、異常ステータスの欄が全て空白にするという意味である。
【００４７】
このように、エラーシミュレータ１５は仮想ＰＬＣ１４のシミュレーションエンジンＩＦ１４５に対して接続する。ＰＬＣシミュレーションエンジン１４２との通信方法はエラーシミュレータ１５からＰＬＣシミュレーションエンジンＩＦ１４５に対してコマンドを送信して通信を行うコマンド通信方式でも、共通のメモリにデータを書くことにより情報を共有する共有メモリ方式など、どのような方法でもかまわない。仮想ＰＬＣ１４のメモリを直接共有メモリとして公開してもよい。この場合、シミュレーションエンジンＩＦ１４５としては特に処理を行う必要はなく、エラーシミュレータ１５で共有メモリに反映した異常内容がダイレクトに仮想ＰＬＣメモリに反映される。
【００４８】
仮想ＰＬＣの処理の概要を示すゼネラルフローチャートが図９に、またシミュレーションエンジンＩＦ処理の詳細を示すフローチャートが図１０に示されている。本例ではコマンド通信による例をベースに記述している。なお、図９の例では、通信方式としてはコマンド通信によるものが採用されている。同図の処理が開始されると、先ず始めにシステム共通処理が実行され（ステップ２０１）、次いでＩＯ更新処理（ステップ２０２）、ユーザプログラム実行処理（ステップ２０３）、仮想通信ユニット処理（ステップ２０４）、シミュレーションエンジンＩＦ処理（ステップ２０５）、ツール処理（ステップ２０６）が順次実行される。処理を継続する場合には同様にしてステップ２０１〜ステップ２０６の処理を繰り返し（ステップ２０７ＮＯ）、処理を終了する場合には（ステップ２０７ＹＥＳ）、同図に示された処理は終了となる。なお、ステップ２０５のシミュレーションエンジンＩＦ処理については、後段にて詳細に説明する。
【００４９】
次いで、図１０に示されたシミュレーションＩＦ処理の詳細について説明する。なお、このシミュレーションＩＦ処理は、図９のステップ２０５に相当する。シミュレーションエンジンＩＦ処理が開始されると、先ず始めに共有メモリのシミュレーションエンジンＩＦ受信処理が実行され（ステップ２０５１）、受信処理が行われると続けて処理内容の判別が実行される（ステップ２０５２ＹＥＳ、ステップ２０５３）。ここで、処理内容がＰＬＣ仮想メモリ反映だった場合には（ステップ２０５３ＰＬＣ仮想メモリ反映）、受信した内容をＰＬＣ仮想メモリに反映して処理を終了する（ステップ２０５４）。一方、処理内容が機種情報読出しであった場合には（ステップ２０５３機種情報読出し）、ＰＬＣ機種情報を送信して処理を終了する（ステップ２０５５）。なお、ステップ２０５２において受信が行われなかった場合には（ステップ２０５２ＮＯ）、そのまま処理を終了する。
【００５０】
このように、エラーシミュレータ１５は、仮想ＰＬＣ１４のシミュレーションエンジンＩＦ１４５に対して機種情報の取得を依頼する。仮想ＰＬＣ１４ではシミュレーションエンジンＩＦ１４５の処理としてＰＬＣ機種情報１４１の呼び出し処理を受信し、仮想ＰＬＣ１４のＰＬＣ機種情報エリアに格納されている機種情報（たとえば「ＣＪ１Ｍ−ＣＰＵ６３」）の情報をエラーシミュレータ１５に返す。
【００５１】
そして、エラーシミュレータ１５は、ＰＬＣ機種情報１４１を元に、機種別ＰＬＣ異常情報ファイル１５８をオープンし、この記述内容を読み込む。たとえばＣＪ１Ｍ−ＣＰＵ６３機種に対応した機種別ＰＬＣ異常情報は「ＰＬＣ＿ＣＪ１Ｍ＿ＣＰＵ６３」などのＰＬＣ機種情報はＥｒｒ＿ＣＪ１Ｍ＿ＣＰＵ６３．ｘｍｌなどと機種情報を含むファイルで構成することにより、該当する情報をロードすることができる。あるいは、機種情報をリレーショナルデータベース（ＲＤＢ）で構築し、機種情報をキーに該当異常の一覧の検索する、といった方式も考えられる。
【００５２】
エラー一覧画面イメージの一例を示す図（その１）が図１１に、またエラー一覧を記述した機種別ＰＬＣ異常情報の一例を示すＸＭＬファイル（その１）が図１２にそれぞれ示されている。
【００５３】
＜ＥｒｒｏｒＧｒｏｕｐ＞中に、＜ＥｒｒｏｒＳｕｂＧｒｏｕｐ＞が複数存在し、さらに１つの＜ＥｒｒｏｒＳｕｂＧｒｏｕｐ＞の中に複数のエラー（＜Ｅｒｒｏｒ＞）が存在するような記述方式である。たとえば、図１１のエラー一覧の例を機種別ＰＬＣ異常情報ファイルに表すと図１２のようになる。この例ではわかりやすくするために各異常（たとえばメモリ異常）の詳細情報についての記述を省略している。この機種別ＰＬＣ異常情報ファイルを読み込むことにより、図１１のように異常の一覧を表示することができ、換言すれば、図７に示されるような異常の一覧が表示される。
【００５４】
エラー一覧画面イメージの一例を示す図（その２）が図１３に、またエラー一覧を記述した機種別ＰＬＣ異常情報の一例を示すＸＭＬファイル（その２）が図１４にそれぞれ示されている。ＣＳ１Ｄは２重化対応機種のため、ＣＪ１Ｍでの異常に加え２重化の異常などが追加されている。このため、これに対応した機種別ＰＬＣ異常情報ファイル（図１４参照）を読み込むことにより別の異常一覧を表示することができる。
【００５５】
図７に示される画面において、異常を選択すると、異常の詳細情報が表示される。図４は、図１２で示した機種別ＰＬＣ異常情報ファイルを、エラーの詳細に至るまで記述した例である。図７ではメモリ異常の詳細がＥｒｒｏｒＤｅｔａｉｌＰａｔｔｅｒｎ情報として記述されている。
【００５６】
異常の詳細設定の一例が図１５に示されている。同図は、異常リストの内のメモリ異常に対する詳細情報の例を示すものである。ＰＬＣの異常は異常の種類によりさらにその詳細原因を認識するための付加情報が必要になることが多い。
【００５７】
たとえば、メモリ異常であれば、ＰＬＣのメモリのうちどこでメモリ異常が発生したのかがわかる必要があり、またＩＯバス異常ではどのラック、スロットで異常が発生したかを認識したい。このときの異常情報の登録の仕方はそれぞれ異なるため、異常詳細情報を登録するための仕組みを機種別ＰＬＣ異常情報ファイルで登録できるようにしている。
【００５８】
たとえば、図４ではメモリ異常を表示するためのリストボックスを使い、このリストとして選択できる項目として、「プログラムチェックサム異常」、「ＰＬＣシステム設定チェックサム異常」、「ＩＯＴａｂｌｅチェックサム異常」、「ルーチングテーブルチェックサム異常」などが選択でき、これらのリストから選択されたリストに対応したアドレス、たとえば「プログラムチェックサム異常」ならＡＲ４０３００のアドレスで示されるフラグをＯｎにすればよいことがわかる。
【００５９】
異常シミュレーションにおける異常発生処理を示すフローチャート（その１、その２）が図１６、図１７に、異常シミュレーション画面における異常発生、復旧のイメージが図２０に示されている。図１６及び図１７において処理が開始されると、先ずはじめに一覧の中から発生させる異常をユーザに選択させて（ステップ３０１）、選択された異常に対応する＜Ｅｒｒｏｒ（Ｄｅｓｃｒｉｐｔｉｏｎ）＞の値を異常説明（Ｅｒｒｏｒ  Ｄｅｔａｉｌｅｄ  Ｄｅｓｃｒｉｐｔｉｏｎ）に記述する（ステップ３０２）。次いでＥｒｒｏｒＣｏｎｔｒｏｌのタイプ判定を行い、タイプがＬｉｓｔであった場合には（ステップ３０３Ｌｉｓｔ）、Ｌｉｓｔの選択肢としてＥｒｒｏｒＡｄｄｒｅｓｓのＤｅｓｃｒｉｐｔｉｏｎを表示しユーザにリストを選択させ（ステップ３０４、ステップ３０５）、ユーザの選択に対応したアドレスに対応するフラグをＯｎにするようにシミュレーションエンジンＩＦに通知する（ステップ３０６）。一方、タイプがＳｐｉｎであった場合には（ステップ３０３Ｓｐｉｎ）、ＥｒｒｏｒＡｄｄｒｅｓｓに対応したＳｐｉｎコントロールを表示させ、また、コントロールの説明としてＤｅｓｃｒｉｐｔｉｏｎを表示させる（ステップ３０７）。次いでユーザに値を入力させ（ステップ３０８）、Ｓｐｉｎコントロールで入力された値をアドレスに対して書き込むようにシミュレーションエンジンＩＦに通知する（ステップ３０９）。また、タイプがＥｄｉｔであった場合には（ステップ３０３Ｅｄｉｔ）、ＥｒｒｏｒＡｄｄｒｅｓｓに対応したＥｄｉｔコントロールを表示させ、また、Ｅｄｉｔコントロールの説明としてＤｅｓｃｒｉｐｔｉｏｎを表示させる（ステップ３１０）。次いでユーザに値を入力させ（ステップ３１１）、Ｅｄｉｔコントロールで入力された値をアドレスに対して書き込むようにシミュレーションエンジンＩＦに通知する（ステップ３１２）。
【００６０】
ステップ３０６，ステップ３０９，ステップ３１２のいずれかによるシミュレーションエンジンＩＦへの通知が終了すると、続けてＥｒｒｏｒＡｄｄｒｅｓｓのＡｄｄＴｏＥｒｒｏｒＣｏｄｅの判定が行われる（ステップ３１３）。判定結果がＴＲＵＥだった場合にはＥｒｒｏｒＡｄｄｒｅｓｓのＶａｌｕｅをＥｒｒｏｒＣｏｄｅの値に加算して次のステップに進み（ステップ３１３ＴＲＵＥ、ステップ３１４）、判定結果がＦＡＬＳＥだった場合には加算を行わずにそのまま次のステップに進む（ステップ３１３ＦＡＬＳＥ）。
【００６１】
次に、ＥｒｒｏｒＣｏｄｅを異常メモリの異常コード格納エリアにセットするようにシミュレーションエンジンＩＦに通知を行い（ステップ３１５）、続いて選択した異常に対応するＥｒｒｏｒＦｌａｇのアドレスに対応するフラグをＯｎにするようにシミュレーションエンジンＩＦに通知を行う（ステップ３１６）。次いで、選択された異常が実行されたことを示す異常履歴テーブルの該当異常に異常発生を記録し（ステップ３１７）、異常履歴テーブルにおいて異常発生を示す異常に対して表示色を変更することで（ステップ３１８）、図１６，１７に示された処理を終了する。
【００６２】
次に、異常シミュレーションにおける異常復旧処理を示すフローチャートが図１８，１９に示されている。処理が開始されると、先ずはじめに一覧の中から解除したい異常をユーザに選択させ（ステップ４０１）、次いでＥｒｒｏｒＣｏｎｔｒｏｌのタイプ判定を行う（ステップ４０２）。タイプがＬｉｓｔであった場合には（ステップ４０２Ｌｉｓｔ）、ＥｒｒｏｒＡｄｄｒｅｓｓのアドレスに対応するフラグをＯｆｆするようにシミュレーションエンジンＩＦに通知する（ステップ４０３）。一方、タイプがＳｐｉｎであった場合には（ステップ４０２Ｓｐｉｎ）、ＥｒｒｏｒＡｄｄｒｅｓｓのアドレスに対して０を書き込むようにシミュレーションエンジンＩＦに通知する（ステップ４０４）。また、タイプがＥｄｉｔであった場合には（ステップ４０２Ｅｄｉｔ）、ＥｒｒｏｒＡｄｄｒｅｓｓのアドレスに対して０を書き込むようにシミュレーションエンジンＩＦに通知する（ステップ４０５）。
【００６３】
ステップ４０３，ステップ４０４，ステップ４０５のいずれかによるシミュレーションエンジンＩＦへの通知が終了すると、次にＥｒｒｏｒＣｏｄｅ＝０を異常メモリの異常コード格納エリアにセットするようにシミュレーションエンジンＩＦに通知を行い（ステップ４０６）、続いて選択した異常に対応するＥｒｒｏｒＦｌａｇのアドレスに対応するフラグをＯｆｆにするようにシミュレーションエンジンＩＦに通知を行う（ステップ４０７）。次いで、選択された異常が解除されたことを示す異常履歴テーブルの該当異常に異常発生を記録し（ステップ４０８）、異常履歴テーブルにおいて異常解除を示す異常に対して表示色を変更することで（ステップ４０９）、図１８，１９に示された処理を終了する。
【００６４】
このように、たとえばユーザが異常一覧からメモリ異常を選択した場合、図１２から＜Ｅｒｒｏｒ＞のＤｅｓｃｒｉｐｔｉｏｎが「運転停止異常のメモリ異常の発生」であるため、この情報が異、図７のＥｒｒｏｒ  Ｄｅｔａｉｌ  Ｄｅｓｃｒｉｐｔｉｏｎ（エラー詳細情報）の欄に表示される。
【００６５】
また、図４および図１５より、「メモリ異常」に対応する＜ＥｒｒｏｒＣｏｎｔｒｏｌ＞のＴｙｐｅはＬｉｓｔであるため、リストコントロールを図７のＳｕｂ  Ｅｒｒｏｒ  Ｄｅｔａｉｌ  ｉｎｆｏｒｍａｔｉｏｎに配置する。
【００６６】
また、リストの内容としては図４のメモリ異常に対応した＜ＥｒｒｏｒＡｄｄｒｅｓｓ＞のＤｅｓｃｒｉｐｔｉｏｎに記述されている「プログラムチェックサム異常」、「ＰＬＣシステム設定チェックサム異常」、「ＩＯＴａｂｌｅチェックサム異常」、「ルーチングテーブルチェックサム異常」などを表示し、ユーザに選択させる。ユーザは、リストより選択後、図７の「Ｇｅｎｅｒａｔｅ  Ｅｒｒｏｒ」などを選択し、エラー発生を指示する。
【００６７】
異常シミュレータは選択されたエラー詳細情報、たとえば「ＩＯＴａｂｌｅチェックサム異常」に対応した＜ＥｒｒｏｒＡｄｄｒｅｓｓ＞のＡｄｄｒｅｓｓにセットされているアドレス  ＡＲ４０３０５をＴｙｐｅで指定された“Ｂｉｔ”データとして仮想ＰＬＣのシミュレーションエンジンＩＦに対してＯｎするように依頼する。併せて、＜Ｅｒｒｏｒ＞のＡｄｄＴｏＥｒｒｏｒＣｏｄｅがＴＲＵＥなので、＜Ｅｒｒｏｒ＞のＥｒｒｏｒＣｏｄｅ  ８０Ｆ１にＶａｌｕｅの値を加算した値８０Ｆ４をエラーコード格納エリア（ＡＲ４００）にセットするように仮想ＰＬＣのシミュレーションエンジンＩＦに指示する。さらに＜Ｅｒｒｏｒ＞のＥｒｒｏｒＦｌａｇ  ＡＲ４０１１５をＯｎにするように仮想ＰＬＣのシミュレーションエンジンＩＦに指示する。
【００６８】
また、異常を発生させたことを図６の異常発生テーブルに登録する。併せて、異常発生の記録を図７のＥｒｒｏｒ  Ｓｉｍｕｌａｔｏｒ  Ｌｏｇエリアに表示する。また、図７の表示画面のメモリ異常の行の色を異常発生済みの色に変更する。
【００６９】
次に、別の実施形態について説明する。たとえば、ＰＬＣのメモリ状況を監視して表示する表示アプリケーションでは、複数の異常が同時に発生した場合、どの異常を優先的に処理するかなどについて規定し、この通り動作するかどうかを確認したい場合がある。このような場合、異常シミュレーションは、複数の異常を同時に発生させるようにすることも可能である。
【００７０】
複数の異常を同時に選択させるための画面イメージが図２１に、また複数の異常を同時に選択可能とするための処理が図２２，図２３、及び図２４のフローチャートに示されている。さらに、異常詳細情報設定ダイアログの画面イメージの一例を示す図が図２５に示されている。
【００７１】
同図２２に示されるように、処理が開始されると、先ずはじめに発生可能な異常の一覧表示上において、ユーザによる複数選択を受け付け（ステップ５０１）、選択された異常を発生させるユーザ指示を受け付ける（ステップ５０２）。ここでユーザによる異常発生の指示は、異常発生（Ｇｅｎｅｒａｔｅ  Ｅｒｒｏｒ）ボタンを実行することで行われる。異常発生指示が行われると異常発行処理が実行され（ステップ５０３）、次いで、全ての選択済み異常について異常発行処理が行われたかの判定が実行される（ステップ５０４）。全ての選択済み異常について異常発行処理が終了するまでステップ５０３〜５０４が繰り返され（ステップ５０４ＮＯ）、一覧にある選択済み異常について順番にエラー発行処理が実行される。全ての選択済み異常について異常発行処理が終了すると（ステップ５０４ＹＥＳ）、同図に示された処理は終了となる。なお、ステップ５０３に示された異常発行処理については、後段にて詳細に説明する。
【００７２】
異常発行処理の詳細を示すフローチャートが図２３，２４に示されている。処理が開始されると、先ずはじめに選択されたＥｒｒｏｒＣｏｎｔｒｏｌのタイプ判定が実行される（ステップ６０１）。タイプがＬｉｓｔであった場合には（ステップ６０１Ｌｉｓｔ）、選択した異常情報（異常名、異常フラグ、異常コードなど）とあわせて、Ｌｉｓｔの選択肢としてＥｒｒｏｒＡｄｄｒｅｓｓのＤｅｓｃｒｉｐｔｉｏｎを表示させた異常情報詳細設定ダイアログを表示してユーザにリストを選択させ（ステップ６０２、ステップ６０３）、ユーザの選択に対応したアドレスのフラグをＯｎにするようにシミュレーションエンジンＩＦに通知する（ステップ６０４）。一方、タイプがＳｐｉｎであった場合には（ステップ６０１Ｓｐｉｎ）、選択した異常情報（異常名、異常フラグ、異常コードなど）とあわせＥｒｒｏｒＡｄｄｒｅｓｓに対応したＳｐｉｎコントロールを表示させ、異常情報詳細設定ダイアログを表示し、Ｓｐｉｎコントロールの説明としてＤｅｓｃｒｉｐｔｉｏｎを表示させる（ステップ６０５）。次いでユーザに値を入力させ（ステップ６０６）、Ｓｐｉｎコントロールで入力された値をアドレスに対して書き込むようにシミュレーションエンジンＩＦに通知する（ステップ６０７）。また、タイプがＥｄｉｔであった場合には（ステップ６０１Ｅｄｉｔ）、選択した異常情報（異常名、異常フラグ、異常コードなど）とあわせてＥｒｒｏｒＡｄｄｒｅｓｓに対応したＥｄｉｔコントロールを表示した異常情報詳細設定ダイアログを表示し、Ｅｄｉｔコントロールの説明としてＤｅｓｃｒｉｐｔｉｏｎを表示させる（ステップ６０８）。次いでユーザに値を入力させ（ステップ６０９）、Ｅｄｉｔコントロールで入力された値をアドレスに対して書き込むようにシミュレーションエンジンＩＦに通知する（ステップ６１０）。
【００７３】
ステップ６０４，ステップ６０７，ステップ６１０のいずれかによるシミュレーションエンジンＩＦへの通知が終了すると、次にＥｒｒｏｒＣｏｄｅ＝０を異常メモリの異常コード格納エリアにセットするようにシミュレーションエンジンＩＦに通知を行い（ステップ６１１）、続いて、選択した異常に対応するＥｒｒｏｒＦｌａｇのアドレスに対応するフラグをＯｎにするようにシミュレーションエンジンＩＦに通知を行う（ステップ６１２）。次いで、選択された異常が実行されたことを示す異常履歴テーブルの該当異常欄に異常発生を記録し（ステップ６１３）、異常履歴テーブルにおいて異常発生を示す異常に対して表示色を変更することで（ステップ６１４）、図２３，２４に示された処理を終了する。
【００７４】
このように、異常を複数同時に選択する方法としてはいくつか考えられるが、図２１に示されるように、エラーごとにチェックボックスを用意し、エラーのチェックボックスがオンになっているものを異常発生の対象とする。
【００７５】
また、異常は図２１や図１１に示すように階層的にあらわすことができる。たとえば図１１ではＣＰＵ異常の中には運転停止異常（ＣＰＵ＿運転停止異常）と運転継続異常（ＣＰＵ＿運転継続異常）があり、さらに運転停止異常の中にメモリ異常、ＩＯバス異常、サイクルタイムオーバーなどがある。これらの異常を発生させる場合、ある異常グループをまとめて発生できるようにすることも可能である。
【００７６】
図２１において、“ＣＰＵ  Ｆａｔａｌ  ｈａｒｄｗａｒｅ  Ｅｒｒｏｒｓ”  の中には“Ｍｅｍｏｒｙ  Ｅｒｒｏｒ”  と“Ｉ／Ｏ  Ｂｕｓ  Ｅｒｒｏｒ”が存在する。このとき“Ｍｅｍｏｒｙ  Ｅｒｒｏｒ”と“Ｉ／Ｏ  Ｂｕｓ  Ｅｒｒｏｒ”の双方を発生させる場合“ＣＰＵ  Ｆａｔａｌ  ｈａｒｄｗａｒｅ  Ｅｒｒｏｒｓ”の前のチェックボックスを選択することで、“ＣＰＵ  Ｆａｔａｌ  ｈａｒｄｗａｒｅ  Ｅｒｒｏｒｓ”以下の全ての異常を選択することができる。
【００７７】
たとえば図２１において「ＣＰＵ  Ｆａｔａｌ  Ｅｒｒｏｒｓ」をユーザが選択した場合、選択した異常の子レベルの異常がいるかどうかを選択するため子レベル異常選択処理を実行する。ここでは最初の子レベル異常である、「ＣＰＵ  ｆａｔａｌ  ｈａｒｄｗａｒｅ  Ｅｒｒｏｒｓ」をチェック状態とする。次にこの選択した子レベルの異常に孫レベルの異常があるかどうかを調べるために再度子レベル異常選択処理を再帰的に実行する。これにより、「ＣＰＵ  ｆａｔａｌ  ｈａｒｄｗａｒｅ  Ｅｒｒｏｒｓ」の下のＭｅｍｏｒｙ  Ｅｒｒｏｒをチェック状態とする。そして、これには孫レベルがいないので、これと同レベルのＩ／Ｏ  Ｂｕｓ  Ｅｒｒｏｒを選択状態とする。そしてこれで同レベルの異常はないので、１つ上の「ＣＰＵ  ｆａｔａｌ  ｈａｒｄｗａｒｅ  Ｅｒｒｏｒｓ」のレベルに戻り、次の「ＣＰＵ  Ｆａｔａｌ  Ｕｓｅｒ  Ｄｅｆｉｎｅｄ  Ｅｒｒｏｒｓ  」のチェックを行う。そして、この孫レベル異常についても同様にチェックしていく。これにより「ＣＰＵ  Ｆａｔａｌ  Ｅｒｒｏｒｓ」以下の全ての異常を発生させることができる。
【００７８】
１つの異常グループを選択することで、係数の子レベルを同時に選択させる処理の概要を示すゼネラルフローチャートが図２６に示されている。処理が開始されると、ユーザがチェックボックスを選択することによって一覧より異常を発生させるグループの選択が行われ（ステップ７０１）、ここで選択されたグループについて子レベルの異常選択処理が実行される（ステップ７０２）。なお、子レベルの異常選択処理については、図２７にて詳細に説明する。
【００７９】
子レベル異常選択処理の詳細を示すフローチャートが図２７に示されている。処理が開始されると、先ずはじめに選択された異常に子レベルの異常があるか否かの判定が行われ（ステップ８０１）、子レベルの異常がなかった場合には（ステップ８０１ＮＯ）、当該処理は終了となる。一方、子レベルの異常が存在した場合には（ステップ８０１ＹＥＳ）、最初の子レベルの異常のチェックボックスの選択を行い（ステップ８０２）、選択した子レベル異常の孫レベル異常選択処理を実行する（ステップ８０３）。次いで、全ての子レベルの異常が選択されたかの判定が行われ（ステップ８０４）、選択されていない異常が存在した場合には次の子レベルのチェックボックスを選択し（ステップ８０４ＹＥＳ、ステップ８０５）、全ての子レベルの異常を選択するまで処理を繰り返す（ステップ８０３〜８０５）。全ての子レベルの異常を選択し終えた場合には（ステップ８０４ＹＥＳ）、同図に示された処理を終了する。
【産業上の利用可能性】
【００８０】
この発明に係るＰＬＣのシミュレーション装置によれば、そのＰＬＣが提供する異常メモリの仕様を容易に理解させることができると共に、専用の異常発生命令を使用する場合のように、ラダー図プログラム中に別途異常発生用の専用ロジックを組み込むことなく、所望する異常ビットの論理値を簡単な操作で異常相当値へと変化させることができ、それにより、デバックモードから稼働モードへの切換に際して、復旧処理の失念に起因する不測の誤動作の発生を危惧する必要もない、と言った格別の作用効果を有する。
【図面の簡単な説明】
【００８１】
【図１】本発明に係るＰＬＣのシミュレーション装置の機能構成図である。
【図２】本発明に係るＰＬＣのシミュレーション装置のハードウエア構成図である。
【図３】異常メモリの内容の一部を表にして示す図である。
【図４】機種別ＰＬＣ異常情報の一部をＸＭＬフォーマットで表現した例である。
【図５】機種別ＰＬＣ異常情報をＸＭＬフォーマットで表現する場合の項目を説明する例である。
【図６】異常履歴テーブルの内容を示す図である。
【図７】異常シミュレーション画面イメージの一例を示す図である。
【図８】異常シミュレーション一覧表示処理を示すフローチャートである。
【図９】仮想ＰＬＣの処理の概要を示すゼネラルフローチャートである。
【図１０】シミュレーションエンジンＩＦ処理の詳細を示すフローチャートである。
【図１１】エラー一覧画面イメージの一例を示す図（その１）である。
【図１２】エラー一覧を記述した機種別ＰＬＣ異常情報の一例を示すＸＭＬファイルを示す図（その１）である。
【図１３】エラー一覧画面イメージの一例を示す図（その２）である。
【図１４】エラー一覧を記述した機種別ＰＬＣ異常情報の一例を示すＸＭＬファイルを示す図（その２）である。
【図１５】異常の詳細設定の一例を示す図である。
【図１６】異常シミュレーションにおける異常発生処理を示すフローチャート（その１）である。
【図１７】異常シミュレーションにおける異常発生処理を示すフローチャート（その２）である。
【図１８】異常シミュレーションにおける異常復旧処理を示すフローチャート（その１）である。
【図１９】異常シミュレーションにおける異常復旧処理を示すフローチャート（その２）である。
【図２０】異常シミュレーション画面上における異常発生、復旧の表示イメージを示す図である。
【図２１】複数の異常を同時に選択させるための画面イメージを示す図である。
【図２２】複数の異常を同時に選択可能とするための処理の概要を示すゼネラルフローチャートである。
【図２３】異常発行処理の詳細を示すフローチャート（その１）である。
【図２４】異常発行処理の詳細を示すフローチャート（その２）である。
【図２５】異常詳細情報設定ダイアログの画面イメージの一例を示す図である。
【図２６】１つの異常グループを選択することで、複数の子レベルを同時に選択させる処理の概要を示すゼネラルフローチャートである。
【図２７】子レベル異常選択処理の詳細を示すフローチャートである。
【図２８】異常発生を検知するユーザプログラムの例である。
【図２９】異常を擬似的に発生させるユーザプログラムの例である。
【符号の説明】
【００８２】
１      ＰＬＣのシミュレーション装置
２      実ＰＬＣ
１１    ＯＳ
１２    通信ドライバ
１３    ツール・アプリケーション
１４    仮想ＰＬＣ
１５    エラーシミュレータ
１０１    演算部（ＣＰＵ）
１０２    ＲＯＭ／ＨＤＤ
１０３    ＲＡＭ
１０４    通信制御部
１０５    表示部
１３１    ＰＬＣ設計ツール
１３２    表示器設計ツール
１３３    ユーザアプリケーション
１４１    ＰＬＣ機種情報
１４２    ＰＬＣシミュレーションエンジン
１４３    仮想通信ユニット
１４５    シミュレーションエンジンＩＦ
１４４    ＰＬＣ仮想メモリエリア
１４４ａ  ユーザプログラム
１４４ｂ，１４４ｃ  メモリ
１４４ｄ  異常メモリ
１５１    異常履歴テーブル
１５２    異常履歴部
１５３    表示部
１５４    異常コントロール部
１５５    シミュレータＰＬＣ書き込み部
１５６    機種情報取り込み部
１５７    機種依存情報取り込み部
１５８    機種別ＰＬＣ異常情報
１５９    ユーザ定義異常情報
【図１】
2008293488.tif 000003
【図２】
2008293488.tif 000004
【図３】
2008293488.tif 000005
【図４】
2008293488.tif 000006
【図５】
2008293488.tif 000007
【図６】
2008293488.tif 000008
【図７】
2008293488.tif 000009
【図８】
2008293488.tif 000010
【図９】
2008293488.tif 000011
【図１０】
2008293488.tif 000012
【図１１】
2008293488.tif 000013
【図１２】
2008293488.tif 000014
【図１３】
2008293488.tif 000015
【図１４】
2008293488.tif 000016
【図１５】
2008293488.tif 000017
【図１６】
2008293488.tif 000018
【図１７】
2008293488.tif 000019
【図１８】
2008293488.tif 000020
【図１９】
2008293488.tif 000021
【図２０】
2008293488.tif 000022
【図２１】
2008293488.tif 000023
【図２２】
2008293488.tif 000024
【図２３】
2008293488.tif 000025
【図２４】
2008293488.tif 000026
【図２５】
2008293488.tif 000027
【図２６】
2008293488.tif 000028
【図２７】
2008293488.tif 000029
【図２８】
2008293488.tif 000030
【図２９】
2008293488.tif 000031