(第1の実施形態)
図1は、本実施形態に係るプログラマブルコントローラシステム1の構成の一例を示す。なお、プログラマブルコントローラシステム1を、コントロールシステム1と記載することもあるものとする。コントロールシステム1は、それぞれ1以上の開発支援装置2と制御装置3とを備える。開発支援装置2を支援装置2、制御装置3をコントローラ3と記載することもあるものとする。図1には、理解容易のために、コントロールシステム1における支援装置2とコントローラ3とが、それぞれ1つずつ示される。
支援装置2は、ユーザから入力されたソースコードに基づいて、コントローラ3が実行する機械語のコードの生成を行う。この際に支援装置2は、コントローラ3が制御する装置(制御対象装置とも記載する)に対応する変数、又は制御対象装置の制御対象項目に対応する変数が、強制設定の対象になり得る否かの判定を行い、これに応じた機械語を生成する。
ここでの変数には、基本型の変数以外にも、例えばC言語における構造体のメンバー等が含まれるものとする。変数は、プログラムのソースコード中に記述され、制御対象装置や制御対象項目(制御対象装置と制御対象項目とをまとめて制御対象装置とも記載する)と対応付けられる。この変数に強制設定値が代入されることにより、制御対象装置は強制設定される。なおプログラムにおける変数への強制設定値の代入を、プログラムの強制設定、プログラムに対する強制設定などとも記載する。
なお、プログラムとは、広義の意味におけるプログラムを指し、例えば、IEC61131においては、POU(Program organization unit)であって、PG(Program)より広い意味を持つものとする。
また、機械語に変換されたプログラムを機械語オブジェクトと記載する。
コントローラ3は、支援装置から機械語オブジェクトを取得して、これを実行することにより、制御対象装置を制御する。コントローラ3には、後述する記憶部(第1記憶部32)が設けられ、当該記憶部のアドレスには1以上の変数が割り当てられている。なお、ここでは理解容易のために1つのアドレスには1つの変数が割り当てられている場合について述べる。
コントローラ3は、強制設定処理を実行する場合に、当該強制設定の対象となる変数が割り当てられたアドレスの記憶領域に強制設定値を格納する。
図1に示すように、支援装置2は、ユーザインターフェース20、プロジェクト管理部21、コンパイラ22、記憶部23、及び通信部24等を備える。コンパイラ22は、フロントエンドコンパイラ220及びバックエンドコンパイラ221を備える。記憶部23には、プロジェクトプログラム一覧230、変数・アドレス対応情報231、インスタンス・プログラム対応情報232、呼出関係情報233、強制設定可否情報一覧234、及び強制設定位置情報一覧235等が記憶されている。
プロジェクト管理部21は、ユーザインターフェース20とコンパイラ22と記憶部23とに接続されている。またコンパイラ22は、記憶部23と通信部24とに接続されている。なお、これら以外の接続関係があってもよく、接続関係は上記のものに限定されない。
コントローラ3は、通信部30、プログラム実行管理部31、第1記憶部32、及び第2記憶部33を備える。プログラム実行管理部31は、プログラム実行部310及び強制設定管理部311を備える。プログラム実行管理部31は、通信部30と第1記憶部32と第2記憶部33とに接続されている。また通信部30は、第1記憶部32と第2記憶部33とに接続されている。なお、接続関係は上記のものに限定されない。
第2記憶部33は、強制設定アドレス情報一覧330と強制設定位置情報一覧235等を記憶する。
まず、支援装置2の各機能ブロックについて説明する。ユーザインターフェース20は、例えばキーボード等の入力装置や、表示装置等の出力装置を、支援装置2と接続するためのインターフェースである。ユーザインターフェース20を介して、支援装置2は、開発者等のユーザからソースコード等の入力を受け付け、またユーザが開発を行うための画像を表示装置に表示する。
プロジェクト管理部21は、ユーザによる開発の支援のため、ユーザに対し開発環境を提供する。プロジェクト管理部21は、ユーザインターフェース20を介し入力されたソースコードを管理すると共に、これを適宜コンパイラ22へ出力する。またプロジェクト管理部21は、記憶部23に記憶されているプロジェクトプログラム一覧を管理する。またプロジェクト管理部21は、管理対象の1以上のプログラムの各々に対し、一意的な、例えば固定長の番号等を割り当てる。支援装置2における各プログラムは、この番号により管理される。なお、以下においてプログラム名、又はプログラムの名称と記載する場合には、これらは、このような番号である場合もあるものとする。
フロントエンドコンパイラ220は、ソースコードから中間コードを生成する。この際に、フロントエンドコンパイラ220は、ソースコード中の変数を、後述する第1記憶部32における直接アドレスか間接アドレスのいずれかに対応付けて、中間コードを生成する。直接アドレスとは、変数が格納される記憶領域の位置を直接的に指し示すアドレスであり、ここでは相対的なアドレスも含まれるとする。間接アドレスとは、例えばポインタ等であり、間接アドレスが含まれるコード又は当該コードを機械語へと変換したコード等の実行がされないと、アクセス先の第1記憶部32のアドレスが特定できないものである。中間コードには、演算子と被演算子(オペランドとも記載する)が含まれる。オペランドは、変数が割り当てられる直接アドレス又は間接アドレスである。
また後述するように、フロントエンドコンパイラ220は、ソースコード中の1以上のインスタンスの互いの呼出関係に基づき、それらのインスタンスの元となる各プログラム間の呼出関係に係る呼出関係情報233を生成する。この際に、フロントエンドコンパイラ220は、記憶部23が記憶するインスタンス・プログラム対応情報232を用いる。なお、インスタンスとは、プログラムにデータを付加したものであり、例えば、プログラム中の変数に値を代入したものである。
フロントエンドコンパイラ220は、生成した呼出関係情報233に基づき、更に強制設定可否情報一覧234の生成を行う。強制設定可否情報一覧234とは、後述するように、プログラム毎に、強制設定を行うことが有り得るか否かを示す情報であり、例えば、プログラムの名称と当該プログラムに対する強制設定の可否を示す情報とを含む。
バックエンドコンパイラ221は、フロントエンドコンパイラ220が生成した中間コードから機械語を生成する。この際に、バックエンドコンパイラ221は、強制設定可否情報一覧234を参照し、これに基づいて、強制設定処理を行うことが有るとしたプログラムについては、強制設定処理へのジャンプコードを含ませた機械語オブジェクトを生成し、一方、強制設定処理を行わないとしたプログラムについては、強制設定処理へのジャンプコードを含まない機械語オブジェクトを生成する。
フロントエンドコンパイラ220又はバックエンドコンパイラ221は、後述する強制設定位置情報235を生成し、これを記憶部23に記憶する。
記憶部23に記憶されているプロジェクトプログラム一覧230は、プロジェクト管理部21により管理されているプログラムの一覧である。またこのプロジェクトプログラム一覧230には、ユーザにより直接入力されたプログラムや部品化されたプログラム等が含まれている。
変数・アドレス対応情報231は、プログラム中の変数と、コントローラ3の第1記憶部32のアドレスとを関係付けした情報である。フロントエンドコンパイラ220は、変数・アドレス対応情報231を用いることにより、変数を含むソースコードから、第1記憶部32における直接アドレスであって当該変数が割り当てられたアドレスを含む中間コードを作成する。
インスタンス・プログラム対応情報232は、プロジェクト管理部21により生成されるものであり、インスタンスと、その元のプログラムとを対応付けした情報である。フロントエンドコンパイラ220は、インスタンス・プログラム対応情報232を用いて呼出関係情報233を生成する。
呼出関係情報233は、フロントエンドコンパイラ220により生成される情報であり、フロントエンドコンパイラ220が読み込んだプログラムがどのプログラムに呼び出されているのか、又はどのプログラムを呼び出すかを示す情報である。
強制設定可否情報一覧234は、フロントエンドコンパイラ220により生成され、ソースコードに含まれる各インスタンスの元となるプログラムに対する強制設定の可否を示す情報である。ここで、フロントエンドコンパイラ220が強制設定可能なプログラムとするものは、隠蔽され部品化されたプログラムではないプログラム、又は、隠蔽され部品化されたプログラムではないプログラムから直接呼び出されるプログラムである。隠蔽され部品化されたプログラムであって、且つ隠蔽され部品化されたプログラムではないプログラムから直接呼び出されないプログラムについては、フロントエンドコンパイラ220は、強制設定を行わない。
強制設定位置情報一覧235は、フロントエンドコンパイラ220又はバックエンドコンパイラ221により生成される情報であり、機械語オブジェクトにおける強制設定処理へのジャンプコードの位置(例えば機械語オブジェクトのコードにおけるジャンプコードの行番号)と、当該強制設定処理の対象となる変数が格納される記憶領域を指し示すアドレスとを関係付けした情報の一覧である。なお、ここでは強制設定位置情報235におけるアドレスは直接アドレスであるとするが、間接アドレスであってもよい。
通信部24は、バックエンドコンパイラ221により生成された機械語オブジェクトや強制設定位置情報一覧235等をコントローラ3に送信する。
なお、支援装置2からコントローラ3に対し、強制設定指示情報が送信されてもよい。この強制設定指示情報とは、例えばコントローラ3における第1記憶部32のアドレス(直接アドレス)と、このアドレスの記憶領域に記憶されている変数に代入するための強制設定値とを関係付けした情報である。なお、当該強制設定指示情報に強制設定値が含まれない場合があってもよく、この場合、コントローラ3は当該変数に対しその初期値等を設定してもよい。当該初期値等の値は、後述する第2記憶部33又はプログラム実行管理部31において予め記憶されている。なお、この場合の初期値等の値も強制設定値と記載する。
強制設定指示情報が支援装置2からコントローラ3へ送信される場合、ユーザインターフェース20を介し、ユーザにより、強制設定の対象の変数の変数名と、この変数に代入する強制設定値が、支援装置2に入力される。入力された変数名と強制設定値は、支援装置2における図示しない設定部に入力される。なお設定部は、ユーザインターフェース20、記憶部23、及び通信部24と接続されている。但し、これ以外の接続関係があってもよい。設定部は、記憶部23の変数・アドレス対応情報231を参照し、強制設定の対象の変数が格納される、コントローラ3の第1記憶部32のアドレスを取得する。そして設定部は、取得したアドレスと強制設定値とを関係付けした強制設定指示情報を、通信部24に出力する。通信部24は、当該強制設定指示情報をコントローラ3へ送信する。なお、強制設定指示情報は、支援装置2に代わり、又は支援装置2と共に、後述する監視装置からコントローラ3へ送信されてもよい。
コントローラ3の通信部30は、支援装置2から機械語オブジェクト、強制設定位置情報一覧235、及び強制設定指示情報等を受信し、これらをプログラム実行管理部31へ出力する。通信部30を介してプログラム実行管理部31が支援装置2から受信した機械語オブジェクトは、プログラム実行部310において処理され、強制設定位置情報一覧235は、強制設定管理部311により第2記憶部33へ記憶される。また支援装置2又は監視装置からの強制設定指示情報は、ここでは強制設定管理部311において処理されるものとするが、プログラム実行部310により処理されてもよい。
プログラム実行管理部31におけるプログラム実行部310は、機械語オブジェクトを実行する。プログラム実行部310は、強制設定処理へのジャンプコードを伴わない機械語オブジェクトについては、これをそのまま実行し、強制設定処理へのジャンプコードを伴う機械語オブジェクトについては、当該機械語オブジェクト中のジャンプコードをNOP(No Operation)命令に置き換えたコード、又はジャンプコードが示すジャンプ先の強制設定処理のコードを実行する。このジャンプコードのNOP命令への置き換えは、プログラム実行部310の機械語オブジェクトの実行に先立ち、プログラム実行部310又は強制設定管理部311により行われる。
ジャンプ先の、強制設定処理に係るコード(ジャンプ先コードとも記載する)は、プログラム実行部310、強制設定管理部311、第2記憶部33、又はその他の不図示の記憶部等に記憶されている。
プログラム実行部310は、強制設定指示情報を受け取らない間は、ジャンプコードに代わりNOP命令を実行する。これにより、無駄な強制設定処理の実行が回避できる。
強制設定管理部311(又はプログラム実行部310)は、強制設定指示情報を取得した場合、当該強制設定指示情報中のアドレスを、第2記憶部33に記憶されている強制設定位置情報一覧235において検索する。そして、強制設定管理部311(又はプログラム実行部310)は、このアドレスと関係付けられた、ジャンプコードの機械語オブジェクトにおける位置を取得する。強制設定管理部311が当該位置を取得する場合、強制設定管理部311は、機械語オブジェクトにおいてNOP命令に置き換えられていた当該位置のコードをジャンプコードへと戻して処理を実行するよう、プログラム実行部310に指示する。これに応じてプログラム実行部310は、当該位置におけるNOP命令をジャンプコードへ戻し、これを実行する。なお、NOP命令をジャンプコードへ変更する処理は、強制設定管理部311が行ってもよい。プログラム実行部310が上記位置を取得する場合、プログラム実行部310は、当該位置のNOP命令をジャンプコードに戻し、これを実行する。
強制設定管理部311は、強制設定指示情報において強制設定の対象となるアドレスが、第2記憶部33に記憶されている強制設定アドレス情報一覧330に記憶されていない場合に、当該アドレスを強制設定アドレス情報一覧330に登録する。なお、強制設定アドレス情報一覧330は、コントローラ3が受信した1以上の強制設定指示情報の各々における、第1記憶部32のアドレスと、当該アドレスが示す記憶領域に設定される強制設定値とを互いに対応付けた情報の一覧である。
プログラム実行部310は、ジャンプ先コードの実行の際に、強制設定アドレス情報一覧330を参照し、強制設定の対象となるアドレスが指し示す記憶領域に格納するための強制設定値を取得する。あるいは、強制設定管理部311が、強制設定アドレス情報一覧330から取得した強制設定値を、プログラム実行部310へ通知してもよい。
強制設定管理部311は、コントローラ3が支援装置2等から強制設定の解除の指示を受けた場合に、当該解除指示のアドレスに係る情報が強制設定アドレス記憶部330にある場合に、これを消去してもよいし、当該情報に解除指示があった旨を付加してもよい。
強制設定管理部311は、コントローラ3が支援装置2等から強制設定の解除の指示を受けた場合に、当該解除指示におけるアドレスと関係付けられた、コードの位置を、強制設定位置情報一覧235を参照して取得する。強制設定管理部311は、当該位置における機械語オブジェクトをNOP命令に戻すようプログラム実行部310に指示、又は、機械語オブジェクトにおける当該位置のジャンプコードをNOP命令に戻す。強制設定管理部311からジャンプコードをNOP命令へと戻す指示を受けたプログラム実行部310は、ジャンプコードをNOP命令へと戻す。
第1記憶部32の各アドレスの記憶領域には、上述したように、制御対象装置の制御に係るパラメータに相当する変数などが記憶されている。このような変数に対し、強制設定値が代入されることにより、制御対象装置を手動でコントロールすることが可能となる。
第2記憶部33は、強制設定アドレス情報一覧330と強制設定位置情報一覧235等を記憶する。
図2は、支援装置2においてユーザインターフェース20を介し表示装置によりユーザに提供される開発環境を例示する。図2における上部のウィンドウにおいて左側に示された、「プロジェクトツリーウィンドウ」とある部分には、記憶部23に記憶されるプロジェクトプログラム一覧230におけるプログラム間の関係が示されている。ここで示されるように、一連のプログラムのまとまりであるプロジェクトには、ライブラリとして、「LibProject」が含まれていることがわかる。なお、ライブラリとは、部品化したプログラムをひとまとめにしたものであり、ここではユーザに対し内部が隠蔽されたものを指すものとする。またプロジェクトには、ライブラリに含まれないプログラムとしてUFB2やLADDER等が含まれている。
図2において上に示されるウィンドウの中央から右側における部分(プロジェクトツリーウィンドウの右側)は、エディタ部分である。ユーザは、このエディタを用いることにより、プログラムにおける変数に値を代入するなどしてインスタンスの作成を行える。図2におけるエディタ部分には、インスタンス(Lib1_1_1)が示されている。当該インスタンスLib1_1_1は、プログラムLib1_1のインスタンスであって、プログラムLib1_1の変数V000に値が代入され、V001の値の出力するものである。また当該図におけるNewVar1、2は、端子を示し、プログラムLib1_1に含まれるコードに対応する。NewVar1を介してV000の値がLib1_1に代入され、NewVar2を介してV001の値がLib1_1から出力される。
図2の下部に示される「プロジェクトツリーウィンドウ」を参照すると、ライブラリ「LibProject」には、プログラム「Lib1_1」と「Lib1_2」が含まれることがわかる。
図2を参照して説明した上記開発環境は、プロジェクト管理部21により生成される。
図3は、呼出関係情報233を例示する。呼出関係情報233は、入力されたソースコードの行をフロントエンドコンパイラ220が順次読み出す際に、呼び出されるプログラムを呼出元のプログラムに関係付け、階層的に表したものである。なお、ソースコード上においては、インスタンスがインスタンスを呼び出す。フロントエンドコンパイラ220は、呼出関係情報233の生成において、インスタンス・プログラム対応情報232を用いて、呼出関係情報233を生成する。ここで、インスタンス・プログラム対応情報の一例を図4に示す。図4を参照すると、例えば「_siLAG2」から「_siLAG16」までの各インスタンスは、プログラム「_siLAG」に対しデータが付加されたものであることがわかる。
図3に戻ると、この上部に示される呼出関係情報233は、プログラム名を行毎に並べたものである。当該呼出関係情報233において、左側に示される数字は、右側にその名称が示されるプログラムの呼び出しの階層を表す。なお、図3におけるプログラムは、図2のプロジェクトツリーウィンドウに示されているものである。図3を参照して呼出関係情報233について具体的に説明すると、まずソースコード上、フロントエンドコンパイラ220によりプログラム「LADDER」のインスタンスが呼び出される。この「LADDER」のインスタンスの階層は1となる。次に、この「LADDER」のインスタンスにより呼び出されるものは、プログラム「Lib1_1」とプログラム「UFB2」の各インスタンスである。このため、これらの階層は、上記「LADDER」のインスタンスの階層1の次の2となる。続いて、「Lib1_1」のインスタンスから呼び出されるインスタンスは、プログラム「Lib1_2」のインスタンスであり、呼び出し元の「Lib1_1」のインスタンスの階層2の次の3となる。
図3に示されるように、フロントエンドコンパイラは、インスタンスの階層と共に、そのインスタンスの名称に代え、そのインスタンスの元となるプログラムの名称を、呼出関係情報233に含ませる。この際に、上述したインスタンス・プログラム対応情報232が参照される。図3の呼出関係情報233から、呼び出し側のインスタンスは、呼び出される側のインスタンスの階層から1を差し引いた数の階層にあることがわかる。また、呼び出し側のインスタンスの元のプログラムの名称は、呼び出される側のインスタンスの元のプログラムの名称よりも前(上の行)に置かれる。そして、呼び出し側のインスタンスの元のプログラムの名称を含む行は、これと同じ名称を含む他の行に比べ、呼び出される側のインスタンスの元のプログラムの名称を含む行から最も近いところに配置される。このため、階層3の「Lib1_1」の呼び出し元は、階層2の「UFB2」のインスタンスとなる。また、階層4の「Lib1_2」のインスタンスの呼び出し元は、階層3の「Lib1_1」のインスタンスである。
フロントエンドコンパイラ220は、階層の数を用いる呼出関係情報233に代わり、インスタンスの元のプログラムの呼出関係をツリーで表した呼出関係情報233を生成してもよい。このツリーを用いた呼出関係情報233を、図4の下部に示す。この図から、「LADDER」のインスタンスは、「Lib1_1」と「UFB2」の各インスタンスを呼び出し、「LADDER」のインスタンスに呼び出された「Lib1_1」のインスタンスは、「Lib1_2」のインスタンスを呼び出すことがわかる。また「LADDER」のインスタンスに呼び出された「UFB2」のインスタンスは、「Lib1_1」のインスタンスを呼び出し、この呼び出された「Lib1_1」のインスタンスは、「Lib1_2」のインスタンスを呼び出すことがわかる。
呼出関係情報233は、フロントエンドコンパイラ220により、以下に詳述する強制設定可否情報一覧234の生成に先立ち生成される。フロントエンドコンパイラ220は、生成した呼出関係情報233を用いて、強制設定可否情報一覧234を生成する。なお、呼出関係情報233の生成方法は既知のものであることから、説明を省略する。
図5を参照して、強制設定可否情報一覧234についての説明を行う。図5は、強制設定処理情報一覧234を例示する。強制設定可否情報一覧234は、ライブラリに含まれないプログラムから直接呼び出されない、ライブラリに含まれるプログラム(第1のプログラムとも記載する)に対し、コントローラ3が強制設定を行わないようにするための情報であり、また、ライブラリに含まれないプログラム、又はライブラリに含まれないプログラムから直接呼び出されるプログラム(これらのプログラムを第2のプログラムとも記載する)に対して強制設定が行われることを可能とするための情報である。
強制設定可否情報一覧234は、フロントエンドコンパイラ220により生成され、バックエンドコンパイラ221は、強制設定可否情報一覧234に基づいて、機械語を生成する。なお、ライブラリに含まれるプログラムであっても、ライブラリに含まれないプログラムから直接呼び出されるプログラムについては、当該プログラムにおける変数にユーザが強制設定値を格納する場合もあるため、このようなプログラムの強制設定を可能とした。
図5に例示される強制設定可否情報一覧234は、図3の上部に示す呼出関係情報233をフロントエンドコンパイラ220が読み出し生成したものである。図5の上部に示される強制設定可否情報一覧234は、初期状態におけるものである。また図5の下部に示される強制設定可否情報一覧234は、図3上部の呼出関係情報233において4行目となる「2 UFB2」までをフロンドエンドコンパイラ220が読み込んで生成したものである。
「管理番号」とは、フロントエンドコンパイラ220が、呼出関係情報233から順次読み出すインスタンスの元となるプログラムに対して付す連番である。また「強制設定の可否」とは、プログラムが強制設定の対象となり得るかを示すものであり、第1のプログラムの場合は「否」、第2のプログラムの場合は「可」が登録される。なお、初期状態の強制設定可否情報一覧234においては、プログラム名とその強制設定の可否が登録される各欄は、初期値のNULLが登録されている。
図3よりフロントエンドコンパイラ220は、最初に(管理番号:1)、プログラム名「LADDER」を読み出す。このプログラム「LADDER」は、図2を参照するとライブラリに含まれないことから、フロントエンドコンパイラ220は強制設定が可能と判定する。なお、この判定処理については後に詳述する。
同様に、フロントエンドコンパイラ220は、次に(管理番号:2)、呼出関係情報233(図3)から、プログラム名「Lib1_1」を読み出す。このプログラム「Lib1_1」は、図2を参照するとライブラリに含まれているが、ライブラリに含まれないプログラム「LADDER」より直接呼び出されている。このため、フロントエンドコンパイラ220は、プログラム「Lib1_1」に対し強制設定処理が可能であると判定する。
なお、図3の上部に示す呼出関係情報233において、同じプログラム名の「Lib1_1」が含まれる行が後の行において他にもある。そしてその異なる行では、同じプログラム名であっても、そのインスタンスの呼出元や階層等が異なることもある。これにより、呼出関係情報233において、先の行では或るプログラムが第2のプログラムであっても、後の行において第1のプログラムになる場合もあり得る。そしてこの場合、フロントエンドコンパイラ220が、一旦、呼出関係情報233における先の行のプログラムに対し強制設定を可能としてしまえば、その行より後の行の同じ名称のプログラムについては、これがその行において第1のプログラムであっても、そのプログラムについては強制設定可否情報234上では強制設定が可能なままとなる。これにより、そのようなプログラムからバックエンドコンパイラ221が生成する機械語オブジェクトには、強制設定処理へのジャンプコードが含められることが不可能にはならなくなる。このようなことは、ライブラリに含まれる他のプログラムについても同様である。詳細は後述する。
また同様に、フロントエンドコンパイラ220は、呼出関係情報233(図3)において、次に(管理番号:3)、プログラム名「Lib1_2」を読み出す。プログラム「Lib1_2」は、図2より、ライブラリに含まれ、また呼び出し関係情報233(図3)より、ライブラリに含まれないプログラムから直接呼び出されないプログラムであることがわかる。これによりプログラム「Lib1_2」は、第1のプログラムであり、フロントエンドコンパイラ220は、このプログラム「Lib1_2」に対し強制設定処理を行わないとしている。なお、呼出関係情報233において、プログラム名「Lib1_2」が含まれる行が、これより後の行にもある場合で、その行のプログラム「Lib1_2」がライブラリに含まれないプログラムより直接呼び出される場合には、強制設定処理情報232における「強制設定の可否」は「可」に更新され、これによりプログラム「Lib1_2」に対応する機械語オブジェクトは、強制設定処理へのジャンプコード等が含められることが可能になる。
図6は、フロントエンドコンパイラ220による強制設定処理情報の生成処理のフローを例示する。
まずフロントエンドコンパイラ220は、呼出関係情報233の先頭の行を読み込み、「処理対象行」に1を設定する(ステップS100)。フロントエンドコンパイラ220は、プログラム名と、そのプログラムのインスタンスの階層の情報(階層情報とも記載する)とを取得した場合(ステップS101:Yes)、当該プログラム名が強制設定可否情報一覧234に既に登録されているか、検索を行う(ステップS102)。プログラム名が登録されていない場合(ステップS103:No)、フロントエンドコンパイラ220は、強制設定可否情報一覧234に、このプログラム名を登録すると共に、このプログラムに対する強制設定の可否として「否」を登録する(ステップS104)。
続いて、フロントエンドコンパイラ220は、プロジェクトプログラム一覧230におけるライブラリにおいて、ステップS100(又はステップS111)において読み出したプログラム名の検索処理を実行する(ステップS105)。
なお、ステップS103において、ステップS100(又はステップS111)で読み込んだプログラム名が既に強制設定可否情報一覧234に登録されている場合には(ステップS103:Yes)、フロントエンドコンパイラ220は、ステップS104の処理を行わず、ステップS105の処理を実行する。
ステップS105において、ステップS100(又はステップS111)で読み出したプログラムがライブラリにない場合(ステップS106:No)、フロントエンドコンパイラ220は、強制設定可否情報一覧234において、当該プログラムは強制設定が可能であるとして「強制設定の可否」に「可」を登録する(ステップS107)。この処理により、フロントエンドコンパイラ220は、呼出関係情報233において順次その名称が読み出されるプログラムのうち、ライブラリにないプログラムを抽出して、これに対し強制設定を可能とできる。
ステップS105において、ステップS100(又はステップS111)で読み出したプログラムがライブラリにある場合には(ステップS106:Yes)、フロントエンドコンパイラ220は、当該プログラムの呼び出し元のプログラムの名称を取得する(ステップS108)。このステップS108の処理については、より詳しく後述する。
フロントエンドコンパイラ220は、ステップS108において取得したプログラム名がライブラリにあるか検索する(ステップS109)。
ステップS108において取得したプログラム名がライブラリにない場合(ステップS110:No)、フロントエンドコンパイラ220は、ステップS105において名称を検索対象としたプログラムは強制設定処理が可能であるとして、「強制設定の可否」に「可」を登録する(ステップS107)。この処理により、フロントエンドコンパイラ220は、呼出関係情報233において順次その名称が読み出されるプログラムのうち、ライブラリに含まれないプログラムから直接呼び出されるプログラムを抽出し、これに対し強制設定を可能とできる。
フロントエンドコンパイラ220は、「処理対象行」に1を加算し、呼出関係情報233における次の行を読み出し(ステップS111)、この行におけるプログラムについて、上記ステップS101からステップS107(ステップS106においてYesの場合には、ステップS108からステップS110の処理を含む)を繰り返す。
ステップS106及びステップS110における各処理により、第2のプログラムとして判定されたプログラムは、ステップS107において強制設定が可能なプログラムとして強制設定可否情報一覧234に登録される。そして一旦、強制設定が可能なプログラムとして登録されたものは、その後に同じ名称が呼出関係情報233から読み込まれても、強制設定可否情報一覧234において「強制設定の可否」に「否」を登録されない。同様に、呼出関係情報233の或る行からそのプログラム名を読み込まれ、強制設定可否情報一覧234において「強制設定の可否」に「否」を登録されたプログラムであっても、呼出関係情報233のその後の行から同じプログラム名が呼び出され、第2のプログラムとして判定され、強制設定が可能になることもある。
図7は、ステップS108における処理のフローを例示する。まずフロントエンドコンパイラ220は、「呼出元検索行」に処理対象行−1を設定する(ステップS400)。呼出元検索行が0であれば(ステップS401:Yes)、フロントエンドコンパイラ220は、呼び出し元のプログラム名が無い状態でリターンし(ステップS402)、上述したステップS109の処理に移る。なおこの場合、ステップS109に続くステップS110の判定結果は、Noとなる。
ステップS401において、呼出元検索行が0でなければ(ステップS401:No)、フロントエンドコンパイラ220は、呼出関係情報233における呼出元検索行のプログラムの階層情報を取得する(ステップS403)。このステップS403において取得した階層情報における階層が、処理対象行におけるプログラムの階層から1を引いた数の場合(ステップS404:Yes)、フロントエンドコンパイラ220は、呼出元検索行におけるプログラムを呼び出し元とし、この呼び出し元のプログラムの名称を取得してリターンする(ステップS405)。フロントエンドコンパイラ220は、これに続いてステップS109の上述した処理を実行する。
ステップS403においてフロントエンドコンパイラ220が取得した階層情報における階層が、処理対象行におけるプログラムの階層から1を引いたものと等しくない場合(ステップS404:No)、フロントエンドコンパイラ220は、呼出元検索行から1を引いたものを、新たに呼出元検索行として置き換えて(ステップS406)、ステップS400の処理へ戻り、同様の処理を繰り返す。
図6、7に示されるフロントエンドコンパイラ220の処理により、図5の上部に例示される初期状態の強制設定可否情報234から、同図の下部に例示される強制設定可否情報234が生成される。
なおここではフロントエンドコンパイラ220は、インスタンス・プログラム対応情報232を参照して、プログラム同士の呼出関係情報233を作成し、これを用いて強制設定可否情報234を作成したが、これに代わりフロントエンドコンパイラ220は、インスタンス同士の呼出関係に係る呼出関係情報233を生成し、これを用いて強制設定処理情報234を生成してもよい。この場合、上記ステップS100において、フロントエンドコンパイラ220が取得するのは、プログラム名ではなく、インスタンス名となり、またフロントエンドコンパイラ220は、ステップS101に続き、ステップS102に先立ち、インスタンス・プログラム対応情報234を参照して、ステップS100で取得したインスタンス名からプログラム名を取得する。
バックエンドコンパイラ221は、フロントエンドコンパイラ220が生成した強制設定可否情報234に基づいて、機械語オブジェクトを生成する。
図8は、バックエンドコンパイラ221による処理のフローを例示する。まずステップS500において、バックエンドコンパイラ221は、中間コードにおける最初の処理対象のプログラムの名称を取得するための処理を実行する。ここで、プログラム名を取得できない場合(ステップS501:No)、バックエンドコンパイラ221は、それまでに生成した機械語を、例えば通信部24へ出力する(ステップS502)。プログラム名を取得できた場合(ステップS501:Yes)、バックエンドコンパイラ221は、強制設定可否情報一覧234において、取得したプログラム名を検索し、そのプログラムの強制設定の可否に係る情報を取得する(ステップS503)。
プログラムの強制設定が可能の場合(ステップS504:Yes)、バックエンドコンパイラ221は、強制設定処理に係るジャンプコードを適宜含ませた、当該プログラムの機械語を生成する(ステップS505)。
強制設定可否情報一覧234において、当該プログラムの「強制設定の可否」に「否」が登録されている場合(ステップS504:No)、バックエンドコンパイラ221は、強制設定処理に係るジャンプコードを含まない、当該プログラムの機械語を生成する(ステップS506)。
バックエンドコンパイラ221は、ステップS505又はステップS506において生成した機械語を、ステップS502において出力するまで一時的に保持する。なお、この保持は一時的でなくともよい。
ステップS505又はステップS506の後、バックエンドコンパイラ221は、中間コードにおける次の処理対象のプログラムの名称を取得するための処理を実行する(ステップS507)。バックエンドコンパイラ221は、ステップS507において、次の処理対象のプログラムの名称を取得できない場合には(ステップS501:No)、ステップS502の処理を実行する。この際に、バックエンドコンパイラ221は、一時的に保持していた機械語を通信部24等へ出力する。
一方、バックエンドコンパイラ221は、処理対象のプログラムの名称を取得できた場合には(ステップS501:Yes)、上述したステップS503以降の動作を、ステップS507により取得したプログラム名のプログラムについて繰り返す。
図9は、バックエンドコンパイラ221によって生成された機械語を例示する。図9の上には、強制設定処理が無い場合の機械語が示され、同図の下には、強制設定処理が有る場合の機械語が示される。この2つの機械語は、共に同じ中間コードより生成されたものであるが、図9の下に示される機械語には、強制設定処理へのジャンプコードが含まれる。
図9について詳述すると、「LD」、「ADD」、及び「ST」は、それぞれロード命令、加算命令、書込(記憶)命令を示す。本実施形態において、強制設定処理のジャンプコードの付加は、書込命令に対して行われる。上述したように第1記憶部32は、各制御対象装置の変数を格納する記憶領域を有するが、プラントシステム等に異常が発生した場合、コントローラ3は、書込命令において強制設定処理へのジャンプコードがあることにより、制御対象装置に対応するアドレスの記憶領域に強制設定値を書込み、これにより不正な値の当該記憶領域への書き込みを防ぐことができるからである。但しこれに限定されず、機械語における書込命令以外の他の命令に、強制設定処理へのジャンプコードが含まれてもよい。
図9における強制設定処理に関するコードは、破線の四角に囲まれた部分のコードである。このうちの「LDR pc,[wk1,#64]」が、強制設定処理へのジャンプコードである。また「MOV lr,pc」は、ジャンプ先から戻るためのコードである。
なお、強制設定可否情報一覧234の「強制設定の可否」が「否」であるプログラムの機械語には、強制設定処理に関するコードは含まれない。
コントローラ3のプロジェクト実行部310は、支援装置2から取得した機械語オブジェクトを実行することで、強制設定処理が必要な場合に強制設定処理を実行し、そうでない場合に無駄な処理を行わない。
図10は、支援装置2のハードウェア構成を例示する。ここでは、支援装置2は、一般的なコンピュータとしてハードウェアを有し、支援装置2による処理は、以下に示すハードウェア5を具体的に利用することにより実行される。ハードウェア5は、互いにバス50によって接続されたプロセッサ51、メモリ52、記憶装置53、通信インターフェース回路54、及びユーザインターフェース回路55を備える。
プロセッサ51は、例えばシングルコア、デュアルコア、またはマルチコアのプロセッサである。
メモリ52は、例えばROM(Read Only Memory)、RAM(Random Access Memory)、又は半導体メモリである。
プロセッサ51が、メモリ52に記憶された情報、又は後述する記憶装置53からメモリ52に読み込んだ情報を用いて、メモリ52に記憶された各種プログラムを実行することにより、プロジェクト管理部21とコンパイラ22の各機能が実現される。また、メモリ52により、上記記憶部23の一部の機能が実現されてもよい。例えば、メモリ52が、コンパイラ22が生成した呼出関係情報233を一時的に記憶し、以下に記載する記憶装置23がプロジェクトプログラム一覧230、変数・アドレス対応情報231、インスタンス・プログラム対応情報232、強制設定可否情報一覧234、及び強制設定位置情報一覧235を記憶してもよい。
記憶装置53は、例えばハードディスクドライブ、光ディスク装置等であり、外部記憶装置や可搬型記憶媒体でもよい。記憶装置53により、記憶部23の全部又は一部の機能が実現される。
通信インターフェース回路54は、LAN(Local Area Network)、インターネット、またはイントラネット等を介して、支援装置2がコントローラ3等と通信を行えるようにするためのインターフェースである。通信インターフェース回路54により上記通信部24の機能が実現される。
ユーザインターフェース回路55は、キーボードやタッチパネル等の入力装置、又は液晶ディスプレイ等の表示装置を、支援装置2と接続するための回路である。ユーザインターフェース回路55により、上記ユーザインターフェース20の機能が実現される。
なお、上述した場合以外にも、支援装置2の機能ブロックの全て、又はその一部の機能は、適宜、専用のハードウェアにより実現されることもできる。
図11は、コントローラ3のハードウェア構成を例示する。ここでは、コントローラ3は、一般的なコンピュータとしてハードウェアを有し、コントローラ3による処理は、以下に示すハードウェア6を具体的に利用することにより実行される。ハードウェア6は、互いにバス60によって接続されたプロセッサ61、第1メモリ62、第2メモリ63、記憶装置64、及び通信インターフェース回路65を備える。
プロセッサ61は、例えばシングルコア、デュアルコア、またはマルチコアのプロセッサである。
第1メモリ62及び第2メモリ63は、例えばROM(Read Only Memory)、RAM(Random Access Memory)、半導体メモリである。
プロセッサ61が、第1メモリ62に記憶された情報、又は後述する記憶装置64から第1メモリ62に読み込んだ情報を用いて、第1メモリ62に記憶された各種プログラムを実行することにより、プログラム実行管理部31の機能が実現される。また、第1メモリ62により、上記第2記憶部33の機能の一部が実現されてもよい。例えば、第1メモリ62は、強制設定アドレス情報一覧330等を記憶してもよい。
第2メモリ63は、その全部又は一部の記憶領域が制御対象装置に対応付けられているメモリであり、プログラム実行管理部31の処理対象となるメモリである。第2メモリ63により、上記第1記憶部32の機能が実現される。なお、第2メモリ63に代わり、あるいはこれと共に、ハードディスクドライブ等の記憶装置により第1記憶部32の機能が実現されてもよい。
記憶装置64は、例えばハードディスクドライブ、光ディスク装置等であり、外部記憶装置や可搬型記憶媒体でもよい。記憶装置64により、第2記憶部33の機能が実現される。
通信インターフェース回路65は、LAN(Local Area Network)、インターネット、またはイントラネット等を介して、コントローラ3が支援装置2等と通信を行えるようにするためのインターフェースである。通信インターフェース回路65により上記通信部30の機能が実現される。
なお、上述した場合以外にも、コントローラ3の機能ブロックの全て、又はその一部の機能は、適宜、専用のハードウェアにより実現されることもできる。
本実施形態に係るコントロールシステム1によれば、オペレータが強制設定の対象としない部品化されたプログラムについて、支援装置2は、強制設定処理に関するコードを含めない機械語を生成する。またコントローラ3は、当該機械語に基づき、強制設定処理が不要の変数に対しては、強制設定処理を行わない。これらのことより、コントローラ3によるコードの実行に費やされる時間の削減ができると共に、プラントにおける制御対象装置の制御処理がより迅速になる。
(第2の実施形態)
プラントシステムにおいては、必要に応じて、複数人のオペレータが、その各々に割り当てられた監視装置を介し、強制設定指示情報の生成等の強制設定機能を使用する。しかし個々の監視装置においては、強制設定時の履歴情報はあるもののプラントシステム全体における強制設定の対象となっている変数の情報を総括的に管理することができなかった。つまり或る時点において、どの変数にどの値を強制設定しているかをオペレータが認識できなかった。本実施形態に係るコントロールシステム1’は、このような問題を解消するためのものである。
図12は、本実施形態に係るコントロールシステム1’の構成を例示する。本実施形態に係るコントロールシステム1’は、それぞれ1以上の監視装置(HCI装置、HCI:Human Computer Interaction)7とコントローラ3’と上述した支援装置2とを備える。なお、図12においては、コントロールシステム1’における監視装置7とコントローラ3’と支援装置2が、それぞれ1つ示されている。
監視装置7は、ユーザインターフェース70、記憶部71、処理部72、及び通信部73等を備える。処理部72は、ユーザインターフェース70、記憶部72、及び通信部73と接続されている。なおこれ以外の接続関係があってもよい。
コントローラ3’は、上記実施形態におけるコントローラ3の備える強制設定管理部311に代えて、強制設定管理部311’を備え、プログラム実行管理部31に代えて、プログラム実行管理部31’を備える。またコントローラ3’は、上記実施形態における第2記憶部33に代えて、第2記憶部33’を備える。そして第2記憶部33’は、上記実施形態における強制設定アドレス情報一覧330に代えて、強制設定アドレス情報330’を記憶する。
監視装置7のユーザインターフェース70は、表示装置等の出力装置やタッチパネル等の入力装置を、監視装置7に接続する。表示装置等に表示された制御対象装置の状態を確認したオペレータは、必要に応じ、入力装置を介して監視装置7に強制設定指示の入力を行う。
記憶部71は、監視装置7に対し一意的に割り当てられている自己の識別情報710、監視装置7の監視対象の1以上のTAGに係るTAG情報711、強制設定支援情報一覧712、及び支援装置2から通信部73を介して取得した変数・アドレス対応情報231等を記憶する。
ここで、TAGとは、制御対象装置の制御に係るパラメータを意味し、上記変数と対応付けられる。TAG情報711には、各TAGの、コード中における変数名と同等又は対応するTAGの番号(TAGNoとも記載する)と、TAGの名称とが互いに関係付けられ、含まれる。ここで、バルブを例に取れば、TAGはそのバルブの開閉度合いを示す変数に対応し、TAGの名称は「バルブの開閉度」等となる。
強制設定支援情報一覧712は、コントローラ3’から受信した強制設定支援情報を元に生成されたものであり、オペレータによる強制設定の支援のためのものである。
処理部72は、ユーザインターフェース70を介し入力された強制設定指示に基づき、記憶部71から必要な情報を読み出し、コントローラ3’に送信するための強制設定指示情報を生成する。
また処理部72は、通信部73を介してコントローラ3’から後述する強制設定支援情報を取得すると、記憶部72の強制設定支援情報一覧712にこれを蓄積するか、又は、強制設定支援情報一覧712を適宜更新する。この蓄積の際に処置部72は、ユーザインターフェース70を介しての表示装置における表示用に、強制設定支援情報を表示用に変換してもよい。また処理部72は、オペレータからの強制設定支援情報一覧712の表示指示をトリガとして、これを表示用に加工する処理を行い、ユーザインターフェース70を介して表示装置に出力してもよい。
強制設定支援情報一覧712には、監視装置7の運用当初から現在に至るまでの全ての強制設定支援情報が記憶されてもよいし、ある一定期間における強制設定支援情報が記憶されてもよい。
通信部73は、監視装置7がコントローラ3’及び支援装置2との間で情報の授受を行うための機能ブロックである。通信部73は、処理部72の指示に従い強制設定指示情報をコントローラ3’に送信し、強制設定支援情報をコントローラ3’から受信し、これを処理部72へ出力する。
コントローラ3’の強制設定管理部311’は、通信部30を介して、監視装置7から強制設定指示情報を取得する。そして強制設定管理部311’は、強制設定指示情報におけるアドレスが強制設定アドレス情報一覧330’に未登録の場合には、強制設定指示情報に含まれる情報を登録する。一方、強制設定指示情報におけるアドレスが既に強制設定アドレス情報一覧330’に登録されている場合には、強制設定管理部311は、当該アドレスにかかる強制設定アドレス情報一覧330’中のレコードを強制設定指示情報に基づき更新してもよいし、当該アドレスの変数に対し強制設定の解除がされていないレコード、すなわち現在において強制設定中の変数に係るレコードについては、更新せずに、通信部30を介して、強制設定が行えない旨の通知を当該強制設定指示情報の送信元へ送信してもよい。なお、コントローラ3’において、強制設置指示情報の送信元の支援装置2や1以上の監視装置7に対し、それぞれ優先順位が設けられていてもよい。この場合、強制設定管理部311’は、低い優先順位の監視装置7等により既に設定されている強制設定値等を、それより高い優先順位の監視装置7等から取得した強制設定指示情報に基づき上書きしてもよく、高い優先順位の監視装置7等により既に設定されている強制設定値等を、それより低い優先順位の監視装置7等からの強制設定指示情報に応じた上書きをしないこととしてもよい。
強制設定管理部311’は、監視装置7が強制設定支援情報の送信を要求した場合や監視装置7の起動等をトリガとして、強制設定アドレス情報一覧330’を用いて、強制設定支援情報を生成し、監視装置7に通信部30を介して送信する。なお、強制設定支援情報には、監視装置7を用いるオペレータの強制設定処理に必要な、強制設定アドレス情報一覧330’の内容の全部又は一部が含まれる。
強制設定管理部311’は、強制設定支援情報の生成の際に、強制設定アドレス情報一覧330’の強制設定に係る各アドレスに設定されている値を第1記憶部32から読み込むか、又は、強制設定アドレス情報一覧330’の強制設定に係る各アドレスに対応する制御対象装置のパラメータの値をその制御対象装置等から読み込むなどし、制御対象装置の源値として強制設定アドレス情報一覧330’に付加し、強制設定支援情報に含ませる。
また、強制設定管理部311’は、強制設定アドレス情報330’における各アドレスに対し強制設定を行った時刻、又は各アドレスに対する強制設定指示情報を受信した時刻を、アドレスに紐付けして第2記憶部33に記憶し、強制設定支援情報生成の際に用いる。
また、第2記憶部33は、強制設定アドレス情報一覧330’のアドレスに対応する制御対象装置が含まれるステーションを識別するための番号(ステーションNo、ST Noとも記載する)を、そのアドレスに対応付け、記憶していてもよい。この場合、強制設定管理部311’は、強制設定支援情報に、強制設定アドレス情報一覧330’における各アドレスに対応付けられたステーションNoを付加する。ただし、第2記憶部33のアドレス(又は変数)とステーションNoとの対応関係に係る情報を、監視装置7が保持していてもよく、監視装置7が強制設定支援情報を表示する際に、強制設定支援情報中のアドレス(又は変数)からステーションNoを取得してもよい。
強制設定支援情報を取得した監視装置7の処理部72は、これを強制設定支援情報一覧712へ登録、又は強制設定支援情報一覧712を更新する。
図13は、監視装置7を介してのオペレータによる強制設定に供される画面に表示される画像の例を示す。このようなオペレータの強制設定や監視等に供される画面を強制設定画面とも記載する。なお図13の強制設定画面には、背景が白、文字が黒で示されているが、これに限らず、例えば背景が黒で文字が白等で表示されてもよい。
図13において「PID001.PV」とあるのは、或るTAGのTAGNoである。ここでは、TAGNoが「PID001.PV」のTAGについて示されている。また、「This_is_Tagname」の欄には、通常、TAGの名称が表示される。
図13に示される「Source Value」とは、TAGの源値を意味する。ここではTAGNoが「PID001.PV」のTAGの源値として100.0kg/m2が示されている。なお図中においてkg/m2は「kg/m2」と表されている。当該単位は、TAGに単位の定義がある場合に表示される。また設定がアナログの場合にこのような単位を表示する。すなわち、設定が、例えば「ON」と「OFF」しかないような場合には、単位の表示はされない。「Force Value」とは、強制設定値を意味し、ここではTAGNo「PID001.PV」のTAGに対し強制設定値として100.0kg/m2が入力されている、又は設定されていることがわかる。
図13中の「FON」は、TAGに対し、既に強制設定が行われているときに表示されるものであり、他の文字と比較して目立つ色彩にて表示される。例えば、背景が黒で他の文字が白で表示されるような場合に、「FON」は例えば赤で表示される。ここでは、TAGNoが「PID001.PV」のTAGに対し、強制設定がされていることがわかる。この「FON」は、コントローラ3’における強制設定アドレス情報一覧330’において、登録されているアドレスであって、且つ強制設定指示の解除がされていないアドレスに対応付けられているTAGに対し、表示される。
「USER」とは、強制設定画面を使用中のオペレータ等を識別する情報(ユーザIDとも記載する)であり、ここでは当該オペレータのユーザIDが「user001」であることがわかる。「Remark」とは、強制設定を行うための理由などの備考を意味し、すぐ下の欄が当該備考を入力又は表示するための備考欄に該当する。この備考欄の右隣の直方体のマークをタッチ又はクリック等することにより、オペレータは備考欄に記載した内容を消去できる。
「Force」は、TAGに対し、「Force Value」の欄にオペレータが入力した値を強制設定することを監視装置7に指示するための表示であり、「Force」部分をタッチ等することにより、当該指示がなされる。これにより監視装置7の処理部72は、後述する本実施形態における強制設定指示情報を生成する。
「UnForce」は、強制設定が行われているTAGに対し、当該設定の解除を指示するための表示である。画面上の「UnForce」の部分のタッチ等により、強制設定の解除指示が監視装置7からコントローラ3’に対しなされる。
「Cancel」は、強制設定画面における入力を中止し、入力した内容を破棄するための表示である。オペレータが、「Cancel」の部分をタッチ等することにより、このような中止処理は行われる。
図14は、本実施形態に係る監視装置7により生成される強制設定指示情報を例示する。図14に示されるように、強制設定指示情報には、第1の実施形態の強制設定指示情報が含むアドレス情報と強制設定値に加え、強制設定の対象となる変数と、識別情報710が含まれる。図15における強制設定指示情報において、強制設定の対象となるアドレスは「M,WI,65552」、当該アドレスが指す記憶領域に設定される強制設定値は「100」、当該強制設定値が代入される変数は「V002」、強制設定の指示元の監視装置7の識別情報710は、「XXX」である。なお、図示はされていないが、強制設定指示情報には、強制設定を行ったオペレータのユーザIDと強制設定の理由等が含まれている。
なお、図14において強制設定指示情報は、表形式にて表されるが、これに限らず、アドレスと強制設定値と変数と識別情報710等の各値が互いに関係付けられており、またこれらの各値が何を示すかを監視装置7とコントローラ3’等が認識可能であれば、強制設定指示情報は表形式には限定されない。
図15は、本実施形態における強制設定支援情報一覧712の表示例を示す。図15において「ST101」、「ST20C」、「ST11C」の各々は、強制設定の対象となった制御対象装置が配置されているステーションのステーションNoである。ステーションNoは、ここではSTmnk(m、n、kには数字や英字等が入る)にて表されているが、これに限定されない。
「Force Time」は、強制設定がされた日時である。また「Force User」は、強制設定処理を行ったオペレータのユーザIDである。また「Place」は、強制設定を行った監視装置7を識別するための識別情報(識別情報710)である。
図15の強制設定支援情報一覧712において、例えば1行目を参照すると、2015年9月1日の13時15分5秒に、ユーザID「user001」のオペレータが、「Sensor bad(センサの不調)」を理由に、識別情報「XOS3000−1」の監視装置7を用いて、ステーションNo「ST101」のステーションにおける、TAGNo「PID001.PV」のTAGであって源値が「0.0」のTAGに対して、強制設定値「100.0」を強制的に設定したことがわかる。
図16は、本実施形態における強制設定アドレス情報一覧330’を例示する。ここに示される強制設定アドレス情報一覧330’は、コントローラ3’が、図14に示す強制設定指示情報を1つだけ取得したときに、強制設定管理部311’により生成されたものである。図16に示されるように、管理番号が1の行には、アドレスの列に「M,WI,65552」、変数の列に「V002」、識別情報(識別情報710)の列に「XXX」が登録されている。なお、ここでの管理番号は、強制設定管理部330’により付される番号であり、上記支援装置2のフロントエンドコンパイラ210が付した、強制設定処理情報一覧232における管理番号とは別のものである。また強制設定アドレス情報一覧330’には、図示はされていないが、各行の情報には、強制設定を行ったオペレータのユーザID、強制設定の理由、強制設定値等が含まれる。以下、強制設定管理部311’による強制設定アドレス情報一覧330’の生成について端的に説明する。
強制設定管理部311’は、強制設定指示情報を取得すると、当該強制設定指示情報におけるアドレスが強制設定アドレス情報一覧330’に含まれるか判定する。当該アドレスが、強制設定アドレス情報一覧330’に含まれなければ、強制設定管理部311’は、強制設定アドレス情報一覧330’のうち、アドレスについてNULL等が登録されているなど、アドレスが未登録の行のうち管理番号が最も小さい行に、受信した当該強制設定指示情報におけるアドレス、変数、及び識別情報710等を記録する。一方、受信した強制設定指示情報におけるアドレスが強制設定アドレス情報一覧330’に含まれる場合には、強制設定管理部311’は、当該アドレスが登録されている行における識別情報(識別情報710)や強制設定値等の各々を、受信した強制設定指示情報に含まれる、対応する情報へと更新等する。
なお、上述したように強制設定管理部311’は、監視装置7から強制設定の解除指示を受けた場合には、強制設定アドレス情報一覧330’における、該当するアドレスの記録を削除、又は当該記録に対し解除の旨を付加する。
図16における強制設定アドレス情報一覧330’は、表形式で表されているが、アドレス、変数、及び識別情報710等が互いに関係付けされ記憶されていれば、表形式に限定されない。
図17は、監視装置7のハードウェア構成を例示する。ここでは、監視装置7は、一般的なコンピュータとしてハードウェアを有し、監視装置7による処理は、以下に示すハードウェア8を具体的に利用することにより実行される。ハードウェア8は、互いにバス80によって接続されたプロセッサ81、メモリ82、記憶装置83、及び通信インターフェース回路84等を備える。
プロセッサ81は、例えばシングルコア、デュアルコア、またはマルチコアのプロセッサである。
メモリ82は、例えばROM(Read Only Memory)、RAM(Random Access Memory)、又は半導体メモリである。
プロセッサ81が、メモリ82に記憶された情報、又は後述する記憶装置83からメモリ82に読み込んだ情報を用いて、メモリ82に記憶された各種プログラムを実行することにより、処理部72の機能が実現される。
記憶装置83は、例えばハードディスクドライブ、光ディスク装置等であり、外部記憶装置や可搬型記憶媒体でもよい。記憶装置83により、記憶部71の機能が実現される。
通信インターフェース回路84は、LAN(Local Area Network)、インターネット、またはイントラネット等を介して、監視装置7がコントローラ3等と通信を行えるようにするためのインターフェースである。通信インターフェース回路84により上記通信部73の機能が実現される。
ユーザインターフェース回路85は、キーボードやタッチパネル等の入力装置、又は液晶ディスプレイ等の表示装置を、監視装置7と接続するための回路である。ユーザインターフェース回路85により、上記ユーザインターフェース70の機能が実現される。
なお、上述した場合以外にも、監視装置7の機能ブロックの全て、又はその一部の機能は、適宜、専用のハードウェアにより実現されることもできる。
なお、支援装置2とコントローラ3の各ハードウェアについては、上記実施形態の場合と同様であるので、説明を省略する。
本実施形態によれば、オペレータは、どの制御対象装置がどの監視装置からの指示に基づいてどのように強制的に制御されているかを、監視装置7から確認することができ、無駄な強制設定や、互いに矛盾する強制設定や、制御対象装置に過分な付加のかかる強制設定等を排除することができ、プラント内の制御対象装置の運用がより容易で安全なものになる。
本発明は、本発明の広義の精神と範囲を逸脱することなく、様々な実施形態および変形が可能とされるものである。また、上述した実施形態は、本発明を説明するためのものであり、本発明の範囲を限定するものではない。特許請求の範囲内およびそれと同等の発明の意義の範囲内で施される様々な変形も、本発明の範囲内とみなされる。