(57)【特許請求の範囲】
【請求項１】
Ｃ言語によって記述された制御プログラムによって制御されるコントローラの制御プログラム開発支援装置であって、
前記制御プログラムを実行するシミュレーション部と、
前記コントローラがアクセスするユニットへの入力信号、前記ユニットからの出力信号および前記ユニットの記憶部の値の変動を模擬して記述するＩＯシナリオプログラムおよび前記ＩＯシナリオプログラムの起動条件の設定を行うＩＯシナリオ設定プログラムを実行するＩＯシナリオ実行部と、を備え、
前記シミュレーション部は、
前記制御プログラムを実行し、前記ユニットにおける前記入力信号、前記出力信号および前記記憶部の値を模擬した、仮想入力信号、仮想出力信号および仮想記憶部を作り出すデバイスシミュレーション部と、
前記デバイスシミュレーション部から出力される前記仮想入力信号、前記仮想出力信号および前記仮想記憶部の値の変動を設定条件に基づいて検出するトリガチェック機能部と、
前記トリガチェック機能部での前記値の変動の検出により、前記設定条件に登録されたトリガアクションを起動するトリガアクション機能部と、を有し、
前記トリガアクションは前記ＩＯシナリオ実行部に通知され、
前記ＩＯシナリオ実行部は、
前記トリガアクションの通知を受けて、前記ＩＯシナリオプログラムに基づいて、前記デバイスシミュレーション部が模擬する前記仮想入力信号、前記仮想出力信号および前記仮想記憶部の値を前記デバイスシミュレーション部から読み出し、また、前記ＩＯシナリオプログラムの動作結果の値を前記デバイスシミュレーション部の前記仮想入力信号、前記仮想出力信号および前記仮想記憶部に書き込む動作を行う、制御プログラム開発支援装置。
【請求項２】
前記ＩＯシナリオ実行部は、
前記ＩＯシナリオ設定プログラムを実行するＩＯシナリオ設定タスク部を有し、
前記ＩＯシナリオ設定タスク部は、
前記ＩＯシナリオプログラムを起動するトリガ条件と、前記ＩＯシナリオプログラムを起動する前記トリガアクションを前記シミュレーション部のトリガ登録機能部に登録し、
前記トリガ登録機能部は、
前記トリガ条件を前記トリガチェック機能部に、前記トリガアクションを前記トリガアクション機能部に登録する、請求項１記載の制御プログラム開発支援装置。
【請求項３】
前記コントローラがアクセスする前記ユニットのデバイス定義ファイルから取得したデバイス定義情報および前記ユニットの構成情報に基づいて、前記ＩＯシナリオプログラムおよび前記ＩＯシナリオ設定プログラムを作成するＩＯシナリオプログラム生成部を備える、請求項１記載の制御プログラム開発支援装置。
【請求項４】
前記デバイス定義ファイルは、
デバイスの情報を定義する実デバイス記述部と、
通信機能を実現するための、通信手順を含む実通信内容を規定する実通信記述部と、
デバイス機能を実現するための、入出力処理、パラメータ読み書き処理およびコマンド実行処理を含む実動作処理内容を規定する実ブロック記述部とを、含み、
実通信記述部と前記実ブロック記述部とは、互いに独立して存在する、請求項３記載の制御プログラム開発支援装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、Ｃ言語によって制御プログラムが記述されるコントローラの制御プログラム開発支援装置に関する。
【背景技術】
【０００２】
半導体製造装置のコントローラに使用する制御プログラムの開発においては、半導体製造装置そのものや、製造される製品が高価なこともあり、実機なしでの制御プログラムの開発やデバッグ、試験が求められている。そのため、制御プログラム開発支援装置には、半導体製造装置のコントローラや制御対象をシミュレーションする機能が要求される。
【０００３】
特許文献１では、デバッグ対象となるＰＬＣ（プログラマブル ロジック コントローラ）ユニットに接続された汎用ＰＣ（パーソナルコンピュータ）に構築されたＰＬＣデバッグ用プロセス機械シミュレータから、ＰＬＣユニットのプログラムエリアに書き込みを行い、ＰＬＣユニットの通信ロジックプログラムを用いて、汎用ＰＣに応答を返す構成を開示している。
【０００４】
特許文献２では、汎用ＰＣに構築されたＰＬＣシミュレータと開発支援ツールとの間で通信を行い、開発支援ツールから仮想ＰＬＣの通常は読み出し専用になっているエラーフラッグやエラーコードレジスタに書き込みを行う構成を採ることで、異常発生シミュレーション用の専用ロジックを不要とするシミュレーション装置を開示している。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００５−２８４５３３号公報
【特許文献２】特開２００８−２９３４８８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
シミュレータを用いたプログラム開発では、シミュレータ上で実機と同じ制御プログラムが動作する必要があり、ＰＬＣユニットのアクセス結果は試験仕様通りの入出力動作が得られる必要がある。
【０００７】
特許文献１では、ＰＬＣユニットに通信ロジックプログラムをインストールする必要があり、ＰＬＣユニットの一部のリソースを制御プログラムが使うことができなくなるという問題があった。
【０００８】
また、特許文献２では、ＰＬＣユニットにおけるロジックプログラムが書き込めないエリアを異常テスト用に容易に書き換えることができるので、ＰＬＣユニットの異常テストを行うには都合が良いが、制御対象である半導体製造装置の異常テストでは、制御ロジックによる動作に対する一連の異常時の入出力動作は記述できないという問題があった。
【０００９】
また、Ｃ言語コントローラでは、実機同様にＣ言語の制御プログラムからのＰＬＣユニットの入力、出力、メモリ等のバッファの値の読み出し、書き込みを行う関数の呼び出しを提供する必要があるが、特許文献１および２では、このような要求に対応できていない。
【００１０】
本発明は上記のような問題点を解消するためになされたもので、制御対象となる実機を用いることなく、制御プログラムのデバッグや動作確認が可能な制御プログラム開発支援装置を提供することを目的とする。
【課題を解決するための手段】
【００１１】
本発明に係る制御プログラム開発支援装置の態様は、Ｃ言語によって記述された制御プログラムによって制御されるコントローラの制御プログラム開発支援装置であって、前記制御プログラムを実行するシミュレーション部と、前記コントローラがアクセスするユニットへの入力信号、前記ユニットからの出力信号および前記ユニットの記憶部の値の変動を模擬して記述する入出力シナリオプログラム（ＩＯシナリオプログラム）および前記ＩＯシナリオプログラムの起動条件の設定を行うＩＯシナリオ設定プログラムを実行するＩＯシナリオ実行部を備え、前記シミュレーション部は、前記制御プログラムを実行し、前記ユニットにおける前記入力信号、前記出力信号および前記記憶部の値を模擬した、仮想入力信号、仮想出力信号および仮想記憶部を作り出すデバイスシミュレーション部と、前記デバイスシミュレーション部から出力される前記仮想入力信号、前記仮想出力信号および前記仮想記憶部の値の変動を設定条件に基づいて検出するトリガチェック機能部と、前記トリガチェック機能部での前記値の変動の検出により、前記設定条件に登録されたトリガアクションを起動するトリガアクション機能部と、を有し、前記トリガアクションは前記ＩＯシナリオ実行部に通知され、前記ＩＯシナリオ実行部は、前記トリガアクションの通知を受けて、前記ＩＯシナリオプログラムに基づいて、前記デバイスシミュレーション部が模擬する前記仮想入力信号、前記仮想出力信号および前記仮想記憶部の値を前記デバイスシミュレーション部から読み出し、また、前記ＩＯシナリオプログラムの動作結果の値を前記デバイスシミュレーション部の前記仮想入力信号、前記仮想出力信号および前記仮想記憶部に書き込む動作を行う。
【発明の効果】
【００１２】
本発明に係る制御プログラム開発支援装置の態様によれば、制御プログラムを実行するシミュレーション部に、ＩＯシナリオプログラムに記述された実機と同様の入出力動作や、試験仕様に基づいた入出力動作を制御プログラムを実行するシミュレーション部に提供することで、コントローラや、コントローラがアクセスするユニットや、当該ユニットの制御対象などの実機を用いることなく、実機同様の制御プログラムのデバッグや動作確認ができる。
【００１３】
また、個々の試験仕様に基づいたＩＯシナリオプログラムを作成することで、制御プログラムの各試験仕様の動作試験を事前に行うことができ、実機で試験を行う際に、制御対象や設計に問題があるのか、制御プログラムに問題があるのかの判定を容易にできる。
【図面の簡単な説明】
【００１４】
【図１】本発明に係る実施の形態の制御プログラム開発支援装置と制御システムの構成を示すブロック図である。
【図２】マスタユニットのバッファメモリの割り付けの例を示す図である。
【図３】本発明に係る実施の形態の制御プログラム開発支援装置のシミュレーション部とＩＯシナリオ実行部の構成を示すブロック図である。
【図４】本発明に係る実施の形態の制御プログラム開発支援装置の全体的な動作を示すフローチャートである。
【図５】論理デバイスモデルとデバイス定義ファイルの構造を示す図である。
【図６】実デバイス記述部におけるDeviceInfo記述部の実例を示す図である。
【図７】実通信記述部におけるCommIFInfo記述部の実例を示す図である。
【図８】実通信記述部におけるCommOutput記述部の実例を示す図である。
【図９】実通信記述部におけるCommInput記述部の実例を示す図である。
【図１０】実通信記述部におけるCommParameter記述部の実例を示す図である。
【図１１】実通信記述部におけるCommCommand記述部の実例を示す図である。
【図１２】実通信記述部におけるCommandPrm記述部の実例を示す図である。
【図１３】実通信記述部におけるMethod記述部の実例を示す図である。
【図１４】実ブロック記述部におけるBlockInfo記述部、BlockInput記述部、BlockOutput記述部およびBlockParameter記述部の実例を示す図である。
【図１５】ＩＯシナリオプログラム生成部が生成するＩＯシナリオ設定プログラムおよびＩＯシナリオプログラムの構造の例を示す図である。
【発明を実施するための形態】
【００１５】
＜実施の形態＞
＜装置構成＞
図１は、本発明に係る実施の形態の制御プログラム開発支援装置１およびＣ言語によって制御プログラムが記述されるコントローラユニット５０を用いた制御システムの構成を示すブロック図である。
【００１６】
図１に示すようにコントローラユニット５０は、入出力ユニット（ＩＯユニット）５３ａおよびインテリジェントユニット５３ｂを用いて制御対象４ａおよび４ｂを制御し、マスタユニット５３ｃを用いて、フィールドネットワーク２に接続されたスレーブユニット３ａおよび３ｂのそれぞれを介して、制御対象５ａおよび５ｂを制御する。なお、スレーブユニット３ａおよび３ｂを、それぞれ便宜的にスレーブユニット１および２と呼称する。
【００１７】
コントローラユニット５０は、制御プログラムタスク部５１で制御プログラムを実行し、デバイスインタフェース５２の関数呼び出しによって、ＩＯユニット５３ａ、インテリジェントユニット５３ｂおよびマスタユニット５３ｃのそれぞれから入力信号５４ａ、５４ｂおよび５４ｃを受け、また、ＩＯユニット５３ａ、インテリジェントユニット５３ｂおよびマスタユニット５３ｃのそれぞれに対して出力信号５５ａ、５５ｂおよび５５ｃを出力し、また、インテリジェントユニット５３ｂおよびマスタユニット５３ｃのそれぞれのバッファメモリ５６ｂおよび５６ｃに対して、データの読み出し、書き込みを行う。
【００１８】
なお、入力信号５４ａ、５４ｂおよび５４ｃは、それぞれ便宜的に入力信号１、２および３と呼称する。また、出力信号５５ａ、５５ｂおよび５５ｃは、それぞれ便宜的に出力信号１、出力信号２および出力信号３と呼称する。バッファメモリ５６ｂおよび５６ｃを、それぞれ便宜的にバッファメモリ２および３と呼称する。
【００１９】
制御プログラム開発支援装置１は、図１に示されるように、プログラミング部１０、シミュレーション部２０、ＩＯシナリオ実行部３０、ＩＯシナリオプログラム生成部４０、ユニット構成ツール４２、ユニット構成ファイル４３およびデバイス定義ファイル７０を有している。
【００２０】
プログラミング部１０は、Ｃ言語やＣ++言語で記述された制御プログラム１１をプログラミングする部位であり、制御プログラム１１をコントローラユニット５０にダウンロードして制御プログラムタスク部５１で制御プログラム１１を実行する。
【００２１】
シミュレーション部２０は、実機であるコントローラユニット５０と同様に、プログラミング部１０から制御プログラム１１をシミュレーション部２０にダウンロードして、制御プログラムタスク部２１で制御プログラム１１を実行することができる。
【００２２】
ＩＯシナリオ実行部３０は、コントローラユニット５０からアクセスするＩＯユニット５３ａ、インテリジェントユニット５３ｂおよびマスタユニット５３ｃのそれぞれにおける入力信号５４ａ、５４ｂおよび５４ｃ、出力信号５５ａ、５５ｂおよび５５ｃ、インテリジェントユニット５３ｂおよびマスタユニット５３ｃのそれぞれにおけるバッファメモリ５６ｂおよび５６ｃの値の変動を模擬したものを記述するＩＯシナリオプログラム１２をプログラミング部１０からダウンロードして、実行する。
【００２３】
また、ＩＯシナリオ実行部３０は、ＩＯシナリオプログラム１２を起動する条件などの設定を行うＩＯシナリオ設定プログラム１３をプログラミング部１０からダウンロードして、実行する。
【００２４】
ＩＯシナリオプログラム生成部４０は、制御システムを構成するＩＯユニット５３ａ、インテリジェントユニット５３ｂ、マスタユニット５３ｃおよびスレーブユニット３ａ、３ｂの各デバイス定義ファイル７０から割付け情報を取得し、制御システムの構成を示すユニット構成ファイル４３およびユニット構成ツール４２からＩＯユニット５３ａ、インテリジェントユニット５３ｂ、マスタユニット５３ｃ、およびスレーブユニット３ａおよび３ｂの構成情報を取得して、各ユニットのＩＯシナリオプログラムを生成する。構成情報には、各ユニット５３のユニット番号および入力信号５４の先頭アドレス、出力信号５５の先頭アドレス、バッファメモリ５６の先頭アドレスと、スレーブユニット３のフィールドネットワーク２の局番などのネットワークアドレスが含まれる。
【００２５】
図２は、フィールドネットワーク２のスレーブユニット３ａおよび３ｂのそれぞれの、リモート入力８１ａおよび８１ｂ、リモート出力８２ａおよび８２ｂ、読出レジスタ８３ａおよび８３ｂ、書込レジスタ８４ａおよび８４ｂの、マスタユニット５３ｃのバッファメモリ５６ｃへの割り付けの一例を示す図である。なお、リモート入力８１ａおよび８１ｂを、それぞれ便宜的にリモート１および２と呼称し、リモート出力８２ａおよび８２ｂを、それぞれ便宜的にリモート出力１および２と呼称し、読出レジスタ８３ａおよび８３ｂを、それぞれ便宜的に読出レジスタ１および２と呼称し、書込レジスタ８４ａおよび８４ｂを、それぞれ便宜的に書込レジスタ１および２と呼称する。
【００２６】
上記において、マスタユニット５３ｃは、スレーブユニット３ａおよび３ｂの、それぞれのリモート入力８１ａおよび８１ｂと、読出レジスタ８３ａおよび８３ｂの値をバッファメモリ３６ｃの割り付けられたエリアにコピーする。また、マスタユニット５３ｃは、スレーブユニット３ａおよび３ｂの、それぞれのリモート出力８２ａおよび８２ｂと、書込レジスタ８４ａおよび８４ｂに、バッファメモリ３６ｃに割り付けられたエリアの値をコピーする。
【００２７】
図３は、シミュレーシ部２０およびＩＯシナリオ実行部３０の構成を示すブロック図である。図３に示すように、ＩＯシナリオ実行部３０は、プログラミング部１０からダウンロードされた複数のＩＯシナリオプログラム１２を、それぞれ実行する複数のＩＯシナリオタスク部３１と、プログラミング部１０からダウンロードされたＩＯシナリオ設定プログラム１３を実行するＩＯシナリオ設定タスク３２部と、実機のデバイスインタフェース５２を模擬した仮想デバイスインタフェース３３と、シナリオインタフェース３４と、デバイスアクセス通信部３５と、トリガ通信部３６と、トリガアクション実行部３７と、トリガ設定部３８とを有している。
【００２８】
ＩＯシナリオ実行部３０では、プログラミング部１０からダウンロードされた複数のＩＯシナリオプログラム１２を、各ＩＯシナリオプログラム１２に対応した複数のＩＯシナリオタスク部３１で実行する。また、プログラミング部１０からダウンロードされたＩＯシナリオ設定プログラム１３を、ＩＯシナリオタスク部３１とＩＯシナリオ設定タスク部３２で実行する。
【００２９】
なお、ＩＯシナリオタスク部３１およびＩＯシナリオ設定タスク部３２の実際のＯＳ（オペレーションシステム）への実装は、１つのタスクやプロセスで実装するようにしても良いし、それぞれをＯＳのタスクやプロセスに割り付けて実装するようにしても良い。
【００３０】
ＩＯシナリオ設定タスク部３２は、シナリオインタフェース３４を呼び出して、各ＩＯシナリオプログラム１２のトリガアクションと、それを起動するトリガ条件をトリガ設定部３８に設定する。
【００３１】
トリガ設定部３８は、ＩＯシナリオプログラム１２のトリガアクションを起動するトリガ条件を設定されると、トリガ通信部３６およびシミュレーション部２０のトリガ通信部２８を通じて、シミュレーション部２０のトリガ登録機能部２６にトリガ条件とＩＯシナリオプログラム１２を起動するトリガアクションを登録する。
【００３２】
トリガ登録機能部２６はトリガ条件とトリガアクションを登録されると、トリガ条件をトリガチェック機能部２４に、トリガアクションをトリガアクション機能部２５に登録する。
【００３３】
シミュレーション部２０は、プログラミング部１０からダウンロードされた制御プログラム１１を実行する制御プログラムタスク部２１と、実機のデバイスインタフェース５２を模擬した仮想デバイスインタフェース２２と、実機のＩＯユニット５３ａ、インテリジェントユニット５３ｂおよびマスタユニット５３ｃのそれぞれの入力信号５４ａ、５４ｂおよび５４ｃ、出力信号５５ａ、５５ｂおよび５５ｃと、インテリジェントユニット５３ｂおよびマスタユニット５３ｃのそれぞれのバッファメモリ５６ｂおよび５６ｃを模擬するデバイスシミュレーション部２３と、デバイスアクセス通信部２７と、トリガ通信部２８と、先に説明したトリガチェック機能部２４と、トリガアクション機能部２５と、トリガ登録機能部２６とを有している。
【００３４】
シミュレーション部２０は、プログラミング部１０からダウンロードされた制御プログラム１１を制御プログラムタスク部２１で実行する。制御プログラムタスク部２１が仮想デバイスインタフェース２２を呼び出し、実機であるＩＯユニット５３ａ、インテリジェントユニット５３ｂおよびマスタユニット５３ｃが、入力信号５４ａ、５４ｂおよび５４ｃ、出力信号５５ａ、５５ｂおよび５５ｃを入出力しようとする場合や、バッファメモリ５６ｂおよび５６ｃの読み出し、書き込みを行おうとする場合は、それらを模擬した、仮想入力信号２３ａ、仮想出力信号２３ｂおよび仮想バッファメモリ２３ｃの値をデバイスシミュレーション部２３から読み出す。
【００３５】
デバイスシミュレーション部２３の仮想入力信号２３ａ、仮想出力信号２３ｂおよび仮想バッファメモリ２３ｃの値の変動を、トリガ登録機能部２６に設定された条件に基づいてトリガチェック機能部２４が検出する。トリガチェック機能部２４が値の変動を検出すると、トリガ登録機能部２６に設定されたトリガ条件と共に登録されたトリガアクションをトリガアクション機能部２５が起動し、トリガ通信部２８およびＩＯシナリオ実行部３０のトリガ通信部３６を通じて、ＩＯシナリオ実行部３０のトリガアクション実行部３７に通知する。
【００３６】
トリガアクションの通知を受けたトリガアクション実行部３７は、ＩＯシナリオ設定タスク部３２によって設定された、ＩＯシナリオプログラム１２を実行するためのＩＯシナリオタスク部３１のトリガアクションを起動する。
【００３７】
ＩＯシナリオタスク部３１のトリガアクションは、ＩＯシナリオプログラム１２に基づいて、実機であるコントローラユニット５０のデバイスインタフェース５２を模擬した仮想デバイスインタフェース３３を呼び出して、デバイスアクセス通信部３５およびシミュレーション部２０のデバイスアクセス通信部２７を通じて、デバイスシミュレーション部２３の仮想入力信号２３ａ、仮想出力信号２３ｂおよび仮想バッファメモリ２３ｃの値の読み出し、書き込みを行う。
【００３８】
これにより、ＩＯシナリオプログラム１２に記述された実機と同様のＩＯ動作や、試験仕様に基づいたＩＯ動作を制御プログラムタスク部２１で動作する制御プログラム１１に提供する。
【００３９】
＜動作＞
次に、以上説明した各部の機能に基づいて、制御プログラム開発支援装置１の全体的な動作について、図４に示すフローチャートを用いて説明する。
【００４０】
まず、制御プログラム１１を作成し、制御プログラム開発支援装置１のプログラミング部１０にコンパイルする（ステップＳ１）。ここで、制御プログラム開発支援装置１は、パーソナルコンピュータなどのコンピュータシステムにより実現され、プログラミング部１０は、メモリ等の主記憶装置や、ハードディスク等の外部記憶装置によって構成され、シミュレーション部２０、ＩＯシナリオ実行部３０、ＩＯシナリオプログラム生成部４０、ユニット構成ツール４２などは中央処理装置（ＣＰＵ）等の演算装置によって実現される。また、ユニット構成ファイル４３やデバイス定義ファイル７０は、主記憶装置や外部記憶装置に保存される。
【００４１】
制御プログラム１１は、制御プログラム開発支援装置１の外部で作成され、ＣＦ（Compact Flash）などの記録媒体を介して、あるいはインターネットなどの通信媒体を介して制御プログラム開発支援装置１に与えられる。
【００４２】
また、ＩＯシナリオプログラム生成部４０においてＩＯシナリオプログラム１２とＩＯシナリオ設定プログラム１３を作成し、プログラミング部１０にコンパイルする（ステップＳ２）。なお、ステップＳ１とＳ２の順番はどちらが先でも構わない。
【００４３】
次に、シミュレーション部２０を起動し（ステップＳ３）、ＩＯシナリオ実行部３０を起動する（ステップＳ４）。なお、シミュレーション部２０、ＩＯシナリオ実行部３０の起動の順番はどちらが先でも構わない。
【００４４】
次に、プログラミング部１０からＩＯシナリオ実行部３０にＩＯシナリオプログラム１２をダウンロードし（ステップＳ５）、ＩＯシナリオ実行部３０にＩＯシナリオ設定プログラム１３をダウンロードし、ＩＯシナリオ設定タスク部３２で実行する（ステップＳ６）。ＩＯシナリオ設定プログラム１３を実行すると、ＩＯシナリオ設定タスク部３２がシナリオインタフェース３４を呼び出し、ＩＯシナリオタスク部３１を起動するトリガ条件を設定する。
【００４５】
次に、プログラミング部１０からシミュレーション部２０に制御プログラム１１をダウンロードし、制御プログラムタスク部２１を実行すると制御プログラムタスクが実行され、シミュレーションが開始され、実機であるコントローラユニット５０と同様に、当該制御プログラム１１をデバッグすることができる。
【００４６】
以上説明したように、制御プログラム開発支援装置１においては、ＩＯシナリオプログラム１２に記述された実機と同様のＩＯ動作や、試験仕様に基づいたＩＯ動作を、制御プログラムタスク部２１で動作する制御プログラム１１に提供することで、制御対象や実機であるコントローラユニット５０、ＩＯユニット５３ａ、インテリジェントユニット５３ｂおよびマスタユニット５３ｃや、フィールドネットワーク２に接続された各スレーブユニットなどがなくても、実機に適用した場合と同様に制御プログラム１１のデバッグや動作確認をすることができる。
【００４７】
また、個々の試験仕様に基づいたＩＯシナリオプログラム１２を作成することで、制御プログラム１１の各試験仕様の動作試験を事前に行うことができ、実機で試験を行う際に、制御対象あるいは設計が間違っているのか、制御プログラム１１が間違っているのかの判断が容易となる。
【００４８】
また、ＩＯシナリオ設定タスク部３２で実行されるＩＯシナリオ設定プログラム１３は、個々の試験仕様に基づいたＩＯシナリオプログラム１２とそれを起動するトリガ条件を自由に設定できるため、個々の試験仕様の動作試験を効率的に実施することができる。
【００４９】
＜デバイス定義ファイルの構成＞
次に、図５を用いて、デバイス定義ファイル７０の構造を規定する論理デバイスモデル６０とデバイス定義ファイル７０の構造との関係について説明する。
【００５０】
図５の（ａ）部に示すように論理デバイスモデル６０は、論理デバイス（Device）記述部６１と、論理通信（CommIF）記述部６２と、論理ブロック記述部６４とで構成されている。
【００５１】
論理デバイス（Device）記述部６１は、デバイスの情報を定義する部位であり、論理デバイス記述部６１にはデバイス識別情報を有したDeviceInfo記述部６１ａを備えている。
【００５２】
論理通信（CommIF）記述部６２は、通信インタフェースの情報を定義する部位であり、論理通信記述部６２にはCommIFInfo記述部６２ａ、CommOutput記述部６２ｂ、CommInput記述部６２ｃ、CommParameter記述部６２ｄ、CommCommand記述部６２ｅおよびMethod記述部６３を備えている。
【００５３】
CommIFInfo記述部６２ａは、通信インタフェースの識別情報を有する部位であり、CommOutput記述部６２ｂは通信インタフェースの出力情報を定義する部位である。
【００５４】
CommInput記述部６２ｃは、通信インタフェースの入力情報を定義する部位であり、CommParameter記述部６２ｄは通信インタフェースの設定、モニタ、テストに関するパラメータの情報を定義する部位である。
【００５５】
CommCommand記述部６２ｅは、論理ブロックのコマンド情報を定義する部位であり、Method記述部６３は、サイクリック通信における通信手順をMethodで定義する部位である。
【００５６】
ここで、Methodとは、Method 記述部６３で示される各通信処理の情報（ラベル名、分類、名称、呼出し、書込みレジスタ、書込み値、読出しレジスタ、読出し値、インターロック、ハンドシェイク、パラメータやコマンドへの参照）を示し、これらを使って、レジスタの読み出し、書き込みを行うことで通信処理を行う。
【００５７】
Method記述部６３は、CommOutput記述部６２ｂ、CommInput記述部６２ｃ、CommParameter記述部６２ｄおよびCommCommand記述部６２ｅ内の要素を参照する。
【００５８】
一方、論理ブロック記述部６４は、BlockInfo記述部６４ａ、BlockInput記述部６４ｂ、BlockOutput記述部６４ｃ、BlockParameter記述部６４ｄおよびBlockCommand記述部６４ｅを備えており、デバイス機能を論理ブロック単位で定義する部位である。
【００５９】
BlockInfo記述部６４ａは論理ブロックの識別情報を有する部位であり、BlockInput記述部６４ｂおよびBlockOutput記述部６４ｃは論理ブロックの入出力情報を定義する部位である。
【００６０】
BlockParameter記述部６４ｄは、論理ブロックの設定、モニタ、テストに関するパラメータの情報を定義する部位であり、BlockCommand記述部６４ｅはブロックのコマンド情報を定義する部位である。
【００６１】
CommOutput記述部６２ｂはBlockInput記述部６４ｂに対応し、BlockInput記述部６４ｂを参照する。
【００６２】
CommInput記述部６２ｃはBlockOutput記述部６４ｃに対応し、BlockOutput記述部６４ｃを参照する。
【００６３】
CommParameter記述部６２ｄはBlockParameter記述部６４ｄに対応し、BlockParameter記述部６４ｄを参照する。
【００６４】
CommCommand記述部６２ｅはBlockCommand記述部６４ｅに対応し、BlockCommand記述部６４ｅを参照する。
【００６５】
このような論理通信記述部６２と論理ブロック記述部６４との間の参照関係が割付け情報となる。
【００６６】
ここで、「割付け」とは、制御機能を示す論理ブロック記述部６４の構成要素と、通信機能を示す論理通信記述部６２の構成要素との対応付けを意味している。「割付け」によって、制御機能を有する構成要素を通信機能を有する構成要素が示す入力や出力、レジスタのアドレスと対応付けすることが可能となる。
【００６７】
図５の（ｂ）部には、上述した論理デバイスモデル６０によって実現されるデバイス定義ファイル７０を示している。
【００６８】
図５の（ｂ）部に示すように、デバイス定義ファイル７０は、実デバイス記述部７１、実通信記述部７２および実ブロック記述部７４を備えている。
【００６９】
実デバイス記述部７１、実通信記述部７２および実ブロック記述部７４は、それぞれ論理デバイスモデル６０の、論理デバイス記述部６１、論理通信記述部６２（Method記述部６３）および論理ブロック記述部６４に対応する。
【００７０】
実デバイス記述部７１は、DeviceInfo記述部７１ａを備えている。なお、DeviceInfo記述部７１ａは、論理デバイス記述部６１のDeviceInfo記述部６１ａに対応する。
【００７１】
実通信記述部７２は、CommIFInfo記述部７２ａ、CommOutput記述部７２ｂ、CommInput記述部７２ｃ、CommParameter記述部７２ｄ、CommCommand記述部７２ｅおよびMethod記述部７３を備えている。
【００７２】
なお、各記述部７１ａ〜７２ｅおよびMethod記述部７３は、それぞれ論理デバイスモデル６０の記述部６２ａ〜６２ｅおよびMethod記述部６３に対応する。
【００７３】
実ブロック記述部（実動作記述部）７４は、BlockInfo記述部７４ａ、BlockInput記述部７４ｂ、BlockOutput記述部７４ｃ、BlockParameter記述部７４ｄおよびBlockCommand記述部７４ｅを備えている。各記述部７４ａ〜７４ｅは、それぞれ論理ブロック記述部６４の記述部６４ａ〜６４ｅに対応する。
【００７４】
次に、図６〜図１４を用いて、アナログデジタル変換器を対象デバイスとした場合のデバイス定義ファイル７０の具体例について説明する。
【００７５】
図６は、実デバイス記述部７１におけるDeviceInfo記述部７１ａの記述の実例を表形式で示す図である。実デバイス記述部７１は、デバイス定義の情報を管理するのに必要な情報を記述しており、図６に示すDeviceInfo記述部７１ａには、製品を識別するための製品識別情報（メーカ名、メーカコード、形名、プロダクトＩＤ、デバイスタイプＩＤ、製品バージョン等）が記述され、それぞれの情報に対して、ラベル名、分類、名称、値等が記述されている。
【００７６】
図７は、実通信記述部７２におけるCommIFInfo記述部７２ａの記述の実例を表形式で示す図である。実通信記述部７２は、通信インタフェースの情報を定義する部位であり、図７に示すCommIFInfo記述部７２ａには、対象デバイスがどのような通信インタフェースを使用しているかを識別するための通信インタフェース識別情報（メーカ名、メーカコード、通信インタフェースＩＤ、通信インタフェースタイプＩＤ、バージョン等）および、通信ネットワークの仕様に合わせて決める必要のある通信ネットワークの仕様情報（局タイプ、占有局、拡張設定、デバイスタイプ、プロトコルバージョン等）が記述され、それぞれの情報に対して、ラベル名、分類、名称、値等が記述されている。
【００７７】
図８は、実通信記述部７２におけるCommOutput記述部７２ｂの記述の実例を表形式で示す図である。図８に示すCommOutput記述部７２ｂには、通信インタフェースの各入力と各出力の内容や設定の情報および割付け情報が、ラベル名、分類、名称、データ型、初期値、設定範囲、単位、割付アドレス、ブロックの入力や出力への参照などの項目で分類して記述されている。
【００７８】
図８において、「電圧／電流選択」は、値が１の場合に電圧を選択し、０の場合に電流を選択する構成を示し、「ＣＨ１ＡＤ変換許可・禁止指定」は、値が１の場合には変換を許可し、値が０の場合には変換を禁止する構成を示している。なお、「ＢＯＯＬ」とは、１および０の値をとるデータタイプを表している。また、割付け情報において、「ＲＹ１」は、リモート出力（ＲＹ）のアドレスが１番目であることを示している。また、「ＲＷｗ６．０」は、リモートワード書込みレジスタ（ＲＷｗ）のアドレスが６番目の０ビット目を示す。
【００７９】
図９は、実通信記述部７２におけるCommInput記述部７２ｃの実例を表形式で示す図である。図９に示すCommInput記述部７２ｃには、通信インタフェースの各入力と各出力の内容や設定の情報および割付け情報が、ラベル名、分類、名称、データ型、初期値、設定範囲、単位、割付アドレス、ブロックの入力や出力への参照などの項目で分類して記述されている。
【００８０】
図９において、データ型の「ＩＮＴ１６」は、１６ビット長の整数データタイプであることを示し、割付けの「ＲＸ１」は、リモート入力（ＲＸ）のアドレスの１番目に割り付けられることを示し、「ＲＷｒ０」は、リモートワード読出しレジスタ（ＲＷｒ）のアドレスの０番目に割り付けられることを示している。
【００８１】
図１０は、実通信記述部７２におけるCommParameter記述部７２ｄの実例を表形式で示す図である。図１０に示すCommParameter記述部７２ｄには、通信インタフェースの設定、モニタ、テストに関する各パラメータの情報の情報が、ラベル名、分類、名称、データ型、初期値、設定範囲、単位、ＲＷ属性、割付アドレス、ブロックのパラメータへの参照などの項目で分類して記述されている。
【００８２】
図１１は、実通信記述部７２におけるCommCommand記述部７２ｅ１の実例を表形式で示す図である。図１１に示すCommCommand記述部７２ｅ１には、通信インタフェースのコマンド情報が、ラベル名、分類、名称、コマンドパラメータ、ブロックのコマンドへの参照などの項目で分類して記述されている。
【００８３】
図１２は、実通信記述部７２におけるCommandPrm記述部７２ｅ２の実例を表形式で示す図である。図１２に示すCommandPrm記述部７２ｅ２には、コマンド表のコマンドパラメータで指定されたラベル名に対応するコマンドの引数情報が、ラベル名、分類、名称、データ型、初期値、設定範囲、ＲＷ属性、単位、割付アドレスおよび参照などの項目で分類して記述されている。
【００８４】
なお、実通信記述部７２におけるCommCommand記述部７２ｅは、上述したCommCommand記述部７２ｅ１およびCommandPrm記述部７２ｅ２を有している。
【００８５】
図１３は、実通信記述部７２におけるMethod記述部７３の実例を表形式で示す図である。図１３に示すMethod記述部７３には、各通信処理の情報がラベル名、分類、名称、呼出し、書込みレジスタ、書込み値、読出しレジスタ、読出し値、インターロック、ハンドシェイク、パラメータやコマンドへの参照などの項目で分類して記述されている。
【００８６】
なお、CommInput記述部７２ｃ、CommParameter記述部７２ｄおよびMethod記述部７３の各参照欄に記述された情報が、割付け情報となる。
【００８７】
図１４は、実ブロック記述部７４におけるBlockInfo記述部７４ａ、BlockInput記述部７４ｂ、BlockOutput記述部７４ｃおよびBlockParameter記述部７４ｄのそれぞれの実例を表形式で示す図であり、デバイス機能情報を通信方式に依存しない形式で定義している。ここで、通信方式とは、通信機能CommIFが示す通信プロトコルや通信手順を示している。
【００８８】
なお、図１４に示す実ブロック記述部７４の実例では、チャンネル番号が「ＣＨ１」を例に採って示しており、実際には他のチャンネルＣＨ２、ＣＨ３およびＣＨ４の実ブロック記述部７４も定義されているが、図１４ではチャンネルＣＨ１についてのみ示している。
【００８９】
図１４に示すBlockInfo記述部７４ａには、ブロックを識別するためのブロック識別情報（メーカ名、メーカコード、ブロックID、ブロックタイプID、バージョン等）が記述され、それぞれの情報に対して、ラベル名、分類、名称、値等が記述されている。
【００９０】
図１４に示すBlockInput記述部７４ｂおよびBlockOutput記述部７４ｃには、ブロックの各入力と各出力の情報が、ラベル名、分類、名称、データ型、初期値、設定範囲、単位などの項目で分類して記述されている。
【００９１】
図１４に示すBlockParameter記述部７４ｄには、ブロックの設定、モニタ、テストに関するパラメータ情報が、ラベル名、分類、名称、データ型、初期値、設定範囲、単位、ＲＷ属性などの項目で分類して記述されている。
【００９２】
ここで、「ＲＷ属性」とは、読み出し、書き込みの属性を示し、ここが「ＲＷ」の場合は、読み出し、書き込みが可能なことを意味し、「Ｒ」の場合は、読み出し専用、「Ｗ」の場合は、書き込み専用であることを意味する。
【００９３】
なお、BlockCommand記述部７４ｅの記述例については図１４には図示していないが、ブロックのコマンドの情報が、ラベル名、分類、名称、コマンドパラメータ、ブロックのコマンドへの参照などの項目で分類して記述されている。
【００９４】
＜ＩＯシナリオ設定プログラムおよびシナリオプログラムの構成＞
次に、図１５を用いて、ＩＯシナリオ設定プログラム１３およびＩＯシナリオプログラム１２の構成について説明する。
【００９５】
図１５は、ＩＯシナリオプログラム生成部４０で生成されるＩＯシナリオ設定プログラム１３と、ＩＯシナリオプログラム１２の構成例を示すブロック図である。
【００９６】
図１５に示すように、ＩＯシナリオ設定プログラム１３は、CommOutputMethod登録１３ａ、CommInputMethod登録１３ｂ、GetParameterMethod登録１３ｃ、SetParameterMethod登録１３ｄおよびInitializeMethod登録１３ｅの５つのMethod登録を有している。
【００９７】
また、ＩＯシナリオプログラム１２は、CommOutputMethod処理１２ａ、CommInputMethod処理１２ｂ、GetParameterMethod処理１２ｃ、SetParameterMethod処理１２ｄおよびInitializeMethod処理１２ｅの５つのMethod処理と、BlockInput処理１４ａ、BlockOutput処理１４ｂ、BlockParameter処理１４ｃおよび１４ｄのBlock処理と、Block動作シナリオプログラム１５を有している。
【００９８】
ＩＯシナリオプログラム１２のBlock処理１４ａ〜１４ｄは、デバイス定義ファイル７０の、BlockInput記述部７４ｂ、BlockOutput記述部７４ｃおよびBlockParameter記述部７４ｄの記述内容から生成されるBlock処理のプログラムである。なお、ＩＯシナリオプログラム１２には、BlockCommand記述部７４ｅの記述内容から生成されるBlock処理のプログラムを有する場合もある。
【００９９】
ＩＯシナリオプログラム１２のBlock動作シナリオプログラム１５は、制御対象４ａ、４ｂ、５ａおよび５ｂのＩＯ動作仕様に基づいて、プログラマーの手で作成され追記されたBlockOutput処理１４ｂとBlockInput処理１４ａとの間の連動シナリオプログラムである。
【０１００】
Method登録１３ａ〜１３ｅは、デバイス定義ファイル７０のMethod記述部７３（図１３）に記述された５つのMethod（CommOutput、CommInput、GetParameter、SetParameter、Initialize）のそれぞれのハンドシェイク項目の要求条件（図１３中の＜要求＞に対応する条件）をトリガ条件に、ＩＯシナリオプログラム１２の各Method処理１２ａ〜１２ｅをトリガアクションで起動するようにシナリオインタフェース３４（図３）で設定するプログラムである。
【０１０１】
ＩＯシナリオプログラム１２のトリガアクションで起動するように登録されたMethod処理１２ａ〜１２ｅは、仮想デバイスインタフェース３３（図３）を呼び出してシミュレーション部２０（図３）内のデバイスシミュレーション部２３の仮想入力信号２３ａ、仮想出力信号２３ｂおよび仮想バッファメモリ２３ｃの値の読み出し、書き込みを行う。
【０１０２】
ＩＯシナリオプログラム生成部４０は、対応するユニットのデバイス定義ファイル７０のMethod記述部７３の情報と、対応するユニットのユニット構成ファイル４３およびユニット構成ツール４２から構成情報を取得し、コントローラユニット５０のデバイス割付に対応する入力信号５４、出力信号５５、バッファメモリ５６への割り付けを行って、そのアドレスを使って仮想デバイスインタフェース３３を呼び出して、対応するデバイスシミュレーション部２３の仮想入力信号２３ａ、仮想出力信号２３ｂおよび仮想バッファメモリ２３ｃの読み出し、書き込みを行うMethod処理のＩＯシナリオプログラム１２を生成する。
【０１０３】
以上の動作によって、デバイス定義ファイル７０のMethod記述部７３に記述された各Methodの書込みレジスタの項目で示された仮想入力信号２３ａ、仮想出力信号２３ｂおよび仮想バッファメモリ２３の値を読み出して、ＩＯシナリオプログラム１２のBlockInput処理１４ａ、BlockOutput処理１４ｂ、BlockParameter処理１４ｃおよび１４ｄに渡し、その結果をデバイス定義ファイル７０のMethod記述部７３に記述された５つのMethod（CommOutput、CommInput、GetParameter、SetParameter、Initialize）のそれぞれの読出しレジスタの項目に書き込む。また、正常終了の場合は、ハンドシェイク項目の完了（図１３中の＜完了＞に対応）で示された値を、異常終了の場合はハンドシェイク項目の異常（図１３中の＜異常＞に対応）で示された値を仮想入力信号２３ａ、仮想出力信号２３ｂおよび仮想バッファメモリ２３ｃに書き込む。
【０１０４】
以上説明したように、実ブロック記述部７４は、デバイス機能を実現するための、入出力処理、パラメータ読み書き処理およびコマンド実行処理を含む実動作処理内容を規定している。一方、実通信記述部７２は、通信機能を実現するための、通信手順を含む実通信内容を規定している。
【０１０５】
また、ＩＯユニット５３ａ、インテリジェントユニット５３ｂ、マスタユニット５３ｃ、スレーブユニット３ａおよび３ｂのデバイス定義ファイル７０として、実動作記述部である実ブロック記述部７４と実通信記述部である実通信記述部７２とが互いに独立して記述されている。
【０１０６】
このため、論理デバイスモデルによってデバイス定義ファイルのデバイス機能（実動作機能）と通信機能（実通信機能）を独立して記述することができ、デバイス機能（実動作機能）はユニットの制御順を記述でき、通信機能（実通信機能）はＩＯユニットやインテリジェントユニットやマスタユニット、スレーブユニット固有の通信手順を記述することができ、ＩＯシナリオプログラムを容易に作成することができる。
【０１０７】
またＩＯユニット５３ａ、インテリジェントユニット５３ｂ、マスタユニット５３ｃ、スレーブユニット３ａおよび３ｂの入力信号５４ａ〜５４ｃ、出力信号５５ａ〜５５ｃ、バッファメモリ５６ｂおよび５６ｃの動作を記述するＩＯ シナリオ設定プログラム１３とＩＯシナリオプログラム１２を生成することができ、制御プログラム１１の開発のためのシミュレーション準備を効率的に行うことができる。
【符号の説明】
【０１０８】
１  制御プログラム開発支援装置、１０  プログラミング部、２０  シミュレーション部、３０  ＩＯシナリオ実行部、４０  ＩＯシナリオプログラム生成部、５０  コントローラユニット、７０  デバイス定義ファイル。
【図１】
0005738065.tif 000002
【図２】
0005738065.tif 000003
【図３】
0005738065.tif 000004
【図４】
0005738065.tif 000005
【図５】
0005738065.tif 000006
【図６】
0005738065.tif 000007
【図７】
0005738065.tif 000008
【図８】
0005738065.tif 000009
【図９】
0005738065.tif 000010
【図１０】
0005738065.tif 000011
【図１１】
0005738065.tif 000012
【図１２】
0005738065.tif 000013
【図１３】
0005738065.tif 000014
【図１４】
0005738065.tif 000015
【図１５】
0005738065.tif 000016