<実施の形態1>
図1は、本発明の実施の形態1に係る監視制御システム1を構成するハードウェア構成を示す図である。監視制御システム1は、例えばコンピュータによって実現される。この監視制御システム1は、CPU(Central Processing Unit)10と、ROM(Read Only Memory)11と、RAM(Random Access Memory)12と、記憶装置13と、入力インタフェース14と、入力装置15と、出力インタフェース16と、出力装置17と、ネットワーク接続インタフェース18と、ネットワーク接続装置19と、バス20とを備える。データバスであるバス20は、監視制御システム1を構成する複数のハードウェアを互いに電気的に接続する。したがって、ハードウェア同士間では、バス20を介して情報の送受信が可能となっている。本実施の形態では、このバス20を介して、CPU10、ROM11、RAM12、記憶装置13、入力インタフェース14、出力インタフェース16及びネットワーク送受信インタフェース18が複数のハードウェアとして互いに電気的に接続されている。
この監視制御システム1は、監視制御システム1の利用者、管理者または運用者から起動の際に行われる操作を受け付けると、監視制御システム1を起動するためのブートプログラム、OS(Operating System)を読出して実行する。以下、監視制御システム1の各構成について詳細に説明する。
ROM11には、ブートプログラム等の制御プログラムが記憶されている。RAM12は、CPU10が記憶装置13から読み出したデータが一時的に記憶される。記憶装置13は、例えば、HDD(Hard Disk Drive)であり、記憶装置13には、OS、監視制御プログラム及び各種データが記憶されている。
CPU10は、ROM11に記憶されている制御プログラムを読込んで実行することにより、ROM11、RAM12、記憶装置13、入力インタフェース14及び出力インタフェースを制御する。また、CPU10は、記憶装置13に記憶されているOS及び監視制御プログラムを読出して実行することによって、監視制御プログラムで規定されている演算及び動作を行う。CPU10は、演算結果を記憶装置13に与え、記憶装置13は、CPU10から演算結果が与えられると、当該演算結果を記憶する。
入力装置15は、キーボード及びマウス等を備えており、利用者等からの操作を受け付けると、当該操作に対応する指令を入力インタフェース14に与える。入力インタフェース14は、入力装置15と電気的に接続されており、入力装置15をバス20に接続する。これにより、入力装置15からの指令が、バス20及び入力インタフェース14を介してCPU10に入力される。
出力装置17は、CRT(Cathode Ray Tube)ディスプレイ、液晶表示ディスプレイ等の、外部に情報を出力する装置であり、出力インタフェース16からの情報を表示する。出力インタフェース16は、出力装置17と電気的に接続されており、出力装置17をバス20に接続する。これにより、CPU10からの情報が、バス20及び入力インタフェース14を介して出力装置17に出力される。出力装置17は、例えば、CPU10からの情報を受けるとその情報を表示する。
ネットワーク接続装置19は、イーサネット(登録商標)カード、シリアルポート等の、外部コンピュータや外部デバイスと接続する接続装置であり、外部コンピュータ等と情報を送受信する。ネットワーク接続インタフェース18は、ネットワーク接続装置19と電気的に接続されており、ネットワーク接続装置19をバス20に接続する。これにより、CPU10からの情報及び指令が、バス20及びネットワーク接続インタフェース18を介してネットワーク接続装置19に出力される。ネットワーク接続装置19は、CPU10からの情報及び指令を受けると、その指令に基づいて、CPU10からの情報を外部コンピュータ等に送信する。一方、ネットワーク接続装置19は、外部コンピュータ等からの情報を受信すると、当該情報をバス20及びネットワーク接続インタフェース18を介してCPU10に入力する。
<監視制御システムにおける機能ブロック>
図2は、図1に示されるCPU10が主に記憶装置13に記憶されている監視制御プログラムを読込んで起動することにより、監視制御システム1に形成される機能ブロックを示す図である。図2に示すように、監視制御システム1は、複数のデータ処理部2と、データ振分部3と、インタフェース4と、データ振分定義記憶部5と、リクエスト記憶部6とを備える。
監視制御システム1は、監視対象である複数のデバイス9及び他の監視制御システム1と、ネットワークやシリアル等により互いに電気的に接続されている。本実施の形態では、これらはネットワーク8により互いに接続されているものとする。
監視制御システム1に接続されている複数のデバイス9は、複数の数値データ、及び、複数種類のイベントデータを検出する。複数の数値データは、例えば、河川の流量のデータ、及び、ビルの温度のデータである。複数種類のイベントデータは、例えば、コンピュータ異常、数値データの異常、及び、他のシステムからの事象における異常を示すデータである。複数のデバイス9は、検出した複数の数値データ及び複数種類のイベントデータを入出力点に出力する。なお、データ処理部2にて収集して数値データの異常(上限値、下限値など)を検出し、イベントデータとして他のデータ処理部2へ通知することもある。
複数のデータ処理部2のそれぞれは、例えば、プログラム上のコンポーネントに相当するものであり、データに対して、加工・変換・蓄積・表示・送受信(収集)・管理等の各種処理(各種機能)の少なくともいずれか一つを行う。データ処理部2におけるデータの蓄積方法としては、データベース(例えばRDBMSやXMLDB)、ファイル形式で保存することが可能である。図2においては、複数のデータ処理部2の一例として、外部からのデータを収集するデータ処理部2aと、データを表示するデータ処理部2bと、データを管理するデータ処理部2c、2dとから構成されている。なお、本実施の形態では、データ処理部2aは、他の監視制御システム1上で動作しているデータ処理部2との間でデータを送受信するネットワーク送受信機能も備えている。監視制御システム1は、複数のデータ処理部2のそれぞれが各種処理(各種機能)を行うことにより、多様な制御監視を実現することができる。本実施の形態に係る監視制御システム1では、新たな機能、つまり、新たなデータ処理部2の追加が容易となっている。
複数のデータ処理部2のうちデータ収集の機能を有するデータ処理部2aは、複数のデバイス9の入出力点から複数の数値データを収集し、収集した複数の数値データを加工する。以下、収集した数値データ、及び、加工した数値データを、総称して「収集・加工数値データ」と呼ぶ。
複数のデータ処理部2においては、複数の収集・加工数値データが、複数種類の周期、例えば、1分、1時間及び1日の周期ごとに更新されていく。ここでいう更新は、過去の収集・加工数値データに収集・加工数値データが上書きされてもよく、あるいは、過去の収集・加工数値データを残しつつ直近の収集・加工数値データが記憶されてもよい。いずれの動作にするかは、各データ処理部2においてどのような処理が行われるかに委ねられる。
複数のデータ処理部2のデータ処理部2aは、このように更新される複数の収集・加工数値データを、更新周期の種類ごとにグループ化する。この結果、グループ化されたデータが更新周期の種類の数だけ形成される。例えば、1分、1時間及び1日の三種類の更新周期が用意されている場合には、三つのグループ化されたデータが形成される。以下、グループの単位を示す識別子をカテゴリ7と呼び、周期に係るカテゴリ7を「周期カテゴリ7p」と呼ぶこともある。
このことを、図3を用いて詳細に説明する。図3は、複数の収集・加工数値データを複数種類の周期カテゴリ7pにグループ化したときの一例を示す図である。入出力点識別番号51は、「A0001」及び「A0002」等のように複数のデバイス9の入出力点を一意に識別するための番号である。図に示されるように、複数の収集・加工数値データは、入出力点識別番号51ごとに取得されるものであり、「名前」、「データ型」及び「カレント値」などのような属性52ごとのデータ(属性値53)を含んでいる。
周期カテゴリ7pの一種である1分カレント値カテゴリ7pmにおいては、複数の収集・加工数値データのうち1分周期で更新される収集・加工数値データ(属性値53)がグループ化される。また、周期カテゴリ7pの一種である1時間カテゴリ7phにおいては、複数の収集・加工データのうち1時間周期で更新される収集・加工数値データ(属性値53)がグループ化される。
以下、周期カテゴリ7pごとにグループ化された複数の収集・加工数値データ(属性値53)をカテゴリデータ54と呼ぶ。図3に示されるように、一つの周期カテゴリ7pには、一つのカテゴリデータ54が形成される。このカテゴリデータ54は、データ処理部2同士間で送受信され、各データ処理部2は、カテゴリデータ54に対して加工・変換・蓄積・表示・送受信(収集)・管理のいずれかの処理を行う。
なお、図3に示されるように、複数の収集・加工数値データを複数の周期カテゴリ7pにグループ化した際には、定義カテゴリ7dが副次的に生成される。この定義カテゴリ7dにおいては、カテゴリデータ54に関する、入出力点識別番号51などの入出力点の情報、名前及びデータ型のデータ(属性値53)がグループ化されている。この定義カテゴリ7dのデータは、周期カテゴリ7pのカテゴリデータ54に適宜付加される。
複数データ処理部2のデータ処理部2aは、以上で説明した複数の収集・加工数値データと同様に、複数のデバイス9の入出力点から複数種類のイベントデータを収集する。データ処理部2aは、複数種類のイベントデータをイベントの種類ごとにグループ化する。この結果、グループ化されたデータがイベントの種類の数だけ形成される。以下、イベントに係るカテゴリ7を「イベントカテゴリ7e」と呼ぶ。
このことを、図4を用いて詳細に説明する。図4は、複数種類のイベントデータを複数種類のイベントにグループ7eにグループ化したときの一例を示す図である。図に示されるように、複数種類のイベントデータは、イベントデータごとに付与される「イベントID」、イベントが発生した時間を示す「タイムスタンプ」、イベントの現在の状態を示す「イベント状態」などのような属性52ごとのデータ(属性値53)から構成されている。
イベントカテゴリ7eの一種である気象イベントカテゴリ7ewにおいては、複数種類のイベントデータのうち気象に関するイベントデータ(属性値53)がグループ化される。また、イベントカテゴリ7eの一種であるシステムイベントカテゴリ7esにおいては、複数種類のイベントデータのうちシステムの故障に関するイベントデータ(属性値53)がグループ化される。
以下、上述と同様に、イベントカテゴリ7eごとにグループ化された複数種類のイベントデータ(属性値53)をカテゴリデータ54と呼ぶ。図4に示されるように、一つのイベントカテゴリ7eには、一つのカテゴリデータ54が形成される。イベントカテゴリ7eに係るカテゴリデータ54は、周期カテゴリ7pに係るカテゴリデータ54と同様にデータ処理部2同士間で送受信され、各データ処理部2は、カテゴリデータ54に対して加工・変換・蓄積・表示・送受信(収集)・管理のいずれかの処理を行う。
以下の説明においては、周期カテゴリ7p及びイベントカテゴリ7eのそれぞれを、総称して「カテゴリ7」と呼ぶこともある。上述の複数のデータ処理部2の動作を換言すれば、本実施の形態に係る複数のデータ処理部2は、データ処理部2aにおいて、複数の収集・加工数値データ及び複数種類のイベントデータを複数のカテゴリ7にグループ化して、複数のカテゴリデータ54を生成する。
データ処理部2は、他のデータ処理部2からカテゴリデータ54を必要とする際には、カテゴリ7と後述の応答回数とを含む「リクエスト」を生成し、当該リクエストをインタフェース4を介してデータ振分部3に送信する。以下、リクエストをデータ振分部3に送信するデータ振分部2を「リクエスト送信元のデータ処理部2」と、リクエストに含められるカテゴリ7を「リクエスト対象カテゴリ」と呼ぶこともある。
一方、データ処理部2は、カテゴリ7に対応するカテゴリデータ54を他のデータ処理部2に送信しようとする際には、当該カテゴリ7と、当該カテゴリデータ54とを含む「レスポンス」を生成し、当該レスポンスをインタフェース4を介してデータ振分部3に送信する。以下、レスポンスをデータ振分部3に送信するデータ処理部2を「レスポンス送信元のデータ処理部2」、レスポンスに含められるカテゴリ7を「レスポンス対象カテゴリ」とそれぞれ呼ぶこともある。
データ振分部3は、リクエストを受信してから、当該リクエストと同一のカテゴリ7を含むレスポンスを受信した場合には、当該レスポンスを、当該リクエストを送信したリクエスト送信元のデータ処理部2に送信する。このようなデータ振分部3については後述する。
インタフェース4は、複数のデータ処理部2とデータ振分部3との間におけるレスポンスの送受信等を支援するものであり、全データ処理部2に実装されている。インタフェース4には、「初期化メソッド」、「終了メソッド」、「レスポンス受信メソッド」、「リクエスト送信メソッド」、及び、「レスポンス送信メソッド」という五つのメソッドが定義されている。
初期化メソッドは、全データ処理部2が実装するものであり、データ振分部3により実行される。一つのデータ処理部2の初期化メソッドがデータ振分部3によって実行されると、当該一つのデータ処理部2が初期化される。
終了メソッドは、全データ処理部2が実装するものであり、データ振分部3により実行される。一つのデータ処理部2の終了メソッドがデータ振分部3によって実行されると、当該一つのデータ処理部2が停止する。
レスポンス受信メソッドは、全データ処理部2が実装するものであり、データ振分部3により実行される。一つのデータ処理部2のレスポンス受信メソッドがデータ振分部3によって実行されると、当該一つのデータ処理部2は、データ振分部3から送信されるレスポンスを受信する。
リクエスト送信メソッドは、複数のデータ処理部2のうち少なくとも一つのデータ処理部2に利用される。当該少なくとも一つのデータ処理部2は、インタフェース4が提供するリクエスト送信メソッドを利用して、リクエストをデータ振分部3に送信する。
レスポンス送信メソッドは、複数のデータ処理部2のうち少なくとも一つのデータ処理部2により利用される。当該少なくとも一つのデータ処理部2は、インタフェース4が提供するレスポンス送信メソッドを利用して、レスポンスをデータ振分部3に送信する。
データ振分部3は、例えば、プログラム上のコンポーネントに相当するものであり、複数のデータ処理部2及びインタフェース4を介してレスポンスを送受信し、かつ、複数のデータ処理部2からインタフェース4を介してリクエストを受信する。データ振分部3は、リクエストを送信したリクエスト送信元のデータ処理部2に、当該リクエストと同じカテゴリ7を含むレスポンスを振り分ける。この際に、データ振分部3は、後述するデータ振分定義記憶部5に記憶されているデータ振分定義情報30を参照したり、受信したリクエストをリクエスト記憶部6に一時的にキャッシュ(記憶)させたりする。この動作の詳細な説明は後述する。
データ振分部3は、レスポンス及びリクエストの送受信を行うだけでなく、インタフェース4を介して、複数のデータ処理部2の起動及び停止も行う。本実施の形態では、データ振分部3が起動及び停止すべき複数のデータ処理部2は、データ振分定義記憶部5に記憶されている。つまり、データ振分部3は、データ振分定義記憶部5に記憶されている複数のデータ処理部2を起動するとともに、これらをインタフェース4を介して初期化する。また、データ振分部3は、データ振分定義記憶部5において記憶されている複数のデータ処理部2をインタフェース4を介して停止する。なお、データ処理部2を起動させる方法としては、例えば、C++のDLL読込み技術やJava(登録商標)のjarファイルをクラスローディングする技術等を活用する。
図2に示されるデータ振分定義記憶部5は、図1に示される記憶装置13の機能ブロックであり、データ処理部2とカテゴリ7とを関連付けるデータ振分定義情報30を記憶している。
図5は、データ振分定義情報30の一例を示す図である。図に示されるように、データ振分定義情報30は、ID31、プログラムファイル32、プログラムアドレス33、レスポンス対象カテゴリ34、リクエスト対象カテゴリ35及び仮想プログラム36という、六つの項目に関する情報から構成されている。
ID31は、複数のデータ処理部2のそれぞれに付与される、データ処理部2を一意に識別するための番号を示す。プログラムファイル32は、対応するデータ処理部2において実行されるプログラムファイルの名前を示す。プログラムアドレス33は、監視制御システム1が起動する際に、データ処理部2に割り当てられる、自コンピュータ上での参照先のアドレスを示す。図5においては、Cプログラムによるアドレスを表記しているが、C++プログラムやJava(登録商標)プログラム等の言語によるアドレスで表記されていてもよい。
レスポンス対象カテゴリ34は、ID31により識別されるデータ処理部2が、データ振分部3に送信するレスポンスに含めることが可能なカテゴリ7を示す。つまり、ID31により識別されるデータ処理部2は、レスポンス対象カテゴリ34のカテゴリ7に属するカテゴリデータ54を管理しており、当該カテゴリ7及び当該カテゴリデータ54を含むレスポンスをデータ振分部3に送信することが可能である。例えば、図5においてID31として「1」が付与されているデータ処理部2は、1分カレント値カテゴリを含むレスポンスをデータ振分部3に送信することが可能である。なお、このレスポンス対象カテゴリ34は、本実施の形態では用いられず、後述の実施の形態において用いられる。したがって、本実施の形態においてレスポンス対象カテゴリ34は必須ではない。
リクエスト対象カテゴリ35は、ID31により識別されるデータ処理部2が、データ振分部3に送信するリクエストに含めることが可能なカテゴリ7を示す。つまり、ID31により識別されるデータ処理部2は、リクエスト対象カテゴリ35に示されるカテゴリ7のカテゴリデータ54が必要な場合には、当該カテゴリ7を含むリクエストをデータ振分部3に送信することが可能である。例えば、図5においてID31として「2」が付与されているデータ処理部2は、1分カレント値カテゴリのカテゴリデータ54を必要とするデータ処理部2であり、当該カテゴリデータ54を必要とする場合に、1分カレント値カテゴリを含むリクエストをデータ振分部3に送信することが可能である。
図5に示されるように、本実施の形態に係るリクエスト対象カテゴリ35においては、複数のカテゴリ7は互いに異なり、当該複数のカテゴリ7のそれぞれは、複数のデータ処理部2のいずれか一つに関連付けられている。つまり、一つのカテゴリ7が重複することなく、複数のカテゴリ7が複数のデータ処理部2に関連付けられている。
なお、図5に示される1分カレント値カテゴリは、図3に示される1分カレント値カテゴリ7pmを示す。また、図5に示される1日カテゴリ、1月カテゴリ及び1年カテゴリのそれぞれは、周期カテゴリ7pの一種である。カレント値カテゴリは、複数の周期カテゴリ7pをまとめたものである。カレント値異常イベントカテゴリは、イベントカテゴリ7eの一種である。
仮想プログラム36は、他の監視制御システム1に対してリクエストやレスポンスを送信する際に、経由すべきデータ処理部2のID31を示す。本実施の形態では、仮想プログラム36には、他の監視制御システム1とデータを送受信したりするデータ送受信(収集)のデータ処理部2aのID31が示されることになる。
図2に示されるリクエスト記憶部6は、図1に示される記憶装置13の機能ブロックであり、データ振分部3が受信したリクエストの状況を示すリクエストキャッシュ情報を記憶している。
図6は、リクエストキャッシュ情報の一例を示す図である。図に示されるように、リクエストキャッシュ情報40は、リクエスト対象カテゴリ41、ID42及び応答回数43という、三つの項目に関する情報から構成されている。
リクエスト対象カテゴリ41は、現在リクエスト中のカテゴリ7を示す。つまり、データ振分部3が、データ処理部2からリクエストを受信したが、それに対応するレスポンスを当該データ処理部2に送信することが完了していない場合に、当該リクエストに含まれるカテゴリ7が示されている。ID42は、リクエスト対象カテゴリ41のカテゴリ7を含むリクエストをデータ振分部3に送信したリクエスト送信元のデータ処理部2を一意に識別するための番号を示す。このID42の番号は、図5に示されるデータ振分定義情報30のID31の番号と同じである。応答回数43は、一回のリクエストに対してデータ振分部3からデータ処理部2に送信されるべきレスポンスの回数を示すものである。例えば、応答回数43が「1」を示している場合にはレスポンスが1回のみ送信されるべきであることを示し、「2」を示している場合にはレスポンスが2回送信されるべきであることを示す。応答回数43が「*」を示している場合にはリクエストの停止が呼ばれるまでレスポンスが継続して送信されるべきであることを示す。
次に、CPU10が記憶装置13に記憶されている監視制御プログラムを実行することにより行われる、本実施の形態に係る監視制御システム1の動作を図7〜12を用いて説明する。
図7は、監視制御システム1の起動の際に行われる動作を示すフローチャートである。この動作では主に、データ振分部3が、起動後にデータ振分定義情報30を読み込み、データ振分定義情報30において特定されている複数のデータ処理部2を一つずつ順次に起動し初期化する。この動作の前には、データ振分部プログラムがCPU10に読み出されることにより、データ振分部3が実行されているものとする。以下、この動作について、図7を用いて詳細に説明する。
まず、ステップs1にて、起動されたデータ振分部3は、データ振分定義記憶部5から、データ振分定義情報30を構成している全データを読み込む。ステップs2にて、データ振分部3は、図5に示される全データを表の一行単位のデータ(行単位データ)のうち、一番上の行単位データを抜き出す。それから、ステップs3にて、データ振分部3は、抜き出した行単位データにおいて、仮想プログラム36が無設定であるか否かを判定する。ステップs3において無設定であると判定された場合にはステップs4に進む。無設定でない、つまり設定済みであると判定された場合にはステップs6に進む。
ステップs4にて、データ振分部3は、行単位データから一つのデータ処理部2のプログラムファイル32を取得し、当該一つのデータ処理部2を起動し、起動されたデータ処理部2のアドレスをプログラムファイル33に格納する。プログラムアドレス33を取得し、当該一つのデータ処理部2を起動する。そして、ステップs5にて、データ振分部3は、起動した一つのデータ処理部2に対し、インタフェース4にて定義されている初期化メソッドを実行する。これにより、起動した一つのデータ処理部2が初期化される。
ステップs6にて、データ振分部3は、データ振分定義情報30において特定されている全データ処理部2に対して以上の動作が行われたかを判定する。ステップs6において当該全データ処理部2に対して動作が行われたと判定した場合には図7に示される工程が終了し、そうでない場合にはステップs2に進む。再度のステップs2においては、データ振分部3は、先に抜き出した行単位データから一つ下に位置する行単位データを抜き出す。
こうして、データ振分部3は、ステップs1で読み込んだデータ振分定義情報30において特定されている全データ処理部2に対し、ステップs3〜s5の動作を繰り返すループ動作を行うことにより、当該全データ処理部2を起動し初期化する。
図8は、一つのデータ処理部2がカテゴリデータ54を必要とする際に行われる動作を示すフローチャートである。この動作では主に、当該一つのデータ振分部2が、データ振分部3にリクエストを送信する。なお、必要であれば、図8に示される工程は、上述の初期化(ステップs5)直後に行われてもよい。以下、この動作について、図8を用いて詳細に説明する。
まず、ステップs10にて、データ処理部2は、自身が必要とするカテゴリデータ54のカテゴリ7を特定し、当該カテゴリ7を含むリクエストを生成する。この際、データ処理部2は、1回のリクエストで何回のカテゴリデータ54が送信されるべきかを示す応答回数もリクエストに含める。ステップs11にて、当該データ処理部2は、インタフェース4にて定義されているリクエスト送信メソッドを利用して、生成したリクエストをデータ振分部3に送信する。ステップs12にて、データ振分部3は、当該データ処理部2、つまり、リクエスト送信元のデータ処理部2から送信されたリクエストを受信する。
この時点では、データ振分部3は、自身が受信したリクエストがどのデータ処理部2から送信されたか、つまり、リクエスト送信元のデータ処理部2がどれかを特定できていない。
そこで、ステップs13にて、データ振分部3は、受信したリクエストに含まれるカテゴリ7に基づいて、図5に示されるデータ振分定義情報30から、リクエスト送信元のデータ処理部2のID31を特定する。具体的には、データ振分部3は、データ振分定義情報30のリクエスト対象カテゴリ35のカテゴリ7のうち、受信したリクエストと同じカテゴリ7を特定し、当該カテゴリ7に関連付けられたデータ処理部2のID31を取得する。
ここで、リクエスト対象カテゴリ35は、データ処理部2がデータ振分部3に送信するリクエストに含めることが可能なカテゴリ7であることから、データ振分部3は、上述の動作を行うことにより、リクエスト送信元のデータ処理部2のID31(以下、「リクエスト送信元のID31」と略することもある)を取得することになる。そして、本実施の形態では、データ振分定義情報30においては、同一のカテゴリ7が重複することなく、複数のカテゴリ7が複数のデータ処理部2に関連付けられていることから、リクエスト送信元のID31が一意に取得される。以上により、データ振分部3は、カテゴリ7に基づいて、リクエストがどのデータ処理部2から送信されたのかを一意に特定することができる。
ステップs13の後、ステップs14にて、データ振分部3は、リクエスト送信元のID31、ステップs12にて受信したリクエストに含まれるカテゴリ7、及び、応答回数を、リクエストキャッシュ情報40のID42、リクエスト対象カテゴリ41、及び、応答回数43としてそれぞれ登録し、図8に示される工程が終了する。
図9は、一つのデータ処理部2がカテゴリデータ54を送信する際に行われる動作を示すフローチャートである。この動作では主に、カテゴリデータ54を送信しようとする一つのデータ処理部2が、当該カテゴリデータ54を含むレスポンスをデータ振分部3に送信する。以下、この動作について、図9を用いて詳細に説明する。なお、ここでは、カテゴリデータ54が生成される工程についても最初に説明する。
ステップs20にて、データ処理部2aは、ネットワーク8を介して複数のデバイス9からの複数の数値データ及び複数種類のイベントデータを受信する。ステップs21にて、データ処理部2aは、受信したこれらデータを必要に応じて加工・変換する。ステップs22にて、データ処理部2aは、複数の収集・加工数値データ及び複数種類のイベントデータを複数のデバイス9の入出力点ごとに蓄積する。そして、ステップs23にて、データ処理部2aは、複数の収集・加工数値データ及び複数種類のイベントデータを複数のカテゴリ7にグループ化して、複数のカテゴリデータ54を生成する。
以上のステップs20〜s23における複数のカテゴリデータ54の生成は、データを送受信(収集)する機能を有するデータ処理部2aにおいて少なくとも行われる。その一方で、以下に説明するステップs24以降におけるレスポンスの送信は、データ処理部2aに限ったものではなく、複数のデータ処理部2において適宜行われる。
ステップs24にて、カテゴリデータ54を送信しようとするデータ処理部2は、当該カテゴリデータ54及びそのカテゴリ7を含むレスポンスを生成する。ステップs25にて、当該データ処理部2は、インタフェース4に定義されているレスポンス送信メソッドを利用して、生成したレスポンスをデータ振分部3に送信する。ステップs26にて、データ振分部3は、当該データ処理部2、つまり、レスポン送信元のデータ処理部2から送信されたレスポンスを受信する。
次に、ステップs27にて、データ振分部3は、受信したレスポンスに含まれるカテゴリ7と一致するカテゴリ7が、リクエストキャッシュ情報40のリクエスト対象カテゴリ41におけるカテゴリ7と一致するかを判定する。換言すれば、データ振分部3は、リクエスト送信元のデータ処理部2から受信したリクエストに含まれるリクエスト対象カテゴリと、レスポンス送信元のデータ処理部2から受信したレスポンスに含まれるレスポンス対象カテゴリとが互いに一致するかを判定する。ステップs27において、カテゴリ7が一致すると判定された場合には、ステップs28に進み、そうでない場合には図9に示される工程が終了する。
ステップs28にて、データ振分部3は、リクエストキャッシュ情報40の応答回数43を更新する。具体的には、応答回数43が自然数を示している場合には、データ振分部3は、当該自然数から1を引き、応答回数43が「0」となった段階でリクエストキャッシュ情報40からそのリクエスト対象カテゴリ41等のデータを削除する。応答回数43が「*」を示している場合には何もしない。
ステップs29にて、データ振分部3は、リクエストキャッシュ情報40からリクエスト送信元のID42を取得する。そして、データ振分部3は、データ振分定義情報30において、取得したID42と同じ番号を示すID31を特定し、当該ID31に対応するプログラムアドレス33を取得する。そして、ステップs30にて、データ振分部3は、当該ID31により識別されるリクエスト送信元のデータ処理部2に対し、インタフェース4に定義されているレスポンス受信メソッドを実行し、リクエスト送信元のデータ処理部2にレスポンスを送信する。こうして、リクエスト送信元のデータ処理部2は、所望のカテゴリデータ54を含むレスポンスをデータ振分部3から受信することにより、当該所望のカテゴリデータ54を取得することができる。その後、リクエスト送信元のデータ処理部2は、当該カテゴリデータ54に対して、自身に割り当てられている加工等の処理を行う。そして、図9に示される工程が終了する。
以上においては、監視制御システム1内においてリクエスト及びレスポンスを送受信する際の動作について説明したが、以下においては、監視制御システム1が他の監視制御システムとリクエスト及びレスポンスを送受信する際の動作について説明する。
図10は、監視制御システム1のデータ処理部2が他の監視制御システム1からリクエストを受信する際に行われる動作を示すフローチャートであり、図11は、監視制御システム1のデータ処理部2aが他の監視制御システム1にレスポンスを送信する際に行われる動作を示すフローチャートである。以下、この動作について、図10,11を用いて説明する。
図10に示されるステップs40にて、他の監視制御システム1とデータを送受信する機能を有するデータ処理部2aは、他の監視制御システム1のデータ処理部2から上述と同じリクエストと、当該監視制御システム1を一意に識別するIPアドレスとを受信する。ステップs41にて、データ処理部2aは、受信したリクエストに含まれるカテゴリ7などの情報と、リクエスト送信元の監視制御システム1のIPアドレスとを互いに関連付けて一時的にキャッシュする。ステップs42にて、データ処理部2aは、インタフェース4に定義されているリクエスト送信メソッドを利用して、ステップs41にて受信したリクエストをデータ振分部3に送信する。それ以降は、ステップs13〜s14、及び、ステップs20〜s29と同様の工程が行われる。
そして、図11に示されるステップs43にて、ステップs30と同様に、データ振分部3は、リクエスト送信元のデータ処理部2aがレスポンスを受信するように、当該データ処理部2aに対してレスポンス受信メソッドを実行し、リクエスト送信元のデータ処理部2aにレスポンスを送信する。これにより、データ処理部2aは、データ振分部3に送信したリクエストと同じカテゴリ7を含むレスポンスをデータ振分部3から受信する。
ステップs44にて、データ処理部2aは、ステップs43にて受信したレスポンスに含まれるカテゴリ7に基づいて、ステップs41においてキャッシュしている情報から、リクエスト送信元の監視制御システム1のIPアドレスを取得する。この際、複数のIPアドレスを取得してもよい。それから、ステップs45にて、データ処理部2aは、取得したIPアドレスで識別される、他の監視制御システム1にレスポンスを送信する。
以上により、監視制御システム1は、他の監視制御システム1からリクエストを受信した場合に、当該リクエストと同一のカテゴリを含むレスポンスを他の監視制御システム1に送信することができる。
次に、監視制御システム1のデータ処理部2aが他の監視制御システム1にリクエストを送信する際に行う動作を簡単に説明し、その後、監視制御システム1のデータ処理部2aが他の監視制御システム1からレスポンスを受信した際に行う動作を簡単に説明する。
まず、監視制御システム1のデータ処理部2aが他の監視制御システム1にリクエストを送信する際に行う動作について説明する。データ処理部2aは、必要とするカテゴリデータ54のカテゴリ7を特定し、当該カテゴリ7を含むリクエストを生成する。この際、データ処理部2aは、1回のリクエストで何回のカテゴリデータ54が送信されるべきかを示す応答回数もリクエストに含める。そして、データ処理部2aは、生成したリクエストを他の監視制御システム1に送信する。
次に、監視制御システム1のデータ処理部2aが他の監視制御システム1からレスポンスを受信した際に行う動作について説明する。データ処理部2aは、他の監視制御システム1からレスポンスを受信した場合には、ステップs25〜ステップs30の動作を行う。これにより、リクエスト送信元のデータ処理部2は、他の監視制御システム1から、所望のカテゴリデータ54を含むレスポンスを受信することができる。
図12は、監視制御システム1の停止の際に行われる動作を示すフローチャートである。この動作では主に、データ振分部3が、データ振分定義情報30を読み込み、データ振分定義情報30において特定されている複数のデータ処理部2を一つずつ順次に停止する。以下、この動作について、図12を用いて詳細に説明する。
まず、ステップs50にて、データ振分部3は、データ振分定義記憶部5から、データ振分定義情報30を構成している全データを読み込む。ステップs51にて、データ振分部3は、図5に示される全データを表の一行単位のデータ(行単位データ)のうち、一番上の行単位データを抜き出す。それから、ステップs52にて、データ振分部3は、抜き出した行単位データにおいて、仮想プログラム36が無設定であるか否かを判定する。ステップs52において無設定であると判定された場合にはステップs53に進む。無設定でない、つまり設定済みであると判定された場合にはステップs55に進む。
ステップs53にて、データ振分部3は、行単位データから一つのデータ処理部2を取得する。そして、ステップs54にて、データ振分部3は、当該一つのデータ処理部2に対し、インタフェース4にて定義されている終了メソッドを実行する。これにより、当該一つのデータ処理部2が停止する。
ステップs55にて、データ振分部3は、データ振分定義情報30において特定されている全データ処理部2に対して以上の動作が行われたかを判定する。ステップs55において当該全データ処理部2に対して動作が行われたと判定した場合には図12に示される工程が終了し、そうでない場合にはステップs51に進む。再度のステップs51においては、データ振分部3は、先に抜き出した行単位データから一つ下に位置する行単位データを抜き出す。
こうして、データ振分部3は、ステップs50で読み込んだデータ振分定義情報30において特定されている全データ処理部2に対し、ステップs52〜s54の動作を繰り返すループ動作を行うことにより、当該全データ処理部2を停止する。
以上のような本実施の形態に係る監視制御システム1及び監視制御プログラムによれば、データ振分部3が、リクエストに含まれるカテゴリ7と、レスポンスに含まれるカテゴリ7とに基づいて、リクエストを送信したデータ処理部2に適切なレスポンスを送信する。したがって、新たな機能を有するデータ処理部2を追加する際には、カテゴリ7及びカテゴリデータ54の種類が増減することになるが、リクエスト及びレスポンスの形式を変更する必要がないことから、インタフェース4を変更、拡張しなくて済む。よって、新たな機能を容易に追加することができる。
また、データ振分部3は、追加した新しいデータ処理部2をデータ振分定義記憶部5に記憶すれば、既存のデータ処理部2と同様に、起動及び停止することができることから、新たな機能を容易に追加することができる。
また、本実施の形態では、データ振分定義記憶部5において、複数のデータ処理部2に関連付けられる複数のカテゴリ7は互いに異なっていることから、データ振分部3は、レスポンスに含まれるカテゴリ7と、リクエストに含まれるカテゴリ7に基づいて、レスポンス(カテゴリデータ54)を必要とするリクエスト送信元のデータ処理部2を一意に特定することができる。したがって、データ処理部2を追加する際に、そのデータ処理部2のレスポンスを、複数のデータ処理部2のうちどのデータ処理部2に対して送信すべきかについて意識しなくても、当該レスポンスを適切に送信することができる。よって、新たな機能を容易に追加することができる。
なお、本実施の形態では、互いに異なる複数のカテゴリ7のそれぞれが、複数のデータ処理部2のいずれか一つに関連付けられたものとした。しかし、これに限ったものではなく、同一のカテゴリ7が複数のデータ処理部2に重複するように、複数のカテゴリ7と複数のデータ処理部2とを関連付けるものであってもよい。ただし、この場合には、レスポンスを必要とする一つのデータ処理部2、つまり、リクエスト送信元のデータ処理部2が一意に特定されない。そこで、この場合には次の二つの方法のいずれかを行うことにより、データ振分部3がリクエスト送信元のデータ処理部2を一意に特定することが可能となる。
一つ目の方法として、データ振分部3は、データ処理部2に対し、そのデータ処理部2のID31を予め与えておく。そして、リクエスト送信元のデータ処理部2は、データが必要となった場合に、自身のID31をリクエストに付与してデータ振分部3に送信する。データ振分部3は、このID31をリクエストキャッシュ情報40に登録する。これにより、データ振分部3はリクエスト送信元のデータ処理部2を一意に特定することができる。
二つ目の方法として、データ振分部3は、データ処理部2に対し、そのデータ処理部2のプログラムアドレス32を予め与えておく。そして、リクエスト送信元のデータ処理部2は、データが必要となった場合に、自身のプログラムアドレス32をリクエストに付与してデータ振分部3に送信する。データ振分部3は、このプログラムアドレス32をリクエストキャッシュ情報40に登録する。これにより、データ振分部3はリクエスト送信元のデータ処理部2を一意に特定することができる。
また、上述したレスポンス送信方法以外の送信方法として、データ振分部3は、受信したレスポンスに含まれるカテゴリ7に関連するすべてのID31をリクエストキャッシュ情報40から収集することにより、当該カテゴリ7に該当するすべてのデータ処理部2にレスポンスを送信するようにしてもよい。
<実施の形態2>
本実施の形態に係る監視制御システム1のハードウェア構成及び機能ブロック構成は、実施の形態1に係る監視制御システム1のハードウェア構成及び機能ブロック構成とそれぞれ同じである。以下、本実施の形態に係る監視制御システム1のハードウェア構成、及び、機能ブロック構成において、実施の形態1と同一の部分には同一符号を付与し、以下においては実施の形態1と異なる部分を中心に説明する。
本実施の形態に係る監視制御システム1及び監視制御プログラムにおいては、データ振分部3は、受信したリクエストと同じカテゴリ7を含むレスポンスのみを複数のデータ処理部2から受信するようになっている。以下、このような本実施の形態に係る監視制御システム1及び監視制御プログラムについて説明する。
本実施の形態に係るインタフェース4には、上述のメソッドに加えて、「リクエスト受信メソッド」が定義されている。このリクエスト受信メソッドは、全データ処理部2が実装するものであり、データ振分部3により実行される。一つのデータ処理部2のリクエスト受信メソッドがデータ振分部3によって実行されると、当該一つのデータ処理部2は、データ振分部3からリクエストを受信する。したがって、本実施の形態に係るデータ振分部3は、インタフェース4を介して、複数のデータ処理部2との間でレスポンスだけでなく、リクエストも送受信するようになっている。
本実施の形態に係るデータ振分部3は、一つのデータ処理部2からリクエストを受信した場合に、データ処理部2に対して当該リクエストを送信する。そして、複数のデータ処理部2のそれぞれは、データ振分部3からリクエストを受信した場合に、当該リクエストと同じカテゴリ7を含むレスポンスのみをデータ振分部3に送信する。これにより、データ振分部3は、必要なレスポンスのみを複数のデータ処理部2から受信することができるようになっている。
次に、本実施の形態に係る監視制御システム1の動作について図13,14を用いて説明する。
図13は、一つのデータ処理部2がカテゴリデータ54を必要とする際に行われる動作を示すフローチャートである。まず、実施の形態1で説明したステップs10〜s14(図8)が行われる。そして、ステップs15Aにて、データ振分部3は、全データ処理部2に対し、インタフェース4に定義されているリクエスト受信メソッドを実行し、ステップs12において受信したリクエストを全データ処理部2に対して送信する。これにより、全データ処理部2は、リクエストをデータ振分部3から受信する。なお、ここでは、データ振分部3が全データ処理部2にリクエストを送信するものとしたが、データ振分部3は、レスポンス対象カテゴリ34を参照して、リクエストと同じカテゴリ7を含むレスポンスを送信可能なデータ処理部2を特定し、特定した当該データ処理部2にのみリクエストを送信するものであってもよい。それから、ステップs16Aにて、各データ処理部2は、受信したリクエストに含まれるカテゴリ7を一時的にキャッシュする。そして、図13に示される工程が終了する。
図14は、一つのデータ処理部2がカテゴリデータ54を送信する際に行われる動作を示すフローチャートである。まず、実施の形態1で説明したステップs20〜s23(図9)が行われる。そして、ステップs24Aにて、カテゴリデータ54を送信しようとするデータ処理部2は、レスポンスに含めようとするカテゴリ7と、ステップs16Aでキャッシュされたカテゴリ7とが互いに合致するかを判定する。ステップs24Aにおいて合致すると判定された場合にはステップs24に進み、それ以降、実施の形態1で説明した工程と同じ工程が行われる。ステップs24Aにおいて合致しないと判定された場合には、各データ処理部2がレスポンスの生成及び送信を行わずに、図14に示される工程が終了する。この動作により、全データ処理部2は、データ振分部3から受信したリクエストと同じカテゴリ7を含むレスポンスのみを、データ振分部3に送信することになる。
以上のような本実施の形態に係る監視制御システム1及び監視制御プログラムによれば、実施の形態1と同様の効果を得ることができるとともに、データ振分部3は、必要なレスポンスのみを複数のデータ処理部2から受信することができる。したがって、データ振分部3において不要な処理を削減することができるため、データ振分部3の負荷軽減及び高速処理化を実現することができる。
<実施の形態3>
本実施の形態に係る監視制御システム1のハードウェア構成及び機能ブロック構成は、実施の形態2に係る監視制御システム1のハードウェア構成及び機能ブロック構成とそれぞれ同じである。以下、本実施の形態に係る監視制御システム1のハードウェア構成、及び、機能ブロック構成において、実施の形態2と同一の部分には同一符号を付与し、以下においては実施の形態2と異なる部分を中心に説明する。
本実施の形態に係る監視制御システム1及び監視制御プログラムにおいても、実施の形態2と同様、データ振分部3は、必要なレスポンスのみを複数のデータ処理部2から受信するようになっている。以下、このような本実施の形態に係る監視制御システム1及び監視制御プログラムについて説明する。
本実施の形態に係る複数のデータ処理部2は、入出力点識別番号51をリクエスト及びレスポンスに含める。入出力点識別番号51をリクエスト及びレスポンスに含める際には、例えば、入出力点識別番号51を含む、図3に示される定義カテゴリ7dのデータをリクエスト及びレスポンスに含めてもよい。
本実施の形態に係るデータ振分部3は、実施の形態2と同様、一つのデータ処理部2からリクエストを受信した場合に、全データ処理部2に対して当該リクエストを送信する。そして、複数のデータ処理部2のそれぞれは、データ振分部3からリクエストを受信した場合には、当該リクエストと同じカテゴリ7及び入出力点識別番号51を含むレスポンスのみをデータ振分部3に送信する。これにより、データ振分部3は、必要なレスポンスのみを複数のデータ処理部2から受信することができるようになる。
次に、本実施の形態に係る監視制御システム1の動作について図15,16を用いて説明する。
図15は、一つのデータ処理部2がカテゴリデータ54を必要とする際に行われる動作を示すフローチャートである。まず、実施の形態2で説明したステップs10〜s15A(図13)が行われる。ただし、本実施の形態に係るステップs10においては、当該一つのデータ処理部2は、カテゴリ7、応答回数、及び、入出力点識別番号51を含むリクエストを生成する。そして、ステップs16Bにて、各データ処理部2は、受信したリクエストに含まれるカテゴリ7及び入出力点識別番号51を一時的にキャッシュし、図15に示される工程が終了する。
図16は、一つのデータ処理部2がカテゴリデータ54を送信する際に行われる動作を示すフローチャートである。まず、実施の形態2で説明したステップs20〜s23(図14)が行われる。そして、ステップs24Bにて、カテゴリデータ54を送信しようとするデータ処理部2は、レスポンスに含めようとするカテゴリ7及び入出力点識別番号51と、ステップs16Bでキャッシュされたカテゴリ7及び入出力点識別番号51とが互いに合致するかを判定する。ステップs24Bにおいて合致すると判定された場合には、ステップs24に進み、それ以降、実施の形態1で説明した工程と同じ工程が行われる。ステップs24Bにおいて合致しないと判定された場合には、各データ処理部2がレスポンスの生成及び送信を行わずに、図16に示される工程が終了する。この動作により、全データ処理部2は、データ振分部3から受信したリクエストと同じカテゴリ7及び入出力点識別番号51を含むレスポンスのみを、データ振分部3に送信することになる。
以上のような本実施の形態に係る監視制御システム1及び監視制御プログラムによれば、実施の形態2と同様の効果を得ることができる。特に本実施の形態では、データ振分部3は、入出力点識別番号51を用いることによってより限定されたレスポンスのみをデータ処理部2から受信することができるため、データ振分部3において不要な処理をより削減することができる。したがって、データ振分部3の負荷軽減及び高速処理化を高めることができる。
<実施の形態4>
本実施の形態に係る監視制御システム1のハードウェア構成及び機能ブロック構成は、実施の形態2に係る監視制御システム1のハードウェア構成及び機能ブロック構成とそれぞれ同じである。以下、本実施の形態に係る監視制御システム1のハードウェア構成、及び、機能ブロック構成において、実施の形態2と同一の部分には同一符号を付与し、以下においては実施の形態2と異なる部分を中心に説明する。
本実施の形態に係る監視制御システム1及び監視制御プログラムにおいても、実施の形態2と同様、データ振分部3は、必要なレスポンスのみを複数のデータ処理部2から受信するようになっている。以下、このような本実施の形態に係る監視制御システム1及び監視制御プログラムについて説明する。
本実施の形態に係るデータ振分部3は、実施の形態2と同様、データ処理部2からリクエストを受信した場合に、全データ処理部2に対して当該リクエストを送信する。
本実施の形態に係る複数のデータ処理部2は、カテゴリ7及び応答回数に加えて、カテゴリデータ54を絞り込むことを可能にする後述する絞込条件をリクエストに含める。そして、複数のデータ処理部2のそれぞれは、データ振分部3からリクエストを受信した場合には、当該リクエストと同じカテゴリ7と、当該リクエストに含まれる絞込条件に合致するカテゴリデータ54とを含むレスポンスのみをデータ振分部3に送信する。これにより、データ振分部3は、必要なレスポンスのみを複数のデータ処理部2から受信することができるようになる。
次に、絞込条件について説明する。絞込条件とは、図3及び図4に示される、カテゴリデータ54の属性52に対して‘<’、‘<=’、‘=’、‘!=’、‘=>’、‘>’といったオペランドと閾値などの値とを組み合わせた絞込項目同士を、‘AND’または‘OR’によって組み合わせた絞込項目集合から構成した検索文である。図3において「イベント種別」と示される属性52において、「軽故障」と示される属性値53であるカテゴリデータ54を絞り込むための絞込条件は、XML形式では次のように記述される。
なお、監視制御システム1に共通な絞込条件は、予め属性値53の型やフォーマットを定めておくことも可能である。例えば、属性値取得開始時刻や取得個数などといったトレンドグラフや帳票等でよく使用されるものなどが挙げられる。その絞込条件の一例は、XML形式では次のように記述される。
次に、本実施の形態に係る監視制御システム1の動作について図17,18を用いて説明する。
図17は、一つのデータ処理部2がカテゴリデータ54を必要とする際に行われる動作を示すフローチャートである。まず、実施の形態2で説明したステップs10〜s15A(図13)が行われる。ただし、本実施の形態に係るステップs10においては、当該一つのデータ処理部2は、カテゴリ7、応答回数、及び、絞込条件を含むリクエストを生成する。そして、ステップs16Cにて、各データ処理部2は、受信したリクエストに含まれるカテゴリ7及び絞込条件を一時的にキャッシュし、図17に示される工程が終了する。
図18は、一つのデータ処理部2がカテゴリデータ54を送信する際に行われる動作を示すフローチャートである。まず、実施の形態2で説明したステップs20〜s24A(図14)が行われる。その一連のステップの最後のステップに当たるステップs24Aにおいて、レスポンスに含めようとするカテゴリ7と、ステップs16Cでキャッシュされたカテゴリ7とが合致すると判定された場合にはステップs24Cに進む。一方、ステップs24Aにおいて合致しないと判定された場合には、各データ処理部2がレスポンスの生成及び送信を行わずに、図18に示される工程が終了する。
ステップs24Cにて、カテゴリデータ54を送信しようとする複数のデータ処理部2のそれぞれは、レスポンスに含めようとするカテゴリデータ54が、ステップs16Cでキャッシュされた絞込条件に合致するかを判定する。ステップs24Cにおいて合致すると判定された場合には、ステップs24に進み、それ以降、実施の形態1で説明した工程と同じ工程が行われる。ステップs24Cにおいて合致しないと判定された場合には、各データ処理部2がレスポンスの生成及び送信を行わずに、図16に示される工程が終了する。この動作により、全データ処理部2は、データ振分部3から受信したリクエストと同じカテゴリ7と、当該リクエストに合致するカテゴリデータ54とを含むレスポンスのみを、データ振分部3に送信することになる。
以上のような本実施の形態に係る監視制御システム1及び監視制御プログラムによれば、実施の形態2と同様の効果を得ることができる。特に本実施の形態では、データ振分部3は、絞込条件を用いることによってより限定されたレスポンスのみを受信することができるため、データ振分部3において不要な処理をより削減することができる。したがって、データ振分部3の負荷軽減及び高速処理化を高めることができる。
なお、本実施の形態は一例であり、様々な形式にて検索条件を記述することができる。また、監視制御システム1に検索条件をあらかじめ決めておくことにより、不要な文字列解析等を省く方法を取ることも可能である。
また、以上では、本実施の形態に係る監視制御システム1を、本実施の形態2に適用して説明したが、これに限ったものではなく、実施の形態3に適用してもよい。
<実施の形態5>
本実施の形態に係る監視制御システム1のハードウェア構成は、実施の形態2と同じであるが、本実施の形態に係る監視制御システム1の機能ブロック構成は、実施の形態2と異なる。以下、本実施の形態に係る監視制御システム1の機能ブロック構成において、実施の形態2と同一の部分には同一符号を付与し、以下においては実施の形態2と異なる部分を中心に説明する。
本実施の形態に係る監視制御システム1及び監視制御プログラムにおいては、カテゴリデータ54の更新のタイミングに関わらず、データ振分部3は、指定時刻においてカテゴリデータ54を取得し、リクエスト送信元のデータ処理部2に当該カテゴリデータ54を送信するようになっている。以下、このような本実施の形態に係る監視制御システム1及び監視制御プログラムについて説明する。
図19は、本実施の形態に係る監視制御システム1の機能ブロックを示す図である。図に示すように、本実施の形態に係る監視制御システム1は、実施の形態1に係る監視制御システム1に、タイマー実行部50を加えたものである。そして、本実施の形態に係る監視制御システム1にけるインタフェース4、リクエスト、データ振分部3及びデータ振分定義情報30は、実施の形態2のそられに一部機能が加わったものとなっている。
本実施の形態においては、インタフェース4には、実施の形態1で説明した五つのメソッドに加えて、「送信指示リクエスト受信メソッド」が定義されている。この送信指示リクエスト受信メソッドは、全データ処理部2が実装するものであり、データ振分部3によって実行される。一つのデータ処理部2の送信指示リクエスト受信メソッドがデータ振分部3によって実行されると、当該一つのデータ処理部2は、データ振分部3から送信されるリクエストと実質的に同じ振分部生成リクエストを受信する。その直後に、当該一つのデータ処理部2は、当該振分部生成リクエストと同じカテゴリ7を含むレスポンスをデータ振分部3に送信する。
このように、送信指示リクエスト受信メソッドは、データ処理部2において、リクエストの受信と、レスポンスの送信とがほぼ同時に行われる同期型のメソッドである。なお、説明を簡単にするため、送信指示リクエスト受信メソッドが実行されて、レスポンスをデータ振分部3に送信するように指示されるデータ処理部2を、「レスポンス送信指示対象のデータ処理部2」と、以下呼ぶこともある。
本実施の形態に係る複数のデータ処理部2は、カテゴリ7及び応答回数を含む上述のリクエストだけでなく、カテゴリ7及び応答回数に加えて指定時刻の情報を含むリクエストも生成する。
本実施の形態に係るデータ振分部3は、これまで説明した動作に加え、指定時刻の情報を含むリクエストを受信した場合に、図5に示されるレスポンス対象カテゴリ34のうち、当該リクエストと同じカテゴリ7を特定する。そして、データ振分部3は、特定したカテゴリ7に関連付けられたデータ処理部2のID31を、レスポンス送信指示対象のデータ処理部2のID31(以下、略して「レスポンス送信指示対象のID31」と呼ぶこともある)を取得する。
データ振分部3は、受信したリクエストに含まれるカテゴリ7と、取得したレスポンス送信指示対象のID31とをタイマー実行部50に付与するとともに、当該リクエストに含まれる指定時刻に起動するようにタイマー実行部50に指示する。
タイマー実行部50は、データ振分部3から付与されたカテゴリ7及びレスポンス送信指示対象のID31を保持した状態で、指定時刻までスリープする。そして、タイマー実行部50は、指定時刻に達した場合に、保持しているカテゴリ7及びレスポンス送信指示対象のID31をデータ振分部3に付与する。
データ振分部3は、タイマー実行部50からカテゴリ7及びレスポンス送信指示対象のID31を受けた場合には、当該カテゴリ7を含む「振分部生成リクエスト」を生成する。そして、データ振分部3は、振分部生成リクエストを、レスポンス送信指示対象のID31で識別されるデータ処理部2に送信する。データ振分部3は、その後に当該データ処理部2から送信されるレスポンスを、リクエスト送信元のデータ処理部2に送信する。
図20は、一つのデータ処理部2がカテゴリデータ54を必要とする際に行われる動作を示すフローチャートである。まず、実施の形態1で説明したステップs10〜s14(図8)が行われる。ただし、本実施の形態に係るステップs10においては、当該一つのデータ処理部2は、指定時刻を含まないリクエストと、指定時刻を含むリクエストとを選択的に生成する。
ステップs14後のステップs17にて、データ振分部3は、ステップs12において受信したリクエストに指定時刻の情報が含まれているかを判定する。ステップs17にて、指定時刻の情報が含まれていると判定された場合にはステップs18に進み、そうでない場合には、図20に示される工程が終了する。
ステップs18にて、データ振分部3は、ステップs12にて受信したリクエストに含まれるカテゴリ7に基づいて、データ振分定義情報30からレスポンス送信指示対象のID31を取得する。具体的には、データ振分部3は、図5に示されるレスポンス対象カテゴリ34のうち、ステップs12にて受信したリクエストと同じカテゴリ7を特定し、当該カテゴリ7に関連付けられたデータ処理部2のID1を、レスポンス送信指示対象のID31として取得する。
そして、データ振分部3は、ステップs12にて受信したリクエストのカテゴリ7及びレスポンス送信指示対象のID31をタイマー実行部50に付与するとともに、指定時刻に起動するようにタイマー実行部50に指示する。タイマー実行部50は、データ振分部3から付与されたカテゴリ7及びレスポンス送信指示対象のID31を保持する。そして、図20に示される工程が終了する。
図21は、指定時刻にタイマー実行部50が起動する際に行われる動作を示すフローチャートである。ステップs60にて、タイマー実行部50は指定時刻までスリープしている。ステップs61にて、タイマー実行部50は指定時刻に起動する。そして、ステップs62にて、タイマー実行部50は、保持しているカテゴリ7及びレスポンス送信指示対象のID31をデータ振分部3に付与する。
ステップs63にて、データ振分部3は、タイマー実行部50から、保持していたカテゴリ7(データ振分部3がステップs12において受信したリクエストと同じカテゴリ7)を受けると、当該カテゴリ7を含む振分部生成リクエストを生成する。
そして、ステップs64にて、データ振分部3は、レスポンス送信指示対象のID31により識別されるレスポンス送信指示対象のデータ処理部2に対し、インタフェース4に定義されている送信指示リクエスト受信メソッドを実行し、生成した振分部生成リクエストを当該データ処理部2に送信する。
これにより、ステップs64では、以下のステップs64a〜s64dが行われる。まず、ステップs64aにて、レスポンス送信指示対象のデータ処理部2は、データ振分部3から、振分部生成リクエストを受信する。ステップs64bにて、レスポンス送信指示対象のデータ処理部2は、振分部生成リクエストに含まれるカテゴリ7を特定する。そして、レスポンス送信指示対象のデータ処理部2は、特定したカテゴリ7のカテゴリデータ54を、実施の形態1で説明したステップs20〜s23(図9)と同じ工程を行うことにより、デバイス9の各種データから生成する。ステップs64cにて、レスポンス送信指示対象のデータ処理部2は、当該カテゴリ7と、生成したカテゴリデータ54とを含むレスポンスを生成し、当該レスポンスをデータ振分部3に送信する。そして、ステップs64dにて、データ振分部3は、レスポンス送信指示対象のデータ処理部2からレスポンスを受信する。なお、以上のステップs64a〜s64dは、データ振分部3が振分部生成リクエストをレスポンス送信指示対象のデータ処理部2に送信してからすぐに行われる。
ステップs65にて、データ振分部3は、実施の形態1と同様に、リクエストキャッシュ情報40のリクエスト送信元のID42からID31を取得し、当該ID31に対応するプログラムアドレス33を取得する。そして、ステップs66にて、データ振分部3は、リクエスト送信元のデータ処理部2に対してレスポンス受信メソッドを実行し、リクエスト送信元のデータ処理部2に、ステップs64dにて受信したレスポンスを送信する。これにより、リクエスト送信元のデータ処理部2は、ほぼ指定時刻において、所望のカテゴリデータ54を含むレスポンスをデータ振分部3から受信し、当該所望のカテゴリデータ54を取得することができる。
ステップs67にて、実施の形態1のステップs28と同様に、データ振分部3は、リクエストキャッシュ情報40の応答回数43を更新する。そして、ステップs68にて、データ振分部3は、応答回数43が、「1」以上、または、「*」であるかを判定する。ステップs68において、応答回数43が「1」以上または「*」であると判定した場合にはステップs69に進み、そうでない場合には、図21に示される工程が終了する。ステップs69にて、データ振分部3は、図20に示されるステップs18と同様に、カテゴリ7及びレスポンス送信指示対象のID31をタイマー実行部50に付与するとともに、指定時刻に起動するようにタイマー実行部50に指示する。
以上のような本実施の形態に係る監視制御システム1及び監視制御プログラムによれば、リクエストを送信したデータ処理部2は、カテゴリデータ54の更新のタイミングに関わらず、ほぼ指定時刻にカテゴリデータ54を受信することができる。したがって、指定時刻が、当該データ処理部2がカテゴリデータ54を処理する少し前に設定されている場合には、データ処理部2は、入出力点から収集されて間もないデータを処理することができる。
<実施の形態6>
本実施の形態に係る監視制御システム1のハードウェア構成及び機能ブロック構成は、実施の形態1に係る監視制御システム1のハードウェア構成及び機能ブロック構成とそれぞれ同じである。以下、本実施の形態に係る監視制御システム1のハードウェア構成、及び、機能ブロック構成において、実施の形態1と同一の部分には同一符号を付与し、以下においては実施の形態1と異なる部分を中心に説明する。
図22は、一つのカテゴリデータ54を示す図である。この図22には、図3に示されていた1時間カテゴリ7phのカテゴリデータ54が示されている。図22に示すように、当該一つのカテゴリデータ54は複数の属性値53から構成されており、1時間カテゴリ7phは複数の属性52から構成されている。
本実施の形態では、カテゴリデータ54において、周期カテゴリ7pを構成する複数の属性52のいくつかを「仮想カテゴリ7v」とし、仮想カテゴリ7vに対応する属性値53を「仮想カテゴリデータ54v」としている。そして、本実施の形態に係る複数のデータ処理部2は、一つのカテゴリデータ54を複数の仮想カテゴリ7pにグループ化して複数の仮想カテゴリデータ54vを生成する。ここでは、周期カテゴリ7pについて説明しているが、イベントカテゴリ7eについても同様である。なお、仮想カテゴリ7vは、図22に示されるように、一つの属性52であってもよく、属性52の一部であってもよい。また、仮想カテゴリデータ54vとする属性値53は、例えば、通常のカテゴリ7が管理している属性値53をデプリケートして取得されてもよいし、必要に応じてカテゴリ7が管理している属性値53から取得されてもよい。
そして、複数のデータ処理部2は、仮想カテゴリ7v及び当該仮想カテゴリ7vに対応する仮想カテゴリデータ54vを含む仮想レスポンスと、仮想カテゴリ7vを含む仮想リクエストとを、それぞれ、上述のレスポンスと、上述のリクエストとして生成する。つまり、仮想レスポンス及び仮想リクエストが、これまで説明してきたレスポンス及びリクエストと同等に扱われる。
以上のような本実施の形態に係る監視制御システム1及び監視制御プログラムによれば、カテゴリデータ54のうち必要なデータを、仮想カテゴリデータ54vとして抜き出すことができる。したがって、送受信すべきレスポンス及びリクエストのデータ量を減らすことができるので高速処理化が可能となる。
<実施の形態7>
本実施の形態に係る監視制御システム1のハードウェア構成は、実施の形態5と同じであるが、本実施の形態に係る監視制御システム1の機能ブロック構成は、実施の形態5と異なる。以下、本実施の形態に係る監視制御システム1の機能ブロック構成において、実施の形態5と同一の部分には同一符号を付与し、以下においては実施の形態5と異なる部分を中心に説明する。
本実施の形態に係る監視制御システム1及び監視制御プログラムにおいては、データ振分部3とレスポンス等を送受信するデータ処理部2を別のデータ処理部2に変更したり、複数のデータ処理部2にデータ処理部2を追加したりすることが可能となっている。以下、このような本実施の形態に係る監視制御システム1及び監視制御プログラムについて説明する。
図23は、本実施の形態に係る監視制御システム1の機能ブロックを示す図である。図に示すように、本実施の形態に係る監視制御システム1は、実施の形態5に係る監視制御システム1に、候補データ処理組合設計部60と、候補データ処理記憶部61と、候補データ処理組合検証部62とを加えたものである。
候補データ処理組合設計部60は、複数のデータ処理部2として使用される複数の候補データ処理部68の組合せを行う設計ツールである。具体的には、利用者等は、候補データ処理組合設計部60においてGUI(Graphical User Interface)を用いて、組合わされた複数の候補データ処理部68のうちの一つの候補データ処理部68を別の候補データ処理部68に変更したり、当該複数の候補データ処理部68に新たな候補データ処理部68を追加したりする。そして、候補データ処理組合設計部60において登録操作が行われた場合には、複数の候補データ処理部68の組合に基づいて新たなデータ振分定義情報30が生成され、当該新たなデータ振分定義情報30がデータ振分定義記憶部5に記憶される。
新たなデータ振分定義情報30がデータ振分定義記憶部5に記憶されることから、候補データ処理組合設計部60で組合わされた複数の候補データ処理部68が、複数のデータ処理部2として使用される。本実施の形態では、以上のように候補データ処理部68の変更及び追加を行うことにより、データ処理部2の変更及び追加が可能となっている。
候補データ処理組合検証部62は、候補データ処理組合設計部60での複数の候補データ処理部68の組合せが正しいか否かを検証する機能を有する。
候補データ処理記憶部61は、候補データ処理組合設計部60の組合せを行う際に用いられる候補データ処理定義情報63を記憶している。候補データ処理定義情報63は、複数の候補データ処理部68と複数のカテゴリ7とを関連付けた情報を含む。図24は、候補データ処理定義情報63の一例を示す図である。図に示されるように、候補データ処理定義情報63は、ID64、データ処理名65、レスポンス対象カテゴリ66及びリクエスト対象カテゴリ67とから構成されている。ID64は、複数の候補データ処理部68のそれぞれを候補データ処理組合設計部60にて一意に識別するための番号を示す。データ処理名65は、候補データ処理組合設計部61の画面上において、候補データ処理部68として表示される名称を示す。レスポンス対象カテゴリ66は、一つの候補データ処理部68がデータ振分部3に送信するレスポンスに含めることが可能なカテゴリ7を示す。リクエスト対象カテゴリ67は、一つの候補データ処理部68がデータ振分部3に送信するリクエストに含めることが可能なカテゴリ7を示す。
次に、本実施の形態に係る監視制御システム1の動作について説明する。図25は、候補データ処理組合設計部60において、候補データ処理部68の変更が行われる際の動作を示すフローチャートである。
まず、ステップs80にて、候補データ処理組合設計部60は起動すると、図26に示されるように、複数の候補データ処理部68の組合せを表示する編集領域71と、複数の候補データ処理部68から一つの候補データ処理部68を選択するための選択領域72と、検索ボタン73と、一覧ボタン74と、設定ボタン75と、登録ボタン76とを画面70に表示する。
ステップs81にて、候補データ処理組合設計部60は、候補データ処理記憶部61に記憶されている候補データ処理定義情報63を読込む。ステップs82にて、候補データ処理組合設計部60は、データ振分定義記憶部5に記憶されているデータ振分定義情報30を読込む。そして、図27に示されるように、候補データ処理組合設計部60は、複数のデータ処理部2として使用されている複数の候補データ処理部68の組合せを編集領域71に表示する。
ここで、例えば、図24において、「データ収集データ処理」の候補データ処理部68には、レスポンス対象カテゴリ66として「カレント値カテゴリ」のカテゴリ7が関連付けられている。これは、「データ収集データ処理」の候補データ処理部68は、「カレント値カテゴリ」のカテゴリ7を含むレスポンスを生成可能であることを意味している。一方、「カレント値管理データ処理」の候補データ処理部68には、リクエスト対象カテゴリ67として「カレント値カテゴリ」が関連付けられている。これは、「カレント値管理データ処理」の候補データ処理部68は、「カレント値カテゴリ」のカテゴリ7を含むリクエストを生成可能であることを意味している。
したがって、これら候補データ処理部68がデータ処理部2として使用される場合には、データ振分部3の動作により、「カレント値カテゴリ」のカテゴリ7を含むレスポンスが、「データ収集データ処理」のデータ処理部2から、「カレント値管理データ処理」のデータ処理部2に送信されることになる。図27に示される矢印78は、候補データ処理部68同士においてレスポンスが送信される方向を示す。他の候補データ処理部68同士の間においても、矢印77が同様に表示されている。
ステップs83にて、編集領域71に表示された複数の候補データ処理部68のうち、編集対象の候補データ処理部68が選択される。選択後、編集領域71において、編集対象の候補データ処理部68が、他の候補データ処理部68と区別可能となるように、そのブロックにはハッチングなどが施される。
ステップs84にて検索ボタン73が押下げられると、候補データ処理組合設計部60は、レスポンス対象カテゴリ66から、編集対象の候補データ処理部68と同等のカテゴリ7が関連付けられた候補データ処理部68を取得する。例えば、図28においては、編集対象の候補データ処理部68として、「カレント値管理データ処理」の候補データ処理部68が選択されている。図24において、この「カレント値管理データ処理」の候補データ処理部68に関連付けられている、レスポンス対象カテゴリ66のカテゴリ7は、「1分カレント値カテゴリ」である。そして、同図において、「カレント値管理データ処理」の候補データ処理部68以外に、「1分カレント値カテゴリ」と関連付けられているのは、「スタブカレント値管理データ処理」の候補データ処理部68である。したがって、この場合にステップs84が行われる場合には、候補データ処理組合設計部60は、「スタブカレント値管理データ処理」を取得する。なお、スタブカレント値管理データ処理の候補データ処理部68は、データ処理部2として使用されると、模擬的な試験を行うことを可能にする。
ステップs85にて、候補データ処理組合設計部60は、編集対象の候補データ処理部68、及び、取得された候補データ処理部68を選択領域72に表示する。例えば、図28においては、編集対象の候補データ処理部68として「カレント値管理データ処理」が選択領域72に表示され、取得された候補データ処理部68として「スタブカレント値管理データ処理」が選択領域72に表示されている。
ステップs86にて、選択領域72に表示されている、編集対象の候補データ処理部68と別の候補データ処理部68が選択されてから設定ボタン75が押下げられると、候補データ処理組合設計部60は、編集対象の候補データ処理部68に代えて、選択された別の候補データ処理部68を編集領域71に表示する。例えば、図29には、図28に示される「カレント値管理データ処理」の候補データ処理部68に代えて、「スタブカレント値管理データ処理」の候補データ処理部68が編集領域71に表示される。
この変更に伴い、候補データ処理組合設計部60は、候補データ処理部68同士の間におけるレスポンスの送信方向を示す矢印77も変更する。例えば、図24に示されるリクエスト対象カテゴリ66において、「スタブカレント値データ処理」の候補データ処理部68にはカテゴリ7が登録されていない。つまり、当該候補データ処理部68がデータ処理部2として使用される場合には、当該データ処理部2は他のデータ処理部2からのレスポンスを必要としない。したがって、図28において「データ収集データ処理」の候補データ処理部68と、「カレント値管理データ処理」の候補データ処理68との間を接続していた矢印77が、図29に示される編集領域71においては消滅する。
ステップs86後のステップs87にて、候補データ処理組合検証部62が、編集領域71における複数の候補データ処理部68の組合せが正しいかを検証する。本実施の形態では、候補データ処理組合検証部62は、編集領域71に表示される複数の候補データ処理部68が管理するレスポンスにおいて、カテゴリ7が重複しているかを検証する。つまり、候補データ処理組合検証部62は、編集領域71に表示される複数の候補データ処理部68に関して、図24に示されるレスポンス対象カテゴリ66のカテゴリ7が重複しているかを検証する。なお、実施の形態1のようなシステム構成に対応するため、リクエスト対象カテゴリ67のカテゴリ7が重複しているかを合わせて検証することもできる。
本実施の形態に係る候補データ処理組合検証部62は、この検証に加えて、編集領域71に表示される複数の候補データ処理部68が生成するリクエストに対し、それと同じカテゴリ7を含むレスポンスが生成されるかを検証する。つまり、候補データ処理組合検証部62は、編集領域71に表示される複数の候補データ処理部68において、図24に示されるレスポンス対象カテゴリ66のカテゴリ7が、リクエスト対象カテゴリ67のカテゴリ7を含んでいるかを検証する。これにより、組合せ後の複数の候補データ処理部68が複数のデータ処理部2として使用される場合に、データ処理部2は、リクエストと同じカテゴリ7を含むレスポンスを確実に受信することができる。
ステップs87において、上述の二つの検証の結果、いずれも正しいと判定された場合には図25に示される工程が終了し、二つの検証のうちいずれか一つでも正しくないと判定された場合にはステップs88に進む。ステップs88にて、候補データ処理組合設計部60は、組合せが正しくない旨を画面70に表示した後、ステップs82に進んで上述と同じ工程が行われる。
以上、候補データ処理部68の変更について詳細に説明したが、新たな候補データ処理部2の追加は変更とほぼ同様であるため、簡単に以下説明する。
候補データ処理組合設計部60は、検索ボタン73または一覧ボタン74が押下げられた際に、候補データ処理定義情報63に登録されている候補データ処理部68の全てを選択領域72に表示する。そして、選択領域72に表示されている全候補データ処理部68のうち一つの候補データ処理部68が選択されてから設定ボタン75が押下げられると、候補データ処理組合設計部60は、選択された候補データ処理部68を編集領域71の空白部分に追加して表示する。この追加に伴い、候補データ処理組合設計部60は、候補データ処理部68同士の間におけるレスポンスの送信が新たに生じた場合には、当該送信方向を示す矢印77も追加する。そして、ステップs86以降の工程と同様の工程を行い、候補データ処理組合検証部62により検証が行われる。
図30は、候補データ処理組合設計部60が、以上の工程により行われた設計情報を、データ振分定義記憶部5にデータ振分定義情報30として記憶する動作を示すフローチャートである。この動作は、候補データ処理組合設計部60における候補データ処理部68の組合せ後に行われる。
ステップs90にて、画面70に表示されている登録ボタン76が押下げられると、ステップs91にて、候補データ処理組合設計部60は、データ振分定義記憶部5に記憶される新たなデータ振分定義情報30の生成を開始する。具体的には、まず、ステップs92にて、候補データ処理組合設計部60は、編集領域71に表示されている複数の候補データ処理部68の一覧を取得する。ステップs93にて、候補データ処理組合設計部60は、取得した全候補データ処理部68に対してID31となるIDを付与する。
ステップs90前において候補データ処理部68を変更する設計が行われた場合には、ステップs94にて、候補データ処理組合設計部60は、プログラムファイル32となる情報を変更する。ステップs90前において、候補データ処理部68を追加する設計が行われた場合には、同ステップs94にて、候補データ処理組合設計部60は、プログラムファイル32、レスポンス対象カテゴリ34、及び、リクエスト対象カテゴリカテゴリ35となる情報を新たなデータ振分定義情報30に追加する。これにより、データ振分定義情報30が新規に生成される。
ステップs95にて、候補データ処理組合設計部60は、新規に生成された新たなデータ振分定義情報30を、データ振分定義情報30としてデータ振分定義部5に保存する。こうして、候補データ処理部68を変更する設計が行われて、登録ボタン76が押下された場合には、データ処理部2が変更される。
以上のような本実施の形態に係る監視制御システム1によれば、互いにデータを送受信するデータ処理部2を、当該データ処理部2と同等のデータ処理部2に容易に代えることができる。特に、別のデータ処理部2が、スタブデータ値管理データ処理の機能を有する場合には、デバイス9などのハードウェアがなくても監視制御システム1を試験することができるので有効である。
また、本実施の形態では、候補データ処理組合設計部60が追加及び変更した複数のデータ処理部2に関して、当該複数のデータ処理部2が生成するレスポンスに含まれるカテゴリ7が重複しているかが検証されることから、一つのリクエストが、二つ以上のデータ処理部2に送信されるのを防ぐことができる。また、候補データ処理組合設計部60が追加及び変更した複数のデータ処理部2に関して、当該複数のデータ処理部2が生成するレスポンスに含まれるカテゴリ7が、リクエストに含まれるカテゴリ7を含んでいるかを検証する。これにより、データ処理部2がリクエストを送信すれば、当該データ処理部2は、当該リクエストと同じカテゴリ7を含むレスポンスを確実に受信することができる。
以上、本発明の実施の形態を詳細に開示し記述したが、以上の記述は本発明の適用可能な局面を例示したものにすぎず、本発明はこれに限定されるものではない。すなわち、記述した局面に対応する様々な例を、この発明の範囲から逸脱すること無い範囲内で考えることが可能となる。