(58)【調査した分野】(Int.Cl.,DB名)
【背景技術】
【0002】
従来、プログラマブルコントローラと支援装置を有するプログラマブルコントローラシステムが知られている。プログラマブルコントローラ(PLC)は、任意の制御プログラムを保持し、この制御プログラムを例えば定周期で実行することで、任意の制御対象の制御・監視等を実行する。支援装置は、ユーザが任意の制御プログラムのソースコードを作成するのを支援する支援機能や、このソースコードをコンパイルしてPLCで実行可能な形式(機械語オブジェクト)に変換するコンパイラ等の各種機能を有する。コンパイラは、コンパイルの際に、ソースコードに記述される各変数に対して任意のメモリアドレスを割り当てる。
【0003】
ここで、作成された新規ソースコードが、PLCで運用中の制御プログラムの更新版である場合、新規ソースコードは、既存のソースコードをベースにして作成されるので、既存のソースコードに存在する変数(既存の変数)が含まれる場合が多い。この様な既存の変数に関しては、上記PLCで運用中の制御プログラム実行により、その割当メモリアドレスに何らかのデータが格納されている状態であり、プログラム更新の際にこのデータを引き継ぐ必要がある。
【0004】
これに対して、コンパイルの際の各変数の割当メモリアドレスを記憶しておき、後に制御プログラム更新の際にこの記憶内容を参照することで、既存の変数と同じ変数に関しては、同じメモリアドレスが割り当てられるようにすることが考えられる。しかしながら、何らかの事情により、既存の変数の割当アドレスとは異なるアドレスを割り当てる必要がある場合もある。
【0005】
尚、上記既存のソースコードとは、基本的には、PLCで運用中の制御プログラムのソースコードであるはずであるが、その保証はない。
ユーザが、上記支援装置において、例えば、既存のソースコードに基づいて更新版ソースコードを作成するプログラミングを実施し、更新版ソースコードをコンパイルした結果、変数のアドレス割付けに変更があった場合、この変数に係わるデータを、旧アドレスから新アドレスへと移動する必要がある。この様な従来技術として、例えば特許文献1に記載の従来技術が知られている。
【0006】
特許文献1に開示されている従来技術では、支援装置によるコンパイル毎に、今回の変数割付情報を前回の変数割付情報と比較することにより、変数のアドレス割付けに変更が発生した箇所を検出する。そして、検出箇所毎に、前回の割付アドレスからデータを読み出して、このデータを今回の割付アドレスに書き込むことで、アドレス割付けに変更があった変数に係わるデータを移動する。
【0007】
例えば上記特許文献1等の従来技術の動作は、例えば
図7に示すようになると見做せる。
図7は、従来のプログラマブルコントローラシステムの概略構成・動作を示す図である。
【0008】
図示の例では、支援装置100において、任意のPLCのプロジェクトを更新する毎に、不図示のコンパイラが当該プロジェクトのプログラムをコンパイルする。尚、ここでは特に図示しないが、支援装置100は、複数のPLC110それぞれの制御プログラムを格納・管理している。各PLC毎に、そのPLC用の1または複数の制御プログラムを作成し、これをグループ化して管理しており、このグループ(各PLC用の制御プログラム群)を上記“プロジェクト”と呼ぶ。但し、以下の説明では、「プログラム」は、基本的に、1つの制御プログラムまたは複数の制御プログラム(プロジェクト)を意味するものとし、基本的に“プロジェクト”という用語は記述しないものとする。
【0009】
図7において、支援装置100は、各PLCのプログラム毎に、そのプログラムに係わる各変数へのアドレス割当情報である変数アドレス情報に関して、その前回値を保持している。すなわち、支援装置100は、新たな更新版の制御プログラム(そのソースコード)がユーザにより作成されて、それをコンパイルする際に、既存の変数アドレス情報101を退避させて新たな“前回変数アドレス情報”102として保持すると共に、今回のコンパイル処理による変数アドレス割当情報を、新たな変数アドレス情報101として保持する。
【0010】
そして、上記新たな制御プログラム(その機械語オブジェクト)をPLC110にダウンロードする際等に、“前回変数アドレス情報”102に基づいて各変数毎にPLC110の不図示のメモリの旧アドレスからデータを読み出す。尚、この様な移動元の変数データの読出しを“バックアップ”と記す。続いて、このバックアップデータを、変数アドレス情報101に基づいて、新アドレスに格納する。尚、この様な移動先への変数データの書込みをリストアと記す。
【0011】
尚、制御プログラムのソースコードには、各種変数が含まれており、コンパイルの際には各変数にメモリアドレスを割り当てる。これより、コンパイラは、例えば変数名に対応付けてその変数の割当アドレス等を記録したテーブル等を作成し得るものであり、これが図示の変数アドレス情報である。
【0012】
そして、図示の例の従来例の場合、既存のプログラムの更新版等のような新たなプログラムについてコンパイルする際には、まず、既存のプログラムに係わる既存の上記変数アドレス情報
101を、新たな“前回変数アドレス情報”102として退避させる。そして、上記更新版等のプログラムに係わる変数アドレス割当情報を、新たな変数アドレス情報101として記憶する。
【0013】
尚、既に述べたように、本説明では、プログラムとは、1つの制御プログラムまたは制御プログラム群(プロジェクト)を意味するものとする。
ここで、
図7で説明したような従来の動作は、プログラム更新対象となるPLC110と支援装置100とを接続した状態(オンライン状態)で、プログラム一致確認、プログラム編集、コンパイル、ダウンロード、上記バックアップ、上記リストア等の一連の処理を実行する必要がある。プログラム編集は、ここでは、支援装置100が保持している既存の制御プログラム(そのソースコード)に対して修正・変更等を行うことで、更新版プログラムを作成するものである。
【0014】
更に、このような従来の方法では、プログラム編集前に、編集対象の既存のプログラムが、PLC側で運用中のプログラムと同じであるか否かをチェックする必要がある。もし異なるならば、上記“前回変数アドレス情報”102等を用いたデータ移動処理が、正常に行えないからである。
【0015】
この様に、従来では、オンライン状態で、上記チェックによりプログラム一致確認したうえで、プログラム編集、コンパイル、ダウンロード、上記バックアップ、上記リストア等の一連の処理を実行する必要がある。この様な従来の処理の一例を
図8に示す。
【0016】
図8は、従来の支援装置の処理フローチャート図を示す。
図8の処理は、オンライン状態で実行される。オンライン状態とは、ネットワークを介して支援装置100とPLC110とが接続中の状態である。また、本処理開始時点では、支援装置100側では、未だ、更新版等のプログラムの作成作業自体が、開始されていない。よって、支援装置100側には、既存のプログラムが格納されているが、その更新版のプログラムは未だ存在していない状態である。尚、以下、既存のプログラムをプログラムr、その更新版のプログラムをプログラムwと記すものとする。
【0017】
上記オンライン状態で、支援装置100は、まず、更新処理対象のPLC110が現在保持・実行しているプログラムが、上記既存のプログラムrと同一であるか否かをチェックする(ステップS51)。同一であるならば、それはPLC側で運用中のプログラム実行による各変数データの格納位置が、上記“前回変数アドレス情報”102が示す各変数データの格納位置と同じであることを意味している。よって、この場合、“前回変数アドレス情報”102に基づいてバックアップ処理を行えば、正常に各変数の現在のデータを取得できることになる。
【0018】
尚、図示していないが、もし同一ではないならば、何らかの所定の警告メッセージを報知する等して本処理を終了する。
支援装置100は、上記プログラム一致を確認したら、ユーザが既存のプログラムrに基づいてその更新版のプログラムを作成することを許可する。そして、ユーザが任意の更新版のプログラムw(そのソースコード)を作成したら、これをコンパイルすることで、PLCで実行可能な形式である機械語オブジェクトに変換する(ステップS52)。コンパイルの際には、よく知られているように、各変数のメモリアドレス割当てが行われる。
【0019】
尚、上述したことから、ステップS52の処理も、引き続きオンライン中に行われる。つまり、支援装置100は、ステップS51の処理の時点からずっと、更新処理対象のPLC110と接続中の状態となっている。ステップS51の処理後にオフラインにして更新版のプログラムの作成作業を行うと、ステップS51で照合を行った意味が無くなるからである。
【0020】
尚、ステップS52の処理が行われることで、支援装置100には、プログラムwのみが存在し、プログラムrは無くなっていることになる。換言すれば、プログラムrがプログラムwへと変更されたことになる。
【0021】
また、上記ステップS52のコンパイル処理に伴って、更新版であるプログラムwの各変数のメモリアドレス割当が行われて変数アドレス情報が生成される。その際、上記
図7で説明したように、既存の変数アドレス情報101を退避させて新たな前回変数アドレス情報102とすると共に、生成された変数アドレス割当情報を新たな変数アドレス情報101とする。この処理によって、上記一例では、前回変数アドレス情報102はプログラムrに係わるもの(旧アドレス)、変数アドレス情報101はプログラムwに係わるもの(新アドレス)となる。
【0022】
尚、上記の通り、新アドレスは旧アドレスとは異なる場合もある。例えば、
図8の図上右側に示す例では、変数Aに関しては、旧アドレスは‘0000’であるが、新アドレスは‘0002’となっている。
【0023】
続いて、バックアップ処理を実行する(ステップS
53)。これは、前回変数アドレス情報102に基づいて、PLC110の不図示のメモリ等から、各変数の旧アドレスからデータを取得して一時的に記憶する処理である。
【0024】
これは、例えばまず、上記変数アドレス情報101と前回変数アドレス情報102とに基づいて、図示のデータ再配置情報120を作成しておく。但し、この段階では未だ図示の値124にはデータは格納されていない状態となっている。そして、このデータ再配置情報120に基づいてステップS
53のバックアップ処理や後述するステップS55のリストア処理を行う。
【0025】
ここで、
図8の図上右側に示す例のデータ再配置情報120は、変数名121、旧アドレス122、新アドレス123、値124の各データ項目から成る。上記変数アドレス情報101と前回変数アドレス情報102を参照することで、各変数の変数名と旧アドレス、新アドレスが分かるので、これらを変数名121、旧アドレス122、新アドレス123に格納することで、データ再配置情報120の一部が作成できる。
【0026】
そして、各変数毎に、その旧アドレス122によってPLC110のメモリからのデータ取得を行って、この取得データを値124に格納するという上記バックアップ処理を行うことで、データ再配置情報120が完成する。後に、この完成したデータ再配置情報120を参照して、後述するリストア処理を実行する。尚、上記PLC110のメモリの旧アドレスからデータを取得したら、当該アドレスの記憶領域を‘0’クリア等するようにしてもよい。
【0027】
続いて、コンパイル後のプログラムw(機械語オブジェクト)を、PLC110にダウンロードする(ステップS54)。これによって、PLC110側では、既存のプログラムrは削除されて、新たなプログラムwに置き換わることになる。
【0028】
その後、リストア処理を実行する(ステップS55)。すなわち、各変数毎に上記データ再配置情報120に退避させてあったデータを、その変数の新アドレスに格納する処理を行う。つまり、データ再配置情報120の各レコード毎に、その値124の格納データを、その新アドレス123が示す記憶領域に格納する。
【0029】
この様にして、PLCの制御プログラムの更新に伴って変数の割当アドレスが変わっても、当該変数のデータを問題なく引き継ぐことができる。
尚、上記ステップS51〜S55の一連の処理は、オンライン状態で行われる。
【0030】
尚、
図8の処理中は、更新対象のPLCの制御プログラム実行は中断している。
【発明を実施するための形態】
【0044】
以下、図面を参照して本発明の実施の形態について説明する。
尚、上記従来の説明等と同様、以下の本説明においても、「プログラム」は、基本的に、1つの制御プログラムまたは複数の制御プログラム(プロジェクト)を意味するものとし、基本的に上記“プロジェクト”という用語は記述しないものとする。
【0045】
図1は、本例のプログラマブルコントローラシステムのシステム構成図である。
本例においても、従来例と同様に、プログラマブルコントローラシステムは、基本的に、支援装置10とPLC(プログラマブルコントローラ)20を有する。
【0046】
ここで、支援装置10は、例えばパソコン等の汎用コンピュータにより実現される。支援装置10は、一般的なパソコン等の構成を有する。すなわち、支援装置10は、ハードウェア構成としては、例えば、不図示のCPU等の演算プロセッサ、メモリ、ハードディスク等の記憶部、キーボード、マウス等の入力操作部、ディスプレイ等の表示部、通信機能部等を有している。不図示の通信機能部は、不図示の通信線/ネットワーク等に接続している。PLC20も不図示の通信線/ネットワークに接続している。これより、不図示の通信線/ネットワークを介して、支援装置10とPLC20とが通信できる。
【0047】
また、支援装置10の上記不図示の記憶部には、予め所定のアプリケーションプログラムが記憶されている。支援装置10の上記不図示のCPU等が、このアプリケーションプログラムを実行することにより、後述する支援装置10の各種処理機能、特に
図2〜
図5の各フローチャート図の処理、
図6に示す各機能部の処理機能などが、実現される。尚、
図6に示す各種処理機能は、後述するが、例えば、プログラム記憶部51、コンパイラ部52、新旧変数アドレス情報管理部53、一致判定部54、変数データ再配置部55、ダウンロード部56、プログラム作成支援部57等である。
【0048】
また、PLC20も、プログラマブルコントローラとしての一般的なハードウェア構成を有しており、例えば不図示のCPU、メモリ等の記憶部、通信機能部等を有している。この記憶部に予め記憶されているアプリケーションプログラムを、CPUが実行することにより、後述するPLC20の処理機能、例えば
図6に示す記憶部61、制御部62等の処理機能が、実現される。
【0049】
支援装置10は、基本的な機能は、上記従来の支援装置100と略同様と見做してもよい。すなわち、支援装置10は、上記ユーザによる任意の制御プログラムのソースコードの作成を支援する機能や、このソースコードをコンパイルして機械語オブジェクトに変換すると共に、その際の変数アドレス割当情報を管理するコンパイラ等を有する。
【0050】
そして、本例の支援装置10では、更に、このコンパイル処理に伴って、既存の変数アドレス情報11を退避させて新たな“前回変数アドレス情報”12として保持すると共に、コンパイルによる新たな変数のアドレス割当情報を、新たな変数アドレス情報11として保持する機能なども有する。
【0051】
そして、本例の支援装置10は、上記処理機能に加えて、キー情報に係わる各種処理・管理を行うものである。すなわち、支援装置10は、例えば、各制御プログラム(そのソースコード)をコンパイルする毎に、ユニークなキー情報を生成して、このキー情報を上記新たな変数のアドレス割当情報に付与する。よって、上記のことから、変数アドレス情報11にはキー情報が付与されていることになり、既存の変数アドレス情報11を退避させて成る上記“前回変数アドレス情報”12にもキー情報が付与されていることになる。ユニークなキー情報であるので、ある時点における変数アドレス情報11のキー情報と“前回変数アドレス情報”12のキー情報とは、相互に異なることになる。また、支援装置10は、上記コンパイルの際に生成したキー情報を、当該コンパイル結果である機械語オブジェクトと共にPLC20にダウンロードして記憶させる。
【0052】
上述した動作について、
図1の図上左側には、ダウンロード操作時&コンパイル時の動作を示す。これについて、上記従来で説明したプログラムr、プログラムwを例にして説明する。
【0053】
図1の図上左側には、プログラムrのダウンロード時と、その後にプログラムrに基づいて作成された更新版のプログラムwのコンパイル時とが、混在して示されている。
まず、プログラムrに応じたキー情報として図示のキー情報“Key_r”が生成されたものとする。図には示していないが、このとき、プログラムrのコンパイル処理に伴う各変数のメモリアドレス割当情報にキー情報“Key_r”が付与されて、新たな変数アドレス情報11として保持されることになる。また、コンパイル結果である“プログラムrの機械語オブジェクト”をPLC20にダウンロードする際に、このキー情報“Key_r”も一緒にダウンロードして保持させる。これより、PLC20側には図示のようにキー情報“Key_r”が保持された状態となっている。尚、特に図示していないが、当然、ダウンロード後は、PLC20側ではプログラムrによって制御実行している状態となっている。
【0054】
その後、任意のときに、プログラムrの更新版のプログラムwが作成されたものとする。そして、このプログラムwのコンパイル処理の際に、既存の変数アドレス情報11が退避されて新たな前回変数アドレス情報12として保持される。このときの既存の変数アドレス情報11は、上記プログラムrに係わるものであり上記の通りキー情報“Key_r”が付与されているので、上記退避後には前回変数アドレス情報12は図示の状態となっている。つまり、前回変数アドレス情報12は、上記プログラムrに係わる変数アドレス情報となっており、よって、キー情報“Key_r”が付与されたものとなっている。
【0055】
更に、上記更新版のプログラムwに対しては、キー情報“Key_w”が生成されたものとする。これより、プログラムwのコンパイル処理に伴う各変数のメモリアドレス割当情報にキー情報“Key_w”が付与されて、新たな変数アドレス情報11として保持されることになる。つまり、図示の状態となることになる。
【0056】
ここで、本手法では、上記プログラムwの作成やそのコンパイル処理等は、オフライン状態で行っても構わない。オフライン状態とは、PLC20と支援装置10とが接続されていない状態である。従って、別環境においてプログラムwの動作検証等を行うこともできる。その後、例えば、動作検証済みのプログラムwを保持していると共に、変数アドレス情報11と前回変数アドレス情報12が
図1の図上左側に示す状態となっている支援装置10を、オンライン状態
にする。オンライン状態とは、PLC20と支援装置10とが接続されている状態である。そして、オンライン状態で、
図1の図上右側に示す「バックアップ&リストア操作時」の動作を行って、変数のデータの再配置を行うと共に、プログラムwを上記キー情報“Key_w”と共にPLC20にダウンロードすることになる。
【0057】
尚、
図1の図上右側に示す「バックアップ&リストア」動作の際、PLC20側の状態は、図上右下側に示すように、最初はプログラムrが保持され、これに伴って図示のようにキー情報“Key_r”が保持された状態になっている。その後、新たなプログラムwがダウンロードされると、プログラムwが保持され、これに伴って図示のようにキー情報“Key_w”が保持された状態になる。また、図上右下側には、「バックアップ&リストア」動作に伴うPLC20のメモリの変数割当アドレスの格納データの状態変化も示すが、これについては後述する。
【0058】
図上右側に示す「バックアップ&リストア」動作では、まず最初に、前回変数アドレス情報12のキー情報が、PLC20側で保持しているキー情報と一致するか否かをチェックする。図示の例では上記の通りPLC20側ではキー情報“Key_r”が保持されており、前回変数アドレス情報12のキー情報は“Key_r”であるので、キー情報は一致することになる。
【0059】
キー情報が一致する場合には、PLC20側における現在の各変数のデータ格納位置は、現在の“前回変数アドレス情報”12が示すデータ格納位置と一致しているものと見做してよいことになる。従って、キー情報が一致する場合には、“前回変数アドレス情報”12に基づいてバックアップ処理を実行すれば、正常にデータ取得が出来ることになる。“前回変数アドレス情報”12は、従来の“前回変数アドレス情報”102と同様、各変数名に旧アドレスが対応付けられているので、この旧アドレスからデータを取得する。尚、バックアップ処理自体は、従来と略同様である。
【0060】
尚、図示のバックアップデータ14は、上記バックアップ処理によって取得したデータでは無い。バックアップデータ14は、PLC20の不図示のメモリの全データのコピー等であり、上記バックアップ処理の前に作成しておくものである。これによって、上記バックアップ処理の際に、逐一PLC20のメモリから該当データを取得する必要なく、バックアップデータ14から該当データを取得すれば済むことになる。
【0061】
上記バックアップ処理の後、リストア処理を実行する。このリストア処理自体も、従来と略同様である。つまり、変数アドレス情報11は、各変数名に新アドレスが対応付けられており、上記バックアップ処理で各変数名に対応するデータを取得しているので、このデータを新アドレスに格納する。
【0062】
尚、PLC20側には変数名の情報は存在していない。換言すれば、ソースコードには変数名が記述され、機械語オブジェクトには各変数に割り当てられたアドレスが記述されることになる。よって、PLC20側では、各割当アドレスとその現在のデータを知ることは出来るが、どのアドレスがどの変数(変数名)に対応するものであるかまでは分からない。
【0063】
尚、上記従来のデータ再配置情報120と同様の図示のデータ再配置情報30を作成し、これに基づいて上記バックアップ&リストア処理を実行するようにしてもよい。データ再配置情報30は、変数名31、旧アドレス32、新アドレス33、値34等から成り、バックアップ処理で旧アドレス32からの取得データを値34に格納し、リストア処理では値34のデータを新アドレス33に格納する。
【0064】
勿論、これは一例であり、必ずしもデータ再配置情報30を作成しなくてもよい。旧アドレスからデータを取得してこのデータを新アドレスに格納することが出来れば、方法は何でも良い。
【0065】
上記「バックアップ&リストア」動作によって、例えば図上下側に示すように、例えば旧アドレス‘0x0000’のデータ‘1’は、新アドレス‘0x0010’に移動することになる。
尚、図上右下側に示すように、PLC20側の状態は、バックアップ処理の際にはキー情報“Key_r”があるのでプログラムrが保持されており、リストア処理の後にはキー情報“Key_w”があるのでプログラムwが保持された状態になっていることになる。つまり、従来と略同様に、バックアップ処理の後あるいはリストア処理の後などに、プログラムwとそのキー情報“Key_w”が、PLC20にダウンロードされている。尚、逐一述べないが、当然、PLC20側にダウンロードされて保持されるプログラムは、コンパイル後、すなわち機械語オブジェクトである。
【0066】
図2〜
図5に、支援装置10の処理フローチャート図を示す。
図2は、支援装置10の全体処理フローチャート図である。
ここで、
図2に示すステップS1の処理は、
図2の処理に含まれないものと見做してもよい。すなわち、ステップS1の処理は、例えばプログラムの初期版に係わる処理である。初期版であるので、PLC20側には未だプログラムは存在していない。これより、特にチェック等は必要なく、変数データを引継ぐ必要もないのでバックアップ&リストア処理等も必要なく、ユーザは任意の環境下で自由に初期版のプログラムの作成や検証等を行うことができ、そのコンパイル処理も行うことができる。そして、支援装置10を処理対象のPLC20に接続してオンライン状態にして、コンパイル後のプログラムを当該PLC20にダウンロードして保持させる。PLC20は、このプログラムを用いて各種制御を実行する。
【0067】
上記初期版に係る処理に関して、従来と異なる点は、上記コンパイル処理に伴ってユニークなキー情報を生成して、このキー情報が付与された変数アドレス情報11が生成される点である。尚、このときは未だ、前回変数アドレス情報12は存在していない。
【0068】
尚、更新版の場合も、コンパイル処理に伴って作成される上述した変数アドレス割当情報に上述した新たなキー情報を付与したものを、新たな変数アドレス情報11として記憶するが、その前に、上記のように、既存の変数アドレス情報11を退避させて新たな前回変数アドレス情報12として記憶する。
【0069】
ここで、本手法では、コンパイル処理に伴って新たな変数アドレス情報を生成する毎に、ユニークなキー情報を生成して、これを生成した変数アドレス情報に付随させる。キー情報は、同じものが生成されないようにすれば何でもよい。このキー情報は、PLC20にダウンロードするプログラムにも付随させる。尚、PLC20にダウンロードするプログラムは、当然、上記コンパイル処理によって得られる機械語オブジェクトである。
【0070】
上記ステップS1の処理によって初期版に係る各種処理が実行され、その後、任意のときに、新たな更新版プログラムを作成する際に、ステップS2やステップS3〜S6の処理が実行される。
【0071】
ここで、本説明では、
図1の例を利用して、ステップS2では、その時点での既存のプログラムrに基づいて、その更新版等である新たなプログラムwが作成されるものとする。プログラムrは、例えばステップS1で作成された初期版であるかもしれないし、前回の
図2の処理実行時にステップS2で作成されたプログラムかもしれない。また、
図1と同様、プログラムrに対してはキー情報“Key_r”が生成されており、プログラムwに対してはキー情報“Key_w”が生成されるものとする。
【0072】
そして、基本的には、以前に、プログラムrがキー情報“Key_r”と共にPLC20にダウンロードされており、PLC20側ではその時点からプログラムrにより運用開始したはずである。しかしながら、現在もPLC20側ではプログラムrにより運用中であるという保証はない。尚、
図1には正常な場合を示しているので、PLC20にキー情報“Key_r”が保持されている状態を示してある。つまり、本手法では、正常な状態であれば、以下に説明するステップS2〜S6の処理を実行する際には、PLC20側にはキー情報“Key_r”が記憶された状態となっている。
【0073】
上記のように、PLC20側で現在運用中のプログラムが、支援装置10側の上記既存のプログラムrと同一であるという保証は無い。その為、従来では上記ステップS51のチェック処理を行ったが、本手法では上記キー情報を用いた後述するステップS3のチェック処理を行う。詳しくは後述する。
【0074】
また、ステップS2の処理開始前の段階では、支援装置10側にはプログラムrが格納されていると共に、キー情報“Key_r”が付随された変数アドレス情報は、
図1とは異なり、未だ「前回変数アドレス情報」12にはなっておらず、上記変数アドレス情報11として記憶されている状態となっている。尚、プログラムrが初期版である例では、ステップS2の処理開始前の段階では、「前回変数アドレス情報」12は存在しておらず、キー情報“Key_r”が付随された変数アドレス情報11のみが存在していることになる。
【0075】
上記ステップS1の初期版に係わる処理後、任意のときに、プログラムの更新等を行う際に、その都度、ステップS2〜S6の処理が行われる。
まず、本処理では更新の際に上記ステップS51の処理は行わない。よって、支援装置10において、オフラインの状態でユーザが所望のプログラム編集を行って、更新版等の新たなプログラムwを作成するものであってよい。また、別環境で、新たなプログラムwの動作検証等を行って、新たなプログラムwが問題なく動作することを確認するようにしてもよい。
【0076】
このように、ステップS2では、例えばオフラインで、上記プログラム編集や動作検証を行って、正常に動作することが確認された上記プログラムwが、ユーザによって作成されることになる。更に、作成したプログラムwをコンパイルして、PLC20で実行可能な形式(機械語オブジェクト)に変換する。また、これに伴って、プログラムwに対応するキー情報“Key_w”が生成されたうえで変数アドレス情報の更新を行うことで、変数アドレス情報は例えば
図1の上記「バックアップ&リストア操作」時の状態になるものとする。
【0077】
すなわち、現在の変数アドレス情報11を「前回変数アドレス情報」12として退避させて、新たなプログラムwに係わる変数アドレス情報を新たな現在の変数アドレス情報11とする。これは、本例では、例えば
図1の図上左側に示すように、キー情報“Key_r”付随の変数アドレス情報を新たな「前回変数アドレス情報」12として退避させて、キー情報“Key_w”付随の変数アドレス情報を、新たな現在の変数アドレス情報11として記憶することになる。
【0078】
その後、任意のときに、オンライン状態、すなわち支援装置
10を更新対象のPLC20に接続して通信可能な状態にして、ステップS3〜S6の処理を実行する。
まず、「前回変数アドレス情報」12のキー情報(本例では“Key_r”)を読出すと共に、PLC20側のキー情報を読出して両者が一致するか否かを確認する(ステップS3)。尚、特に図示していないが不一致の場合には、警告メッセージを報知する等して本処理を終了する。つまり、この場合、PLC20の変数データ再配置やプログラム更新は行えない。一方、キー情報が一致する場合には、本例ではPLC20側で現時点において運用中のプログラムが、プログラムrであると見做してよい。よって、PLC20内の不図示のメモリにおける各変数データの格納位置も、「前回変数アドレス情報」12が示す各アドレスとなっていると見做してよい。
【0079】
本例ではステップS2においてプログラムrに基づいてその更新版であるプログラムwを作成しているが、この作成に伴ってプログラムrは無くなっている。従って、ステップS3の処理の時点では、従来のステップS51に相当する処理は行えない。しかし、「前回変数アドレス情報」12のキー情報を用いることで、ステップS51の略同様の確認が行える。すなわち、支援装置10に現在存在するプログラムwが、PLC20側の現在のプログラムの更新版等であることが確認できる。
【0080】
ステップS3で一致確認したら、続いて、バックアップ処理を実行する(ステップS4)。ここで、ステップS4のバックアップ処理の詳細例を、
図3に示す。尚、
図3に示す例では、キー情報は上述した
図1に示す例を用いている。
【0081】
まず、「前回変数アドレス情報」12のキー情報“Key_r”を読出す(ステップS21)。更に、PLC20からキー情報を読み出す(ステップS22)。但し、PLC20にキー情報が存在しない場合には(ステップS23、NO)、更新不可等を示す所定の警告を報知して(ステップS26)、本処理を終了する。
【0082】
一方、PLC20にキー情報が存在して(ステップS23,YES)これをステップS22で取得できた場合には、当該PLC20側のキー情報が、上記「前回変数アドレス情報」12のキー情報“Key_r”と一致するか否かを判定する(ステップS24)。
図1に示す例では、一致するはずであるが、もし、キー情報が不一致ならば(ステップS24,NO)上記ステップS26の処理を実行して本処理を終了する。
【0083】
キー情報が一致することを確認したら(ステップS24,YES)、前回変数アドレス情報12に登録されている各アドレス(旧アドレス)に基づいて、PLC20内の不図示のメモリの旧アドレスからデータを読み出して、これを旧アドレスと新アドレスとに対応付けて一時的に記憶する(ステップS25、S27、S28)。これは、上記従来のデータ再配置情報120の生成処理と略同様の処理を実行するものと見做してもよい。尚、本説明では、データ再配置情報の具体例は、上記従来のデータ再配置情報120と同様のデータ再配置情報30を用いるものとする。
【0084】
尚、上記新アドレスとは、変数アドレス情報11に登録されている各アドレスのことである。尚、変数アドレス情報11の各レコードは、上述したように、変数名に応じた割当アドレス等から成り、本例では現在のプログラムwに係わる各変数の変数名と割当アドレスが格納されることになる。また、前回変数アドレス情報12は、既存の変数アドレス情報11を退避させたものであるので、そのデータ構造自体は変数アドレス情報11と同じである。
【0085】
上記ステップS25、S27等の処理について、以下、
図2等に示すデータ再配置情報30を用いて、一例について具体的に説明する。
例えば、前回変数アドレス情報12の各レコードを順次処理対象として、ステップS25,S27の処理を実行する。
【0086】
まず、前回変数アドレス情報12における処理対象レコードの変数名と割当アドレス(上記旧アドレス)を取得する(ステップS25)。そして、PLC20内の不図示のメモリから当該旧アドレスの格納データを読み出して、この読出データを上記処理対象レコードの変数名と割当アドレス(旧アドレス)に紐付けて記憶する。つまり、処理対象レコードの変数名と割当アドレス(旧アドレス)と読出データを、データ再配置情報30の新規追加レコードの変数名31と旧アドレス32と値34とにそれぞれ格納する(ステップS27)。
【0087】
ステップS27では、更に、変数アドレス情報11における上記変数名31に対応する割当アドレス(新アドレス)を取得して、これを上記新規追加レコードの新アドレス33に格納する処理も行う。これによって、データ再配置情報30の1レコードが作成完了することになる。
【0088】
前回変数アドレス情報12の全てのレコードについて上記ステップS25、S27の処理を実行するまで、上記ステップS25、S27の処理を繰り返す。そして、全レコードについて処理実行したら(ステップS28,YES)本処理を終了する。
【0089】
尚、
図3の処理の開始前に、例えば
図1に示すようにPLC20側の保持データを取得してバックアップデータ14として支援装置10側に保持しておき、ステップS22、S27の処理では、PLC20からデータを取得するのではなく、バックアップデータ14からデータ取得するようにしてもよい。
【0090】
上記ステップS4の処理によってデータ再配置情報30の作成が完了したら、上記更新版等の新たなプログラムwを、そのキー情報(本例では“Key_w”)と共に、PLC20にダウンロードする(ステップS5)。
【0091】
図4に、ステップS5の詳細フローチャート図を示す。
上記更新版等のプログラムwを、キー情報“Key_w”を付してPLC20にダウンロードする(ステップS11)。これは、例えば、上記ステップS2で作成された更新版等のプログラムwを、当該ステップS2のコンパイル処理に伴って生成した上記キー情報“Key_w”を付してPLC20にダウンロードする。
【0092】
これによって、次回のプログラム更新の際には、例えば
図3の処理を実行する時点では、「前回変数アドレス情報」12は、上記キー情報“Key_w”付随の変数アドレス情報になっていると共に、正常であればPLC20側のキー情報も“Key_w”であるはずである。
【0093】
上記ステップS5のダウンロード処理後、リストア処理を行う(ステップS6)。
図5は、ステップS6の詳細フローチャート図である。
図5において、まず、変数アドレス情報11に付随のキー情報(本例では“Key_w”)を読出すと共に(ステップS31)、PLC20からキー情報を読み出す(ステップS32)。
図4の処理により、PLC20側に特に異常が無ければ、PLC20側で保持するキー情報は、“Key_w”となっているはずである。しかし、PLC20側に何らかの異常があって、PLC20側にキー情報が存在しなかったり(ステップS33,NO)、PLC20側のキー情報が、ステップS31で読み出したキー情報“Key_w”と不一致の場合には(ステップS34,NO)、リストア操作不可である旨の警告を報知する等して(ステップS36)、本処理を終了する。
【0094】
一方、PLC20側のキー情報が、上記変数アドレス情報11に付随のキー情報“Key_w”と一致することを確認したならば(ステップS34,YES)、上記データ再配置情報30の各レコードを順次参照して、リストア処理を実行する。
【0095】
すなわち、データ再配置情報30の任意のレコードを参照して(ステップS35)、そのレコードの値34のデータを、当該レコードの新アドレス33の記憶領域に格納する(ステップS37)。当該ステップS35、S37の処理を、データ再配置情報30の全レコードについて順次実行していき、全レコードについて実行完了したら(ステップS38,YES)本処理を終了する。
【0096】
尚、オンライン状態にしてステップS3でキー情報一致を確認したら、引き続きオンライン状態のままでステップS4、S5、S6の処理を実行する。尚、ステップS5の実行タイミングは、
図2に示す例に限らず、例えばステップS6の処理後に実行してもよい。但し、その場合には、ステップS11,S12の「新たなキー情報生成と該キー情報を変数アドレス情報11に付与する処理」は、例えばステップS2の処理の際に行っておく。
【0097】
また、上記ステップS31〜S34の処理は、必ずしも必要ないものである。すなわち、上記ステップS31〜S34の処理は、ダウンロード処理後にリストア処理を行う例に対応するものであり、ダウンロードが正常に行われたことを確認する為の処理である。よって、必ずしも必要ない処理であり、更に例えばリストア処理後にダウンロード処理を行う例の場合には必要ない処理である。
【0098】
図6は、本例の支援装置10とPLC20の機能ブロック図である。
まず、支援装置10は、プログラム記憶部51、コンパイラ部52、新旧変数アドレス情報管理部53、一致判定部54、変数データ再配置部55、ダウンロード部56等を有する。支援装置10は、更に、プログラム作成支援部57等を有するものであってもよい。
【0099】
プログラム記憶部51は、既存のプログラムに基づいて作成された任意の新規プログラムを記憶する。
コンパイラ部52は、上記新規プログラムをコンパイルする。すなわち、新規プログラムのソースコードをコンパイルして機械語オブジェクトに変換する。更に、このコンパイル処理に伴って、該新規プログラムの各変数のメモリ割当情報を生成すると共に、ユニークなキー情報を生成する。
【0100】
新旧変数アドレス情報管理部53は、上記既存プログラムに係わる変数アドレス情報を前回変数アドレス情報として退避させると共に、上記キー情報を付与したメモリ割当情報を新たな上記変数アドレス情報として記憶する。尚、この様に、変数アドレス情報はキー情報が付与されているので、これを退避させて成る上記前回変数アドレス情報にも、当然、キー情報が付与されていることになる。ユニークなキー情報であるので、当然、前回変数アドレス情報に付与されているキー情報は、新たな変数アドレス情報に付与されているキー情報とは、異なることになる。
【0101】
一致判定部54は、PLC20側で保持するキー情報が、上記前回変数アドレス情報に付与されているキー情報と一致するか否かを判定する。
変数データ再配置部55は、一致判定部54により上記2つのキー情報が一致すると判定された場合に、上記新たな変数アドレス情報と上記前回変数アドレス情報とに基づいて、PLC20内の不図示のメモリにおける各変数のデータを再配置する。
【0102】
ダウンロード部56は、上記一致判定部54により上記2つのキー情報が一致すると判定された場合に、上記コンパイル後の新規プログラムを上記生成したキー情報と共にPLC20にダウンロードして記憶させる。
【0103】
プログラム作成支援部57は、上記既存のプログラムに基づく任意の新規プログラムの作成作業を支援する。この機能自体は既存の一般的な機能である。
そして、プログラム作成支援部57による新規プログラムの作成作業や、その動作検証作業等は、PLC20と接続していないオフライン状態で実施される。その一方で、一致判定部54の上記判定処理と変数データ再配置部55による上記各変数のデータを再配置する処理は、PLC20と接続したオンライン状態で例えば連続して実行される。
【0104】
また、上記新たな変数アドレス情報と上記前回変数アドレス情報は、何れも、各変数に応じたPLC20内のメモリへの割当アドレスを有している。ここでは、各変数毎に、上記新たな変数アドレス情報における割当アドレスを新アドレス、上記前回変数アドレス情報における割当アドレスを旧アドレスとする。上記各変数のデータの再配置は、例えば、PLC20内の上記メモリについて旧アドレスから読み出したデータを新アドレスに書き込む処理である。
【0105】
また、例えば、上記新規プログラムは、上記既存プログラムの更新版であり、該新規プログラムが作成されることで該既存プログラムは無くなる。つまり、新規プログラムが作成済みの状態では、既存プログラムは支援装置10には記憶されていない。但し、このとき、既存プログラムは、PLC20には記憶されており動作中かもしれない。そうであれば、PLC20側における各変数の格納アドレスは、実質的に上記前回変数アドレス情報に応じたものとなっていることになる。よって、上記旧アドレスからデータを読み出せば、各変数に応じた現状の正常なデータが取得できることになる。
【0106】
また、PLC20は、例えば、記憶部61、制御部62等を有する。
記憶部61は、上記ダウンロード部56によりダウンロードされる上記コンパイル後の新規プログラムと上記キー情報とを記憶する。
【0107】
制御部62は、記憶部61に記憶された上記コンパイル後の新規プログラムを実行することで所定の制御を行う。
尚、PLC20に関しては、記憶部61に記憶されるプログラムに、キー情報が付与されている点を除けば、従来と同様と見做してよいので、これ以上は説明しない。
【0108】
上述したように、本手法によれば、支援装置10側でオフライン状態で更新版プログラムの作成等を行う場合でも、現在のPLC20側のプログラムが、更新元のプログラムと同一であるか否かを、キー情報に基づいて判別できる。換言すれば、現在のPLC20側における各変数のメモリ割当てが、「前回変数アドレス情報」12と同一であることを、キー情報が一致することによって確認できる。キー情報が一致するならば、「前回変数アドレス情報」12に基づいてPLC20のメモリの各旧アドレスのデータを読み出して、このデータを新たな変数アドレス情報11に基づいて新アドレスに書き込むことで、各変数に係わるデータの移動を正常に行うことができる。つまり、割当アドレスが変わっても、データの引継ぎを正常に行えることになる。そして、更新版プログラムをPLC20にダウンロードして実行させることになる。
【0109】
そして、上記のように更新版プログラムの作成は、オフライン状態で行うことができるので、従って作成したプログラムの動作検証等も別環境などで行うことができる。よって、動作検証済みの更新版プログラムをPLC20にダウンロードすることができ、PLC20側で更新後の動作が異常になることを防止できる。
【0110】
従来では、プログラム一致確認、プログラム編集、ダウンロード、データのバックアップおよびリストアといった一連の操作を、オンライン状態のまま継続して行う必要があった。こ
れに対して、本手法では上記のように、オンライン状態で既存
のプログラムの一致確認と既存
のプログラムに基づく更新版のプログラムの作成等の上記一連の処理を行わなくても、プログラム更新に伴う各変数の割当アドレスの変更に対応する変数データの再配置を正常に行うことができ、更にオフライン状態で別環境等で、プログラム編集や動作検証等を行うことができる。オフラインで更新版プログラムの動作検証を行った後に、その更新元のプログラムにて稼働中のPLC20に対して更新処理を行える。このように、PLC内のデータ更新を安全に行えるようになるとともに、エンジニアリングの効率化を図れるという効果を有する。
【0111】
尚、PLC20のプログラムの更新やそれに伴う変数データ再配置は、更新対象のPLCの稼動中に行われるが、ステップS3〜S6の処理中は、更新対象のPLC20の制御プログラム実行は中断している。