(57)【要約】【課題】規制に準拠して適切な計算処理が可能なプログラムを容易に構築するプログラム開発支援装置を得ることを目的としている。【解決手段】複数の機能ブロックを組み合わせてプログラムを構築するプログラム開発支援装置１０であって、機能ブロック、および機能ブロックの定義根拠に関する根拠情報を管理する機能ブロックデータベース１と、保持された機能ブロックを組み合わせてプログラムのフローを定義していくためのインタフェースを生成するインタフェース生成手段３と、定義中のフローに組み込まれた機能ブロック間の変数依存関係に基づいて、機能ブロックの挿入箇所を抽出する挿入箇所抽出手段４と、抽出した挿入箇所に挿入すべき候補ブロック列を生成する候補ブロック列生成手段５と、根拠情報と、あらかじめ定めた基準とに基づいて、生成した候補ブロック列の妥当性を判定する妥当性判定手段６と、を備えた。【選択図】図１
2012003473.tif 000002
【特許請求の範囲】
【請求項１】
変数を用いた計算処理を定義した複数の機能ブロックを組み合わせてプログラムを構築するプログラム開発支援装置であって、
前記複数の機能ブロック、および前記複数の機能ブロックのそれぞれの計算処理を定義した際の根拠に関する根拠情報を管理する機能ブロックデータベースと、
前記機能ブロックデータベースに保持された機能ブロックを組み合わせてプログラムのフローを定義していくためのインタフェースを生成するインタフェース生成手段と、
生成したインタフェースに基づいて定義中のフローに対し、当該フローに組み込まれた機能ブロック間の変数依存関係に基づいて、機能ブロックを挿入する必要がある箇所を抽出する挿入箇所抽出手段と、
前記機能ブロックデータベースに保持された機能ブロックを用いて、前記挿入箇所抽出手段が抽出した挿入箇所に挿入すべきひとつまたは複数の機能ブロックからなる候補ブロック列を生成する候補ブロック列生成手段と、
前記候補ブロック列生成手段が生成した候補ブロック列に対し、当該候補ブロック列中の各機能ブロックの根拠情報と、あらかじめ定めた基準とに基づいて、当該候補ブロック列の妥当性を判定する妥当性判定手段と、を備え、
前記インタフェース生成手段は、前記挿入箇所抽出手段が挿入箇所を抽出した場合に、前記候補ブロック列生成手段が生成した候補ブロック列を前記妥当性とともに提示できるように前記インタフェースを生成する、
ことを特徴とするプログラム開発支援装置。
【請求項２】
前記挿入候補抽出手段が抽出した候補ブロック列の中から、当該候補ブロック列を前記フローに挿入した場合に冗長になる機能ブロックを抽出する冗長ブロック抽出手段を備え、
前記インタフェース生成手段は、前記冗長ブロック抽出手段による抽出結果を反映して前記インタフェースを生成する、
ことを特徴とする請求項１に記載のプログラム開発支援装置。
【請求項３】
前記候補ブロック列生成手段は、候補ブロック列の生成途中に、当該候補ブロック列に追加すべき機能ブロックが見つからなかったときに、当該生成途中の候補ブロック列を失敗候補ブロック列として抽出し、
前記候補ブロック列生成手段が前記失敗候補ブロック列を抽出したときに、当該失敗候補ブロック列がフローに挿入されたときに計算対象となるあるいは使用可能となる変数を抽出する変数抽出手段を備え、
前記インタフェース生成手段は、失敗候補ブロック列と変数の抽出結果とを反映して前記インタフェースを生成する、
ことを特徴とする請求項１または２に記載のプログラム開発支援装置。
【請求項４】
前記挿入候補抽出手段が抽出した候補ブロック列に対して、表示順序を判定する表示順序判定手段を備え、
前記インタフェース生成手段は、前記表示順序判定手段による判定結果を反映して前記インタフェースを生成する、
ことを特徴とする請求項１ないし３のいずれか１項に記載のプログラム開発支援装置。
【請求項５】
計算処理内容をパターン照合するためのテンプレートを管理する計算構造パターンデータベースと、
生成された候補ブロック列中の機能ブロックを前記計算構造パターンデータベースが管理するテンプレートに基づいて分類する分類化手段と、を備え、
前記インタフェース生成手段は、前記分類化手段による分類化結果を反映して前記インタフェースを生成する、
ことを特徴とする請求項１ないし４のいずれか１項に記載のプログラム開発支援装置。
【請求項６】
プラントの運転操作を制御するプラント監視制御システムであって、
前記プラントの監視制御を行うための主制御部と、
前記主制御部を動作させるためのプログラムを構築する請求項１ないし５のいずれか１項に記載のプログラム開発支援装置と、
を備えたことを特徴とするプラント監視制御システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、原子力発電プラント等のプラントを監視制御するためのプログラム開発を支援するためのプログラム開発支援装置および当該プログラム開発支援装置を備えたプラント監視制御システムに関する。
【背景技術】
【０００２】
工場や発電設備といったプラントでは、プラント全体を集中して監視するプラント監視制御システムを介してプラントの運転制御を行っている。そして、電流、電圧、温度、圧力、流量等のプロセス値や、プロセス値を制御するための、各機器の制御値といった運転制御情報等は、プラント監視制御システムに集約され、プラントの運転状況を確認しながら操作できるようになっている。そのため、プラントを監視制御するためのプログラムは、プラントの高度化に伴い複雑化するとともに、法令や仕様書といった規定の変更に応じて迅速に変更する必要があり、効率的にプログラムを構築する方法が望まれている。
【０００３】
計算機能が適切に発揮できるプログラムを効率よく構築するためのアプローチとして、計算機能に含まれる個々の計算処理を部品化し、それらを組み合わせることが考えられる。一般に、計算処理を部品化する場合、部品化する計算処理の計算内容のみを機能部品（機能ブロック）として定義し、入力された値に対して所望の計算を実行した結果を返す方法が取られる。しかしながら、プラントの監視制御等に用いられるプログラムでは、各機能部品が用いる変数に依存関係があり、実行順序に制約が生じる。つまり、ある変数の値を参照する機能部品を実行する前には、その変数に値を代入する機能部品を実行する必要がある。この制約に反する順序で機能部品を組み合わせると、代入されていない変数値を参照してしまうことになる。そのため、構築したプログラムを繰り返し修正する必要があり、効率的なプログラム構築ができなかった。そこで、各機能部品に対して、それぞれの機能部品中で使用されている変数の参照関係の情報を関連付け、各機能部品で使用されている変数の参照関係に基づいて、各機能部品の組合せ順序を適切に並べるプログラム結合支援装置が提案されている（例えば、特許文献１参照。）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００４−３４８６６７号公報（段落００４９〜００５２、００９０〜０１０２、図２〜図４、図８〜図１０）
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、上記のように変数の参照関係でプログラムを構築した場合、計算処理としては実行可能なプログラムを構築することができるが、用いられた機能ブロックがどのような基準で定義されたかが考慮されていない。そのため、プラントの監視制御システムのように、法令や仕様書等の規制に基づいて運転制御を行う必要があるシステムでは、構築したプログラムが法令や仕様書に適合しているか点検し、適合していない場合にはプログラムを修正する必要があった。
【０００６】
本発明は、上記のような課題を解決するためになされたもので、法令や仕様書といった規制がある場合にも、規制に準拠して適切な計算処理が可能なプログラムを容易に構築するプログラム開発支援装置を得ることを目的としている。
【課題を解決するための手段】
【０００７】
本発明のプログラム開発支援装置は、変数を用いた計算処理を定義した複数の機能ブロックを組み合わせてプログラムを構築するプログラム開発支援装置であって、前記複数の機能ブロック、および前記複数の機能ブロックのそれぞれの計算処理を定義した際の根拠に関する根拠情報を管理する機能ブロックデータベースと、前記機能ブロックデータベースに保持された機能ブロックを組み合わせてプログラムのフローを定義していくためのインタフェースを生成するインタフェース生成手段と、生成したインタフェースに基づいて定義中のフローに対し、当該フローに組み込まれた機能ブロック間の変数依存関係に基づいて、機能ブロックを挿入する必要がある箇所を抽出する挿入箇所抽出手段と、前記機能ブロックデータベースに保持された機能ブロックを用いて、前記挿入箇所抽出手段が抽出した挿入箇所に挿入すべきひとつまたは複数の機能ブロックからなる候補ブロック列を生成する候補ブロック列生成手段と、前記候補ブロック列生成手段が生成した候補ブロック列に対し、当該候補ブロック列中の各機能ブロックの根拠情報と、あらかじめ定めた基準とに基づいて、当該候補ブロック列の妥当性を判定する妥当性判定手段と、を備え、前記インタフェース生成手段は、前記挿入箇所抽出手段が挿入箇所を抽出した場合に、前記候補ブロック列生成手段が生成した候補ブロック列を前記妥当性とともに提示するためのインタフェースを生成することを特徴とする。
【発明の効果】
【０００８】
本発明のプログラム開発支援装置によれば、機能ブロックの計算処理を定義するための法令、規則あるいは仕様書等のような根拠情報を管理し、フロー中に挿入すべき候補ブロック列を生成した時に、根拠情報に基づいて生成した候補ブロックの妥当性を評価するようにしたので、法令や仕様書といった規制がある場合にも、規制に準拠して適切な計算処理が可能なプログラムを容易に構築するプログラム開発支援装置を得ることができる。
【図面の簡単な説明】
【０００９】
【図１】本発明の実施の形態１にかかるプログラム開発支援装置の構成を示す機能ブロック図である。
【図２】本発明の実施の形態１にかかるプログラム開発支援装置を備えたプラント監視制御システムの構成を示す機能ブロック図である。
【図３】本発明の実施の形態１にかかるプログラム開発支援装置で扱うプログラムを構成する機能ブロックの内容を説明するための図である。
【図４】本発明の実施の形態１にかかるプログラム開発支援装置で扱うプログラムのフローの内容を説明するための図である。
【図５】本発明の実施の形態１にかかるプログラム開発支援装置を用いてプログラムを構築する際の操作者とのインタフェースとなる画面表示例を示す図である。
【図６】本発明の実施の形態１にかかるプログラム開発支援装置の挿入箇所抽出手段の動作を示すフローチャートである。
【図７】本発明の実施の形態１にかかるプログラム開発支援装置の挿入箇所抽出手段でのデータ処理動作を説明するための具体例である。
【図８】本発明の実施の形態１にかかるプログラム開発支援装置の挿入箇所抽出手段でのデータ処理動作を説明するための具体例である。
【図９】本発明の実施の形態１にかかるプログラム開発支援装置の挿入候補抽出手段の動作を示すフローチャートである。
【図１０】本発明の実施の形態１にかかるプログラム開発支援装置の挿入候補抽出手段の動作を説明するための具体例である。
【図１１】本発明の実施の形態１にかかるプログラム開発支援装置の挿入候補抽出手段の動作を説明するための具体例である。
【図１２】本発明の実施の形態１にかかるプログラム開発支援装置の挿入候補抽出手段の動作を説明するための具体例である。
【図１３】本発明の実施の形態１にかかるプログラム開発支援装置の妥当性判定手段の動作を示すフローチャートである。
【図１４】本発明の実施の形態１にかかるプログラム開発支援装置の妥当性判定手段の動作を説明するための具体例である。
【図１５】本発明の実施の形態１にかかるプログラム開発支援装置を用いてプログラムを構築する際の操作者とのインタフェースとなる画面表示例を示す図である。
【図１６】本発明の実施の形態１にかかるプログラム開発支援装置を用いてプログラムを構築する際の操作者とのインタフェースとなる画面表示例を示す図である。
【図１７】本発明の実施の形態１にかかるプログラム開発支援装置の全体動作を示すフローチャートである。
【図１８】本発明の実施の形態１の変形例にかかるプログラム開発支援装置の全体動作を示すフローチャートである。
【図１９】本発明の実施の形態２にかかるプログラム開発支援装置の構成を示す機能ブロック図である。
【図２０】本発明の実施の形態２にかかるプログラム開発支援装置の全体動作を示すフローチャートである。
【図２１】本発明の実施の形態２にかかるプログラム開発支援装置の冗長ブロック抽出手段の動作を示すフローチャートである。
【図２２】本発明の実施の形態１にかかるプログラム開発支援装置の冗長ブロック抽出手段の動作を説明するための具体例である。
【図２３】本発明の実施の形態２にかかるプログラム開発支援装置を用いてプログラムを構築する際の操作者とのインタフェースとなる画面表示例を示す図である。
【図２４】本発明の実施の形態３にかかるプログラム開発支援装置の構成を示す機能ブロック図である。
【図２５】本発明の実施の形態３にかかるプログラム開発支援装置の全体動作を示すフローチャートである。
【図２６】本発明の実施の形態３にかかるプログラム開発支援装置の候補ブロック列生成手段の動作を示すフローチャートである。
【図２７】本発明の実施の形態３にかかるプログラム開発支援装置の変数抽出手段の動作を説明するための具体例である。
【図２８】本発明の実施の形態３にかかるプログラム開発支援装置を用いてプログラムを構築する際の操作者とのインタフェースとなる画面表示例を示す図である。
【図２９】本発明の実施の形態４にかかるプログラム開発支援装置の構成を示す機能ブロック図である。
【図３０】本発明の実施の形態４にかかるプログラム開発支援装置の全体動作を示すフローチャートである。
【図３１】本発明の実施の形態４にかかるプログラム開発支援装置の表示順序判定手段の動作を示すフローチャートである。
【図３２】本発明の実施の形態４にかかるプログラム開発支援装置の表示順序判定手段の部分動作を示すフローチャートである。
【図３３】本発明の実施の形態４にかかるプログラム開発支援装置の冗長ブロック抽出手段の動作を説明するための具体例である。
【図３４】本発明の実施の形態４にかかるプログラム開発支援装置の表示順序判定手段の部分動作を示すフローチャートである。
【図３５】本発明の実施の形態４にかかるプログラム開発支援装置の冗長ブロック抽出手段の動作を説明するための具体例である。
【図３６】本発明の実施の形態４にかかるプログラム開発支援装置の表示順序判定手段の部分動作を示すフローチャートである。
【図３７】本発明の実施の形態４にかかるプログラム開発支援装置の冗長ブロック抽出手段の動作を説明するための具体例である。
【図３８】本発明の実施の形態４にかかるプログラム開発支援装置を用いてプログラムを構築する際の操作者とのインタフェースとなる画面表示例を示す図である。
【図３９】本発明の実施の形態５にかかるプログラム開発支援装置の構成を示す機能ブロック図である。
【図４０】本発明の実施の形態５にかかるプログラム開発支援装置の全体動作を示すフローチャートである。
【図４１】本発明の実施の形態５にかかるプログラム開発支援装置の計算構造パターンＤＢで管理するデータの具体例を示す図である。
【図４２】本発明の実施の形態５にかかるプログラム開発支援装置の分類化手段の動作を示すフローチャートである。
【図４３】本発明の実施の形態５にかかるプログラム開発支援装置を用いてプログラムを構築する際の操作者とのインタフェースとなる画面表示例を示す図である。
【図４４】本発明の実施の形態５にかかるプログラム開発支援装置を用いてプログラムを構築する際の操作者とのインタフェースとなる画面表示例を示す図である。
【発明を実施するための形態】
【００１０】
実施の形態１．
本発明の実施の形態１にかかるプログラム開発支援装置およびプログラム開発支援装置を備えたプラント監視制御システムについて図を用いて説明する。図１〜図１８は本実施の形態１にかかるプログラム開発支援装置およびプログラム開発支援装置を備えたプラント監視制御システムについて説明するためのもので、図１はプログラム開発支援装置の構成を示すブロック図、図２はプログラム開発支援装置を備えたプラント監視制御システムの構成を示すブロック図、そして、図３〜図１６はプログラム開発支援装置の各手段における動作を説明するための図で、各手段において扱うデータ構造、表示画面あるいは動作手順を示すフローチャートである。そして、図１７はプログラム開発支援装置の全体動作を説明するためのフローチャート、図１８は変形例にかかる全体動作を説明するためのフローチャートである。
【００１１】
図１は本発明の実施の形態１によるプログラム開発支援装置を示すシステム構成図である。図において、プログラム開発支援装置１０は、プラント監視用プログラムを構築するための計算機能が定義された複数の機能ブロック、および後述する各機能ブロックの根拠情報を保持する機能ブロックＤＢ（Data Base）１と、機能ブロックＤＢ１に保持された機能ブロックの処理順序および制御構造を定義していくためのインタフェースを生成する入出力インタフェース生成手段３と、入出力インタフェース生成手段３でフローを定義する過程で、機能ブロック間の変数依存関係から新たに機能ブロックを挿入する必要がある位置、つまりフロー中の機能ブロック挿入箇所を抽出する挿入箇所抽出手段４と、機能ブロックＤＢ１に保持された機能ブロックの中から、挿入箇所抽出手段が抽出した挿入箇所に挿入すべきひとつまたは複数の機能ブロックからなる候補ブロック列を生成する候補ブロック列生成手段５と、入出力インタフェース生成手段３で機能ブロックを表示する際に、機能ブロック毎に対応した根拠情報を基に、当該機能ブロックの妥当性を判定する妥当性判定手段６と、入出力インタフェース生成手段３で定義した機能ブロックの処理順序および制御構造についての情報を保持するフローＤＢ（Data Base）２と、を備えている。そして、入出力インタフェース生成手段３で生成したインタフェースは、タッチパネルやマウス、ディスプレイ等の入出力手段２０を介して表示したり入力を受け付けたりするように構成している。
【００１２】
また、本実施の形態１にかかるプログラム開発支援装置１０は、図２に示すように原子力発電プラント２００の監視制御を行うプラント監視制御システム１００の主制御部１０１内に設置されており、さらに、入出力手段２０はプラント監視制御システム１００の入出力部１２０内に、機能ブロックＤＢ１とフローＤＢ２は、プラント監視制御システム１００のデータベース１０２内に設けられ、構築したプログラムをプラント監視制御システム１００ですぐに使用できるようになっている。なお、プログラム開発支援装置１０は、必ずしもプラント監視制御システム内に設置する必要はなく、独立して形成するようにしてもよい。
【００１３】
つぎに、プラント監視システムを構成する各手段について詳細に説明する。
＜機能ブロックデータベース＞
機能ブロックＤＢ１は、あらかじめ定義された機能ブロックおよび各機能ブロックに対応する根拠情報を保持する。ここで機能ブロックは、計算処理と変数を定義したものであり、外部システムからの入力値を変数に代入する入力処理、変数の値を参照して外部システムへ出力する出力処理、変数値を参照する計算結果を別の変数に代入する計算処理に分類される。そして、根拠情報は、計算機能の実行においては直接関わらない情報であるが、同様の計算機能を実現する機能ブロックが複数ある場合に、適切な機能ブロックを選択するための情報である。具体的には、機能ブロック定義時の状態を表す情報、機能ブロックを定義するにあたり、制約を受けた法令、規則、または仕様書といった根拠となった文書についての情報、定義後に手動で付加される情報などがある。定義状態を表す情報として、定義日時などがある。入力文書についての情報として、文書名称、文書バージョン番号、文書の作成日時、文書が参照する法令名、開発方針などがある。これらの情報は、機能ブロック定義時に自動的に読み込まれるか、操作者が手動で入力する。定義後に付加される情報として、プログラム構築を行う操作者の嗜好、法令の廃止などがある。
【００１４】
図３に機能ブロックの例を示す。図３において、機能ブロックＢ０３１は外部システムからの入力値を変数ｉｎ１に代入する入力処理が定義され、機能ブロックＢ０３２は変数ｏｕｔの値を参照して外部システムに出力する出力処理が定義され、機能ブロックＢ０３３は変数ｉｎ１と変数ｉｎ２の値を参照して加算した結果を変数ｏｕｔに代入する計算処理が定義されたものである。
【００１５】
＜フローデータベース＞
フローＤＢ２は、入出力インタフェース生成手段３で定義した機能ブロックの処理順序および、条件分岐、繰り返しといった制御構造についての情報を保持する。図４に保持したフローの例を示す。図において、フローＦ０４１およびＦ０４２では、外部システムからの入力値をｉｎ１とｉｎ２に代入する機能ブロックＢ０４１、Ｂ０４２をそれぞれ実行する。Ｆ０４３では、ｉｎ１の値がｉｎ２の値より大きければｉｎ１からｉｎ２を減算した値をｏｕｔに代入する機能ブロックＢ０４３を、ｉｎ１の値がｉｎ２の値以下であればｉｎ２からｉｎ１を減算した値をｏｕｔに代入する機能ブロックＢ０４４を実行する。そして、Ｆ０４４では、ｏｕｔの値を外部システムに出力する機能ブロックＢ０４５を実行する事を示す。
【００１６】
＜入出力インタフェース生成手段＞
入出力インタフェース生成手段３は、機能ブロックＤＢ１に保持された機能ブロックの処理順序および制御構造を定義していくためのインタフェースを生成するものである。生成したインタフェースは、入出力手段８を介してプログラム開発者（操作者）に提示され、必要な情報を入力させることで、容易にプログラムを構築できるようになる。
【００１７】
フローを定義する際のインタフェースは、例えば入出力手段２０において、図５のような定義画面によって表示される。図５における定義画面はフローを構成するための機能ブロックの一覧を示す部品領域ＡＰ０５１と、フローを定義する作業領域ＡＷ０５１とで構成する。部品領域ＡＰ０５１には、機能ブロックＤＢが管理する機能ブロックの一覧を表示する。作業領域ＡＷ０５１はフローの定義開始時は空白となっており、部品領域ＡＰ０５１から機能ブロックを選んで作業領域ＡＷ０５１の任意の位置にドラッグ＆ドロップすることで、機能ブロックの実行順序を定義することができる。また作業領域ＡＷ０５１では、任意の位置で制御構造を指定し、構造内で実行する機能ブロックおよび実行条件などを指定できる。
【００１８】
入出力インタフェース生成手段３において生成したインタフェースを用いて、フローを定義している途中で、挿入可能な候補ブロック列の生成についての要求コマンドが入力されると、挿入箇所抽出手段４および候補ブロック列生成手段５に対して、その時点でのフロー内で機能ブロックを挿入するべき箇所およびその箇所に対応した候補ブロック列を出力させるようにする。要求コマンドの入力は、例えば、定義画面横に候補ブロック列生成を意味するアイコンを表示しておき、アイコンがクリックされることにより、要求コマンドが入力されるようにしてもよい。また、作成中のフローのフローＤＢ２への登録を要求した時や、フローからのソースコード生成を要求した時に自動的に挿入箇所の抽出や候補ブロック列生成を開始するようにしてもよい。挿入箇所の抽出と候補ブロック列生成の開始時には、その時点でのフロー定義内容を挿入箇所抽出手段４に出力する。
【００１９】
＜挿入箇所抽出手段＞
挿入箇所抽出手段４は、入出力インタフェース生成手段３で定義中のフローを構成する機能ブロック間の変数依存関係から、値を定義されずに参照されている変数を検出し、候補ブロック列を挿入するべき箇所を抽出する。挿入箇所抽出手段４における処理の流れの一例を、図６のフローチャートを用いて説明する。
【００２０】
はじめに、入出力インタフェース生成手段３から入力されたフロー定義内容に基づいて、分岐毎機能ブロック列を生成する（Ｓｔｅｐ１−１）。ここで分岐毎機能ブロック列は、フロー中に定義された条件分岐の条件毎に、実行される機能ブロック列である。Ｓｔｅｐ１−２では、Ｓｔｅｐ１−１で生成された分岐毎機能ブロック列を順に処理対象として、Ｓｔｅｐ１−３へ進む。分岐毎機能ブロック列が全て処理済みであればＳｔｅｐ１−８へ進む。
【００２１】
Ｓｔｅｐ１−３では、処理対象である分岐毎機能ブロック列における代入済み変数リスト、計算対象変数リスト、使用可能変数リストを空で初期化する。ここで、代入済み変数リストは、機能ブロック列を実行する際の各時点において、既に値を代入されており、参照することができる変数のリストである。また、計算対象変数リストは、生成する候補ブロック列中で最終的に代入されている必要がある変数のリストであり、使用可能変数リストは、候補ブロック列中で最初から参照できる変数のリストである。
【００２２】
Ｓｔｅｐ１−４では、当該分岐毎機能ブロック列中の機能ブロックを前から順に処理対象としてＳｔｅｐ１−５に進む。機能ブロックが全て処理済みであればＳｔｅｐ１−９に進む。Ｓｔｅｐ１−５では、当該機能ブロックで参照される変数および代入される変数を抽出する。Ｓｔｅｐ１−６では、当該機能ブロックで参照される変数が代入済み変数リストに存在しない場合（「Ｎ」）、当該変数をエラー変数としてＳｔｅｐ１−７に進む。存在する場合（「Ｙ」）、Ｓｔｅｐ１−８に進む。
【００２３】
Ｓｔｅｐ１−７では、Ｓｔｅｐ１−６でエラー変数とされた変数を計算対象変数リストに追加する。また、この時点で挿入箇所が決定されていなかった場合、当該機能ブロックの直前を挿入箇所とし、この時点での代入済み変数リストを使用可能変数とする。Ｓｔｅｐ１−８では、当該機能ブロックで代入される変数を代入済み変数リストに追加する。
【００２４】
Ｓｔｅｐ１−９では、候補ブロック列生成要求を生成する。候補ブロック列生成要求は、当該分岐機能ブロック列における挿入箇所、計算対象変数リストおよび使用可能変数リストで構成される。ここで計算対象変数リストが空である場合は候補ブロック列生成要求を生成しない。以上の処理が終了した時点で、分岐毎機能ブロック列毎に生成された挿入候補ブロック列生成要求を候補ブロック列生成手段５に出力する。
【００２５】
図７を用いて、出力処理のみを定義したフローＩＦ０７を入力として挿入箇所を抽出する例で説明する。この例では、入力されたフローＩＦ０７に条件分岐がないため、定義された２つの機能ブロックＢ０７１、Ｂ０７２の組がそのまま分岐毎機能ブロック列ＢＣ０７１となる。１番目の機能ブロックＢ０７１の実行時点では代入済み変数が存在しないが、変数ｏｕｔ１を参照しようとしている（参照する変数としてｏｕｔ１がある）。このため、この機能ブロックＢ０７１の直前が挿入箇所となり、使用可能変数リストＬＶＡ０７は空となる。また、計算対象変数リストＬＶＣ０７にｏｕｔ１が追加される。２つ目の機能ブロックの実行時点では代入済み変数リストにｏｕｔ１が追加されているが、ここでは変数ｏｕｔ２を参照しようとしている。このため、ｏｕｔ２も計算対象変数リストＬＶＣ０７に追加される。以上のようにして、「挿入箇所ＬＩ０７：１番目」、「計算対象変数ＬＶＣ０７：ｏｕｔ１およびｏｕｔ２」、「使用可能変数ＬＶＡ０７：なし」、とする挿入候補ブロック列生成要求ＳＲ０７が出力される。
【００２６】
図８を用いて、入力処理、計算処理、出力処理および制御構造を定義したフローＩＦ０８を入力として挿入箇所を抽出する例について説明する。この例では、変数ｉｎ１およびｉｎ２を外部システムから入力し、ｉｎ１の値に応じて変数ｏｕｔ１および変数ｏｕｔ２の計算方法を切り替え、ここで計算されたｏｕｔ１およびｏｕｔ２の値を外部システムへ出力する機能ブロックを指定している。ただし、この例では、ｉｎ１が０以下であった場合の処理内容にｏｕｔ２の計算が含まれていないため、正しく計算できない。この例ではまず、ｉｎ１が０より大きかった場合とｉｎ１が０以下であった場合について、分岐毎機能ブロック列ＢＣ０８１とＢＣ０８２を生成する。ｉｎ１が０より大きかった場合の分岐毎機能ブロック列ＢＣ０８１では処理が不足していないため、挿入候補ブロック列生成要求を生成しない。
【００２７】
ｉｎ１が０以下であった場合の分岐毎機能ブロック列ＢＣ０８２では、５番目の機能ブロックＢ０８２５の実行時点における代入済み変数はｉｎ１、ｉｎ２およびｏｕｔ１であるが、ｏｕｔ２を参照しようとしている。このため、この機能ブロックＢ０８２５の直前が挿入箇所となり、使用可能変数ＬＶＡ０８はｉｎ１、ｉｎ２およびｏｕｔ１である。また、計算対象変数リストにｏｕｔ２が追加される。以上のようにして、「挿入箇所ＬＩ０８：５番目」、「計算対象変数ＬＶＣ０８：ｏｕｔ２」、「使用可能変数ＬＶＡ０８：ｉｎ１、ｉｎ２およびｏｕｔ１」として、挿入候補ブロック列生成要求ＳＲ０８が出力される。
【００２８】
＜候補ブロック列生成手段＞
候補ブロック列生成手段５は、挿入箇所抽出手段４で抽出された箇所に挿入する候補となるひとつまたは複数の機能ブロックからなる候補ブロック列を生成し、出力する。候補ブロック列生成手段５における処理の流れの一例を、図９のフローチャートに示す。この処理は再帰的に呼び出され、候補ブロック列になりうるブロック列を可能な限り生成していく。最初の呼び出し時の候補ブロック列は空であり、計算対象変数および使用可能変数は挿入候補ブロック列生成要求として与えられる。再帰呼び出し時は、呼び出し側の機能ブロック、計算対象変数および使用可能変数を使って処理を進める。
【００２９】
Ｓｔｅｐ２―１では、追加候補機能ブロックを機能ブロックＤＢ１から探索する。ここで追加候補機能ブロックは、その時点での計算対象変数に値を代入する機能ブロックである。Ｓｔｅｐ２−２では、Ｓｔｅｐ２−１で探索された追加候補機能ブロックを順に処理対象としてＳｔｅｐ２−３へ進む。追加候補機能ブロックが全て処理済みであれば生成処理を終了する。Ｓｔｅｐ２―３では、処理対象である機能ブロックを候補ブロック列に追加する。Ｓｔｅｐ２−４では、当該機能ブロックで代入される変数および参照される変数を抽出する。Ｓｔｅｐ２―５では、当該機能ブロックで代入される変数を計算対象変数から削除し、使用可能変数に追加する。Ｓｔｅｐ２―６では、当該機能ブロックで参照される変数が使用可能変数になければ、計算対象変数に追加する。Ｓｔｅｐ２―７では、計算対象変数がなければＳｔｅｐ２−８に進み、あればＳｔｅｐ２−９に進む。Ｓｔｅｐ２−８では、その時点での機能ブロックのひとまとまりを候補ブロック列として登録する。Ｓｔｅｐ２−９では、再帰的にＳｔｅｐ２−１からの処理を繰り返す。再帰処理終了後はＳｔｅｐ２−１０に進む。Ｓｔｅｐ２―１０では、ここで追加した機能ブロックを候補ブロック列から削除し、Ｓｔｅｐ２−５およびＳｔｅｐ２−６で変更した使用可能変数および計算対象変数を元に戻す。そして、Ｓｔｅｐ２―２からの処理を繰り返す。以上の処理が終了した時点で候補ブロック列として登録されている全ての候補ブロック列を、入出力インタフェース生成手段３に出力する。
【００３０】
機能ブロックＤＢ１に図１０に示すような機能ブロックが保存されている場合について、上記の動作を具体的に説明する。
図１１は、図７で説明した条件分岐がない場合の挿入候補ブロック列生成要求ＳＲ０７を入力として候補を生成し、候補ブロック列を生成する例を説明するものである。この例では、使用可能変数ＬＶＡ０７がなく、ｏｕｔ１およびｏｕｔ２を計算対象変数ＬＶＣ０７として生成処理を開始する。開始時点での追加候補機能ブロックのうち機能ブロック２２を追加すると、ｏｕｔ２が計算対象変数リストから使用可能変数リストに移動し、ｉｎ２およびｔｍｐが計算対象変数リストに追加される。この時点で計算対象変数が存在するため、再帰的に生成処理を繰り返す（ＡＢ１１０１）。次に機能ブロック２１を追加することで、ｏｕｔ１が計算対象変数リストから使用可能変数リストに移動し、ｉｎ１が計算対象変数に追加される（ＡＢ１１０２）。さらに、機能ブロック３１、機能ブロック０２、機能ブロック０１を追加することで、ｔｍｐ、ｉｎ２、ｉｎ１が計算対象変数リストから使用可能変数リストに移動する（ＡＢ１１０３〜ＡＢ１１０４）。ここで計算対象変数がなくなるため、この時点の機能ブロック列ＰＢ１１０１を候補ブロック列として登録する。
【００３１】
次に、最後に追加した機能ブロック０１を削除する。この時、別の追加候補機能ブロックが存在しないため再帰処理を抜け、その前に追加した機能ブロック０２を削除する。この時、追加候補機能ブロックとして機能ブロック０１が見つかるが、候補ブロック列に登録した機能ブロック列と重複するので、ここでは追加しない。さらに再帰処理を抜け、機能ブロック３１を削除して機能ブロック３２を追加する。ここでまた、機能ブロック０２および機能ブロック０１を追加し、候補ブロック列ＰＢ１１０２として登録する。同様の処理を繰り返し、最終的に７つの候補ブロック列ＰＢ１１０１〜ＰＢ１１０７を出力する。
【００３２】
図１２は、図８で説明した条件分岐がある場合の挿入候補ブロック列生成要求ＳＲ０８を入力として候補を生成し、候補ブロック列を生成する例を説明するものである。この例では、ｉｎ１、ｉｎ２およびｏｕｔ１を使用可能変数ＬＶＡ０８とし、ｏｕｔ２を計算対象変数ＬＶＣ０８として生成処理を開始する。開始時点での追加候補機能ブロックのうち機能ブロック２２を追加すると、ｏｕｔ２が計算対象変数リストから使用可能変数リストに移動し、ｔｍｐが計算対象変数リストに追加される。ｉｎ２は使用可能変数であるため、計算対象変数には追加しない。この時点で計算対象変数が存在するため、再帰的に生成処理を繰り返す（ＡＢ１２０１）。次に機能ブロック３１を追加することで、ｔｍｐが計算対象変数リストから使用可能変数リストに移動する。ここで計算対象変数がなくなるため、この時点の機能ブロック列を候補ブロック列ＰＢ１２０１として登録する（ＡＢ１２０２）。次に、最後に追加した機能ブロック３１を削除して機能ブロック３２を追加し、候補ブロック列ＰＢ１２０２として登録する（ＡＢ１２０３）。同様の処理を繰り返し、最終的に３つの候補ブロック列ＰＢ１２０１〜ＰＢ１２０３を出力する。
【００３３】
＜妥当性判定手段＞
妥当性判定手段６は、各機能ブロックの根拠情報から、当該機能ブロックをフローに使用する妥当性を判定する。妥当性判定手段６における処理の流れの一例を、図１３のフローチャートに示す。本例では、文書名称と文書バージョン番号を参照して機能ブロックの妥当性を判定する。Ｓｔｅｐ６―１では、機能ブロックＤＢ１内に保存された各機能ブロックを順に処理対象としてＳｔｅｐ６−２へ進む。機能ブロックが全て処理済みであればＳｔｅｐ６−３へ進む。Ｓｔｅｐ６―２では、処理対象である機能ブロックの文書バージョン番号を、当該機能ブロックの文書名称に対応する最新バージョン番号として記録する。当該文書名称で既に最新バージョン番号が記録されている場合、新しい方を最新バージョン番号とする。Ｓｔｅｐ６−３では、機能ブロックＤＢ１内の各機能ブロックを順に処理対象としてＳｔｅｐ６−４へ進む。機能ブロックが全て処理済みであれば判定処理を終了する。Ｓｔｅｐ６―４では、処理対象である機能ブロックの文書名称について、対応する最新バージョン番号と当該機能ブロックの文書バージョン番号とを比較し、当該機能ブロックの文書バージョン番号が古ければ、当該機能ブロックは妥当でないと判定し、判定結果を入出力インタフェース生成手段３に出力する。
【００３４】
つぎに、機能ブロックに対する妥当性判定の具体的な例を示す。図１４は、妥当性判定手段６における機能ブロックの妥当性を判定した例である。図において、妥当性判定手段６は、各機能ブロックに文書名称と文書バージョンからなる根拠情報を対応つけた表ＣＴＡＩに対して、各文書の最新バージョン番号を対応させたアップデートデータＵＰＤとを比較し、各機能ブロックの妥当性を判定する。ここでは、文書「係数定義書」について、最新バージョンがＶｅｒ０．２であるのに対し、機能ブロック３１の文書バージョンがＶｅｒ．０１と最新でないことから妥当性ＲＤを「×」と判定している。他の機能ブロックについてはそれぞれ文書名に対するバージョン番号が最新のものであることから妥当性ＲＤを「○」としている。
【００３５】
上記の例では、関連する複数の根拠情報から妥当性を判定する例を示したが、最新の定義日時の機能ブロックのみ妥当とするなど、単一の情報から判定してもよい。また、廃止となった法令名称のリストなどを別のデータとして保持しておき、当該リストに含まれる法令名称を付加属性に持つ機能ブロックは妥当でないと判定するなどとしてもよい。また、図１の構成では、妥当性判定手段６の判定結果を入出力インタフェース生成手段３に出力するように構成しているが、機能ブロックＤＢ１の更新時に妥当性判定手段６の判定結果を機能ブロックＤＢ１に反映（保存）しておき、入出力インタフェース生成手段３は機能ブロックＤＢ１から判定結果を取得するようにしてもよい。
【００３６】
入出力インタフェース生成手段３は、挿入箇所抽出手段４から出力された挿入箇所に関する情報、候補ブロック列生成手段５から出力された挿入箇所毎の挿入候補となる候補ブロック列に基づいて、定義中のフローに対して、挿入箇所とともに、挿入候補となる候補ブロック列を提示するとともに、提示した中から１つを選択できるようなインタフェースを生成し、入出力装置２０を介して表示する。これにより、プログラムの開発者（操作者）は、表示された候補ブロック列の中から一つの候補ブロック列を選択（例えば、表示画面中の対象となる候補ブロック列をクリック操作）すると、定義途中のフローにおける挿入箇所に、選択された候補ブロック列が挿入される。このとき、妥当性判定手段６で妥当でないと判定された機能ブロックまたは、妥当でないと判定された機能ブロックを含む候補ブロック列は、妥当でないことが分かるように表示する。さらに、要求コマンド（妥当でないことを示す表示部分をクリック操作）や事前の設定に基づいて妥当でない理由などを表示してもよい。
【００３７】
図１５は、図７に示すフローを定義中に、候補生成要求（候補ブロック列生成要求ＳＲ０７）に基づいて図１１に示す７つの候補ブロック列が出力された場合に挿入する候補ブロック列を選択させるために、入出力装置２０に表示させた画面の例である。また、図１６は、図８に示すフローを定義中に、候補生成要求（候補ブロック列生成要求ＳＲ０８）に基づいて図１２に示す３つの候補ブロック列が出力された場合に、挿入する候補ブロック列を選択させるために、入出力装置２０に表示させた画面の例である。
【００３８】
図１５の例では、フロー定義中の作業領域に候補ブロック列を挿入すべき位置を表示（星印）するとともに、その位置に挿入すべき候補ブロック列を一覧表示している。このとき、図１４の例で妥当でないと判定された機能ブロック（３１）を含む候補ブロック列には、禁止または注意を喚起するための禁止マークを付している。したがって、プログラムを構築する際には、禁止マークを付されていないものから候補ブロック列を選択すれば、法令や仕様書等の要求から外れた機能ブロックを含む候補ブロック列用いてしまうことを避けることが容易にできる。また、禁止マーク部分をクリックすれば、禁止マークを付けた理由（バージョンが最新でない、または更新日が古い）を表示させるようにしたり、絶対使用してはならないのか、使用する際に考慮すべきかなど、禁止の度合いによってマークの色や形式等を変えたりしておけば、容易に最適な候補ブロックを選択することができる。
【００３９】
図１６の例でもフロー定義中の作業領域に候補ブロック列を挿入すべき位置を表示（星印）するとともに、その位置に挿入すべき候補ブロック列を一覧表示している。そして、図１４の例で妥当でないと判定された機能ブロック（３１）を含む候補ブロック列を網掛けで表示し、ポインタを置かれた候補ブロック列については妥当でない理由を表示するようにしている。
【００４０】
これら一連の流れをまとめたのが、図１７に示すフローチャートである。
プログラム構築を始めたい場合、本実施の形態１にかかるプログラム開発支援装置１０を起動する。すると、はじめに、機能ブロックＤＢ１に保存されたブロック情報を呼び出す（ステップＭＳ１０）。つぎに、呼び出したブロック情報を基に、図５に示すようなフロー定義ができるインタフェースを生成する（ステップＭＳ２０）。生成したインタフェースに基づき、入出力手段２０を介して機能ブロックの選択とフローへの挿入、制御構造の指定を受け付け（ステップＭＳ３０）、挿入候補を要求するコマンドが発生したら（ＭＳ４０で「Ｙ」）、定義中のフローに対して挿入箇所抽出手段４に変数の依存性に基づいて挿入箇所を抽出（ステップＭＳ２００）させる。そして、抽出した箇所に適する候補ブロック列を候補ブロック列生成手段５に生成（ステップＭＳ２１０）させる。さらに、生成した候補ブロック列中の各機能ブロックに対し妥当性判定手段６に根拠情報に基づいた妥当性を判定（ステップＭＳ２２０）させる。すると、ステップＭＳ２０に移行し、図１５、図１６に示したように、根拠情報の妥当性を考慮して挿入する候補ブロック列を選択するためのインタフェースを生成する。
【００４１】
一方、挿入候補を要求するコマンドが発生することがなく（ＭＳ４０で「Ｎ」）ても、フロー定義を継続する動作があれば（ＭＳ１００で「Ｙ」）、ステップＭＳ３０に移行して候補ブロック列の挿入や制御構造の指定を継続して行う。あるいは、挿入候補生成を要求するコマンドが発生することがなく（ＭＳ４０で「Ｎ」）、フロー定義を継続する動作がなければ（ＭＳ１００で「Ｎ」）、プログラム構築動作を終了する。
【００４２】
以上のようにして、定義途中のフローに挿入する候補ブロック列を提示し、操作者は候補ブロック列を選択するだけで、フローを完成させることができる。図７、図１１および図１５で示した例では、外部システムに出力する変数を定義するだけで、これらの変数を計算する候補を提示し、挿入することができる。図８、図１２および図１６で示した例では、操作者がフローを誤って定義し、不足部分を把握できていない場合でも、それを補完するための候補を提示し、挿入することができる。
【００４３】
なお、上記操作例では、生成した候補ブロック列中の機能ブロックに対して根拠情報を判定する例について説明したが、例えば、図５における部品領域中内に表示された全ブロックに対して、あるいは部品領域内でカーソルを合わせた機能ブロック、あるいは部品領域から作業領域にドラッグ＆ドロップを行うときに、その機能ブロックが根拠情報に基づいて妥当か否か表示するようにしてもよい。
【００４４】
また、上記操作例では、新規にプログラムを構築する場合について説明したが、既存のプログラムを修正する場合に適用してもよい。その場合、例えば、図１８に示すように、修正したいプログラムを呼び出すステップＭＳ５をステップＭＳ１０の手前に挿入する。そして、妥当性判定手段６による判定ステップＭＳ２２０をステップＭＳ１０とＭＳ２０の間に挿入する。これにより、呼び出したプログラム中の機能ブロックやフロー定義に使用する全ての機能ブロックの法令や仕様書等への適合性を判定することができるようになる。つまり、本実施の形態にかかるプログラム開発支援装置を利用して、プログラムの新規構築だけでなく、既存のプログラムの修正も法令や仕様等への適合性を損なうことなく容易に行うことができる。
【００４５】
以上のように、本発明の実施の形態１にかかるプログラム開発支援装置によれば、変数を用いた計算処理を定義した複数の機能ブロックを組み合わせてプログラムを構築するプログラム開発支援装置１０であって、複数の機能ブロック、および複数の機能ブロックのそれぞれの計算処理を定義した際の根拠に関する根拠情報を管理する機能ブロックデータベース１と、機能ブロックデータベース１に保持された機能ブロックを組み合わせてプログラムのフローを定義していくためのインタフェースを生成する（入出力）インタフェース生成手段３と、生成したインタフェースに基づいて定義中のフローに対し、当該フローに組み込まれた機能ブロック間の変数依存関係に基づいて、機能ブロックを挿入する必要がある箇所を抽出する挿入箇所抽出手段４と、機能ブロックデータベース１に保持された機能ブロックを用いて、挿入箇所抽出手段４が抽出した挿入箇所に挿入すべきひとつまたは複数の機能ブロックからなる候補ブロック列を生成する候補ブロック列生成手段５と、候補ブロック列生成手段５が生成した候補ブロック列に対し、当該候補ブロック列中の各機能ブロックの根拠情報と、あらかじめ定めた基準とに基づいて、当該候補ブロック列の妥当性を判定する妥当性判定手段６と、を備え、インタフェース生成手段３は、挿入箇所抽出手段４が挿入箇所を抽出した場合に、候補ブロック列生成手段５が生成した候補ブロック列を妥当性とともに提示するためのインタフェースを生成するように構成したので、法令や仕様書といった規制がある場合にも、規制に準拠して適切な計算処理が可能なプログラムを容易に構築するプログラム開発支援装置を得ることができる。
【００４６】
とくに、挿入箇所抽出手段４は、インタフェースにおいて挿入候補要求（挿入候補ブロック列生成要求）を受け付けたときに、挿入箇所の抽出を行うように構成したので、操作者が必要と感じた時に、必要な候補ブロック列を提示できるので、操作性が良くなる。
【００４７】
そして、本発明の実施の形態１にかかるプラント監視制御システム１００によれば、プラント２００の監視制御を行うための主制御部１０１と、主制御部１０１を動作させるためのプログラムを構築するための上述したプログラム開発支援装置１０を備えるようにしたので、当該プラントの運転において遵守すべき法令や仕様書といった規制に準拠して適切な計算処理が可能なプログラムを容易に構築し、安全に運転管理が出来るようになる。
【００４８】
実施の形態２．
本実施の形態２にかかるプログラム開発支援装置は、実施の形態１にかかるプログラム開発支援装置に対して、フローにおいて冗長となる機能ブロックを抽出する冗長ブロック抽出手段をさらに備えたものである。図１９〜図２３は本実施の形態２にかかるプログラム開発支援装置について説明するためのもので、図１９はプログラム開発支援装置の構成を示す機能ブロック図、図２０はプログラム開発支援装置の全体動作を示すフローチャートである。そして、図２１は冗長ブロック抽出手段の動作を説明するためのフローチャート、図２２は冗長ブロック抽出手段で冗長ブロックを抽出する際のデータ処理方法を示す図、図２３は冗長ブロックの抽出結果を反映して生成したインタフェースに基づく画面表示例を示す。
【００４９】
本発明の実施の形態２にかかるプログラム開発支援装置１０Ｂの構成は、図１９に示すように、実施の形態１にかかるプログラム開発支援装置に対して冗長ブロック抽出手段７１を追加したものである。そのため、全体動作としては、図２０に示すように根拠情報の判定動作（ステップＭＳ２２０）の後に、冗長ブロックの抽出動作（ステップＭＳ３１０）が加わった。冗長ブロック抽出手段７１を備えたことにより、データ入出力関係の変化が生じるが、機能ブロックＤＢ１、フローＤＢ２、挿入箇所抽出手段４、候補ブロック列生成手段５といった他の構成の機能については、基本的に実施の形態１におけるものと同様である。また、入出力インタフェース生成手段３については、冗長ブロック抽出手段７１から出力されたデータを反映してインタフェースを生成する機能が追加されるが、その他の機能については実施の形態１と同様である。
【００５０】
＜冗長ブロック抽出手段＞
冗長ブロック抽出手段７１では、生成された候補ブロック列中の機能ブロックのそれぞれについて、当該機能ブロックまたは候補ブロック列を挿入した場合のフローにおいて冗長になる機能ブロックを抽出する。冗長ブロック抽出手段７１における処理の流れの一例を、図２１のフローチャートを用いて説明する。
【００５１】
Ｓｔｅｐ３−１では、候補ブロック列生成手段５で生成された候補ブロック列を順に処理対象としてＳｔｅｐ３−２へ進む。候補ブロック列が全て処理済みであれば抽出処理を終了する。Ｓｔｅｐ３―２では、ユーザが指定したフローに当該候補ブロック列を挿入した機能ブロック列を生成し、挿入後機能ブロック列とする。Ｓｔｅｐ３−３では、挿入後機能ブロック列における挿入箇所より前の機能ブロックを順に判定対象としてＳｔｅｐ３−４へ進む。挿入箇所より前の機能ブロックが全て判定済みであれば、処理対象である候補ブロック列の処理を終了する。Ｓｔｅｐ３−４では、判定対象である機能ブロックで代入される変数を判定対象変数として抽出する。
【００５２】
Ｓｔｅｐ３―５では、挿入後機能ブロック列における判定対象機能ブロックより後の機能ブロックを順に比較対象としてＳｔｅｐ３−６へ進む。判定対象機能ブロックより後の機能ブロックがすべて比較済みであれば、Ｓｔｅｐ３−８へ進む。Ｓｔｅｐ３−６では、比較対象である機能ブロックで参照している変数を抽出する。
【００５３】
Ｓｔｅｐ３―７では、比較対象である機能ブロックで判定対象変数を参照していたら（「Ｙ」）、Ｓｔｅｐ３−９へ進む。そうでなければ（「Ｎ」）、比較対象である機能ブロックに対する比較処理を終了する。Ｓｔｅｐ３−８では、判定対象である機能ブロックは冗長ではないと判定し、当該機能ブロックに対する判定処理を終了する。Ｓｔｅｐ３―９では、判定対象である機能ブロックは冗長機能ブロックであると判定し、当該機能ブロックに対する判定処理を終了する。最終的に、各候補ブロック列に対する判定結果を出力する。
【００５４】
冗長ブロック抽出手段７１での抽出動作の具体的な例について、図２２を用いて説明する。図２２に示すような機能ブロックが機能ブロックＤＢ１に登録されている状態で、フローＩＦ０２１を定義し、候補の生成を要求すると、機能ブロックＢ０２１３を挿入箇所として、７つの候補ブロック列ＰＢ２１１〜ＰＢ２１７が生成される。この７つの候補ブロック列に対して、５つの冗長ブロックＲＢ２１３〜ＲＢ２１７が抽出される。図中候補ブロックＰＢ２１３、ＰＢ２１４あるいはＰＢ２１７を操作者が選択した場合、当該候補ブロック列をフローＩＦ０２１に挿入すると、機能ブロック０１で代入される変数ｉｎ１の値を参照する機能ブロックが含まれないため、挿入後のフローでは機能ブロック０１が冗長となる。同様に、候補ブロック列ＰＢ２１５、ＰＢ２１６あるいはＰＢ２１７をフローＩＦ０２１に挿入すると、挿入後のフローで機能ブロック０２が冗長となる。これらの冗長な機能ブロックは、操作者が誤って定義したものである可能性がある。
【００５５】
そして、入出力インタフェース生成手段３では、図２３に示すように、実施の形態１におけるものと同様に、候補ブロック列のリストを表示するとともに、挿入箇所（星印）に当該候補ブロック列を挿入した場合に、フローにおいて冗長となる冗長ブロックを表示する。ここで、冗長ブロックがある候補ブロック列をユーザが選択した場合、定義途中のフローに選択された候補ブロック列を挿入するとともに、フローから冗長ブロックを削除する。なお、図２３は、機能ブロック（３１）の根拠情報が妥当でないと判定されている場合の例である。
【００５６】
冗長ブロックを削除するかどうかは、ユーザに確認（確認用インタフェース生成）してもよい。また、冗長ブロックが存在する候補ブロック列を表示しないようにしてもよいし、冗長ブロックがない候補ブロック列がある場合は冗長ブロックがある候補ブロック列を表示せず、冗長ブロックがない候補ブロック列がない場合は冗長ブロックがある候補ブロック列を表示するようにしてもよい。
【００５７】
なお、この例では候補ブロック列生成と冗長ブロック抽出の処理を分けて記述したが、各候補ブロック列を生成する都度に冗長ブロックを抽出するようにしてもよい。また、実施の形態１で説明したように、候補ブロック列の生成要求がない場合でも、例えば、ある機能ブロックを部品領域から作業領域にドラッグ＆ドロップした際に、フロー中に冗長ブロックが生じるかどうかを判定したり、最終的にフローを登録する際に冗長となるブロックが有るか否かを判定したりするようにしてもよい。
【００５８】
以上のように、本実施の形態２にかかるプログラム開発支援装置１０Ｂによれば、挿入候補抽出手段５が抽出した候補ブロック列の中から、当該候補ブロック列をフローに挿入した場合に冗長になる機能ブロックを抽出する冗長ブロック抽出手段７１を備え、（入出力）インタフェース生成手段３は、冗長ブロック抽出手段７１による抽出結果を反映してインタフェースを生成する、ようにしたので、冗長ブロックのないフローを容易に定義することができる。
【００５９】
実施の形態３．
本実施の形態３にかかるプログラム開発支援装置は、実施の形態１にかかるプログラム開発支援装置に対して、フローにおいて参照する変数を導き出せない失敗候補ブロック列を抽出し、失敗候補ブロック列に対して計算対象変数および使用可能変数を抽出できるように、候補ブロック列生成手段に追加機能を設け、変数抽出手段をさらに備えたものである。図２４〜図２８は本実施の形態３にかかるプログラム開発支援装置について説明するためのもので、図２４はプログラム開発支援装置の構成を示す機能ブロック図、図２５はプログラム開発支援装置の全体動作を示すフローチャートである。そして、図２６は機能を追加した候補ブロック列生成手段の動作を説明するためのフローチャート、図２７は候補ブロック列生成手段における失敗候補ブロック列を抽出し、変数抽出手段での計算対象変数および使用可能変数を抽出する際のデータ処理方法を示す図、図２８は失敗候補列および変数の抽出結果を反映して生成したインタフェースに基づく画面表示例を示す。
【００６０】
本発明の実施の形態３にかかるプログラム開発支援装置１０Ｃの構成は、図２４に示すように、実施の形態１にかかるプログラム開発支援装置に対して候補ブロック列生成手段５２が追加機能を有し、変数抽出手段７２を追加したものである。そのため、全体動作としては、図２５に示すように、候補ブロック生成動作の内容が一部変更になり（ステップＭＳ２１２）、根拠情報の判定動作（ステップＭＳ２２０）の後に、計算対象変数および使用可能変数の抽出動作（ステップＭＳ３２０）が加わった。候補ブロック列生成手段７２を備えたことにより、データ入出力関係の変化が生じるが、機能ブロックＤＢ１、フローＤＢ２、挿入箇所抽出手段４、といった他の構成の機能については、基本的に実施の形態１におけるものと同様である。また、入出力インタフェース生成手段３については、候補ブロック列生成手段５２から出力されるデータの相違、および変数抽出手段７２から出力されたデータを反映してインタフェースを生成する機能が追加されるが、その他の機能については実施の形態１と同様である。
【００６１】
候補ブロック列生成手段５２では、候補ブロック列の生成中に、追加すべき機能ブロックが見当たらなくなった場合に、その候補ブロック列を失敗候補列として登録する。候補ブロック列生成手段５２における処理の流れの一例を、図２６のフローチャートを用いて説明する。図２６におけるＳｔｅｐ２−１〜Ｓｔｅｐ２−１０は、実施の形態１における候補ブロック列生成手段５の説明で用いた図９におけるＳｔｅｐ２−１〜Ｓｔｅｐ２−１０と同様の動作をする。Ｓｔｅｐ２―１１では、追加する機能ブロックが１つも存在しなかった場合は、失敗候補ブロック列として登録する。最終的に、全ての候補ブロック列および失敗候補ブロック列を出力する。
【００６２】
＜変数抽出手段＞
変数抽出手段７２では、候補ブロック列生成手段５２が出力した失敗候補ブロック列について、当該失敗候補ブロック列をフローに挿入した場合の計算対象変数および使用可能変数を抽出し、それらの情報を入出力インタフェース生成手段３に出力する。変数抽出手段７２における変数抽出の具体例について、図２７を用いて説明する。図２７において、フローＩＦ０２７を定義中に、ｏｕｔ１およびｏｕｔ２を計算対象変数とする候補ブロック列生成要求が出力されたとする。この要求に対する候補ブロック列としてｉｎ２の値を参照する機能ブロック（２２）が抽出されるが、ｉｎ２に値を代入する機能ブロックが機能ブロックＤＢ１に登録されていないため、候補ブロック列を完成させることができない。
【００６３】
そこで、候補ブロック列生成手段５２は、ｉｎ２の値を参照する機能ブロックを追加した４つの機能ブロック列が、失敗候補ブロック列ＦＢ２７１〜ＦＢ２７４として抽出する。変数抽出手段７２では、さらに、これらの失敗候補ブロック列を挿入した場合の計算対象変数および使用可能変数が、失敗候補ブロック列に対応して、計算対象変数ＦＶＣ２７および使用可能変数ＦＶＡ２７として抽出される。
【００６４】
この例では、失敗候補ブロック列の生成と変数抽出の処理を分けて記述したが、各失敗候補ブロック列を生成する都度に計算対象変数および使用可能変数を抽出してもよい。
【００６５】
入出力インタフェース生成手段３では、図２８に示すように、実施の形態１におけるものと同様に、候補ブロック列のリストを表示するとともに、失敗候補ブロック列のリストおよび各失敗候補ブロック列を挿入した場合の計算対象変数および使用可能変数を表示する。なお、図２８では、説明を簡略にするため根拠情報判定等の他の要素の表示については記載を省略している。図２８のような表示画面において、失敗候補ブロック列をユーザが選択（クリック）した場合、対応する不足変数を外部から入力する機能ブロックを機能ブロックＤＢ１に登録し、再度候補ブロック列生成要求を出力する。
【００６６】
生成するインタフェース（画面表示）は、計算対象変数および使用可能変数を提示し、使用可能変数を参照して計算対象変数を代入する機能ブロックを操作者が編集・登録する環境を提供するようにしてもよい。また、使用可能変数を参照して計算対象変数を代入する機能ブロックを例示するようにしてもよい。この時、計算内容は、使用可能変数を加算するものとしてもよいし、機能ブロックＤＢに登録されている機能ブロック中で多く使用されている計算内容に基づいて構成してもよい。また、候補ブロック列がある場合は失敗候補ブロック列の表示を省略して候補ブロック列のみを表示し、候補ブロック列がない場合のみ失敗候補ブロック列を表示するようにしてもよい。
【００６７】
以上のように、本実施の形態３にかかるプログラム開発支援装置１０Ｃによれば、候補ブロック列生成手段５２は、候補ブロック列の生成途中に、当該候補ブロック列に追加すべき機能ブロックが見つからなかったときに、当該生成途中の候補ブロック列を失敗候補ブロック列として抽出し、候補ブロック列生成手段５２が失敗候補ブロック列を抽出したときに、当該失敗候補ブロック列がフローに挿入されたときに計算対象となるあるいは使用可能となる変数を抽出する変数抽出手段７２を備え、（入出力）インタフェース生成手段３は、失敗候補ブロック列と変数の抽出結果とを反映してインタフェースを生成する、ように構成したので、挿入すべき機能ブロックが保存されていなかった場合でも、必要な機能ブロックを追加したり修正したりすることが出来る。
【００６８】
実施の形態４．
本実施の形態４にかかるプログラム開発支援装置は、実施の形態１にかかるプログラム開発支援装置に対して、候補ブロック列生成手段が生成した候補ブロック列の表示順序を判定するための表示順序判定手段をさらに備えたものである。図２９〜図３８は本実施の形態４にかかるプログラム開発支援装置について説明するためのもので、図２９はプログラム開発支援装置の構成を示す機能ブロック図、図３０はプログラム開発支援装置の全体動作を示すフローチャートである。そして、図３１は表示順序判定手段の動作を説明するためのフローチャート、図３２〜図３８は表示順序判定手段における動作を説明するための図で、表示順序判定手段において扱うデータ構造、動作手順を示すフローチャート、表示順序判定手段の判定結果を反映して生成したインタフェースに基づく画面表示例を示す。
【００６９】
本発明の実施の形態４にかかるプログラム開発支援装置１０Ｄの構成は、図２９に示すように、実施の形態１にかかるプログラム開発支援装置に対して表示順序判定手段７３を追加したものである。そのため、全体動作としては、図３０に示すように根拠情報の判定動作（ステップＭＳ２２０）の後に、表示順序の判定動作（ステップＭＳ３３０）が加わった。表示順序判定手段７３を備えたことにより、データ入出力関係の変化が生じるが、機能ブロックＤＢ１、フローＤＢ２、挿入箇所抽出手段４、候補ブロック列生成手段５といった他の構成の機能については、基本的に実施の形態１におけるものと同様である。また、入出力インタフェース生成手段３については、表示順序判定手段７３から出力された判定結果についてのデータを反映してインタフェースを生成する機能が追加されるが、その他の機能については実施の形態１と同様である。
【００７０】
＜表示順序判定手段＞
表示順序判定手段７３では、生成された候補ブロック列について、あらかじめ定められた評価方法に従って、表示順序を決定するための評価値を計算する。表示順序判定手段７３における処理の流れの一例を、図３１のフローチャートを用いて説明する。Ｓｔｅｐ４―１では、各候補ブロック列について、候補ブロック列が持つ機能ブロック情報について辞書式順序に並べる評価値を計算する。Ｓｔｅｐ４―２では、各候補ブロック列について、登録済みのフローにおける機能ブロックの使用頻度による評価値を計算する。Ｓｔｅｐ４―３では、各候補ブロック列について、定義したフローと類似するフローとの重複度による評価値を計算する。
【００７１】
Ｓｔｅｐ４―１内の詳細な処理の流れの一例を、図３２のフローチャートを用いて説明する。Ｓｔｅｐ４―１―１では、機能ブロックＤＢ１内の各機能ブロックに正の整数値を割り振る。値の割り振り方は、機能ブロックを機能ブロックＤＢ１内で管理するＩＤを用いてもよいし、機能ブロックの名称に基づいて割り振ってもよい。また、機能ブロックの登録日時、更新日時など、機能ブロックＤＢ１を操作した時の情報でもよい。Ｓｔｅｐ４―１―２では、各候補ブロック列中の機能ブロックについて、評価値計算のための順序に並べ替える。この時の順序は、候補ブロック列生成時に機能ブロックを追加した順でもよいし、Ｓｔｅｐ４−１−１にて割り当てられた値が小さい順に整列してもよい。Ｓｔｅｐ４―１―３では、候補ブロック列中の機能ブロックの値に基づいて、候補ブロック列の評価値を計算する。候補ブロック列の値は、各桁に候補ブロック列中の各機能ブロックの値を持つｎ進数（ｎは機能ブロックＩＤの最大値より大きい数）として計算する。ここで桁数は、最も長い候補ブロック列中の機能ブロックの数とし、これより短いものは、不足部分に０を割り当てる。
【００７２】
候補ブロック列が持つ機能ブロックＩＤについて辞書式順序に並べる評価値を算出する例について図３３を用いて説明する。この例では、機能ブロックＤＢ１の内容、操作者が定義するフロー、生成される候補ブロック列は実施の形態２の具体例で示した図２２と同一とする。操作者が定義したフローＩＦ０３３（ＩＦ０２１と同じ）から生成された各候補ブロック列ＰＢ３３１〜ＰＢ３３７（ＰＢ２１１〜ＰＢ２１７と同じ）中の機能ブロックを機能ブロックＩＤで整列し、整列した候補ブロック列ＰＢ３３１ａ〜ＰＢ３３７ａを生成する。そして、整列した各候補ブロック列ＰＢ３３１ａ〜ＰＢ３３７ａについて、ｎ＝１００（１００進数）として評価値ＥＶ３３１ａ〜ＥＶ３３７ａを計算している。
【００７３】
Ｓｔｅｐ４―２内の詳細な処理の流れの一例を、図３４のフローチャートを用いて説明する。Ｓｔｅｐ４−２−１では、機能ブロックＤＢ中の全ての機能ブロックの使用回数を０に初期化しておく。Ｓｔｅｐ４―２―２では、フローＤＢ中のフローを順に処理対象としてＳｔｅｐ４−２−３に進む。全てのフローが処理済みであった場合、Ｓｔｅｐ４−２−５に進む。Ｓｔｅｐ４―２―３では、処理対象であるフロー中の機能ブロックを順に処理対象としてＳｔｅｐ４−２−４に進む。全ての機能ブロックが処理済みであった場合、当該フローの処理を終了し、Ｓｔｅｐ４−２−２に進む。Ｓｔｅｐ４―２―４では、処理対象である機能ブロックの使用回数を加算し、当該機能ブロックの処理を終了する。Ｓｔｅｐ４−２−５では、生成された候補ブロック列を順に処理対象としてＳｔｅｐ４−２−６に進む。全ての候補ブロック列が処理済みであった場合、生成処理を終了する。
【００７４】
Ｓｔｅｐ４−２−６では、候補ブロック列の評価値を０に初期化しておく。Ｓｔｅｐ４−２−７では、処理対象である候補ブロック列中の機能ブロックを順に処理対象としてＳｔｅｐ４−２−８に進む。全ての機能ブロックが処理済みであった場合、当該候補ブロック列の処理を終了し、Ｓｔｅｐ４−２−５に進む。Ｓｔｅｐ４−２−８では、当該機能ブロックの使用回数を候補ブロック列の評価値に加算する。最終的な候補ブロック列の評価値を、機能ブロックの使用頻度による評価値として出力する。
【００７５】
登録済みフローにおける機能ブロックの使用頻度から評価値を算出する例を図３５に示す。この例では、機能ブロックＤＢ１の内容、操作者が定義するフロー、生成される候補ブロック列は図２２の例と同一である。フローＤＢ２中の全てのフローで使われる機能ブロックの使用回数を加算し、機能ブロック２１の使用回数を２、機能ブロック２２の使用回数を２、機能ブロック３１の使用回数を４、機能ブロック３２の使用回数を１としている。操作者が定義したフローＩＦ０３３から生成された各候補ブロック列ＰＢ３３１〜ＰＢ３３７に対し、機能ブロックの使用回数を加算し、評価値ＦＶ３３１ｆ〜ＥＶ３３７ｆを算出している。
【００７６】
Ｓｔｅｐ４―３内の詳細な処理の流れの一例を、図３６のフローチャートを用いて説明する。Ｓｔｅｐ４―３―１では、操作者が指定した機能ブロックを全て使うフローをフローＤＢ１から探索し、類似フローとする。ここで、条件分岐の中に入れる候補ブロック列を生成する場合には、別の分岐から作った分岐毎機能ブロック列を類似フローとみなしてもよい。Ｓｔｅｐ４−３−２では、機能ブロックＤＢ１中の全ての機能ブロックの使用回数を０に初期化しておく。Ｓｔｅｐ４―３―３では、探索された類似フローを順に選んで処理対象とし、Ｓｔｅｐ４−３−４に進む。全ての類似フローの処理が終了していた場合、Ｓｔｅｐ４−３−６に進む。Ｓｔｅｐ４−３−４では、処理対象である類似フロー中の機能ブロックを順に選んで処理対象とし、Ｓｔｅｐ４−３−５に進む。全ての機能ブロックの処理が終了していた場合、当該類似フローの処理を終了し、Ｓｔｅｐ４−３−３に進む。Ｓｔｅｐ４−３−５では、処理対象である機能ブロックの使用回数を加算し、当該機能ブロックの処理を終了する。
【００７７】
Ｓｔｅｐ４―３―６〜Ｓｔｅｐ４−３−９では、Ｓｔｅｐ４−２−５〜Ｓｔｅｐ４−２−８と同様の動作をし、類似フローでの使用回数を元に評価値を計算する。最終的な候補ブロック列の評価値を、類似フローとの重複度による評価値として出力する。
【００７８】
定義したフローと類似するフローとの重複度から評価値を算出する例を図３７に示す。この例では、機能ブロックＤＢ１の内容、操作者が定義するフロー、生成される候補ブロック列は図２２の例と同一である。操作者が定義したフローＩＦ０３３に対して、フローＤＢ１から１つの類似フローＳＦ０３３を見つけ、当該類似フロー中で使われる機能ブロック２１および機能ブロック２２の使用回数を１としている。生成された各候補ブロック列ＰＢ３３１〜ＰＢ３３７に対し、機能ブロックの使用回数を加算し、評価値ＥＶ３３１ｓ〜ＥＶ３３７ｓを算出する。
【００７９】
ここで、上記に示した方針のうち一部のみを用いて評価値を計算してもよいし、上記に示した各方針で計算した値を組み合わせて評価値（表示の優先度）を生成してもよい。また、別の方針に基づく評価値を計算してもよい。
【００８０】
本実施の形態４にかかるプログラム開発支援装置における入出力インタフェース生成手段３は、各候補ブロック列に対して表示順序決定手段７３が表示順序の判定基準として生成した評価値の順に、候補ブロック列を表示する。この時、表示順序決定手段７３が複数の方針で評価値を決定する場合、いずれの方針の評価値に基づいて並べるかをユーザが決定してもよい。また、評価値の昇順に並べてもよいし、降順に並べてもよい。昇順に並べるか降順に並べるかをユーザが決定してもよい。
【００８１】
図３８には、方針および昇順／降順の決定方法をユーザに提供し、ユーザの決定を受けて、重複度の昇順に並べる画面表示例を示している。これにより、重複度が低い候補ブロック列を上位に表示し、選択が容易となっている。なお、本実施の形態４の説明では、定量的に説明しやすい重複度やＩＤを基にして表示順序を判定するための評価値生成について説明しているが、根拠情報に基づいて表示順序を判定するための評価値を生成するようにすれば、とくに、法令や仕様書等、遵守しなければならない規定を反映した機能ブロックが選択されているか否かを容易に判定し、規定に即したプログラムを構築する事が可能となる。
【００８２】
以上のように、本実施の形態４にかかるプログラム開発支援装置１０Ｄによれば、挿入候補抽出手段５が抽出した候補ブロック列に対して、表示順序を判定する表示順序判定手段７３を備え、（入出力）インタフェース生成手段３は、表示順序判定手段７３による判定結果を反映してインタフェースを生成する、ように構成したので、候補ブロック列の選択が容易になり、スムーズにプログラムを構築する事が出来る。
【００８３】
実施の形態５．
本実施の形態５にかかるプログラム開発支援装置は、実施の形態１にかかるプログラム開発支援装置に対して、機能ブロックにおける計算内容をパターン照合するためのテンプレートを管理する計算構造パターンＤＢと、生成された候補ブロック列を計算構造パターンＤＢが管理するテンプレートに基づいて分類化する分類化手段とをさらに備えたものである。図３９〜図４４は本実施の形態５にかかるプログラム開発支援装置について説明するためのもので、図３９はプログラム開発支援装置の構成を示す機能ブロック図、図４０はプログラム開発支援装置の全体動作を示すフローチャートである。そして、図４１は計算構造パターンＤＢが管理する計算構造のテンプレート（データ構造）を説明するための図、図４２は分類化手段の動作を説明するためのフローチャート、図４３と図４４は生成した分類パターンの情報を反映して生成したインタフェースに基づく画面表示例を示す。
【００８４】
本発明の実施の形態５にかかるプログラム開発支援装置１０Ｅの構成は、図３９に示すように、実施の形態１にかかるプログラム開発支援装置に対して計算構造パターンＤＢ８と、分類化手段７４とを追加したものである。そのため、全体動作としては、図４０に示すように根拠情報の判定動作（ステップＭＳ２２０）の後に、分類パターンの生成動作（ステップＭＳ３４０）が加わった。分類化手段７４を備えたことにより、データ入出力関係の変化が生じるが、機能ブロックＤＢ１、フローＤＢ２、挿入箇所抽出手段４、候補ブロック列生成手段５といった他の構成の機能については、基本的に実施の形態１におけるものと同様である。また、入出力インタフェース生成手段３については、分類化手段７４から出力されたデータを反映してインタフェースを生成する機能が追加されるが、その他の機能については実施の形態１と同様である。
【００８５】
＜計算構造パターンＤＢ＞
計算構造パターンＤＢ（Data Base）８では、機能ブロックの計算内容と照合するための関数の組合せである演算構造についてのテンプレートを管理する。図４１に、あらかじめ計算構造パターンＤＢ８に登録しておく計算構造と、その計算構造に合致する機能ブロックの例を示す。この例では、総和、２乗和、相加平均、重み付き加算について、ＩＳＯ−１４９７７で定義されたＥＢＮＦ（Extended Backus-Naur Form）形式でテンプレートを管理している。
【００８６】
＜分類化手段＞
分類化手段７４は、候補ブロック列生成手段５が生成した候補ブロック列のリストに対して、計算構造パターンＤＢ８に記録されたテンプレートと比較して、分類パターンを生成するものである。生成する分類パターンは、分類方式とパラメータの組で表され、分類方式の数だけ生成される。分類方式は、変数リスト、計算構造がある。変数リストは、候補ブロック列に出現する変数のリストをパラメータに持ち、候補ブロック列中の出現位置に応じて入力／出力／先頭／末尾／途中のバリエーションがある。計算構造は、候補ブロック列中の各機能ブロックが持つ計算処理が合致するテンプレートのリストをパラメータに持ち、計算処理の位置に応じて先頭／末尾／途中のバリエーションがある。
【００８７】
分類化手段７４における処理の流れの一例を、図４２のフローチャートを用いて説明する。Ｓｔｅｐ５―１では、生成された候補ブロック列を順に選んで処理対象とし、Ｓｔｅｐ５−２に進む。全ての候補ブロック列の処理が終了していた場合、Ｓｔｅｐ５−６に進む。Ｓｔｅｐ５−２では、処理対象である候補ブロック列中の機能ブロックを順に選んで処理対象とし、Ｓｔｅｐ５−３に進む。全ての機能ブロックの処理が終了していた場合、Ｓｔｅｐ５−１に進む。Ｓｔｅｐ５−３では、処理対象である機能ブロックを入力機能ブロック／出力機能ブロック／先頭機能ブロック／末尾機能ブロック／途中機能ブロックに分類する。入力機能ブロックは外部システムから入力変数に値を代入する機能ブロックであり、出力機能ブロックは出力変数の値を外部システムへ出力する機能ブロックである。また、先頭機能ブロックは入力変数のみを参照する機能ブロックであり、末尾機能ブロックは出力変数に値を代入する機能ブロックである。また途中機能ブロックは、上記のいずれにも分類されない機能ブロックである。
【００８８】
Ｓｔｅｐ５―４では、処理対象である機能ブロックで代入・参照される変数を抽出し、当該候補ブロック列の適切な変数リストに登録する。登録する変数リストは、入力機能ブロックで代入される変数は入力変数リスト、出力機能ブロックで参照される変数は出力変数リスト、先頭機能ブロックで代入される変数は先頭変数リスト、末尾機能ブロックで参照される変数は末尾変数リスト、途中機能ブロックのみに出現する変数は途中変数リストである。Ｓｔｅｐ５―５では、処理対象である機能ブロックを計算構造パターンＤＢ８の各計算構造と照合し、一致した場合、その一致したテンプレートを当該候補ブロック列の適切な計算構造リストに登録する。登録する計算構造リストは、当該機能ブロックが先頭機能ブロックであれば先頭計算構造リスト、末尾機能ブロックであれば末尾計算構造リスト、途中機能ブロックであれば途中計算構造リストである。ここまでの処理で、各候補ブロック列に対する５種類の変数リストおよび３種類の計算構造リストが構築される。以降では、これらのリストが共通する候補ブロック列をグループ化する。
【００８９】
Ｓｔｅｐ５―６では、分類パターンを順に処理対象とし、Ｓｔｅｐ５−７に進む。全ての分類パターンが処理済みであれば、処理を終了する。Ｓｔｅｐ５−７では、生成された候補ブロック列を順に選んで処理対象とし、Ｓｔｅｐ５−８へ進む。当該分類パターンで全ての候補ブロック列が処理済みであれば、Ｓｔｅｐ５−６へ進む。Ｓｔｅｐ５−８では、処理対象である候補ブロック列で構築された分類パターン毎のリストが、分類パターンのパラメータとして登録されていない場合は登録する。
【００９０】
本実施の形態５における入出力インタフェース生成手段３は、全ての分類パターンを表示し、操作者が選択した分類パターン中の全てのパラメータを表示し、操作者が選択したパラメータに分類される全ての候補ブロック列を表示する。図４３に示す画面表示例では、操作者が分類パターンの方針として「先頭変数」を選択し、パラメータから「変数ｓｕｍ２」と「変数ａｖｅ」の組を選択している。変数名が意味を持ち、所望の計算において入力変数から直接計算する変数名を操作者が把握している場合に、この例のような操作を進めるようなインタフェースを生成することで、条件に合う候補ブロック列を選択しやすくなる。
【００９１】
また、図４４に示す画面表示例では、分類パターンの方針として「末尾計算構造」を選択し、パラメータから「重み付き加算」を選択している。変数名が意味を持たず、所望の計算において出力変数の計算方法を操作者が把握している場合に、この例のような操作を進めるようなインタフェースを生成することで、条件に合う候補ブロック列を選択しやすくなる。なお、ここで、実施の形態４のように評価値を計算し、計算結果を区分に分けて分類する分類パターンを計算してもよい。
【００９２】
以上のように、本実施の形態５にかかるプログラム開発支援装置１０Ｅによれば、計算処理内容をパターン照合するためのテンプレートを管理する計算構造パターンデータベース８と、生成された候補ブロック列中の機能ブロックを計算構造パターンデータベース８が管理するテンプレートに基づいて分類する分類化手段７４と、を備え、（入出力）インタフェース生成手段３は、分類化手段７４による分類化結果を反映してインタフェースを生成する、ように構成したので、複雑な計算処理を行う機能ブロックを体系化することで、候補ブロック列の選択が容易になり、よりスムーズにプログラムを構築する事が出来る。
【００９３】
なお、上記実施の形態２〜５においては、実施の形態１に対してそれぞれ、冗長ブロック抽出手段７１、変数抽出手段７２、表示順序判定手段７３、分類化手段７４等を追加した例を示したが、これら追加分を適宜組み合わせるようにしてもよい。また、プラント監視制御システムに、これらのプログラム開発支援装置を備えるようにすることにより、法令や規則または仕様書等が頻繁に変更されても、これらの規制に準拠したプログラムによりプラント操作を実行できるようになる。
【符号の説明】
【００９４】
１  フローＤＢ、２  機能ブロックＤＢ、３  （入出力）インタフェース生成手段、  ４  挿入箇所抽出手段、  ５  候補ブロック列生成手段、  ６  妥当性判定手段、
７１  冗長機能ブロック抽出手段、  ７２  変数抽出手段、  ７３  表示順序判定手段、  ７４  分類化手段、  ８  計算構造パターンＤＢ。
１０  ソフトウェア開発支援装置（１０Ｂ〜１０Ｅ）、  ２０  入出力手段。
１００  プラント監視制御システム、  ２００  原子力発電プラント。
【図１】
2012003473.tif 000003
【図２】
2012003473.tif 000004
【図３】
2012003473.tif 000005
【図４】
2012003473.tif 000006
【図５】
2012003473.tif 000007
【図６】
2012003473.tif 000008
【図７】
2012003473.tif 000009
【図８】
2012003473.tif 000010
【図９】
2012003473.tif 000011
【図１０】
2012003473.tif 000012
【図１１】
2012003473.tif 000013
【図１２】
2012003473.tif 000014
【図１３】
2012003473.tif 000015
【図１４】
2012003473.tif 000016
【図１５】
2012003473.tif 000017
【図１６】
2012003473.tif 000018
【図１７】
2012003473.tif 000019
【図１８】
2012003473.tif 000020
【図１９】
2012003473.tif 000021
【図２０】
2012003473.tif 000022
【図２１】
2012003473.tif 000023
【図２２】
2012003473.tif 000024
【図２３】
2012003473.tif 000025
【図２４】
2012003473.tif 000026
【図２５】
2012003473.tif 000027
【図２６】
2012003473.tif 000028
【図２７】
2012003473.tif 000029
【図２８】
2012003473.tif 000030
【図２９】
2012003473.tif 000031
【図３０】
2012003473.tif 000032
【図３１】
2012003473.tif 000033
【図３２】
2012003473.tif 000034
【図３３】
2012003473.tif 000035
【図３４】
2012003473.tif 000036
【図３５】
2012003473.tif 000037
【図３６】
2012003473.tif 000038
【図３７】
2012003473.tif 000039
【図３８】
2012003473.tif 000040
【図３９】
2012003473.tif 000041
【図４０】
2012003473.tif 000042
【図４１】
2012003473.tif 000043
【図４２】
2012003473.tif 000044
【図４３】
2012003473.tif 000045
【図４４】
2012003473.tif 000046