C言語によって記述された制御プログラムによって制御されるコントローラの制御プログラム開発支援装置であって、前記制御プログラムを実行するシミュレーション部と、前記コントローラがアクセスするユニットの入力信号、出力信号および記憶部の値の変動を模擬して記述するIOシナリオプログラムおよび前記IOシナリオプログラムの起動条件の設定を行うIOシナリオ設定プログラムを実行するIOシナリオ実行部と、を備え、前記シミュレーション部は、前記制御プログラムを実行し、前記ユニットにおける前記入力信号、前記出力信号および前記記憶部の値を模擬した、仮想入力信号、仮想出力信号および仮想記憶部を作り出すデバイスシミュレーション部と、前記デバイスシミュレーション部から出力される前記仮想入力信号、前記仮想出力信号および前記仮想記憶部の値の変動を設定条件に基づいて検出するトリガチェック機能部と、前記トリガチェック機能部での前記値の変動の検出により、前記設定条件に登録されたトリガアクションを起動するトリガアクション機能部と、を有し、前記トリガアクションは前記IOシナリオ実行部に通知され、前記IOシナリオ実行部は、前記トリガアクションの通知を受けて、前記IOシナリオプログラムに基づいて、前記デバイスシミュレーション部が模擬する前記仮想入力信号、前記仮想出力信号および前記仮想記憶部の値の、読み出しおよび書き込み動作を行う、制御プログラム開発支援装置。前記IOシナリオ実行部は、前記IOシナリオ設定プログラムを実行するIOシナリオ設定タスク部を有し、前記IOシナリオ設定タスク部は、前記IOシナリオプログラムを起動するトリガ条件と、前記IOシナリオプログラムを起動する前記トリガアクションを前記シミュレーション部のトリガ登録機能部に登録し、前記トリガ登録機能部は、前記トリガ条件を前記トリガチェック機能部に、前記トリガアクションを前記トリガアクション機能部に登録する、請求項1記載の制御プログラム開発支援装置。前記コントローラがアクセスする前記ユニットのデバイス定義ファイルから取得したデバイス定義情報および前記ユニットの構成情報に基づいて、前記IOシナリオプログラムおよび前記IOシナリオ設定プログラムを作成するIOシナリオプログラム生成部を備える、請求項1記載の制御プログラム開発支援装置。前記デバイス定義ファイルは、デバイスの情報を定義する実デバイス記述部と、通信機能を実現するための、通信手順を含む実通信内容を規定する実通信記述部と、デバイス機能を実現するための、入出力処理、パラメータ読み書き処理およびコマンド実行処理を含む実動作処理内容を規定する実ブロック記述部とを、含み、実通信記述部と前記実ブロック記述部とは、互いに独立して存在する、請求項3記載の制御プログラム開発支援装置。シミュレータを用いたプログラム開発では、シミュレータ上で実機と同じ制御プログラムが動作する必要があり、PLCユニットのアクセス結果は試験仕様通りの入出力動作が得られる必要がある。特許文献1では、PLCユニットに通信ロジックプログラムをインストールする必要があり、PLCユニットの一部のリソースを制御プログラムが使うことができなくなるという問題があった。また、特許文献2では、PLCユニットにおけるロジックプログラムが書き込めないエリアを異常テスト用に容易に書き換えることができるので、PLCユニットの異常テストを行うには都合が良いが、制御対象である半導体製造装置の異常テストでは、制御ロジックによる動作に対する一連の異常時の入出力動作は記述できないという問題があった。また、C言語コントローラでは、実機同様にC言語の制御プログラムからのPLCユニットの入力、出力、メモリ等のバッファの値の読み出し、書き込みを行う関数の呼び出しを提供する必要があるが、特許文献1および2では、このような要求に対応できていない。本発明は上記のような問題点を解消するためになされたもので、制御対象となる実機を用いることなく、制御プログラムのデバッグや動作確認が可能な制御プログラム開発支援装置を提供することを目的とする。本発明に係る制御プログラム開発支援装置の態様は、C言語によって記述された制御プログラムによって制御されるコントローラの制御プログラム開発支援装置であって、前記制御プログラムを実行するシミュレーション部と、前記コントローラがアクセスするユニットの入力信号、出力信号および記憶部の値の変動を模擬して記述する入出力シナリオプログラムIOシナリオプログラムおよび前記IOシナリオプログラムの起動条件の設定を行うIOシナリオ設定プログラムを実行するIOシナリオ実行部を備え、前記シミュレーション部は、前記制御プログラムを実行し、前記ユニットにおける前記入力信号、前記出力信号および前記記憶部の値を模擬した、仮想入力信号、仮想出力信号および仮想記憶部を作り出すデバイスシミュレーション部と、前記デバイスシミュレーション部から出力される前記仮想入力信号、前記仮想出力信号および前記仮想記憶部の値の変動を設定条件に基づいて検出するトリガチェック機能部と、前記トリガチェック機能部での前記値の変動の検出により、前記設定条件に登録されたトリガアクションを起動するトリガアクション機能部と、を有し、前記トリガアクションは前記IOシナリオ実行部に通知され、前記IOシナリオ実行部は、前記トリガアクションの通知を受けて、前記IOシナリオプログラムに基づいて、前記デバイスシミュレーション部が模擬する前記仮想入力信号、前記仮想出力信号および前記仮想記憶部の値の、読み出しおよび書き込み動作を行う。本発明に係る制御プログラム開発支援装置の態様によれば、制御プログラムを実行するシミュレーション部に、IOシナリオプログラムに記述された実機と同様の入出力動作や、試験仕様に基づいた入出力動作を制御プログラムを実行するシミュレーション部に提供することで、コントローラや、コントローラがアクセスするユニットや、当該ユニットの制御対象などの実機を用いることなく、実機同様の制御プログラムのデバッグや動作確認ができる。また、個々の試験仕様に基づいたIOシナリオプログラムを作成することで、制御プログラムの各試験仕様の動作試験を事前に行うことができ、実機で試験を行う際に、制御対象や設計に問題があるのか、制御プログラムに問題があるのかの判定を容易にできる。<実施の形態><装置構成>図1は、本発明に係る実施の形態の制御プログラム開発支援装置1およびC言語によって制御プログラムが記述されるコントローラユニット50を用いた制御システムの構成を示すブロック図である。図1に示すようにコントローラユニット50は、入出力ユニットIOユニット53aおよびインテリジェントユニット53bを用いて制御対象4aおよび4bを制御し、マスタユニット53cを用いて、フィールドネットワーク2に接続されたスレーブユニット3aおよび3bのそれぞれを介して、制御対象5aおよび5bを制御する。なお、スレーブユニット3aおよび3bを、それぞれ便宜的にスレーブユニット1および2と呼称する。コントローラユニット50は、制御プログラムタスク部51で制御プログラムを実行し、デバイスインタフェース52の関数呼び出しによって、IOユニット53a、インテリジェントユニット53bおよびマスタユニット53cのそれぞれから入力信号54a、54bおよび54cを受け、また、IOユニット53a、インテリジェントユニット53bおよびマスタユニット53cのそれぞれに対して出力信号55a、55bおよび55cを出力し、また、インテリジェントユニット53bおよびマスタユニット53cのそれぞれのバッファメモリ56bおよび56cに対して、データの読み出し、書き込みを行う。なお、入力信号54a、54bおよび54cは、それぞれ便宜的に入力信号1、2および3と呼称する。また、出力信号55a、55bおよび55cは、それぞれ便宜的に出力信号1、出力信号2および出力信号3と呼称する。バッファメモリ56bおよび56cを、それぞれ便宜的にバッファメモリ2および3と呼称する。制御プログラム開発支援装置1は、図1に示されるように、プログラミング部10、シミュレーション部20、IOシナリオ実行部30、IOシナリオプログラム生成部40、ユニット構成ツール42、ユニット構成ファイル43およびデバイス定義ファイル70を有している。プログラミング部10は、C言語やC言語で記述された制御プログラム11をプログラミングする部位であり、制御プログラム11をコントローラユニット50にダウンロードして制御プログラムタスク部51で制御プログラム11を実行する。シミュレーション部20は、実機であるコントローラユニット50と同様に、プログラミング部10から制御プログラム11をシミュレーション部20にダウンロードして、制御プログラムタスク部21で制御プログラム11を実行することができる。IOシナリオ実行部30は、コントローラユニット50からアクセスするIOユニット53a、インテリジェントユニット53bおよびマスタユニット53cのそれぞれにおける入力信号54a、54bおよび54c、出力信号55a、55bおよび55c、インテリジェントユニット53bおよびマスタユニット53cのそれぞれにおけるバッファメモリ56bおよび56cの値の変動を模擬したものを記述するIOシナリオプログラム12をプログラミング部10からダウンロードして、実行する。また、IOシナリオ実行部30は、IOシナリオプログラム12を起動する条件などの設定を行うIOシナリオ設定プログラム13をプログラミング部10からダウンロードして、実行する。IOシナリオプログラム生成部40は、制御システムを構成するIOユニット53a、インテリジェントユニット53b、マスタユニット53cおよびスレーブユニット3a、3bの各デバイス定義ファイル70から割付け情報を取得し、制御システムの構成を示すユニット構成ファイル43およびユニット構成ツール42からIOユニット53a、インテリジェントユニット53b、マスタユニット53c、およびスレーブユニット3aおよび3bの構成情報を取得して、各ユニットのIOシナリオプログラムを生成する。構成情報には、各ユニット53のユニット番号および入力信号54の先頭アドレス、出力信号55の先頭アドレス、バッファメモリ56の先頭アドレスと、スレーブユニット3のフィールドネットワーク2の局番などのネットワークアドレスが含まれる。図2は、フィールドネットワーク2のスレーブユニット3aおよび3bのそれぞれの、リモート入力81aおよび81b、リモート出力82aおよび82b、読出レジスタ83aおよび83b、書込レジスタ84aおよび84bの、マスタユニット53cのバッファメモリ56cへの割り付けの一例を示す図である。なお、リモート入力81aおよび81bを、それぞれ便宜的にリモート1および2と呼称し、リモート出力82aおよび82bを、それぞれ便宜的にリモート出力1および2と呼称し、読出レジスタ83aおよび83bを、それぞれ便宜的に読出レジスタ1および2と呼称し、書込レジスタ84aおよび84bを、それぞれ便宜的に書込レジスタ1および2と呼称する。上記において、マスタユニット53cは、スレーブユニット3aおよび3bの、それぞれのリモート入力81aおよび81bと、読出レジスタ83aおよび83bの値をバッファメモリ36cの割り付けられたエリアにコピーする。また、マスタユニット53cは、スレーブユニット3aおよび3bの、それぞれのリモート出力82aおよび82bと、書込レジスタ84aおよび84bに、バッファメモリ36cに割り付けられたエリアの値をコピーする。図3は、シミュレーシ部20およびIOシナリオ実行部30の構成を示すブロック図である。図3に示すように、IOシナリオ実行部30は、プログラミング部10からダウンロードされた複数のIOシナリオプログラム12を、それぞれ実行する複数のIOシナリオタスク部31と、プログラミング部10からダウンロードされたIOシナリオ設定プログラム13を実行するIOシナリオ設定タスク32部と、実機のデバイスインタフェース52を模擬した仮想デバイスインタフェース33と、シナリオインタフェース34と、デバイスアクセス通信部35と、トリガ通信部36と、トリガアクション実行部37と、トリガ設定部38とを有している。IOシナリオ実行部30では、プログラミング部10からダウンロードされた複数のIOシナリオプログラム12を、各IOシナリオプログラム12に対応した複数のIOシナリオタスク部31で実行する。また、プログラミング部10からダウンロードされたIOシナリオ設定プログラム13を、IOシナリオタスク部31とIOシナリオ設定タスク部32で実行する。なお、IOシナリオタスク部31およびIOシナリオ設定タスク部32の実際のOSオペレーションシステムへの実装は、1つのタスクやプロセスで実装するようにしても良いし、それぞれをOSのタスクやプロセスに割り付けて実装するようにしても良い。IOシナリオ設定タスク部32は、シナリオインタフェース34を呼び出して、各IOシナリオプログラム12のトリガアクションと、それを起動するトリガ条件をトリガ設定部38に設定する。トリガ設定部38は、IOシナリオプログラム12のトリガアクションを起動するトリガ条件を設定されると、トリガ通信部36およびシミュレーション部20のトリガ通信部28を通じて、シミュレーション部20のトリガ登録機能部26にトリガ条件とIOシナリオプログラム12を起動するトリガアクションを登録する。トリガ登録機能部26はトリガ条件とトリガアクションを登録されると、トリガ条件をトリガチェック機能部24に、トリガアクションをトリガアクション機能部25に登録する。シミュレーション部20は、プログラミング部10からダウンロードされた制御プログラム11を実行する制御プログラムタスク部21と、実機のデバイスインタフェース52を模擬した仮想デバイスインタフェース22と、実機のIOユニット53a、インテリジェントユニット53bおよびマスタユニット53cのそれぞれの入力信号54a、54bおよび54c、出力信号55a、55bおよび55cと、インテリジェントユニット53bおよびマスタユニット53cのそれぞれのバッファメモリ56bおよび56cを模擬するデバイスシミュレーション部23と、デバイスアクセス通信部27と、トリガ通信部28と、先に説明したトリガチェック機能部24と、トリガアクション機能部25と、トリガ登録機能部26とを有している。シミュレーション部20は、プログラミング部10からダウンロードされた制御プログラム11を制御プログラムタスク部21で実行する。制御プログラムタスク部21が仮想デバイスインタフェース22を呼び出し、実機であるIOユニット53a、インテリジェントユニット53bおよびマスタユニット53cが、入力信号54a、54bおよび54c、出力信号55a、55bおよび55cを入出力しようとする場合や、バッファメモリ56bおよび56cの読み出し、書き込みを行おうとする場合は、それらを模擬した、仮想入力信号23a、仮想出力信号23bおよび仮想バッファメモリ23cの値をデバイスシミュレーション部23から読み出す。デバイスシミュレーション部23の仮想入力信号23a、仮想出力信号23bおよび仮想バッファメモリ23cの値の変動を、トリガ登録機能部26に設定された条件に基づいてトリガチェック機能部24が検出する。トリガチェック機能部24が値の変動を検出すると、トリガ登録機能部26に設定されたトリガ条件と共に登録されたトリガアクションをトリガアクション機能部25が起動し、トリガ通信部28およびIOシナリオ実行部30のトリガ通信部36を通じて、IOシナリオ実行部30のトリガアクション実行部37に通知する。トリガアクションの通知を受けたトリガアクション実行部37は、IOシナリオ設定タスク部32によって設定された、IOシナリオプログラム12を実行するためのIOシナリオタスク部31のトリガアクションを起動する。IOシナリオタスク部31のトリガアクションは、IOシナリオプログラム12に基づいて、実機であるコントローラユニット50のデバイスインタフェース52を模擬した仮想デバイスインタフェース33を呼び出して、デバイスアクセス通信部35およびシミュレーション部20のデバイスアクセス通信部27を通じて、デバイスシミュレーション部23の仮想入力信号23a、仮想出力信号23bおよび仮想バッファメモリ23cの値の読み出し、書き込みを行う。これにより、IOシナリオプログラム12に記述された実機と同様のIO動作や、試験仕様に基づいたIO動作を制御プログラムタスク部21で動作する制御プログラム11に提供する。<動作>次に、以上説明した各部の機能に基づいて、制御プログラム開発支援装置1の全体的な動作について、図4に示すフローチャートを用いて説明する。まず、制御プログラム11を作成し、制御プログラム開発支援装置1のプログラミング部10にコンパイルするステップS1。ここで、制御プログラム開発支援装置1は、パーソナルコンピュータなどのコンピュータシステムにより実現され、プログラミング部10は、メモリ等の主記憶装置や、ハードディスク等の外部記憶装置によって構成され、シミュレーション部20、IOシナリオ実行部30、IOシナリオプログラム生成部40、ユニット構成ツール42などは中央処理装置CPU等の演算装置によって実現される。また、ユニット構成ファイル43やデバイス定義ファイル70は、主記憶装置や外部記憶装置に保存される。制御プログラム11は、制御プログラム開発支援装置1の外部で作成され、CFCompactFlashなどの記録媒体を介して、あるいはインターネットなどの通信媒体を介して制御プログラム開発支援装置1に与えられる。また、IOシナリオプログラム生成部40においてIOシナリオプログラム12とIOシナリオ設定プログラム13を作成し、プログラミング部10にコンパイルするステップS2。なお、ステップS1とS2の順番はどちらが先でも構わない。次に、シミュレーション部20を起動しステップS3、IOシナリオ実行部30を起動するステップS4。なお、シミュレーション部20、IOシナリオ実行部30の起動の順番はどちらが先でも構わない。次に、プログラミング部10からIOシナリオ実行部30にIOシナリオプログラム12をダウンロードしステップS5、IOシナリオ実行部30にIOシナリオ設定プログラム13をダウンロードし、IOシナリオ設定タスク部32で実行するステップS6。IOシナリオ設定プログラム13を実行すると、IOシナリオ設定タスク部32がシナリオインタフェース34を呼び出し、IOシナリオタスク部31を起動するトリガ条件を設定する。次に、プログラミング部10からシミュレーション部20に制御プログラム11をダウンロードし、制御プログラムタスク部21を実行すると制御プログラムタスクが実行され、シミュレーションが開始され、実機であるコントローラユニット50と同様に、当該制御プログラム11をデバッグすることができる。以上説明したように、制御プログラム開発支援装置1においては、IOシナリオプログラム12に記述された実機と同様のIO動作や、試験仕様に基づいたIO動作を、制御プログラムタスク部21で動作する制御プログラム11に提供することで、制御対象や実機であるコントローラユニット50、IOユニット53a、インテリジェントユニット53bおよびマスタユニット53cや、フィールドネットワーク2に接続された各スレーブユニットなどがなくても、実機に適用した場合と同様に制御プログラム11のデバッグや動作確認をすることができる。また、個々の試験仕様に基づいたIOシナリオプログラム12を作成することで、制御プログラム11の各試験仕様の動作試験を事前に行うことができ、実機で試験を行う際に、制御対象あるいは設計が間違っているのか、制御プログラム11が間違っているのかの判断が容易となる。また、IOシナリオ設定タスク部32で実行されるIOシナリオ設定プログラム13は、個々の試験仕様に基づいたIOシナリオプログラム12とそれを起動するトリガ条件を自由に設定できるため、個々の試験仕様の動作試験を効率的に実施することができる。<デバイス定義ファイルの構成>次に、図5を用いて、デバイス定義ファイル70の構造を規定する論理デバイスモデル60とデバイス定義ファイル70の構造との関係について説明する。図5のa部に示すように論理デバイスモデル60は、論理デバイスDevice記述部61と、論理通信CommIF記述部62と、論理ブロック記述部64とで構成されている。論理デバイスDevice記述部61は、デバイスの情報を定義する部位であり、論理デバイス記述部61にはデバイス識別情報を有したDeviceInfo記述部61aを備えている。論理通信CommIF記述部62は、通信インタフェースの情報を定義する部位であり、論理通信記述部62にはCommIFInfo記述部62a、CommOutput記述部62b、CommInput記述部62c、CommParameter記述部62d、CommCommand記述部62eおよびMethod記述部63を備えている。CommIFInfo記述部62aは、通信インタフェースの識別情報を有する部位であり、CommOutput記述部62bは通信インタフェースの出力情報を定義する部位である。CommInput記述部62cは、通信インタフェースの入力情報を定義する部位であり、CommParameter記述部62dは通信インタフェースの設定、モニタ、テストに関するパラメータの情報を定義する部位である。CommCommand記述部62eは、論理ブロックのコマンド情報を定義する部位であり、Method記述部63は、サイクリック通信における通信手順をMethodで定義する部位である。ここで、Methodとは、Method記述部63で示される各通信処理の情報ラベル名、分類、名称、呼出し、書込みレジスタ、書込み値、読出しレジスタ、読出し値、インターロック、ハンドシェイク、パラメータやコマンドへの参照を示し、これらを使って、レジスタの読み出し、書き込みを行うことで通信処理を行う。Method記述部63は、CommOutput記述部62b、CommInput記述部62c、CommParameter記述部62dおよびCommCommand記述部62e内の要素を参照する。一方、論理ブロック記述部64は、BlockInfo記述部64a、BlockInput記述部64b、BlockOutput記述部64c、BlockParameter記述部64dおよびBlockCommand記述部64eを備えており、デバイス機能を論理ブロック単位で定義する部位である。BlockInfo記述部64aは論理ブロックの識別情報を有する部位であり、BlockInput記述部64bおよびBlockOutput記述部64cは論理ブロックの入出力情報を定義する部位である。BlockParameter記述部64dは、論理ブロックの設定、モニタ、テストに関するパラメータの情報を定義する部位であり、BlockCommand記述部64eはブロックのコマンド情報を定義する部位である。CommOutput記述部62bはBlockInput記述部64bに対応し、BlockInput記述部64bを参照する。CommInput記述部62cはBlockOutput記述部64cに対応し、BlockOutput記述部64cを参照する。CommParameter記述部62dはBlockParameter記述部64dに対応し、BlockParameter記述部64dを参照する。CommCommand記述部62eはBlockCommand記述部64eに対応し、BlockCommand記述部64eを参照する。このような論理通信記述部62と論理ブロック記述部64との間の参照関係が割付け情報となる。ここで、割付けとは、制御機能を示す論理ブロック記述部64の構成要素と、通信機能を示す論理通信記述部62の構成要素との対応付けを意味している。割付けによって、制御機能を有する構成要素を通信機能を有する構成要素が示す入力や出力、レジスタのアドレスと対応付けすることが可能となる。図5のb部には、上述した論理デバイスモデル60によって実現されるデバイス定義ファイル70を示している。図5のb部に示すように、デバイス定義ファイル70は、実デバイス記述部71、実通信記述部72および実ブロック記述部74を備えている。実デバイス記述部71、実通信記述部72および実ブロック記述部74は、それぞれ論理デバイスモデル60の、論理デバイス記述部61、論理通信記述部62Method記述部63および論理ブロック記述部64に対応する。実デバイス記述部71は、DeviceInfo記述部71aを備えている。なお、DeviceInfo記述部71aは、論理デバイス記述部61のDeviceInfo記述部61aに対応する。実通信記述部72は、CommIFInfo記述部72a、CommOutput記述部72b、CommInput記述部72c、CommParameter記述部72d、CommCommand記述部72eおよびMethod記述部73を備えている。なお、各記述部71a~72eおよびMethod記述部73は、それぞれ論理デバイスモデル60の記述部62a~62eおよびMethod記述部63に対応する。実ブロック記述部実動作記述部74は、BlockInfo記述部74a、BlockInput記述部74b、BlockOutput記述部74c、BlockParameter記述部74dおよびBlockCommand記述部74eを備えている。各記述部74a~74eは、それぞれ論理ブロック記述部64の記述部64a~64eに対応する。次に、図6~図14を用いて、アナログデジタル変換器を対象デバイスとした場合のデバイス定義ファイル70の具体例について説明する。図6は、実デバイス記述部71におけるDeviceInfo記述部71aの記述の実例を表形式で示す図である。実デバイス記述部71は、デバイス定義の情報を管理するのに必要な情報を記述しており、図6に示すDeviceInfo記述部71aには、製品を識別するための製品識別情報メーカ名、メーカコード、形名、プロダクトID、デバイスタイプID、製品バージョン等が記述され、それぞれの情報に対して、ラベル名、分類、名称、値等が記述されている。図7は、実通信記述部72におけるCommIFInfo記述部72aの記述の実例を表形式で示す図である。実通信記述部72は、通信インタフェースの情報を定義する部位であり、図7に示すCommIFInfo記述部72aには、対象デバイスがどのような通信インタフェースを使用しているかを識別するための通信インタフェース識別情報メーカ名、メーカコード、通信インタフェースID、通信インタフェースタイプID、バージョン等および、通信ネットワークの仕様に合わせて決める必要のある通信ネットワークの仕様情報局タイプ、占有局、拡張設定、デバイスタイプ、プロトコルバージョン等が記述され、それぞれの情報に対して、ラベル名、分類、名称、値等が記述されている。図8は、実通信記述部72におけるCommOutput記述部72bの記述の実例を表形式で示す図である。図8に示すCommOutput記述部72bには、通信インタフェースの各入力と各出力の内容や設定の情報および割付け情報が、ラベル名、分類、名称、データ型、初期値、設定範囲、単位、割付アドレス、ブロックの入力や出力への参照などの項目で分類して記述されている。図8において、電圧/電流選択は、値が1の場合に電圧を選択し、0の場合に電流を選択する構成を示し、CH1AD変換許可禁止指定は、値が1の場合には変換を許可し、値が0の場合には変換を禁止する構成を示している。なお、BOOLとは、1および0の値をとるデータタイプを表している。また、割付け情報において、RY1は、リモート出力RYのアドレスが1番目であることを示している。また、RWw6.0は、リモートワード書込みレジスタRWwのアドレスが6番目の0ビット目を示す。図9は、実通信記述部72におけるCommInput記述部72cの実例を表形式で示す図である。図9に示すCommInput記述部72cには、通信インタフェースの各入力と各出力の内容や設定の情報および割付け情報が、ラベル名、分類、名称、データ型、初期値、設定範囲、単位、割付アドレス、ブロックの入力や出力への参照などの項目で分類して記述されている。図9において、データ型のINT16は、16ビット長の整数データタイプであることを示し、割付けのRX1は、リモート入力RXのアドレスの1番目に割り付けられることを示し、RWr0は、リモートワード読出しレジスタRWrのアドレスの0番目に割り付けられることを示している。図10は、実通信記述部72におけるCommParameter記述部72dの実例を表形式で示す図である。図10に示すCommParameter記述部72dには、通信インタフェースの設定、モニタ、テストに関する各パラメータの情報の情報が、ラベル名、分類、名称、データ型、初期値、設定範囲、単位、RW属性、割付アドレス、ブロックのパラメータへの参照などの項目で分類して記述されている。図11は、実通信記述部72におけるCommCommand記述部72e1の実例を表形式で示す図である。図11に示すCommCommand記述部72e1には、通信インタフェースのコマンド情報が、ラベル名、分類、名称、コマンドパラメータ、ブロックのコマンドへの参照などの項目で分類して記述されている。図12は、実通信記述部72におけるCommandPrm記述部72e2の実例を表形式で示す図である。図12に示すCommandPrm記述部72e2には、コマンド表のコマンドパラメータで指定されたラベル名に対応するコマンドの引数情報が、ラベル名、分類、名称、データ型、初期値、設定範囲、RW属性、単位、割付アドレスおよび参照などの項目で分類して記述されている。なお、実通信記述部72におけるCommCommand記述部72eは、上述したCommCommand記述部72e1およびCommandPrm記述部72e2を有している。図13は、実通信記述部72におけるMethod記述部73の実例を表形式で示す図である。図13に示すMethod記述部73には、各通信処理の情報がラベル名、分類、名称、呼出し、書込みレジスタ、書込み値、読出しレジスタ、読出し値、インターロック、ハンドシェイク、パラメータやコマンドへの参照などの項目で分類して記述されている。なお、CommInput記述部72c、CommParameter記述部72dおよびMethod記述部73の各参照欄に記述された情報が、割付け情報となる。図14は、実ブロック記述部74におけるBlockInfo記述部74a、BlockInput記述部74b、BlockOutput記述部74cおよびBlockParameter記述部74dのそれぞれの実例を表形式で示す図であり、デバイス機能情報を通信方式に依存しない形式で定義している。ここで、通信方式とは、通信機能CommIFが示す通信プロトコルや通信手順を示している。なお、図14に示す実ブロック記述部74の実例では、チャンネル番号がCH1を例に採って示しており、実際には他のチャンネルCH2、CH3およびCH4の実ブロック記述部74も定義されているが、図14ではチャンネルCH1についてのみ示している。図14に示すBlockInfo記述部74aには、ブロックを識別するためのブロック識別情報メーカ名、メーカコード、ブロックID、ブロックタイプID、バージョン等が記述され、それぞれの情報に対して、ラベル名、分類、名称、値等が記述されている。図14に示すBlockInput記述部74bおよびBlockOutput記述部74cには、ブロックの各入力と各出力の情報が、ラベル名、分類、名称、データ型、初期値、設定範囲、単位などの項目で分類して記述されている。図14に示すBlockParameter記述部74dには、ブロックの設定、モニタ、テストに関するパラメータ情報が、ラベル名、分類、名称、データ型、初期値、設定範囲、単位、RW属性などの項目で分類して記述されている。ここで、RW属性とは、読み出し、書き込みの属性を示し、ここがRWの場合は、読み出し、書き込みが可能なことを意味し、Rの場合は、読み出し専用、Wの場合は、書き込み専用であることを意味する。なお、BlockCommand記述部74eの記述例については図14には図示していないが、ブロックのコマンドの情報が、ラベル名、分類、名称、コマンドパラメータ、ブロックのコマンドへの参照などの項目で分類して記述されている。<IOシナリオ設定プログラムおよびシナリオプログラムの構成>次に、図15を用いて、IOシナリオ設定プログラム13およびIOシナリオプログラム12の構成について説明する。図15は、IOシナリオプログラム生成部40で生成されるIOシナリオ設定プログラム13と、IOシナリオプログラム12の構成例を示すブロック図である。図15に示すように、IOシナリオ設定プログラム13は、CommOutputMethod登録13a、CommInputMethod登録13b、GetParameterMethod登録13c、SetParameterMethod登録13dおよびInitializeMethod登録13eの5つのMethod登録を有している。また、IOシナリオプログラム12は、CommOutputMethod処理12a、CommInputMethod処理12b、GetParameterMethod処理12c、SetParameterMethod処理12dおよびInitializeMethod処理12eの5つのMethod処理と、BlockInput処理14a、BlockOutput処理14b、BlockParameter処理14cおよび14dのBlock処理と、Block動作シナリオプログラム15を有している。IOシナリオプログラム12のBlock処理14a~14dは、デバイス定義ファイル70の、BlockInput記述部74b、BlockOutput記述部74cおよびBlockParameter記述部74dの記述内容から生成されるBlock処理のプログラムである。なお、IOシナリオプログラム12には、BlockCommand記述部74eの記述内容から生成されるBlock処理のプログラムを有する場合もある。IOシナリオプログラム12のBlock動作シナリオプログラム15は、制御対象4a、4b、5aおよび5bのIO動作仕様に基づいて、プログラマーの手で作成され追記されたBlockOutput処理14bとBlockInput処理14aとの間の連動シナリオプログラムである。Method登録13a~13eは、デバイス定義ファイル70のMethod記述部73図13に記述された5つのMethodCommOutput、CommInput、GetParameter、SetParameter、Initializeのそれぞれのハンドシェイク項目の要求条件図13中の<要求>に対応する条件をトリガ条件に、IOシナリオプログラム12の各Method処理12a~12eをトリガアクションで起動するようにシナリオインタフェース34図3で設定するプログラムである。IOシナリオプログラム12のトリガアクションで起動するように登録されたMethod処理12a~12eは、仮想デバイスインタフェース33図3を呼び出してシミュレーション部20図3内のデバイスシミュレーション部23の仮想入力信号23a、仮想出力信号23bおよび仮想バッファメモリ23cの値の読み出し、書き込みを行う。IOシナリオプログラム生成部40は、対応するユニットのデバイス定義ファイル70のMethod記述部73の情報と、対応するユニットのユニット構成ファイル43およびユニット構成ツール42から構成情報を取得し、コントローラユニット50のデバイス割付に対応する入力信号54、出力信号55、バッファメモリ56への割り付けを行って、そのアドレスを使って仮想デバイスインタフェース33を呼び出して、対応するデバイスシミュレーション部23の仮想入力信号23a、仮想出力信号23bおよび仮想バッファメモリ23cの読み出し、書き込みを行うMethod処理のIOシナリオプログラム12を生成する。以上の動作によって、デバイス定義ファイル70のMethod記述部73に記述された各Methodの書込みレジスタの項目で示された仮想入力信号23a、仮想出力信号23bおよび仮想バッファメモリ23の値を読み出して、IOシナリオプログラム12のBlockInput処理14a、BlockOutput処理14b、BlockParameter処理14cおよび14dに渡し、その結果をデバイス定義ファイル70のMethod記述部73に記述された5つのMethodCommOutput、CommInput、GetParameter、SetParameter、Initializeのそれぞれの読出しレジスタの項目に書き込む。また、正常終了の場合は、ハンドシェイク項目の完了図13中の<完了>に対応で示された値を、異常終了の場合はハンドシェイク項目の異常図13中の<異常>に対応で示された値を仮想入力信号23a、仮想出力信号23bおよび仮想バッファメモリ23cに書き込む。以上説明したように、実ブロック記述部74は、デバイス機能を実現するための、入出力処理、パラメータ読み書き処理およびコマンド実行処理を含む実動作処理内容を規定している。一方、実通信記述部72は、通信機能を実現するための、通信手順を含む実通信内容を規定している。また、IOユニット53a、インテリジェントユニット53b、マスタユニット53c、スレーブユニット3aおよび3bのデバイス定義ファイル70として、実動作記述部である実ブロック記述部74と実通信記述部である実通信記述部72とが互いに独立して記述されている。このため、論理デバイスモデルによってデバイス定義ファイルのデバイス機能実動作機能と通信機能実通信機能を独立して記述することができ、デバイス機能実動作機能はユニットの制御順を記述でき、通信機能実通信機能はIOユニットやインテリジェントユニットやマスタユニット、スレーブユニット固有の通信手順を記述することができ、IOシナリオプログラムを容易に作成することができる。またIOユニット53a、インテリジェントユニット53b、マスタユニット53c、スレーブユニット3aおよび3bの入力信号54a~54c、出力信号55a~55c、バッファメモリ56bおよび56cの動作を記述するIOシナリオ設定プログラム13とIOシナリオプログラム12を生成することができ、制御プログラム11の開発のためのシミュレーション準備を効率的に行うことができる。