JP6866663B2 - プログラマブルコントローラシステム、プログラマブルコントローラ、支援装置、hci装置、二重化プログラマブルコントローラシステム - Google Patents

プログラマブルコントローラシステム、プログラマブルコントローラ、支援装置、hci装置、二重化プログラマブルコントローラシステム Download PDF

Info

Publication number
JP6866663B2
JP6866663B2 JP2017019048A JP2017019048A JP6866663B2 JP 6866663 B2 JP6866663 B2 JP 6866663B2 JP 2017019048 A JP2017019048 A JP 2017019048A JP 2017019048 A JP2017019048 A JP 2017019048A JP 6866663 B2 JP6866663 B2 JP 6866663B2
Authority
JP
Japan
Prior art keywords
forced
address
machine language
instruction
controller
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2017019048A
Other languages
English (en)
Other versions
JP2017142794A (ja
Inventor
吉原 大助
大助 吉原
真規子 高橋
真規子 高橋
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fuji Electric Co Ltd
Original Assignee
Fuji Electric Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fuji Electric Co Ltd filed Critical Fuji Electric Co Ltd
Publication of JP2017142794A publication Critical patent/JP2017142794A/ja
Application granted granted Critical
Publication of JP6866663B2 publication Critical patent/JP6866663B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Description

本発明は、プログラマブルコントローラシステムに関する。
ソフトウエア開発でデバッグを実施する時、プログラム動作の確認のため、変数の値を書き換えて実施することがある。この一例として、特許文献1に開示されているように内部変数とプログラムの一部を書き換える方法がある。
また、プラントシステムの稼働中に一部の計器などが故障して正常な値が取り込めない状態では、システムの正常稼働に影響が発生するため、一時的に値を強制的に書き換えて、システムの稼働を継続することが求められる。
特開2010-122824号公報
上記のように稼動中に正常な値が取り込めない場合、オペレータが監視画面から変数の値の書き換えを実施する必要がある。しかし、上記特許文献1では、エンジニアリングツールを使用しており、オペレータは、コントローラ内で動作しているプログラムには詳しくないため、エンジニアリングツールを扱って値を変更することは困難である。
監視画面から強制的に変数の値を設定する場合、オペレータが監視対象の変数に対して値を設定するため、エンジニアリングツールの回路図(プログラム)による接続点を指定する方法では、運用が困難である。
また、上記特許文献1の従来技術では、演算結果を一時的に内部変数に書き出し、その値を読み出して、次の演算結果の入力とするコードを生成する。強制的に値を書き換える場合は、その内部変数に対して書き込むコードをNOPに置き換え、内部変数に値を設定する仕組みになっている。そのため、接続点毎に一時変数(内部変数)が必要であり、メモリを余分に消費している。
また、特許文献1の従来技術では、一時変数に対して値を設定するため、複数個所で変数に対する書き込みを実施しているプログラムの場合、対象の変数への書き込みする複数の接続点に対して値を設定する必要があり、簡単にユーザが指定した変数に対して強制的に値を設定することができない。
ところで、ここで、上述したように、プラントシステムの稼働中に一部の計器などが故障して正常な値が取り込めない状態になったら、この値を強制的に書き換えることで対応する。例えば、システム稼動中、コントローラには各計器(センサなど)の計測値が入力され、各計器に対して予め割り当てられているメモリ領域に、計測値が格納される(データ収集する)。この様なデータ収集処理は例えば定周期で実行され、以って定周期で上記各メモリ領域の格納データが更新されることになる。
稼動中に任意の計器が故障等すると、故障した計器に対応するメモリ領域には異常値が格納されることになり、以ってこのメモリ領域の値を用いる何らかの処理に、悪影響が生じる可能性がある。これを避ける為に上記のように値を強制的に書き換えることで、システム稼働を継続できる。これは、例えば、故障した計器に対応するメモリ領域に、所定の設定値を書き込むものである。
しかしながら、これによってシステム稼働を継続することで、上記定周期のデータ収集処理も続行されるので、上記故障した計器に対応するメモリ領域には再び異常値が格納されてしまう(上記設定値に上書きされてしまう)ことになる。
本発明の課題は、システム稼働中にコントローラの任意のメモリ領域の値を強制的に書き換えると共に、この強制設定されたメモリ領域へのその後の書込みを禁止でき、以ってシステム稼働を安定して継続できるプログラマブルコントローラ、その支援装置、コントローラ、二重化コントローラシステムなどを提供することである。
本例のプログラマブルコントローラシステムは、例えば、支援装置とコントローラを有する構成であって、それぞれが例えば以下の各手段を有する。
支援装置は、任意のプログラムのソースコードをコンパイルして機械語オブジェクトに変換するコンパイル手段を有する。
コントローラは、前記機械語オブジェクトを実行するプログラム実行手段と、強制設定値が書き込まれたメモリアドレスが登録される強制設定アドレス記憶手段とを有する。
そして、前記プログラム実行手段は、前記機械語オブジェクトにおける書込み命令を実行する際に、該書込み命令による書込み先アドレスが、前記強制設定アドレス記憶手段に登録されている場合には、該書込み命令による書込み先アドレスへの書き込みを実行しない、あるいは該書込み先アドレスへ前記強制設定値を書き込む
本発明のプログラマブルコントローラ、その支援装置、コントローラ、二重化コントローラシステムなどによれば、システム稼働中にコントローラの任意のメモリ領域の値を強制的に書き換えると共に、この強制設定されたメモリ領域へのその後の書込みを禁止でき、以ってシステム稼働を安定して継続できる。
実施例1のプログラマブルコントローラシステムの構成図である。 (a)はソースコード、(b)は変数−アドレス対応表、(c)は中間コードの具体例である。 (a)は強制設定画面、(b)は強制設定値送信データ、(c)は強制ONアドレス一覧の具体例である。 コントローラにおける強制設定処理の一例を示すフローチャート図である。 コントローラにおける特定の機械語オブジェクトによる処理の一例を示すフローチャート図である。 実施例2のプログラマブルコントローラシステムの構成図である。 機械語オブジェクトの具体例を示す図である。 (a)は強制代入処理情報一覧、(b)は強制ONアドレス一覧の具体例である。 実施例2のシステム全体の概略処理フロー図である。 強制代入処理のフローチャート図である。 バックエンドコンパイラの処理フローチャート図である。 本例のプログラマブルコントローラシステムの機能ブロック図である。 本例の二重化コントローラシステムの構成図である。 (a)は実施例3の強制ONアドレス一覧、(b)は強制代入一覧情報の具体例である。 実施例3の機械語オブジェクトの具体例である。 実施例3の強制代入処理フローチャート図である。 実施例3の処理フローチャート図(その1)である。 実施例3の処理フローチャート図(その2)である。 実施例3の処理フローチャート図(その3)である。 実施例3の処理フローチャート図(その4)である。 本例の二重化コントローラシステムの機能ブロック図である。
以下、図面を参照して本発明の実施の形態について説明する。
まず、図1〜図5を参照して実施例1について説明する。
図1は、実施例1のプログラマブルコントローラシステムの構成図である。
図示の例のプログラマブルコントローラは、支援装置10、コントローラ20等を有し、更にHCI(Human Communication Interface)装置30を有していてもよい。HCI装置30は、例えばプログラマブル表示器などであるが、この例に限らない。尚、支援装置10、コントローラ20、HCI装置30は、ネットワーク1に接続されており、ネットワーク1を介して相互にデータ送受信可能となっている。尚、ネットワーク1は、1つのネットワークとは限らず、複数のネットワークより成るものであっても構わない。
また、尚、コントローラは、PLCの制御装置であってもよいし、DCS(分散制御システム;distributed control system)の制御装置であってもよい。
支援装置10は、ユーザにプログラム開発環境を提供するコンピュータ装置(ローダ等)である。支援装置10は、所定のアプリケーションプログラムをコンピュータで実行することで実現される各種処理機能等を有する。これは、例えば、ユーザに任意のプログラムのソースコード13を記述させる為のユーザインターフェース機能を有し、ユーザが作成したソースコード13をターゲット上で動作する機械語オブジェクト15に変換するコンパイラ(フロントエンドコンパイラ11、バックエンドコンパイラ12)機能を有し、生成された機械語オブジェクト15をターゲットに送信する通信機能を有するものとなる。これら各機能は基本的には既存の一般的な機能であるので、コンパイラ以外は特に図示せず、上記簡単な説明のみとする。
上記プログラム開発環境上でユーザによって記述されたソースコード13は、フロントエンドコンパイラ11によって中間コード14に変換されて例えばファイルとして保存される。バックエンドコンパイラ12は、生成された中間コード14を、ターゲット上で動作する機械語オブジェクト15に変換する。変換された機械語オブジェクト15は例えばファイルとして保存される。尚、ターゲットとは、例えばコントローラ20である。この機械語オブジェクト15のファイルは、上記不図示の送信機能によりターゲットに送信される。
また、上記コンパイラ(フロントエンドコンパイラ11、バックエンドコンパイラ12)は、上記変換処理に伴って、上記ソースコード13に記述されている各変数に対して任意のメモリアドレスを割り当てる。これは、例えば、コントローラ20のメモリ22に係わるメモリアドレスを割り当てるものであり、この処理も既存機能であるので、特に詳細には説明しない。そして、この様な変数へのアドレス割当て結果を、変数−アドレス対応表16に記録しておく。
ここで、図2(a)に、ソースコード13の一部について一例を示す。
また、図2(b)には、図2(a)の例に応じた変数−アドレス対応表16の具体例を示す。
図2(a)には、入力側の変数として図示の変数V000と変数V0001があり、出力側の変数として図示の変数V002がある、ADD命令を示している。そして、これら3つの変数に対して、コンパイル処理の際に例えば任意のメモリアドレスが割り当てられ、この割当て結果が例えば図2(b)に示すものとなる。この例では、例えば変数V000に対してはメモリMの65550番地が割り当てられていることになる。尚、メモリMとは本例ではコントローラ20のメモリ22のことであるものとするが、この例に限らない。尚、図示のWIは、データ型を示すものであり、ここでは特に関係しないので、特に説明しないものとする。
図2(b)に示すように、変数−アドレス対応表16は、ソースコード13上の各変数の変数名41に対応付けて、その変数に対して割り当てられたメモリのアドレス42が登録されたものとなる。尚、この様な変数−アドレス対応表16の生成機能自体は、既存機能であるので、これ以上詳細には説明しないものとする。
また、中間コード14の一例を図2(c)に示す。図2(c)に示すように、中間コード14は、例えば、演算子とオペランドを一組とした、仮想的なターゲットを想定したニーモニック言語などである。尚、1つの中間コードは、バックエンドコンパイラ12により、それと等価な複数の機械語命令に変換される。
図2(c)の例では、演算子(中間コード命令)として、LD、ADD,STの各命令が示され、各演算子に係るオペランド(メモリアドレス)が示されている。尚、ここでは、演算結果等を一時的に格納するレジスタを、アキュムレータと記すものとする。
図2(c)の例の中間コードでは、LD命令によって、そのオペランドで示されたアドレス(メモリMの65550番地;以下、メモリMについては省略して記すものとする)の値を、アキュムレータに取り込む。次にADD命令によって、そのオペランドに示されるアドレス(65551番地)の格納データの値に、アキュムレータの値を加算し、この加算結果をアキュムレータに格納する。その後、ST命令によって、そのオペランドで示されたアドレス(65552番地)に、アキュムレータの値を書き込む。
一般的に、メモリに対して何らかの値を書き込む中間コード命令(機械語オブジェクトも同様)の場合、書込み先メモリのアドレス、書き込む値、そのデータ型の情報が存在する。中間コードの場合には、メモリへの書き込みを実施する演算子として、例えば図2(c)に示すST命令がある。ST命令は、上記の通り、上記アキュムレータに格納された値を、オペランドで示しているアドレスに書き込む動作になる。
ここで、上記背景技術で述べたような、プラントシステムの稼働中に一部の計器などが故障して正常な値が取り込めない状態となったことで、仮に上記“65550番地”の値が、異常な値となってしまったとした場合、この異常値に基づく上記加算結果を格納する65552番地の値も、異常な値となる。この為、その後、65552番地の値を読み出して不図示の何らかの処理を行う命令が実行されると、システムの正常稼働に影響が発生する。この為、この例では例えば、65552番地の格納データ値を強制的に書き換えて、システムの稼働を継続することが求められる。
しかしながら、この様に強制的に値を書き換えても、システムの稼働が継続されることで、その後に例えば上記ST命令が実行されると、65552番地に関して上記強制設定値に異常値が上書きされてしまうことになる。この為、その値を強制的に書き換えたメモリアドレスに関しては、その後、通常処理による書き込みが実施されないようにする仕組みが、求められる。尚、読出し命令が実行されても上記“異常値が上書きされてしまう”事態は起こり得ないので、読出し命令は対象とはならない。対象となるのは、上記ST命令のような、値を書き換えてしまう命令(書込み命令)である。
上述したことから、本手法では、強制設定値が設定されたメモリアドレスに関しては、その後、このメモリアドレスにアクセスする書込み命令は実行されないようにする。但し、強制設定値自体を、何らかの理由により変更したい場合があることを想定した場合、値の変更を一切禁止することは、望ましくない。
これより、本手法では、後に図3を参照して説明するように、支援装置10またはHCI装置30においてユーザが変数と設定値を指定するだけで、異常が生じたメモリアドレスの格納データを強制的に上記ユーザ設定値に書き換えることを可能にすると共に、その際に例えば後述する図4の処理によりこの強制設定対象のメモリアドレスをコントローラ20側で強制ONアドレス一覧24に登録させる。この様な強制ONアドレス一覧24への登録処理の具体例を、図4のフローチャート図に示し、後に説明する。
また、支援装置10におけるプログラム(ソースコード13)のコンパイルの際に、所定の命令(書込み命令)に関しては所定の処理(例えば後述する図5の処理)を実現する機械語も追加する形で機械語オブジェクトを生成する。所定の命令を実行する際には例えば後述する図5の処理が実行され、その際に上記強制ONアドレス一覧24が参照されることで、その値を強制的に書き換えたメモリアドレスに関しては、その後、通常処理による書き込みが実施されないようにすることができる。
ここで、HCI装置30は、例えばプログラマブル表示器等であり、コントローラ20の動作を監視(モニタリング)する為の機能等を有している。この監視機能は、例えば、コントローラ20において何らかの異常が発生した場合、この異常に関する所定の情報(例えば異常があったメモリアドレス)などを表示する機能等(この機能自体は既存の一般的な機能であり特に説明しない)である。その際、変数−アドレス対応表16を参照することで、異常があったメモリアドレスに対応する変数名を、表示することもできる。勿論、その為には、予め、支援装置10からHCI装置30へ、ソースコード13や変数−アドレス対応表16等を転送して保持させておく必要がある。また、この様な監視機能は、支援装置10が備えていてもよい。
これより、後述する“ユーザに、ソースコード上で、強制設定を実施する変数を任意に指定させる”処理や、後述する図3(a)の強制設定画面50上でユーザに任意の強制設定値を設定させる処理や、これらに基づく後述する図3(b)の強制設定値送信データ60の生成処理は、支援装置10が実行してもよいしHCI装置30が実行してもよい。
本例では、強制設定対象のメモリアドレスは、上記ST命令等の“そのオペランドが示すアドレスに値を書込む命令”(簡単の為に単に“書込み命令”と記す場合もある)の当該アドレスであるものとする。
そして、本例の場合には、支援装置10においてコンパイラが“メモリへの書き込みを行う中間コード命令”を機械語オブジェクトに変換する際に、『書込み先アドレスを強制ONアドレス一覧24内に登録されている各アドレスと比較し、書込み先アドレスが強制ONアドレス一覧24に存在しない場合は、アキュムレータの値をメモリに書き込み、強制ONアドレス一覧24に存在する場合は、メモリに書き込みを実施しない』という処理を行う械語オブジェクト(強制設定用機械語オブジェクトと呼ぶものとする)を、生成する。この様な強制設定用機械語オブジェクトをコントローラ20で実行すると、例えば後述する図5の処理が実行されるのであり、これについては後述する。
尚、この様な強制設定用機械語オブジェクトのベースが、予め作成されて支援装置10に記憶されており、このベースに上記“書込み命令”の機械語オブジェクトを挿入することで、上記強制設定用機械語オブジェクトを生成するようにしてもよい。これは、後述する図5の例の場合、図示のステップS26以外の処理が上記ベースに相当し、ベースではステップS26の処理は存在せず、上記“書込み命令”の機械語オブジェクトがステップS26の処理として挿入されることで、例えば図5に示す処理を実現する強制設定用機械語オブジェクトが生成される。勿論、これは一例であり、この例に限らない。
尚、“メモリへの書き込みを行う中間コード命令”が、書込み命令の一例であり、その具体例は例えばST命令、SET命令、RESET命令、MOV命令などであるが、これらの例に限らない。
本手法では、任意のメモリアドレスに強制設定値が設定された後に、このアドレスに書き込みが行われることを防止するので、読出し命令は考慮しなくてよく、上記の通り書込み命令が対象となる。
上述したように、本手法では、まず、ユーザが任意の変数と設定値を指定するだけで、異常が生じたメモリアドレスの格納データを強制的に上記ユーザ設定値に書き換えること(強制設定)を可能にすると共に、その際にこの強制設定したメモリアドレスをコントローラ20側で強制ONアドレス一覧24に登録させる。
これについて、以下、図3や上記図2を参照して説明する。
尚、ここでは、上記支援装置10で作成された任意のソースコード13とこれをコンパイルした際に作成された上記変数−アドレス対応表16は、ネットワーク1を介して上記HCI装置30に転送されて格納されてもよい。これより、以下に説明する強制設定に係る処理は、支援装置10で行ってもよいがHCI装置30で行ってもよい。
支援装置10またはHCI装置30において、ユーザが例えば強制設定の実行を指示すると、装置はまずソースコード13をディスプレイに表示させる。ユーザは、表示されるソースコード上で強制設定を実施する変数(変数名など)を指定して、さらに任意の強制設定値を設定する。この強制設定値の設定は、別画面(例えば図3(a)に示す強制設定画面50)で行うようにしてもよい。
尚、上記監視機能により、ユーザは、異常が生じたメモリアドレスに対応する変数名を把握することができ、この変数名を指定する。これにより、異常が生じたメモリアドレスについて強制設定を行うことができ、以ってシステムの稼働を継続することができる。
例えば図2(a)に示す例のソースコード13を表示させた例で説明するならば、ユーザが例えば図示の変数V002を選択指定すると、例えば図3(a)に示す強制設定画面50が表示される。
強制設定画面50には、図示の変数名の入力欄51と設定値の入力欄52があり、初期状態で変数名の入力欄51には上記ソースコード上で選択指定された変数名(ここではV002)が既に入力された状態となっている。この状態で、ユーザが任意の強制設定値(本例では‘100’)を上記設定値の入力欄52に入力して、図示の「実行」ボタン53を操作すると、支援装置10またはHCI装置30は、例えば図3(b)に示す強制設定値送信データ60を生成して、これを上記不図示の通信機能によりコントローラ20へ送信する。この送信データ60を受信したコントローラ20は、例えば後述する図4の処理を実行する。
ここで、図3(b)に示す例では、強制設定値送信データ60は、アドレス61と強制設定値62から成る。強制設定値62は、上記設定値の入力欄52に入力された値である。また、アドレス61は、上記変数名の入力欄51に設定された変数名に対応するアドレスであり、これは変数−アドレス対応表16を参照して取得される。上記の例では、設定される変数名はV0002であるので、図2(b)の例では対応するアドレスは“65552番地”となり、これより図3(b)に示す内容の強制設定値送信データ60が、生成されることになる。
この様に、ユーザは、特に強制設定対象のメモリアドレスが分からなくても、ソースコード上の変数名を指定することで、強制設定対象のメモリアドレスがコントローラ20に送られることになる。
尚、HCI装置30は、例えばプログラマブル表示器等であり、既存機能としてコントローラ20の動作状態をモニタする機能(監視機能)等も有している。これに関して、コントローラ20は、例えば何らかの異常を検出してこの異常に係るメモリアドレスを判定して、これをHCI装置30に通知する等の既存機能を有している。
そして、HCI装置30は、通知された異常メモリアドレスに対応する変数名を、変数−アドレス対応表16を参照して認識することができ、この変数名を表示することができる。これより、ユーザは、問題が生じた変数名を把握して、上記のように強制設定すべき変数名として指定すること等が可能となる。
一般的に、プログラマブル表示器等のユーザ(オペレータ等)は、コントローラ内で動作しているプログラムには詳しくないが、上記HCI装置30によれば、この様なオペレータ等であっても、問題が生じたメモリアドレスに対応する変数名を把握して、上記のように強制設定すべき変数名として指定すること等が可能となる。そして、これより、問題が生じたメモリアドレスへの強制設定が簡単に行われて、システム稼動を安定して継続できることになる。この様に、本手法によれば、オペレータ等は、変数を指定するだけで簡単に変数の値を強制的に変更できる。
尚、上記HCI装置30と同様の監視機能を、支援装置10が備えていてもよい。
コントローラ20は、上記強制設定値送信データ60を受信すると、上記強制ONアドレス一覧24への登録処理を行う(後述する図4の処理など)。これについては後述するが、ここで強制ONアドレス一覧24について簡単に説明しておく。
図3(c)に、強制ONアドレス一覧24の具体例を示す。
図示の例の強制ONアドレス一覧24は、管理番号71と強制ONメモリアドレス72から成る。管理番号71は、予め決められているシリアル番号(1,2,3、・・・など)である。尚、ここでは後述するインデックスは、管理番号71に相当するものとする。
強制ONメモリアドレス72には、上記強制設定対象のメモリアドレスが格納されるが、初期状態では全てにNULLが格納されている。図示の例では、強制設定対象のメモリアドレスが、これまでに図3(b)に示す例の1つだけしか通知されてきていない場合を示しており、それ故に2行目以降は全て、未だNULLのままとなっている。尚、NULLは、無効なアドレスを示す。
コントローラ20は、上記強制設定値送信データ60を受信すると、強制ONアドレス一覧24に上記強制設定対象のメモリアドレスを登録すると共に、メモリ22における上記強制設定対象のアドレスの領域に、この強制設定値を書き込む。この処理の具体例を図4に示す。
図4は、コントローラ20における強制設定処理の一例を示すフローチャート図である。尚、この処理は、例えばプログラム実行管理部21が行うが、この例に限らない(不図示の別の機能部が実行してもよい)。
図4の処理では、コントローラ20は、上記送信されてくる強制設定値送信データ60を受信すると(ステップS11)、まず、インデックスを初期値(=1)に設定する(ステップS12)。尚、受信した強制設定値送信データ60からは、上記アドレス61と強制設定値62が得られることになる。アドレス61は、強制設定対象のメモリアドレスである。
その後は、後述するステップS14,S15の何れかがYESとなるまでインデックスを更新(+1インクリメント)しながらステップS13〜S16の処理を繰り返す。尚、上記の通り、インデックスは上記管理番号71に相当するので、換言するならば、強制ONアドレス一覧24の各行を順次処理対象としながらステップS13〜S16の処理を繰り返すことになる。
そして、ステップS14がYESになったらステップS17,S18の処理を実行し、ステップS15がYESになったらステップS18の処理のみを実行して、本処理を終了する。
すなわち、まず、強制ONアドレス一覧24から、現在のインデックスが示す行の強制ONメモリアドレス72を取得する(ステップS13)。強制ONメモリアドレス72にアドレスが登録されていない場合にはNULLが取得されることになり、図3(c)の例では1行目(インデックス=1)以外ではNULLが取得されることになる。
そして、ステップS13でNULLを取得した場合には(ステップS14、YES)ステップS17へ移行し、それ以外の場合(何らかのメモリアドレスを取得した場合には(ステップS14,NO)ステップS15へ移行する。
ステップS15では、ステップS13で取得したメモリアドレスが、上記強制設定対象のメモリアドレス(アドレス61)と同一であるか否かを判定し、両者が同じである場合には(ステップS15,YES)、メモリ22における上記強制設定対象のメモリアドレスに、上記強制設定値62を書き込む(ステップS18)。尚、この場合には、上記アドレス61は、既に強制ONアドレス一覧24に登録済みである(以前に登録されている)ことになるので、このアドレス61を強制ONアドレス一覧24に登録することは必要ないことになる。
一方、両者が異なる場合には(アドレス61と強制ONメモリアドレス72が異なる場合には)(ステップS15,NO)、インデックスを更新(+1インクリメント)して(ステップS16)、ステップS13に戻る。
上記ステップS14の判定がYESである場合すなわちステップS13でNULLを取得した場合には、強制ONアドレス一覧24において現在のインデックスが示す行の強制ONメモリアドレス72に、受信した上記強制設定対象メモリアドレスを登録する(ステップS17)。更に、メモリ22における上記強制設定対象メモリアドレスに、受信した強制設定値62を書き込む(ステップS18)。
尚、本例では、強制ONアドレス一覧24には、上記強制設定対象メモリアドレスが上から順に登録されるので、図4はこの例に応じた処理を示すものであり(よって、図示の例に限らない)、上記受信したアドレス61が強制ONアドレス一覧24に未登録である場合に、ステップS14の判定がYESとなることになる。
上記処理について、具体例を用いて説明するならば、最初はインデックス=1であるので、図3(c)の例では1行目が取得されるので、強制ONメモリアドレス72としてアドレス‘65552’が取得されることになり、以ってステップS14の判定はNOとなる。そして、仮に、上記強制設定対象メモリアドレス(アドレス61)が‘65552’であった場合には、ステップS15がYESとなる。一方、上記強制設定対象メモリアドレスが‘65552’以外であった場合には、ステップS15はNOとなり、ステップS16によってインデックス=2となってステップS13に戻ると、図3(c)の例では2行目はNULLであるので、今度はステップS14がYESとなる。そして、仮に強制設定対象メモリアドレスが‘65553’であったとするならば、強制ONアドレス一覧24の2行目における強制ONメモリアドレス72の欄に‘65553’が登録されると共に(ステップS17)、メモリ22のアドレス‘65553’の記憶領域に、受信した強制設定値62が書き込まれることになる。
つまり、上記処理は、上記強制設定値送信データ60が、強制ONアドレス一覧24に未登録のメモリアドレス(新規のメモリアドレス)に対する強制設定値62である場合には、この新規のメモリアドレスを強制ONアドレス一覧24に追加登録したうえで(ステップS17)、メモリ22におけるこの新規メモリアドレスの領域に、強制設定値62を書き込む(ステップS18)。一方、過去に既に強制設定値を設定したことがあるメモリアドレスについて設定値を変更したい場合には、ステップS17の処理は必要なく、ステップS18の処理のみを実行することになる。
図5は、コントローラ20において機械語オブジェクト23を実行する際に上記強制設定用機械語オブジェクトを実行したときの処理の一例を示す図である。上記の通り、例えばST命令等の書き込み命令を機械語オブジェクトに変換する際に、図5に示すような処理を実現する機械語オブジェクトが生成されている。図示の各処理のうち、ステップS26の処理が例えばST等の書き込み命令による処理に相当し、それ以外の処理が追加されているものと見做しても構わない。
尚、例えば上記図2(c)のST命令に係る図5の処理が実行されて且つステップS26の処理が実行されることになった場合には、ステップS26では上記の「アドレス65552番地に、アキュムレータの値を書き込む」処理が実行されることになる。
ここで、本例では、図5の処理を開始したら、上記ステップS26による書込み先アドレス(上記の例では65552番地)を、認識するものとする。認識した書込み先アドレスは、後述するステップS24の処理で用いられる。
図5の処理例では、まず、インデックスを初期値(=1)に設定する(ステップS21)。その後は、後述するステップS23,S24の何れかがYESとなるまでインデックスを更新(+1インクリメント)しながらステップS22〜S25の処理を繰り返す。ステップS23がYESになったらステップS26の処理を実行し、ステップS24がYESになったらステップS27の処理を実行して、本処理を終了する。
すなわち、まず、強制ONアドレス一覧24から、現在のインデックスが示す行の強制ONメモリアドレス72を取得する(ステップS22)。強制ONメモリアドレスが登録されていない場合にはNULLが取得されることになり、図3(c)の例では1行目(インデックス=1)以外の場合にはNULLが取得されることになる。
そして、ステップS22でNULLが取得された場合には(ステップS23,YES)、メモリ22における上記書込み先アドレスへの書き込みを実行して(ステップS26)本処理を終了する。
一方、ステップS22でNULL以外(何らかのアドレス)が取得された場合には(ステップS23,NO)、当該取得アドレスが上記書込み先アドレスと同一である場合には(ステップS24,YES)、メモリ22における上記書込み先アドレスへの書き込みを実行しないで(ステップS27)本処理を終了する。
ステップS22での取得アドレスが上記書込み先アドレスと同じではない場合には(ステップS24,NO)、インデックスを更新(+1インクリメント)して(ステップS25)ステップS22に戻る。
上記書込み先アドレスが、強制ONアドレス一覧24に登録されているアドレスである場合には、上記ステップS22〜S25の処理を繰り返す中で何れはステップS24の判定がYESとなることになり、ステップS27の処理が実行されることになる。一方、強制ONアドレス一覧24に登録されていないアドレスである場合には、上記ステップS22〜S25の処理を繰り返して全ての登録アドレスと一致チェックした後(全て、不一致となる)、ステップS22でNULLが取得されることになり、ステップS26の処理が実行されることになる。
この様にして、強制設定値が書き込まれたアドレスに関しては、その後、通常処理により書き込みが禁止されることになる。
尚、支援装置10、コントローラ20、HCI装置30は、何れも、ハードウェア的には、少なくとも不図示のCPU/MPU等の演算プロセッサと記憶装置(メモリなど)を有している。そして、記憶装置には予め各装置に応じた所定のアプリケーションプログラムが格納されている。演算プロセッサが、このアプリケーションプログラムを実行することで、上記各装置の各種処理機能が実現される。すなわち、コントローラ20の場合、上記プログラム実行管理部21の処理、上記図4のフローチャート図の処理、上記図5のフローチャート図の処理などが実現される。支援装置10の場合、上記コンパイラ(フロントエンドコンパイラ11、バックエンドコンパイラ12)の処理等が実現される。
また、支援装置10またはHCI装置30は、上記演算プロセッサが上記アプリケーションプログラムを実行することで、上述した“ユーザに、ソースコード上で、強制ONを実施する変数を任意に指定させる”処理や、図3(a)の強制設定画面50上でユーザに任意の強制設定値を設定させる処理や、これらに基づく図3(b)の強制設定値送信データ60の生成処理等の各種処理が、実現されてもよい。
尚、上述した例に限らず、例えばコントローラ20が支援装置10の機能の一部を備えていてもよい。例えばコントローラ20がコンパイラ機能(フロントエンドコンパイラ11、バックエンドコンパイラ12の両方もしくは何れか一方)を、備えていてもよい。この場合、支援装置10は、ソースコード13またはこれを中間コードに変換したものを、コントローラ20に送り、コントローラ20において機械語オブジェクトを生成するようにしてもよい。
以上、実施例1について説明した。
以下、図6〜図11を参照して、実施例2について説明する。
実施例2は、実施例1の特徴・効果に加えて、更に、コントローラ側での処理負荷を低減できる特徴・効果を提供するものである。
図6は、実施例2のプログラマブルコントローラシステムの構成図である。
図示の例では、実施例2のプログラマブルコントローラシステムは、支援装置210、コントローラ220等を有し、これらはネットワーク(不図示)を介して相互にデータ送受信可能となっている。尚、図示していないが、実施例1(図1)と同様に更にHCI(Human Communication Interface)装置30を有していてもよい。
支援装置210においても、上記支援装置10と同様に、プログラム開発環境上でユーザによって任意に記述されたソースコード213が、フロントエンドコンパイラ211によって中間コード214に変換され、更に中間コード214がバックエンドコンパイラ212によって、ターゲット上で動作する機械語オブジェクト215に変換される。また、このコンパイル処理に伴って変数−アドレス対応表216(対応表16と同じ)が生成される点も、支援装置10と同様であり、その説明は省略する。
支援装置210が支援装置10と異なる点は、コンパイル処理に伴って更に図示の「強制代入処理情報一覧」217が、生成される点である。更に、機械語オブジェクト215の内容も、支援装置10の機械語オブジェクト15とは一部異なる点がある。これらについては後に具体例を示して詳しく説明するが、「強制代入処理情報一覧」217には、“機械語オブジェクト215における各「強制代入処理へのジャンプ命令」の位置と、書き込み先アドレスの情報が含まれる。
尚、実施例2における強制代入処理は、例えば図10に具体例を示すサブルーチン処理であり、機械語オブジェクト215にはこの様なサブルーチンへジャンプする機械語命令が、含まれている。実施例2の強制代入処理は、後に図10を参照して説明するが、メモリの書き込み先アドレスに強制設定値を格納させる為の処理であり、これを実現する為に例えばアキュムレータの値を強制設定値に置き換えるが、この例に限らない。
「強制代入処理情報一覧」217の生成は、本例ではバックエンドコンパイラ212で機械語命令への変換処理に伴って実施する。バックエンドコンパイラ212の入力は、フロントエンドコンパイラ211が生成した中間コード214である。バックエンドコンパイラ212は、この中間コード214の1命令を該当する1又は複数の機械語命令に変換する。例えば、図2(c)のLD M,WI,65550の中間コード命令は、図7の例では以下の機械語命令群に展開される。
LDR R3,ICODE_DEF_1
LDRSH R0,[R3]
尚、ICODE_DEF_1は、M,WI,65550に対応したコントローラ内のアドレスを示す。
中間コードの各命令に対応した機械語命令への変換規則があり、それを元にバックエンドコンパイラ212が機械語オブジェクト215に変換する。「強制代入処理情報一覧」217の生成については後述する。
生成された「強制代入処理情報一覧」217と機械語オブジェクト215は、コントローラ220にダウンロードされて図示の「強制代入処理情報一覧」225と機械語オブジェクト223として記憶される。その際、機械語オブジェクト223における「強制代入処理へのジャンプ命令」を全てNOP(No Operation)に置き換える。但し、この処理は支援装置210側で実行してもよい。尚、よく知られているように、NOPは、所謂“何もしない命令”の一例である。 ここで、図7に、機械語オブジェクト215の具体例を示す。これは、図2(c)の中間コードを、機械語命令群に変換した例である。尚、図7では、見易さのためアセンブラで示しているが実際はアセンブラに対応したバイナリデータである。
図7の例において、下から2行目の“LDR pc,[wk1,#64]”が、上記「強制代入処理(サブルーチン)へのジャンプ命令」の一例である。本例のコンパイラ(211,212)は、ST命令等の書込み命令を機械語命令群に変換する際に、予め決められて登録されている「強制代入処理へのジャンプ命令」(一例が“LDR pc,[wk1,#64]”)を挿入している。尚、上記処理により、コントローラ220側では機械語オブジェクト223が初期状態ではこの“LDR pc,[wk1,#64]”が上記NOPに置き換えられていることになる。
図7において、上記“LDR pc,[wk1,#64]”を含む4つの機械語命令群(下から4番目〜最下行)は、図2(b)におけるST命令を機械語命令群に変換したものである。従来では一例として、ST命令を、“MOV lr,pc”“LDR pc,[wk1,#64]”以外の2つの機械語命令群に変換するものとなり、アキュムレータの格納データを当該ST命令の書込み先アドレス(本例では65552)に格納する処理を実行するものとなる。
また、この様な「強制代入処理(サブルーチン)へのジャンプ命令」に係わる情報が、コンパイル処理の際に「強制代入処理情報一覧」217に登録される。
図8(a)に、「強制代入処理情報一覧」217の具体例を示す。図示の例では、「強制代入処理情報一覧」217は、管理番号231、強制代入処理へのジャンプ位置232、機械語命令233、書き込み先アドレス234等のデータ項目から成る。
管理番号231は、単に、各レコードに任意に割り当てられるシリアル番号等である。強制代入処理へのジャンプ位置232には、「強制代入処理へのジャンプ命令」の機械語オブジェクト215における位置(行)が格納され、図7の例では10行目であるので図8(a)に示すように‘10’が格納される。書き込み先アドレス234には、強制代入処理へのジャンプ位置232にある「強制代入処理へのジャンプ命令」が係わる中間コード(本例ではST命令)の書込み先アドレス(本例では65552)が格納される。
尚、「強制代入処理情報一覧」217=「強制代入処理情報一覧」225と見做して構わない。
機械語命令233には、例えば、機械語オブジェクトにおいて“強制代入処理へのジャンプ位置”232が示す位置に記述されていた機械語命令(例えば「強制代入処理へのジャンプ命令」等)が、格納される。
コントローラ220は、上記初期状態から運用開始すると、支援装置210から任意の強制設定の通知があるまでは、各書込み命令は、上記“強制代入処理”は一切実行しないで、アキュムレータの現在の格納データをメモリ222における書込み先アドレスに格納する処理を行うことになる。
そして、その後、任意のときに、何等かの異常が生じた為に、上記実施例1で説明したものと同様に、支援装置210側で例えば上記図3(a)の強制設定画面50上でユーザが該当変数に対して強制設定することで、支援装置210がコントローラ220に対して強制設定値送信データ60(強制設定対象のアドレス61と強制設定値62)を送信する。
この送信データ60を受信したコントローラ220は、「強制代入処理情報一覧」225を検索して強制設定対象アドレス(該当する書き込み先アドレス234)に対応する「強制代入処理へのジャンプ位置232」(該当位置)を取得して、機械語オブジェクト223における該当位置の機械語命令を、NOPから「強制代入処理へのジャンプ命令」(省略して“ジャンプ命令”と記す場合もあるものとする)に置き換える。
これより、コントローラ220では、その後、メモリ222における該当アドレス(強制設定対象のアドレス61)の値を、強制設定値62により上書きすることになる。
尚、上記送信データ60を受信したコントローラ220は、更に、強制ONアドレス一覧224を更新する。これは、基本的には実施例1と同様に図4の処理を実行するものであってよい。但し、本例では強制ONアドレス一覧224は、図8(b)に示すように、管理番号241、強制ONメモリアドレス242に加えて、強制設定値243がある。管理番号241、強制ONメモリアドレス242は、上記管理番号71、強制ONメモリアドレス72と同じであり、説明は省略する。強制設定値243には、上記受信した送信データ60の強制設定値62が格納される。
上述したように、実施例2では、機械語オブジェクト223において現在強制設定している部分だけ強制代入処理が実行され、それ以外はNOPとなるので、アプリケーションの実行への影響が最小限に抑えられる。
図9に、実施例2のシステム全体の概略処理フローを示す。
まず、任意のときに、支援装置210側で開発者等が任意の制御プログラムのソースコードを作成し、これをコンパイルさせると、支援装置210のコンパイラ(211,212)は、ソースコード213→中間コード214→機械語オブジェクト215に順次変換する。この機械語オブジェクト215には、上記の通り、各該当箇所にジャンプ命令が含まれている。更に、上記「強制代入処理情報一覧」217等を生成する(ステップS31)。
そして、支援装置210は、上記のように生成した機械語オブジェクト215、「強制代入処理情報一覧」217等を、コントローラ220にダウンロードする(ステップS32)。
コントローラ220は、上記ダウンロードされた「強制代入処理情報一覧」217と機械語オブジェクト215を、「強制代入処理情報一覧」225、機械語オブジェクト223として記憶する。そして、「強制代入処理情報一覧」225に基づいて、機械語オブジェクト223における各ジャンプ命令を全てNOPに置き換える(ステップS41)。更に、「強制代入処理情報一覧」225を更新してもよい。
ここで、機械語オブジェクト215には、例えば後述する図10の処理を実行するサブルーチン(強制代入処理)が含まれる。上記ジャンプ命令は、この強制代入処理にジャンプして実行する為の命令である。そして、ダウンロード直後の初期状態では上記のようにジャンプ命令は全てNOPに置き換えられている。よって、その後、運用状態に移行して機械語オブジェクト223を繰り返し実行すると、初期状態のままでは強制代入処理は実行されない(既存の通常処理だけが実行される)。既存の通常処理とは、ST命令などの書込み処理に関しては「アキュムレータの現在値をメモリの該当位置(書込み先アドレス)に転送・格納する処理」である(ステップS42)。
ここで、アキュムレータの現在値は、LD命令やADD命令等の実行に伴って随時更新される。上記のように何等かの異常が発生することで、アキュムレータに異常値が格納される場合があり、上記既存の通常処理ではこの異常値がそのままメモリ222に格納されることになり、以って後にメモリ格納データを使用する処理があった場合、異常動作する可能性があった。実施例2では、上記強制代入処理を実行することでこの問題を解消すると共に、その必要がない限りは上記NOPにより強制代入処理を実行しないようにできる。
そして、任意のときに、支援装置210側で開発者等が例えば上記図3(a)の強制設定画面50により任意の変数(メモリアドレス)に対する任意の強制設定値を入力すると、支援装置210はこの強制設定値等を例えば図3(b)の送信データ60でコントローラ220に通知する(ステップS33)。
この通知を受信したコントローラ220は、この通知内容を強制ONアドレス一覧224に登録すると共に(ステップS44)、この通知内容と「強制代入処理情報一覧」225に基づいて、機械語オブジェクト223における該当位置のNOPを、ジャンプ命令に置き換える(ステップS43)。この該当位置の求め方は、例えば、「強制代入処理情報一覧」225を検索して、その書き込み先アドレス234が通知されたアドレスと一致するレコードと求めて、この該当レコードの“強制代入処理へのジャンプ位置”232を、該当位置とする。
仮に図3(b)に示す内容の通知があった場合、強制ONアドレス一覧224には図8(b)に示す管理番号241=‘1’のレコードが登録される。更に、「強制代入処理情報一覧」225が図8(a)に示す内容であったとすると、その最初のレコードが上記該当レコードとなり、該当位置は‘10’となる。これより、例えば機械語オブジェクト223が図7の例である場合、その10行目のNOP(図7ではNOPに置き換える前の状態を示している)が、ジャンプ命令に置き換えられることになる。つまり、この処理によって図7に示す状態に戻ることになる。
その後は、機械語オブジェクト223を実行すると、上記該当位置(該当箇所)のみ、強制代入処理を実行することになる。上記具体例の場合、図7の10行目を実行するときのみ強制代入処理を実行することになる。該当位置以外にも書込み命令があったとしても、NOPであり、強制代入処理は実行されない。これより、該当位置では強制代入処理を実行したうえで「現在のアキュムレータの格納値をメモリの書込み先アドレスに転送・格納する処理」を実行する。該当位置以外では、強制代入処理を実行することなく「アキュムレータの現在値をメモリ222の書込み先アドレスに転送・格納する処理」を実行する(ステップS45)。
尚、図7には、機械語オブジェクト223の一部のみを示しており、図には無いが、NOPのままとなっている箇所も存在するものとする。尚、その後、不図示のNOPについても、上記該当位置と判定された場合にはジャンプ命令に戻されることになる。このようにして、機械語オブジェクト223において、現在、強制設定が必要な該当箇所のみ、ジャンプ命令によって強制代入処理が実行され、それ以外の書込み命令箇所はNOPとなるので、不要な処理の実行が避けられ、処理負荷を軽減できる。
図10に、上記強制代入処理の一例を示す。
図示に示す処理は、上記ジャンプ命令によって呼び出されて開始され、呼出しの際には書込み先アドレスが渡される。これより、強制ONアドレス一覧224を検索して、書込み先アドレスが登録されているか否かを確認し(ステップS51)、登録されているならば(ステップS52,YES)、強制ONアドレス一覧224における該当レコードの強制設定値243を、アキュムレータに格納して(ステップS53)リターンする。
これより、続いて、アキュムレータの格納データをメモリ222の書込み先アドレスに書き込む処理が行われると、強制設定値がメモリに格納されることになる。
尚、書込み先アドレスが強制ONアドレス一覧224に登録されていない場合には(ステップS52,NO)、そのまま本処理を終了してリターンする。
図11に、支援装置210におけるバックエンドコンパイラ212の処理の一例を示す。尚、この処理の前にフロントエンドコンパイラ211によってソースコード213が中間コード214に変換されている。
図11の処理例では、まず、変数“機械語命令展開位置”に初期値‘1’をセットする(ステップS61)。また、「強制代入処理情報一覧」217における現在の処理対象レコードの管理番号231を示す変数“管理番号”にも、初期値‘1’をセットする(ステップS62)。
そして、中間コード214のファイルから順次中間コード命令を1個ずつ読み出して(ステップS63)、読み出した1つの中間コード命令についてステップS65〜S72の処理を実行することを繰り返す。そして、ファイル内の全ての中間コード命令について処理実行したら(読み出す中間コード命令が無くなったら)(ステップS64,NO)、本処理を終了する。
中間コード命令を1つ読み出したら(ステップS64,YES)、読み出した中間コード命令に対応する変換規則を読み込み、該変換規則で得られる機械語命令群のなかで先頭の機械語命令を取得する(ステップS65)。尚、上述したように、従来より、中間コードを機械語に変換するのに、予め登録されている所定の変換規則を用いる。例えば、図2(c)のST命令に対応する変換規則による機械語命令群は、図7の最後の4行分であり、そのなかで先頭の機械語命令は「LDR R3・・・」であるのでこれがステップS65で取得されることになる。残りの3行も後述するステップS69で順次取得されることになる。
そして、上記ステップS65または後述するステップS69で取得された機械語命令が、“強制代入処理へのジャンプ命令”であるか否かを判定し(ステップS66)、ジャンプ命令である場合には(ステップS66,YES)、ステップS71、S72の処理を行ってステップS67へ移行し、そうでない場合には(ステップS66,NO)そのままステップS67へ移行する。
ステップS71の処理は、まず、「強制代入処理情報一覧」217における現在の処理対象レコード(変数“管理番号”によって示される)における“強制代入処理へのジャンプ位置”232に、現在の変数“機械語命令展開位置”の値を格納する。図7の例では、処理対象が10行目の機械語命令“LDR pc・・・”になって初めてステップS66がYESとなり、そのときまでに後述するステップS68が繰り返される為に現在の変数“機械語命令展開位置”の値は‘10’となっている。これより、図8(a)に示すように、管理番号231=‘1’のレコード(該当レコード)における“強制代入処理へのジャンプ位置”232には、‘10’が格納されることになる。
ステップS71の処理では、更に、現在の処理対象の機械語命令に対応する中間コード命令の書込み先アドレスを、上記該当レコードの書き込み先アドレス234に格納する。上記具体例では10行目の機械語命令“LDR pc・・・”に対応する中間コード命令は、図2(c)のST命令であるので、その書込み先アドレスである“M,WI,65552”が、図8(a)に示すように上記該当レコードの書き込み先アドレス234に格納されることになる。
以上のステップS71の処理を実行完了したら、変数“管理番号”の値を+1インクリメントして(ステップS72)、ステップS67へ移行する。
ステップS67では、現在の処理対象の機械語命令(ステップS65または後述するステップS69で取得された機械語命令)を、所定の出力先(所定の記憶領域など)へ出力する。これを繰り返すことで最終的には例えば図7に示す機械語命令群が所定の出力先に生成されることになり、以って中間コードを機械語命令群に変換する処理が完了することになる。
ステップS67に続いて、変数“機械語命令展開位置”の値を+1インクリメントして(ステップS68)、上記変換規則から次の機械語命令を取得する(ステップS69)。取得できたら(ステップS70,YES)ステップS66に戻るが、取得できなかったら(ステップS70,NO)ステップS63へ戻り、次の中間コード命令を読み込む。
このようにして、コンパイル処理によって、機械語オブジェクト215を生成すると共に「強制代入処理情報一覧」217を生成する。
尚、上述したコントローラ220の各種処理機能は、例えば、プログラム実行管理部221が実行・実現するが、この例に限らない。尚、コントローラ220は、不図示のCPU/MPU等の演算プロセッサと記憶装置(メモリなど)を有している。そして、記憶装置には予め各装置に応じた所定のアプリケーションプログラムが格納されている。演算プロセッサが、このアプリケーションプログラムを実行することで、上記コントローラ220の各種処理機能が実現される。
上述した本手法では、実施例1、実施例2とも、ユーザは、変数を指定するだけで簡単に変数の値を強制的に変更できるため、コントローラのプログラムデバッグだけでなく、プラントシステムの稼働中に一部の計器などが故障して正常な値が取り込めない時、オペレータが監視画面から計器の値を強制的に変更し、システム稼働を安定して継続できる効果が得られる。
強制的に値を変更する時、アプリケーションの実行時間が増加し、制御周期内にアプリケーションの実行が実施できないとシステムとしての動作が不安定になる。そこで、強制的に値を変更できる場合でもアプリケーションの実行時間の増加を抑えることが必要になる。実施例2では、更に、全ての書き込み命令では無く、強制的に値を変更するところだけ強制代入処理が実行されるため、アプリケーションの実行時間の増加を必要最小限に抑えて、強制的に値を変更することが可能になる。
図12は、本例のプログラマブルコントローラシステムの機能ブロック図である。
図示の例のプログラマブルコントローラシステムは、例えば、支援装置80とコントローラ90を有する。この例に限らず、更に、他装置100を有していてもよい。上記支援装置10または支援装置210が支援装置80の一例であり、上記コントローラ20またはコントローラ220がコントローラ90の一例であると見做しても構わない。但し、コントローラ90は、実施例1(支援装置10)に対応する場合、初期状態形成部94、強制設定制御部95は有しないと見做してよい。また、上記HCI装置30が他装置100の一例であると見做しても構わない。
支援装置80は、例えば、任意のプログラムのソースコードをコンパイルして機械語オブジェクトに変換するコンパイル部81を有する。
コントローラ90は、例えば、機械語オブジェクトを実行するプログラム実行部91、強制設定値が書き込まれたメモリアドレスが登録される強制設定アドレス記憶部92等を有する。
上記プログラム実行部91は、上記機械語オブジェクトにおける所定の命令を実行する際に、該所定の命令によるアクセス先アドレスが、上記強制設定アドレス記憶部92に登録されている場合には、該アクセス先アドレスへのアクセスを実行しない、あるいは該アクセス先アドレスへ前記強制設定値を書き込む。
上記構成により、例えば、強制的に値を変更した(強制設定値を設定した)メモリアドレスに関しては、その後、更新(計器の値を上書きする等)を禁止することができ、強制設定値が異常値などに書き換えられる事態を防止し、以ってシステム稼働を安定して継続できる。
また、上記構成において例えば、上記コンパイル部81は、上記任意のプログラムのソースコードを機械語オブジェクトに変換する際に、書込み命令に関しては所定の機械語を追加生成する。所定の機械語は、例えば上記図5の処理を実現するものである。
上記プログラム実行部91は、上記機械語オブジェクトを実行する際、該機械語オブジェクトにおける上記書込み命令を実行する際に上記所定の機械語を実行することで、該書込み命令のアクセス先アドレスが、上記強制設定アドレス記憶部92に登録されている場合には、該書込み命令による該アクセス先アドレスへの書き込みを実行しない。
また、例えば、支援装置80または他装置100は、任意に指定させたメモリアドレスと強制設定値を、コントローラ90に通知する設定部(82.101)を有する。
この場合、コントローラ90は、例えば、通知されたメモリアドレスを強制設定アドレス記憶部92に登録すると共に、通知された強制設定値を該通知されたメモリアドレスの記憶領域に書き込む強制設定管理部93を更に有する。
また、例えば、支援装置80または他装置100は、上記コンパイルの際に上記ソースコードの各変数に割り当てられたメモリアドレスが、記憶される変数−アドレス記憶部(83、102)を更に有していてもよい。
この場合、上記設定部(82,101)は、例えば、上記ソースコード中の各変数のうちの任意の変数を指定させると共に任意の強制設定値を指定させ、該任意に指定された変数に対応するメモリアドレスを上記変数−アドレス記憶部(83、102)から取得して、これらを上記“任意に指定させたメモリアドレスと強制設定値”としてコントローラ90に通知する。
また、例えば、上記強制設定管理部93は、上記通知されたメモリアドレスが既に上記強制設定アドレス記憶部92に登録されている場合には、当該通知されたメモリアドレスを強制設定アドレス記憶部92に登録することなく、上記通知された強制設定値を該通知されたメモリアドレスの記憶領域に上書き格納する。
あるいは、上記支援装置80のコンパイル部81は、上記任意のプログラムのソースコードを機械語オブジェクトに変換する際に、書込み命令に対応する機械語命令群に強制代入処理へのジャンプ命令を付加し、更に強制代入処理情報一覧に該ジャンプ命令の位置と該書込み命令の書込み先アドレスを登録するものであってもよい(実施例2に対応する)。
実施例2に対応する場合、コントローラ90は、初期状態形成部94、強制設定制御部95を有するものであってもよい。
初期状態形成部94は、上記支援装置80が生成した機械語オブジェクトと強制代入処理情報一覧を取得すると、強制代入処理情報一覧に基づいて、機械語オブジェクトにおける全ての強制代入処理へのジャンプ命令を“何もしない命令”(例えばNOP等)に置き換えることで、その後、支援装置80から所定の通知があるまでは強制代入処理を実行させない。
強制設定制御部95は、上記所定の通知と強制代入処理情報一覧に基づいて、機械語オブジェクトにおける該当位置の上記“何もしない命令”を上記強制代入処理へのジャンプ命令に戻す。
上記強制代入処理は、例えば、上記強制設定値をアキュムレータに格納する処理であり、上記所定の命令は、例えば、該アキュムレータの格納データをメモリのアクセス先アドレスに転送・記憶する処理である。
尚、上記コンパイル部81またはその機能の一部を、コントローラ90が有していてもよい。この場合、支援装置80はコンパイル部81またはその機能の他の一部を有していなくても構わない。
尚、支援装置80、コントローラ90、他装置100は、何れも、ハードウェア的には、少なくとも不図示のCPU/MPU等の演算プロセッサと記憶装置(メモリなど)を有している。そして、記憶装置には予め各装置に応じた所定のアプリケーションプログラムが格納されている。演算プロセッサが、このアプリケーションプログラムを実行することで、上記各装置の各種処理機能が実現される。すなわち、支援装置80の場合、上記コンパイル部81、設定部82、変数−アドレス記憶部83等の各種処理機能が実現される。コントローラ90の場合、上記プログラム実行部91、強制設定アドレス記憶部92、強制設定管理部93等の各種処理機能が実現される。他装置100の場合、上記設定部101、変数−アドレス記憶部102等の各種処理機能が実現される。
以上説明した本例のプログラマブルコントローラ、その支援装置10、コントローラ20、HCI装置30によれば、システム稼働中にコントローラの任意のメモリ領域の値を強制的に書き換えると共に、この強制設定されたメモリ領域へのその後の書込みを禁止でき、以ってシステム稼働を安定して継続できる。また、ユーザが変数と強制設定する値を指定するだけで簡単に変数の値を強制的に書き換えることを可能にし(これは特にHCI装置30等のオペレータ(プログラムに詳しくない人)であっても可能にし)、デバッグ作業の効率向上、プラントシステムの安定稼働をサポートすることができる。
本手法によれば、プラントシステムの稼働中に例えば一部の計器などが故障して正常な値が取り込めない時、オペレータが監視画面から計器の値(対応するメモリの格納値)を強制的に変更し、システム稼働を安定して継続できる効果が得られる。これは、特に、強制的に値を変更した(強制設定値を設定した)メモリアドレスに関しては、その後、システム稼働による通常の処理による更新(計器の値を上書きする等)を禁止することで、強制設定値が異常値などに書き換えられる事態を防止し、以ってシステム稼働を安定して継続できる。
更に、本手法によれば、ユーザは、変数(変数名など)を指定するだけで簡単に変数の値を強制的に変更できるため、プラントシステムの稼働中に一部の計器などが故障して正常な値が取り込めない時、オペレータがHCI装置等の監視画面から計器の値を容易に変更することができる。
上述したように、上記特許文献1では、エンジニアリングツールを使用しており、オペレータは、コントローラ内で動作しているプログラムには詳しくないため、エンジニアリングツールを扱って値を変更することは困難である。これに対して、本手法では、上記の通り、オペレータは、変数(変数名など)を指定するだけで簡単に変数の値を強制的に変更できる。
また、上述したように、上記特許文献1では、接続点毎に一時変数が必要であり、メモリを余分に消費しているが、本例のプログラムではこの様な一時変数は必要ない。また、上述したように、上記特許文献1では、対象の変数への書き込みする複数の接続点に対して値を設定する必要があるが、本例ではこの様な必要はなく、対象の変数(変数名など)を指定して値を設定すれば済む。
以下、実施例3について説明する。
実施例3は、基本的には、上述した実施例1や実施例2を二重化コントローラシステムに適用した例であるが、この例に限らない。上述した実施例1、2では得られない更なる効果が得られる構成・機能も含まれていてもよい。以下に説明する実施例3の図面・説明は、この様な更なる効果が得られる構成・機能も示しているが、これは必須の構成・機能ではない。
よく知られているように、既存の二重化コントローラシステムは、稼動系コントローラと待機系コントローラを有し、待機系コントローラは、制御プログラム実行はしていないが、制御に係わるデータは稼動系コントローラと同じデータを保持するようになっている(等値化処理などによる)。この等値化処理自体は、既存の処理であってよく、特に説明しないものとする。
上述した実施例1、2を単純に既存の二重化コントローラに適用した場合、上記実施例1、2で説明した強制設定値と対象アドレス等に関して、ユーザは支援装置等から、稼働系コントローラ、待機系コントローラに対して、別々に設定をする必要があり、設定値の一義性に課題があった。
(1)設定を変更した場合:
ユーザは、稼働/待機コントローラそれぞれに対して設定する必要あり、ユーザが間違えた情報を設定しても気が付けない。
(2)待機系を後から立ち上げた場合
ユーザは、運用中に稼働系コントローラに対して任意の強制設定値、対象アドレスを設定すると共にこれら強制設定値、対象アドレスを覚えておき、後から立ち上がった待機系コントローラに対して、覚えていた値、アドレスを全て設定する必要があり、ユーザとして使いにくいシステムとなっていた。
そこで、実施例3では、この様な課題を解決しつつ上述した実施例1または実施例2を適用した二重化コントローラシステムを提案する。
実施例3では、支援装置から稼動系コントローラに対して、任意のプログラムのダウンロードや任意の設定を行う。その一方で支援装置から待機系コントローラに対しては、少なくとも設定に関しては何も行わない。設定値は、稼動系コントローラから待機系コントローラに転送し、両コントローラが同一の設定内容となるようにする。これより、ユーザが稼動系と待機系とで異なる設定を行う可能性はなくなり、ユーザの手間を軽減できる効果も得られる。
実施例3では、支援装置から稼働系コントローラへ通知された強制設定値から、強制ONアドレス一覧を稼働側コントローラで更新する。但し、実施例3における強制ONアドレス一覧は、後述するシーケンス番号付きとなっており、強制ONアドレス一覧の更新の際にシーケンス番号も更新する。これについては後述する。稼動系コントローラは、この強制ONアドレス一覧(シーケンス番号付)を、待機側コントローラへ転送する。強制ONアドレス一覧は、例えば更新がある毎にまたは定期的に、稼働系コントローラから待機コントローラへ送信される。
待機系コントローラでも、強制ONアドレス一覧を保持しており、バックアップ版と呼ぶものとする。
待機系コントローラでは、稼動/待機切替えの際に問題なく処理を引き継げるようにする為に、保持するデータやプログラムを稼動系コントローラと同一の状態としている必要がある。既存の等値化処理によって例えばメモリ532の記憶内容はメモリ522と同一となるようにしている。尚、メモリ532(522)には、制御に係わるデータ(例えば制御対象機器に関する各種状態データ(温度、回転数等)や各種設定値等が格納される。これに加えて、更に、強制ONアドレス一覧や機械語オブジェクトの内容も、稼動系コントローラと同一となるようにする必要がある。
待機系コントローラ側では、上記転送された強制ONアドレス一覧のシーケンス番号が上記バックアップ版のシーケンス番号と異なる場合、変更があったものと見做し、対応する処理を実行する。これは、例えば、自コントローラが保持する機械語オブジェクトの内容を変更する処理であり、続いて更に上記転送された強制ONアドレス一覧を新たなバックアップ版として記憶する処理も行う。
機械語オブジェクトの内容を変更する処理は、例えば、まず、上記転送された強制ONアドレス一覧とバックアップ版とを相互に比較して、相違点(追加された事項または削除された事項)を抽出する。転送された強制ONアドレス一覧には存在するがバックアップ版には存在しない事項が、追加された事項となる。その逆に、バックアップ版には存在するが転送された強制ONアドレス一覧には存在しない事項が、削除された事項となる。そして、この相違点などに基づいて、機械語オブジェクトの強制設定処理に係わる該当箇所を変更するが、これについては後に詳しく説明する。
図13は、本例の二重化コントローラシステムのシステム構成図である。
図示のシステムは、既存の一般的なコントローラの二重化システムと同様、2つのコントローラを備え、一方を稼動系、他方を待機系とする。図示の例では、稼動系コントローラ520と待機系コントローラ530を備える。稼動系コントローラ520に何等かの異常が発生した場合、待機系コントローラ530が稼動系に切り替わる。
待機系コントローラ530は、制御動作は行っていないが、既存の等値化処理等により稼動系コントローラ520と同じ制御データを保持している。これより、上記稼動系への切替後の制御動作が問題なく行える(スムーズに制御を引き継げる)。これに加えて本手法では更に、待機系コントローラ530は、上記「強制ONアドレス一覧」についても稼動系コントローラ520と同じデータを保持するようにしている。更に、この更新処理の処理負荷が軽減できるようにしている。これについて、以下、図14も参照して説明する。また、待機系コントローラ530は、自己が保持する機械語オブジェクト533が、稼動系コントローラ520が保持する機械語オブジェクト523と同一内容となるようにしている。
図13の例では、支援装置510は、コンパイラによってソースコード513を機械語オブジェクト515に変換する。つまり、ユーザによって任意に作成された制御プログラム等のソースコード513を、フロントエンドコンパイラ511が中間コード514に変換する。バックエンドコンパイラ512が、この中間コード514を機械語オブジェクト515に変換する。このコンパイル処理に伴って変数−アドレス対応表516を生成すると共に強制代入一覧情報517を生成する。変数−アドレス対応表516は、図1の変数−アドレス対応表16と同じであってよく、ここでは特に説明しない。また、強制代入一覧情報517も、図6の強制代入処理情報一覧217と同じであっても構わない。
支援装置510は、上記のように生成した機械語オブジェクト515と強制代入一覧情報517を稼動系コントローラ520へダウンロードして、図示の機械語オブジェクト523、強制代入一覧情報525として記憶させる。稼動系コントローラ520は、プログラム実行管理部521、メモリ522等を有し、強制ONアドレス一覧524を記憶・管理し、また上記のように機械語オブジェクト523、強制代入一覧情報525を記憶・保持する。強制ONアドレス一覧524は、基本的には上記強制ONアドレス一覧24と同様に強制設定対象のアドレスを記憶するものであるが、本例では更に後述するシーケンスNo.や強制設定値も記憶する。
尚、後述する稼動系コントローラ520の各種処理動作は、例えばプログラム実行管理部521が実行するが、この例に限らない。
待機系コントローラ530は、プログラム実行管理部531、メモリ532等を有し、機械語オブジェクト533、強制ONアドレス一覧バックアップ534、強制代入一覧情報535を記憶する。
ここで、図13において、支援装置510は、変形例(強制代入一覧情報517を生成する形態)を示しているが、図1の支援装置10と同一の構成・機能であってもよい。同様に、稼動系コントローラ520や待機系コントローラ530は、変形例(強制代入一覧情報525を利用する形態)を示しているが、図1のコントローラ20と同一の構成・機能であってもよい。つまり、実施例3の構成は、図13に示す構成に限らず、例えば“図1の支援装置10とコントローラ20+コントローラ20”等の構成であっても構わない(この例では、稼動系、待機系の両方がコントローラ20と同じ構成を有する)。
何れの場合であっても、待機系コントローラが、稼動系コントローラと同一のデータ/プログラムを保持するように所定の処理を実行する点では同じである。例えば、稼動系コントローラ520が「強制ONアドレス一覧」524を保持し、その上記バックアップ版である図示の「強制ONアドレス一覧バックアップ」534を待機系コントローラ530が保持するが、「強制ONアドレス一覧バックアップ」534の内容が「強制ONアドレス一覧」524と同一となるようにしている。これは、ユーザの手間が掛かることなく、且つ、間違いが生じることなく、実現させることができる。
図14(a)に示すように、実施例3の「強制ONアドレス一覧」524は、シーケンスNo.541、強制設定個数542、アドレス543、強制設定値544を有する。尚、バックアップ版である「強制ONアドレス一覧バックアップ」534も、同一のデータ構成を有するが、ここでは稼動系における「強制ONアドレス一覧」524について説明する。
アドレス543は、実施例1(図3(c))の強制ONメモリアドレス72と同じと見做して構わない。本例では更に強制設定値も格納する。つまり、稼動系コントローラ520は、図3(b)の強制設定値送信データ60を受信すると、そのアドレス61をアドレス543に格納すると共にこの送信データ60の強制設定値62を強制設定値544に格納する。尚、図14(a)には示していないが、アドレス543及び強制設定値544のペア毎に任意の管理番号(上記管理番号71に相当)が割り当てられていても構わない。
シーケンスNo.541は、「強制ONアドレス一覧」524の更新時毎に稼動系コントローラ520によって+1インクリメントされる。更新時とは、新たなアドレス543と強制設定値544のペアが追加格納されるとき、あるいは逆に登録されているアドレス543と強制設定値544の各ペアのうち任意のペアが削除されるときである。何れにしても、「強制ONアドレス一覧」524の格納内容に変化があると、シーケンスNo.541も変化する。
強制設定個数542は、現在登録されている上記ペアの個数であるが、このデータは無くても構わない。
上記のように、稼動系コントローラ520は、自己が保持する「強制ONアドレス一覧」524を、定期的に又は更新時に、待機系コントローラ530へ送信する。待機系コントローラ530は、「強制ONアドレス一覧」524のバックアップ版である「強制ONアドレス一覧バックアップ」534を保持・管理している。任意のとき、「強制ONアドレス一覧」524と「強制ONアドレス一覧バックアップ」534とが同一の内容であったとしても、「強制ONアドレス一覧」524が更新されると、両者は異なる状態となるので、再び一致する状態に戻す必要がある。「強制ONアドレス一覧」524が更新された場合、そのシーケンスNo.541が更新されるので、「強制ONアドレス一覧バックアップ」534のシーケンスNo.541とは一致しない状態となる。
これより、待機系コントローラ530は、稼動系コントローラ520から渡された「強制ONアドレス一覧」524のシーケンスNo.541が、「強制ONアドレス一覧バックアップ」534のシーケンスNo.541と一致する場合には、何も処理しない。
不一致の場合のみ、受信した「強制ONアドレス一覧」524をバックアップ領域にコピーする等して、「強制ONアドレス一覧バックアップ」534を更新する。ここで、本例では、不一致の場合には更に、機械語オブジェクト533が機械語オブジェクト523と同一内容となるように機械語オブジェクト533を更新する。その為に、強制代入一覧情報535を用いる。
ここで、実施例3の機械語オブジェクト515(523、533)は、実施例2の機械語オブジェクト215(223)と同様であり、そのときに該当する書込み命令に関してのみ強制設定値をメモリの書込み先アドレスに格納させる処理を実現するものである。機械語オブジェクト515(523、533)の具体例を図15に示し後に説明するものとする。上記機械語オブジェクト523(533)の更新も、この例に応じたものとなる。詳しくは後述する。
以下、図14(b)、図15を参照して詳しく説明する。
まず、支援装置510においてコンパイル処理の際に、強制代入一覧情報517を生成する。このコンパイル処理によって機械語オブジェクト515が生成されるが、この機械語オブジェクト515には所定のサブルーチン(強制代入処理と呼ぶ)へのジャンプ命令が含まれている。図15に、本例の機械語オブジェクト515等の具体例を示す。これは、図2(c)の中間コードを、機械語命令群に変換した例である。
尚、図15では、見易さのためアセンブラで示しているが実際はアセンブラに対応したバイナリデータである。また、尚、図15に示す機械語オブジェクト515の具体例は、図7に示した機械語オブジェクト215等の具体例と同一であり、以下、間単に説明する。
また、強制代入一覧525(535)は、実施例2の強制代入処理情報一覧217(225)と同じであってよく、これより、図14(b)に示す強制代入一覧525(535)の具体例は、図8(a)に示す強制代入処理情報一覧217(225)の具体例と、同一のデータ構成を示している。
図15の例において、下から2行目の“LDR pc,[wk1,#64]”が、上記「強制代入処理(サブルーチン)へジャンプする命令」の一例である。本例のコンパイラ(511,512)は、ST命令等の書込み命令を機械語命令群に変換する際に、予め決められて登録されている「強制代入処理へジャンプする命令」(一例が“LDR pc,[wk1,#64]”)を挿入している。
図15において、上記“LDR pc,[wk1,#64]”を含む4つの機械語命令群(下から4番目〜最下行)は、図2(b)におけるST命令を機械語命令群に変換したものである。従来では一例として、ST命令を、“LDR pc,[wk1,#64]”以外の3つの機械語命令群に変換するものとなり、アキュムレータの格納データを当該ST命令の書込み先アドレス(本例では65552)に格納する処理を実行するものとなる。
また、支援装置510は、上記機械語オブジェクト515への変換処理に伴って強制代入一覧情報517を生成する。これは、上記の様な「強制代入処理(サブルーチン)へジャンプする命令」(単に“ジャンプ命令”と記す場合もあるものとする)に係わる情報が、コンパイル処理に伴って強制代入一覧情報517に登録されるものである。図14(b)に、強制代入一覧情報517(525,535)の具体例を示す。
強制代入一覧情報517(525,535)は、管理番号551、強制代入処理へのジャンプ位置552、機械語命令553、書き込み先アドレス554等のデータ項目から成る。管理番号551は、単に、各レコードに任意に割り当てられるシリアル番号等である。強制代入処理へのジャンプ位置552には、当該「強制代入処理へジャンプする命令」の機械語オブジェクトにおける位置(行)が格納され、図15の例では10行目であるので図14(b)に示すように‘10’が格納される。書き込み先アドレス554には、当該「強制代入処理へジャンプする命令」が係わる中間コード(本例ではST命令)の書込み先アドレス(本例では65552)が格納される。
機械語命令553には、例えば、機械語オブジェクトにおいて“強制代入処理へのジャンプ位置”552が示す位置に記述されていた機械語命令(例えば「強制代入処理へのジャンプ命令」等)が、格納される。
支援装置510は、上記のように生成した機械語オブジェクト515と強制代入一覧情報517を、稼動系コントローラ520にダウンロードする。稼動系コントローラ520は、上記ダウンロードされた強制代入一覧情報517を、そのまま、図13の強制代入一覧情報525として記憶する。一方、ダウンロードされた機械語オブジェクト515は、上記「強制代入処理へジャンプする命令」(ジャンプ命令)は全てNOP(No Operation)に置き換えて、図13の機械語オブジェクト523として記憶する。尚、よく知られているように、NOPは、所謂“何もしない命令”の一例である。
そして、稼動系コントローラ520は、上記強制代入一覧情報525と機械語オブジェクト523を待機系コントローラ530に転送して、これらを図示の強制代入一覧情報535と機械語オブジェクト533として記憶させる。
上記のように、稼動系コントローラ520と待機系コントローラ530がそれぞれ初期状態を構築した後、運用開始される。尚、初期状態では、「強制ONアドレス一覧」524、「強制ONアドレス一覧バックアップ」534には、強制設定対象のアドレスや強制設定値等のデータ等は1つも登録されていない(シーケンスNO.541は、例えば所定の初期値(0など)が格納された状態となっている)。
以上の処理により、初期状態では、機械語オブジェクト523と機械語オブジェクト533は同一の内容(「強制代入処理へジャンプする命令」が全てNOP(No Operation)に置き換わっている)となっている。例えば図15の機械語オブジェクトの場合、上記“LDR pc,[wk1,#64]”が上記NOPに置き換えられていることになる。
稼動系コントローラ520は、上記初期状態から運用開始すると、支援装置510から任意の強制設定の通知(図3(b)等)があるまでは、上記“強制代入処理”は一切実行されないことになる(全てNOPなので)。つまり、各書込み命令は、アキュムレータの現在の格納データをメモリ522における書込み先アドレスに格納する処理を行うことになる。尚、特に説明しないが、既存の等値化処理によって、メモリ522とメモリ532の格納内容が同一となるように制御されている。また、尚、逐一説明しないが、アキュムレータの格納データは、読み込み命令や演算命令(LDやADD等)の実行に伴って随時変わっていく。
そして、その後、任意のときに、何等かの異常が生じた為に、上記実施例1で説明したものと同様に、支援装置510側で例えば上記図3(a)の強制設定画面50上でユーザが該当変数に対して強制設定することで、支援装置510が稼動系コントローラ520に対して強制設定値送信データ60(強制設定対象のアドレス61と強制設定値62)を送信する。
これより、稼動系コントローラ520では、機械語オブジェクト523における該当箇所のNOPを、元に戻す処理を行う(「強制代入処理へジャンプする命令」に戻される)。例えば上記送信データ60を受信した稼動系コントローラ520は、「強制代入一覧情報」525を検索して、強制設定対象のアドレス61と同一の書き込み先アドレス554に対応する「強制代入処理へのジャンプ位置552」(該当位置)を取得して、機械語オブジェクト523における該当位置の機械語命令を、NOPから「強制代入処理へジャンプする命令」に置き換える。
これより、稼動系コントローラ520では、その後、メモリ522における該当アドレス(強制設定対象のアドレス61)の値を、強制設定値544により上書きすることになる。
尚、上記送信データ60を受信した稼動系コントローラ520は、更に、強制ONアドレス一覧524を更新する。これは、基本的には実施例1と同様に図4の処理を実行するものであってよい。但し、本例では強制ONアドレス一覧524は、図14(a)に示すように、アドレス543だけでなく強制設定値544も格納する。アドレス543には上記送信データ60のアドレス61が格納され、強制設定値544には、上記送信データ60の強制設定値62が格納される。
上述したように、実施例3では、機械語オブジェクトにおいて現在の強制設定対象箇所だけ強制代入処理が実行され、それ以外はNOPとなるので、アプリケーションの実行への影響が最小限に抑えられる。
あるいは、送信データ60が解除通知である場合には、上記と逆に、元に戻された「強制代入処理へジャンプする命令」(ジャンプ命令)を再びNOPに置き換える処理を行うようにしてもよい。この様にして、稼動系コントローラ520は、必要に応じて機械語オブジェクト515の更新/変更を行う場合がある。上記該当位置(該当箇所)とは、現在、強制ONアドレス一覧524に登録されているアドレスに関係する命令の位置である。
上記機械語オブジェクト515の更新/変更処理については後に詳しく説明するが、上記のことから、強制ONアドレス一覧524が更新/変更されると、機械語オブジェクト523も更新/変更する必要があることになる。これは、待機系コントローラ530においても基本的には同様である。
この為、待機系コントローラ530では、上記のように、シーケンスNo.541に基づいて「強制ONアドレス一覧」524の更新有りを判定し、以って「強制ONアドレス一覧バックアップ」534を更新した場合、更に、更新後の「強制ONアドレス一覧バックアップ」534に基づいて、機械語オブジェクト533を更新/変更する。
この様にして、稼動系コントローラ520と待機系コントローラ530とは、(一時的に異なる状態となっても)同一のデータ保持状態となるように制御されている。これより、稼動・待機切替が、スムーズに行えることになる。
尚、強制代入一覧情報525と強制代入一覧情報535は、上記初期状態で同一の内容となっており、また、その後の運用中に更新/変更されることはなく、初期状態のままである。
上記稼動系コントローラ520で実行される上記強制代入処理の一例は、実施例2における上記強制代入処理の一例(図10に示すステップS51,S52,S53)と同じであってよい。
図16に、上記稼動系コントローラ520で実行される上記強制代入処理の一例を示すが、上記のことから、以下、間単に説明するのみとする。
尚、上記ジャンプ命令は、書込み処理に係わる命令群に含まれている。書込み処理は、基本的には、任意の書込み先アドレスに現在のアキュムレータを転送・格納する処理であるが、ジャンプ命令が実行される場合にはアキュムレータには強制設定値が格納されていることになる。
図16に示す強制代入処理は、上記ジャンプ命令によって呼び出されて開始され、呼出しの際には上記書込み先アドレスが渡される。これより、強制ONアドレス一覧524を検索して、書込み先アドレスが登録されているか否かを確認し(ステップS1)、登録されているならば(ステップS2,YES)、強制ONアドレス一覧524における該当レコードの強制設定値544を、アキュムレータに格納して(ステップS3)リターンする。
これより、続いて、アキュムレータの現在値をメモリの書込み先アドレスに書き込む処理が行われると、強制設定値がメモリ522の書込み先アドレスに格納されることになる。
尚、書込み先アドレスが強制ONアドレス一覧524に登録されていない場合には(ステップS2,NO)、そのまま本処理を終了してリターンする。
上述した実施例3のシステム全体の動作について、再び図13を参照しながら、以下、まとめて説明するものとする。
本説明では、上述した初期処理は完了しており、その後の運用中の動作について説明するものとする。
(a)運用中、任意のときに、支援装置510側で、ユーザの判断・操作により、例えば上記強制設定画面50上での上述した任意のデータ入力が行われることで、上記図3(b)の強制設定値送信データ60が稼動系コントローラ520に通知される。また、本例では、更に、不図示の強制設定解除画面上で、現在強制設定中の任意のアドレス(変数)に対して当該強制設定を解除する為のユーザ入力もできるものとし、これより不図示の強制設定解除データが稼動系コントローラ520に通知されるものとする。尚、強制設定解除データのデータ構成は、図3(b)と同様であってよいが、“解除”であることを示すデータも付加されるものとする。
(b)稼動系コントローラ520は、上記強制設定値送信データ60又は上記強制設定解除データ(不図示)を受信すると、まず、強制ONアドレス一覧524を更新する(受信データの登録または登録データの削除。登録処理は実施例1と同様であり説明は省略する。削除処理も、単に、登録アドレスの中で通知されたアドレスと同一のものを削除すればよい)。更に、そのシーケンスNo.541を更新(+1インクリメント)する。
続いて、更に、機械語オブジェクト523を更新する。これは、強制設定値送信データ60を受信した場合には、機械語オブジェクト523の該当箇所をNOPからジャンプ命令に変更する。該当箇所は、通知内容(強制設定値送信データ60)と強制代入一覧情報525から求める。すなわち、強制代入一覧情報525において、その書き込み先アドレス554が通知されたアドレスと一致するレコードの“強制代入処理へのジャンプ位置”532が、上記該当個所となる。図14(b)に示す例に対して図3(b)の通知があった場合には、該当位置は‘10’(10行目)となる。これは、例えば図15の例における下から2行目の位置であり、初期状態では、当該下から2行目にあるジャンプ命令である図示の“LDR pc,・・・”は、上記NOPに置き換えられおり、これを元々のジャンプ命令“LDR pc,・・・”に戻す処理となる。
また、上記強制設定解除データ(不図示)を受信した場合も、上記送信データ60の場合と同様にして上記該当箇所を求めるが、続いて、機械語オブジェクト523における該当箇所のジャンプ命令を上記NOPに置き換える。
(c)稼働系コントローラ520は、上記のように定期的に又は更新時に、強制ONアドレス一覧524を待機系コントローラ530へ通知する。上記(a)、(b)の動作によって強制ONアドレス一覧524の更新があった場合には、当該更新後の強制ONアドレス一覧524(よってシーケンスNo.541も更新されている)を、待機系コントローラ530へ通知することになる。
(d)待機系コントローラ530は、強制ONアドレス一覧524を受信する毎に、まず、シーケンス番号の変化の有無を確認して、変化無しの場合には何も行わない。シーケンス番号の変化の有無は、受信した強制ONアドレス一覧524のシーケンスNo.541が、強制ONアドレス一覧バックアップ534のシーケンスNo.541と一致する場合には変化無し、不一致の場合には変化有りと判定する。
シーケンス番号の変化有りの場合、受信した強制ONアドレス一覧524には更新があったものと見做して、機械語オブジェクト533とバックアップ版を更新する処理を行う。
機械語オブジェクト533の更新は、まず、受信した強制ONアドレス一覧524と、強制ONアドレス一覧バックアップ534とを相互に比較して相違点(追加されたアドレス543または削除されたアドレス543)を検出する。これによって、強制設定追加またはその解除を認識でき、且つ、対象となるアドレスが認識できるので、その後は、上記稼動系コントローラ520と同様にして機械語オブジェクト533の更新を行う。
最後に、受信した強制ONアドレス一覧524をバックアップ領域へコピーする。つまり、バックアップ版の更新は、単に、受信した強制ONアドレス一覧524を、新たな強制ONアドレス一覧バックアップ534として記憶すればよい。
以上、システム全体の動作の流れについて説明した。
以下、図17〜図20の各フローチャート図を参照して、システムを構成する各装置の処理について説明する。
図17は、支援装置510から強制設定通知されたときの稼動系コントローラ520の処理フローチャート図である。
図18は、支援装置510から強制設定解除通知されたときの稼動系コントローラ520の処理フローチャート図である。
まず、図17について説明する。
稼動系コントローラ520は、上記強制設定の通知(送信データ60)を受信すると、まず、所定のパラメータチェックを行うが(ステップS81)、これについて特に説明しない。
ステップS81のパラメータチェック結果が正常の場合、機械語オブジェクト置換処理を行う(ステップS82)。これは上述した機械語オブジェクトにおける該当箇所(該当位置)を求めて、該当箇所のNOPを元々のジャンプ命令に戻す処理であり、詳細フローを図19に示し、後に説明する。
上記ステップS82の処理が成功すると(ステップS83,YES)、アプリケーション更新完了待ち状態となり(ステップS84)、更新完了すると(ステップS85,YES)、強制ONアドレス一覧524を更新する。すなわち、強制ONアドレス一覧524に新たなアドレス543と強制設定値544のペアとして、上記送信データ60のアドレス61と強制設定値62を登録する(ステップS86,S87)。その際、更に、シーケンスNo.541を+1インクリメントする。更に、強制設定個数542を+1インクリメントしてもよい。尚、強制設定個数542は、現在登録されている強制設定データ(アドレス543と強制設定値544のペア)の数を示すものであり、初期状態では‘0’となっている。
そして、待機系コントローラ530へ、上記更新後の強制ONアドレス一覧524を通知する(ステップS88)。最後に、支援装置510への応答データを作成・送信して(ステップS89)、本処理を終了する。
次に、以下、図18について説明する。
稼動系コントローラ520は、支援装置510からの上記強制設定解除データ(不図示)を受信すると、まず、上記ステップS81と同様に所定のパラメータチェックを行い(ステップS91)正常であればステップS92へ移行する。
ステップS92では、強制ONアドレス一覧524の現在の登録データ数を確認し(例えば、強制設定個数542を参照する)、登録数が0件であれば(ステップS92,YES)何もせずにそのまま支援装置510への応答データの生成・送信を行って(ステップS100)本処理を終了する。
登録数が1件以上あれば(ステップS92,NO)、強制ONアドレス一覧524を更新する。つまり、強制ONアドレス一覧524から該当データ(強制設定解除データのアドレスと同一のアドレス543と、これとペアである強制設定値544)を削除する(ステップS93)。この処理が正常完了したら(ステップS94,YES)、続いて、上記更新後の強制ONアドレス一覧524を、待機系コントローラ530へ通知する(ステップS95)。
そして、機械語オブジェクト更新(置換)処理を行う(ステップS96)。この処理は例えば図19の処理を実行するものであり、後に説明する。そして、この更新処理が成功したら(ステップS97,YES)、アプリケーション更新完了待ち状態となり(ステップS98)、完了したら(ステップS99,YES)、支援装置510への応答データを作成・送信して(ステップS100)、本処理を終了する。
尚、上記ステップS94,S97,S99の判定がNOの場合には、そのまま支援装置510への応答データの生成・送信を行って(ステップS100)本処理を終了する。
図19は、上記機械語オブジェクト更新(置換)処理の具体例である。
図19の処理は、稼動系コントローラ520の処理でも、待機系コントローラ530の処理でも、実行されるが、ここでは稼動系コントローラ520をメインにして説明する。
上記のように、稼動系コントローラ520は、支援装置510から強制設定またはその解除の通知があると、上記図17または図18の処理を行って、そのなかで図19の処理を行うことになる。
図示の例では、稼動系コントローラ520は、まず、強制代入一覧情報525から1レコードずつ読み出し(ステップS101)、読出し成功した場合には(ステップS102、YES)これが強制設定登録または削除の対象となるアドレス(支援装置510から通知されたアドレス)と一致するか否かを判定し(ステップS103)、不一致の場合にはステップS101に戻る。また、ステップS103がYESとなることなく強制代入一覧情報525の全レコードについて処理実行した場合には(ステップS102,NO)本処理を終了する。
読み出したアドレスが強制設定(登録)または解除の対象アドレスである場合には(ステップS103,YES)、強制設定(登録)の場合には(ステップS104,YES)機械語オブジェクト523における該当箇所(対象アドレスに対応する位置;強制代入処理へのジャンプ位置552)を、NOPからジャンプ命令に置き換える(ステップS105)。一方、解除の場合には(ステップS104,NO)機械語オブジェクト523における該当箇所を、ジャンプ命令からNOPに置き換える(ステップS106)。
全PG(プログラム)について処理完了したら(ステップS107,YES)、本処理を終了するが、まだ処理完了していないならば(ステップS107,NO)ステップS101に戻る。
図20は、待機系コントローラ530の処理フローチャート図である。
この処理は、上記のように稼動系コントローラ520から強制ONアドレス一覧524の通知があったときに実行される。
稼動系コントローラ520は、まず、通知された強制ONアドレス一覧524のシーケンスNo.541と、強制ONアドレス一覧バックアップ534のシーケンスNo.541とが一致するか否かをチェックし(ステップS111)、一致する場合には強制ONアドレス一覧524は更新なしと判定して(ステップS112,NO)、そのまま本処理を終了する。不一致の場合には強制ONアドレス一覧524は更新ありと見做して(ステップS112,YES)、ステップS113〜S118の処理を実行する。
すなわち、まず、支援インタフェース処理をロックする(変更中は、支援装置510からのアプリケーション変更を受け付けない様にしている)(ステップS113)。続いて、機械語オブジェクト更新(置換)処理を行う(ステップS114)。これは基本的には図19と同様の処理を行って機械語オブジェクト533の該当箇所を変更するものであるが、登録か解除かの判定と対象アドレスを認識する処理(既に一例を上述しているので、ここでは説明は省略する)も必要となる点で異なる。
上記機械語オブジェクト更新(置換)が成功したら(ステップS115,YES)、強制設定値書き込みを行い(ステップS116)、続いて、強制ONアドレス一覧524をバックアップ領域へコピーすることで、強制ONアドレス一覧バックアップ534を更新する(ステップS117)。
最後に、支援インタフェース排他制御を解除して(ステップS118)本処理を終了する。
上記機能を備えることにより、稼働系コントローラ520だけに強制設定を行っても、稼動系コントローラ520から待機系コントローラ530へ通知することにより、切り替わりが発生しても、強制設定値を引き継げる。
また、待機系強制設定更新確認&強制設定処理は、イニシャル時にもチェックし、登録されている全データについて稼働系の情報を引き継ぐことを可能としている。
上述したように、本手法の実施例1により、ユーザは、変数を指定するだけで簡単に変数の値を強制的に変更できるため、コントローラのプログラムデバッグだけでなく、プラントシステムの稼働中に一部の計器などが故障して正常な値が取り込めない時、オペレータが監視画面から計器の値を強制的に変更し、システム稼働を安定して継続できる効果がある。
実施例3では、実施例1の効果に加えて、更に下記の効果が得られる。
すなわち、二重化コントローラシステムにおいて、ユーザは支援装置から稼働系コントローラに対して強制設定または解除を指示するだけで、上述した稼動系コントローラと待機系コントローラの処理により、稼動系と待機系とで同様の変更・更新が行われて同じデータ・プログラムを保持する状態へと自動的に移行することになる。よって、ユーザの手間が掛かることなく、且つ、間違いが生じることなく、稼働/待機の切替えが発生した時でも、強制設定値を引き継げ、システム稼働を安定して継続できる効果がある
あるいは、実施例3では更に、実施例2と略同様の効果が得られるものであってもよい。
図21は、本例の二重化コントローラシステムの機能ブロック図である。
図示の例の二重化コントローラシステムは、例えば、支援装置80とコントローラ90を有する。この例に限らず、更に、他装置100を有していてもよい。上記支援装置10が支援装置80の一例であり、上記コントローラ20がコントローラ90の一例であり、上記HCI装置30が他装置100の一例であると見做しても構わない。
図21に示す支援装置80、コントローラ90、他装置100は、基本的に、図12に示す支援装置80、コントローラ90、他装置100と同じであっても構わないので、同一符号を付してあり、その説明は省略する。尚、これは、換言するならば、上記実施例1,2のプログラマブルコントローラシステムの機能を、そのまま二重化コントローラシステムに適用したものを、本例の二重化コントローラシステムの基本としてもよいものと言うこともできる。
尚、これより、図21は示していないが、図21のコントローラ90も、図12のコントローラ90と同様に、更に上述して初期状態形成部94や強制設定制御部95の処理機能も有するものであっても構わない。
但し、本例の二重化コントローラシステムは、上記基本的な機能だけでなく、更に下記の処理機能も有するものであってもよい。
すなわち、稼動系/待機系の二重化コントローラシステムにおいては、コントローラは、稼動系として動作するときはコントローラ90の処理機能に加えて図示の稼動系コントローラ90Aの処理機能も有する。一方、待機系として動作するときにはコントローラ90の処理機能に代えて図示の待機系コントローラ90Bの処理機能を有する。つまり、例えば待機系として動作する場合には、制御プログラム実行は行っていないので、プログラム実行部91の処理機能は有さないことになる。
なお、コントローラは、稼動系コントローラ90Aと待機系コントローラ90Bの両方の機能を備えているが、稼動系として動作しているときには稼動系コントローラ90Aの処理機能を実行し、待機系として動作しているときには待機系コントローラ90Bの処理機能を実行するものである。
稼動系コントローラ90Aは、まず、上記強制設定アドレス記憶部92を待機系コントローラ90Bに通知してバックアップ版として保持させる通知部601を有する。
ここで、一例として、二重化コントローラシステムにおいては、上記強制設定アドレス記憶部92は、更に、任意の番号(一例が上記シーケンス番号)も保持するものとする。
そして、稼動系コントローラ90Aは、強制設定アドレス記憶部92を更新する毎に上記番号を更新する第1更新部602を更に有する。これは、例えば番号を+1インクリメントするが、この例に限らない。
また、待機系コントローラ90Bは、上記通知部601により通知された強制設定アドレス記憶部92の上記番号が、自コントローラが保持する上記バックアップ版の番号と異なる場合に、該通知された強制設定アドレス記憶部92を新たなバックアップ版とする第2更新部611を有する。
上記待機系コントローラ90Bの上記第2更新部611は、上記通知部601により通知された強制設定アドレス記憶部92の上記番号が、自コントローラが保持する上記バックアップ版の番号と異なる場合には、更に、自己が保持する機械語オブジェクトを変更する。
例えば、上記自己が保持する機械語オブジェクトを変更する処理は、該機械語オブジェクトの強制代入処理へのジャンプ命令を何もしない命令に置き換える処理、あるいは、該何にしない命令を該強制代入処理へのジャンプ命令に置き換える処理である。
ここで、一例として、上記支援装置80の上記コンパイル部81は、上記任意のプログラムのソースコードを機械語オブジェクトに変換する際に、書込み命令に関しては強制代入処理へのジャンプ命令を付加し、更に強制代入処理情報一覧に該ジャンプ命令の位置と該書込み命令の書込み先アドレスを登録するものとする。勿論、これは一例であり、この例に限らない。
この例の場合には、上記稼動系コントローラ90Aは、支援装置80が生成した機械語オブジェクトと上記強制代入処理情報一覧を取得すると、強制代入処理情報一覧に基づいて、機械語オブジェクトにおける全ての“強制代入処理へのジャンプ命令”を“何もしない命令”に置き換えることで、その後、支援装置80から所定の通知があるまでは上記強制代入処理を実行させない初期状態生成部603を更に有する。
また、この例の場合には、稼動系コントローラ90Aの初期状態生成部603は、上記“何もしない命令”への置き換え後の機械語オブジェクトと、上記強制代入処理情報一覧とを、待機系コントローラ90Bに送信して保持させる。これより、待機系コントローラ90Bにおいても、初期状態では、保持する機械語オブジェクトは、全ての“強制代入処理へのジャンプ命令”が“何もしない命令”に置き換えられた状態となっている。
そして、その後、任意のときに、支援装置80の上記設定部82は、上記メモリアドレスと強制設定値を、上記所定の通知として、稼動系コントローラ90Aに通知する。
これに応じて、稼動系コントローラ90Aの第1更新部602は、該通知に応じて強制設定アドレス記憶部92を更新すると共に、該所定の通知と強制代入処理情報一覧に基づいて、機械語オブジェクトにおける該当位置の上記“何もしない命令”を上記“強制代入処理へのジャンプ命令”に戻す。
尚、例えば、上記強制代入処理は、上記強制設定値をアキュムレータに格納する処理であり、上書込み命令は、該アキュムレータの格納データをメモリの書込み先アドレスに転送・記憶する処理である。
そして、待機系コントローラ90Bの上記第2更新部611は、上記通知部601により通知された強制設定アドレス記憶部92の上記番号が、自コントローラが保持する上記バックアップ版の番号と異なる場合に、該相違する部分のアドレスに対応する該当位置を強制代入処理情報一覧から求めて、機械語オブジェクトにおける該当位置の“何もしない命令”を上記“強制代入処理へのジャンプ命令”に戻す。
1 ネットワーク
10 支援装置
11 フロントエンドコンパイラ
12 バックエンドコンパイラ
13 ソースコード
14 中間コード
15 機械語オブジェクト
16 変数−アドレス対応表
20 コントローラ
21 プログラム実行管理部
22 メモリ
23 機械語オブジェクト
24 強制ONアドレス一覧
30 HCI装置
41 変数名
42 アドレス
50 強制設定画面
51 変数名の入力欄
52 設定値の入力欄
53 「実行」ボタン
60 強制設定値送信データ
61 アドレス
62 強制設定値
71 管理番号
72 強制ONメモリアドレス
80 支援装置
81 コンパイル部
82 設定部
83 変数−アドレス記憶部
90 コントローラ
90A 稼動系コントローラ
90B 待機系コントローラ
91 プログラム実行部
92 強制設定アドレス記憶部
93 強制設定管理部
94 初期状態形成部
95 強制設定制御部
100他装置
101 設定部
102 変数−アドレス記憶部
210 支援装置
211 フロントエンドコンパイラ
212 バックエンドコンパイラ
213 ソースコード
214 中間コード
215 機械語オブジェクト
216 変数−アドレス対応表
217 強制代入処理情報一覧
220 コントローラ
221 プログラム実行管理部
222 メモリ
223 機械語オブジェクト
224 強制ONアドレス一覧
225 強制代入処理情報一覧
231 管理番号
232 強制代入処理へのジャンプ位置
233 機械語命令
234 書き込み先アドレス
241 管理番号
242 強制ONメモリアドレス
243 強制設定値
510 支援装置
511 フロントエンドコンパイラ
512 バックエンドコンパイラ
513 ソースコード
514 中間コード
515 機械語オブジェクト
516 変数−アドレス対応表
517 強制代入一覧情報
520 稼動系コントローラ
521 プログラム実行管理部
522 メモリ
523 機械語オブジェクト
524 強制ONアドレス一覧
525 強制代入一覧情報
530 待機系コントローラ
531 プログラム実行管理部
532 メモリ
533 機械語オブジェクト
534 強制ONアドレス一覧バックアップ
535 強制代入一覧情報
541 シーケンスNo.
542 強制設定個数
543 アドレス
544 強制設定値
551 管理番号
552 強制代入処理へのジャンプ位置
553 機械語命令
554 書き込み先アドレス
601 通知部
602 第1更新部
603 初期状態生成部
611 第2更新部

Claims (26)

  1. 支援装置とコントローラを有するプログラマブルコントローラシステムであって、
    前記支援装置は、
    任意のプログラムのソースコードをコンパイルして機械語オブジェクトに変換するコンパイル手段を有し、
    前記コントローラは、
    前記機械語オブジェクトを実行するプログラム実行手段と、
    強制設定値が書き込まれたメモリアドレスが登録される強制設定アドレス記憶手段とを有し、
    前記プログラム実行手段は、前記機械語オブジェクトにおける書込み命令を実行する際に、該書込み命令による書込み先アドレスが、前記強制設定アドレス記憶手段に登録されている場合には、該書込み命令による書込み先アドレスへの書き込みを実行しない、あるいは該書込み先アドレスへ前記強制設定値を書き込むことを特徴とするプログラマブルコントローラシステム。
  2. 前記支援装置の前記コンパイル手段は、前記任意のプログラムのソースコードを機械語オブジェクトに変換する際に、書込み命令に関しては所定の機械語を追加生成し、
    前記コントローラの前記プログラム実行手段は、前記機械語オブジェクトを実行する際、該機械語オブジェクトにおける前記書込み命令を実行する際に前記所定の機械語を実行することで、該書込み命令の書込み先アドレスが、前記強制設定アドレス記憶手段に登録されている場合には、該書込み命令による該書込み先アドレスへの書き込みを実行しないことを特徴とする請求項1記載のプログラマブルコントローラシステム。
  3. 前記支援装置または他装置は、
    任意に指定させた前記メモリアドレスと前記強制設定値を、前記コントローラに通知する設定手段を有し、
    前記コントローラは、前記通知されたメモリアドレスを前記強制設定アドレス記憶手段に登録すると共に、前記通知された強制設定値を該通知されたメモリアドレスの記憶領域に書き込む強制設定管理手段を更に有することを特徴とする請求項1または2記載のプログラマブルコントローラシステム。
  4. 前記支援装置または他装置は、
    前記コンパイルの際に前記ソースコードの各変数に割り当てられたメモリアドレスが、記憶される変数−アドレス記憶手段を更に有し、
    前記設定手段は、前記ソースコード中の各変数のうちの任意の変数を指定させると共に任意の強制設定値を指定させ、該任意に指定された変数に対応するメモリアドレスを前記変数−アドレス記憶手段から取得して、これらを前記任意に指定させた前記メモリアドレスと前記強制設定値として前記コントローラに通知することを特徴とする請求項3記載のプログラマブルコントローラシステム。
  5. 前記強制設定管理手段は、前記通知されたメモリアドレスが既に前記強制設定アドレス記憶手段に登録されている場合には、前記通知されたメモリアドレスを前記強制設定アドレス記憶手段に登録することなく、前記通知された強制設定値を該通知されたメモリアドレスの記憶領域に上書き格納することを特徴とする請求項4記載のプログラマブルコントローラシステム。
  6. 前記他装置は、前記コントローラの動作をモニタする機能を有するHCI装置であることを特徴とする請求項3記載のプログラマブルコントローラシステム。
  7. 前記支援装置の前記コンパイル手段は、前記任意のプログラムのソースコードを機械語オブジェクトに変換する際に、書込み命令に対応する機械語命令群に強制代入処理へのジャンプ命令を付加し、更に強制代入処理情報一覧に該ジャンプ命令の位置と該書込み命令の書込み先アドレスを登録し、
    前記コントローラは、
    前記支援装置が生成した前記機械語オブジェクトと前記強制代入処理情報一覧を取得すると、前記強制代入処理情報一覧に基づいて、前記機械語オブジェクトにおける全ての前記強制代入処理へのジャンプ命令を何もしない命令に置き換えることで、その後、前記支援装置から所定の通知があるまでは前記強制代入処理を実行させない初期状態形成手段を更に有することを特徴とする請求項1記載のプログラマブルコントローラシステム。
  8. 前記支援装置は、任意のときに任意のメモリアドレスと強制設定値を前記所定の通知として前記コントローラに通知する設定手段を更に有し、
    前記コントローラは、該所定の通知と前記強制代入処理情報一覧に基づいて、前記機械語オブジェクトにおける該当位置の前記何もしない命令を前記強制代入処理へのジャンプ命令に戻す強制設定制御手段を更に有することを特徴とする請求項7記載のプログラマブルコントローラシステム。
  9. 前記強制代入処理は、前記強制設定値をアキュムレータに格納する処理であり、
    前記書込み命令は、該アキュムレータの格納データをメモリの前記書込み先アドレスに転送・記憶する処理であることを特徴とする請求項8記載のプログラマブルコントローラシステム。
  10. 機械語オブジェクトを実行するプログラム実行手段と、
    強制設定値が書き込まれたメモリアドレスが登録される強制設定アドレス記憶手段とを有し、
    前記プログラム実行手段は、前記機械語オブジェクトにおける書込み命令を実行する際に、該書込み命令による書込み先アドレスが、前記強制設定アドレス記憶手段に登録されている場合には、該書込み先アドレスへの書き込みを実行しないことを特徴とするプログラマブルコントローラ。
  11. 前記機械語オブジェクトは、支援装置または自装置において任意のプログラムのソースコードを機械語オブジェクトに変換する際に書込み命令に関しては所定の機械語を追加生成することで生成された機械語オブジェクトであり、
    前記プログラム実行手段は、前記機械語オブジェクトを実行する際、該機械語オブジェクトにおける前記書込み命令を実行する際に前記所定の機械語を実行することで、該書込み命令の書込み先アドレスが、前記強制設定アドレス記憶手段に登録されている場合には、該書込み命令による該書込み先アドレスへの書き込みを実行しないことを特徴とする請求項10記載のプログラマブルコントローラ。
  12. 外部のコンピュータ装置から通知されてきた、該コンピュータ装置において任意に指定させたメモリアドレスと強制設定値を受信すると、該受信したメモリアドレスを前記強制設定アドレス記憶手段に登録すると共に、該受信した強制設定値を該受信したメモリアドレスの記憶領域に書き込む強制設定管理手段を更に有することを特徴とする請求項10または11記載のプログラマブルコントローラ。
  13. 任意のプログラムのソースコードをコンパイルして機械語オブジェクトに変換する手段であって、前記任意のプログラムのソースコードを機械語オブジェクトに変換する際に、書込み命令に関しては所定の機械語を追加生成することで、機械語オブジェクトを生成するコンパイル手段と、
    該コンパイル手段で生成した機械語オブジェクトをプログラマブルコントローラに転送する転送手段とを有し、
    該コンパイル手段で生成した機械語オブジェクトを前記プログラマブルコントローラで実行させることで、該機械語オブジェクトにおける前記書込み命令を実行する際に前記所定の機械語を実行させることによって、該書込み命令の書込み先アドレスが、該プログラマブルコントローラの所定の記憶手段に登録されている場合には、該書込み命令による該書込み先アドレスへの書き込みを実行させないようにすることを特徴とする支援装置。
  14. 任意に指定させたメモリアドレスと強制設定値を、前記プログラマブルコントローラに通知する設定手段を更に有し、
    前記プログラマブルコントローラにおいて該通知したメモリアドレスを前記所定の記憶手段に登録させると共に該通知した強制設定値を該通知したメモリアドレスの記憶領域に書き込ませることを特徴とする請求項13記載の支援装置。
  15. 前記コンパイルの際に前記ソースコードの各変数に割り当てられたメモリアドレスが、記憶される変数−アドレス記憶手段を更に有し、
    前記設定手段は、前記ソースコード中の各変数のうちの任意の変数を指定させると共に任意の強制設定値を指定させ、該任意に指定された変数に対応するメモリアドレスを前記変数−アドレス記憶手段から取得して、これらを前記任意に指定させた前記メモリアドレスと前記強制設定値として前記プログラマブルコントローラに通知することを特徴とする請求項14記載の支援装置。
  16. 任意に指定させたメモリアドレスと強制設定値を、プログラマブルコントローラに通知する設定手段を有し、
    前記プログラマブルコントローラにおいて該通知したメモリアドレスを所定の記憶手段に登録させると共に該通知した強制設定値を該通知したメモリアドレスの記憶領域に書き込ませることで、前記プログラマブルコントローラにおいて機械語オブジェクトにおける書込み命令を実行する際に、該書込み命令による書込み先アドレスが、前記所定の記憶手段に登録されている場合には、該書込み命令による書込み先アドレスへの書き込みを実行させないようにすることを特徴とするHCI装置。
  17. 支援装置におけるコンパイル処理の際にソースコードの各変数に割り当てられたメモリアドレスが、記憶される変数−アドレス記憶手段を更に有し、
    前記設定手段は、前記ソースコード中の各変数のうちの任意の変数を指定させると共に任意の強制設定値を指定させ、該任意に指定された変数に対応するメモリアドレスを前記変数−アドレス記憶手段から取得して、これらを前記任意に指定させた前記メモリアドレスと前記強制設定値として前記プログラマブルコントローラに通知することを特徴とする請求項16記載のHCI装置。
  18. 支援装置と稼動系コントローラと待機系コントローラを有する二重化プログラマブルコントローラシステムであって、
    前記支援装置は、
    任意のプログラムのソースコードをコンパイルして機械語オブジェクトに変換するコンパイル手段を有し、
    前記稼動系コントローラは、
    前記機械語オブジェクトを実行するプログラム実行手段と、
    強制設定値が書き込まれたメモリアドレスが登録される強制設定アドレス記憶手段と、
    該強制設定アドレス記憶手段を前記待機系コントローラに通知してバックアップ版として保持させる通知手段とを有し、
    前記プログラム実行手段は、前記機械語オブジェクトにおける所定の命令を実行する際に、該所定の命令によるアクセス先アドレスが、前記強制設定アドレス記憶手段に登録されている場合には、該アクセス先アドレスへのアクセスを実行しない、あるいは該アクセス先アドレスへ前記強制設定値を書き込むことを特徴とする二重化プログラマブルコントローラシステム。
  19. 前記強制設定アドレス記憶手段は任意の番号を保持し、
    前記稼動系コントローラは、前記強制設定アドレス記憶手段を更新する毎に前記番号を更新する第1更新手段を更に有し、
    前記待機系コントローラは、前記通知手段により通知された強制設定アドレス記憶手段の前記番号が、自コントローラが保持する前記バックアップ版の番号と異なる場合に、該通知された強制設定アドレス記憶手段を新たなバックアップ版とする第2更新手段を有することを特徴とする請求項18記載の二重化プログラマブルコントローラシステム。
  20. 前記待機系コントローラの前記第2更新手段は、前記通知手段により通知された強制設定アドレス記憶手段の前記番号が、自コントローラが保持する前記バックアップ版の番号と異なる場合には、更に、自己が保持する機械語オブジェクトを変更することを特徴とする請求項19記載の二重化プログラマブルコントローラシステム。
  21. 前記自己が保持する機械語オブジェクトを変更する処理は、該機械語オブジェクトの強制代入処理へのジャンプ命令を何もしない命令に置き換える処理、あるいは、該何もしない命令を該強制代入処理へのジャンプ命令に置き換える処理であることを特徴とする請求項20記載の二重化プログラマブルコントローラシステム。
  22. 前記支援装置の前記コンパイル手段は、前記任意のプログラムのソースコードを機械語オブジェクトに変換する際に、書込み命令に関しては強制代入処理へのジャンプ命令を付加し、更に強制代入処理情報一覧に該ジャンプ命令の位置と該書込み命令の書込み先アドレスを登録し、
    前記稼動系コントローラは、
    前記支援装置が生成した前記機械語オブジェクトと前記強制代入処理情報一覧を取得すると、前記強制代入処理情報一覧に基づいて、前記機械語オブジェクトにおける全ての前記強制代入処理へのジャンプ命令を何もしない命令に置き換えることで、その後、前記支援装置から所定の通知があるまでは前記強制代入処理を実行させない初期状態生成手段を更に有することを特徴とする請求項18記載の二重化プログラマブルコントローラシステム。
  23. 前記稼動系コントローラの前記初期状態生成手段は、前記何もしない命令への置き換え後の機械語オブジェクトと前記強制代入処理情報一覧を前記待機系コントローラに送信して保持させることを特徴とする請求項22記載の二重化プログラマブルコントローラシステム。
  24. 前記支援装置の前記設定手段は、前記メモリアドレスと強制設定値を前記所定の通知として前記稼動系コントローラに通知し、
    前記稼動系コントローラの第1更新手段は、該通知に応じて前記強制設定アドレス記憶手段を更新すると共に、該所定の通知と前記強制代入処理情報一覧に基づいて、前記機械語オブジェクトにおける該当位置の前記何もしない命令を前記強制代入処理へのジャンプ命令に戻すことを特徴とする請求項22または23記載の二重化プログラマブルコントローラシステム。
  25. 前記強制代入処理は、前記強制設定値をアキュムレータに格納する処理であり、
    前記書込み命令は、該アキュムレータの格納データをメモリの前記書込み先アドレスに転送・記憶する処理であることを特徴とする請求項24記載の二重化プログラマブルコントローラシステム。
  26. 前記待機系コントローラの前記第2更新手段は、前記通知手段により通知された強制設定アドレス記憶手段の前記番号が、自コントローラが保持する前記バックアップ版の番号と異なる場合に、該相違する部分のアドレスに対応する該当位置を前記強制代入処理情報一覧から求めて、前記機械語オブジェクトにおける前記該当位置の前記何もしない命令を前記強制代入処理へのジャンプ命令に戻すことを特徴とする請求項24または25記載の二重化プログラマブルコントローラシステム。
JP2017019048A 2016-02-05 2017-02-03 プログラマブルコントローラシステム、プログラマブルコントローラ、支援装置、hci装置、二重化プログラマブルコントローラシステム Active JP6866663B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JP2016021303 2016-02-05
JP2016021303 2016-02-05

Publications (2)

Publication Number Publication Date
JP2017142794A JP2017142794A (ja) 2017-08-17
JP6866663B2 true JP6866663B2 (ja) 2021-04-28

Family

ID=59628608

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017019048A Active JP6866663B2 (ja) 2016-02-05 2017-02-03 プログラマブルコントローラシステム、プログラマブルコントローラ、支援装置、hci装置、二重化プログラマブルコントローラシステム

Country Status (1)

Country Link
JP (1) JP6866663B2 (ja)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP7226103B2 (ja) * 2019-05-29 2023-02-21 オムロン株式会社 制御システム、サポート装置およびサポートプログラム
JP7306983B2 (ja) * 2019-12-26 2023-07-11 アズビル株式会社 コントローラ及び施設監視システム
CN111552172B (zh) * 2020-04-27 2023-12-15 浙江中控技术股份有限公司 一种数据处理方法、装置、存储介质及电子设备
CN113189961B (zh) * 2021-04-21 2022-09-02 西安热工研究院有限公司 一种强制状态查找处理方法

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH06242819A (ja) * 1993-02-18 1994-09-02 Fanuc Ltd Pcの信号状態制御方式
DE102009033967A1 (de) * 2009-07-21 2011-01-27 Robert Bosch Gmbh Verfahren zum Programmieren einer speicherprogrammierbaren Steuerung mit resistenter Abspeicherung von Daten

Also Published As

Publication number Publication date
JP2017142794A (ja) 2017-08-17

Similar Documents

Publication Publication Date Title
JP6866663B2 (ja) プログラマブルコントローラシステム、プログラマブルコントローラ、支援装置、hci装置、二重化プログラマブルコントローラシステム
JP5039428B2 (ja) プログラマブルコントローラ及びplcシステム
JP4973867B2 (ja) Plc制御プログラム開発装置及びプログラム
US10162328B2 (en) Controller and control system
JP5790128B2 (ja) プログラマブルコントローラ・システム、その支援装置
JP5849592B2 (ja) プログラマブルコントローラシステム、そのプログラミング装置、プログラマブルコントローラ、プログラム、デバッグ方法
JP6292096B2 (ja) プログラマブルコントローラシステム、その支援装置
JP6759851B2 (ja) プログラム生成プログラム、プログラム生成方法、プログラム生成装置及びコンパイルプログラム
JP2009157533A (ja) プログラマブルコントローラシステム
JP2016224557A (ja) プログラム作成支援装置、プログラムおよび判別方法
JP2015125713A (ja) プログラマブルコントローラ・システム、その支援装置、プログラマブルコントローラ、プログラム
Felser et al. Dynamic software update of resource-constrained distributed embedded systems
JP6135247B2 (ja) 情報処理装置および情報処理プログラム
JP2016001376A (ja) プログラマブルコントローラシステム、その支援装置
JP2012027639A (ja) プログラマブルコントローラ、およびプログラマブルコントローラのデバッグ方法
JP7047700B2 (ja) 制御システム、制御装置、端末装置、及びプログラム
JP7067273B2 (ja) サポート装置、制御システム、および開発支援プログラム
JP6119452B2 (ja) プログラマブルコントローラシステム、その支援装置、プログラマブルコントローラ、プログラム
JP6720993B2 (ja) サポート装置およびサポートプログラム
JP6205934B2 (ja) プログラマブルコントローラシステム、その支援装置、プログラム
WO2021044654A1 (ja) 情報処理システム、プログラマブル表示器および情報処理装置
JP5141095B2 (ja) プラントコントローラシステム
JP2016051395A (ja) 画像形成装置およびリソース管理方法
JP6798156B2 (ja) コントローラシステム、そのコントローラ、支援装置
JP5978775B2 (ja) プログラマブルコントローラ、その支援装置、プログラム、プログラム転送方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20200114

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20201127

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20201208

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20210118

RD03 Notification of appointment of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7423

Effective date: 20210118

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20210309

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20210322

R150 Certificate of patent or registration of utility model

Ref document number: 6866663

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250