JP2006318197A - コントローラ支援装置、プログラム - Google Patents

コントローラ支援装置、プログラム Download PDF

Info

Publication number
JP2006318197A
JP2006318197A JP2005139932A JP2005139932A JP2006318197A JP 2006318197 A JP2006318197 A JP 2006318197A JP 2005139932 A JP2005139932 A JP 2005139932A JP 2005139932 A JP2005139932 A JP 2005139932A JP 2006318197 A JP2006318197 A JP 2006318197A
Authority
JP
Japan
Prior art keywords
program
controller
update
program component
updated
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.)
Pending
Application number
JP2005139932A
Other languages
English (en)
Inventor
Yukiteru Yuo
幸輝 湯尾
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 FA Components and Systems Co Ltd
Original Assignee
Fuji Electric FA Components and Systems 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 FA Components and Systems Co Ltd filed Critical Fuji Electric FA Components and Systems Co Ltd
Priority to JP2005139932A priority Critical patent/JP2006318197A/ja
Publication of JP2006318197A publication Critical patent/JP2006318197A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Programmable Controllers (AREA)

Abstract

【課題】 プログラム構成要素単位でRUN中更新を行うコントローラが、異常な動作を行う可能性を極めて少なくする。
【解決手段】 コントローラ支援装置10は、コントローラ3で実行する制御プログラムを、プログラム構成要素単位で更新させ、これをコンパイラ1でコンパイルさせた後、コントローラ3に転送して、旧版のプログラム構成要素と置き換えさせる。その際、転送対象要素探索部14は、該プログラム構成要素の更新によって影響を受ける可能性がある全てのプログラム構成要素を判別する。支援装置10は、これらを一括してコンパイル1にてコンパイルさせた後、コントローラ3に転送させる。
【選択図】図1

Description

本発明は、プログラマブルコントローラのユーザプログラム更新において、特に、プログラマブルコントローラの運転中にプログラム構成要素を更新する手法に関する。
プログラマブルコントローラは、FA(Factory Automation)等の用途に使われるコンピュータであり、その適用システムは、ユーザの要求仕様により、24時間稼動等、極力停止が望まれないシステムが多く存在する。
しかしながら、システムで稼動するユーザプログラムは、ユーザの単純なプログラムミスや動作仕様の変更、機器の経年変化による設定値の変更など、さまざまな理由により、プログラムの更新が要求される。
これらの条件を満たすため、プログラマブルコントローラにおいては、コントローラの運転中のプログラム更新(以下RUN中更新と呼ぶ)機能が具備されているものがある。現在、一般的に行われているRUN中更新には、その変更範囲からおおよそ以下の3パターンが考えられる。
すなわち
・プログラム内の1命令(ステップ)単位、又はプログラム構成要素単位で命令を置き換える。
・複数あるプログラムのうちの1プログラムを全て変更する。
・ひとつのプログラマブルコントローラにある複数のプログラムを同時に変更する。
である。
このようなRUN中のプログラム更新に関して、特許文献1においては、コントローラ上にプログラムコード用メモリを2バンク持ち、いずれかのプログラムコード用メモリを書き換え、プログラム格納バンクテーブルを変更することで、複数プログラムを同時更新する手法が提案されている。
また、特許文献2においては、実際のコントローラの実行コードであるプログラムを格納する領域と、各プログラムの先頭アドレスを示したテーブルを持ち、更新プログラムをプログラム格納領域に書き込み完了した時点で、プログラムアドレステーブルのアドレスを変更する手法を提案している。
特開平10−207512号公報 特開2001−142510号公報
また、本出願の出願人は、特願2005−016122号(以下、先願と呼ぶ)の発明を提案している。この発明では、例えば図12(a)〜(c)に示すように、コントローラのプログラムメモリに格納されているプログラムの一部をRUN中更新する為に、プログラム変更要求キューを用いている。図示の例では、PG1、PG3、PG8、及びPG9がプログラムメモリに格納されていた状態で、PG3の更新版であるPG3’、PG9の更新版であるPG9’を、コントローラ支援装置側からコントローラにダウンロードして、これをコントローラにおいてプログラムメモリに格納し、旧版のPG3、PG9と置き換えている。
ここで、図示のPG1、PG3、PG8、及びPG9は、それぞれが1つのプログラムを意味するものであってもよいし、それぞれがプログラム構成要素を意味するものであってもよい。プログラム構成要素とは、ファンクション、ファンクションブロック等のことである。すなわち、例えばIEC61131-3に示されるように、制御プログラムにおいても、従来のラダー図のように1つのプログラムで全ての制御シーケンスを記述するスタイルから、ファンクションやファンクションブロックを使い、構造化されたプログラムを作成するスタイルが推奨されてきている。この様な構造化プログラムの実行の際には、任意のプログラム構成要素から別のプログラム構成要素(サブルーチンとなる子ノード等)を呼び出して実行させる。
上記プログラム規格IEC61131−3では、プログラムの構造化、カプセル化によるプログラムの可読性の向上並びにメンテナンス性の向上、基本機能のファンクションブロックライブラリ化によるプログラム品質の向上、納期の短期化等の面から、ファンクションブロックによるプログラミングを推奨している。このファンクションブロックによるプログラミングを行う場合には、まず、機能単位等でファンクションブロックを作成し、これらのファンクションブロックを呼び出すプログラム(これもプログラム構成要素の1つとして扱うものとする)を作成し、このプログラムを、定周期、割り込み、イベント等その実行タイミングの制御単位であるタスクに割りつけることで、制御プログラムを作成している。
ファンクションブロックは、プログラムを構造化するためのプログラミング手法であって、データ入力領域とデータ出力領域と内部変数領域とからなるデータ構造(インスタンス)と、これらのデータを用いて実行されるプログラムとから構成されている。
制御プログラムとして、この様な構造化プログラムを用いる場合には、上記の通り、制御プログラムの一部のみを(すなわちプログラム構成要素単位で)更新させることができる。
ここで、上記任意のプログラム構成要素から他のプログラム構成要素の呼び出しや復帰の際に、このプログラム構成要素間で、上記データ構造(インスタンス)を用いて、パラメータや戻り値の交換を行うことが必須となる。上記データ構造における各領域の割り当ては、コンパイルの際に行われ、呼び出されるプログラム構成要素と呼び出し元のプログラム構成要素とを一緒にコンパイルすれば、パラメータや戻り値の交換が正常に行われるように、オブジェクトコードが生成される。しかし、変更のあったプログラム構成要素のみをコンパイルしてダウンロードすると、インタフェースが呼び出し元と呼び出し先とで不一致となる可能性があり、上記パラメータや戻り値の交換が正常に行われず、コントローラが異常な動作を行う可能性がある。
これを防ぐ為には、支援装置において任意のプログラム構成要素が変更されたときに、この変更されたプログラム構成要素だけでなく、当該プログラム構成要素の変更によって上記パラメータや戻り値の交換に関する影響を受ける全てのプログラム構成要素を一括して、コントローラ側にダウンロードして更新させればよい。尚、説明していなかったが、支援装置においてはプログラム構成要素のソースファイルが作成されるものであり、これをコントローラ側にダウンロードする際には、当該ソースファイルをコンパイラによってコンパイルしてオブジェクトコードを生成し、このオブジェクトコードをコントローラ側に渡すようにしている(以下の説明では、逐一言わなくても、ダウンロードする場合には必ずコンパイルが行われているものとする)。よって、上記変更されたプログラム構成要素及び影響を受ける全てのプログラム構成要素を一括してコンパイルすることで、インタフェースが呼び出し元と呼び出し先とで一致するようなオブジェクトコードが生成されるので、上記問題が解決されることになる。
しかしながら、従来では、上記影響を受ける全てのプログラム構成要素を、ユーザが判断して指定しなければならなかったが、ユーザの指定に漏れがあった場合、必要なプログラム構成要素をダウンロードせずに更新を行ってしまい、インタフェースが呼び出し元と呼び出し先とで不一致となり、コントローラが異常な動作を行う可能性がある。このリスクを回避する為には、結局、RUN中更新を諦めて、コントローラを停止させた上、全プログラム構成要素をコントローラに転送して更新しなければならなかった。
本発明の課題は、制御プログラムとして構造化プログラムを用い、プログラム構成要素単位でRUN中更新を行うプログラマブルコントローラ・システムにおいて、支援装置側で、更新されたプログラム構成要素の影響を受ける全てのプログラム構成要素を判別して、これらを一括してコンパイルさせてコントローラ側にダウンロードすることで、コントローラが異常な動作を行う可能性を極めて小さくすることができるコントローラ支援装置、プログラム等を提供することである。
本発明のコントローラ支援装置は、複数のプログラム構成要素を用いる構造化プログラムを実行するコントローラに対して、更新されたプログラム構成要素を転送して旧版のプログラム構成要素と置き換えさせるものであって、該転送の際に前記プログラム構成要素をコンパイルさせるコントローラ支援装置であって、前記構造化プログラムで用いる各プログラム構成要素の更新の有無を検出する更新有無検出手段と、少なくとも1つのプログラム構成要素が更新された場合に、該プログラム構成要素の更新によって影響を受ける可能性がある全てのプログラム構成要素を判別して、これらプログラム構成要素を一括してコンパイルさせてコントローラ側に格納させる転送対象要素探索手段とを有するように構成する。
例えば、前記プログラム構成要素の更新によって影響を受ける可能性があるプログラム構成要素は、少なくとも前記更新されたプログラム構成要素の呼び出し元のプログラム構成要素である。
上述してある通り、更新されたプログラム構成要素のみをコンパイルしてコントローラ側に渡すと、データ構造が変化して、呼び出し元のプログラム構成要素との入出力関係が不一致となり誤動作を引き起こす可能性があるが、上記コントローラ支援装置では、該プログラム構成要素の更新によって影響を受ける可能性がある全てのプログラム構成要素(少なくとも呼び出し元のプログラム構成要素)を判別して、これらを一括してコンパイルさせるので、人間によるミスが生じることもなく、この問題を解決できる。
本発明のコントローラ支援装置、プログラム等によれば、制御プログラムとして構造化プログラムを用い、プログラム構成要素単位でRUN中更新を行うプログラマブルコントローラ・システムにおいて、支援装置側で、更新されたプログラム構成要素の影響を受ける全てのプログラム構成要素を判別して、これらを一括してコンパイルさせてコントローラ側にダウンロードすることで、コントローラが異常な動作を行う可能性を極めて小さくすることができる。
以下、図面を参照して、本発明の実施の形態について説明する。
図1は、本例のプログラマブルコントローラ・システムの概略構成図である。
図1において、コントローラ支援装置10は、ユーザが所望の制御プログラムを作成したり所望の指示を行う為の入力装置12と、図示表現される制御プログラム等を表示する表示装置11、および所定のアプリケーション・プログラムを記憶するための記憶媒体13(ハードディスク、CD−ROM等)等を有し、本例では更に転送対象要素探索部14を有する。
コンパイラ1は、コントローラ支援装置10で作成された制御プログラム(ソースファイル)を、コントローラ3(プログラマブル・コントローラ本体等)で実行できるコード(オブジェクトコード)に変換する。このようにして変換したコードを伝送装置2を介してコントローラ3に転送し、コントローラ3はこれを格納する。尚、以下の説明では、伝送装置2に関しては省略して説明する。
尚、図では、コンパイラ1とコントローラ支援装置10とを別に示しているが、これらは同一のハード(たとえばパソコン上)で構成されていてもよい。また、本発明の特徴である転送対象要素探索部14は、図示の例ではコントローラ支援装置10が備えるものとしているが、これをコンパイラ1が備えるようにしてもよい。
尚、コントローラ支援装置10は、例えばパソコン等のコンピュータにより実現されるものであり、従って特に図示していないが、当然、CPU、メモリ、通信インタフェース等も有しており、CPUが上記記憶媒体13に格納されている所定のアプリケーション・プログラムを読出し・実行することにより、上記転送対象要素探索部14の機能が実現される他、従来よりある機能、すなわちユーザに上記制御プログラム(コントローラ3で実行される、不図示の各種制御対象を制御する為のプログラムであり、例えば定周期プログラム等である)を作成させ、この制御プログラムをコンパイラ1等を介してコントローラ3側に送信する機能を実現させるものである。
同様に、コントローラ3も、特に図示していないが、CPU/MPU、メモリ等の記憶装置、通信インタフェース等を有している。この記憶装置は、例えば制御プログラムを格納するプログラムメモリ等である。
本例では、上記制御プログラムは、上述してあるIEC61131-3に準拠する、ファンクションやファンクションブロック等のプログラム構成要素を用いる構造化プログラムである。そして、コントローラ支援装置10は、制御プログラムをプログラム構成要素単位で更新し、この更新版のプログラム構成要素をコントローラ3に転送して、旧版と置き換えさせることができる。よって、勿論、本例のコントローラ3は、この様な構造化プログラムを実行可能な装置であり、また転送されてきた更新版のプログラム構成要素をプログラム構成要素単位でプログラムメモリに格納して旧版と置き返える機能を備える。
上記転送対象要素探索部14は、複数のプログラム構成要素のうち、少なくとも1つのプログラム構成要素が更新(バージョンアップ版や不具合箇所の修正版等)された場合に、更新されたプログラム構成要素の影響を受ける全てのプログラム構成要素を判別して、これらをまとめてコンパイラ1に渡すことで、これらを一括してコンパイルさせてオブジェクトコードを生成させる。これによって、インタフェースが呼び出し元と呼び出し先とで一致するようなオブジェクトコードが生成される。
生成されたオブジェクトコードは、伝送装置2を介してコントローラ3に転送される。コントローラ3は、受信したオブジェクトコードを用いて、例えば上記先願に記載された手法によって(あるいは他の従来技術(例えば特開平10-207512号公報)の手法によって)、プログラムメモリに格納されているプログラムのRUN中更新処理を実行する。
以下、上記転送対象要素探索部14の処理・機能について詳細に説明するが、その前に、上述してあるファンクションやファンクションブロック等のプログラム構成要素を用いる構造化プログラムについて、一例を示して説明しておく。
図2に、コントローラ3に格納される制御プログラムの構成例を示す。
既に述べてある通り、制御プログラムは、通常、タスク21上に構成される。タスク21は、予めコントローラ3に内蔵されており、不図示のプログラムメモリに格納されている各プログラムを、所定のスケジュールに従って呼び出す。ここでは、仮に、プログラムA22、プログラムB23がプログラムメモリに格納されているものとする。尚、上述してある通り、タスク21が呼び出すこれらプログラムA22、プログラムB23も、プログラム構成要素の1つと見做すものとする。また、プログラムメモリには、これら各プログラムA22、プログラムB23が実行中に呼び出すファンクションやファンクションブロックも格納される。呼び出されたファンクションブロックが、更に別のファンクションブロックやファンクションを呼び出す場合もある。
図示の例では、プログラムA22は、ファンクションブロック“FB1”24を呼び出し、呼び出された“FB1”24は更にファンクション“FCT10”28を呼び出す。また、プログラムA22は更にファンクションブロック“FB2”25も呼び出す。
同様に、プログラムB23は、ファンクションブロック“FB3”26を呼び出し、呼び出された“FB3”26は更にファンクションブロック“FB1”29を呼び出し、呼び出された“FB1”29は更にファンクション“FCT10”30を呼び出す。また、プログラムB23は更にファンクション“FCT10”27も呼び出す。
“FB1”24と“FB1”29は同一のものである。“FCT10”28とFCT10”30と“FCT10”27は同一のものである。すなわち、ファンクションブロックやファンクションは、再利用可能なものである。また、同一のファンクションブロック/ファンクションから呼び出されるファンクションブロック/ファンクションは、当然、同一となる(上記の例では“FB1”は必ずファンクション“FCT10”を呼び出す)。
図3に、ファンクションブロックの一例を示す。
ファンクションブロックやファンクションは、プログラムの中で繰返し用いられるような処理をまとめ、入出力のインタフェースのみを外部に示すことで、制御プログラムのメンテナンス性、再利用性を高めるものである。ファンクションブロックとファンクションとの違いは、ファンクションブロックでは後述するように内部変数を保持しており、入力値と内部変数とに基づいてそのプログラムが処理を実行する為、たとえ入力値が同じであっても、処理結果が同じになるとは限らない。一方、ファンクションは、関数機能に相当するものであり、内部変数は無く、従って入力値が同じであれば処理結果は同じとなる。
図示の例のファンクションブロックは、外部に示す入出力インタフェース(外部端子)として、3つの入力端子CU、R、PVと、2つの出力端子Q、CVを有している。尚、CU、R、PVは入力変数名を意味し、Q、CVは出力変数名を意味するものとも言える。尚、BOOLやINT等は、これら入力端子CU、R、PVに入力させる入力値(パラメータ)や処理結果としての出力値(戻り値)のデータ型を意味するものであり、例えばINTは整数型を意味する。また、尚、CTUは、当該ファンクションブロックを識別する為の名称である。
ここで、呼び出し元のプログラム又はファンクションブロックは、呼び出し先のファンクションブロック又はファンクションに対してパラメータ(入力値等)を渡す。呼び出されたファンクションブロック又はファンクションは、このパラメータを用いて所定の処理を実行し、処理結果として戻り値を呼び出し元のプログラム又はファンクションブロックに返す。これらプログラム構成要素間のパラメータや返り値の受け渡しは、既に述べた通り、データ入力領域とデータ出力領域と内部変数領域とからなるデータ構造(インスタンス)を介して行われる。この為、コントローラ支援装置10側で任意のファンクションブロック等が更新されたときに、この更新されたファンクションブロック等のみをコンパイルしてコントローラ3に転送して格納させて旧版と置き換えさせた場合、以下に述べる問題が生じる。
例えば、仮に図3のファンクションブロックが更新された場合、たとえ図3に示す各外部端子名には変更が無かったとしても、図4(a)、(b)に示すように、内部変数の増加等により、外部端子のアドレスが変更される可能性がある。
図4(a)、(b)は図3のファンクションブロックが用いるデータフォーマットの一例であり、図4(a)は更新前、図4(b)は更新後のデータフォーマットを示す。図4(a)に示す例では、1番地〜3番地にはそれぞれ上記外部変数のうちの入力端子CU、R、PVが割り当てられ、4番地〜9番地には特に図示しない内部変数が割り当てられ、10番地、11番地には出力端子Q、CVが割り当てられている。この様なアドレスの割り当ては、コンパイルの際に行われている。そして、この例では、更新されたファンクションブロックをコンパイルすると、図4(b)に示すように、内部変数が増加したことにより、出力端子Q、CVに割り当てられる番地が、12番地、13番地となっているものとする。
この為、仮に図3のファンクションブロックが図2における“FB1”であるとした場合、呼び出し元の“FB3”26においては、出力端子Q、CVの割り当て番地は10番地、11番地であると認識しているので、プログラム上は一見正しくても、コントローラ上の入出力関係が不一致となり、誤動作の原因となる。この問題を防ぐ為には、変更後のファンクションブロック“FB1”だけでなく、“FB3”26も一緒にコンパイラ1に渡してコンパイルさせればよい。勿論、コンパイル後はコントローラ3に転送して、そのプログラムメモリに格納して、旧版と置き換えさせる。
上記転送対象要素探索部14は、この様な更新されたプログラム構成要素(FB1)の影響を受ける全てのプログラム構成要素(FB3等)を判別するものである。尚、上記の例では“FB3”26も一緒にコンパイルするものとしたが、今度は、“FB3”26のデータ構造が変わる可能性があり、プログラムBも影響を受ける可能性があるので、上記例において影響を受けるのが“FB3”26のみとは限らない。
転送対象要素探索部14は、図8に示す処理を実行するが、この処理中に行う接続ノード判定に用いるプログラム構造ツリーの一例を図5、図6に示し、同じくこの処理中に参照するプログラム更新テーブルの一例を図7に示す。図8の説明の前に図5〜図7について説明しておく。
図5は、図2に示すプログラム構成のうちプログラムB23に係るツリー構造を示す。
各プログラム構成要素(以下、ノードと呼ぶ)には、そのノードの処理機能を実現させるプログラム以外に、他のノードとの接続関係を示すプログラムが記述されており、この様なプログラムの記述例を図6に示し、図5にはこの様なプログラムにより規定されるノード間の接続関係を示す。
図6において、pou_no61は、そのプログラム構成要素(ノード)を識別する為の識別番号を意味する。これは、図5に示すノード41における「プログラムB」やノード42における「FB3」等に相当する(つまり、番号に限らず、識別名等であってもよい)。node_num63は、そのノードに接続されている子ノードの数、すなわちそのノードから呼び出すノードの数を意味する。これは図5におけるプログラムBのノード41においては、‘2’となっている。*ptr64は、上記各子ノードへのポインタを示している。これは、図5におけるプログラムBのノード41においては、ptr_1がノード42(FB3)へのポインタを示し、ptr_2がノード43(FCT10)へのポインタを示す。尚、このポインタは、子ノードの識別番号としてもよい。
尚、CALL_MAXは、例えば仕様により制限される、そのプログラム構成要素から呼び出せるプログラム構成要素の数の最大値である。これは、勿論、動的に確保してもよい。
図7に示すプログラム更新テーブル70は、例えば不図示の更新有無検出部による各プログラム構成要素の更新の有無の判別結果を格納するものである。この更新の有無の判別方法自体は、簡単なものであり、例えば各プログラム構成要素毎に、そのプログラム構成要素のソースファイルの更新日付とオブジェクトコードの生成日付とを比較して、ソースファイルの日付の方が新しければ、変更があったものと判定する(尚、オブジェクトコードの生成日付は、例えばコンパイラ1に保存されている)。図示の例では、ファンクションブロック“FB1”のみが、更新があったことになる。しかし、このテーブル70に従うと、“FB1”のみがコントローラにダウンロードされるので、上述した問題が発生する。この為、本例では、少なくとも1つのプログラム構成要素に変更があった場合には、図8の処理を実行し、図8に示す処理の結果として、図10に示す様なダウンロード用のプログラム更新テーブル80を生成することで、このダウンロード用のプログラム更新テーブル80に従ってダウンロードすることで、上記問題を解決する。
以下、図8に示す転送対象要素探索部14による処理について説明する。
図8に示す処理は、図5に示すツリー構造における最上位のノード、すなわち図2においてタスク21が呼び出すプログラム構成要素を処理対象とする。図5の例では、プログラムA、プログラムBがそれぞれ処理対象となり、ここではプログラムBが処理対象となった場合を具体例にして説明する。
また、図8に示す処理は、再帰呼び出しとなっている。すなわち、図8のステップS16の処理は、処理対象のノード(最初は上記最上位ノード)の子ノードを処理対象として図8の処理を実行することを意味する。更に、この子ノードの子ノード(孫ノードと呼ぶ)が存在する場合には、子ノードを処理対象とする図8の処理中のステップS16の処理は、この孫ノードを処理対象として図8の処理を実行することを意味する。
図8に示す更新判定処理は、最初はパラメータとして上記任意の最上位ノードを指定して、当該更新判定処理をコールすることで開始される。まず、処理対象のノードの更新有無を、図7に示すプログラム更新テーブル70を参照して求める(ステップS11)。尚、ここでは、図7に示すプログラム更新テーブル70における更新有無のフィールドには、更新有/無を示す更新フラグが格納されているものとし、更新有りの場合はフラグON(1)、更新無しの場合はフラグOFF(0)であり、上記ステップS11では、この更新フラグをこの処理の返り値としてセットする。上記例では、プログラムBが処理対象であり、プログラムBは更新無しなので、返り値=0となる。
続いて、ループ処理用のインデックスiを初期化し(i=0)(ステップS12)、図5、図6に示す接続関係をチェックすることで、処理対象ノードに接続されている子ノード数を求め、この接続ノード数が0である場合、すなわち処理対象ノードには子ノードが無い場合には(ステップS13,YES)、ステップS11でセットした返り値を、すなわち当該処理対象ノードに対応する更新フラグを、そのまま、処理対象ノードに対応する更新判定フラグ領域に反映して(ステップS19)、本処理を終了する。尚、更新判定フラグ領域は、上記ダウンロード用のプログラム更新テーブル80を作成する為に、図8の処理の開始時等にメモリ上で取得される領域である。上記の例では、プログラムBの接続ノード数は‘2’であるので、ステップS13の判定はNOとなり、ステップS14以降の処理に進む。
ステップS14〜S18の処理は、上記処理対象ノードの子ノード全てについて、繰返し実行され(その都度、ステップS18でiを+1インクリメントする)、全ての子ノードについて処理が実行されたら(すなわち、ステップS14の「i<接続ノード数?」の判定がNOとなったら)、ループを抜けてステップS19の処理に移るものである。
ステップS15〜S17の処理は、まず上記処理対象ノードの子ノードのうちの1つを(i番目の接続ノードを)処理対象ノードとして指定して(ステップS15)、当該更新判定処理をコールすることで(ステップS16)、i番目の接続ノードを対象とした図8の処理を実行させ、処理結果(更新判定結果;すなわちステップS19の更新フラグ領域への書込み内容)とステップS11で取得した返り値とのORをとり(ステップS17)、このOR結果を返り値とするものである。後のステップS19の処理は、上記の通り、返り値を更新判定フラグ領域に反映するものであるから、この場合にはOR結果が更新判定フラグ領域に反映されることになる。
但し、本処理は上記の通り再帰呼び出しとなっているので、ステップS15で指定した子ノードから更にその子ノード、更にそのまた子ノードというように遡って処理が実行された結果として得られる上記処理結果を、ステップS17で受取ることになる。
上記の例では、まず、プログラムBの1番目の子ノードとして“FB3”が指定され、この“FB3”を処理対象ノードとして図8の処理が実行される。この処理では、ステップS11において返り値=0となり、更にステップS15において“FB3”の子ノードである“FB1”が処理対象ノードとされて図8の処理が実行される。この処理では、ステップS11において返り値=0となり、更にステップS15において“FB3”の子ノードである“FB1”が処理対象ノードとされて図8の処理が実行される。この処理では、ステップS11において返り値=1となり、更にステップS15において“FB1”の子ノードである“FCT10”が処理対象ノードとされて図8の処理が実行される。
“FCT10”を処理対象とする図8の処理では、まず、ステップS11において返り値=0であり、ステップS13の判定はNOとなるので、そのままステップS19の処理に移り、図9(a)に示すように、上記返り値(=0)を処理対象ノード(ここではFCT10)に対応する更新判定フラグ領域に反映させる。
この様にして更新判定フラグ領域に格納された値を、“FB1”を処理対象ノードとした図8の処理におけるステップS17において上記処理結果として取得し、上記の通り、返り値とのORをとることになる。この場合、返り値=1であり、処理結果は0であるので、これらのORは1となる。そして、ステップS18によってi=2となり、“FB1”の接続ノード数は1であることからステップS14の判定がNOになるので、ステップS19に進む。ステップS19では、図9(b)に示すように、上記OR結果(=1)を処理対象ノード(FB1)に対応する更新判定フラグ領域に反映させる。
この様にして更新判定フラグ領域に格納された値を、“FB3”を処理対象ノードとした図8の処理におけるステップS17において上記処理結果として取得し、上記の通り、返り値とのORをとることになる。この場合、返り値=0であり、処理結果は1であるので、これらのORは1となる。そして、ステップS18によってi=2となり、“FB3”の接続ノード数は1であることからステップS14の判定がNOになるので、ステップS19に進む。ステップS19では、図9(c)に示すように、上記OR結果(=1)を処理対象ノード(FB3)に対応する更新判定フラグ領域に反映させる。
この様にして更新判定フラグ領域に格納された値を、“プログラムB”を処理対象ノードとした図8の処理におけるステップS17において上記処理結果として取得し、上記の通り、返り値とのORをとることになる。この場合、返り値=0であり、処理結果は1であるので、これらのORは1となり、このOR結果が返り値として新たにセットされる(返り値=1となる)。そして、ステップS18によってi=2となり、“プログラムB”の接続ノード数は2であることからステップS14の判定がYESとなり、今度は“FCT10”が処理対象ノードとされて図8の処理が実行される。この処理結果は0となり、返り値は上記処理により1となっているので、これらのORは1となり、このOR結果が返り値として新たにセットされる(返り値=1のままである)。
そして、ステップS19の処理に進み、図9(d)に示すように、上記OR結果(=1)を処理対象ノード(プログラムB)に対応する更新判定フラグ領域に反映させる。
以上、プログラムBを処理対象ノードとした場合を例にして説明したが、プログラムAについても同様にして図8の処理を実行すると、プログラムAに対応する更新判定フラグ領域には‘1’が、“FB2” に対応する更新判定フラグ領域には‘0’が、反映されることになる。この様にして、全てのノードについて、対応する更新判定フラグ領域に‘0’又は‘1’が反映された結果、図10に示すようなダウンロード用のプログラム更新テーブル80が作成されることになる。
尚、図10に示す例において、FB1の呼び出し元であるFB3だけでなく、プログラムBもコンパイル対象となっているのは、もしFB1とFB3のみをコンパイルした場合、図4で説明したようなFB1のデータ構造の変化に対応して、FB3のデータ構造も変化する可能性があるからである。但し、この変化は、必ず起こるとは限らないので、図8の処理に代えて、更新があったプログラム構成要素の呼び出し元のプログラム構成要素のみをコンパイル対象とする処理を行っても良い。すなわち、本手法は、更新があったプログラム構成要素をコンパイルすることは当然のこととして、少なくとも更新があったプログラム構成要素の呼び出し元のプログラム構成要素は、コンパイル対象として判別するものである。
その後、コントローラ支援装置10は、図10に示すダウンロード用のプログラム更新テーブル80を参照して、更新有りとなっている全てのプログラム構成要素をまとめてコンパイラに渡し、コンパイルを実行させ、実行結果(オブジェクトコード)をコントローラ3に転送させる。
以上説明したように、制御プログラムとして構造化プログラムを用い、プログラム構成要素単位でRUN中更新を行うプログラマブルコントローラ・システムにおいて、支援装置10側で、更新されたプログラム構成要素の影響を受ける全てのプログラム構成要素を判別して、これらを一括してコンパイルさせてコントローラ3にダウンロードすることで、コントローラ3が異常な動作を行う可能性を極めて小さくすることができる。
図11は、コントローラ支援装置10(コンピュータ)のハードウェア構成図である。
同図に示すコンピュータ100は、CPU101、メモリ102、入力部103、出力部104、記憶部105、記録媒体駆動部106、及びネットワーク接続部107を有し、これらがバス108に接続された構成となっている。同図に示す構成は一例であり、これに限るものではない。
CPU101は、当該コンピュータ100全体を制御する中央処理装置である。
メモリ102は、プログラム実行、データ更新等の際に、記憶部105(あるいは可搬型記録媒体109)に記憶されているプログラムあるいはデータを一時的に格納するRAM等のメモリである。CPU101は、メモリ102に読み出したプログラム/データを用いて、上述してある各種機能・処理を実行する。
出力部104は、例えばディスプレイ等である。入力部103は、例えば、キーボード、マウス等である。これらは、図1の表示装置11、入力装置12に相当する構成である。
ネットワーク接続部107は、例えばイントラネットやインターネット等のネットワークに接続して、他の情報処理装置とのコマンド/データ送受信を行う為の構成である。
記憶部105は、例えばハードディスク等であり、上述した図8等の処理を上記CPU101により実行させるための所定のアプリケーション・プログラムや各種データ(図7、図10に示すテーブル等)が格納される。
あるいは、これらプログラム/データは、可搬型記録媒体109に記憶されているものであってもよい。この場合、可搬型記録媒体109に記憶されているプログラム/データは、記録媒体駆動部106によって読み出される。可搬型記録媒体109とは、例えば、FD(フレキシブル・ディスク)109a、CD−ROM109b、その他、DVD、光磁気ディスク等である。
あるいは、また、上記プログラム/データは、ネットワーク接続部107により接続しているネットワークを介して、他の装置内に記憶されているものをダウンロードするものであってもよい。あるいは、更に、インターネットを介して、外部の他の装置内に記憶されているものをダウンロードするものであってもよい。
また、本発明は、上記本発明の各種処理をコンピュータ上で実現するプログラムを記録した可搬型記憶媒体として構成できるだけでなく、当該プログラム自体として構成することもできる。
プログラマブルコントローラ・システムの概略構成図である。 コントローラに格納される制御プログラムの構成例である。 ファンクションブロックの一例である。 (a)、(b)は、プログラム構成要素が用いるデータ構成の一例である。 制御プログラムのツリー構造である。 他ノードとの接続関係を示すプログラムの記述例である。 プログラム更新テーブルの一例である。 転送対象要素探索部による処理を示すフローチャート図である。 (a)〜(d)は、処理結果を更新判定フラグ領域に反映させていく様子を示す図である。 図8の処理により作成される、ダウンロード用のプログラム更新テーブルの一例である。 コントローラ支援装置(コンピュータ)のハードウェア構成図である。 (a)〜(c)は、先願のRUN中更新を説明する為の図である。
符号の説明
1 コンパイラ
2 伝送装置
3 コントローラ
10 コントローラ支援装置
11 表示装置
12 入力装置
13 記憶媒体
14 転送対象要素探索部
21 タスク
22 プログラムA
23 プログラムB
24 FB1
25 FB2
26 FB3
27 FCT10
28 FCT10
29 FB1
30 FCT10
41 ノード(プログラムB)
42 ノード(FB3)
43 ノード(FCT10)
61 pou_no
63 node_num
64 *ptr
70 プログラム更新テーブル
80 ダウンロード用のプログラム更新テーブル
100 コンピュータ
101 CPU
102 メモリ
103 入力部
104 出力部
105 記憶部
106 記録媒体駆動部
107 ネットワーク接続部
108 バス
109 可搬型記録媒体
109a FD(フレキシブル・ディスク)
109b CD−ROM

Claims (3)

  1. 複数のプログラム構成要素を用いる構造化プログラムを実行するコントローラに対して、更新されたプログラム構成要素を転送して旧版のプログラム構成要素と置き換えさせるものであって、該転送の際に前記プログラム構成要素をコンパイルさせるコントローラ支援装置であって、
    前記構造化プログラムで用いる各プログラム構成要素の更新の有無を検出する更新有無検出手段と、
    少なくとも1つのプログラム構成要素が更新された場合に、該プログラム構成要素の更新によって影響を受ける可能性がある全てのプログラム構成要素を判別して、これらプログラム構成要素を一括してコンパイルさせてコントローラ側に格納させる転送対象要素探索手段と、
    を有することを特徴とするコントローラ支援装置。
  2. 前記プログラム構成要素の更新によって影響を受ける可能性があるプログラム構成要素は、少なくとも前記更新されたプログラム構成要素の呼び出し元のプログラム構成要素であることを特徴とする請求項1記載のコントローラ支援装置。
  3. コンピュータに、
    構造化プログラムで用いる各プログラム構成要素の更新の有無を検出する機能と、
    少なくとも1つのプログラム構成要素が更新された場合に、該プログラム構成要素の更新によって影響を受ける可能性がある全てのプログラム構成要素を判別して、これらプログラム構成要素を一括してコンパイルさせてコントローラ側に格納させる機能と、
    を実現させる為のプログラム。
JP2005139932A 2005-05-12 2005-05-12 コントローラ支援装置、プログラム Pending JP2006318197A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2005139932A JP2006318197A (ja) 2005-05-12 2005-05-12 コントローラ支援装置、プログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2005139932A JP2006318197A (ja) 2005-05-12 2005-05-12 コントローラ支援装置、プログラム

Publications (1)

Publication Number Publication Date
JP2006318197A true JP2006318197A (ja) 2006-11-24

Family

ID=37538826

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2005139932A Pending JP2006318197A (ja) 2005-05-12 2005-05-12 コントローラ支援装置、プログラム

Country Status (1)

Country Link
JP (1) JP2006318197A (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2016207150A (ja) * 2015-04-28 2016-12-08 株式会社日立製作所 プロセス制御システム、保守支援装置及びコントローラ
JP2017041000A (ja) * 2015-08-18 2017-02-23 Jfeスチール株式会社 プロセスコンピュータの更新方法
CN109143993A (zh) * 2017-06-19 2019-01-04 费希尔-罗斯蒙特系统公司 同步过程工厂中的配置改变

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS61169936A (ja) * 1985-01-23 1986-07-31 Nec Corp ジヨブ制御言語自動発生方式
JPH01240934A (ja) * 1988-03-23 1989-09-26 Hitachi Ltd 自動再コンパイル方法
JPH07281885A (ja) * 1994-04-14 1995-10-27 Nec Corp バッチ処理による再コンパイル・再リンク装置

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS61169936A (ja) * 1985-01-23 1986-07-31 Nec Corp ジヨブ制御言語自動発生方式
JPH01240934A (ja) * 1988-03-23 1989-09-26 Hitachi Ltd 自動再コンパイル方法
JPH07281885A (ja) * 1994-04-14 1995-10-27 Nec Corp バッチ処理による再コンパイル・再リンク装置

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2016207150A (ja) * 2015-04-28 2016-12-08 株式会社日立製作所 プロセス制御システム、保守支援装置及びコントローラ
JP2017041000A (ja) * 2015-08-18 2017-02-23 Jfeスチール株式会社 プロセスコンピュータの更新方法
CN109143993A (zh) * 2017-06-19 2019-01-04 费希尔-罗斯蒙特系统公司 同步过程工厂中的配置改变
JP2019003652A (ja) * 2017-06-19 2019-01-10 フィッシャー−ローズマウント システムズ,インコーポレイテッド プロセスプラント内の構成変更の同期
JP7226900B2 (ja) 2017-06-19 2023-02-21 フィッシャー-ローズマウント システムズ,インコーポレイテッド プロセスプラント内の構成変更の同期

Similar Documents

Publication Publication Date Title
US11209788B2 (en) Techniques for improving industrial control systems
CN105159732B (zh) 在移动终端安装或更新应用程序的方法和移动终端
US11022950B2 (en) Resilient failover of industrial programmable logic controllers
EP3101494A1 (en) Control apparatus and control system
JP2009146229A (ja) プログラマブルコントローラシステム
US20130055217A1 (en) Breakpoint synchronization for modified program source code
CN115291946A (zh) 鸿蒙系统移植方法、装置、电子设备及可读介质
JP2009157533A (ja) プログラマブルコントローラシステム
JP2006318197A (ja) コントローラ支援装置、プログラム
CN113535194A (zh) 安装包的更新方法、装置、计算机设备及存储介质
CN113821226A (zh) 一种onie系统安装方法、装置、设备及介质
CN111052010B (zh) 控制系统、开发辅助装置和存储介质
CN110659022A (zh) 一种基于Java自动调用Python脚本的方法
JP2005141435A (ja) ツール
CN109471401B (zh) 数据处理方法以及边缘计算数据盒
JP2008040996A (ja) プログラマブルコントローラ
JP2012093979A (ja) OSGiバンドル及びデプロイメントパッケージ自動作成システム、自動作成方法及び自動作成ツール
CN113672269B (zh) 数据处理方法、系统、电子设备及程序产品
CN110098963B (zh) 一种服务器运维管控方法及系统
JP4747990B2 (ja) プログラマブルコントローラ
CN112905217A (zh) 嵌入式程序的程序更新方法、终端、系统及存储介质
JP2003076558A (ja) プログラム実行制御方法及びプログラム実行制御プログラム
CN117348886A (zh) 在OpenEuler系统上实现原生编译向下兼容的方法
CN115437683A (zh) 基于sdk的变量配置方法、装置及计算机可读存储介质
CN113467803A (zh) 应用程序的修复方法以及相关装置、设备

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20080415

A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A712

Effective date: 20080919

RD03 Notification of appointment of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7423

Effective date: 20080919

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20080919

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20091210

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20091215

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20100420