(57)【要約】【課題】最適化した機械語オブジェクトを生成し、制御処理の実行時間を短くすることができる。【解決手段】コントロールシステムは、入力されたソースコードにおける１以上のプログラムの各々から機械語オブジェクトを生成する開発支援装置と、開発支援装置から取得した機械語オブジェクトを実行する制御装置と、を備える。開発支援装置は、１以上のプログラムの各々の間の呼出関係を用いて、１以上のプログラムのうち、ライブラリに含まれ、且つ呼出元のプログラムもライブラリに含まれる第１のプログラムに対し強制設定を行わないとする強制設定可否情報を生成し、強制設定可否情報に基づき、第１のプログラムから第１の機械語オブジェクトを生成する。制御装置は、第１の機械語オブジェクトに基づき、第１のプログラムにおける第１の変数に対応する第１の制御対象装置を、強制設定を行わずに制御する。【選択図】図６
2019046052.tif 000002
【特許請求の範囲】
【請求項１】
入力されたソースコードにおける１以上のプログラムの各々から機械語オブジェクトを生成する開発支援装置と、該開発支援装置から取得した前記機械語オブジェクトを実行する制御装置と、
を備え、
前記開発支援装置は、
前記１以上のプログラムの各々の間の呼出関係を用いて、前記１以上のプログラムのうち、ライブラリに含まれ、且つ呼出元のプログラムもライブラリに含まれる第１のプログラムに対し強制設定を行わないとする強制設定可否情報を生成し、
前記強制設定可否情報に基づき、前記第１のプログラムから第１の前記機械語オブジェクトを生成し、
前記制御装置は、
前記第１の機械語オブジェクトに基づき、前記第１のプログラムにおける第１の変数に対応する第１の制御対象装置を、強制設定を行わずに制御する、
ことを特徴とするコントロールシステム。
【請求項２】
前記開発支援装置は、
前記１以上のプログラムのうち、ライブラリに含まれないプログラム、又は呼出元のプログラムがライブラリに含まれないプログラムである、第２のプログラムを抽出し、
前記１以上のプログラムのうち、前記第２のプログラムとして抽出されなかったプログラムを第１のプログラムとする、
ことを特徴とする請求項１に記載のコントロールシステム。
【請求項３】
前記開発支援装置は、
前記第２のプログラムに対しては強制設定を可能とする強制設定可否情報を生成し、該強制設定可否情報に基づき、第２の前記機械語オブジェクトを生成し、
前記制御装置は、
前記第２のプログラムにおける第２の変数に対応する第２の制御対象装置に対する強制設定指示を受けた場合に、該強制設定指示と前記第２の機械語オブジェクトとに基づき、前記第２の制御対象装置を制御する、
ことを特徴とする請求項２に記載のコントロールシステム。
【請求項４】
前記コントロールシステムは、更に、
前記強制設定指示の入力を受け付ける１以上の監視装置を備え、
前記強制設定指示が入力された前記監視装置は、
前記強制設定指示を前記制御装置に通知し、
前記制御装置は、
前記強制設定指示と前記第２の機械語オブジェクトとに基づき、前記第２の制御対象装置に対し強制設定を行い、
前記強制設定の対象となった前記第２の制御対象装置についての強制設定支援情報を生成し、該強制設定支援情報を前記１以上の監視装置に対して通知し、
前記１以上の監視装置は、前記制御装置から通知された前記強制設定支援情報を表示する、
ことを特徴とする請求項３に記載のコントロールシステム。
【請求項５】
前記強制設定支援情報には、前記強制設定指示を前記制御装置に通知した前記監視装置の識別情報と、前記強制設定の対象となった前記第２の制御対象装置の強制設定値が含まれることを特徴とする請求項４に記載のコントロールシステム。
【請求項６】
入力されたソースコードにおける１以上のプログラムの各々の間の呼出関係を用いて、前記１以上のプログラムのうち、ライブラリに含まれ、且つ呼出元のプログラムもライブラリに含まれる第１のプログラムに対し強制設定を行わないとする強制設定可否情報を生成するフロントエンドコンパイラと、
前記強制設定可否情報に基づき、前記第１のプログラムから第１の機械語オブジェクトを生成するバックエンドコンパイラと、
前記第１のプログラムにおける第１の変数に対応する第１の制御対象装置を、前記第１の機械語オブジェクトに基づき制御する制御装置に対し、前記機械語オブジェクトを送信する通信部と、
を備えることを特徴とする開発支援装置。
【請求項７】
入力されたソースコードにおける１以上のプログラムの各々から機械語オブジェクトを生成する開発支援装置と、該開発支援装置から取得した前記機械語オブジェクトを実行する制御装置と、
を備えるコントロールシステムにおいて実行される方法であって、
前記開発支援装置が、
前記１以上のプログラムの各々の間の呼出関係を用いて、前記１以上のプログラムのうち、ライブラリに含まれ、且つ呼出元のプログラムもライブラリに含まれる第１のプログラムに対し強制設定を行わないとする強制設定可否情報を生成し、
前記強制設定可否情報に基づき、前記第１のプログラムから第１の前記機械語オブジェクトを生成し、
前記制御装置が、
前記第１の機械語オブジェクトに基づき、前記第１のプログラムにおける第１の変数に対応する第１の制御対象装置を、強制設定を行わずに制御する、
ことを特徴とするコントロール方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コントロールシステム、開発支援装置、及びコントロール方法に関する。
【背景技術】
【０００２】
プラントシステムの稼働中に、一部の計器等が故障して正常な値が取り込めない事態が発生することがある。このような場合においてオペレータは、当該システムの稼働に影響が出るのを防ぐため、監視装置等を用いて、故障した計器から出力等される値を代入するための変数に、強制的に値を設定（以下、当該設定を強制設定とも記載し、当該強制的に設定された値を強制設定値とも記載する）し、システムの稼働を継続することが求められ得る。しかし多くの場合、オペレータは、システムのコントローラ内で動作するプログラムに詳しくはないため、例えばエンジニアリングツールを用いて強制設定を行うことに困難が生じ得る。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１０―１２２８２４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
システムのコントローラ内で動作するプログラムは、開発の効率化と品質向上等のため、部品化されている場合が多い。部品化されているプログラムは、オペレータによりその中身を見られる可能性が高いとは言えず、またその中身が見られないよう隠蔽されている場合も少なくない。そのため、プラント内におけるシステムの正常処理のために、オペレータが部品化されているプログラムの変数の値を強制設定する可能性は低い。ここでシステムの稼動のために必要なプログラムのコンパイルにおいて、部品化されているプログラムにおける変数に対しても、強制設定を行う機械語オブジェクトが生成されても、当該機械語オブジェクトを用いる強制設定処理はオペレータによる処理負荷の軽減には結びつかず、またこのような強制設定は無駄な処理になることも多く、アプリケーションの実行時間が不必要に長くなり得るという問題がある。
【０００５】
本発明の目的は、上述した現状に鑑み、最適化した機械語オブジェクトを生成し、制御処理の実行時間を短くすることである。
【課題を解決するための手段】
【０００６】
態様の一例に係るコントロールシステムは、入力されたソースコードにおける１以上のプログラムの各々から機械語オブジェクトを生成する開発支援装置と、開発支援装置から取得した機械語オブジェクトを実行する制御装置と、を備える。開発支援装置は、１以上のプログラムの各々の間の呼出関係を用いて、１以上のプログラムのうち、ライブラリに含まれ、且つ呼出元のプログラムもライブラリに含まれる第１のプログラムに対し強制設定を行わないとする強制設定可否情報を生成し、強制設定可否情報に基づき、第１のプログラムから第１の機械語オブジェクトを生成する。制御装置は、第１の機械語オブジェクトに基づき、第１のプログラムにおける第１の変数に対応する第１の制御対象装置を、強制設定を行わずに制御する。
【発明の効果】
【０００７】
最適化した機械語オブジェクトを生成し、制御処理の実行時間を短くすることができる。
【図面の簡単な説明】
【０００８】
【図１】第１の実施形態に係るコントロールシステムの構成を例示する図である。
【図２】ユーザに提供される開発環境を例示する図である。
【図３】呼出関係情報を例示する図である。
【図４】インスタンス・プログラム対応情報を例示する図である。
【図５】強制設定可否情報一覧を例示する図である。
【図６】フロントエンドコンパイラによる強制設定可否情報一覧の生成処理のフローを例示する図である。
【図７】呼び出し元のプログラムの名称の取得処理のフローを例示する図である。
【図８】バックエンドコンパイラによる処理のフローを例示する図である。
【図９】バックエンドコンパイラによって生成された機械語を例示する図である。
【図１０】支援装置のハードウェア構成を例示する図である。
【図１１】コントローラのハードウェア構成を例示する図である。
【図１２】第２の実施形態に係るコントロールシステムの構成を例示する図である。
【図１３】強制設定画面に表示される画像の例を示す図である。
【図１４】第２の実施形態に係る監視装置により生成される強制設定指示情報を例示する図である。
【図１５】第２の実施形態における強制設定支援情報一覧の表示例を示す図である。
【図１６】第２の実施形態における強制設定アドレス情報一覧を例示する図である。
【図１７】監視装置のハードウェア構成を例示する図である。
【発明を実施するための形態】
【０００９】
（第１の実施形態）
図１は、本実施形態に係るプログラマブルコントローラシステム１の構成の一例を示す。なお、プログラマブルコントローラシステム１を、コントロールシステム１と記載することもあるものとする。コントロールシステム１は、それぞれ１以上の開発支援装置２と制御装置３とを備える。開発支援装置２を支援装置２、制御装置３をコントローラ３と記載することもあるものとする。図１には、理解容易のために、コントロールシステム１における支援装置２とコントローラ３とが、それぞれ１つずつ示される。
【００１０】
支援装置２は、ユーザから入力されたソースコードに基づいて、コントローラ３が実行する機械語のコードの生成を行う。この際に支援装置２は、コントローラ３が制御する装置（制御対象装置とも記載する）に対応する変数、又は制御対象装置の制御対象項目に対応する変数が、強制設定の対象になり得る否かの判定を行い、これに応じた機械語を生成する。
【００１１】
ここでの変数には、基本型の変数以外にも、例えばＣ言語における構造体のメンバー等が含まれるものとする。変数は、プログラムのソースコード中に記述され、制御対象装置や制御対象項目（制御対象装置と制御対象項目とをまとめて制御対象装置とも記載する）と対応付けられる。この変数に強制設定値が代入されることにより、制御対象装置は強制設定される。なおプログラムにおける変数への強制設定値の代入を、プログラムの強制設定、プログラムに対する強制設定などとも記載する。
【００１２】
なお、プログラムとは、広義の意味におけるプログラムを指し、例えば、ＩＥＣ６１１３１においては、ＰＯＵ（Ｐｒｏｇｒａｍ  ｏｒｇａｎｉｚａｔｉｏｎ  ｕｎｉｔ）であって、ＰＧ（Ｐｒｏｇｒａｍ）より広い意味を持つものとする。
また、機械語に変換されたプログラムを機械語オブジェクトと記載する。
【００１３】
コントローラ３は、支援装置から機械語オブジェクトを取得して、これを実行することにより、制御対象装置を制御する。コントローラ３には、後述する記憶部（第１記憶部３２）が設けられ、当該記憶部のアドレスには１以上の変数が割り当てられている。なお、ここでは理解容易のために１つのアドレスには１つの変数が割り当てられている場合について述べる。
【００１４】
コントローラ３は、強制設定処理を実行する場合に、当該強制設定の対象となる変数が割り当てられたアドレスの記憶領域に強制設定値を格納する。
【００１５】
図１に示すように、支援装置２は、ユーザインターフェース２０、プロジェクト管理部２１、コンパイラ２２、記憶部２３、及び通信部２４等を備える。コンパイラ２２は、フロントエンドコンパイラ２２０及びバックエンドコンパイラ２２１を備える。記憶部２３には、プロジェクトプログラム一覧２３０、変数・アドレス対応情報２３１、インスタンス・プログラム対応情報２３２、呼出関係情報２３３、強制設定可否情報一覧２３４、及び強制設定位置情報一覧２３５等が記憶されている。
【００１６】
プロジェクト管理部２１は、ユーザインターフェース２０とコンパイラ２２と記憶部２３とに接続されている。またコンパイラ２２は、記憶部２３と通信部２４とに接続されている。なお、これら以外の接続関係があってもよく、接続関係は上記のものに限定されない。
【００１７】
コントローラ３は、通信部３０、プログラム実行管理部３１、第１記憶部３２、及び第２記憶部３３を備える。プログラム実行管理部３１は、プログラム実行部３１０及び強制設定管理部３１１を備える。プログラム実行管理部３１は、通信部３０と第１記憶部３２と第２記憶部３３とに接続されている。また通信部３０は、第１記憶部３２と第２記憶部３３とに接続されている。なお、接続関係は上記のものに限定されない。
【００１８】
第２記憶部３３は、強制設定アドレス情報一覧３３０と強制設定位置情報一覧２３５等を記憶する。
【００１９】
まず、支援装置２の各機能ブロックについて説明する。ユーザインターフェース２０は、例えばキーボード等の入力装置や、表示装置等の出力装置を、支援装置２と接続するためのインターフェースである。ユーザインターフェース２０を介して、支援装置２は、開発者等のユーザからソースコード等の入力を受け付け、またユーザが開発を行うための画像を表示装置に表示する。
【００２０】
プロジェクト管理部２１は、ユーザによる開発の支援のため、ユーザに対し開発環境を提供する。プロジェクト管理部２１は、ユーザインターフェース２０を介し入力されたソースコードを管理すると共に、これを適宜コンパイラ２２へ出力する。またプロジェクト管理部２１は、記憶部２３に記憶されているプロジェクトプログラム一覧を管理する。またプロジェクト管理部２１は、管理対象の１以上のプログラムの各々に対し、一意的な、例えば固定長の番号等を割り当てる。支援装置２における各プログラムは、この番号により管理される。なお、以下においてプログラム名、又はプログラムの名称と記載する場合には、これらは、このような番号である場合もあるものとする。
【００２１】
フロントエンドコンパイラ２２０は、ソースコードから中間コードを生成する。この際に、フロントエンドコンパイラ２２０は、ソースコード中の変数を、後述する第１記憶部３２における直接アドレスか間接アドレスのいずれかに対応付けて、中間コードを生成する。直接アドレスとは、変数が格納される記憶領域の位置を直接的に指し示すアドレスであり、ここでは相対的なアドレスも含まれるとする。間接アドレスとは、例えばポインタ等であり、間接アドレスが含まれるコード又は当該コードを機械語へと変換したコード等の実行がされないと、アクセス先の第１記憶部３２のアドレスが特定できないものである。中間コードには、演算子と被演算子（オペランドとも記載する）が含まれる。オペランドは、変数が割り当てられる直接アドレス又は間接アドレスである。
【００２２】
また後述するように、フロントエンドコンパイラ２２０は、ソースコード中の１以上のインスタンスの互いの呼出関係に基づき、それらのインスタンスの元となる各プログラム間の呼出関係に係る呼出関係情報２３３を生成する。この際に、フロントエンドコンパイラ２２０は、記憶部２３が記憶するインスタンス・プログラム対応情報２３２を用いる。なお、インスタンスとは、プログラムにデータを付加したものであり、例えば、プログラム中の変数に値を代入したものである。
【００２３】
フロントエンドコンパイラ２２０は、生成した呼出関係情報２３３に基づき、更に強制設定可否情報一覧２３４の生成を行う。強制設定可否情報一覧２３４とは、後述するように、プログラム毎に、強制設定を行うことが有り得るか否かを示す情報であり、例えば、プログラムの名称と当該プログラムに対する強制設定の可否を示す情報とを含む。
【００２４】
バックエンドコンパイラ２２１は、フロントエンドコンパイラ２２０が生成した中間コードから機械語を生成する。この際に、バックエンドコンパイラ２２１は、強制設定可否情報一覧２３４を参照し、これに基づいて、強制設定処理を行うことが有るとしたプログラムについては、強制設定処理へのジャンプコードを含ませた機械語オブジェクトを生成し、一方、強制設定処理を行わないとしたプログラムについては、強制設定処理へのジャンプコードを含まない機械語オブジェクトを生成する。
【００２５】
フロントエンドコンパイラ２２０又はバックエンドコンパイラ２２１は、後述する強制設定位置情報２３５を生成し、これを記憶部２３に記憶する。
【００２６】
記憶部２３に記憶されているプロジェクトプログラム一覧２３０は、プロジェクト管理部２１により管理されているプログラムの一覧である。またこのプロジェクトプログラム一覧２３０には、ユーザにより直接入力されたプログラムや部品化されたプログラム等が含まれている。
【００２７】
変数・アドレス対応情報２３１は、プログラム中の変数と、コントローラ３の第１記憶部３２のアドレスとを関係付けした情報である。フロントエンドコンパイラ２２０は、変数・アドレス対応情報２３１を用いることにより、変数を含むソースコードから、第１記憶部３２における直接アドレスであって当該変数が割り当てられたアドレスを含む中間コードを作成する。
【００２８】
インスタンス・プログラム対応情報２３２は、プロジェクト管理部２１により生成されるものであり、インスタンスと、その元のプログラムとを対応付けした情報である。フロントエンドコンパイラ２２０は、インスタンス・プログラム対応情報２３２を用いて呼出関係情報２３３を生成する。
【００２９】
呼出関係情報２３３は、フロントエンドコンパイラ２２０により生成される情報であり、フロントエンドコンパイラ２２０が読み込んだプログラムがどのプログラムに呼び出されているのか、又はどのプログラムを呼び出すかを示す情報である。
【００３０】
強制設定可否情報一覧２３４は、フロントエンドコンパイラ２２０により生成され、ソースコードに含まれる各インスタンスの元となるプログラムに対する強制設定の可否を示す情報である。ここで、フロントエンドコンパイラ２２０が強制設定可能なプログラムとするものは、隠蔽され部品化されたプログラムではないプログラム、又は、隠蔽され部品化されたプログラムではないプログラムから直接呼び出されるプログラムである。隠蔽され部品化されたプログラムであって、且つ隠蔽され部品化されたプログラムではないプログラムから直接呼び出されないプログラムについては、フロントエンドコンパイラ２２０は、強制設定を行わない。
【００３１】
強制設定位置情報一覧２３５は、フロントエンドコンパイラ２２０又はバックエンドコンパイラ２２１により生成される情報であり、機械語オブジェクトにおける強制設定処理へのジャンプコードの位置（例えば機械語オブジェクトのコードにおけるジャンプコードの行番号）と、当該強制設定処理の対象となる変数が格納される記憶領域を指し示すアドレスとを関係付けした情報の一覧である。なお、ここでは強制設定位置情報２３５におけるアドレスは直接アドレスであるとするが、間接アドレスであってもよい。
【００３２】
通信部２４は、バックエンドコンパイラ２２１により生成された機械語オブジェクトや強制設定位置情報一覧２３５等をコントローラ３に送信する。
【００３３】
なお、支援装置２からコントローラ３に対し、強制設定指示情報が送信されてもよい。この強制設定指示情報とは、例えばコントローラ３における第１記憶部３２のアドレス（直接アドレス）と、このアドレスの記憶領域に記憶されている変数に代入するための強制設定値とを関係付けした情報である。なお、当該強制設定指示情報に強制設定値が含まれない場合があってもよく、この場合、コントローラ３は当該変数に対しその初期値等を設定してもよい。当該初期値等の値は、後述する第２記憶部３３又はプログラム実行管理部３１において予め記憶されている。なお、この場合の初期値等の値も強制設定値と記載する。
【００３４】
強制設定指示情報が支援装置２からコントローラ３へ送信される場合、ユーザインターフェース２０を介し、ユーザにより、強制設定の対象の変数の変数名と、この変数に代入する強制設定値が、支援装置２に入力される。入力された変数名と強制設定値は、支援装置２における図示しない設定部に入力される。なお設定部は、ユーザインターフェース２０、記憶部２３、及び通信部２４と接続されている。但し、これ以外の接続関係があってもよい。設定部は、記憶部２３の変数・アドレス対応情報２３１を参照し、強制設定の対象の変数が格納される、コントローラ３の第１記憶部３２のアドレスを取得する。そして設定部は、取得したアドレスと強制設定値とを関係付けした強制設定指示情報を、通信部２４に出力する。通信部２４は、当該強制設定指示情報をコントローラ３へ送信する。なお、強制設定指示情報は、支援装置２に代わり、又は支援装置２と共に、後述する監視装置からコントローラ３へ送信されてもよい。
【００３５】
コントローラ３の通信部３０は、支援装置２から機械語オブジェクト、強制設定位置情報一覧２３５、及び強制設定指示情報等を受信し、これらをプログラム実行管理部３１へ出力する。通信部３０を介してプログラム実行管理部３１が支援装置２から受信した機械語オブジェクトは、プログラム実行部３１０において処理され、強制設定位置情報一覧２３５は、強制設定管理部３１１により第２記憶部３３へ記憶される。また支援装置２又は監視装置からの強制設定指示情報は、ここでは強制設定管理部３１１において処理されるものとするが、プログラム実行部３１０により処理されてもよい。
【００３６】
プログラム実行管理部３１におけるプログラム実行部３１０は、機械語オブジェクトを実行する。プログラム実行部３１０は、強制設定処理へのジャンプコードを伴わない機械語オブジェクトについては、これをそのまま実行し、強制設定処理へのジャンプコードを伴う機械語オブジェクトについては、当該機械語オブジェクト中のジャンプコードをＮＯＰ（Ｎｏ  Ｏｐｅｒａｔｉｏｎ）命令に置き換えたコード、又はジャンプコードが示すジャンプ先の強制設定処理のコードを実行する。このジャンプコードのＮＯＰ命令への置き換えは、プログラム実行部３１０の機械語オブジェクトの実行に先立ち、プログラム実行部３１０又は強制設定管理部３１１により行われる。
【００３７】
ジャンプ先の、強制設定処理に係るコード（ジャンプ先コードとも記載する）は、プログラム実行部３１０、強制設定管理部３１１、第２記憶部３３、又はその他の不図示の記憶部等に記憶されている。
【００３８】
プログラム実行部３１０は、強制設定指示情報を受け取らない間は、ジャンプコードに代わりＮＯＰ命令を実行する。これにより、無駄な強制設定処理の実行が回避できる。
【００３９】
強制設定管理部３１１（又はプログラム実行部３１０）は、強制設定指示情報を取得した場合、当該強制設定指示情報中のアドレスを、第２記憶部３３に記憶されている強制設定位置情報一覧２３５において検索する。そして、強制設定管理部３１１（又はプログラム実行部３１０）は、このアドレスと関係付けられた、ジャンプコードの機械語オブジェクトにおける位置を取得する。強制設定管理部３１１が当該位置を取得する場合、強制設定管理部３１１は、機械語オブジェクトにおいてＮＯＰ命令に置き換えられていた当該位置のコードをジャンプコードへと戻して処理を実行するよう、プログラム実行部３１０に指示する。これに応じてプログラム実行部３１０は、当該位置におけるＮＯＰ命令をジャンプコードへ戻し、これを実行する。なお、ＮＯＰ命令をジャンプコードへ変更する処理は、強制設定管理部３１１が行ってもよい。プログラム実行部３１０が上記位置を取得する場合、プログラム実行部３１０は、当該位置のＮＯＰ命令をジャンプコードに戻し、これを実行する。
【００４０】
強制設定管理部３１１は、強制設定指示情報において強制設定の対象となるアドレスが、第２記憶部３３に記憶されている強制設定アドレス情報一覧３３０に記憶されていない場合に、当該アドレスを強制設定アドレス情報一覧３３０に登録する。なお、強制設定アドレス情報一覧３３０は、コントローラ３が受信した１以上の強制設定指示情報の各々における、第１記憶部３２のアドレスと、当該アドレスが示す記憶領域に設定される強制設定値とを互いに対応付けた情報の一覧である。
【００４１】
プログラム実行部３１０は、ジャンプ先コードの実行の際に、強制設定アドレス情報一覧３３０を参照し、強制設定の対象となるアドレスが指し示す記憶領域に格納するための強制設定値を取得する。あるいは、強制設定管理部３１１が、強制設定アドレス情報一覧３３０から取得した強制設定値を、プログラム実行部３１０へ通知してもよい。
【００４２】
強制設定管理部３１１は、コントローラ３が支援装置２等から強制設定の解除の指示を受けた場合に、当該解除指示のアドレスに係る情報が強制設定アドレス記憶部３３０にある場合に、これを消去してもよいし、当該情報に解除指示があった旨を付加してもよい。
【００４３】
強制設定管理部３１１は、コントローラ３が支援装置２等から強制設定の解除の指示を受けた場合に、当該解除指示におけるアドレスと関係付けられた、コードの位置を、強制設定位置情報一覧２３５を参照して取得する。強制設定管理部３１１は、当該位置における機械語オブジェクトをＮＯＰ命令に戻すようプログラム実行部３１０に指示、又は、機械語オブジェクトにおける当該位置のジャンプコードをＮＯＰ命令に戻す。強制設定管理部３１１からジャンプコードをＮＯＰ命令へと戻す指示を受けたプログラム実行部３１０は、ジャンプコードをＮＯＰ命令へと戻す。
【００４４】
第１記憶部３２の各アドレスの記憶領域には、上述したように、制御対象装置の制御に係るパラメータに相当する変数などが記憶されている。このような変数に対し、強制設定値が代入されることにより、制御対象装置を手動でコントロールすることが可能となる。
【００４５】
第２記憶部３３は、強制設定アドレス情報一覧３３０と強制設定位置情報一覧２３５等を記憶する。
【００４６】
図２は、支援装置２においてユーザインターフェース２０を介し表示装置によりユーザに提供される開発環境を例示する。図２における上部のウィンドウにおいて左側に示された、「プロジェクトツリーウィンドウ」とある部分には、記憶部２３に記憶されるプロジェクトプログラム一覧２３０におけるプログラム間の関係が示されている。ここで示されるように、一連のプログラムのまとまりであるプロジェクトには、ライブラリとして、「ＬｉｂＰｒｏｊｅｃｔ」が含まれていることがわかる。なお、ライブラリとは、部品化したプログラムをひとまとめにしたものであり、ここではユーザに対し内部が隠蔽されたものを指すものとする。またプロジェクトには、ライブラリに含まれないプログラムとしてＵＦＢ２やＬＡＤＤＥＲ等が含まれている。
【００４７】
図２において上に示されるウィンドウの中央から右側における部分（プロジェクトツリーウィンドウの右側）は、エディタ部分である。ユーザは、このエディタを用いることにより、プログラムにおける変数に値を代入するなどしてインスタンスの作成を行える。図２におけるエディタ部分には、インスタンス（Ｌｉｂ１＿１＿１）が示されている。当該インスタンスＬｉｂ１＿１＿１は、プログラムＬｉｂ１＿１のインスタンスであって、プログラムＬｉｂ１＿１の変数Ｖ０００に値が代入され、Ｖ００１の値の出力するものである。また当該図におけるＮｅｗＶａｒ１、２は、端子を示し、プログラムＬｉｂ１＿１に含まれるコードに対応する。ＮｅｗＶａｒ１を介してＶ０００の値がＬｉｂ１＿１に代入され、ＮｅｗＶａｒ２を介してＶ００１の値がＬｉｂ１＿１から出力される。
【００４８】
図２の下部に示される「プロジェクトツリーウィンドウ」を参照すると、ライブラリ「ＬｉｂＰｒｏｊｅｃｔ」には、プログラム「Ｌｉｂ１＿１」と「Ｌｉｂ１＿２」が含まれることがわかる。
図２を参照して説明した上記開発環境は、プロジェクト管理部２１により生成される。
【００４９】
図３は、呼出関係情報２３３を例示する。呼出関係情報２３３は、入力されたソースコードの行をフロントエンドコンパイラ２２０が順次読み出す際に、呼び出されるプログラムを呼出元のプログラムに関係付け、階層的に表したものである。なお、ソースコード上においては、インスタンスがインスタンスを呼び出す。フロントエンドコンパイラ２２０は、呼出関係情報２３３の生成において、インスタンス・プログラム対応情報２３２を用いて、呼出関係情報２３３を生成する。ここで、インスタンス・プログラム対応情報の一例を図４に示す。図４を参照すると、例えば「＿ｓｉＬＡＧ２」から「＿ｓｉＬＡＧ１６」までの各インスタンスは、プログラム「＿ｓｉＬＡＧ」に対しデータが付加されたものであることがわかる。
【００５０】
図３に戻ると、この上部に示される呼出関係情報２３３は、プログラム名を行毎に並べたものである。当該呼出関係情報２３３において、左側に示される数字は、右側にその名称が示されるプログラムの呼び出しの階層を表す。なお、図３におけるプログラムは、図２のプロジェクトツリーウィンドウに示されているものである。図３を参照して呼出関係情報２３３について具体的に説明すると、まずソースコード上、フロントエンドコンパイラ２２０によりプログラム「ＬＡＤＤＥＲ」のインスタンスが呼び出される。この「ＬＡＤＤＥＲ」のインスタンスの階層は１となる。次に、この「ＬＡＤＤＥＲ」のインスタンスにより呼び出されるものは、プログラム「Ｌｉｂ１＿１」とプログラム「ＵＦＢ２」の各インスタンスである。このため、これらの階層は、上記「ＬＡＤＤＥＲ」のインスタンスの階層１の次の２となる。続いて、「Ｌｉｂ１＿１」のインスタンスから呼び出されるインスタンスは、プログラム「Ｌｉｂ１＿２」のインスタンスであり、呼び出し元の「Ｌｉｂ１＿１」のインスタンスの階層２の次の３となる。
【００５１】
図３に示されるように、フロントエンドコンパイラは、インスタンスの階層と共に、そのインスタンスの名称に代え、そのインスタンスの元となるプログラムの名称を、呼出関係情報２３３に含ませる。この際に、上述したインスタンス・プログラム対応情報２３２が参照される。図３の呼出関係情報２３３から、呼び出し側のインスタンスは、呼び出される側のインスタンスの階層から１を差し引いた数の階層にあることがわかる。また、呼び出し側のインスタンスの元のプログラムの名称は、呼び出される側のインスタンスの元のプログラムの名称よりも前（上の行）に置かれる。そして、呼び出し側のインスタンスの元のプログラムの名称を含む行は、これと同じ名称を含む他の行に比べ、呼び出される側のインスタンスの元のプログラムの名称を含む行から最も近いところに配置される。このため、階層３の「Ｌｉｂ１＿１」の呼び出し元は、階層２の「ＵＦＢ２」のインスタンスとなる。また、階層４の「Ｌｉｂ１＿２」のインスタンスの呼び出し元は、階層３の「Ｌｉｂ１＿１」のインスタンスである。
【００５２】
フロントエンドコンパイラ２２０は、階層の数を用いる呼出関係情報２３３に代わり、インスタンスの元のプログラムの呼出関係をツリーで表した呼出関係情報２３３を生成してもよい。このツリーを用いた呼出関係情報２３３を、図４の下部に示す。この図から、「ＬＡＤＤＥＲ」のインスタンスは、「Ｌｉｂ１＿１」と「ＵＦＢ２」の各インスタンスを呼び出し、「ＬＡＤＤＥＲ」のインスタンスに呼び出された「Ｌｉｂ１＿１」のインスタンスは、「Ｌｉｂ１＿２」のインスタンスを呼び出すことがわかる。また「ＬＡＤＤＥＲ」のインスタンスに呼び出された「ＵＦＢ２」のインスタンスは、「Ｌｉｂ１＿１」のインスタンスを呼び出し、この呼び出された「Ｌｉｂ１＿１」のインスタンスは、「Ｌｉｂ１＿２」のインスタンスを呼び出すことがわかる。
【００５３】
呼出関係情報２３３は、フロントエンドコンパイラ２２０により、以下に詳述する強制設定可否情報一覧２３４の生成に先立ち生成される。フロントエンドコンパイラ２２０は、生成した呼出関係情報２３３を用いて、強制設定可否情報一覧２３４を生成する。なお、呼出関係情報２３３の生成方法は既知のものであることから、説明を省略する。
【００５４】
図５を参照して、強制設定可否情報一覧２３４についての説明を行う。図５は、強制設定処理情報一覧２３４を例示する。強制設定可否情報一覧２３４は、ライブラリに含まれないプログラムから直接呼び出されない、ライブラリに含まれるプログラム（第１のプログラムとも記載する）に対し、コントローラ３が強制設定を行わないようにするための情報であり、また、ライブラリに含まれないプログラム、又はライブラリに含まれないプログラムから直接呼び出されるプログラム（これらのプログラムを第２のプログラムとも記載する）に対して強制設定が行われることを可能とするための情報である。
【００５５】
強制設定可否情報一覧２３４は、フロントエンドコンパイラ２２０により生成され、バックエンドコンパイラ２２１は、強制設定可否情報一覧２３４に基づいて、機械語を生成する。なお、ライブラリに含まれるプログラムであっても、ライブラリに含まれないプログラムから直接呼び出されるプログラムについては、当該プログラムにおける変数にユーザが強制設定値を格納する場合もあるため、このようなプログラムの強制設定を可能とした。
【００５６】
図５に例示される強制設定可否情報一覧２３４は、図３の上部に示す呼出関係情報２３３をフロントエンドコンパイラ２２０が読み出し生成したものである。図５の上部に示される強制設定可否情報一覧２３４は、初期状態におけるものである。また図５の下部に示される強制設定可否情報一覧２３４は、図３上部の呼出関係情報２３３において４行目となる「２  ＵＦＢ２」までをフロンドエンドコンパイラ２２０が読み込んで生成したものである。
【００５７】
「管理番号」とは、フロントエンドコンパイラ２２０が、呼出関係情報２３３から順次読み出すインスタンスの元となるプログラムに対して付す連番である。また「強制設定の可否」とは、プログラムが強制設定の対象となり得るかを示すものであり、第１のプログラムの場合は「否」、第２のプログラムの場合は「可」が登録される。なお、初期状態の強制設定可否情報一覧２３４においては、プログラム名とその強制設定の可否が登録される各欄は、初期値のＮＵＬＬが登録されている。
【００５８】
図３よりフロントエンドコンパイラ２２０は、最初に（管理番号：１）、プログラム名「ＬＡＤＤＥＲ」を読み出す。このプログラム「ＬＡＤＤＥＲ」は、図２を参照するとライブラリに含まれないことから、フロントエンドコンパイラ２２０は強制設定が可能と判定する。なお、この判定処理については後に詳述する。
【００５９】
同様に、フロントエンドコンパイラ２２０は、次に（管理番号：２）、呼出関係情報２３３（図３）から、プログラム名「Ｌｉｂ１＿１」を読み出す。このプログラム「Ｌｉｂ１＿１」は、図２を参照するとライブラリに含まれているが、ライブラリに含まれないプログラム「ＬＡＤＤＥＲ」より直接呼び出されている。このため、フロントエンドコンパイラ２２０は、プログラム「Ｌｉｂ１＿１」に対し強制設定処理が可能であると判定する。
【００６０】
なお、図３の上部に示す呼出関係情報２３３において、同じプログラム名の「Ｌｉｂ１＿１」が含まれる行が後の行において他にもある。そしてその異なる行では、同じプログラム名であっても、そのインスタンスの呼出元や階層等が異なることもある。これにより、呼出関係情報２３３において、先の行では或るプログラムが第２のプログラムであっても、後の行において第１のプログラムになる場合もあり得る。そしてこの場合、フロントエンドコンパイラ２２０が、一旦、呼出関係情報２３３における先の行のプログラムに対し強制設定を可能としてしまえば、その行より後の行の同じ名称のプログラムについては、これがその行において第１のプログラムであっても、そのプログラムについては強制設定可否情報２３４上では強制設定が可能なままとなる。これにより、そのようなプログラムからバックエンドコンパイラ２２１が生成する機械語オブジェクトには、強制設定処理へのジャンプコードが含められることが不可能にはならなくなる。このようなことは、ライブラリに含まれる他のプログラムについても同様である。詳細は後述する。
【００６１】
また同様に、フロントエンドコンパイラ２２０は、呼出関係情報２３３（図３）において、次に（管理番号：３）、プログラム名「Ｌｉｂ１＿２」を読み出す。プログラム「Ｌｉｂ１＿２」は、図２より、ライブラリに含まれ、また呼び出し関係情報２３３（図３）より、ライブラリに含まれないプログラムから直接呼び出されないプログラムであることがわかる。これによりプログラム「Ｌｉｂ１＿２」は、第１のプログラムであり、フロントエンドコンパイラ２２０は、このプログラム「Ｌｉｂ１＿２」に対し強制設定処理を行わないとしている。なお、呼出関係情報２３３において、プログラム名「Ｌｉｂ１＿２」が含まれる行が、これより後の行にもある場合で、その行のプログラム「Ｌｉｂ１＿２」がライブラリに含まれないプログラムより直接呼び出される場合には、強制設定処理情報２３２における「強制設定の可否」は「可」に更新され、これによりプログラム「Ｌｉｂ１＿２」に対応する機械語オブジェクトは、強制設定処理へのジャンプコード等が含められることが可能になる。
【００６２】
図６は、フロントエンドコンパイラ２２０による強制設定処理情報の生成処理のフローを例示する。
【００６３】
まずフロントエンドコンパイラ２２０は、呼出関係情報２３３の先頭の行を読み込み、「処理対象行」に１を設定する（ステップＳ１００）。フロントエンドコンパイラ２２０は、プログラム名と、そのプログラムのインスタンスの階層の情報（階層情報とも記載する）とを取得した場合（ステップＳ１０１：Ｙｅｓ）、当該プログラム名が強制設定可否情報一覧２３４に既に登録されているか、検索を行う（ステップＳ１０２）。プログラム名が登録されていない場合（ステップＳ１０３：Ｎｏ）、フロントエンドコンパイラ２２０は、強制設定可否情報一覧２３４に、このプログラム名を登録すると共に、このプログラムに対する強制設定の可否として「否」を登録する（ステップＳ１０４）。
【００６４】
続いて、フロントエンドコンパイラ２２０は、プロジェクトプログラム一覧２３０におけるライブラリにおいて、ステップＳ１００（又はステップＳ１１１）において読み出したプログラム名の検索処理を実行する（ステップＳ１０５）。
【００６５】
なお、ステップＳ１０３において、ステップＳ１００（又はステップＳ１１１）で読み込んだプログラム名が既に強制設定可否情報一覧２３４に登録されている場合には（ステップＳ１０３：Ｙｅｓ）、フロントエンドコンパイラ２２０は、ステップＳ１０４の処理を行わず、ステップＳ１０５の処理を実行する。
【００６６】
ステップＳ１０５において、ステップＳ１００（又はステップＳ１１１）で読み出したプログラムがライブラリにない場合（ステップＳ１０６：Ｎｏ）、フロントエンドコンパイラ２２０は、強制設定可否情報一覧２３４において、当該プログラムは強制設定が可能であるとして「強制設定の可否」に「可」を登録する（ステップＳ１０７）。この処理により、フロントエンドコンパイラ２２０は、呼出関係情報２３３において順次その名称が読み出されるプログラムのうち、ライブラリにないプログラムを抽出して、これに対し強制設定を可能とできる。
【００６７】
ステップＳ１０５において、ステップＳ１００（又はステップＳ１１１）で読み出したプログラムがライブラリにある場合には（ステップＳ１０６：Ｙｅｓ）、フロントエンドコンパイラ２２０は、当該プログラムの呼び出し元のプログラムの名称を取得する（ステップＳ１０８）。このステップＳ１０８の処理については、より詳しく後述する。
【００６８】
フロントエンドコンパイラ２２０は、ステップＳ１０８において取得したプログラム名がライブラリにあるか検索する（ステップＳ１０９）。
【００６９】
ステップＳ１０８において取得したプログラム名がライブラリにない場合（ステップＳ１１０：Ｎｏ）、フロントエンドコンパイラ２２０は、ステップＳ１０５において名称を検索対象としたプログラムは強制設定処理が可能であるとして、「強制設定の可否」に「可」を登録する（ステップＳ１０７）。この処理により、フロントエンドコンパイラ２２０は、呼出関係情報２３３において順次その名称が読み出されるプログラムのうち、ライブラリに含まれないプログラムから直接呼び出されるプログラムを抽出し、これに対し強制設定を可能とできる。
【００７０】
フロントエンドコンパイラ２２０は、「処理対象行」に１を加算し、呼出関係情報２３３における次の行を読み出し（ステップＳ１１１）、この行におけるプログラムについて、上記ステップＳ１０１からステップＳ１０７（ステップＳ１０６においてＹｅｓの場合には、ステップＳ１０８からステップＳ１１０の処理を含む）を繰り返す。
【００７１】
ステップＳ１０６及びステップＳ１１０における各処理により、第２のプログラムとして判定されたプログラムは、ステップＳ１０７において強制設定が可能なプログラムとして強制設定可否情報一覧２３４に登録される。そして一旦、強制設定が可能なプログラムとして登録されたものは、その後に同じ名称が呼出関係情報２３３から読み込まれても、強制設定可否情報一覧２３４において「強制設定の可否」に「否」を登録されない。同様に、呼出関係情報２３３の或る行からそのプログラム名を読み込まれ、強制設定可否情報一覧２３４において「強制設定の可否」に「否」を登録されたプログラムであっても、呼出関係情報２３３のその後の行から同じプログラム名が呼び出され、第２のプログラムとして判定され、強制設定が可能になることもある。
【００７２】
図７は、ステップＳ１０８における処理のフローを例示する。まずフロントエンドコンパイラ２２０は、「呼出元検索行」に処理対象行−１を設定する（ステップＳ４００）。呼出元検索行が０であれば（ステップＳ４０１：Ｙｅｓ）、フロントエンドコンパイラ２２０は、呼び出し元のプログラム名が無い状態でリターンし（ステップＳ４０２）、上述したステップＳ１０９の処理に移る。なおこの場合、ステップＳ１０９に続くステップＳ１１０の判定結果は、Ｎｏとなる。
【００７３】
ステップＳ４０１において、呼出元検索行が０でなければ（ステップＳ４０１：Ｎｏ）、フロントエンドコンパイラ２２０は、呼出関係情報２３３における呼出元検索行のプログラムの階層情報を取得する（ステップＳ４０３）。このステップＳ４０３において取得した階層情報における階層が、処理対象行におけるプログラムの階層から１を引いた数の場合（ステップＳ４０４：Ｙｅｓ）、フロントエンドコンパイラ２２０は、呼出元検索行におけるプログラムを呼び出し元とし、この呼び出し元のプログラムの名称を取得してリターンする（ステップＳ４０５）。フロントエンドコンパイラ２２０は、これに続いてステップＳ１０９の上述した処理を実行する。
【００７４】
ステップＳ４０３においてフロントエンドコンパイラ２２０が取得した階層情報における階層が、処理対象行におけるプログラムの階層から１を引いたものと等しくない場合（ステップＳ４０４：Ｎｏ）、フロントエンドコンパイラ２２０は、呼出元検索行から１を引いたものを、新たに呼出元検索行として置き換えて（ステップＳ４０６）、ステップＳ４００の処理へ戻り、同様の処理を繰り返す。
【００７５】
図６、７に示されるフロントエンドコンパイラ２２０の処理により、図５の上部に例示される初期状態の強制設定可否情報２３４から、同図の下部に例示される強制設定可否情報２３４が生成される。
【００７６】
なおここではフロントエンドコンパイラ２２０は、インスタンス・プログラム対応情報２３２を参照して、プログラム同士の呼出関係情報２３３を作成し、これを用いて強制設定可否情報２３４を作成したが、これに代わりフロントエンドコンパイラ２２０は、インスタンス同士の呼出関係に係る呼出関係情報２３３を生成し、これを用いて強制設定処理情報２３４を生成してもよい。この場合、上記ステップＳ１００において、フロントエンドコンパイラ２２０が取得するのは、プログラム名ではなく、インスタンス名となり、またフロントエンドコンパイラ２２０は、ステップＳ１０１に続き、ステップＳ１０２に先立ち、インスタンス・プログラム対応情報２３４を参照して、ステップＳ１００で取得したインスタンス名からプログラム名を取得する。
【００７７】
バックエンドコンパイラ２２１は、フロントエンドコンパイラ２２０が生成した強制設定可否情報２３４に基づいて、機械語オブジェクトを生成する。
【００７８】
図８は、バックエンドコンパイラ２２１による処理のフローを例示する。まずステップＳ５００において、バックエンドコンパイラ２２１は、中間コードにおける最初の処理対象のプログラムの名称を取得するための処理を実行する。ここで、プログラム名を取得できない場合（ステップＳ５０１：Ｎｏ）、バックエンドコンパイラ２２１は、それまでに生成した機械語を、例えば通信部２４へ出力する（ステップＳ５０２）。プログラム名を取得できた場合（ステップＳ５０１：Ｙｅｓ）、バックエンドコンパイラ２２１は、強制設定可否情報一覧２３４において、取得したプログラム名を検索し、そのプログラムの強制設定の可否に係る情報を取得する（ステップＳ５０３）。
【００７９】
プログラムの強制設定が可能の場合（ステップＳ５０４：Ｙｅｓ）、バックエンドコンパイラ２２１は、強制設定処理に係るジャンプコードを適宜含ませた、当該プログラムの機械語を生成する（ステップＳ５０５）。
【００８０】
強制設定可否情報一覧２３４において、当該プログラムの「強制設定の可否」に「否」が登録されている場合（ステップＳ５０４：Ｎｏ）、バックエンドコンパイラ２２１は、強制設定処理に係るジャンプコードを含まない、当該プログラムの機械語を生成する（ステップＳ５０６）。
【００８１】
バックエンドコンパイラ２２１は、ステップＳ５０５又はステップＳ５０６において生成した機械語を、ステップＳ５０２において出力するまで一時的に保持する。なお、この保持は一時的でなくともよい。
【００８２】
ステップＳ５０５又はステップＳ５０６の後、バックエンドコンパイラ２２１は、中間コードにおける次の処理対象のプログラムの名称を取得するための処理を実行する（ステップＳ５０７）。バックエンドコンパイラ２２１は、ステップＳ５０７において、次の処理対象のプログラムの名称を取得できない場合には（ステップＳ５０１：Ｎｏ）、ステップＳ５０２の処理を実行する。この際に、バックエンドコンパイラ２２１は、一時的に保持していた機械語を通信部２４等へ出力する。
【００８３】
一方、バックエンドコンパイラ２２１は、処理対象のプログラムの名称を取得できた場合には（ステップＳ５０１：Ｙｅｓ）、上述したステップＳ５０３以降の動作を、ステップＳ５０７により取得したプログラム名のプログラムについて繰り返す。
【００８４】
図９は、バックエンドコンパイラ２２１によって生成された機械語を例示する。図９の上には、強制設定処理が無い場合の機械語が示され、同図の下には、強制設定処理が有る場合の機械語が示される。この２つの機械語は、共に同じ中間コードより生成されたものであるが、図９の下に示される機械語には、強制設定処理へのジャンプコードが含まれる。
【００８５】
図９について詳述すると、「ＬＤ」、「ＡＤＤ」、及び「ＳＴ」は、それぞれロード命令、加算命令、書込（記憶）命令を示す。本実施形態において、強制設定処理のジャンプコードの付加は、書込命令に対して行われる。上述したように第１記憶部３２は、各制御対象装置の変数を格納する記憶領域を有するが、プラントシステム等に異常が発生した場合、コントローラ３は、書込命令において強制設定処理へのジャンプコードがあることにより、制御対象装置に対応するアドレスの記憶領域に強制設定値を書込み、これにより不正な値の当該記憶領域への書き込みを防ぐことができるからである。但しこれに限定されず、機械語における書込命令以外の他の命令に、強制設定処理へのジャンプコードが含まれてもよい。
【００８６】
図９における強制設定処理に関するコードは、破線の四角に囲まれた部分のコードである。このうちの「ＬＤＲ  ｐｃ，［ｗｋ１，＃６４］」が、強制設定処理へのジャンプコードである。また「ＭＯＶ  ｌｒ，ｐｃ」は、ジャンプ先から戻るためのコードである。
【００８７】
なお、強制設定可否情報一覧２３４の「強制設定の可否」が「否」であるプログラムの機械語には、強制設定処理に関するコードは含まれない。
【００８８】
コントローラ３のプロジェクト実行部３１０は、支援装置２から取得した機械語オブジェクトを実行することで、強制設定処理が必要な場合に強制設定処理を実行し、そうでない場合に無駄な処理を行わない。
【００８９】
図１０は、支援装置２のハードウェア構成を例示する。ここでは、支援装置２は、一般的なコンピュータとしてハードウェアを有し、支援装置２による処理は、以下に示すハードウェア５を具体的に利用することにより実行される。ハードウェア５は、互いにバス５０によって接続されたプロセッサ５１、メモリ５２、記憶装置５３、通信インターフェース回路５４、及びユーザインターフェース回路５５を備える。
【００９０】
プロセッサ５１は、例えばシングルコア、デュアルコア、またはマルチコアのプロセッサである。
【００９１】
メモリ５２は、例えばＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、又は半導体メモリである。
【００９２】
プロセッサ５１が、メモリ５２に記憶された情報、又は後述する記憶装置５３からメモリ５２に読み込んだ情報を用いて、メモリ５２に記憶された各種プログラムを実行することにより、プロジェクト管理部２１とコンパイラ２２の各機能が実現される。また、メモリ５２により、上記記憶部２３の一部の機能が実現されてもよい。例えば、メモリ５２が、コンパイラ２２が生成した呼出関係情報２３３を一時的に記憶し、以下に記載する記憶装置２３がプロジェクトプログラム一覧２３０、変数・アドレス対応情報２３１、インスタンス・プログラム対応情報２３２、強制設定可否情報一覧２３４、及び強制設定位置情報一覧２３５を記憶してもよい。
【００９３】
記憶装置５３は、例えばハードディスクドライブ、光ディスク装置等であり、外部記憶装置や可搬型記憶媒体でもよい。記憶装置５３により、記憶部２３の全部又は一部の機能が実現される。
【００９４】
通信インターフェース回路５４は、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネット、またはイントラネット等を介して、支援装置２がコントローラ３等と通信を行えるようにするためのインターフェースである。通信インターフェース回路５４により上記通信部２４の機能が実現される。
【００９５】
ユーザインターフェース回路５５は、キーボードやタッチパネル等の入力装置、又は液晶ディスプレイ等の表示装置を、支援装置２と接続するための回路である。ユーザインターフェース回路５５により、上記ユーザインターフェース２０の機能が実現される。
【００９６】
なお、上述した場合以外にも、支援装置２の機能ブロックの全て、又はその一部の機能は、適宜、専用のハードウェアにより実現されることもできる。
【００９７】
図１１は、コントローラ３のハードウェア構成を例示する。ここでは、コントローラ３は、一般的なコンピュータとしてハードウェアを有し、コントローラ３による処理は、以下に示すハードウェア６を具体的に利用することにより実行される。ハードウェア６は、互いにバス６０によって接続されたプロセッサ６１、第１メモリ６２、第２メモリ６３、記憶装置６４、及び通信インターフェース回路６５を備える。
【００９８】
プロセッサ６１は、例えばシングルコア、デュアルコア、またはマルチコアのプロセッサである。
【００９９】
第１メモリ６２及び第２メモリ６３は、例えばＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、半導体メモリである。
【０１００】
プロセッサ６１が、第１メモリ６２に記憶された情報、又は後述する記憶装置６４から第１メモリ６２に読み込んだ情報を用いて、第１メモリ６２に記憶された各種プログラムを実行することにより、プログラム実行管理部３１の機能が実現される。また、第１メモリ６２により、上記第２記憶部３３の機能の一部が実現されてもよい。例えば、第１メモリ６２は、強制設定アドレス情報一覧３３０等を記憶してもよい。
【０１０１】
第２メモリ６３は、その全部又は一部の記憶領域が制御対象装置に対応付けられているメモリであり、プログラム実行管理部３１の処理対象となるメモリである。第２メモリ６３により、上記第１記憶部３２の機能が実現される。なお、第２メモリ６３に代わり、あるいはこれと共に、ハードディスクドライブ等の記憶装置により第１記憶部３２の機能が実現されてもよい。
【０１０２】
記憶装置６４は、例えばハードディスクドライブ、光ディスク装置等であり、外部記憶装置や可搬型記憶媒体でもよい。記憶装置６４により、第２記憶部３３の機能が実現される。
【０１０３】
通信インターフェース回路６５は、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネット、またはイントラネット等を介して、コントローラ３が支援装置２等と通信を行えるようにするためのインターフェースである。通信インターフェース回路６５により上記通信部３０の機能が実現される。
【０１０４】
なお、上述した場合以外にも、コントローラ３の機能ブロックの全て、又はその一部の機能は、適宜、専用のハードウェアにより実現されることもできる。
【０１０５】
本実施形態に係るコントロールシステム１によれば、オペレータが強制設定の対象としない部品化されたプログラムについて、支援装置２は、強制設定処理に関するコードを含めない機械語を生成する。またコントローラ３は、当該機械語に基づき、強制設定処理が不要の変数に対しては、強制設定処理を行わない。これらのことより、コントローラ３によるコードの実行に費やされる時間の削減ができると共に、プラントにおける制御対象装置の制御処理がより迅速になる。
【０１０６】
（第２の実施形態）
プラントシステムにおいては、必要に応じて、複数人のオペレータが、その各々に割り当てられた監視装置を介し、強制設定指示情報の生成等の強制設定機能を使用する。しかし個々の監視装置においては、強制設定時の履歴情報はあるもののプラントシステム全体における強制設定の対象となっている変数の情報を総括的に管理することができなかった。つまり或る時点において、どの変数にどの値を強制設定しているかをオペレータが認識できなかった。本実施形態に係るコントロールシステム１’は、このような問題を解消するためのものである。
【０１０７】
図１２は、本実施形態に係るコントロールシステム１’の構成を例示する。本実施形態に係るコントロールシステム１’は、それぞれ１以上の監視装置（ＨＣＩ装置、ＨＣＩ：Ｈｕｍａｎ  Ｃｏｍｐｕｔｅｒ  Ｉｎｔｅｒａｃｔｉｏｎ）７とコントローラ３’と上述した支援装置２とを備える。なお、図１２においては、コントロールシステム１’における監視装置７とコントローラ３’と支援装置２が、それぞれ１つ示されている。
【０１０８】
監視装置７は、ユーザインターフェース７０、記憶部７１、処理部７２、及び通信部７３等を備える。処理部７２は、ユーザインターフェース７０、記憶部７２、及び通信部７３と接続されている。なおこれ以外の接続関係があってもよい。
【０１０９】
コントローラ３’は、上記実施形態におけるコントローラ３の備える強制設定管理部３１１に代えて、強制設定管理部３１１’を備え、プログラム実行管理部３１に代えて、プログラム実行管理部３１’を備える。またコントローラ３’は、上記実施形態における第２記憶部３３に代えて、第２記憶部３３’を備える。そして第２記憶部３３’は、上記実施形態における強制設定アドレス情報一覧３３０に代えて、強制設定アドレス情報３３０’を記憶する。
【０１１０】
監視装置７のユーザインターフェース７０は、表示装置等の出力装置やタッチパネル等の入力装置を、監視装置７に接続する。表示装置等に表示された制御対象装置の状態を確認したオペレータは、必要に応じ、入力装置を介して監視装置７に強制設定指示の入力を行う。
【０１１１】
記憶部７１は、監視装置７に対し一意的に割り当てられている自己の識別情報７１０、監視装置７の監視対象の１以上のＴＡＧに係るＴＡＧ情報７１１、強制設定支援情報一覧７１２、及び支援装置２から通信部７３を介して取得した変数・アドレス対応情報２３１等を記憶する。
【０１１２】
ここで、ＴＡＧとは、制御対象装置の制御に係るパラメータを意味し、上記変数と対応付けられる。ＴＡＧ情報７１１には、各ＴＡＧの、コード中における変数名と同等又は対応するＴＡＧの番号（ＴＡＧＮｏとも記載する）と、ＴＡＧの名称とが互いに関係付けられ、含まれる。ここで、バルブを例に取れば、ＴＡＧはそのバルブの開閉度合いを示す変数に対応し、ＴＡＧの名称は「バルブの開閉度」等となる。
【０１１３】
強制設定支援情報一覧７１２は、コントローラ３’から受信した強制設定支援情報を元に生成されたものであり、オペレータによる強制設定の支援のためのものである。
【０１１４】
処理部７２は、ユーザインターフェース７０を介し入力された強制設定指示に基づき、記憶部７１から必要な情報を読み出し、コントローラ３’に送信するための強制設定指示情報を生成する。
【０１１５】
また処理部７２は、通信部７３を介してコントローラ３’から後述する強制設定支援情報を取得すると、記憶部７２の強制設定支援情報一覧７１２にこれを蓄積するか、又は、強制設定支援情報一覧７１２を適宜更新する。この蓄積の際に処置部７２は、ユーザインターフェース７０を介しての表示装置における表示用に、強制設定支援情報を表示用に変換してもよい。また処理部７２は、オペレータからの強制設定支援情報一覧７１２の表示指示をトリガとして、これを表示用に加工する処理を行い、ユーザインターフェース７０を介して表示装置に出力してもよい。
【０１１６】
強制設定支援情報一覧７１２には、監視装置７の運用当初から現在に至るまでの全ての強制設定支援情報が記憶されてもよいし、ある一定期間における強制設定支援情報が記憶されてもよい。
【０１１７】
通信部７３は、監視装置７がコントローラ３’及び支援装置２との間で情報の授受を行うための機能ブロックである。通信部７３は、処理部７２の指示に従い強制設定指示情報をコントローラ３’に送信し、強制設定支援情報をコントローラ３’から受信し、これを処理部７２へ出力する。
【０１１８】
コントローラ３’の強制設定管理部３１１’は、通信部３０を介して、監視装置７から強制設定指示情報を取得する。そして強制設定管理部３１１’は、強制設定指示情報におけるアドレスが強制設定アドレス情報一覧３３０’に未登録の場合には、強制設定指示情報に含まれる情報を登録する。一方、強制設定指示情報におけるアドレスが既に強制設定アドレス情報一覧３３０’に登録されている場合には、強制設定管理部３１１は、当該アドレスにかかる強制設定アドレス情報一覧３３０’中のレコードを強制設定指示情報に基づき更新してもよいし、当該アドレスの変数に対し強制設定の解除がされていないレコード、すなわち現在において強制設定中の変数に係るレコードについては、更新せずに、通信部３０を介して、強制設定が行えない旨の通知を当該強制設定指示情報の送信元へ送信してもよい。なお、コントローラ３’において、強制設置指示情報の送信元の支援装置２や１以上の監視装置７に対し、それぞれ優先順位が設けられていてもよい。この場合、強制設定管理部３１１’は、低い優先順位の監視装置７等により既に設定されている強制設定値等を、それより高い優先順位の監視装置７等から取得した強制設定指示情報に基づき上書きしてもよく、高い優先順位の監視装置７等により既に設定されている強制設定値等を、それより低い優先順位の監視装置７等からの強制設定指示情報に応じた上書きをしないこととしてもよい。
【０１１９】
強制設定管理部３１１’は、監視装置７が強制設定支援情報の送信を要求した場合や監視装置７の起動等をトリガとして、強制設定アドレス情報一覧３３０’を用いて、強制設定支援情報を生成し、監視装置７に通信部３０を介して送信する。なお、強制設定支援情報には、監視装置７を用いるオペレータの強制設定処理に必要な、強制設定アドレス情報一覧３３０’の内容の全部又は一部が含まれる。
【０１２０】
強制設定管理部３１１’は、強制設定支援情報の生成の際に、強制設定アドレス情報一覧３３０’の強制設定に係る各アドレスに設定されている値を第１記憶部３２から読み込むか、又は、強制設定アドレス情報一覧３３０’の強制設定に係る各アドレスに対応する制御対象装置のパラメータの値をその制御対象装置等から読み込むなどし、制御対象装置の源値として強制設定アドレス情報一覧３３０’に付加し、強制設定支援情報に含ませる。
【０１２１】
また、強制設定管理部３１１’は、強制設定アドレス情報３３０’における各アドレスに対し強制設定を行った時刻、又は各アドレスに対する強制設定指示情報を受信した時刻を、アドレスに紐付けして第２記憶部３３に記憶し、強制設定支援情報生成の際に用いる。
【０１２２】
また、第２記憶部３３は、強制設定アドレス情報一覧３３０’のアドレスに対応する制御対象装置が含まれるステーションを識別するための番号（ステーションＮｏ、ＳＴ  Ｎｏとも記載する）を、そのアドレスに対応付け、記憶していてもよい。この場合、強制設定管理部３１１’は、強制設定支援情報に、強制設定アドレス情報一覧３３０’における各アドレスに対応付けられたステーションＮｏを付加する。ただし、第２記憶部３３のアドレス（又は変数）とステーションＮｏとの対応関係に係る情報を、監視装置７が保持していてもよく、監視装置７が強制設定支援情報を表示する際に、強制設定支援情報中のアドレス（又は変数）からステーションＮｏを取得してもよい。
【０１２３】
強制設定支援情報を取得した監視装置７の処理部７２は、これを強制設定支援情報一覧７１２へ登録、又は強制設定支援情報一覧７１２を更新する。
【０１２４】
図１３は、監視装置７を介してのオペレータによる強制設定に供される画面に表示される画像の例を示す。このようなオペレータの強制設定や監視等に供される画面を強制設定画面とも記載する。なお図１３の強制設定画面には、背景が白、文字が黒で示されているが、これに限らず、例えば背景が黒で文字が白等で表示されてもよい。
【０１２５】
図１３において「ＰＩＤ００１．ＰＶ」とあるのは、或るＴＡＧのＴＡＧＮｏである。ここでは、ＴＡＧＮｏが「ＰＩＤ００１．ＰＶ」のＴＡＧについて示されている。また、「Ｔｈｉｓ＿ｉｓ＿Ｔａｇｎａｍｅ」の欄には、通常、ＴＡＧの名称が表示される。
【０１２６】
図１３に示される「Ｓｏｕｒｃｅ  Ｖａｌｕｅ」とは、ＴＡＧの源値を意味する。ここではＴＡＧＮｏが「ＰＩＤ００１．ＰＶ」のＴＡＧの源値として１００．０ｋｇ／ｍ２が示されている。なお図中においてｋｇ／ｍ２は「ｋｇ／ｍ２」と表されている。当該単位は、ＴＡＧに単位の定義がある場合に表示される。また設定がアナログの場合にこのような単位を表示する。すなわち、設定が、例えば「ＯＮ」と「ＯＦＦ」しかないような場合には、単位の表示はされない。「Ｆｏｒｃｅ  Ｖａｌｕｅ」とは、強制設定値を意味し、ここではＴＡＧＮｏ「ＰＩＤ００１．ＰＶ」のＴＡＧに対し強制設定値として１００．０ｋｇ／ｍ２が入力されている、又は設定されていることがわかる。
【０１２７】
図１３中の「ＦＯＮ」は、ＴＡＧに対し、既に強制設定が行われているときに表示されるものであり、他の文字と比較して目立つ色彩にて表示される。例えば、背景が黒で他の文字が白で表示されるような場合に、「ＦＯＮ」は例えば赤で表示される。ここでは、ＴＡＧＮｏが「ＰＩＤ００１．ＰＶ」のＴＡＧに対し、強制設定がされていることがわかる。この「ＦＯＮ」は、コントローラ３’における強制設定アドレス情報一覧３３０’において、登録されているアドレスであって、且つ強制設定指示の解除がされていないアドレスに対応付けられているＴＡＧに対し、表示される。
【０１２８】
「ＵＳＥＲ」とは、強制設定画面を使用中のオペレータ等を識別する情報（ユーザＩＤとも記載する）であり、ここでは当該オペレータのユーザＩＤが「ｕｓｅｒ００１」であることがわかる。「Ｒｅｍａｒｋ」とは、強制設定を行うための理由などの備考を意味し、すぐ下の欄が当該備考を入力又は表示するための備考欄に該当する。この備考欄の右隣の直方体のマークをタッチ又はクリック等することにより、オペレータは備考欄に記載した内容を消去できる。
【０１２９】
「Ｆｏｒｃｅ」は、ＴＡＧに対し、「Ｆｏｒｃｅ  Ｖａｌｕｅ」の欄にオペレータが入力した値を強制設定することを監視装置７に指示するための表示であり、「Ｆｏｒｃｅ」部分をタッチ等することにより、当該指示がなされる。これにより監視装置７の処理部７２は、後述する本実施形態における強制設定指示情報を生成する。
【０１３０】
「ＵｎＦｏｒｃｅ」は、強制設定が行われているＴＡＧに対し、当該設定の解除を指示するための表示である。画面上の「ＵｎＦｏｒｃｅ」の部分のタッチ等により、強制設定の解除指示が監視装置７からコントローラ３’に対しなされる。
【０１３１】
「Ｃａｎｃｅｌ」は、強制設定画面における入力を中止し、入力した内容を破棄するための表示である。オペレータが、「Ｃａｎｃｅｌ」の部分をタッチ等することにより、このような中止処理は行われる。
【０１３２】
図１４は、本実施形態に係る監視装置７により生成される強制設定指示情報を例示する。図１４に示されるように、強制設定指示情報には、第１の実施形態の強制設定指示情報が含むアドレス情報と強制設定値に加え、強制設定の対象となる変数と、識別情報７１０が含まれる。図１５における強制設定指示情報において、強制設定の対象となるアドレスは「Ｍ，ＷＩ，６５５５２」、当該アドレスが指す記憶領域に設定される強制設定値は「１００」、当該強制設定値が代入される変数は「Ｖ００２」、強制設定の指示元の監視装置７の識別情報７１０は、「ＸＸＸ」である。なお、図示はされていないが、強制設定指示情報には、強制設定を行ったオペレータのユーザＩＤと強制設定の理由等が含まれている。
【０１３３】
なお、図１４において強制設定指示情報は、表形式にて表されるが、これに限らず、アドレスと強制設定値と変数と識別情報７１０等の各値が互いに関係付けられており、またこれらの各値が何を示すかを監視装置７とコントローラ３’等が認識可能であれば、強制設定指示情報は表形式には限定されない。
【０１３４】
図１５は、本実施形態における強制設定支援情報一覧７１２の表示例を示す。図１５において「ＳＴ１０１」、「ＳＴ２０Ｃ」、「ＳＴ１１Ｃ」の各々は、強制設定の対象となった制御対象装置が配置されているステーションのステーションＮｏである。ステーションＮｏは、ここではＳＴｍｎｋ（ｍ、ｎ、ｋには数字や英字等が入る）にて表されているが、これに限定されない。
【０１３５】
「Ｆｏｒｃｅ  Ｔｉｍｅ」は、強制設定がされた日時である。また「Ｆｏｒｃｅ  Ｕｓｅｒ」は、強制設定処理を行ったオペレータのユーザＩＤである。また「Ｐｌａｃｅ」は、強制設定を行った監視装置７を識別するための識別情報（識別情報７１０）である。
【０１３６】
図１５の強制設定支援情報一覧７１２において、例えば１行目を参照すると、２０１５年９月１日の１３時１５分５秒に、ユーザＩＤ「ｕｓｅｒ００１」のオペレータが、「Ｓｅｎｓｏｒ  ｂａｄ（センサの不調）」を理由に、識別情報「ＸＯＳ３０００−１」の監視装置７を用いて、ステーションＮｏ「ＳＴ１０１」のステーションにおける、ＴＡＧＮｏ「ＰＩＤ００１．ＰＶ」のＴＡＧであって源値が「０．０」のＴＡＧに対して、強制設定値「１００．０」を強制的に設定したことがわかる。
【０１３７】
図１６は、本実施形態における強制設定アドレス情報一覧３３０’を例示する。ここに示される強制設定アドレス情報一覧３３０’は、コントローラ３’が、図１４に示す強制設定指示情報を１つだけ取得したときに、強制設定管理部３１１’により生成されたものである。図１６に示されるように、管理番号が１の行には、アドレスの列に「Ｍ，ＷＩ，６５５５２」、変数の列に「Ｖ００２」、識別情報（識別情報７１０）の列に「ＸＸＸ」が登録されている。なお、ここでの管理番号は、強制設定管理部３３０’により付される番号であり、上記支援装置２のフロントエンドコンパイラ２１０が付した、強制設定処理情報一覧２３２における管理番号とは別のものである。また強制設定アドレス情報一覧３３０’には、図示はされていないが、各行の情報には、強制設定を行ったオペレータのユーザＩＤ、強制設定の理由、強制設定値等が含まれる。以下、強制設定管理部３１１’による強制設定アドレス情報一覧３３０’の生成について端的に説明する。
【０１３８】
強制設定管理部３１１’は、強制設定指示情報を取得すると、当該強制設定指示情報におけるアドレスが強制設定アドレス情報一覧３３０’に含まれるか判定する。当該アドレスが、強制設定アドレス情報一覧３３０’に含まれなければ、強制設定管理部３１１’は、強制設定アドレス情報一覧３３０’のうち、アドレスについてＮＵＬＬ等が登録されているなど、アドレスが未登録の行のうち管理番号が最も小さい行に、受信した当該強制設定指示情報におけるアドレス、変数、及び識別情報７１０等を記録する。一方、受信した強制設定指示情報におけるアドレスが強制設定アドレス情報一覧３３０’に含まれる場合には、強制設定管理部３１１’は、当該アドレスが登録されている行における識別情報（識別情報７１０）や強制設定値等の各々を、受信した強制設定指示情報に含まれる、対応する情報へと更新等する。
【０１３９】
なお、上述したように強制設定管理部３１１’は、監視装置７から強制設定の解除指示を受けた場合には、強制設定アドレス情報一覧３３０’における、該当するアドレスの記録を削除、又は当該記録に対し解除の旨を付加する。
【０１４０】
図１６における強制設定アドレス情報一覧３３０’は、表形式で表されているが、アドレス、変数、及び識別情報７１０等が互いに関係付けされ記憶されていれば、表形式に限定されない。
【０１４１】
図１７は、監視装置７のハードウェア構成を例示する。ここでは、監視装置７は、一般的なコンピュータとしてハードウェアを有し、監視装置７による処理は、以下に示すハードウェア８を具体的に利用することにより実行される。ハードウェア８は、互いにバス８０によって接続されたプロセッサ８１、メモリ８２、記憶装置８３、及び通信インターフェース回路８４等を備える。
【０１４２】
プロセッサ８１は、例えばシングルコア、デュアルコア、またはマルチコアのプロセッサである。
【０１４３】
メモリ８２は、例えばＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、又は半導体メモリである。
【０１４４】
プロセッサ８１が、メモリ８２に記憶された情報、又は後述する記憶装置８３からメモリ８２に読み込んだ情報を用いて、メモリ８２に記憶された各種プログラムを実行することにより、処理部７２の機能が実現される。
【０１４５】
記憶装置８３は、例えばハードディスクドライブ、光ディスク装置等であり、外部記憶装置や可搬型記憶媒体でもよい。記憶装置８３により、記憶部７１の機能が実現される。
【０１４６】
通信インターフェース回路８４は、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネット、またはイントラネット等を介して、監視装置７がコントローラ３等と通信を行えるようにするためのインターフェースである。通信インターフェース回路８４により上記通信部７３の機能が実現される。
【０１４７】
ユーザインターフェース回路８５は、キーボードやタッチパネル等の入力装置、又は液晶ディスプレイ等の表示装置を、監視装置７と接続するための回路である。ユーザインターフェース回路８５により、上記ユーザインターフェース７０の機能が実現される。
【０１４８】
なお、上述した場合以外にも、監視装置７の機能ブロックの全て、又はその一部の機能は、適宜、専用のハードウェアにより実現されることもできる。
【０１４９】
なお、支援装置２とコントローラ３の各ハードウェアについては、上記実施形態の場合と同様であるので、説明を省略する。
【０１５０】
本実施形態によれば、オペレータは、どの制御対象装置がどの監視装置からの指示に基づいてどのように強制的に制御されているかを、監視装置７から確認することができ、無駄な強制設定や、互いに矛盾する強制設定や、制御対象装置に過分な付加のかかる強制設定等を排除することができ、プラント内の制御対象装置の運用がより容易で安全なものになる。
【０１５１】
本発明は、本発明の広義の精神と範囲を逸脱することなく、様々な実施形態および変形が可能とされるものである。また、上述した実施形態は、本発明を説明するためのものであり、本発明の範囲を限定するものではない。特許請求の範囲内およびそれと同等の発明の意義の範囲内で施される様々な変形も、本発明の範囲内とみなされる。
【符号の説明】
【０１５２】
１、１’  コントロールシステム、プログラマブルコントローラシステム
２  支援装置、開発支援装置
３、３’  コントローラ、制御装置
５、６、８  ハードウェア
７  監視装置
２０、７０  ユーザインターフェース
２１  プロジェクト管理部
２２  コンパイラ
２３、７１  記憶部
２４、３０、７３  通信部
３１、３１’  プログラム実行管理部
３２  第１記憶部
３３、３３’  第２記憶部
５０、６０、８０  バス
５１、６１、８１  プロセッサ
５２、８２  メモリ
５３、６４、８３  記憶装置
５４、６５、８４  通信インターフェース回路
５５、８５  ユーザインターフェース回路
６２  第１メモリ
６３  第２メモリ
７２  処理部
２２０  フロントエンドコンパイラ
２２１  バックエンドコンパイラ
２３０  プロジェクトプログラム一覧
２３１  変数・アドレス対応情報
２３２  インスタンス・プログラム対応情報
２３３  呼出関係情報
２３４  強制設定可否情報一覧
２３５  強制設定位置情報一覧
３１０  プログラム実行部
３１１、３１１’  強制設定管理部
３３０、３３０’  強制設定アドレス情報一覧
７１０  識別情報
７１１  ＴＡＧ情報
７１２  強制設定支援情報一覧
【図１】
2019046052.tif 000003
【図２】
2019046052.tif 000004
【図３】
2019046052.tif 000005
【図４】
2019046052.tif 000006
【図５】
2019046052.tif 000007
【図６】
2019046052.tif 000008
【図７】
2019046052.tif 000009
【図８】
2019046052.tif 000010
【図９】
2019046052.tif 000011
【図１０】
2019046052.tif 000012
【図１１】
2019046052.tif 000013
【図１２】
2019046052.tif 000014
【図１３】
2019046052.tif 000015
【図１４】
2019046052.tif 000016
【図１５】
2019046052.tif 000017
【図１６】
2019046052.tif 000018
【図１７】
2019046052.tif 000019