"I/O処理によって周辺装置の動作を制御する制御プログラムを実行するコントローラにおいて、前記制御プログラムはI/O処理要求をI/Oアクセス検出部に通知する手段を内部に有し、周辺装置単位に構成されて周辺装置の応答を模擬する模擬応答プログラムと対応して実I/Oから仮想I/Oへ切り替える仮想I/O情報を保持する模擬応答I/O情報テーブルと、前記模擬応答I/O情報テーブルに保持されている前記仮想I/O情報を用いて前記制御プログラムのI/O処理要求を実I/Oとして処理するか仮想I/Oとして処理するかを判定し、かつ要求されたI/O処理の結果が前記模擬応答プログラムの実行条件を満たすかを判定するI/Oアクセス検出部と、前記I/Oアクセス検出部の判定結果に従って実I/Oと仮想I/Oとを切り替えてI/O処理を実行するI/Oアクセス経路制御部とを備えたことを特徴とするコントローラ。実I/O領域と仮想I/O領域とをさらに備え、前記I/Oアクセス経路制御部が、前記I/Oアクセス検出部の判定結果に従って実I/O処理時は前記コントローラと周辺装置との間のI/O処理を中継する前記実I/O領域に対するI/O処理を実行する一方、仮想I/O処理時は前記仮想I/O領域に対するI/O処理を実行し、前記I/Oアクセス検出部により前記仮想I/Oの処理結果が前記模擬応答プログラムの実行条件を満たすと判定された場合は前記模擬応答プログラムを呼び出して対象となる周辺装置の応答を模擬実行することを特徴とする請求項1記載のコントローラ。前記模擬応答I/O情報テーブルと前記仮想I/O領域とを主記憶装置の一部に配置したことを特徴とする請求項2記載のコントローラ。制御プログラムのI/O処理の動作検証は、1I/O処理をシミュレーション実行できる手段を用いて制御プログラムのI/O処理の結果を確認した後、2制御プログラムをコントローラで実行してI/O処理の結果を確認する、という2段階で実施されることが望ましい。1を実施する理由は、周辺装置を実際に動作させる前に制御プログラムのI/O処理の不具合を発見して制御プログラムを修正することによって、周辺装置の破損や誤動作を未然に防ぐためである。また、2を実施する理由は、周辺装置のa単動動作の検証、b連動動作の検証、c動作タイミングの調整、の3項目を実施するためである。単動動作とは、周辺装置の単一動作のことを意味する。例えば、アームが取り付けられたワーク配給装置において、アームを前後方向のみ動かす動作や、上下方向のみ動かす動作を指す。また、連動動作とは、周辺装置の単動動作の組合せで実現される動作のことを意味する。例えば、前述のワーク配給装置において、アームを前後方向と上下方向に動かしてワークを所望の位置に配置する動作を指す。このような前提において、従来のように、ユーティリティプログラムを用いて手動操作で制御プログラムのI/O処理を動作検証する方法では、例えば、ワーク配給装置に対してワーク投入を指示する入力信号を、ユーティリティプログラムを用いて手動で操作することにより、このワーク投入を指示する信号と対応して、ワーク配給装置の動作を制御するための制御プログラムのI/O処理が正しく動作するかを検証することになる。この際、動作検証の作業者は、周辺装置に対する出力信号線や周辺装置からの入力信号線がコントローラの何番目のI/O接点と接続されているか、というコントローラと周辺装置との接続構成を事前に把握しておく必要がある。このため、周辺装置を単動動作、あるいは連動動作させて制御プログラムのI/O処理を動作検証する場合、大型装置のようにI/O接続線数が多いと作業者の手動操作を必要とするI/Oが増加することになり、効率よくI/O処理の動作検証を行うことができない、という課題があった。また、特許文献1のような従来のI/O処理の動作検証方法においては、プログラムをシミュレーションモードで実行させた場合は、パソコン上でI/O処理を模擬実行してプログラムの動作検証を行い、シミュレーションモードでない場合は、プログラマブルコントローラとコマンド通信を行って実際にI/O処理を実行させてプログラムの動作検証を行う。すなわち、シミュレーションモードか否かに基づいて、I/O処理を一括して模擬実行するか周辺装置に対して実際にI/O処理を実行するかを切り替えている。しかしながら、装置全体のI/O処理を一括してシミュレーションモードにより模擬実行するか、一括して実際のモードに切り替えてプログラムのI/O処理を動作検証するため、個々の周辺装置単位にプログラムのI/O処理を動作検証することができない、という課題があった。この発明は、上記のような課題を解決するためになされたものであり、制御プログラムのI/O処理をコントローラと周辺装置との間で実際に処理する実I/Oと、I/O処理を仮想実行する仮想I/Oとを、周辺装置単位に切り替えて制御プログラムのI/O処理の動作検証を実施できるコントローラを得ることを目的とする。上記目的を達成するため、この発明は、I/O処理によって周辺装置の動作を制御する制御プログラムを実行するコントローラにおいて、前記制御プログラムはI/O処理要求をI/Oアクセス検出部に通知する手段を内部に有し、周辺装置単位に構成されて周辺装置の応答を模擬する模擬応答プログラムと対応して実I/Oから仮想I/Oへ切り替える仮想I/O情報を保持する模擬応答I/O情報テーブルと、前記模擬応答I/O情報テーブルに保持されている前記仮想I/O情報を用いて前記制御プログラムのI/O処理要求を実I/Oとして処理するか仮想I/Oとして処理するかを判定し、かつ要求されたI/O処理の結果が前記模擬応答プログラムの実行条件を満たすかを判定するI/Oアクセス検出部と、前記I/Oアクセス検出部の判定結果に従って実I/Oと仮想I/Oとを切り替えてI/O処理を実行するI/Oアクセス経路制御部とを備えたことを特徴とする。この発明のコントローラによれば、上記のように構成したので、制御プログラムのI/O処理をコントローラと周辺装置との間で実際に処理する実I/Oと、I/O処理を仮想実行する仮想I/Oとを、周辺装置単位に切り替えて制御プログラムのI/O処理の動作検証を実施することができる。また、単動動作や連動動作といった周辺装置を段階的に動作させて制御プログラムのI/O処理を動作検証できるという、従来では実現されていない効果を有する。以下、この発明の実施の形態について、図面を参照しながら詳細に説明する。実施の形態1.図1は、この発明の実施の形態1におけるコントローラの基本構成を示す図である。図1に示されているコントローラ1は、I/Oアクセス検出部4と、I/Oアクセス経路制御部5と、模擬応答I/O情報テーブル6と、実I/O領域71と、仮想I/O領域72と、を備え、制御プログラム2と、模擬応答プログラム3を実行する。制御プログラム2は、I/Oアクセス部21を含む。実I/O領域71と仮想I/O領域72は、制御プログラム2や模擬応答プログラム3からメモリ読み書きアクセスと同じ手段でI/O処理を実行できるように、メモリアドレス空間7の一部として構成される。すなわち、実I/O領域71に含まれる1つのメモリアドレスは、コントローラ1と周辺装置図示せずとの間のI/O接続線の1つが一意に特定されるように、メモリアドレス割当てが実施されている。制御プログラム2は、コントローラ1と周辺装置との間のI/O処理を制御するためのもので、プログラミング言語例えば、C言語を用いて作成される。また、I/Oアクセス部21は、制御プログラム2に含まれ、制御プログラム2によるI/O処理要求をI/Oアクセス検出部4を介して実行する手段を備えている。I/Oアクセス部21を制御プログラム2に含める方法は、制御プログラム2を作成したプログラミング言語で利用可能な方法例えば、C言語の場合は関数呼出しやマクロを用いればよく、本発明ではその実施形態を問わない。また、図1では、制御プログラム2が1つだけ示されているが、ユーザが所望の動作を得るために、制御プログラム2を1つ以上作成してコントローラ1で実行してもよい。模擬応答プログラム3は、制御プログラム2によって実行されるコントローラ1と周辺装置との間のI/O処理を模擬実行するためのもので、プログラミング言語例えば、C言語を用いて周辺装置単位に作成される。より具体的には、周辺装置として1つのワーク配給装置と、1つのワーク搬送装置がコントローラ1に接続される場合、ワーク配給装置のI/O処理を模擬実行する1つの模擬応答プログラムと、ワーク搬送装置のI/O処理を模擬実行する別の模擬応答プログラムが、それぞれ個別の模擬応答プログラム3として作成される。すなわち、図1では、模擬応答プログラム3が1つだけ示されているが、複数の周辺装置のI/O処理を周辺装置単位に模擬実行するために、模擬応答プログラム3が1つ以上作成されてコントローラ1で実行される。I/Oアクセス検出部4は、制御プログラム2または模擬応答プログラム3のI/O処理要求を受け、そのI/O処理を実I/Oとして処理するか、仮想I/Oとして処理するかを模擬応答I/O情報テーブル6に基づいて判定する。図2は、模擬応答I/O情報テーブル6の構成例を示す図である。I/Oアクセス検出部4は、模擬応答I/O情報テーブルの仮想I/Oリストをすべて参照し、要求されたI/Oが仮想I/Oリストに含まれている場合は、そのI/Oを仮想I/Oとして判定する。なお、図2に示した模擬応答I/O情報テーブル6の構成は一例であり、本発明の効果を制限しない限りこれ以外の構成であっても構わない。また、I/Oアクセス検出部4は、I/O処理が書込みアクセスであった場合、その書込みアクセスの処理結果によって模擬応答プログラム3の実行条件が成立するか否かを模擬応答I/O情報テーブル6に基づいて判定する。例えば、要求されたI/O処理がY100に対する書込みアクセスで、かつI/O処理の結果Y100が1であった場合、識別子がID000である模擬応答プログラム3の実行条件が成立したと判定する。I/Oアクセス経路制御部5は、I/Oアクセス検出部4の判定結果にしたがって、実I/Oの場合は、要求されたI/Oと対応する実I/O領域71のメモリアドレスを求めて実I/Oとして処理し、仮想I/Oの場合は、要求されたI/Oと対応する仮想I/O領域72のメモリアドレスを求めて仮想I/Oとして処理する。図3は、制御プログラム2のI/O処理を説明するためのフローチャートである。制御プログラム2の実行中に、I/O処理要求が発生するとステップST11、I/Oアクセス部21を介してI/Oアクセス検出部4にI/O処理要求が通知される。次に、I/Oアクセス検出部4が、制御プログラム2のI/O処理要求を実I/Oとして処理するか仮想I/Oとして処理するかを判定しステップST12、実I/Oであると判定された場合ステップST12のNOの場合は、I/Oアクセス経路制御部5が、要求されたI/O処理に対応する実I/O領域71のメモリアドレスを求める。一方、ステップST12において仮想I/Oであると判定された場合ステップST12のYESの場合は、I/Oアクセス経路制御部5が、要求されたI/O処理に対応する仮想I/O領域72のメモリアドレスを求める。そして、ステップST13またはステップST14で求めたメモリアドレスに対して読出しアクセスまたは書込みアクセスのI/O処理を実行するステップST15。すなわち、制御プログラム2のI/O処理要求が読出しアクセスであった場合は、ステップST13またはステップST14で求めたメモリアドレスに対して読出しアクセスを実行し、制御プログラム2のI/O処理要求が書込みアクセスであった場合は、ステップST13またはステップST14で求めたメモリアドレスに対して書込みアクセスを実行する。次に、I/Oアクセス検出部4はステップST15の処理が書込みアクセスか読出しアクセスかを判定しステップST16、読出しアクセスの場合ステップST16のNOの場合は、読出しアクセスの結果を制御プログラム2へ渡しステップST17、I/O処理を完了する。一方、書込みアクセスの場合ステップST16のYESの場合は、さらにステップST15の処理が仮想I/Oアクセスかを判定しステップST18、実I/Oである場合ステップST18のNOの場合は、I/O処理を完了する。また、ステップST18において仮想I/Oであると判定された場合ステップST18のYESの場合は、後述する図4に示したフローチャートへ進む。図4は、模擬応答プログラム3の処理を説明するためのフローチャートである。図3のステップST16でI/O処理が書込みアクセスであった場合、かつ、ステップST15の処理が仮想I/Oアクセスであった場合、I/Oアクセス検出部4は模擬応答プログラム3の実行条件が成立したか否かを判定するステップST21。そして、条件成立の場合ステップST21のYESの場合は、I/Oアクセス経路制御部5が、条件成立した模擬応答プログラム3を呼び出しステップST22、呼び出された模擬応答プログラム3の実行結果に基づいて、仮想I/O領域72のメモリアドレスを求め、このメモリアドレスに対してステップST22で呼び出された模擬応答プログラム3の実行結果を書き込みステップST23、模擬応答プログラム3の処理を完了する。また、ステップST21において条件が成立していない場合ステップST21のNOの場合にも、模擬応答プログラム3の処理を完了する。このようにして、この模擬応答プログラム3に対応する周辺装置についてのみ、仮想I/Oに切り替えてI/O処理を実行することができるのである。この実施の形態1に係るコントローラにより、周辺装置ごとに実I/Oと仮想I/Oとを切り替えて制御プログラムのI/O処理を実行する具体例について説明する。一般に、大型装置においては多数の周辺装置がコントローラに接続されているが、ここでは便宜上、周辺装置としてワーク配給装置とワーク搬送装置の2つの装置がコントローラに接続されてI/O処理の制御が行われているものとし、ワーク配給装置の模擬応答プログラムを3a、ワーク搬送装置の模擬応答プログラムを3bとして説明する。通常、何らかの不具合が発見された場合や、製品の改良、バージョンアップ等の理由により、制御プログラムの修正や変更が行われるが、ここでは、製品の改良のためにワーク配給装置に関する部分についてのみ制御プログラムが変更されたものとする。そこで、ワーク配給装置についてのみ実I/Oから仮想I/Oに切り替えて制御プログラムの動作をシミュレーションする。この際、I/Oアクセス検出部4が、模擬応答プログラム3aのI/O処理要求を受け、模擬応答I/O情報テーブル6に基づいて、要求されたI/Oが仮想I/Oリストに含まれていることを確認し、仮想I/Oと判定する。そして、模擬応答プログラム3aの実行条件が成立しているか否かを判定し、成立している場合には、I/Oアクセス経路制御部5が、模擬応答プログラム3aを呼び出してI/O処理の模擬実行を開始し、この実行結果に基づいて、仮想I/O領域72に対するI/O処理を実行する。このようにして、模擬応答プログラム3aに対応する周辺装置であるワーク配給装置についてのみ、仮想I/Oに切り替えてI/O処理を実行することができ、制御プログラムの変更が正しく行われたか否かが検証できる。なお、ここでは便宜上、ワーク配給装置についてのみ制御プログラムが変更されたものとして説明したが、例えば、すべての周辺装置に関する制御プログラムが変更された場合には、まずはワーク配給装置のみ仮想I/Oに切り替えて動作検証を行い、OKであれば、次にワーク配給装置は実I/Oに切り替えて、ワーク搬送装置のみ仮想I/Oに切り替えて試験を行う。このようにすれば、実行結果が正常でなかった場合に、どの周辺装置の制御プログラムに問題があるかがいち早くわかり、効率良く試験を実行することができる。また、この実施の形態1に係るコントローラにより、個別の周辺装置における単動動作および連動動作を試験する具体例について説明する。ここでは、周辺装置としてワーク配給装置を例に説明し、説明の便宜上、ワーク配給装置はワークを掴むハンド部分と、ハンド部分を移動させるアーム部分と、から構成され、1ハンド開き、2アーム押下げ、3ハンド閉じワーク捕獲、4アーム押上げ、5アーム前移動、6アーム押下げ、7ハンド開きワーク設置、8アーム押上げ、9ハンド閉じ、10アーム後移動、の10個の単動動作を、この順序で実行するものとする。制御プログラムは、ワーク配給装置との間でI/O処理を行うことによって、ハンド部分やアーム部分を駆動するアクチュエータの動作を制御する。すなわち、単動動作試験では、前述の1~10について、制御プログラムによるI/O処理に従ってハンド部分やアーム部分が所望の動作を得ているか否かを試験する。例えば、1,3を制御するI/Oのみ実I/Oとして設定し、それ以外を仮想I/Oとして設定する。この状態で制御プログラムを実行することによって、アーム部分を動作させることなくハンド部分の単動動作を検証できる。他の単動動作も、同様に仮想I/Oと実I/Oとを切り替えることによって個別に検証できる。上記の手順でワーク配給装置の単動動作試験を終えた後、次にハンド部分とアーム部分の連動動作試験を実施する。例えば、1,2,3,4を制御するI/Oを実I/Oとして設定し、それ以外を仮想I/Oとして設定する。この状態で制御プログラムを実行することによって、ハンド部分の開閉動作とアーム部分の上下動作の連動によってワークを捕獲する動作を検証できる。ワークを捕獲する動作の試験を終えたら、次に5を制御するI/Oを仮想I/Oから実I/Oに切り替えて制御プログラムを実行し、ワーク捕獲からアーム部分の前移動までの動作を検証できる。最終的に、1~10までの全I/Oを実I/Oとして設定して制御プログラムを動作させて、ワーク配給装置の一連の動作を検証することができる。また、この実施の形態1に係るコントローラによれば、模擬応答プログラムで意図的にエラー状態を発生させた場合に、制御プログラム側で正しくリカバリ処理が実行されることを確認することもできる。例えば、上記のワーク配給装置を例に説明すると、アーム前移動と対応する模擬応答プログラムにおいて、アームが所望の位置に達したことを通知する信号を仮想I/Oを介してコントローラに通知するものとする。そして、正常状態の試験を行う場合には、信号を仮想I/Oを介してコントローラに対して入力する模擬応答プログラムを登録し、制御プログラムを動作させて正常に処理が行われることを検証する。一方、異常状態の試験を行う場合には、信号をコントローラに対して入力しない模擬応答プログラムを登録し、リカバリ機能例えば、装置破壊を防ぐための緊急停止が動作するか否かを検証する。このように、装置破壊につながる試験を、実I/Oを使って実際に装置を動作させて行うことは困難であるが、この発明によれば、制御プログラムには変更を加えずに仮想I/Oに切り替えるだけで動作検証することができる。以上のように、この実施の形態1によれば、コントローラと周辺装置との間で実行されるI/O処理を制御する制御プログラムを実行するコントローラにおいて、周辺装置単位に構成されて当該周辺装置の応答を模擬する模擬応答プログラムと対応して実I/Oから仮想I/Oへ切り替える仮想I/O情報を保持する模擬応答I/O情報テーブルと、模擬応答I/O情報テーブルに保持されている仮想I/O情報に基づいて制御プログラムのI/O処理要求を実I/Oとして処理するか仮想I/Oとして処理するかを判定し、かつ要求されたI/O処理の結果が模擬応答プログラムの実行条件を満たすかを判定するI/Oアクセス検出部と、I/Oアクセス検出部の判定結果に従って実I/Oと仮想I/Oとを切り替えてI/O処理を実行するI/Oアクセス経路制御部とを備え、制御プログラムのI/O処理要求がI/Oアクセス検出部に通知されると、模擬応答I/O情報テーブルの仮想I/O情報に基づいて当該I/O処理要求を実I/Oとして処理するか仮想I/Oとして処理するかをI/Oアクセス検出部が判定し、I/Oアクセス経路制御部は、I/Oアクセス検出部の判定結果が実I/Oであった場合は実I/O領域に対してI/O処理を実行する一方、判定結果が仮想I/Oであった場合は仮想I/O領域に対してI/O処理を実行し、仮想I/Oの処理結果が模擬応答プログラムの実行条件を満たす場合は模擬応答プログラムを呼び出して周辺装置の応答を模擬実行するようにしたので、周辺装置単位に実I/Oと仮想I/Oと切り替えて制御プログラムのI/O処理を実行することができる。また、単動動作や連動動作といった周辺装置を段階的に動作させて制御プログラムのI/O処理を動作検証することができる。さらに、模擬応答プログラムで意図的にエラー状態を発生させた場合に、制御プログラム側でリカバリ処理が正しく実行されることを確認することもできる。実施の形態2.図5は、この発明の実施の形態2におけるコントローラ10の基本構成を示す図である。図1に示した実施の形態1のコントローラ1との違いは、実施の形態1における模擬応答I/O情報テーブル6と仮想I/O領域72が主記憶装置8に含まれるように配置されている点であり、これにより、実施の形態1のコントローラ1より簡素な構成となっている。なお、模擬応答I/O情報テーブル6と仮想I/O領域72の構成は実施の形態1における模擬応答I/O情報テーブル6と仮想I/O領域72と同様である。また、コントローラ10におけるその他の構成については実施の形態1と同様であるため、図1に示した構成と同一部分については同一符号を付してその説明を省略する。主記憶装置8は、制御プログラム2や模擬応答プログラム3を実行する際に、プログラムの変数などを格納するための作業メモリとして利用されるものである。さらに、主記憶装置8によって模擬応答I/O情報テーブル6と仮想I/O領域72が含まれるような構成であっても、図3と図4で示した処理手順で実I/Oと仮想I/Oとを切り替えて制御プログラムのI/O処理が実行される。すなわち、コントローラ10の構成であっても、実施の形態1のコントローラ1と同様のI/O処理が実現される。以上のように、この実施の形態2のコントローラによれば、実施の形態1と同様の効果に加え、コントローラの構成をより簡素化することができる。なお、本願発明はその発明の範囲内において、各実施の形態の自由な組み合わせ、あるいは各実施の形態の任意の構成要素の変形、もしくは各実施の形態において任意の構成要素の省略が可能である。"