(57)【要約】【課題】ユーザに対して保護された機能を明示して誤操作を防止する。【解決手段】制御装置の機能を構成するシーケンスプログラムの要素である回路素子あるいは演算子を表す素子データ、並びに素子データの属性値をデータ格納装置１０７，１０８から読み出し、読み出したデータをもとに制御装置の編集画面を生成するとともに、入力装置からの編集入力にしたがって、前記生成された編集画面上の素子データを編集するプログラムエディタ１０３を備え、該プログラムエディタは回路素子および演算子を表すデータが保護機能データであるか非保護機能データであるかを判別する判別機能１０４を具備し、複数の前記回路素子、これらの回路素子の出力を入力とする演算子、およびこれらの演算子の出力を入力とする回路素子の集合をプログラム編集画面に表示するとともに、アクセスが制限された回路素子及び演算子で構成される所定機能を実現するためのプログラムの集合を他の集合とは異なる表示形態で前記画面に表示する。【選択図】  図１
2012008872.tif 000002
【特許請求の範囲】
【請求項１】
制御装置の機能を構成するシーケンスプログラムの要素である回路素子あるいは演算子を表す素子データ、並びに素子データの属性値をデータ格納装置から読み出し、読み出したデータをもとに制御装置の編集画面を生成するとともに、入力装置からの編集入力にしたがって、前記生成された編集画面上の素子データを編集するプログラムエディタを備え、
該プログラムエディタは回路素子および演算子を表すデータが保護機能データであるか非保護機能データであるかを判別する判別機能を具備し、
複数の前記回路素子、これらの回路素子の出力を入力とする演算子、およびこれらの演算子の出力を入力とする回路素子の集合をプログラム編集画面に表示するとともに、アクセスが制限された回路素子及び演算子で構成される所定機能を実現するためのプログラムの集合を他の集合とは異なる表示形態で前記画面に表示することを特徴とする制御装置の保守ツール。
【請求項２】
請求項１記載の制御装置の保守ツールにおいて、
アクセスが制限された回路素子及び演算子で構成される前記プログラムの集合を他の集合とは異なる表示形態で表示装置の同一画面に表示することを特徴とする制御装置の保守ツール。
【請求項３】
請求項１記載の制御装置の保守ツールにおいて、
前記プログラムの集合には集合毎に異なるアクセス権限が設定可能であることを特徴とする制御装置の保守ツール。
【請求項４】
請求項１記載の制御装置の保守ツールにおいて、
アクセス権限には前記集合毎にアクセスの可能の程度を表す優先度が付与されており、ある集合に属するプログラムが、その集合よりも優先度が同等であるか、または優先度が高い別の集合に属するプログラムと入出力関係になる場合、
前記の入出力関係を実現する操作の途中に、優先度が高い集合に属するプログラムに対して操作を行っていることをユーザに報知することを特徴とする制御装置の保守ツール。
【請求項５】
請求項１記載の制御装置の保守ツールにおいて、
アクセス権限には前記集合毎にアクセスの可能の程度を表す優先度が付与されており
ある集合に属するプログラム甲が、その集合よりも優先度が同等であるか、または優先度が高い別の集合に属するプログラム乙の入力となる場合、
前記入出力関係を実現する操作の後に、プログラム甲をプログラム乙と同等の優先度の集合に属するように変更することを特徴とする制御装置の保守ツール。
【請求項６】
請求項１記載の制御装置の保守ツールにおいて、
アクセス権限には集合毎にアクセスの可能の程度を表す優先度が付与されており、
前記入力装置は、前記優先度に対応する権限を有しないユーザの入力を拒否する機能を備えることを特徴とする制御装置の保守ツール。
【請求項７】
請求項１記載の制御装置の保守ツールにおいて、
アクセス権限には集合毎にアクセスの可能の程度を表す優先度が付与されており、
前記入力装置は、前記優先度に対応する権限を有しないユーザの入力に対して警告を表示する機能を備えることを特徴とする制御装置の保守ツール
【請求項８】
請求項１記載の制御装置の保守ツールにおいて、
アクセス権限には集合毎にアクセスの可能の程度を表す優先度が付与されており、
前記入力装置は、前記優先度に対応する権限を有しないユーザの入力に対して、操作権限の認証を要求する画面を表示することを特徴とする制御装置の保守ツール。
【請求項９】
制御装置の機能を構成するシーケンスプログラムの要素である回路素子あるいは演算子を表す素子データ、並びに素子データの属性値をデータ格納装置から読み出し、読み出したデータをもとに制御装置の編集画面を生成するとともに、入力装置からの編集入力にしたがって、前記生成された編集画面上の素子データを編集するプログラムエディタを備え、
該プログラムエディタは回路素子および演算子を表すデータが保護機能データであるか非保護機能データであるかを判別する判別機能を具備し、
複数の前記回路素子、これらの回路素子の出力を入力とする演算子、およびこれらの演算子の出力を入力とする回路素子の集合をプログラム編集画面に表示するとともに、アクセスが制限された回路素子及び演算子で構成される所定機能を実現するためのプログラムの集合を他の集合とは異なる表示形態で前記画面に表示することを特徴とするプログラム編集装置。
【請求項１０】
制御装置の機能を構成するシーケンスプログラムの要素である回路素子あるいは演算子を表す素子データ、並びに素子データの属性値をデータ格納装置から読み出し、読み出したデータをもとに制御装置の編集画面を生成するとともに、入力装置からの編集入力にしたがって、前記生成された編集画面上の素子データを編集するプログラムエディタを備え、
該プログラムエディタは回路素子および演算子を表すデータが保護機能データであるか非保護機能データであるかを判別する判別機能を具備し、
複数の前記回路素子、これらの回路素子の出力を入力とする演算子、およびこれらの演算子の出力を入力とする回路素子の集合をプログラム編集画面に表示するとともに、アクセスが制限された回路素子及び演算子で構成される所定機能を実現するためのプログラムの集合を他の集合とは異なる表示形態で前記画面に表示するとともに、
アクセス権限には集合毎にアクセスの可能の程度を表す優先度を付与し、ある集合に属するプログラム甲が、その集合よりも優先度が同等であるか、または優先度が高い別の集合に属するプログラム乙の入力となる場合、
前記入出力関係を実現する操作の後に、プログラム甲をプログラム乙と同等の優先度の集合に属するように変更することを特徴とするプログラム編集方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、制御装置の保守ツールに係り、編集する権限のあるユーザのみにプログラム編集を可能にして管理面での安全性を確保することのできる保守ツールに関する。
【背景技術】
【０００２】
アプリケーションのユーザインタフェースをユーザ自身がカスタマイズして、編集機能を利用できるユーザを制限する方法が知られている（特許文献１，２）。
【０００３】
この方法によれば、ユーザ自身が利用者を適切に制限することを可能にする。これにより、システムに重大な影響を与える操作を行う操作者を制限することができ、操作面での安全性が確保できる。また、プログラムを編集する権限を得ていない利用者に対しては、権限を得ていないプログラムの表示を禁止し、プログラムを編集する権限がある利用者に対してのみプログラムを表示する。これにより管理面での安全性を確保している。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特願平５−２５５４９８号公報
【特許文献２】特願平６−１２８５１０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
発電プラント、上下水処理プラントなどを制御するプラント制御システムでは、従来の制御システムを部分的にリプレースして使用することがある。またこのようなシステムでは、一部の機能がクリティカルで、それ以外の機能はノンクリティカルである。このようにシステムの構成は複雑化している。
【０００６】
このような制御システムにおいては、制御機能およびヒューマンインタフェース機能はプログラムで実現されている。しかし、クリティカルな部分、例えば爆発の防止、あるいは設備の破壊防止のための機能は、プログラム修正時に誤って変更されないように、保護される必要がある。このため、クリティカルな部分は、従来はソリッドステート回路などにより構成して区分けしていた。
【０００７】
近年では、クリティカルな機能もソフトウェアで実現されるようになった。このようなシステムではソフトウェアのうち一部はクリティカルで他はノンクリティカルであるシステムとなる。
【０００８】
このため、ユーザがシステムに対して操作を行う場合に、複雑化したシステムのどの部分に対してどのような操作をすべきなのかといった情報が錯綜してくる。また、ある操作画面から別の操作画面への遷移動作が多いと、ユーザの操作が増え、全体を把握することが難しくなる。このため、編集対象のプログラムは一度になるべく多くを表示し、その中でクリティカルな部分は明示するのが望ましい。
【０００９】
本発明は、これらの事項に鑑みてなされたもので、ユーザに対して保護された機能を明示して誤操作を防止することのできる制御装置の保守ツールを提供するものである。
【課題を解決するための手段】
【００１０】
本発明は上記課題を解決するため、次のような手段を採用した。
【００１１】
制御装置の機能を構成するシーケンスプログラムの要素である回路素子あるいは演算子を表す素子データ、並びに素子データの属性値をデータ格納装置から読み出し、読み出したデータをもとに制御装置の編集画面を生成するとともに、入力装置からの編集入力にしたがって、前記生成された編集画面上の素子データを編集するプログラムエディタを備え、該プログラムエディタは回路素子および演算子を表すデータが保護機能データであるか非保護機能データであるかを判別する判別機能を具備し、 複数の前記回路素子、これらの回路素子の出力を入力とする演算子、およびこれらの演算子の出力を入力とする回路素子の集合をプログラム編集画面に表示するとともに、アクセスが制限された回路素子及び演算子で構成される所定機能を実現するためのプログラムの集合を他の集合とは異なる表示形態で前記画面に表示する。
【発明の効果】
【００１２】
本発明は、以上の構成を備えるため、ユーザに対して保護された機能を明示して誤操作を防止することができる。
【図面の簡単な説明】
【００１３】
【図１】実施形態にかかる制御装置の保守ツールを説明する図である。
【図２】プログラム編集画面のレイアウトの例を示す図である。
【図３】プログラム編集画面のレイアウトの例を示す図である。
【図４】プログラム編集画面のレイアウトの例を示す図である。
【図５】プログラム編集画面のレイアウトの例を示す図である。
【図６】保護対象領域を表示するためのデータ構造を示す図である。
【図７】保護対象領域を確定するための方法を説明する図である。
【図８】保護対象領域を視覚的に結合するための表示処理を説明する図である。
【図９】結合配列の生成方法を説明する図である。
【図１０】保護領域を表す多角形を接続する方法を説明する図である。
【図１１】プログラム編集対象がソースコードで記述されている場合のグラフィカルユーザインタフェースを示す図である。
【図１２】プログラム編集画面のレイアウトの変形例を示す図である
【図１３】複数の保護レベルをもつ場合の編集画面のレイアウト説明する図である
【図１４】複数の保護レベルをもつ場合の編集画面のレイアウト説明する図である
【発明を実施するための形態】
【００１４】
以下、実施形態を添付図面を参照しながら説明する。図１は、本発明の実施形態にかかる制御装置の保守ツールを説明する図である。図１に示すように制御装置の保守ツールは、制御装置１０９の制御プログラムを編集する機能を備えたプログラムエディタ１０３、ユーザからの操作を受け付ける入力装置１０１、ユーザにプログラム編集の状態や制御装置１０９の状態を表示する表示装置１０２を備える。
【００１５】
制御装置１０９の制御プログラムのデータ、あるいは制御装置１０９の状態に関するデータは、保護機能データ格納装置１０７および非保護機能データ格納装置１０８にそれぞれ格納されている。制御装置の各機能のうち、クリティカルな部分に関わる情報は保護機能データ格納装置１０７に格納されており、ノンクリティカルな部分に関わる情報は非保護機能データ１０８に格納されている。
【００１６】
保護機能データ格納装置１０７に格納されるデータとしては、例えば制御装置１０９の制御プロセス入出力処理のうち、誤動作を起こした場合にシステムに多大な影響を及ぼすようなものを行う処理に関わるデータである。非保護機能データ格納装置１０８に格納されるデータとしては、例えばその処理がなんらかの異常が発生したとしても、システムに大きな影響を与えないような処理に関わるデータである。
【００１７】
プログラムエディタ１０３は、ユーザが入力装置１０１を介して入力した情報を、表示装置メモリ１０５上で編集中のデータに反映して表示装置１０２に表示する。なお、プログラムの元となるデータは保護機能データ格納装置１０７あるいは非保護機能データ格納装置１０８に格納されたデータである。
【００１８】
このとき、プログラムエディタ１０３上では、保護機能データ格納装置１０７および非保護機能データ格納装置１０８のデータが混在した状態になる。
【００１９】
プログラムエディタ内の判別機能１０４は、それぞれのデータ格納装置から読み出した属性値などの情報をもとに、どちらの格納装置から読み出したデータであるか、すなわち、保護機能データであるか、非保護機能データであるかを判別する。そして前記属性値を、表示装置１０２上でユーザに判別できるように表示する。
【００２０】
また、入力装置１０１から入力があった場合、判別機能１０４は、保護機能データ格納装置１０７および非保護機能データ格納装置１０８のデータのどちらのデータが編集されたのかの判別を行う。編集が完了したデータを制御装置１０９にロードする際には、保護機能データ格納装置１０７および非保護機能データ格納装置１０８にそれぞれ独立して編集内容が反映されているので、制御装置１０９がロードを誤って行うことはない。
【００２１】
図１では保護機能データ格納装置１０７および非保護機能データ格納装置１０８のデータをそれぞれ別の物理的なストレージに格納しているが、これらは制御装置１０９のなかのROMに書き込むことも可能である。この場合、２種類のデータは同一のROMにそれぞれアドレス領域をわけて書き込むことによっても実現できる。
【００２２】
表示するデータはプログラムエディタ１０３から送られたデータを表示装置メモリ１０５に格納してから表示装置１０２に表示する。このとき、ユーザにとってプログラムを視覚的に分かりやすいものとして表示するために、プログラムエディタ１０３は、プログラムの情報をプログラム図面データ格納装置１０６に格納されたプログラム図面データを使ったデータに変換して表示する。
【００２３】
プログラムを変換表示するときには、例えばＩＥＣ６１１３１−３に規定されたＦＢＤや、ＳＴ、ＳＦＣ言語などが候補として挙げられる。このとき、ユーザが編集したプログラムを制御装置にロードする際にはプログラムをコンパイルする必要があるが、その場合も、ユーザがプログラム図面を利用して作製したプログラムデータを制御装置にロードできる言語に逆変換する際にもプログラム図面データ格納装置１０６を用いる。
【００２４】
入力制限装置１１０は、ユーザからプログラムへの操作を制限する。あるユーザに、保護された機能のプログラムを編集する権限がない場合には、操作をおこなえないようにすることによって、プログラムを保護することができる。この場合、ユーザの操作権限を制限する方法としては、生体認証やパスワード、ＩＤカードなどの利用が考えられる。もしもユーザに操作権限がない場合に、保護された機能に対して編集を試みようとした場合、ユーザの操作に対するプログラムエディタ１１０の動作としては、ユーザの操作を受け付けない、ユーザに対して表示装置１０２を介して警告を発するなどの処置をとることができる。
【００２５】
この装置構成においては、保護された機能と保護されていない機能との２つに大別し、それぞれについて格納装置を設けているが、保護の分類は１つにとどまらず、また、格納装置の構成も１機能あたり１つに限定しなくてもよい。すなわち、複数の保護の分類を設けることも可能で、その場合には、それぞれの保護の分類ごとに優先度を設定しておけば、プログラムエディタにおいて優先度を読み取ってそれに応じた表示を表示装置で行うことができるようになる。また、保護の優先度が高い機能については、その情報が失われることによる影響は大きいので、ディスクを冗長化するなどの方法が考えられる。一方で、優先度が低い機能については、他の機能とディスクを共有化して低コスト化をはかることも可能である。
【００２６】
図２，３，４，５に、実際のユーザが利用するプログラム編集画面のレイアウトの例を示す。プログラム編集画面１５１において、制御装置から読み込まれたデータを判別し、保護された回路であるか、保護されていない通常の回路であるかが利用者に容易に判別できるようになっている。
【００２７】
図２において、通常回路素子１５２、１５３、１５４は制御装置内の保護されていない機能に対応する回路素子であり、保護はされておらず、保護回路素子１５５、１５６は制御装置内の保護された機能に対応する回路素子であり、保護がされているものとする。
【００２８】
ここでは、演算子１５７、１５９を用いて、通常回路素子１５２、１５３、１５４の情報をもとに演算を行おうとしている。しかし演算子１５９の接続先が決まっておらず、回路としては不完全な状態となっている。
【００２９】
同様に、演算子１５８、１６０を用いて、通常回路素子１５４、保護回路素子１５５、１５６の情報をもとに演算をおこなっている。その結果を通常回路素子１６２に格納しており、回路の演算はここで閉じている。また、演算子に接続されていない保護回路素子１６１もある。
【００３０】
この場合、保護の対象となる領域は、保護回路素子１５５、１６１である。これははじめから保護回路素子として定義されているものであるためである。よって、保護回路素子１５５に対して保護対象領域表示１６３を、保護回路素子１６１に対して保護対象領域１６４を表示することで、ユーザに保護対象を明示することができる。
【００３１】
次に図３において、ユーザが操作を行って、演算子１５９と保護回路素子１６１を接続する場合を考える。この場合、保護回路素子１６１に対して操作を行うことになるので、保護回路素子１６１へ、演算子１５９を接続する際に、プログラム編集画面上に警告文１６５を表示する。警告文では、たとえば、図３に示すように、「保護された領域に接続しようとしています。よろしいですか？」などの表示が考えられる。それ以外にも、パスワードを入力する画面に遷移したりするなどの方式も考えられる。同時に、警告文１６５のなかで、ユーザが確認の入力ができるようにカーソル１６６を表示している。
【００３２】
図４では、図３とは異なり、パスワード入力画面１７０を表示する。ユーザがパスワード入力画面に適切なパスワードを入力することにより、保護対象領域に対して操作を行うことが可能となる。保護対象領域が複数存在する場合にはそれぞれの保護対象領域に異なったパスワードを割り当てることによって複数の保護対象領域に別々の操作権限を付与することも可能である。
【００３３】
図５は、図３でユーザが「Yes」を選択した後、あるいは図４で適切なパスワードを入力した後の状態を示している。このとき、保護対象領域は図２に示す状態から変化する。
【００３４】
図５において、演算子１５７、１５９と、演算のもととなる通常回路素子１５２、１５３、１５４は、保護回路素子１６１に対して演算結果を格納する。よってこれらの回路の演算途中で何らかの不正な操作があった場合、保護回路素子１６１に格納される値は不正な値となる。このため、保護回路素子１６１に接続している回路全体を保護対象としてユーザに表示する。
【００３５】
また、演算子１５８、１６０と、演算のもととなる通常回路素子１５４、保護回路素子１５５、通常回路素子１５６は、通常回路素子１６１に対して演算結果を格納する。この場合、通常回路素子に対して演算結果を格納するので、その演算途中の回路は、保護の対象にはならない。しかし通常回路素子１５４は保護回路素子１６１の演算に対しても使用されているために、保護対象領域とする必要がある。
【００３６】
また、保護回路素子１５５はもともと保護回路素子になっているのでこれも保護対象領域とする必要がある。よって保護対象領域１７５が包含する対象は、通常回路素子１５２、１５３、１５４、保護回路素子１５５、演算子１５７、１５９、保護回路素子１６１となる。
【００３７】
なお、本実施例では、画面上で保護対象領域を点線で囲って表示するようにした。これ以外の表示方法として、該当部分を線で囲んだのち、背景色を変更して表示しても良い。背景色で領域を明示する方式では、保護／非保護（優先／非優先）のみでなく、保護の種類が複数ある場合でも表示できる。  このとき領域が重なる場合には、それぞれの背景色を半透明にしておけば、下に重なっている領域を見ことができる。
【００３８】
図６は、保護対象領域を表示するためのデータ構造を示す。ユーザが回路素子あるいは演算子を画面に新たに追加するときに、配列２０２にその情報を登録するようにする。配列２０２に登録する情報としては、登録した回路素子あるいは演算子のアドレス、素子区分（回路素子または演算子）、保護区分（非保護または保護）、接続元の素子の番号である。接続元は、回路素子に入力として入ってくる他の素子のことである。接続元の本数は、本実施例においてはANDやORなどの単純な演算を想定しているため、２つとしているが、それ以上の本数がある場合でも登録方法や操作方法は同じである。
【００３９】
また、保護回路素子に区分されている素子は、配列２０２とは別に、配列２０１に登録する。この配列は保護回路素子のみを登録する配列である。登録する内容は保護回路素子の、配列２０２に登録している配列の番号である。保護回路素子であるか否かは、アドレスの先頭ビットによって区別している。先頭ビットが「０」であれば通常回路素子で、「１」であれば保護回路素子、「２」であれば演算子である。すなわち、保護回路素子を追加したときに、アドレスの先頭ビットが「１」であれば、配列２０２にその情報を登録した後、配列２０１にも配列２０２に登録したときの番号を登録しておく。図示した配列２０２を図面として表示すると、素子２１１から２１９のようになる。
【００４０】
図７は、保護対象領域を確定するための方法を説明する図である。ここでは、ユーザが素子２１９を画面上で追加し、素子２１８と接続した場合について説明する。ステップ２５１で、ユーザが画面上で素子２１９を追加する。ユーザが更新した内容について配列２０２に更新した内容を登録する。配列２０２では[8]番目が空白であったので、そこに登録を行う。図の例では素子の新規追加であるが、ユーザが行う操作としては、素子や接続線の追加や削除、アドレスの変更などである。
【００４１】
次にステップ２５２において登録した素子のアドレスをチェックし、保護回路素子かどうかを判定する。素子２１９は保護回路素子であるので、ステップ２５４において、素子２１９を保護回路素子として配列２０２にも登録を行う。ここで、もし追加する素子が保護回路素子でなければ、配列２０１への登録を行なわない。
【００４２】
ここからは再帰的に接続元をたどって保護区分を更新する処理を行う。ステップ２５５において、配列２０２での保護回路素子の保護区分を“保護”にする。素子２１９を保護回路素子としたのち、ステップ２５６で、素子２１９の接続元となっている素子を探索する。素子２１９に接続しているのは素子２１８で、“非保護”の区分となっているので、ステップ２５７で接続元の素子２１８の保護区分を“保護”とする。次に、素子２１８の接続元を探索する。ふたたびステップ２５６において、今度は接続元として素子２１６と素子２１７があるので、まず素子２１６から、保護区分を“保護”とする。素子２１６は素子２１４、素子２１５と接続しており、ステップ２５７に戻り、素子２１５も保護区分を“保護”とする。素子２１５は接続元がないので、ステップ２５６からステップ２５８にとび、素子２１６へ戻る。素子２１６のもうひとつの接続元である素子２１４は保護区分であるので、そこからさらに接続元をたどることはしない。これは、保護区分になっている素子、およびそれより前の接続元はすでに保護区分となっているからである。つまり、素子２１４は既に、接続元である素子２１３およびさらにその接続元の素子２１２、２１１をたどって、それらを保護対象に更新する操作を、既に行っているためである。素子２１４から素子２１６へ戻ったのち、素子２１６の接続元に非保護回路素子はないので、再帰的な処理から戻って素子２１８に戻る。ステップ２５８にて、素子２１８は素子２１６とは別に素子２１７を接続元としてもっているので、素子２１７を“保護”とする。素子２１７を更新したのち、素子２１８、素子２１９へ戻り、更新すべきものがなくなると終了し、ステップ２５９でユーザの次の操作を待つことになる。
【００４３】
図８は、保護対象領域を視覚的に結合しているように見せるための表示処理を説明する図である。本実施形態では保護対象領域は一般的に垂直線あるいは水平線のみからなる多角形であり、垂直線および水平線以外を含む多角形については扱わない。
【００４４】
多角形を画面上に描画するために、多角形描画関数に対して多角形のそれぞれの頂点の座標を配列の形で引数として渡すことにより描画可能とする。よって、以下、保護対象領域を示す多角形を画面上に描画する方法として、多角形描画関数に引数として渡す配列の演算について述べる。
【００４５】
本実施形態における保護対象領域は、保護対象領域が複数存在する場合、それらを視覚的に見やすくするために、複数の領域を結合して、基本的に１つの保護対象領域として表現する。２つの多角形を結合するためには、まず、多角形どうしで最も近接し向かい合っている辺を見つけ、向かい合っている辺のうち重なり合っている部分について向かい側の辺に対して垂線を下ろし、その垂線を新たな辺として2つの多角形を結合する方法をとる。
【００４６】
ただし、縦辺は縦辺、横辺は横辺どうしの距離を算出し、縦辺と横辺の間の距離を算出することはしない。また、辺どうしが向かい合わないような組み合わせはあらかじめ除外する。探索を簡素化するために、多角形の各頂点に格納する順序を次のようにする。すなわち、開始座標から縦辺を描き、そのまま反時計回りに横辺、縦辺、横辺・・・と描くようにルールづける。
【００４７】
以下、図８をもとに説明する。２つの結合する横辺の番号を開始側多角形ではp、接続側多角形ではqであるとする。以下の説明では、多角形の頂点は、座標点が格納されている配列の番号で表現する。例えば、ある座標値が、配列の[2p]番目に格納されているとすると、その座標を(X2p,Y2p)と表現する。また(X2p,Y2p)と(X2p+1,Y2p+1)の間の辺を([2p],[2p+1])として表す。このとき横辺の番号を2倍しているのは、縦辺・横辺のそれぞれの総数は配列の要素数の半分になることによる。
【００４８】
結合する２つの多角形３５１(開始側)と３５２（接続側）の最近隣の辺が、探索の結果、開始側多角形３５１の横辺([2p],[2p+1])と接続側多角形３５２の横辺([2q],[2q+1])であったとする。
【００４９】
縦辺・横辺に関わらず、最近隣の辺どうしは互いに向かい合わせになっているので、座標値を向かい側の値と交換することにより、垂線を下ろすことができる。
【００５０】
開始側多角形３５１より垂線３５５を接続側多角形３５２へつなぎ、また接続側多角形より垂線３５６を開始側多角形へつなぐことにより多角形どうしを結合する。
【００５１】
まず２つの辺の頂点(X2p,Y2p), (X2p+1,Y2p+1), (X2q,Y2q), (X2q+1,Y2q+1)を、x座標値についての大小関係の比較を行う。この場合はX2p < X2q+1 < X2p+1 < X2qである。次に、大小関係を比較した結果において、２番目と３番目に該当する座標から向かい側の辺へ垂線を下ろし、下ろした先を新たな座標点として配列に格納する。その結果、２つの辺の頂点はそれぞれ(X2p,Y2p), (X2p+1,Y2q), (X2q,Y2q), (X2q+1,Y2p)となる。
【００５２】
次に配列の操作を説明する。多角形を表現する配列は、各頂点を１周したのちまた最初の頂点につながっている。よって、[0]番目の要素と配列の最後の[m-1]番目の要素は辺を構成し、他の辺と同様である。
【００５３】
開始点については、２つの多角形のお互いの開始点、すなわち配列の最初の要素のx座標値を比較し、その値が小さいほうを開始側多角形とする。
【００５４】
まず、開始側多角形３５１の要素である配列３７１の先頭の要素から、結合後の配列３７５の先頭から順に格納する。そして、配列が部分配列３６１まで格納されたのち、垂線３５６を通じて接続側多角形３５２の[2q+1]番目の要素を格納していく。この[2q+1]番目の要素は垂線を降ろしたときに座標値を変換している。そこから部分配列３６４を格納した後、接続側多角形３５２の残りの部分、すなわち配列要素の[0]番目から格納していく。多角形は[m-1]番目の要素と[0]番目の要素はお互いに辺でつながっているので、一般的な辺と同様に扱うことが可能である。部分配列３６３までを配列３７５に格納した後、垂線３５５をつうじて開始側多角形３５１の[2p+1]番目の要素を格納していく。この[2p+1]番目の要素は垂線を降ろしたときに座標値を変換している。部分配列３６１をすべて格納し、結合した多角形３５３を表現する結合配列３７５を生成させることができる。
【００５５】
ここまでの結合配列を生成する手順は、横辺だけでなく縦辺でも同様である。また、辺の位置関係が上記以外の場合においても、結合配列を生成するための配列の格納方法は同じである。
【００５６】
図９は、結合配列の生成方法を説明する図である。結合する２つの多角形について、配列をA={(Xa[0],Ya[0]),(Xa[1],Ya[1]),…(Xa[n-1],Ya[n-1])}, B={(Xb[0],Yb[0]),(Xb[1],Yb[1]),…(Xb[m-1],Yb[m-1])}として以下説明する。まず、２つの多角形で最近隣となる辺を見つけるために、ステップ４０２とステップ４０３において、２つの配列A,Bの各要素について比較していく。それぞれの辺について調べるので、0<i<n/2、0<j<m/2の範囲である。ステップ４０４ではAで表される多角形の縦辺とBで表される多角形の縦辺との間の距離を算出し、それが最小であるかを判断する。最小であれば、今度はステップ４０５に進み、その辺がお互いに向かい合っている辺であるかどうかを判断する。向かい合っている辺であると判断できれば、ステップ４０６に進み、２つの縦辺のデータを更新する。ステップ４０４、４０５において条件が合致しなければ、ステップ４０６は実行しない。次に、横辺についても同様にステップ４０７、４０８、４０９で実行する。ループを抜けて、ステップ４１０にて、最近隣の２つの辺が縦辺か横辺かで分岐する。縦辺ならばステップ４１１において、最近隣である２つの辺の頂点の座標値４つを、y座標値について昇順にソートする。そしてソートした結果、ステップ４１２で、４つの座標値のうち、2番目と3番目にある座標値を、Xsa(=Xea)ならばXsb、Xsb(=Xeb)ならXsaに変換する操作を行う。これは図形上では垂線を向かい合う辺に下ろすことと同等である。また最近隣の辺が横辺であった場合は、ステップ４１０からステップ４１３、４１４へ分岐する。ステップ４１３において、最近隣である２つの辺の頂点の座標値４つを、x座標値について昇順にソートする。そしてソートした結果、ステップ４１４で、４つの座標値のうち、2番目と3番目にある座標値を、Ysa(=Yea)ならばYsb、Ysb(=Yeb)ならYsaに変換する操作を行う。ステップ４１２およびステップ４１４までの操作ののち、ステップ４１５において、もとの配列A,Bに対しても同じ座標変換を行い、ステップ４１６にて結合配列Cに配列を格納する。格納の方法は図８で説明したとおりである。そしてステップ４１７において、生成した配列について多角形描画関数に引数として渡し、多角形を描画する。
【００５７】
図１０は、保護領域を表す多角形を接続する方法を説明する図である。保護回路素子４５１を囲む保護対象領域４５３は四角形で頂点は{(x1,y1),(x1,y2),(x2,y2),(x2,y1)}であり、これらの値がこの順で配列４６３に格納され、保護対象領域４５３を表す。また保護対象領域４５４は四角形で頂点は{(x3,y3),(x3,y4),(x4,y4),(x4,y3)}であり、これら４つの値がこの順で配列４６４に格納され、保護対象領域４５３を表す。また、配列の値は、配列の２要素ごとにそれぞれ縦辺、横辺、縦辺、横辺の順に辺を表している、すなわち、配列４６３では{(x1,y1),(x1,y2)}が縦辺１、{(x1,y2),(x2,y2)}が横辺１、{(x2,y2),(x2,y1)}が縦辺２、{(x2,y1), (x1,y1)}が横辺２を表している。配列４６４も同様である。
【００５８】
そして、配列で表された２つの多角形において、それぞれの多角形のどの辺とどの辺が接続の対象になるかを、辺と辺の距離が最短になるものを探索することにより見つける。ただし、縦辺は縦辺、横辺は横辺どうしの距離を算出し、縦辺と横辺の間の距離を算出することはしない。具体的には、配列４６３の縦辺１{(x1,y1),(x1,y2)}と、配列４６４の縦辺１{(x3,y3),(x3,y4)}との間の距離、および縦辺２{(x4,y4),(x4,y3)}との間の距離を算出する。同様に配列４６３の縦辺２{(x2,y2),(x2,y1)}と配列４６４の縦辺１、縦辺２の間の距離を算出する。距離を算出する辺どうしはすべて平行であるので、距離はx座標の差で簡単に求めることができる。横辺についても同様で、配列４６３の横辺１{(x1,y2),(x2,y2)}と配列４６４の横辺１{(x3,y4),(x4,y4)}、横辺２{(x4,y3), (x3,y3)}との間の距離、および配列４６３の横辺２{(x2,y1), (x1,y1)}と、配列４６４の横辺１、横辺２との間の距離をそれぞれ算出する。
【００５９】
このようにして求めた８つの距離の値のうち、最小のものを求めるが、そのときに辺どうしが向かい合わないような組み合わせはあらかじめ除外する。具体的には、配列４６３の縦辺２{(x2,y2),(x2,y1)}と配列４６４の縦辺１{(x3,y3),(x3,y4)}の組み合わせでは、辺どうしが互いに向かい会わないため、接続の対象外とする。なぜなら、配列４６３の２つのy頂点座標値(y1とy2)＜配列４６４の２つのy頂点座標値(y3とy4)の関係が成立しているためである。条件が成立するか否かは、頂点の座標値の大小関係を算出すれば判別可能である。
【００６０】
最小の距離になる２つの辺の組み合わせに対して、頂点の位置を変換する。具体的には、配列４６３の横辺１{(x1,y2),(x2,y2)}と配列４６４の横辺２{(x4,y3), (x3,y3)}の組み合わせで、横辺どうしの組み合わせであるので、x座標値の大小関係で、2番目、3番目に大きい２つ頂点のy座標値を、向かい合っている辺のy座標値と交換する。この場合、x座標値が2番目に大きい頂点(x3,y3)と3番目に大きい頂点(x2,y2)のy座標値を向かい合っている辺のy座標値と交換してそれぞれ(x3,y2), (x2,y3)になる。
【００６１】
すると配列４６３は{(x1,y1),(x1,y2),(x2,y3),(x2,y1)}を頂点にもつ配列４６５になり、配列４６４は{(x3,y2),(x3,y4),(x4,y4),(x4,y3)}を頂点にもつ配列４６６になる。
【００６２】
次に、このようにして変換した２つの配列を結合して、２つの多角形を１つの多角形に変換する。変換後の多角形をあらわす配列を配列４６８とする。まず、２つの配列の先頭にそれぞれ格納されている多角形の開始x座標を比較し、値が小さいほうの配列から先に格納する。この場合、配列４６５に格納されている先頭の値x1のほうが配列４６６に格納されている先頭の値x3よりも小さいので、配列４６５から先に配列４６８に格納する。そして、配列４６５のうち、座標変換を行った座標値(x2,y3)の直前の座標値(x1,y2)まで格納したのち、配列４６６を先頭の座標値(x3,y2)から格納していく。その後配列４６６を(x4,y3)まで格納した後、配列４６５の残りの部分を座標値(x2,y3)から格納して、8つの要素(x1,y1),(x1,y2),(x3,y2),(x3,y4),(x4,y4),(x4,y3),(x2,y3),(x2,y1)をもつ配列４６８を生成する。
【００６３】
ここまで、保護対象領域と非保護対象領域の２つが存在する場合について説明してきたが、保護対象領域が複数種類存在する場合についても、基本的には同じである。図６を用いて説明すると、保護対象領域に属する素子の情報を格納する配列２０１と同等のものを複数設けることで、保護対象領域が複数種類存在する場合についても対応できる。この場合、各保護対象領域について優先度を設定する必要がある。優先度の低い素子の出力が優先度の高い素子の演算に使われる場合に、配列２０２の保護区分を、優先度の高い保護対象領域の優先度の値に更新するようにすればよい。視覚的に表現することについても、図８の例で示した方法を、優先度の異なる複数の保護対象領域に対して適用すればよい。
【００６４】
図１１は、プログラム編集対象が、ソースコードで記述されている場合のグラフィカルユーザインタフェースを示している。プログラム階層表示画面５０１は現在編集しているプログラムのディレクトリ階層を示している。ここで、カーソル５１１はコントローラ１のプロジェクト１の中のモジュール１を指定しており、それによりプログラム編集画面５０２にカーソル５１１が示しているプログラムの情報を示す。ここでプログラム編集画面５０２ではIEC６１１３１−３に準拠したST言語による例を示している。このとき、例えば編集している行が枠５１２が囲む部分であったとする。また、このプログラムにおいては、保護された変数X2,X4と保護されていない通常の変数X1,X3があるとする。このとき、保護された変数X2,X4への演算操作については、ユーザに対して保護された変数への演算であることを示すために、プログラム編集画面５０２の左隣の保護状態表示画面５０４において、保護された（Protected）ことを示す”P”の文字を保護された変数への演算を行っている行の隣に表示する。文字５２１は、その右隣の枠５１２に示された行において、保護された変数X4への演算操作を行っていることを示すものである。また、保護された変数X4への演算操作について変更を加えようとした場合には、メッセージ表示画面５０３に“選択した行は保護されています[X4は保護された変数]”などのように、保護された部分への編集操作を行っていることを示すようなメッセージを表示させる。
【００６５】
この表示方法についても、表現方法は上記の例だけでなくほかの表現方法が考えられる。例えば、保護状態にある行を色分け表示するなどの方法である。また、保護の種類が複数ある場合でも、異なる色で表示することで対応することができる。
【００６６】
このようにして、ユーザに対して保護された機能を明示することにより、誤操作を防ぐことができる。
【００６７】
図１２は、図２に示すプログラム編集画面のレイアウトの変形例を示す図である。この例では、画面上に複数の小画面（以下ウィンドウ）を形成し、各ウインドウごとに保護、非保護を設定する。
【００６８】
この場合、ウィンドウ７０１は保護回路素子を演算の入出力に含んでおり、保護回路素子に関わる演算は保護の必要があるため、ウィンドウのタイトル欄「プログラム」に[保護]と表示し、ユーザに保護状態であることを示す。  一方、ウィンドウ７０２は、その演算に保護回路素子を含んでいないため、保護は不要あり、ウィンドウのタイトル欄に[保護]の表示はしない。なお、回路素子は異なるウィンドウに表示されている場合でも、同じ回路素子をウィンドウ内に定義すれば、データの受け渡しは可能である。たとえばウィンドウ７０１内の通常回路素子A2に入力した値は、ウィンドウ７０２においても通常回路素子A2を定義すれば、そこからデータを取り出すことができる。
【００６９】
なお、保護回路素子と通常回路素子とを接続した場合において、それらが保護対象領域になるか否かについてのルールは、ユーザが使用する回路素子の用途などに応じてカスタマイズすることができる。
【００７０】
図１３は、プログラム（回路素子）が複数の保護レベルをもつ場合の編集画面のレイアウト説明する図である。この例では保護に複数のレベル(LV)があり、そのレベルを、LV0からLV3として定義する。なお、LV0は保護されていないことを示す。それぞれのレベルに対して例えば、レベル１は制御機能、レベル２はプラント監視機能、レベル３はプラント保護機能など、ユーザがそれぞれのレベルに対して機能を割り当てる。ここではレベルとして表示しているが、ユーザが自らそれぞれのレベルに対して任意の名称を付与することもできる。
【００７１】
図１３の例では、回路素子７５１と７６０が保護レベル０、回路素子７５５が保護レベル１、回路素子７５２、７５４、７５９が保護レベル２、回路素子７５３、７６１が保護レベル３である。これらの回路素子の保護レベルは優先度を表している。すなわち保護レベル３が最も優先度が高く、順に保護レベル２、保護レベル１、保護レベル０となっている。また、保護レベル１，２，３の回路素子はそれぞれのレベルで保護されていることを示す表示がなされている。
【００７２】
回路素子７５５が保護レベル１であることを示す枠表示７６５、回路素子７５２、７５４、７５９が保護レベル２であることを示す枠表示７６２、７６４、７６６、回路素子７５３、７６１が保護レベル３であることを示す枠表示７６３、７６１がある。回路素子７５３から演算子７５７によって演算し、その結果を回路素子７６０に代入しているが、保護レベル０の回路素子への代入であるため、保護レベルの更新は行わず、回路素子７５３は保護レベル３、回路素子７６０は保護レベル０のままである。
【００７３】
図１３は編集途中の状態であり、この状態から、演算子７５６から回路素子７５９へ接続を行う。また、演算子７５８から回路素子７６１へも接続を行う。
【００７４】
図１４は、演算子７５６から回路素子７５９へ接続と、演算子７５８から回路素子７６１への接続を行った状態を示す。この場合、それぞれの回路素子に割り当てられた優先度を内部で計算して行く。
【００７５】
この結果、回路素子７５１と７５２はそれぞれ保護レベル０と２であったが、それらを演算する演算子７５６の結果を保護レベル２である回路素子７５９に代入する関係になることから回路素子７５１と７５２はそれぞれ保護レベル２になる。次に、回路素子７５４と７５５はそれぞれ保護レベル２と１であったが、それらを演算する演算子７５６の結果を保護レベル３である回路素子７６１に代入する関係になることから回路素子７５４と７５５はそれぞれ保護レベル３になる。
【００７６】
また、レベル１の制御機能の出力値を格納する回路素子７５５、およびレベル２のプラント監視機能の出力値を格納する回路素子７５１、７５２は、レベル３のプラント保護機能を実現するための一部分となるので、回路素子７５５、７５１，７５２はレベル３のプラント保護機能として表示する。
【００７７】
これにより、ユーザは保護レベルが高い、すなわち、取扱に気をつけなければならない部分が画面上で一目瞭然となる。このため、保護レベルが高い回路素子に対して、誤って不正な演算結果を代入し、プラントに対して致命的な誤操作をすることを未然に防ぐことができる。
【００７８】
以上説明したように、本実施形態によれば、プラントの制御システムの挙動を記述するプログラムを制御装置にロードし作動させる際に、制御装置の内部の情報を読み出し、読み出した情報をユーザインタフェースの端末内にあるプログラム情報と照合し、クリティカルな部分について、システムの利用区分や保護状態をユーザインタフェース画面上に同時に表示するものである。
【００７９】
すなわち視覚的な表示手段を用いてユーザの誤操作を防止するこができる。また、利用区分や保護状態を画面に表示するだけでなく、画面を操作した際に、利用区分が異なる、あるいは保護状態にあるプログラム部分の編集を制限する機能を提供することもできる。
【００８０】
また、本実施形態によれば、複雑化したシステムの、どの機能に対して、どのような操作が許可されているかという情報を、ユーザ自身が自ら定義することなくシステムが判断してユーザインタフェースに反映することができる。これによりユーザの単純な誤操作を抑制することができる。また、ユーザが誤ったアクセス制限などを他の利用者に付与する等の重大な誤りを抑制することができる。また、システムが自動的に処理をおこなうのでユーザの負担が少なくなることが期待できる。また、操作権限が異なるプログラムを、その操作権限を明示した上で同一の画面上に表示させることができる。これにより操作権限が異なるプログラムを異なる画面に表示させる場合よりも、画面の遷移動作が少なくなり、利便性が向上する。
【符号の説明】
【００８１】
１０１  入力装置
１０２  表示装置
１０３  プログラムエディタ
１０４  判別機能
１０５  表示装置メモリ
１０６  プログラム図面データ格納装置
１０７  保護機能データ格納装置
１０８  非保護機能データ格納装置
１０９  制御装置
１１０  入力制限装置１
１１１  入力制限装置２
１５１  プログラム編集画面
１５２，１５３，１５４  通常回路素子
１５５，１５６  保護回路素子
１５７，１５８，１５９，１６０  演算子
１６１  保護回路素子
１６２  通常回路素子
１６３，１６４  保護対象領域
１６５  警告文ウインドウ
１６６  カーソル
１７０  パスワード入力画面
１７５  保護対象領域
【図１】
2012008872.tif 000003
【図２】
2012008872.tif 000004
【図３】
2012008872.tif 000005
【図４】
2012008872.tif 000006
【図５】
2012008872.tif 000007
【図６】
2012008872.tif 000008
【図７】
2012008872.tif 000009
【図８】
2012008872.tif 000010
【図９】
2012008872.tif 000011
【図１０】
2012008872.tif 000012
【図１１】
2012008872.tif 000013
【図１２】
2012008872.tif 000014
【図１３】
2012008872.tif 000015
【図１４】
2012008872.tif 000016