(57)【要約】【課題】入力部より入力されたデータを処理して出力部を駆動するシステムで、プログラミングを要する箇所を縮減するとともに、プログラミング言語の未習熟者であっても開発および修正ができるようにする。【解決手段】適用するダムに固有の処理を記述したマクロプログラムを中間コードに変換する。中間コードは、マクロ文の種類を示す演算子コードとオブジェクトへ引き渡す引数データとを含む。並列処理で実行されるタスクの主実行部は、固有の処理を行う際、マクロ実行部を呼び出す（ステップＳ１０８）。マクロ実行部は、中間コードから演算子コードを選択して、該演算子コードが示す処理のオブジェクトアドレスを認識する（ステップＳ１１２）。該演算子コードが指定する前記オブジェクトに前記引数データを渡すとともに前記コンピュータに該オブジェクトを実行させる（ステップＳ１１４）。【選択図】図１０
2004054797.tif 000002
【特許請求の範囲】
【請求項１】
入力部から入力されるデータをＣＰＵにより処理して出力部を駆動する駆動データを出力するデータ処理システムにおいて、
前記ＣＰＵを含むコンピュータの基本制御を行うとともに制御データを出力するＯＳと、
前記ＣＰＵによって実行される複数のタスクと、
前記タスクにより呼び出されるマクロ実行部と、
所定の処理を実行する実行コードからなる複数のオブジェクトと、
キャラクタ形式で記述されたマクロプログラムを、前記オブジェクトを指定する演算子コードと前記オブジェクトに渡す引数データとに変換する変換部と、
を備え、
前記各タスクは、前記制御データ、前記入力部より入力されるデータまたは他のタスクによる処理後のデータを処理し、処理後のデータを出力し、
前記マクロ実行部は、前記制御データ、前記入力部より入力されたデータまたは前記他のタスクによる処理後のデータに基づいて前記演算子コードを選択し、該演算子コードが指定する前記オブジェクトに前記引数データを渡すとともに該オブジェクトを実行させ、新たなデータを生成させることを特徴とするデータ処理システム。
【請求項２】
請求項１記載のデータ処理システムにおいて、
前記入力部より入力されるデータは、ダムゲートの制御を行うダムゲートシステムにおけるダム水位データまたはダムゲート開度データの少なくとも１つであり、
前記駆動データは、前記ダムゲートシステムにおけるダムゲート操作量データであることを特徴とするデータ処理システム。
【請求項３】
請求項１記載のデータ処理システムにおいて、
前記複数のタスクは、前記ＯＳの制御下でマルチタスク処理により並列実行されるものであることを特徴とするデータ処理システム。
【請求項４】
少なくとも１つ以上のＣＰＵと、
前記ＣＰＵを含むコンピュータの基本制御を行うとともに制御データを出力するＯＳと、
前記ＣＰＵによって実行される複数のタスクと、
前記タスクにより呼び出されるマクロ実行部と、
所定の処理を実行する実行コードからなる複数のオブジェクトと、
キャラクタ形式で記述されたマクロプログラムを、前記オブジェクトを指定する演算子コードと前記オブジェクトに渡す引数データとに変換する変換部と、
を備えたデータ処理システムにより、入力部より入力されるデータを前記ＣＰＵにより処理して出力部を駆動する駆動データを出力するデータ処理方法において、
前記タスクを実行する際に、前記変換部により、前記マクロプログラムを前記演算子コードと前記引数データとに変換するステップと、
前記タスクによりマクロ実行部を呼び出すステップと、
前記マクロ実行部により、前記制御データ、前記入力部より入力されたデータまたは前記他のタスクによる処理後のデータに基づいて前記演算子コードを選択し、該演算子コードが指定する前記オブジェクトに前記引数データを渡すとともに該オブジェクトを実行させ、新たなデータを生成させるステップと、
を有することを特徴とするデータ処理方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、入力部より入力されたデータをＣＰＵにより処理して出力部を駆動する駆動データを出力するデータ処理システムおよびデータ処理方法に関し、特にダムゲート制御に適用して好適なデータ処理システムおよびデータ処理方法に関する。
【０００２】
【従来の技術】
ダムは、各ダムが施工される地形や雨量その他の条件に応じて設計されるものでありゲートの数、幅、高さ、ダムの水量等が各ダム毎に異なる。従って、ダムのゲートを制御するコンピュータのシステムにおいては、ゲートの数、幅、高さ、ダムの水量等によって、各ダム毎に制御する方法が異なる。実際上、ダム毎にカスタマイズした制御方法を適用する必要があり、これらの制御方法は前記コンピュータにより実行されるプログラムの変更により対応する。
【０００３】
制御方法をカスタマイズする際、Ｃ言語またはＰＬＣ（Ｐｒｏｇｒａｍｍａｂｌｅ　Ｌｏｇｉｃ　Ｃｏｎｔｒｏｌｌｅｒ）等によってプログラミングを行い、ソースファイルをコンパイルした結果の実行ファイルを用いている。
【０００４】
【発明が解決しようとする課題】
従来技術においては、ダムのゲートを制御するシステムに必要な全ての処理を１つにまとめた実行ファイルを作成しているので、ソースファイルおよび実行ファイルのサイズが過大となる。従って、プログラム開発者がプログラミングに要する時間が長くなる。ベースとなるソースファイルが存在する場合でも、ソースファイルのサイズが過大であることから、開発または変更すべき箇所の特定が困難となり、プログラミングのミスを誘発し易い。
【０００５】
また、Ｃ言語やＰＬＣ等のコンピュータ言語の知識が必要であることはもちろんであり、Ｃ言語やＰＬＣ等で作成したソースファイルを実行形式の実行コードに変換する手順を習熟している必要がある。従って、プログラム開発者以外の者が、各プログラムが適用されるダムにおいて現地調整等を行うことは非常に困難である。
【０００６】
本発明はこのような課題を考慮してなされたものであり、入力部より入力されたデータを処理して出力部を駆動するシステムで、プログラミングを要する箇所を縮減するとともに、プログラミング言語の未習熟者であってもプログラムを開発および修正することを可能とするデータ処理システムおよびデータ処理方法を提供することを目的とする。
【０００７】
また、本発明の他の目的は、種々のダムシステムに対して汎用的に適用することができるとともに、プログラミング言語の未習熟者であってもプログラムを開発および修正することを可能とするデータ処理システムおよびデータ処理方法を提供することにある。
【０００８】
【課題を解決するための手段】
本発明に係るデータ処理システムは、入力部から入力されるデータをＣＰＵにより処理して出力部を駆動する駆動データを出力するデータ処理システムにおいて、前記ＣＰＵを含むコンピュータの基本制御を行うとともに制御データを出力するＯＳと、前記ＣＰＵによって実行される複数のタスクと、前記タスクにより呼び出されるマクロ実行部と、所定の処理を実行する実行コードからなる複数のオブジェクトと、キャラクタ形式で記述されたマクロプログラムを、前記オブジェクトを指定する演算子コードと前記オブジェクトに渡す引数データとに変換する変換部とを備え、前記各タスクは、前記制御データ、前記入力部より入力されるデータまたは他のタスクによる処理後のデータを処理し、処理後のデータを出力し、前記マクロ実行部は、前記制御データ、前記入力部より入力されたデータまたは前記他のタスクによる処理後のデータに基づいて前記演算子コードを選択し、該演算子コードが指定する前記オブジェクトに前記引数データを渡すとともに該オブジェクトを実行させ、新たなデータを生成させることを特徴とする。
【０００９】
このようにすると、適用対象に固有の処理のみをマクロプログラムで記述すれば足り、プログラミングを要する箇所が縮減されるとともに、プログラミング言語の未習熟者であってもプログラムを開発および修正することが可能となる。
【００１０】
また、前記入力部より入力されるデータは、ダムゲートの制御を行うダムゲートシステムにおけるダム水位データまたはダムゲート開度データの少なくとも１つであり、前記駆動データは、前記ダムゲートシステムにおけるダムゲート操作量データとすると、データ処理システムを種々のダムに対して汎用に適用することができる。
【００１１】
さらに、前記複数のタスクは、前記ＯＳの制御下でマルチタスク処理により並列に実行されるものであってもよい。
【００１２】
また、本発明に係るデータ処理方法は、少なくとも１つ以上のＣＰＵと、前記ＣＰＵを含むコンピュータの基本制御を行うとともに制御データを出力するＯＳと、前記ＣＰＵによって実行される複数のタスクと、前記タスクにより呼び出されるマクロ実行部と、所定の処理を実行する実行コードからなる複数のオブジェクトと、キャラクタ形式で記述されたマクロプログラムを、前記オブジェクトを指定する演算子コードと前記オブジェクトに渡す引数データとに変換する変換部とを備えたデータ処理システムにより、入力部より入力されるデータを前記ＣＰＵにより処理して出力部を駆動する駆動データを出力するデータ処理方法において、前記タスクを実行する際に、前記変換部により、前記マクロプログラムを前記演算子コードと前記引数データとに変換するステップと、前記タスクによりマクロ実行部を呼び出すステップと、前記マクロ実行部により、前記制御データ、前記入力部より入力されたデータまたは前記他のタスクによる処理後のデータに基づいて前記演算子コードを選択し、該演算子コードが指定する前記オブジェクトに前記引数データを渡すとともに該オブジェクトを実行させ、新たなデータを生成させるステップとを有することを特徴とする。
【００１３】
このような方法により、プログラミング言語のコンパイル作業等が不要となり、プログラミング言語の未習熟者であっても開発および修正することが可能となる。
【００１４】
【発明の実施の形態】
以下、本発明に係るデータ処理システムおよびデータ処理方法の実施の形態例を、添付の図１〜図１２を参照しながら説明する。
【００１５】
図１に示すように、本実施の形態に係るデータ処理システム１０は、ダムシステム１２に対して適用されている。ダムシステム１２は、図１において上側から下側へ流れる河川１３の水位および流量等の制水を行うシステムである。上流側から下流側へ排砂を行う排砂門である第１ゲート１４と、河川１３から所定用途の取水用の水路１５へ取水する取水口制水門である第２ゲート１６と、水路１５の沈砂池１８から河川１３へ排砂を行う沈砂池排砂門である第３ゲート２０とを有する。また、ダムシステム１２は、第１〜第３ゲート１４、１６、２０の各開度（ダムゲート開度データ）を検出する第１開度計２４、第２開度計２６および第３開度計２８と、第１〜第３ゲート１４、１６、２０をそれぞれ動作させる第１アクチュエータ（出力部）３０、第２アクチュエータ（出力部）３２および第３アクチュエータ（出力部）３４とを有する。さらに、ダムシステム１２は、前記第１ゲート１４とともに河川１３を堰き止める固定堰３６と、上流側（図１の上側）の水位（ダム水位データ）を計測する第１水位計３８と、水路１５の水位（ダム水位データ）を計測する第２水位計４０とを有する。さらにまた、ダムシステム１２は、操作の入力装置であるスイッチ（入力部）４２と、第１〜第３ゲート１４、１６、２０の各異常、故障および動作状態を示すゲート動作監視部（入力部）４４と、注意喚起等の用途のランプ（出力部）４６と、所定の機器を動作させるためのリレー（出力部）４８と、デジタル・アナログ変換により所定のアナログ信号を出力するアナログ出力部４９とを有する。
【００１６】
ダムシステム１２の制御を行うデータ処理システム１０は、コンピュータ５０と、入力装置であるキーボード（入力部）５２およびマウス（入力部）５４と、記録媒体５６（光ディスクまたは磁気ディスク等）の読み書きを行うディスクドライブ（入力部）５８とを有する。スイッチ４２、ゲート動作監視部４４、キーボード５２、マウス５４およびディスクドライブ５８は、コンピュータ５０の入力処理部である入力インターフェース６０に接続されている。また、データ処理システム１０は、表示器であるディスプレイ６２と、外部への出力を行う通信線である外部出力部６４とを有する。第１アクチュエータ３０、第２アクチュエータ３２、第３アクチュエータ３４、ランプ４６、リレー４８、ディスプレイ６２および外部出力部６４はコンピュータ５０の出力インターフェース６６に接続されている。ディスプレイ６２は、システム設定・コンフィギュレーション時等には、出力インターフェース６６を経由せずに、所定のプログラムまたは操作部から直接制御するようにしてもよい。
【００１７】
コンピュータ５０は、入力インターフェース６０より入力されたデータを処理するとともに出力インターフェース６６を介してランプ４６等を駆動する処理部６８を有する。入力インターフェース６０と出力インターフェース６６とは一体であってもよい。入力インターフェース６０および出力インターフェース６６は、それぞれに参照アドレスが与えられ、ＣＰＵ（Ｃｅｎｔｒａｌ　Ｐｒｏｃｅｓｓｉｎｇ　Ｕｎｉｔ）７０からはメモリの一部として扱えるようにしてもよい。
【００１８】
処理部６８は、コンピュータ５０全体を制御する制御手段としてのＣＰＵ７０と、半導体素子の記憶部であるＲＡＭ７２およびＲＯＭ７４と、書き込み可能で不揮発性の記憶素子であるフラッシュメモリ７５と、プログラム等を格納するハードディスク７６とを有する。ＣＰＵ７０は、バス７７を介して、入力インターフェース６０、出力インターフェース６６、ＲＡＭ７２、ＲＯＭ７４、フラッシュメモリ７５およびハードディスク７６と接続されておりデータの授受を行う。
【００１９】
ハードディスク７６には、コンピュータ５０全体を管理する基本ソフトウェアであるＯＳ７８と、ダムシステム１２の制御を行うプログラムである実行ファイル８０と、ダムシステム１２に固有の処理内容を記述したキャラクタ形式（またはテキスト形式ともいう）のマクロプログラム８２と、各マクロプログラム８２の記述内容を編集する機能をもつ汎用のエディタ８４と、前記ディスプレイ６２のモニタ画面の表示を制御するＧＵＩ８６とを有する。ＯＳ７８は、複数の処理をそれぞれタスクとして並列実行することができ、しかもそれぞれのタスクの実行時間が保証されている、所謂、リアルタイムマルチタスクＯＳである。
【００２０】
図２に示すように、実行ファイル８０は、ダムシステム１２の制御を行うためにそれぞれ個別の処理を行う７つのタスク、すなわち、第１タスク１００、第２タスク１０２、第３タスク１０４、第４タスク１０６、第５タスク１０８、第６タスク１１０および第７タスク１１２からなる。実行ファイル８０は予め用意されているのものであり、実行ファイル８０を生成するためのソースコードおよびコンパイラは不要である。
【００２１】
第１タスク１００は、他の６つのタスクの動作状況を監視する監視タスクであり、第２タスク１０２は、入力インターフェース６０から供給されるデータを処理するデータ入力タスクである。また、第３タスク１０４は、第１〜第３ゲート１４、１６、２０の状態を監視するゲート監視タスクであり、第４タスク１０６は、第１〜第３ゲート１４、１６、２０の各開度の目標値を算出する目標値算出タスクである。さらに、第５タスク１０８は、第４タスク１０６で算出された目標値に基づきダムゲート操作量データを出力して第１アクチュエータ３０、第２アクチュエータ３２および第３アクチュエータ３４を駆動させるゲート操作タスクであり、第６タスク１１０は、ランプ４６、リレー４８、外部出力部６４を制御する外部出力タスクである。第７タスク１１２は、ＧＵＩ８６と協働してディスプレイ６２のモニタ画面に情報を表示させる画面出力タスクである。
【００２２】
第１〜第７タスク１００〜１１２は、各タスク個別の処理に係る実行コードが記述されている主実行部１１４と、前記マクロプログラム８２の変換処理を行う変換部１１６と、各変換部１１６によって生成された中間コード１５８（図７参照）に基づいて処理を行うマクロ実行部１１８と、変換部１１６およびマクロ実行部１１８等が参照するデータが記憶されているデータ部１２０と、中間コード１５８が示す処理内容を実行コードとして記録している複数のオブジェクト１２２とを有する。中間コード１５８は、後述するように演算子コードと引数データである種別番号および項目番号等からなるものである。マクロプログラム８２は、人間が容易に理解できるようにキャラクタ形式で記述されており、各マクロ文が示す処理は各オブジェクト１２２に実行コードとして記録されている。オブジェクト１２２を特定して実行を行うマクロ実行部１１８が、処理に対応するオブジェクト１２２を容易に特定できるように、マクロプログラム８２は変換部１１６によって中間コード１５８に変換される。
【００２３】
図２に示す実行ファイル８０は、前記ハードディスク７６に記録された状態を示すものであり、第４タスク１０６については、その内容を詳細に記している。他のタスクも同様の構成である。
【００２４】
オブジェクト１２２の実体は、所定の処理を行うことのできる実行コードであり、マクロプログラム８２に記述される複数のマクロ文にそれぞれ対応している。オブジェクト１２２は、予め、高級プログラム言語またはアセンブラで開発されコンパイル（またはアセンブル）した後の実行コードとして用意されている。このように、オブジェクト１２２は一種のライブラリとしての機能をもつ。
【００２５】
主実行部１１４には、一般のダムシステムに共通に使用される処理で、各タスク個別の処理に係る実行コードが記述されており、第１〜第７タスク１００〜１１２における基本的な処理を行う。また、主実行部１１４は、処理に応じて変換部１１６およびマクロ実行部１１８を動作させる。
【００２６】
データ部１２０には、変換部１１６およびマクロ実行部１１８等が参照するマクロ定義テーブル１５０（図４参照）、変数定義テーブル１５２（図５参照）およびパラメータ種別定義テーブル１５４（図６参照）等が記憶されている。
【００２７】
図３に示すように、マクロプログラム８２には、本実施の形態において適用されるダムシステム１２に特有の処理を示すマクロ文がキャラクタ形式で記述されている。マクロ文とは、特定の処理手順、命令または命令群を１つの命令で記述するものである。各マクロ文は前記変換部１１６によって中間コード１５８（図７参照）に変換され、前記オブジェクト１２２を実行させることができる。
【００２８】
「ｐ＝ｑ」で示されるマクロ文（図示せず）は、第１引数ｑの内容を第２引数ｐに代入することを示す。「ｒ＝ＮＥＱ（ｐ，ｑ）」で示されるマクロ文（図３の実行単位０参照）は、第１引数ｐおよび第２引数ｑの比較を行うマクロ文であり、第１引数ｐと第２引数ｑとが等しいときには第３引数ｒを「０」として返し、第１引数ｐと第２引数ｑとが異なるときには第３引数ｒを「１」として返す。「ＪＵＭＰ（ｐ，ｑ）」で示されるマクロ文（図３の実行単位１参照）は、第１引数ｐが「０」以外の値であるとき（論理が真であるとき）に次に行う処理を第２引数ｑが表すラベル位置（例えば、「１：」等）から始まるようにプログラムカウンタを書き換えることを示す。また、第１引数ｐが「０」であるとき（論理が偽であるとき）には次のマクロ文へ移る。「動作設定（ｐ，ｑ，ｒ，ｓ）」で示されるマクロ文（図３の実行単位３参照）は、第１引数ｐが「０」以外の値であるときに、第２引数ｑで示す種別（例えば、現在開度からの相対開度）で、第３引数ｒで示すゲート（例えば、第１ゲート１４）の開度を第４引数ｓの値（例えば、単位［ｃｍ］で表した開度）になるように制御を行うことを示す。この場合、設定した目標値はゲートを操作するための第５タスク１０８に供給される。「ＲＥＴ（ｐ）」で示されるマクロ文（図３の実行単位６参照）は、各実行区分であるエントリの処理を終了するリターン文であり、第１引数ｐは、ＯＳ７８または主実行部１１４への処理結果の確認番号として利用される。
【００２９】
さらに、四則演算用の各マクロ文、論理演算（例えば、論理和、論理積、排他的論理和等）用の各マクロ文およびビット演算用の各マクロ文が用意されている。
【００３０】
これらのマクロ文は、それぞれ１つの実行単位をなしている。また、マクロプログラム８２は、マクロ文の他に、実行区分を示すエントリの番号と、条件分岐先を示すラベルと、説明用のコメントと、前記各タスクの初期設定を行うための初期化データ（図示せず）とを表記することが可能である。
【００３１】
エントリ番号は、例えば、「［エントリ］＝１」として表され、主実行部１１４およびマクロ実行部１１８が実行開始のエントリ番号を指定することができる。ラベルは、例えば、「１：」として表され、「ＪＵＭＰ」等の条件分岐のマクロ文による分岐先を示す。コメントには所定の識別記号（例えば、文字列「／／」）を付加することによりマクロ文と区別して扱うことができる。
【００３２】
さらに、マクロプログラム８２は、キャラクタ形式で記述されており表記上の制約がないことから、アルファベット記号等の半角文字と、日本語等の全角文字とを使用することができる。マクロプログラム８２は、汎用のエディタ８４により書き換えが可能である。
【００３３】
このように、マクロプログラム８２では、変数に対する比較判断および演算、条件分岐、ゲートに対する目標値算出等を記述することができるとともにプログラム用としての基本的な機能を有しているので、ダムシステム１２に固有の処理をシーケンス処理として表すことができる。例えば、ダムシステム１２に固有のシーケンスとして、次のような処理をマクロプログラム８２に表すことができる。
【００３４】
１．第１ゲート１４を全閉にする。２．第１水位計３８の値が第１所定値となった後、第１水位計３８の値が第３所定値となるように第１ゲート１４を制御する。３．第１水位計３８の値が第２所定値を超えたらステップ制御にて第１ゲート１４を全開にする。４．第１水位計３８の値が第４所定値になった後、第１ゲート１４を所定開度まで閉じる。５．第１水位計３８の値が第２の所定値となるように第１ゲート１４を制御する。６．前記１．へ戻り、繰り返し処理を行う。
【００３５】
このシーケンスの例は、第１水位計３８の値に基づいて第１ゲート１４の開度の目標値を算出するものであるため、前記第４タスク１０６に適用される。他のタスクについても同様に、ダムシステム１２に特有の処理をマクロプログラム８２に表すことができる。また、ダムシステム１２に特有の処理がなければ、そのタスクについてはマクロプログラム８２を作成しなくてもよい。実際上、適用するダムシステム１２の形態によって大きく影響を受けるのは、入力処理を行う第２タスク１０２および目標値算出を行う第４タスク１０６であり、これらの第２タスク１０２および第４タスク１０６に対してマクロプログラム８２を使用すると有効である。なお、図３に示すマクロプログラム８２は、あくまでも１例であり、上記のシーケンスの例とは無関係である。
【００３６】
図４に示すように、マクロ定義テーブル１５０は、各マクロ文を識別する演算子コードと、各マクロ文に対応するオブジェクト１２２が格納されるオブジェクトアドレスと、マクロ情報とが記録されている。マクロ情報としては、該マクロ文の引数の数および該マクロの処理内容等が記録されている。
【００３７】
図５に示すように、変数定義テーブル１５２は、各変数を識別する項目番号と、各変数の種別を示す種別番号が記録されている。種別番号の定義は、図６に示すパラメータ種別定義テーブル１５４に記録されている。これらの項目番号および種別番号は、オブジェクト１２２に渡される引数データである。
【００３８】
次に、前記の変換部１１６が、図３に示したマクロプログラム８２を図７に示す中間コード１５８に変換する方法について、図７〜図８を参照しながら説明する。以下の説明では、第１〜第７タスク１００〜１１２は前記ＣＰＵ７０によって前記ハードディスク７６からロードされ前記ＲＡＭ７２上に展開されており、ＣＰＵ７０の制御下に並列実行されているものとする。
【００３９】
まず、図８のステップＳ１において、変換部１１６は、主実行部１１４からの指示により動作を開始し、マクロプログラム８２を読み込む。
【００４０】
次に、ステップＳ２において、変換部１１６は、マクロプログラム８２を変換した結果を記録するための領域として、図７に示す中間コードテーブル１５６をＲＡＭ７２上の適当な場所に用意する。この時点では中間コードテーブル１５６の内容は未記録である。
【００４１】
次に、ステップＳ３において、マクロプログラム８２からマクロ文を上から順次抽出する。図３のマクロプログラム８２では、最初に「結果１＝ＮＥＱ（結果１００，１）」を抽出する。
【００４２】
次に、ステップＳ４において、抽出したマクロ文の種類を認識する。「結果１＝ＮＥＱ（結果１００，１）」で示されるマクロ文では、「＝ＮＥＱ」という文字列が含まれていることから、マクロ定義テーブル１５０（図４参照）を参照することにより、演算子コードが「１０１」のマクロ文であることが認識できる。認識した演算子コード「１０１」は、中間コードテーブル１５６の「演算子コード」欄に記録される。このように、各マクロ文は、中間コードテーブル１５６において演算子コードとして表される。
【００４３】
次に、ステップＳ５において、マクロ文の種類により、中間コードテーブル１５６の３つの欄、つまり「結果が真のときの実行単位番号」欄、「結果が偽のときの実行単位番号」欄、「引数の数」欄を記録する。具体的には、マクロ定義テーブル１５０における「マクロ情報」欄を参照して、当該マクロ文の引数の数を調べ、「引数の数」欄に記録する。また、「マクロ情報」欄を参照して、当該マクロ文の種類が条件分岐のマクロ文（例えば、「ＪＵＭＰ」）であるときには、引数から分岐先を判定し、マクロ文の処理結果が「０」以外のときの分岐先を「結果が真のときの実行単位番号」欄に記録し、マクロ文の処理結果が「０」のときの分岐先を「結果が偽のときの実行単位番号」欄に記録する。当該マクロ文の種類が条件分岐のマクロ文ではないときには、「結果が真のときの実行単位番号」欄および「結果が偽のときの実行単位番号」欄に「−１」を記録する。
【００４４】
次に、ステップＳ６において、ステップＳ３で認識したマクロ文が含む引数を認識する。このとき、引数の数が規定の数と異なるときには、エラー出力等の所定の処置を行う。「結果１＝ＮＥＱ（結果１００，１）」で示されるマクロ文では「＝ＮＥＱ」の文字列を除き、「（」、「）」および「，」の文字をデリミタとすると、第１引数ｐが「結果１００」、第２引数ｑが「１」、第３引数ｒが「結果１」であることが認識できる。
【００４５】
次に、ステップＳ７において、認識した各引数に関する情報を中間コードテーブル１５６に記録する。例えば、第１引数ｐが「結果１００」であれば、変数定義テーブル１５２を参照すると、「結果１００」で示される変数の項目番号および種別番号はそれぞれ「１００」、「１００」である。従って、中間コードテーブル１５６の「第１引数」欄における「種別番号」欄および「項目番号」欄にそれぞれ「１００」、「１００」を記録する。また、第２引数ｑが「１」であるとき、変数定義テーブル１５２を参照すると、この第２引数「１」を示す変数はないので、第２引数「１」は数値定数であること認識する。この場合、「１」は項目番号になる。パラメータ種別定義テーブル１５４を参照すると、数値定数の種別番号は「６」である。従って、中間コードテーブル１５６の「第２引数」欄における「種別番号」欄および「項目番号」欄にそれぞれ「６」、「１」を記録する。このように、各引数は、中間コードテーブル１５６において種別番号および項目番号によって表される。
【００４６】
次に、ステップＳ８において、マクロプログラム８２における全マクロ文について変換を行ったか否かを確認する。変換が終了であれば変換部１１６の処理を終了する。未変換のマクロ文があれば、ステップＳ３へ戻る。
【００４７】
このように、変換部１１６の処理により、人間の理解し易いキャラクタ形式で表現されたマクロプログラム８２を、前記処理部６８で処理し易い中間コード１５８、つまり演算子コード、種別番号および項目番号等に変換することができる。また、この変換処理は、マクロ定義テーブル１５０、変数定義テーブル１５２およびパラメータ種別定義テーブル１５４を参照することによって、一義的かつ簡易に変換することができる。従って、この変換処理を行う変換部１１６は、小さいサイズに構成することができ、変換処理の実行時間も短時間である。
【００４８】
次に、このように構成されるデータ処理システム１０を用いてダムシステム１２を制御するデータ処理方法について図９〜図１２を参照しながら説明する。
【００４９】
まず、図９のステップＳ１０１において、エディタ８４によりマクロプログラム８２の編集を行い、ダムシステム１２に特有の処理を記述する。マクロプログラム８２の編集作業は、エディタ８４を用いて人手により行う。マクロプログラム８２は、平易な表現のマクロ文により構成されているので、コンピュータ言語の未習熟者であっても編集が可能である。また、比較的多用されるダムの制御方法については、１つのマクロ文（例えば、前記「動作設定」で示されるマクロ文）で表されるので、マクロプログラム８２のサイズを小さくすることができるとともにプログラミングのミスを防止することができる。また、プログラミングに要する時間は短時間で済む。
【００５０】
マクロプログラム８２は、前記コンピュータ５０とは別の他のコンピュータで編集してもよいし、マクロプログラム８２を記憶する場所は記録媒体５６またはフラッシュメモリ７５等でもよい。なお、一般のダムに共通の処理については、前記主実行部１１４に含まれているので、マクロプログラム８２に記述する必要はない。
【００５１】
次に、ステップＳ１０２において、ＯＳ７８の操作手順に従い実行ファイル８０を起動する。実行ファイル８０は、第１〜第７タスク１００〜１１２に分割され、それぞれがＲＡＭ７２上に個別に展開される。第１〜第７タスク１００〜１１２は、ＯＳ７８およびＣＰＵ７０の制御下において並列実行される（図１２参照）。
【００５２】
各タスクがＲＡＭ７２上に展開された状態のメモリマップを図１１に示す。図１１から諒解されるように、主実行部１１４、変換部１１６、マクロ実行部１１８、データ部１２０およびオブジェクト１２２は、基本的にハードディスク７６に格納されていた状態（図２参照）のままＲＡＭ７２に移される。オブジェクト１２２の領域の後段には、変数を格納する変数領域１２４と、前記中間コード１５８のまとまりであるエントリの各アドレスが格納されるエントリテーブル領域１２６と、中間コード１５８が各エントリ毎に実際に格納される中間コード領域１２８とが付加される。
【００５３】
エントリテーブル領域１２６を設けることにより、各エントリに対応する中間コード１５８を任意のアドレスに実装することが可能となる。従って、中間コードテーブル１５６における、不要部分を削除して可変長に設定することができ、結果としてＲＡＭ７２の所用容量を小さくすることができる。エントリテーブル領域１２６は、各エントリに対応するアドレスのみを記録しているものであるからサイズが非常に小さい。
【００５４】
次に、ステップＳ１０３において、第１〜第７タスク１００〜１１２における各変換部１１６が動作を開始し、前記の手順（図８参照）によりマクロプログラム８２のうち、各タスクに割り当てられた部分を中間コード１５８に変換する。変換した中間コード１５８は中間コード領域１２８に格納する。このとき、中間コードテーブル１５６における不要な箇所は削除してサイズを小さくするようにしてもよい。図７に示す例では、実行単位番号０における第４引数ｓおよびそれ以降の引数は不要なので削除してよい。不要な箇所を削除することによって変わるエントリのアドレスは、前記エントリテーブル領域１２６に格納する。
【００５５】
次に、ステップＳ１０４において、変換部１１６は、マクロプログラム８２に含まれる初期化データに基づいて各変数等を初期化する。
【００５６】
次に、ステップＳ１０５において、第１〜第７タスク１００〜１１２は、図１２に示すようにそれぞれ個別の並列処理を開始する。ダムシステム１２の制御を行う上で、特にリアルタイム性が必要となる第２タスク１０２、第３タスク１０４、第４タスク１０６および第５タスク１０８は、所定の微小時間毎に実行される。第６タスク１１０および第７タスク１１２は、ダムシステム１２を制御する上で、厳密なリアルタイム性が要求されないことから、ＯＳ７８が出力する制御データに基づいて実行する形式、所謂、イベントドリブン形式で実行されるものでよい。第１タスク１００は、他の６つのタスクの動作状況を監視することから、適当な時間毎に実行される。図１２における破線矢印は、互いのタスク間における動作状況の監視および通知の処理を示す。
【００５７】
第１〜第７タスク１００〜１１２における処理の実行主体は、前記主実行部１１４（図１１参照）であり、それぞれの主実行部１１４は、ＯＳ７８が出力する制御データ、外部の機器から入力されたデータまたは他のタスクによる処理後のデータに基づいて処理を行う。各タスク間におけるデータの授受の方法は、ＯＳ７８等を介してメッセージ通信を行う方法、または第１〜第７タスク１００〜１１２から共通に参照（または書き込み）可能なグローバル変数を用いる方法等がある。
【００５８】
グローバル変数は、ＲＡＭ７２上の８つの領域にアドレス設定されている。つまり、第１入力データ領域１３０、第２入力データ領域１３２、定数領域１３４、設定者用領域１３６、監視情報領域１３８、操作情報領域１４０、目標情報領域１４２および出力データ領域１４４である。これらの各領域１３０〜１４４は、ＲＡＭ７２以外にも、ＲＯＭ７４またはフラッシュメモリ７５等に設定されていてもよい。
【００５９】
第１入力データ領域１３０は、ダムシステム１２に関する諸量およびゲート動作監視部４４に関するデータが格納される領域である。第２入力データ領域１３２は、ダムシステム１２に関する諸量およびスイッチ４２に関するデータが格納される領域である。定数領域１３４は、所定の定数が格納される領域である。設定者用領域１３６は、設定者の入力設定値が格納される領域である。監視情報領域１３８は、監視タスクである第３タスク１０４の監視情報が格納される領域である。操作情報領域１４０は、ゲート操作タスクである第５タスク１０８の操作情報を格納する領域である。目標情報領域１４２は、目標値算出タスクである第４タスク１０６が算出した目標値が格納される領域である。出力データ領域１４４は、外部出力タスクである第６タスク１１０が処理するデータのうちディスプレイ６２のモニタ画面に出力するデータを格納する領域である。
【００６０】
次に、図１０のステップＳ１０６において、第１〜第７タスク１００〜１１２におけるそれぞれの主実行部１１４は、メッセージ通信またはグローバル変数等のデータに基づいて個別の処理を行う。このとき、処理内容が一般のダムシステムに共通に使用される処理であるときには、主実行部１１４内に含まれ当該処理に対応する実行コードを実行する（ステップＳ１０７）。
【００６１】
処理内容がダムシステム１２に固有の処理であるときには、マクロ実行部１１８を呼び出して実行する（ステップＳ１０８）。
【００６２】
主実行部１１４は、処理後のデータを所定のグローバル変数またはメッセージ通信として他のタスクへ出力する。
【００６３】
次に、ステップＳ１０９において、マクロ実行部１１８は、メッセージ通信またはグローバル変数等のデータに基づいて処理の内容を判断し、中間コード領域１２８に格納される中間コード１５８のうちいずれのエントリを実行するか判断する。
【００６４】
次に、ステップＳ１１０において、マクロ実行部１１８は、実行すべきエントリ番号をエントリテーブル領域１２６から参照し、該エントリの格納されるアドレスを認識する。
【００６５】
次に、ステップＳ１１１において、前記ステップＳ１１０で認識したアドレス（または、ステップＳ１１６で認識するアドレス）に基づいて、中間コード１５８を実行単位毎に順に読み取る。図７に示す中間コード１５８の例では、０番目の実行単位の場合、１０個のデータすなわち「１０１」、「−１」、「−１」、「３」、「１００」、「１００」、「６」、「１」、「１００」、「１」を読み取る。さらに、読み取ったデータから、演算子コード、各引数の種別番号および項目番号を認識する。
【００６６】
次に、ステップＳ１１２において、マクロ実行部１１８は、マクロ定義テーブル１５０（図４参照）を参照し、読み取った演算子コードが示す処理の実行主体であるオブジェクト１２２のオブジェクトアドレスを認識する。例えば、演算子コードが「１０１」であれば、対応するオブジェクト１２２のオブジェクトアドレスは「ａｄｒ３」である。
【００６７】
次に、ステップＳ１１３において、マクロ実行部１１８は、演算子コードが示す処理が終了処理であるか否かを判断する。つまり、演算子コードの示す処理が、「ＲＥＴ（ｐ）」等の終了処理である場合には所定の後処理を行った後、所定のエントリの処理が終わったことを主実行部１１４に通知し、ステップＳ１０６へ戻る。演算子コードが示す処理が終了処理以外の処理であるときには、次のステップＳ１１４へ移る。
【００６８】
ステップＳ１１４においては、マクロ実行部１１８は、前記ステップＳ１１２で認識したオブジェクトアドレスのオブジェクト１２２を呼び出して実行する。このとき、前記ステップＳ１１１で認識した各引数の種別番号および項目番号をオブジェクト１２２に受け渡す。オブジェクト１２２を実行させる方法および種別番号および項目番号をオブジェクト１２２に受け渡すには、ＣＰＵ７０のプログラムカウンタおよびスタックポインタ等を操作し、またはＯＳ７８の所定の機能を利用すればよい。
【００６９】
次に、ステップＳ１１５において、呼び出されたオブジェクト１２２は、変数定義テーブル１５２（図５参照）およびパラメータ種別定義テーブル１５４（図６参照）を参照し、受け取った引数の種別番号および項目番号を判断するとともに所定の処理を行う。例えば、演算子コード「１０１」であるマクロ文「ｒ＝ＮＥＱ（ｐ，ｑ）」に対応するオブジェクト１２２は、第１引数ｐと第２引数ｑとの比較を行い第３引数ｒに結果を代入する。また、「動作設定（ｐ，ｑ，ｒ，ｓ）」に対応するオブジェクト１２２は、第１〜第４引数ｐ、ｑ、ｒ、ｓに基づいて、第１、第２および第３ゲート１４、１６、２０のその時点における開度の目標値を算出する。オブジェクト１２２は、処理が終了するとマクロ実行部１１８に通知する。
【００７０】
次に、ステップＳ１１６において、マクロ実行部１１８は、次に実行すべき実行単位を判断する。つまり、中間コードテーブル１５６（図７参照）の「結果が真のときの実行単位番号」および「結果が偽のときの実行単位番号」が共に「−１」であるときには、降順の次の実行単位を選択する。「結果が真のときの実行単位番号」または「結果が偽のときの実行単位番号」が「−１」以外の値であるときには、オブジェクト１２２の実行結果に基づいて次の実行単位を選択する。選択した実行単位はアドレスの形式で認識する。この後ステップＳ１１１へ戻る。
【００７１】
このように、第１〜第７タスク１００〜１１２のそれぞれの処理により、ダムシステム１２の制御を行うことができる。つまり、第２タスク１０２では、第１水位計３８、第２水位計４０、第１開度計２４、第２開度計２６および第３開度計２８から入力した各データを編集し、編集結果をグローバル変数またはメッセージ通信で他のタスクに通知する。第３タスク１０４では、定数領域１３４のデータおよび第２タスク１０２の処理後のデータに基づいて第１、第２および第３ゲート１４、１６、２０の状態を監視し、その結果を出力する。
【００７２】
第４タスク１０６では、第３タスク１０４が出力するデータに基づいて第１、第２および第３ゲート１４、１６、２０の目標開度を算出する。第５タスク１０８は、主に第４タスク１０６が出力するデータに基づいて第１アクチュエータ３０、第２アクチュエータ３２、第３アクチュエータ３４を操作する。このとき必要に応じてＰＩＤ制御等の制御手法を適用するとよい。
【００７３】
第６タスク１１０では、所定のデータに基づいてランプ４６、リレー４８等の制御を行う。第７タスク１１２は、前記ＧＵＩ８６と協働して、所定のデータをディスプレイ６２のモニタ画面に表示させる。モニタ画面上では、ＧＵＩ８６の機能により、ウィンドウやアイコン等の画像を表示し、マウス５４でオペレーションを行う形式のユーザーインターフェースが利用可能となる。
【００７４】
また、第１タスク１００は、他の６つのタスクの動作状況を監視し、異常を検知したときには所定のエラー処理を行う。
【００７５】
上述したように、本実施の形態に係るデータ処理システム１０によれば、一般のダムに共通の処理、例えば、上流側の水位を一定に保つゲート制御処理については、主実行部１１４に含まれているので、マクロプログラム８２に記述する必要はない。マクロプログラム８２には第１〜第３ゲート１４、１６、２０の制御シーケンス等、ダムシステム１２に固有の処理だけが記述されているので、マクロプログラム８２は小さいサイズとなる。しかも、マクロプログラム８２は、簡易な表現のマクロ文からなるので、コンピュータ言語未習熟者であっても編集およびプログラミングが可能である。
【００７６】
また、マクロ文は簡易な表現でありながら、プログラム用としての基本的な機能を有しているので、種々のダムの処理を汎用に記述することができる。さらに、比較的多用されるダムの制御方法については、１つのマクロ文で記述できるようになっているので、プログラミングの開発時間が短くて済み、プログラミングミスが起こりにくい。
【００７７】
マクロプログラム８２は、キャラクタ形式のファイルであることから汎用のエディタ８４により容易に編集することができる。
【００７８】
編集されたマクロプログラム８２は、変換部１１６によって自動的に中間コード１５８に変換されるので、作業者はコンパイル等の変換処理を行う必要がない。変換部１１６は、マクロ定義テーブル１５０、変数定義テーブル１５２およびパラメータ種別定義テーブル１５４に基づいてマクロプログラム８２を変換するので、簡便かつ迅速に変換処理を行うことができる。基本的には、この変換処理は各マクロ文を演算子コード、種別番号および項目番号等に置換する処理のみを行うものであり、変換部１１６は小さいサイズである。
【００７９】
また、第１〜第７タスク１００〜１１２は、個別の処理毎にまとまっており、ＯＳ７８の制御下でマルチタスク処理により並列実行されている。従って、個別の処理毎のプログラミングが可能であり、無関係の箇所を誤って編集する等のプログラミングミスを防止することができるとともに、開発または変更すべき箇所の特定が容易となる。この結果、プログラム開発時間をより短くすることができる。
【００８０】
コンピュータ５０またはＣＰＵ７０は、それぞれ１台である必要はなく、複数台のコンピュータ５０およびＣＰＵ７０が協働して作動する形式であってもよい。マクロプログラム８２は、第１〜第７タスク１００〜１１２に対して、それぞれ個別に用意されていてもよい。
【００８１】
また、上述の実施の形態においては、変換部１１６および複数のオブジェクト１２２は第１〜第７タスク１００〜１１２にそれぞれ組み込まれている形式として説明したが、変換部１１６および複数のオブジェクト１２２は、第１〜第７タスク１００〜１１２に共通で使用する形式のものであってもよく、実行ファイル８０とは別ファイルとして用意されていてもよい。第１〜第７タスク１００〜１１２は、１つの実行ファイル８０として一体になっている必要はなく、それぞれ個別のファイルであってもよい。
【００８２】
さらに、この発明に係るデータ処理システムおよびデータ処理方法は、上述の実施の形態例に限らず、この発明の要旨を逸脱することなく、種々の構成乃至ステップを採り得ることはもちろんである。
【００８３】
【発明の効果】
以上説明したように、本発明に係るデータ処理システムおよびデータ処理方法によれば、入力部より入力されたデータを処理して出力部を駆動するシステムで、プログラミングを要する箇所を縮減するとともに、プログラミング言語の未習熟者であっても開発および修正することができるという効果が達成される。
【００８４】
また、本発明に係るデータ処理システムおよびデータ処理方法によれば、種々のダムシステムに対して汎用的に適用することができるとともに、プログラミング言語の未習熟者であっても開発および修正することが可能となる。
【図面の簡単な説明】
【図１】本実施の形態に係るデータ処理システムおよびデータ処理方法が適用されるダムシステムを示すブロック図である。
【図２】実行ファイルの構成を示す説明図である。
【図３】マクロプログラムの一例を示す説明図である。
【図４】マクロ定義テーブルの内容を示す説明図である。
【図５】変数定義テーブルの内容を示す説明図である。
【図６】パラメータ種別定義テーブルの内容を示す説明図である。
【図７】中間コードテーブルの内容を示す説明図である。
【図８】マクロプログラムを中間コードテーブルに変換する手順を示すフローチャートである。
【図９】本実施の形態に係るデータ処理システムを用いてダムシステムを制御する手順を示すフローチャート（その１）である。
【図１０】本実施の形態に係るデータ処理システムを用いてダムシステムを制御する手順を示すフローチャート（その２）である。
【図１１】タスクがＲＡＭ上に展開された状態のメモリマップである。
【図１２】第１〜第７タスクがデータを処理する様子を模式的に表したデータフロー図である。
【符号の説明】
１０…データ処理システム　　　　　１２…ダムシステム
５０…コンピュータ　　　　　　　　５６…記録媒体
６０…入力インターフェース　　　　６６…出力インターフェース
７０…ＣＰＵ　　　　　　　　　　　７２…ＲＡＭ
７６…ハードディスク　　　　　　　７８…ＯＳ
８０…実行ファイル　　　　　　　　８２…マクロプログラム
８４…エディタ
１００、１０２、１０４、１０６、１０８、１１０、１１２…タスク
１１４…主実行部　　　　　　　　　１１６…変換部
１１８…マクロ実行部　　　　　　　１２０…データ部
１２２…オブジェクト　　　　　　　１２４…変数領域
１２６…エントリテーブル領域　　　１２８…中間コード領域
１５０…マクロ定義テーブル　　　　１５２…変数定義テーブル
１５４…パラメータ種別定義テーブル
１５６…中間コードテーブル　　　　１５８…中間コード
【図１】
2004054797.tif 000003
【図２】
2004054797.tif 000004
【図３】
2004054797.tif 000005
【図４】
2004054797.tif 000006
【図５】
2004054797.tif 000007
【図６】
2004054797.tif 000008
【図７】
2004054797.tif 000009
【図８】
2004054797.tif 000010
【図９】
2004054797.tif 000011
【図１０】
2004054797.tif 000012
【図１１】
2004054797.tif 000013
【図１２】
2004054797.tif 000014