説明

制御装置の保守ツール

【課題】ユーザに対して保護された機能を明示して誤操作を防止する。
【解決手段】制御装置の機能を構成するシーケンスプログラムの要素である回路素子あるいは演算子を表す素子データ、並びに素子データの属性値をデータ格納装置107,108から読み出し、読み出したデータをもとに制御装置の編集画面を生成するとともに、入力装置からの編集入力にしたがって、前記生成された編集画面上の素子データを編集するプログラムエディタ103を備え、該プログラムエディタは回路素子および演算子を表すデータが保護機能データであるか非保護機能データであるかを判別する判別機能104を具備し、複数の前記回路素子、これらの回路素子の出力を入力とする演算子、およびこれらの演算子の出力を入力とする回路素子の集合をプログラム編集画面に表示するとともに、アクセスが制限された回路素子及び演算子で構成される所定機能を実現するためのプログラムの集合を他の集合とは異なる表示形態で前記画面に表示する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、制御装置の保守ツールに係り、編集する権限のあるユーザのみにプログラム編集を可能にして管理面での安全性を確保することのできる保守ツールに関する。
【背景技術】
【0002】
アプリケーションのユーザインタフェースをユーザ自身がカスタマイズして、編集機能を利用できるユーザを制限する方法が知られている(特許文献1,2)。
【0003】
この方法によれば、ユーザ自身が利用者を適切に制限することを可能にする。これにより、システムに重大な影響を与える操作を行う操作者を制限することができ、操作面での安全性が確保できる。また、プログラムを編集する権限を得ていない利用者に対しては、権限を得ていないプログラムの表示を禁止し、プログラムを編集する権限がある利用者に対してのみプログラムを表示する。これにより管理面での安全性を確保している。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特願平5−255498号公報
【特許文献2】特願平6−128510号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
発電プラント、上下水処理プラントなどを制御するプラント制御システムでは、従来の制御システムを部分的にリプレースして使用することがある。またこのようなシステムでは、一部の機能がクリティカルで、それ以外の機能はノンクリティカルである。このようにシステムの構成は複雑化している。
【0006】
このような制御システムにおいては、制御機能およびヒューマンインタフェース機能はプログラムで実現されている。しかし、クリティカルな部分、例えば爆発の防止、あるいは設備の破壊防止のための機能は、プログラム修正時に誤って変更されないように、保護される必要がある。このため、クリティカルな部分は、従来はソリッドステート回路などにより構成して区分けしていた。
【0007】
近年では、クリティカルな機能もソフトウェアで実現されるようになった。このようなシステムではソフトウェアのうち一部はクリティカルで他はノンクリティカルであるシステムとなる。
【0008】
このため、ユーザがシステムに対して操作を行う場合に、複雑化したシステムのどの部分に対してどのような操作をすべきなのかといった情報が錯綜してくる。また、ある操作画面から別の操作画面への遷移動作が多いと、ユーザの操作が増え、全体を把握することが難しくなる。このため、編集対象のプログラムは一度になるべく多くを表示し、その中でクリティカルな部分は明示するのが望ましい。
【0009】
本発明は、これらの事項に鑑みてなされたもので、ユーザに対して保護された機能を明示して誤操作を防止することのできる制御装置の保守ツールを提供するものである。
【課題を解決するための手段】
【0010】
本発明は上記課題を解決するため、次のような手段を採用した。
【0011】
制御装置の機能を構成するシーケンスプログラムの要素である回路素子あるいは演算子を表す素子データ、並びに素子データの属性値をデータ格納装置から読み出し、読み出したデータをもとに制御装置の編集画面を生成するとともに、入力装置からの編集入力にしたがって、前記生成された編集画面上の素子データを編集するプログラムエディタを備え、該プログラムエディタは回路素子および演算子を表すデータが保護機能データであるか非保護機能データであるかを判別する判別機能を具備し、 複数の前記回路素子、これらの回路素子の出力を入力とする演算子、およびこれらの演算子の出力を入力とする回路素子の集合をプログラム編集画面に表示するとともに、アクセスが制限された回路素子及び演算子で構成される所定機能を実現するためのプログラムの集合を他の集合とは異なる表示形態で前記画面に表示する。
【発明の効果】
【0012】
本発明は、以上の構成を備えるため、ユーザに対して保護された機能を明示して誤操作を防止することができる。
【図面の簡単な説明】
【0013】
【図1】実施形態にかかる制御装置の保守ツールを説明する図である。
【図2】プログラム編集画面のレイアウトの例を示す図である。
【図3】プログラム編集画面のレイアウトの例を示す図である。
【図4】プログラム編集画面のレイアウトの例を示す図である。
【図5】プログラム編集画面のレイアウトの例を示す図である。
【図6】保護対象領域を表示するためのデータ構造を示す図である。
【図7】保護対象領域を確定するための方法を説明する図である。
【図8】保護対象領域を視覚的に結合するための表示処理を説明する図である。
【図9】結合配列の生成方法を説明する図である。
【図10】保護領域を表す多角形を接続する方法を説明する図である。
【図11】プログラム編集対象がソースコードで記述されている場合のグラフィカルユーザインタフェースを示す図である。
【図12】プログラム編集画面のレイアウトの変形例を示す図である
【図13】複数の保護レベルをもつ場合の編集画面のレイアウト説明する図である
【図14】複数の保護レベルをもつ場合の編集画面のレイアウト説明する図である
【発明を実施するための形態】
【0014】
以下、実施形態を添付図面を参照しながら説明する。図1は、本発明の実施形態にかかる制御装置の保守ツールを説明する図である。図1に示すように制御装置の保守ツールは、制御装置109の制御プログラムを編集する機能を備えたプログラムエディタ103、ユーザからの操作を受け付ける入力装置101、ユーザにプログラム編集の状態や制御装置109の状態を表示する表示装置102を備える。
【0015】
制御装置109の制御プログラムのデータ、あるいは制御装置109の状態に関するデータは、保護機能データ格納装置107および非保護機能データ格納装置108にそれぞれ格納されている。制御装置の各機能のうち、クリティカルな部分に関わる情報は保護機能データ格納装置107に格納されており、ノンクリティカルな部分に関わる情報は非保護機能データ108に格納されている。
【0016】
保護機能データ格納装置107に格納されるデータとしては、例えば制御装置109の制御プロセス入出力処理のうち、誤動作を起こした場合にシステムに多大な影響を及ぼすようなものを行う処理に関わるデータである。非保護機能データ格納装置108に格納されるデータとしては、例えばその処理がなんらかの異常が発生したとしても、システムに大きな影響を与えないような処理に関わるデータである。
【0017】
プログラムエディタ103は、ユーザが入力装置101を介して入力した情報を、表示装置メモリ105上で編集中のデータに反映して表示装置102に表示する。なお、プログラムの元となるデータは保護機能データ格納装置107あるいは非保護機能データ格納装置108に格納されたデータである。
【0018】
このとき、プログラムエディタ103上では、保護機能データ格納装置107および非保護機能データ格納装置108のデータが混在した状態になる。
【0019】
プログラムエディタ内の判別機能104は、それぞれのデータ格納装置から読み出した属性値などの情報をもとに、どちらの格納装置から読み出したデータであるか、すなわち、保護機能データであるか、非保護機能データであるかを判別する。そして前記属性値を、表示装置102上でユーザに判別できるように表示する。
【0020】
また、入力装置101から入力があった場合、判別機能104は、保護機能データ格納装置107および非保護機能データ格納装置108のデータのどちらのデータが編集されたのかの判別を行う。編集が完了したデータを制御装置109にロードする際には、保護機能データ格納装置107および非保護機能データ格納装置108にそれぞれ独立して編集内容が反映されているので、制御装置109がロードを誤って行うことはない。
【0021】
図1では保護機能データ格納装置107および非保護機能データ格納装置108のデータをそれぞれ別の物理的なストレージに格納しているが、これらは制御装置109のなかのROMに書き込むことも可能である。この場合、2種類のデータは同一のROMにそれぞれアドレス領域をわけて書き込むことによっても実現できる。
【0022】
表示するデータはプログラムエディタ103から送られたデータを表示装置メモリ105に格納してから表示装置102に表示する。このとき、ユーザにとってプログラムを視覚的に分かりやすいものとして表示するために、プログラムエディタ103は、プログラムの情報をプログラム図面データ格納装置106に格納されたプログラム図面データを使ったデータに変換して表示する。
【0023】
プログラムを変換表示するときには、例えばIEC61131−3に規定されたFBDや、ST、SFC言語などが候補として挙げられる。このとき、ユーザが編集したプログラムを制御装置にロードする際にはプログラムをコンパイルする必要があるが、その場合も、ユーザがプログラム図面を利用して作製したプログラムデータを制御装置にロードできる言語に逆変換する際にもプログラム図面データ格納装置106を用いる。
【0024】
入力制限装置110は、ユーザからプログラムへの操作を制限する。あるユーザに、保護された機能のプログラムを編集する権限がない場合には、操作をおこなえないようにすることによって、プログラムを保護することができる。この場合、ユーザの操作権限を制限する方法としては、生体認証やパスワード、IDカードなどの利用が考えられる。もしもユーザに操作権限がない場合に、保護された機能に対して編集を試みようとした場合、ユーザの操作に対するプログラムエディタ110の動作としては、ユーザの操作を受け付けない、ユーザに対して表示装置102を介して警告を発するなどの処置をとることができる。
【0025】
この装置構成においては、保護された機能と保護されていない機能との2つに大別し、それぞれについて格納装置を設けているが、保護の分類は1つにとどまらず、また、格納装置の構成も1機能あたり1つに限定しなくてもよい。すなわち、複数の保護の分類を設けることも可能で、その場合には、それぞれの保護の分類ごとに優先度を設定しておけば、プログラムエディタにおいて優先度を読み取ってそれに応じた表示を表示装置で行うことができるようになる。また、保護の優先度が高い機能については、その情報が失われることによる影響は大きいので、ディスクを冗長化するなどの方法が考えられる。一方で、優先度が低い機能については、他の機能とディスクを共有化して低コスト化をはかることも可能である。
【0026】
図2,3,4,5に、実際のユーザが利用するプログラム編集画面のレイアウトの例を示す。プログラム編集画面151において、制御装置から読み込まれたデータを判別し、保護された回路であるか、保護されていない通常の回路であるかが利用者に容易に判別できるようになっている。
【0027】
図2において、通常回路素子152、153、154は制御装置内の保護されていない機能に対応する回路素子であり、保護はされておらず、保護回路素子155、156は制御装置内の保護された機能に対応する回路素子であり、保護がされているものとする。
【0028】
ここでは、演算子157、159を用いて、通常回路素子152、153、154の情報をもとに演算を行おうとしている。しかし演算子159の接続先が決まっておらず、回路としては不完全な状態となっている。
【0029】
同様に、演算子158、160を用いて、通常回路素子154、保護回路素子155、156の情報をもとに演算をおこなっている。その結果を通常回路素子162に格納しており、回路の演算はここで閉じている。また、演算子に接続されていない保護回路素子161もある。
【0030】
この場合、保護の対象となる領域は、保護回路素子155、161である。これははじめから保護回路素子として定義されているものであるためである。よって、保護回路素子155に対して保護対象領域表示163を、保護回路素子161に対して保護対象領域164を表示することで、ユーザに保護対象を明示することができる。
【0031】
次に図3において、ユーザが操作を行って、演算子159と保護回路素子161を接続する場合を考える。この場合、保護回路素子161に対して操作を行うことになるので、保護回路素子161へ、演算子159を接続する際に、プログラム編集画面上に警告文165を表示する。警告文では、たとえば、図3に示すように、「保護された領域に接続しようとしています。よろしいですか?」などの表示が考えられる。それ以外にも、パスワードを入力する画面に遷移したりするなどの方式も考えられる。同時に、警告文165のなかで、ユーザが確認の入力ができるようにカーソル166を表示している。
【0032】
図4では、図3とは異なり、パスワード入力画面170を表示する。ユーザがパスワード入力画面に適切なパスワードを入力することにより、保護対象領域に対して操作を行うことが可能となる。保護対象領域が複数存在する場合にはそれぞれの保護対象領域に異なったパスワードを割り当てることによって複数の保護対象領域に別々の操作権限を付与することも可能である。
【0033】
図5は、図3でユーザが「Yes」を選択した後、あるいは図4で適切なパスワードを入力した後の状態を示している。このとき、保護対象領域は図2に示す状態から変化する。
【0034】
図5において、演算子157、159と、演算のもととなる通常回路素子152、153、154は、保護回路素子161に対して演算結果を格納する。よってこれらの回路の演算途中で何らかの不正な操作があった場合、保護回路素子161に格納される値は不正な値となる。このため、保護回路素子161に接続している回路全体を保護対象としてユーザに表示する。
【0035】
また、演算子158、160と、演算のもととなる通常回路素子154、保護回路素子155、通常回路素子156は、通常回路素子161に対して演算結果を格納する。この場合、通常回路素子に対して演算結果を格納するので、その演算途中の回路は、保護の対象にはならない。しかし通常回路素子154は保護回路素子161の演算に対しても使用されているために、保護対象領域とする必要がある。
【0036】
また、保護回路素子155はもともと保護回路素子になっているのでこれも保護対象領域とする必要がある。よって保護対象領域175が包含する対象は、通常回路素子152、153、154、保護回路素子155、演算子157、159、保護回路素子161となる。
【0037】
なお、本実施例では、画面上で保護対象領域を点線で囲って表示するようにした。これ以外の表示方法として、該当部分を線で囲んだのち、背景色を変更して表示しても良い。背景色で領域を明示する方式では、保護/非保護(優先/非優先)のみでなく、保護の種類が複数ある場合でも表示できる。 このとき領域が重なる場合には、それぞれの背景色を半透明にしておけば、下に重なっている領域を見ことができる。
【0038】
図6は、保護対象領域を表示するためのデータ構造を示す。ユーザが回路素子あるいは演算子を画面に新たに追加するときに、配列202にその情報を登録するようにする。配列202に登録する情報としては、登録した回路素子あるいは演算子のアドレス、素子区分(回路素子または演算子)、保護区分(非保護または保護)、接続元の素子の番号である。接続元は、回路素子に入力として入ってくる他の素子のことである。接続元の本数は、本実施例においてはANDやORなどの単純な演算を想定しているため、2つとしているが、それ以上の本数がある場合でも登録方法や操作方法は同じである。
【0039】
また、保護回路素子に区分されている素子は、配列202とは別に、配列201に登録する。この配列は保護回路素子のみを登録する配列である。登録する内容は保護回路素子の、配列202に登録している配列の番号である。保護回路素子であるか否かは、アドレスの先頭ビットによって区別している。先頭ビットが「0」であれば通常回路素子で、「1」であれば保護回路素子、「2」であれば演算子である。すなわち、保護回路素子を追加したときに、アドレスの先頭ビットが「1」であれば、配列202にその情報を登録した後、配列201にも配列202に登録したときの番号を登録しておく。図示した配列202を図面として表示すると、素子211から219のようになる。
【0040】
図7は、保護対象領域を確定するための方法を説明する図である。ここでは、ユーザが素子219を画面上で追加し、素子218と接続した場合について説明する。ステップ251で、ユーザが画面上で素子219を追加する。ユーザが更新した内容について配列202に更新した内容を登録する。配列202では[8]番目が空白であったので、そこに登録を行う。図の例では素子の新規追加であるが、ユーザが行う操作としては、素子や接続線の追加や削除、アドレスの変更などである。
【0041】
次にステップ252において登録した素子のアドレスをチェックし、保護回路素子かどうかを判定する。素子219は保護回路素子であるので、ステップ254において、素子219を保護回路素子として配列202にも登録を行う。ここで、もし追加する素子が保護回路素子でなければ、配列201への登録を行なわない。
【0042】
ここからは再帰的に接続元をたどって保護区分を更新する処理を行う。ステップ255において、配列202での保護回路素子の保護区分を“保護”にする。素子219を保護回路素子としたのち、ステップ256で、素子219の接続元となっている素子を探索する。素子219に接続しているのは素子218で、“非保護”の区分となっているので、ステップ257で接続元の素子218の保護区分を“保護”とする。次に、素子218の接続元を探索する。ふたたびステップ256において、今度は接続元として素子216と素子217があるので、まず素子216から、保護区分を“保護”とする。素子216は素子214、素子215と接続しており、ステップ257に戻り、素子215も保護区分を“保護”とする。素子215は接続元がないので、ステップ256からステップ258にとび、素子216へ戻る。素子216のもうひとつの接続元である素子214は保護区分であるので、そこからさらに接続元をたどることはしない。これは、保護区分になっている素子、およびそれより前の接続元はすでに保護区分となっているからである。つまり、素子214は既に、接続元である素子213およびさらにその接続元の素子212、211をたどって、それらを保護対象に更新する操作を、既に行っているためである。素子214から素子216へ戻ったのち、素子216の接続元に非保護回路素子はないので、再帰的な処理から戻って素子218に戻る。ステップ258にて、素子218は素子216とは別に素子217を接続元としてもっているので、素子217を“保護”とする。素子217を更新したのち、素子218、素子219へ戻り、更新すべきものがなくなると終了し、ステップ259でユーザの次の操作を待つことになる。
【0043】
図8は、保護対象領域を視覚的に結合しているように見せるための表示処理を説明する図である。本実施形態では保護対象領域は一般的に垂直線あるいは水平線のみからなる多角形であり、垂直線および水平線以外を含む多角形については扱わない。
【0044】
多角形を画面上に描画するために、多角形描画関数に対して多角形のそれぞれの頂点の座標を配列の形で引数として渡すことにより描画可能とする。よって、以下、保護対象領域を示す多角形を画面上に描画する方法として、多角形描画関数に引数として渡す配列の演算について述べる。
【0045】
本実施形態における保護対象領域は、保護対象領域が複数存在する場合、それらを視覚的に見やすくするために、複数の領域を結合して、基本的に1つの保護対象領域として表現する。2つの多角形を結合するためには、まず、多角形どうしで最も近接し向かい合っている辺を見つけ、向かい合っている辺のうち重なり合っている部分について向かい側の辺に対して垂線を下ろし、その垂線を新たな辺として2つの多角形を結合する方法をとる。
【0046】
ただし、縦辺は縦辺、横辺は横辺どうしの距離を算出し、縦辺と横辺の間の距離を算出することはしない。また、辺どうしが向かい合わないような組み合わせはあらかじめ除外する。探索を簡素化するために、多角形の各頂点に格納する順序を次のようにする。すなわち、開始座標から縦辺を描き、そのまま反時計回りに横辺、縦辺、横辺・・・と描くようにルールづける。
【0047】
以下、図8をもとに説明する。2つの結合する横辺の番号を開始側多角形ではp、接続側多角形ではqであるとする。以下の説明では、多角形の頂点は、座標点が格納されている配列の番号で表現する。例えば、ある座標値が、配列の[2p]番目に格納されているとすると、その座標を(X2p,Y2p)と表現する。また(X2p,Y2p)と(X2p+1,Y2p+1)の間の辺を([2p],[2p+1])として表す。このとき横辺の番号を2倍しているのは、縦辺・横辺のそれぞれの総数は配列の要素数の半分になることによる。
【0048】
結合する2つの多角形351(開始側)と352(接続側)の最近隣の辺が、探索の結果、開始側多角形351の横辺([2p],[2p+1])と接続側多角形352の横辺([2q],[2q+1])であったとする。
【0049】
縦辺・横辺に関わらず、最近隣の辺どうしは互いに向かい合わせになっているので、座標値を向かい側の値と交換することにより、垂線を下ろすことができる。
【0050】
開始側多角形351より垂線355を接続側多角形352へつなぎ、また接続側多角形より垂線356を開始側多角形へつなぐことにより多角形どうしを結合する。
【0051】
まず2つの辺の頂点(X2p,Y2p), (X2p+1,Y2p+1), (X2q,Y2q), (X2q+1,Y2q+1)を、x座標値についての大小関係の比較を行う。この場合はX2p < X2q+1 < X2p+1 < X2qである。次に、大小関係を比較した結果において、2番目と3番目に該当する座標から向かい側の辺へ垂線を下ろし、下ろした先を新たな座標点として配列に格納する。その結果、2つの辺の頂点はそれぞれ(X2p,Y2p), (X2p+1,Y2q), (X2q,Y2q), (X2q+1,Y2p)となる。
【0052】
次に配列の操作を説明する。多角形を表現する配列は、各頂点を1周したのちまた最初の頂点につながっている。よって、[0]番目の要素と配列の最後の[m-1]番目の要素は辺を構成し、他の辺と同様である。
【0053】
開始点については、2つの多角形のお互いの開始点、すなわち配列の最初の要素のx座標値を比較し、その値が小さいほうを開始側多角形とする。
【0054】
まず、開始側多角形351の要素である配列371の先頭の要素から、結合後の配列375の先頭から順に格納する。そして、配列が部分配列361まで格納されたのち、垂線356を通じて接続側多角形352の[2q+1]番目の要素を格納していく。この[2q+1]番目の要素は垂線を降ろしたときに座標値を変換している。そこから部分配列364を格納した後、接続側多角形352の残りの部分、すなわち配列要素の[0]番目から格納していく。多角形は[m-1]番目の要素と[0]番目の要素はお互いに辺でつながっているので、一般的な辺と同様に扱うことが可能である。部分配列363までを配列375に格納した後、垂線355をつうじて開始側多角形351の[2p+1]番目の要素を格納していく。この[2p+1]番目の要素は垂線を降ろしたときに座標値を変換している。部分配列361をすべて格納し、結合した多角形353を表現する結合配列375を生成させることができる。
【0055】
ここまでの結合配列を生成する手順は、横辺だけでなく縦辺でも同様である。また、辺の位置関係が上記以外の場合においても、結合配列を生成するための配列の格納方法は同じである。
【0056】
図9は、結合配列の生成方法を説明する図である。結合する2つの多角形について、配列を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])}として以下説明する。まず、2つの多角形で最近隣となる辺を見つけるために、ステップ402とステップ403において、2つの配列A,Bの各要素について比較していく。それぞれの辺について調べるので、0<i<n/2、0<j<m/2の範囲である。ステップ404ではAで表される多角形の縦辺とBで表される多角形の縦辺との間の距離を算出し、それが最小であるかを判断する。最小であれば、今度はステップ405に進み、その辺がお互いに向かい合っている辺であるかどうかを判断する。向かい合っている辺であると判断できれば、ステップ406に進み、2つの縦辺のデータを更新する。ステップ404、405において条件が合致しなければ、ステップ406は実行しない。次に、横辺についても同様にステップ407、408、409で実行する。ループを抜けて、ステップ410にて、最近隣の2つの辺が縦辺か横辺かで分岐する。縦辺ならばステップ411において、最近隣である2つの辺の頂点の座標値4つを、y座標値について昇順にソートする。そしてソートした結果、ステップ412で、4つの座標値のうち、2番目と3番目にある座標値を、Xsa(=Xea)ならばXsb、Xsb(=Xeb)ならXsaに変換する操作を行う。これは図形上では垂線を向かい合う辺に下ろすことと同等である。また最近隣の辺が横辺であった場合は、ステップ410からステップ413、414へ分岐する。ステップ413において、最近隣である2つの辺の頂点の座標値4つを、x座標値について昇順にソートする。そしてソートした結果、ステップ414で、4つの座標値のうち、2番目と3番目にある座標値を、Ysa(=Yea)ならばYsb、Ysb(=Yeb)ならYsaに変換する操作を行う。ステップ412およびステップ414までの操作ののち、ステップ415において、もとの配列A,Bに対しても同じ座標変換を行い、ステップ416にて結合配列Cに配列を格納する。格納の方法は図8で説明したとおりである。そしてステップ417において、生成した配列について多角形描画関数に引数として渡し、多角形を描画する。
【0057】
図10は、保護領域を表す多角形を接続する方法を説明する図である。保護回路素子451を囲む保護対象領域453は四角形で頂点は{(x1,y1),(x1,y2),(x2,y2),(x2,y1)}であり、これらの値がこの順で配列463に格納され、保護対象領域453を表す。また保護対象領域454は四角形で頂点は{(x3,y3),(x3,y4),(x4,y4),(x4,y3)}であり、これら4つの値がこの順で配列464に格納され、保護対象領域453を表す。また、配列の値は、配列の2要素ごとにそれぞれ縦辺、横辺、縦辺、横辺の順に辺を表している、すなわち、配列463では{(x1,y1),(x1,y2)}が縦辺1、{(x1,y2),(x2,y2)}が横辺1、{(x2,y2),(x2,y1)}が縦辺2、{(x2,y1), (x1,y1)}が横辺2を表している。配列464も同様である。
【0058】
そして、配列で表された2つの多角形において、それぞれの多角形のどの辺とどの辺が接続の対象になるかを、辺と辺の距離が最短になるものを探索することにより見つける。ただし、縦辺は縦辺、横辺は横辺どうしの距離を算出し、縦辺と横辺の間の距離を算出することはしない。具体的には、配列463の縦辺1{(x1,y1),(x1,y2)}と、配列464の縦辺1{(x3,y3),(x3,y4)}との間の距離、および縦辺2{(x4,y4),(x4,y3)}との間の距離を算出する。同様に配列463の縦辺2{(x2,y2),(x2,y1)}と配列464の縦辺1、縦辺2の間の距離を算出する。距離を算出する辺どうしはすべて平行であるので、距離はx座標の差で簡単に求めることができる。横辺についても同様で、配列463の横辺1{(x1,y2),(x2,y2)}と配列464の横辺1{(x3,y4),(x4,y4)}、横辺2{(x4,y3), (x3,y3)}との間の距離、および配列463の横辺2{(x2,y1), (x1,y1)}と、配列464の横辺1、横辺2との間の距離をそれぞれ算出する。
【0059】
このようにして求めた8つの距離の値のうち、最小のものを求めるが、そのときに辺どうしが向かい合わないような組み合わせはあらかじめ除外する。具体的には、配列463の縦辺2{(x2,y2),(x2,y1)}と配列464の縦辺1{(x3,y3),(x3,y4)}の組み合わせでは、辺どうしが互いに向かい会わないため、接続の対象外とする。なぜなら、配列463の2つのy頂点座標値(y1とy2)<配列464の2つのy頂点座標値(y3とy4)の関係が成立しているためである。条件が成立するか否かは、頂点の座標値の大小関係を算出すれば判別可能である。
【0060】
最小の距離になる2つの辺の組み合わせに対して、頂点の位置を変換する。具体的には、配列463の横辺1{(x1,y2),(x2,y2)}と配列464の横辺2{(x4,y3), (x3,y3)}の組み合わせで、横辺どうしの組み合わせであるので、x座標値の大小関係で、2番目、3番目に大きい2つ頂点のy座標値を、向かい合っている辺のy座標値と交換する。この場合、x座標値が2番目に大きい頂点(x3,y3)と3番目に大きい頂点(x2,y2)のy座標値を向かい合っている辺のy座標値と交換してそれぞれ(x3,y2), (x2,y3)になる。
【0061】
すると配列463は{(x1,y1),(x1,y2),(x2,y3),(x2,y1)}を頂点にもつ配列465になり、配列464は{(x3,y2),(x3,y4),(x4,y4),(x4,y3)}を頂点にもつ配列466になる。
【0062】
次に、このようにして変換した2つの配列を結合して、2つの多角形を1つの多角形に変換する。変換後の多角形をあらわす配列を配列468とする。まず、2つの配列の先頭にそれぞれ格納されている多角形の開始x座標を比較し、値が小さいほうの配列から先に格納する。この場合、配列465に格納されている先頭の値x1のほうが配列466に格納されている先頭の値x3よりも小さいので、配列465から先に配列468に格納する。そして、配列465のうち、座標変換を行った座標値(x2,y3)の直前の座標値(x1,y2)まで格納したのち、配列466を先頭の座標値(x3,y2)から格納していく。その後配列466を(x4,y3)まで格納した後、配列465の残りの部分を座標値(x2,y3)から格納して、8つの要素(x1,y1),(x1,y2),(x3,y2),(x3,y4),(x4,y4),(x4,y3),(x2,y3),(x2,y1)をもつ配列468を生成する。
【0063】
ここまで、保護対象領域と非保護対象領域の2つが存在する場合について説明してきたが、保護対象領域が複数種類存在する場合についても、基本的には同じである。図6を用いて説明すると、保護対象領域に属する素子の情報を格納する配列201と同等のものを複数設けることで、保護対象領域が複数種類存在する場合についても対応できる。この場合、各保護対象領域について優先度を設定する必要がある。優先度の低い素子の出力が優先度の高い素子の演算に使われる場合に、配列202の保護区分を、優先度の高い保護対象領域の優先度の値に更新するようにすればよい。視覚的に表現することについても、図8の例で示した方法を、優先度の異なる複数の保護対象領域に対して適用すればよい。
【0064】
図11は、プログラム編集対象が、ソースコードで記述されている場合のグラフィカルユーザインタフェースを示している。プログラム階層表示画面501は現在編集しているプログラムのディレクトリ階層を示している。ここで、カーソル511はコントローラ1のプロジェクト1の中のモジュール1を指定しており、それによりプログラム編集画面502にカーソル511が示しているプログラムの情報を示す。ここでプログラム編集画面502ではIEC61131−3に準拠したST言語による例を示している。このとき、例えば編集している行が枠512が囲む部分であったとする。また、このプログラムにおいては、保護された変数X2,X4と保護されていない通常の変数X1,X3があるとする。このとき、保護された変数X2,X4への演算操作については、ユーザに対して保護された変数への演算であることを示すために、プログラム編集画面502の左隣の保護状態表示画面504において、保護された(Protected)ことを示す”P”の文字を保護された変数への演算を行っている行の隣に表示する。文字521は、その右隣の枠512に示された行において、保護された変数X4への演算操作を行っていることを示すものである。また、保護された変数X4への演算操作について変更を加えようとした場合には、メッセージ表示画面503に“選択した行は保護されています[X4は保護された変数]”などのように、保護された部分への編集操作を行っていることを示すようなメッセージを表示させる。
【0065】
この表示方法についても、表現方法は上記の例だけでなくほかの表現方法が考えられる。例えば、保護状態にある行を色分け表示するなどの方法である。また、保護の種類が複数ある場合でも、異なる色で表示することで対応することができる。
【0066】
このようにして、ユーザに対して保護された機能を明示することにより、誤操作を防ぐことができる。
【0067】
図12は、図2に示すプログラム編集画面のレイアウトの変形例を示す図である。この例では、画面上に複数の小画面(以下ウィンドウ)を形成し、各ウインドウごとに保護、非保護を設定する。
【0068】
この場合、ウィンドウ701は保護回路素子を演算の入出力に含んでおり、保護回路素子に関わる演算は保護の必要があるため、ウィンドウのタイトル欄「プログラム」に[保護]と表示し、ユーザに保護状態であることを示す。 一方、ウィンドウ702は、その演算に保護回路素子を含んでいないため、保護は不要あり、ウィンドウのタイトル欄に[保護]の表示はしない。なお、回路素子は異なるウィンドウに表示されている場合でも、同じ回路素子をウィンドウ内に定義すれば、データの受け渡しは可能である。たとえばウィンドウ701内の通常回路素子A2に入力した値は、ウィンドウ702においても通常回路素子A2を定義すれば、そこからデータを取り出すことができる。
【0069】
なお、保護回路素子と通常回路素子とを接続した場合において、それらが保護対象領域になるか否かについてのルールは、ユーザが使用する回路素子の用途などに応じてカスタマイズすることができる。
【0070】
図13は、プログラム(回路素子)が複数の保護レベルをもつ場合の編集画面のレイアウト説明する図である。この例では保護に複数のレベル(LV)があり、そのレベルを、LV0からLV3として定義する。なお、LV0は保護されていないことを示す。それぞれのレベルに対して例えば、レベル1は制御機能、レベル2はプラント監視機能、レベル3はプラント保護機能など、ユーザがそれぞれのレベルに対して機能を割り当てる。ここではレベルとして表示しているが、ユーザが自らそれぞれのレベルに対して任意の名称を付与することもできる。
【0071】
図13の例では、回路素子751と760が保護レベル0、回路素子755が保護レベル1、回路素子752、754、759が保護レベル2、回路素子753、761が保護レベル3である。これらの回路素子の保護レベルは優先度を表している。すなわち保護レベル3が最も優先度が高く、順に保護レベル2、保護レベル1、保護レベル0となっている。また、保護レベル1,2,3の回路素子はそれぞれのレベルで保護されていることを示す表示がなされている。
【0072】
回路素子755が保護レベル1であることを示す枠表示765、回路素子752、754、759が保護レベル2であることを示す枠表示762、764、766、回路素子753、761が保護レベル3であることを示す枠表示763、761がある。回路素子753から演算子757によって演算し、その結果を回路素子760に代入しているが、保護レベル0の回路素子への代入であるため、保護レベルの更新は行わず、回路素子753は保護レベル3、回路素子760は保護レベル0のままである。
【0073】
図13は編集途中の状態であり、この状態から、演算子756から回路素子759へ接続を行う。また、演算子758から回路素子761へも接続を行う。
【0074】
図14は、演算子756から回路素子759へ接続と、演算子758から回路素子761への接続を行った状態を示す。この場合、それぞれの回路素子に割り当てられた優先度を内部で計算して行く。
【0075】
この結果、回路素子751と752はそれぞれ保護レベル0と2であったが、それらを演算する演算子756の結果を保護レベル2である回路素子759に代入する関係になることから回路素子751と752はそれぞれ保護レベル2になる。次に、回路素子754と755はそれぞれ保護レベル2と1であったが、それらを演算する演算子756の結果を保護レベル3である回路素子761に代入する関係になることから回路素子754と755はそれぞれ保護レベル3になる。
【0076】
また、レベル1の制御機能の出力値を格納する回路素子755、およびレベル2のプラント監視機能の出力値を格納する回路素子751、752は、レベル3のプラント保護機能を実現するための一部分となるので、回路素子755、751,752はレベル3のプラント保護機能として表示する。
【0077】
これにより、ユーザは保護レベルが高い、すなわち、取扱に気をつけなければならない部分が画面上で一目瞭然となる。このため、保護レベルが高い回路素子に対して、誤って不正な演算結果を代入し、プラントに対して致命的な誤操作をすることを未然に防ぐことができる。
【0078】
以上説明したように、本実施形態によれば、プラントの制御システムの挙動を記述するプログラムを制御装置にロードし作動させる際に、制御装置の内部の情報を読み出し、読み出した情報をユーザインタフェースの端末内にあるプログラム情報と照合し、クリティカルな部分について、システムの利用区分や保護状態をユーザインタフェース画面上に同時に表示するものである。
【0079】
すなわち視覚的な表示手段を用いてユーザの誤操作を防止するこができる。また、利用区分や保護状態を画面に表示するだけでなく、画面を操作した際に、利用区分が異なる、あるいは保護状態にあるプログラム部分の編集を制限する機能を提供することもできる。
【0080】
また、本実施形態によれば、複雑化したシステムの、どの機能に対して、どのような操作が許可されているかという情報を、ユーザ自身が自ら定義することなくシステムが判断してユーザインタフェースに反映することができる。これによりユーザの単純な誤操作を抑制することができる。また、ユーザが誤ったアクセス制限などを他の利用者に付与する等の重大な誤りを抑制することができる。また、システムが自動的に処理をおこなうのでユーザの負担が少なくなることが期待できる。また、操作権限が異なるプログラムを、その操作権限を明示した上で同一の画面上に表示させることができる。これにより操作権限が異なるプログラムを異なる画面に表示させる場合よりも、画面の遷移動作が少なくなり、利便性が向上する。
【符号の説明】
【0081】
101 入力装置
102 表示装置
103 プログラムエディタ
104 判別機能
105 表示装置メモリ
106 プログラム図面データ格納装置
107 保護機能データ格納装置
108 非保護機能データ格納装置
109 制御装置
110 入力制限装置1
111 入力制限装置2
151 プログラム編集画面
152,153,154 通常回路素子
155,156 保護回路素子
157,158,159,160 演算子
161 保護回路素子
162 通常回路素子
163,164 保護対象領域
165 警告文ウインドウ
166 カーソル
170 パスワード入力画面
175 保護対象領域

【特許請求の範囲】
【請求項1】
制御装置の機能を構成するシーケンスプログラムの要素である回路素子あるいは演算子を表す素子データ、並びに素子データの属性値をデータ格納装置から読み出し、読み出したデータをもとに制御装置の編集画面を生成するとともに、入力装置からの編集入力にしたがって、前記生成された編集画面上の素子データを編集するプログラムエディタを備え、
該プログラムエディタは回路素子および演算子を表すデータが保護機能データであるか非保護機能データであるかを判別する判別機能を具備し、
複数の前記回路素子、これらの回路素子の出力を入力とする演算子、およびこれらの演算子の出力を入力とする回路素子の集合をプログラム編集画面に表示するとともに、アクセスが制限された回路素子及び演算子で構成される所定機能を実現するためのプログラムの集合を他の集合とは異なる表示形態で前記画面に表示することを特徴とする制御装置の保守ツール。
【請求項2】
請求項1記載の制御装置の保守ツールにおいて、
アクセスが制限された回路素子及び演算子で構成される前記プログラムの集合を他の集合とは異なる表示形態で表示装置の同一画面に表示することを特徴とする制御装置の保守ツール。
【請求項3】
請求項1記載の制御装置の保守ツールにおいて、
前記プログラムの集合には集合毎に異なるアクセス権限が設定可能であることを特徴とする制御装置の保守ツール。
【請求項4】
請求項1記載の制御装置の保守ツールにおいて、
アクセス権限には前記集合毎にアクセスの可能の程度を表す優先度が付与されており、ある集合に属するプログラムが、その集合よりも優先度が同等であるか、または優先度が高い別の集合に属するプログラムと入出力関係になる場合、
前記の入出力関係を実現する操作の途中に、優先度が高い集合に属するプログラムに対して操作を行っていることをユーザに報知することを特徴とする制御装置の保守ツール。
【請求項5】
請求項1記載の制御装置の保守ツールにおいて、
アクセス権限には前記集合毎にアクセスの可能の程度を表す優先度が付与されており
ある集合に属するプログラム甲が、その集合よりも優先度が同等であるか、または優先度が高い別の集合に属するプログラム乙の入力となる場合、
前記入出力関係を実現する操作の後に、プログラム甲をプログラム乙と同等の優先度の集合に属するように変更することを特徴とする制御装置の保守ツール。
【請求項6】
請求項1記載の制御装置の保守ツールにおいて、
アクセス権限には集合毎にアクセスの可能の程度を表す優先度が付与されており、
前記入力装置は、前記優先度に対応する権限を有しないユーザの入力を拒否する機能を備えることを特徴とする制御装置の保守ツール。
【請求項7】
請求項1記載の制御装置の保守ツールにおいて、
アクセス権限には集合毎にアクセスの可能の程度を表す優先度が付与されており、
前記入力装置は、前記優先度に対応する権限を有しないユーザの入力に対して警告を表示する機能を備えることを特徴とする制御装置の保守ツール
【請求項8】
請求項1記載の制御装置の保守ツールにおいて、
アクセス権限には集合毎にアクセスの可能の程度を表す優先度が付与されており、
前記入力装置は、前記優先度に対応する権限を有しないユーザの入力に対して、操作権限の認証を要求する画面を表示することを特徴とする制御装置の保守ツール。
【請求項9】
制御装置の機能を構成するシーケンスプログラムの要素である回路素子あるいは演算子を表す素子データ、並びに素子データの属性値をデータ格納装置から読み出し、読み出したデータをもとに制御装置の編集画面を生成するとともに、入力装置からの編集入力にしたがって、前記生成された編集画面上の素子データを編集するプログラムエディタを備え、
該プログラムエディタは回路素子および演算子を表すデータが保護機能データであるか非保護機能データであるかを判別する判別機能を具備し、
複数の前記回路素子、これらの回路素子の出力を入力とする演算子、およびこれらの演算子の出力を入力とする回路素子の集合をプログラム編集画面に表示するとともに、アクセスが制限された回路素子及び演算子で構成される所定機能を実現するためのプログラムの集合を他の集合とは異なる表示形態で前記画面に表示することを特徴とするプログラム編集装置。
【請求項10】
制御装置の機能を構成するシーケンスプログラムの要素である回路素子あるいは演算子を表す素子データ、並びに素子データの属性値をデータ格納装置から読み出し、読み出したデータをもとに制御装置の編集画面を生成するとともに、入力装置からの編集入力にしたがって、前記生成された編集画面上の素子データを編集するプログラムエディタを備え、
該プログラムエディタは回路素子および演算子を表すデータが保護機能データであるか非保護機能データであるかを判別する判別機能を具備し、
複数の前記回路素子、これらの回路素子の出力を入力とする演算子、およびこれらの演算子の出力を入力とする回路素子の集合をプログラム編集画面に表示するとともに、アクセスが制限された回路素子及び演算子で構成される所定機能を実現するためのプログラムの集合を他の集合とは異なる表示形態で前記画面に表示するとともに、
アクセス権限には集合毎にアクセスの可能の程度を表す優先度を付与し、ある集合に属するプログラム甲が、その集合よりも優先度が同等であるか、または優先度が高い別の集合に属するプログラム乙の入力となる場合、
前記入出力関係を実現する操作の後に、プログラム甲をプログラム乙と同等の優先度の集合に属するように変更することを特徴とするプログラム編集方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate


【公開番号】特開2012−8872(P2012−8872A)
【公開日】平成24年1月12日(2012.1.12)
【国際特許分類】
【出願番号】特願2010−145285(P2010−145285)
【出願日】平成22年6月25日(2010.6.25)
【出願人】(000005108)株式会社日立製作所 (27,607)
【Fターム(参考)】