以下に本発明の一実施形態を示す。以下で説明される個別の実施形態は、本発明の上位概念、中位概念および下位概念など種々の概念を理解するために役立つであろう。また、本発明の技術的範囲は、特許請求の範囲によって確定されるのであって、以下の個別の実施形態によって限定されるわけではない。
はじめにプログラマブル・ロジック・コントローラ(PLC、単にプログラマブルコントローラと呼ばれてもよい)を当業者にとってよりよく理解できるようにするために、一般的なPLCの構成とその動作について説明する。
図1は、本発明の実施の形態によるプログラマブル・ロジック・コントローラシステムの一構成例を示す概念図である。図1に示すように、このシステムは、ラダープログラムなどのユーザプログラムの編集を行うためのプログラム作成支援装置1と、工場等に設置される各種制御装置を統括的に制御するためのPLC(プログラマブル・ロジック・コントローラ)2とを備えている。PLC2は、CPUが内蔵された基本ユニット3と1つないし複数の拡張ユニット4を備えている。基本ユニット3に対して1つないし複数の拡張ユニット4が着脱可能となっている。基本ユニット3は基本ユニットと呼ばれることもある。
基本ユニット3には、表示部5及び操作部6が備えられている。表示部5には、基本ユニット3に取り付けられている各拡張ユニット4の動作状況などを表示することができ、表示部5の表示内容は、操作部6を操作することにより切り替えることができる。表示部5には、通常、PLC2内のデバイスの現在値(デバイス値)やPLC2内で生じたエラー情報などが表示される。なお、デバイスとは、デバイス値を格納するために設けられたメモリ上の領域を指す名称である。デバイス値とは、入力機器からの入力状態、出力機器への出力状態およびユーザプログラム上で設定される内部リレー(補助リレー)、タイマー、カウンタ、データメモリ等の状態を示す情報である。
拡張ユニット4は、PLC2の機能を拡張するために用意されており、基本ユニット3に対して側方から取り付けられる。1つ目の拡張ユニット4は、基本ユニット3に対して側方から直接的に取り付けられる。2つ目以降の拡張ユニット4は、既に取り付けられている拡張ユニット4に対して、側方から直列的に取り付けられる。たとえば、基本ユニット3の右側面と拡張ユニット4の左側面とが連結面になっている。同様に、1つ目の拡張ユニット4の右側面の形状等は基本ユニット3の右側面とほぼ同じであるため、1つ目の拡張ユニット4の右側面に2つ目の拡張ユニット4の左側面が連結される。このような連結方式は、数珠つなぎ方式とかデイジーチェーン方式と呼ばれてもよい。各連結面にはコネクタが設けられており、通信や電力供給を行うためのバスもコネクタを介して連結される。このようにして、基本ユニット3と複数の拡張ユニット4が直列的に取り付けられると、各拡張ユニット4内に備えられた配線(例:バス)を介して、各拡張ユニット4が基本ユニット3に対して通信可能に接続される。各拡張ユニット4には、その拡張ユニット4の機能に対応する被制御装置16(図4)が接続され、これにより、各被制御装置16が拡張ユニット4を介して基本ユニット3に接続される。被制御装置16には、センサなどの入力装置や、アクチュエータなどの出力装置が含まれる。
プログラム作成支援装置1は、たとえば、携帯可能ないわゆるノートタイプやタブレットタイプのパーソナルコンピュータであって、表示部7及び操作部8が備えられている。PLC2を制御するためのユーザプログラムの一例であるラダープログラムは、プログラム作成支援装置1を用いて作成され、その作成されたラダープログラムは、プログラム作成支援装置1内でニモニックコードに変換される。そして、プログラム作成支援装置1を、USB(Universal Serial Bus)などの通信ケーブル9を介してPLC2の基本ユニット3に接続し、ニモニックコードに変換されたラダープログラムをプログラム作成支援装置1から基本ユニット3に送ると、そのラダープログラムが基本ユニット3内でマシンコードに変換され、基本ユニット3に備えられたメモリ内に記憶される。
なお、図1では示していないが、プログラム作成支援装置1の操作部8には、プログラム作成支援装置1に接続されたマウスなどのポインティングデバイスが含まれていてもよい。また、プログラム作成支援装置1は、USB以外の他の通信ケーブル9を介して、PLC2の基本ユニット3に対して着脱可能に接続されるような構成であってもよい。
図2は、ラダープログラムの作成時にプログラム作成支援装置1の表示部7に表示されるラダー図17の一例を示す図である。図2に示すように、PLC2を制御するためのラダープログラムは、プログラム作成支援装置1の表示部7にマトリックス状に表示される複数のセル18内に仮想デバイスのシンボル19を適宜配置して、視覚的なリレー回路を表すラダー図17を構築することにより作成される。
ラダー図17には、たとえば、10列×N行(Nは任意の自然数)のセル18が配置されている。そして、各行のセル18内に、図2に示す左側から右側に向かって、時系列的に仮想デバイスのシンボル19を適宜配置することにより、視覚的なリレー回路を作成することができる。作成されるリレー回路は、1行で表される直列的なリレー回路であってもよいし、複数行に並列的に表されたリレー回路を互いに結合することにより作成された、並列的なリレー回路であってもよい。
図2に示すリレー回路は、入力装置からの入力信号に基づいてオン/オフされる3つの仮想デバイス(以下、「入力デバイス」と呼ぶ。)のシンボル19a,19b,19cと、出力装置の動作を制御するためにオン/オフされる仮想デバイス(以下、「出力デバイス」と呼ぶ。)のシンボル19dとが適宜結合されることにより構成されている。
各入力デバイスのシンボル19a,19b,19cの上方に表示されている文字(「R0001」、「R0002」及び「R0003」)は、その入力デバイスのデバイス名(アドレス名)21を表している。各入力デバイスのシンボル19a,19b,19cの下方に表示されている文字(「フラグ1」、「フラグ2」及び「フラグ3」)は、その入力デバイスに対応付けられたデバイスコメント22を表している。出力デバイスのシンボル19dの上方に表示されている文字(「原点復帰」)は、その出力デバイスの機能を表す文字列からなるラベル23である。
図2に示す例では、デバイス名「R0001」及び「R0002」にそれぞれ対応する2つの入力デバイスのシンボル19a,19bが直列的に結合されることにより、AND回路が構成されている。また、これらの2つの入力デバイスのシンボル19a,19bからなるAND回路に対して、デバイス名「R0003」に対応する入力デバイスのシンボル19cが並列的に結合されることにより、OR回路が構成されている。すなわち、このリレー回路では、2つのシンボル19a,19bに対応する入力デバイスがいずれもオンした場合、又は、シンボル19cに対応する入力デバイスがオンした場合にのみ、シンボル19dに対応する出力デバイスがオンされるようになっている。
図3は、図1のプログラム作成支援装置1の電気的構成について説明するためのブロック図である。図3に示すように、プログラム作成支援装置1には、CPU24、表示部7、操作部8、記憶装置25及び通信部26が備えられている。表示部7、操作部8、記憶装置25及び通信部26は、それぞれCPU24に対して電気的に接続されている。記憶装置25は、少なくともRAMを含む構成であり、ラダープログラム記憶部25aと、編集ソフト記憶部25bとを備えている。
ユーザは、編集ソフト記憶部25bに記憶されている編集ソフトをCPU24に実行させて、操作部8を通じてラダープログラムを編集する。ここで、ラダープログラムの編集には、ラダープログラムの作成及び変更が含まれる。編集ソフトを用いて作成されたラダープログラムは、ラダープログラム記憶部25aに記憶される。また、ユーザは、必要に応じてラダープログラム記憶部25aに記憶されているラダープログラムを読み出し、そのラダープログラムを、編集ソフトを用いて変更することができる。通信部26は、通信ケーブル9を介してプログラム作成支援装置1を基本ユニット3に通信可能に接続するためのものである。
図4は、PLC2の電気的構成について説明するためのブロック図である。図4に示すように、基本ユニット3には、CPU10、表示部5、操作部6、記憶装置12及び通信部14が備えられている。表示部5、操作部6、記憶装置12、及び通信部14は、それぞれCPU10に電気的に接続されている。記憶装置12は、RAMやROM、メモリカードなどを含んでもよく、ラダープログラムなどが記憶される。記憶装置12には、プログラム作成支援装置1から入力されたラダープログラムやユーザデータが上書きして記憶される。
図5は、本発明の実施の形態に係るプログラマブルコントローラの基本ユニット3でのスキャンタイムの構成を示す模式図である。図5が示すように1つのスキャンタイムTは、入出力のリフレッシュを行うためのユニット間通信201、プログラム実行202、END処理204により構成されている。ユニット間通信201で、基本ユニット3は、ラダープログラムを実行して得られた出力データを基本ユニット3内の記憶装置12から外部機器などに送信するとともに、受信データを含めた入力データを基本ユニット3内の記憶装置12に取り込む。プログラム実行202で、基本ユニット3は、更新された入力データを用いてプログラムを実行(演算)する。基本ユニット3はプログラムの実行によりデータを演算処理する。なお、END処理とは、プログラム作成支援装置1や基本ユニット3に接続された表示器(図示せず)等の外部機器とのデータ通信、システムのエラーチェック等の周辺サービスに関する処理全般を意味する。
このように、プログラム作成支援装置1はユーザの操作に応じたラダープログラムを作成し、作成したラダープログラムをPLC2に転送する。PLC2は、入出力リフレッシュ、ラダープログラムの実行およびEND処理を1サイクル(1スキャン)として、このサイクルを周期的、すなわちサイクリックに繰り返し実行する。これにより、各種入力機器(センサ等)からのタイミング信号に基づいて、各種出力機器(モータ等)を制御する。よって、PLC2は汎用のパーソナルコンピュータ(PC)とは全く異なる動きをする。
<連結構造>
図6(A)はPLC2を構成する基本ユニット3、拡張ユニット4およびエンドユニット11が連結される前の状態を示している。この例では、基本ユニット3の右方向に1つ以上の拡張ユニット4が連結される。最も右に位置する拡張ユニット4にはエンドユニット11が連結される。エンドユニット11は、最も右に位置する拡張ユニット4の右側面を保護するものであり、バスの終端機能を備えていてもよい。
図6(B)はPLC2を構成する基本ユニット3、拡張ユニット4およびエンドユニット11が連結された状態を示している。このPLC2はベースレスのビルディングタイプであるため、ベースを使用せずに、基本ユニット3、拡張ユニット4およびエンドユニット11が連結される。工場において制御盤に設置しやすくするために、PLC2の背面にはDINレールなどの基準レール13が取り付けられるようになっている。なお、基本ユニット3および拡張ユニット4の連結状態を維持するためにロック機構が採用されてもよい。
<メモリの管理>
上述したようにPLC2の記憶装置12は揮発性メモリ(RAMなど)と不揮発性メモリ(ROM、EEPROM、フラッシュメモリ、SDメモリカードなど)を有している。一般に、プログラム作成支援装置1によって作成されたプロジェクトデータ(ラダープログラム、ユニット構成情報(拡張ユニットの識別情報など)、ラベル(変数など))は不揮発性メモリ(フラッシュメモリ)に格納され、そこからRAMにロードされて使用される。また、PLCの制御に関連しないユーザデータ(ラダープログラムを実行することで作成されたロギングファイル、PLCの取扱説明書など)は不揮発性メモリ(SDメモリカード)に格納される。近年になり、プロジェクトデータを格納するのに使用されていた不揮発性メモリの容量が増大し、未使用領域も増加することになった。この未使用領域にユーザデータを記憶すれば、未使用領域を有効活用することが可能となる。また、ユーザデータを格納するための専用のメモリを省略できる利点もある。ただし、プロジェクトデータとユーザデータとを単一のメモリに混在させると、プロジェクトデータを改変したときに、プロジェクトデータを格納できなくなってしまう恐れがある。これは未使用領域にユーザデータを格納した結果、未使用領域がほとんどなくなってしまうことで発生するだろう。よって、プロジェクトデータが改変されてサイズが増加することも考慮して、プロジェクトデータの記憶領域を確保しておき、その記憶領域にはユーザデータを格納しないような工夫が必要となる。反対にプロジェクトデータが膨大となり、ユーザデータを格納できなくなってしまうことも考えられる。よって、プロジェクトデータの記憶する記憶領域やユーザデータを記憶する記憶領域については上限サイズの管理が必要となろう。
図7(A)ないし図7(D)は上限サイズを管理する手法の一例を示す図である。記憶装置12には上述したように書き換え可能な不揮発性メモリ100が設けられている。図7(A)は最も単純な例を示しており、不揮発性メモリ100にはプロジェクトデータ102を記憶するプロジェクト領域101とユーザデータ104を記憶するユーザ領域103とが存在する。プロジェクト領域101のうち実際にプロジェクトデータ102によって消費されている記憶領域は斜線の部分である。同様に、ユーザ領域103のうち実際にユーザデータ104によって消費されている記憶領域は斜線の部分である。境界111は、プロジェクト領域101とユーザ領域103との境界を示している。境界111は、プロジェクト領域101の上限サイズとユーザ領域103の上限サイズとを示している。境界111はアドレスとして管理されてもよいし、プロジェクト領域101の上限サイズとユーザ領域103の上限サイズとを示す情報によって管理されてもよい。なお、この例は最も単純な例であるため、不揮発性メモリ100の全記憶領域のサイズは、プロジェクト領域101の上限サイズとユーザ領域103の上限サイズとの和に等しい。つまり、不揮発性メモリ100の全記憶領域のサイズとプロジェクト領域101の上限サイズとの差から、ユーザ領域103の上限サイズが算出されてもよい。反対に、不揮発性メモリ100の全記憶領域のサイズとユーザ領域103の上限サイズとの差から、プロジェクト領域101の上限サイズが算出されてもよい。このように、プロジェクト領域101の上限サイズとユーザ領域103の上限サイズとのうち一方を保持しておけば、境界111を管理できる。ユーザは、プログラム作成支援装置1やPLC2の基本ユニット3を操作することで境界111(プロジェクト領域101の上限サイズやユーザ領域103の上限サイズ)を変更する。
図7(B)は、プロジェクト領域101とユーザ領域103とを管理する手法の他の例を示している。この例では、プロジェクト領域101の上限サイズ112とユーザ領域103の上限サイズ113とが個別に管理されることを示している。ユーザは、プログラム作成支援装置1やPLC2の基本ユニット3を操作することでプロジェクト領域101の上限サイズ112やユーザ領域103の上限サイズ113を変更する。ただし、プロジェクト領域101の上限サイズ112やユーザ領域103の上限サイズ113との和は、不揮発性メモリ100の全記憶領域のサイズを超えることはできない。
図7(C)は、プロジェクト領域101、ユーザ領域103およびその他の用途の領域105を管理する手法の他の例を示している。上述した例は2つの記憶領域が例示されているが、本発明は3つ以上の記憶領域についても適用可能である。ユーザは、プログラム作成支援装置1やPLC2の基本ユニット3を操作することでプロジェクト領域101の上限サイズ116やユーザ領域103の上限サイズ117、その他の用途の領域105の上限サイズ118を変更する。ただし、プロジェクト領域101の上限サイズ116とユーザ領域103の上限サイズ117とその他の用途の領域105の上限サイズ118との和は、不揮発性メモリ100の全記憶領域のサイズを超えることはできない。
1つの不揮発性メモリ100を複数の記憶領域に分割する方法はいくつか存在する。1つはファイルシステムを用いて不揮発性メモリ100に複数のドライブを構築したり、1つのドライブに複数のパーティションを構築したりする手法がある。しかし、これらの場合は上限サイズを変更するためにフォーマットやディスクイメージの書き込みなど、複雑な作業が発生してしまう。また、その時点で記憶領域に保存されているファイルのバックアップとリストアも必要になってしまい、非常に長い作業時間が必要になってしまう。
そこで、1つのドライブに複数のフォルダ(ディレクトリ)を作成し、各フォルダに格納されるファイルのサイズの合計値が上限サイズを超えないように管理する手法が柔軟性やサイズの変更時間の点で有利であろう。また、この手法はファイルシステムを使用しなくても実現できる。ファイル(ファイルシステムを使用しない場合はファイルという概念は必須ではないが、便宜上1つのデータをファイルと呼ぶことにする)の種別(プロジェクトデータに属するファイルやユーザデータに属するファイル)ごとにファイルのサイズの合計値を算出し、各合計値がそれぞれの上限サイズを超えないように書き込みを制限する手法が考えられる。ファイルシステムでは読み書きはクラスタと呼ばれる最小単位に基づき実行されるため、小さなデータであっても、少なくとも1つのクラスタを占有してしまう。これは無駄である。一方で、ファイルシステムを使用しなければ、このような問題は生じないといった利点もある。
<記憶領域の上限サイズの調整方法>
上限サイズの調整はプログラム作成支援装置1から実行されてもよいし、プログラム作成支援装置1を用いずにPLC2で実行されてもよい。
図8は上限サイズを設定するためのユーザインタフェース(UI)120の一例を示している。ここでは最も簡単な例である2つの記憶領域の境界126を変更することで、2つの記憶領域の上限サイズを調整する手法について説明する。
ユーザインタフェース120はプログラム作成支援装置1の表示部7に表示され、操作部8の操作に連動する。CPU24はユーザによる操作部8の操作に応じてポインタ64の表示位置を変更して、表示部7に表示する。スライダーバー121は、プロジェクト領域の上限サイズとユーザ領域の上限サイズを確定する境界126を調整するためのコントロールである。CPU24は、ポインタ64によってスライダーバー121が右方向に移動されると、これに連動して境界126を右方向に移動し、境界126の移動量または位置に応じて、プロジェクト領域の上限サイズを拡張(増加)し、ユーザ領域の上限サイズを縮小(削減)する。また、CPU24は、ポインタ64によってスライダーバー121が左方向に移動されると、これに連動して境界126を左方向に移動し、境界126の移動量または位置に応じて、プロジェクト領域の上限サイズを縮小(削減)し、ユーザ領域の上限サイズを拡張(増大)する。
CPU24は、PLC2に問い合わせて取得したプロジェクト領域における実際の消費サイズと、ユーザ領域における実際の消費サイズとについてそれぞれ表示してもよい。図8では消費サイズがグラフ(斜線部のバーグラフで表示されているが、円グラフなど他のグラフ形式でもよい)で表示されるとともに、表123にも数値(%表示等であってもよいし、%表示等も併記されてもよい)で表示されている。これにより、ユーザは各記憶領域にどの程度の未使用領域があるかを視覚的に把握でき、上限サイズの決定と調整に役立つであろう。表123には、各記憶領域の上限サイズ、プログラム作成支援装置1に保持されている現在のプロジェクトデータをPLC2に格納する上で必要となるサイズ(現在の必要サイズ)、プログラム作成支援装置1に保持されている現在のユーザデータをPLC2に格納する上で必要となるサイズ(現在の必要サイズ)、プロジェクトデータをPLC2に格納する上で実際に消費されているサイズ(PLC2内の消費要サイズ)、ユーザデータをPLC2に格納する上で実際に消費されているサイズ(PLC2内の消費要サイズ)といった情報が含まれている。CPU24は、OKボタン124が押下されると、スライダーバー121によって調整された上限サイズをPLC2に反映させる。これは変更要求をPLC2に送信し、PLC2が保持している上限サイズを示す情報を書き換えることで実現される。CPU24は、キャンセルボタン125が押下されると、スライダーバー121によって調整された上限サイズを破棄し、PLC2に反映させずに、ユーザインタフェース120を閉じる。
図9は上限サイズを設定するためのユーザインタフェース120’の一例を示している。ユーザインタフェース120’は、上述したユーザインタフェース120を簡素化したものであり、プログラム作成支援装置1の表示部7に表示されてもよいし、PLC2の表示部5に表示されてもよい。ここでは後者について説明する。
PLC2の基本ユニット3は市場から小型化が求められているため、表示部5や操作部6も小型化が求められる。よって、表示部5に表示可能な情報量は少なくなり、操作部6から入力可能な指示も少なくなりやすい。この例では、操作部6に選択キー、決定キー、右キー、左キー、キャンセルキーなどが含まれているものとする。CPU10は、選択キーによって上限サイズの調整を選択されると、ユーザインタフェース120’を表示部5に表示する。CPU10は、記憶装置12の不揮発性メモリ100に保持されている上限サイズの情報や、各記憶領域の消費サイズの情報を読み出す。CPU10は上限サイズの情報に基づき境界126の位置を決定して表示する。また、CPU10は各記憶領域の消費サイズの情報に基づき、バーグラフを表示する。
CPU10は、右キーが押下されると、これに連動して境界126を右方向に移動し、境界126の移動量または位置に応じて、プロジェクト領域の上限サイズを拡張(増加)し、ユーザ領域の上限サイズを縮小(削減)する。また、CPU10は、左キーが押下されると、これに連動して境界126を左方向に移動し、境界126の移動量または位置に応じて、ユーザ領域の上限サイズを拡張(増加)し、プロジェクト領域の上限サイズを縮小(削減)する。
また、CPU10は、各記憶領域について、実際の消費サイズと上限サイズとを数値(%表示等であってもよいし、%表示等も併記されてもよい)で表示してもよい。
消費サイズや必要サイズなどの記憶サイズ(記憶容量)に関する%(百分率)値は、CPU10が記憶サイズを上限サイズで除算し、その商に100を乗算することで算出されてもよい。同様に上限サイズに関する%値は、CPU10が不揮発性メモリ100の全記憶容量で上限サイズを除算し、その商に100を乗算することで算出されてもよい。
図10(A)は上限サイズを調整するためのユーザインタフェース120の他の例を示す図である。この例では、プロジェクト領域の上限サイズを調整するためのコントロールとしてテキストボックスが採用されている。同様に、ユーザ領域の上限サイズを調整するためのコントロールとしてもテキストボックスが採用されている。
図10(B)は上限サイズを調整するためのユーザインタフェース120の他の例を示す図である。この例では、プロジェクト領域の上限サイズを調整するためのコントロールとしてスピンコントロール(スピンボックス)が採用されている。同様に、ユーザ領域の上限サイズを調整するためのコントロールとしてもスピンコントロール(スピンボックス)が採用されている。なお、CPU24は、一方の記憶領域の上限サイズがテキストボックスに入力されたり、スピンコントロールによって変更されたりすると、他方の記憶領域の上限サイズを算出して変更してもよい。不揮発性メモリ100の全記憶容量から一方の記憶領域の上限サイズを減算することで他方の記憶領域の上限サイズを算出できるからである。このように一方の記憶領域の上限サイズと他方の記憶領域の上限サイズとが関連している場合は、予めこれらの関連性を示す関数を用意しておくことで、CPU10は一方の記憶領域の上限サイズから他方の記憶領域の上限サイズを算出してもよい。
<記憶領域とファイルパスの管理>
ユーザに対しては複数の記憶領域をそれぞれ上限サイズを設定された個別の記憶領域であることを認識してもらうことで、プロジェクトデータやユーザデータの消費サイズに注意してもらうことが可能となろう。しかし、1つのドライブにおいて記憶領域ごとに複数のフォルダを作成する手法では、複数の記憶領域をそれぞれ上限サイズを設定された個別の記憶領域であることが分かりにくい。そこで、プログラム作成支援装置1から見たときの論理パスと、PLC2における実パスとを変えることで、複数の記憶領域がそれぞれ上限サイズを設定された個別の記憶領域であることを明示してもよい。
図11(A)は、領域管理テーブルの一例を示す図である。領域管理テーブル130は、記憶領域の名称である領域名と、プログラム作成支援装置1から見たときの記憶領域のパスである論理パスと、PLC2における記憶領域の実際のパスである実パスと、記憶領域に設定されている上限サイズと、実際の消費サイズとを示す情報が含まれてもよい。基本ユニット3のCPU10は、領域管理テーブル130を参照することで、プログラム作成支援装置1から指定される論理パスを実パスに変更し、ファイルの読み書きを実行する。なお、CPU10は、上述した上限サイズの調整が実行されると、領域管理テーブル130に保持されている上限サイズを更新する。
図11(B)はファイルサイズ管理テーブルの一例を示す図である。CPU10は、各記憶領域に記憶されているファイルのサイズとその合計値(消費サイズ)を管理するためにファイルサイズ管理テーブル131を作成して維持している。基本ユニット3が起動すると、CPU10は、各記憶領域に記憶されているファイルをスキャンしてサイズの情報を取得し、ファイルサイズ管理テーブル131に登録する。また、CPU10は、ファイルの新規作成、更新、削除などのファイル操作が発生する度に、ファイルサイズを取得して、ファイルサイズ管理テーブル131を更新する。CPU10は、ファイルサイズ管理テーブル131を参照して各記憶領域に記憶されているファイルのサイズの合計値(消費サイズ)を算出し、領域管理テーブル130の消費サイズを更新する。CPU10は、消費サイズと上限サイズを比較することで、各記憶領域に設定された上限サイズを超えるようなファイルの書き込みが要求されると、警告を出力(表示または音声出力)したり、当該書き込みを禁止したりする。
<PLCの機能>
図12はPLC2の基本ユニット3に搭載されているCPU10がファームウエアを実行することで実現する機能の一例を示している。なお、すべての機能は必須というわけではなく、オプションであってもよい。記憶装置12は、揮発性メモリであるRAM141と2つの不揮発性メモリ100、142を有している。上述したように不揮発性メモリ100には複数の記憶領域が設けられ、プロジェクト領域にはプロジェクトデータが記憶され、ユーザ領域にはユーザデータが記憶される。もう一つの不揮発性メモリ142には、各記憶領域の上限サイズを示す情報や領域管理テーブル130やファイルサイズ管理テーブル131、イレース回数などが保持される。イレース回数は不揮発性メモリ100に対して実行されたイレース処理をカウントするための変数である。なお、不揮発性メモリ100の一部にこれらを記憶する記憶領域が確保されてもよい。なお、イレース回数に代えて書き換え回数がカウントされてもよい。
UI制御部143は、表示部5に対するユーザインタフェース120’の表示や操作部6から操作の入力を受け付けるユニットである。読み書き制御部144は、記憶装置12に対する読み書きを担当するユニットである。読み書き制御部144には様々な機能が含まれる。サイズ取得部145は、不揮発性メモリ100の各記憶領域における実際の消費サイズを取得するユニットであり、上述した領域管理テーブル130やファイルサイズ管理テーブル131を管理している。書き込み判定部146は、不揮発性メモリ100に確保されている記憶領域に対するファイルの書き込み要求を実行できるかどうかを、上限サイズと消費サイズとに基づいて判定するユニットである。速度制御部147は不揮発性メモリ100に対するデータの書き込み速度(例:所定時間当たりの平均書き込み速度)を制御するユニットである。警告部148は、上限サイズの変更が許容されない場合やファイルの書き込みが禁止されるべき場合に警告を表示部5やスピーカー(不図示)から出力するユニットである。読み書き制御部144は、ファイル転送プロトコル(FTPなど)などの通信プログラムが実装されており、通信部14を通じて外部機器と通信してデータの読み書きを実行してもよい。
サイズ調整部150は、不揮発性メモリ100に確保されている複数の記憶領域のそれぞれの上限サイズを調整するユニットである。受付部151は、操作部6やプログラム作成支援装置1から上限サイズの変更要求を受け付けるユニットである。可否判定部152は、操作部6やプログラム作成支援装置1によって要求された上限サイズの調整を反映できるかどうかを判定するユニットである。サイズ調整部150は、上限サイズの調整を反映可能と判定すると、領域管理テーブル130に保持されている上限サイズを調整後の上限サイズでもって更新する。
ここではPLC2が主体となって上限サイズを調整する例を示しているが、プログラム作成支援装置1が主体となってもよい。とりわけ、プログラム作成支援装置1が記憶装置12にアクセスできる場合、読み書き制御部144やサイズ調整部150の機能の大半はプログラム作成支援装置1のCPU24によって実現されてもよい。
<プログラム作成支援装置の機能>
図13はプログラム作成支援装置1に搭載されているCPU24が設定プログラム161を実行することで実現する機能の一例を示している。なお、すべての機能は必須というわけではなく、オプションであってもよい。記憶装置25の編集ソフト記憶部25bには、上限サイズを調整して設定する設定プログラム161が記憶されている。また、記憶装置25のラダープログラム記憶部25aには、プロジェクトデータ162が記憶されている。また、記憶装置25にはユーザデータ163が記憶されている。
CPU24は例えば次のような機能を実現する。サイズ取得部164は、記憶装置25に記憶されているプロジェクトデータ162のサイズとユーザデータのサイズを取得するユニットである。これらは上述した必要サイズである。これらはPLC2に対して書き込みの対象となっているデータである。また、サイズ取得部164は、通信部26を介してPLC2と通信し、各記憶領域の上限サイズや消費サイズを取得してもよい。サイズ設定部165は、スライダーバー121の移動量やテキストボックスまたはスピンボックスに入力された数値に基づき、各記憶領域の上限サイズを算出し、算出した上限サイズを指定した上限サイズの変更要求をPLC2に対して通信部26を介して送信するユニットである。UI制御部166はユーザインタフェース120の表示を制御したり、操作部8からの入力を受け付けたりするユニットである。UI制御部166は、サイズ取得部164によって取得された上限サイズや消費サイズに応じてバーグラフを作成したり、境界126の位置を確定したり、操作部から入力された指示に応じてスライダーバー121の表示位置を変更したりする。また、UI制御部166は、サイズ取得部164を通じて取得した各記憶領域の上限サイズ、必要サイズおよび消費サイズに基づき表123を作成して、ユーザインタフェース120に表示してもよい。可否判定部167は、サイズ設定部165により設定された上限サイズをPLC2に対して反映させることができるかどうかを判定するユニットである。可否判定部167は、たとえば、消費サイズと上限サイズとを比較してもよいし、消費サイズと上限サイズとの比較結果をPLC2の可否判定部152から取得し、比較結果が上限サイズを変更可能であることを示しているのかそれとも不可能であることを示しているのかを判定してもよい。
<フローチャート>
図14は、PLC2のCPU10が実行する上限サイズの設定処理を示すフローチャートである。PLC2の操作部6やプログラム作成支援装置1の操作部8を通じて上限サイズの設定処理の開始が指示されるとCPU10は以下の処理を実行する。なお、上限サイズの設定処理が開始されると、読み書き制御部144は、不揮発性メモリ100に対するデータの書き込みを禁止または制限してもよい。上限サイズの設定処理は、プロジェクトデータに含まれているラダープログラムが実行されている期間においても実行可能であり、実行されていない期間においても実行可能である。
S11でCPU10(サイズ取得部145)は不揮発性メモリ100の各記憶領域における消費サイズを取得する。たとえば、サイズ取得部145は、ファイルサイズ管理テーブル131を参照して各ファイルのサイズを取得し、取得したサイズを加算して合計値を算出する。なお、これから書き込まれるファイルについて必要サイズが必要な場合は、プログラム作成支援装置1から必要サイズを取得する。
S12でCPU10(受付部151)は上限サイズの調整を受け付ける。受付部151は操作部6やプログラム作成支援装置1から指定される上限サイズの調整量を受け付ける。
S13でCPU10(可否判定部152)は上限サイズの調整をPLC2に対して反映可能かどうかを判定する。可否判定部152は受付部151により受け付けられた各記憶領域の上限サイズとサイズ取得部145によって取得された消費サイズに基づき、上限サイズの調整を反映可能かどうかを判定する。なお、これからプログラム作成支援装置1によって作成されたプロジェクトデータ162やユーザデータ163が書き込まれるタイミングでは、可否判定部152は、上限サイズと必要サイズとに基づき、上限サイズの調整を反映可能かどうかを判定する。調整を反映可能でない場合、可否判定部152は警告部148に警告の出力を指示し、S14に進む。
S14でCPU10(警告部148)は上限サイズを調整できないことを示す警告メッセージを表示部5に出力する。一方で、調整を反映可能であればS15に進む。
S15でCPU10(サイズ調整部150)は、上限サイズの調整を反映させる。たとえば、サイズ調整部150は、読み書き制御部144に対して領域管理テーブル130などによって管理されている各記憶領域の上限サイズを、指定した上限サイズで更新するよう指示する。読み書き制御部144は、指定された上限サイズで領域管理テーブル130などによって管理されている各記憶領域の上限サイズを書き換える。
S16でCPU10(読み書き制御部144)は不揮発性メモリ100に対するデータの書き込みを再開する。読み書き制御部144は、たとえば、プログラム作成支援装置1から送信されてきた新しいプロジェクトデータをプロジェクト領域に書き込み、領域管理テーブル130とファイルサイズ管理テーブル131を更新する。同様に、読み書き制御部144は、プログラム作成支援装置1から送信されてきた新しいユーザデータをユーザ領域に書き込み、領域管理テーブル130とファイルサイズ管理テーブル131を更新する。
<ユーザ領域に対するデータの書き込み単位>
PLC2のCPU24のロギング部153はラダープログラムなどのユーザプログラムを実行することで生成されたデータをログとして記録する。ロギング部153はこのようなロギングデータをユーザ領域に書き込む。ところで、ユーザはPLC2の電源スイッチをオフにすることでPLC2の動作電力を簡単に遮断することができる。そのため、ユーザによってロギングデータの書き込み中に電源スイッチがオフにされると、ロギングデータの書き込みが中途半端な状態で終了してしまう可能性がある。
そこで、ロギング部153は、ユーザプログラムを実行することで生成されるロギングデータを一定のサンプリング数を単位としてユーザ領域に書き込むことにする。一般にファイルシステムではトランザクションを単位としてデータを書き込む。よって、ロギング部153が1つのトランザクションに相当するサンプリング数のデータを一塊としてユーザ領域に書き込むことで、ロギングデータの中途半場な書き込みを抑制できるようになる。たとえば、1つのトランザクションがn個のサンプルから構成される場合、ロギング部153は、n個のサンプルずつロギングデータをユーザ領域へ書き込む。
<書き込み速度の制御>
不揮発性メモリ100などの記憶装置には性能上(設計上)の上限速度が存在する。よって、通常は、性能上の上限速度でデータが不揮発性メモリ100に書き込まれる。その一方で、不揮発性メモリ100をフラッシュメモリやEEPROMで構成する場合、不揮発性メモリ100にはイレース回数や書き換え回数の制限が存在する。この制限を超えると不揮発性メモリ100に書き込むことが不可能となってしまう。PLC2には設計段階で製品寿命(期待寿命)が想定され、その製品寿命を下回らないように各部品が選択される。よって、不揮発性メモリ100の寿命がPLC2の期待寿命を下回らないように、不揮発性メモリ100への書き込みを制限する必要がある。
たとえば、書き込み制御部144の速度制御部147は、不揮発性メモリ100への情報の書き込み速度を不揮発性メモリ100の性能上の上限速度よりも低速な書き込み速度に制限してもよい。ここで、書き込み速度は、ある所定期間における平均書き込み速度である。速度制御部147が書き込み用のバッファに保持されているデータを不揮発性メモリ100に対して間欠的(一定の待機時間ごとに)に出力することで、ある所定期間における平均書き込み速度を低下させることが可能となる。これにより、ある所定期間に発生するイレース回数や書き換え回数が制限されるため、不揮発性メモリ100の寿命がPLC2の期待寿命を下回らないようになる。なお、ある所定期間における平均書き込み速度は、不揮発性メモリ100の寿命(イレース回数や書き換え回数の上限値)とPLC2の期待寿命とから算出される。つまり、期待寿命内でのイレース回数や書き換え回数が上限値以下となるように、平均書き込み速度が算出される。
ところで、プロジェクトデータの書き換え頻度はそれほど多くないが、ユーザプログラムを実行することで発生するロギングデータなどのユーザデータの書き換え頻度は相対的に多い。そこで、速度制御部147は、不揮発性メモリ100に対する書き込みの対象となっているデータの種別(プロジェクトデータか、ユーザデータかなど)に応じて書き込み速度を制限してもよい。たとえば、速度制御部147は、プロジェクト領域に対するプロジェクトデータの書き込みを検知すると、書き込み速度を高速に設定する。一方で、速度制御部147は、ユーザ領域に対するユーザデータの書き込みを検知すると、書き込み速度を低速に設定する。このように書き換え頻度の多い種別のデータについては書き込み速度を低速にすることで、効率よく、不揮発性メモリ100の寿命を延ばすことができる。一方で、プロジェクトデータのような比較的にサイズの大きなデータについて書き込み速度を低下させてしまうと、プログラム作成支援装置1からPLC2へのデータの転送時間が長くなり、ユーザビリティが低下する。よって、このような種別のデータについては書き込み速度を高速とし、ユーザビリティ向上させる。
なお、このような低速化は、プログラム作成支援装置1からの書き込み要求には適用されず、PLC2内で発生した書き込み要求にだけ適用されてもよい。速度制御部147は、ユーザプログラムの実行によって発生する情報の書き込み速度を制限し、プログラマブル・ロジック・コントローラの起動時、メンテナンス時またはプログラム作成支援装置1からのユーザプログラムまたはユーザデータの転送時には書き込み速度を制限しないようにしてもよい。これにより不揮発性メモリ100の寿命がPLC2の期待寿命を下回らないようにしつつ、高速に書き込むことが必要な情報については高速に書き込むことが可能となる。つまり、PLC2の期待寿命内で実行されるイレース回数や読み書き回数が不揮発性メモリ100の寿命回数を超えないようになる。
<イレース回数に基づく警告>
不揮発性メモリ100のイレース回数が不揮発性メモリ100の寿命回数を超えると、不揮発性メモリ100にはもはや情報を書き込めなくなってしまう。これは、PLC2の交換や修理が必要となることを意味する。工場で製造ラインが稼働中にPLC2の動作が停止してしまうと、製造ラインの稼働率が低下してしまう。製造ラインの稼働中におけるPLC2の動作停止を回避するためには、不揮発性メモリ100の寿命が近づいた時に、ユーザにそれを警告して、PLC2の交換や修理を事前に促すことが望ましい。
そこで、カウント部154は、不揮発性メモリ100のセクタごとイレース回数または書き換え回数をカウントし、カウント値(イレース回数/書き換え回数)を不揮発性メモリ142に記憶させる。さらに、書き込み判定部146は、不揮発性メモリ100におけるいずれかのセクタについてのカウント値が閾値を超えると警告部148に警報を出力するよう指示する。警告部148に警報を表示部5や音声出力部(不図示)から出力する。
これにより不揮発性メモリ100の寿命が尽きる前にPLC2のメンテナンスをユーザに促すことが可能となる。
<ユーザデータの保全とユーザの使い勝手の向上>
上述したように不揮発性メモリ100などのプログラムメモリにプロジェクトデータだけでなくユーザデータを記憶することで、プログラムメモリの未使用領域を有効活用できるようになる。ところで、PLC2においてユーザデータを複数の記憶手段に保持しておけばデータの保全性が高まるであろう。ユーザはPLC2に接続されたプログラム作成支援装置1からユーザデータを書き込むことがあるが、複数の記憶手段はそれぞれ個別の記憶手段としてユーザには見えるため、ユーザは同一のデータを複数の記憶手段のそれぞれに書き込む必要があり、使い勝手に欠けるであろう。そこで、本実施の形態では、データの保全を図りつつユーザの使い勝手も向上することにする。
また、ユーザデータとしては、PLC2がラダープログラムを実行して生成するロギングデータなども含まれてもよい。この場合、ユーザデータはプロジェクトデータと比較して頻繁に書き換えられる。つまり、不揮発性メモリ100にユーザデータを保持すると、ユーザデータの頻繁な書き換えによって不揮発性メモリ100の寿命が尽きやすくなる。そこで、本実施の形態では、さらに、ユーザデータを複数の記憶手段に記憶することでデータの保全を図りつつ、代表記憶手段に対してデータの操作を許容することで複数の記憶手段の全体としての寿命を延ばす手法を提案する。
図15(A)および図15(B)は実施の形態の基本的な概念を説明するための図である。上述した記憶装置12は物理的に分割された複数の記憶部(半導体記憶素子などの記憶装置)を備えている。ここでは、最も簡単な例として、記憶装置12は第1メモリ200と第2メモリ210を有しているものとする。第1メモリ200は、たとえば、RAMなど高速に読み書き可能な揮発性メモリである。第2メモリ210は、たとえば、不揮発性メモリ100や着脱可能なメモリカードであり、RAMと比較して低速に読み書き可能なメモリである。なお、第1メモリ200や第2のメモリ210は、ネットワークドライブなど、必ずしもPLC2に内蔵されている必要はない。
第1メモリ200や第2メモリ210には必ずしもファイルシステムが構築されている必要はない。なぜなら、同一のデータを記憶して相互に同期していれば十分だからである。ただし、ここでは説明の便宜上、第1メモリ200や第2メモリ210にはファイルシステムに基づき論理ドライブが構築されているものとする。第1メモリ200には、RAMディスクなどの第1論理ドライブ203が構築されている。第2メモリ210には第1論理ドライブ203と同一のデータ(ファイル)を記憶するための第2論理ドライブ211が構築されている。なお、図15(A)が示すように、第2メモリ210には、第1論理ドライブ203と同期する必要のない第3論理ドライブ212が構築されていてもよい。
第1論理ドライブ203と第2論理ドライブ211には、頻繁に書き換えられ、かつ、高速にアクセスすることが望まれるユーザデータなどが記憶される。第1論理ドライブ203の書き換え可能回数が第2論理ドライブ211の書き換え可能回数よりも多い場合、第1論理ドライブ203が予め代表論理ドライブとして選択され、第1論理ドライブ203に対してファイル操作が実行される。第2論理ドライブ211は、予め定められた同期条件(例:定期的であってもよいし、トリガーが発生したことであってもよい)が満たされると、第1論理ドライブ203との同期処理を実行し、同一のファイルを保持する。なお、寿命よりも保全性(ファイルの同一性)を重視する場合、ファイルの書き込みは第1論理ドライブ203と第2論理ドライブ211とに同時に実行されてもよい。また、第1論理ドライブ203が高速で、第2論理ドライブ211が定速である場合、ファイルの読み出しは第1論理ドライブ203だけに実行されてもよい。
ところで、記憶装置に関する技術としてキャッシュという技術があるが、キャッシュは一部のファイルにだけ適用され、ドライブ全体の同期処理を行うものではない。また、本実施の形態では、第1論理ドライブ203の記憶容量と第2論理ドライブ211の記憶容量は実質的に同一であるが、キャッシュにおけるキャッシュメモリの記憶容量とキャッシュの対象となるファイルを記憶した記憶装置の記憶容量は大きく異なっている。また、ハードディスクドライブ(HDD)では、ミラーリング(RAID 1)という技術が存在するが、ミラーリング用のハードディスクドライブは同一の機種であり、RAMと不揮発性メモリのように読み書き性能や寿命などが大きく異なるものではない。
なお、第1論理ドライブ203と第2論理ドライブ211との同期はミラーリングのように頻繁に実行される必要はない。頻繁に実行してしまうと、第2論理ドライブ211の寿命を縮めてしまうことになるからである。
PLC2が起動したときに第2論理ドライブ211のユーザデータが第1論理ドライブ203に書き込まれ、両者の記憶内容が同期する。さらに、所定時間(例:数分、数時間)が経過する度に同期処理が実行されうる。なお、これとは異なる同期条件(例:同期指示の入力、ラダープログラムの終了など)が満たされたときに、同期処理が実行されてもよい。このように少なくともPLC2の起動から遅くとも動作電力の供給が遮断されるまでの間に一度以上の同期処理が実行される。
<ドライブ管理テーブルとファイル管理テーブル>
図16(A)は記憶装置12に備えられている複数の記憶装置とドライブとの関係を管理するドライブ管理テーブルの一例である。ドライブ管理テーブル133は記憶装置12の不揮発性メモリに格納される。
ドライブ管理テーブル133にはドライブごとにエントリーが作成される。各エントリーにはパス(ドライブ名など)、ファイルの読み出し対象となるメモリの名称、ファイルの書き込み対象となるメモリの名称、プログラム作成支援装置1などの外部の情報処理装置に対してドライブを公開するかどうかを示すフラグなどが含まれている。この例では、第1メモリ200に第1論理ドライブ(/MEM1)が構築されており、第2メモリ210に第2論理ドライブ(/MEM2)が構築されていることが示されている。第1論理ドライブ(/MEM1)に対してファイルの読み出し要求があると、第1メモリ200に対してファイルの読み出しが実行される。第1論理ドライブ(/MEM1)に対してファイルの書き込み要求があると、第1メモリ200と第2メモリ200に対してファイルの書き込みが実行される。つまり、第1メモリ200の第1論理ドライブ(/MEM1)に対するファイルの書き込みは、第2メモリ210の第2論理ドライブ(/MEM2)にも実行される。たとえば、第1メモリ200が高速な揮発性メモリであり、第2メモリ210が低速な不揮発性メモリである場合、第1メモリ200から対象ファイルを高速に読み出すことが可能となり、また、PLC2が電源からの電力を遮断されても対象ファイルは第2メモリ210によって保全されることになる。なお、第2メモリ210への書き込みは第1メモリ200とほぼ同時に実行されてもよいし、ある程度時間が経過してから同期処理によって実行されてもよい。
ドライブ管理テーブル133によれば、第2論理ドライブ(/MEM2)に対してファイルの読み出し要求があると、第2メモリ210に対してファイルの読み出しが実行される。第2論理ドライブ(/MEM2)に対してファイルの書き込み要求があると、第2メモリ210に対してファイルの書き込みが実行される。第2論理ドライブ(/MEM2)のファイルが更新されると、第1論理ドライブ(/MEM1)と第2論理ドライブ(/MEM2)の同期処理が実行されることになる。
第1論理ドライブ(/MEM1)は、プログラム作成支援装置1などの外部の情報処理装置に対して公開されているため、外部の情報処理装置が第1論理ドライブ(/MEM1)にファイルを書き込むことができる。第2論理ドライブ(/MEM2)は公開されていないため、外部の情報処理装置から直接的にファイルを書き込むことはできない。しかし、PLC2は、ドライブ管理テーブル133を参照し、第1論理ドライブ(/MEM1)だけでなく第2論理ドライブ(/MEM2)にもファイルの書き込みを実行する。
図16(B)はファイル管理テーブルの一例を示す図である。ファイル管理テーブル134は各ドライブごとに作成されて、記憶装置12の不揮発性メモリに格納される。ファイル管理テーブル134には、ファイル名とパスを示す情報であるファイルパスと、ファイルの操作(書き換え)日時を示すタイムスタンプと、ディレクトリなのかそれともファイルなのかを示す属性の情報とが含まれている。第1論理ドライブ(/MEM1)と第2論理ドライブ(/MEM2)の同期処理を実行すると、PLC2は、各ドライブのファイル管理テーブル134を参照し、タイムスタンプに基づいて古いファイルを新しいファイルで上書きしたり、新規のファイルをコピーしたりして、第1論理ドライブ(/MEM1)と第2論理ドライブ(/MEM2)の記憶内容を最新の状態に同期させる。
図16(C)はファイル管理テーブルの他の例を示す図である。ファイルの新旧を判断する情報として、タイムスタンプの代わりにファイルの更新回数(書き換え回数)が採用されている。これにより、PLC2は、更新回数の多いファイルを更新回数の少ないファイルに対して上書きして、第1論理ドライブ(/MEM1)と第2論理ドライブ(/MEM2)の記憶内容を最新の状態に維持する。なお、PLC2のCPU10は、ファイルの操作(追記、書き込み、書き換え、上書き、消去など記憶内容の変更をもたらすもの)を監視しており、ファイルの操作を検出するたびにファイル管理テーブル134を更新する。たとえば、CPU10は第1論理ドライブ(/MEM1)において/aaa/bbb.txtの書き換えを検出すると、ファイル管理テーブル134をサーチしてこのファイルのエントリーを発見し、発見したエントリーにおける更新回数を30回から31回へと更新する(図16(C)で示す更新回数が重複しないように、ファイル管理テーブル134の全ディレクトリ及び全ファイルの更新回数をサーチし、最大の更新回数に1を足した値、ここでは31回へと更新する)。また、CPU10は、第1論理ドライブ(/MEM1)のファイル管理テーブル134と第2論理ドライブ(/MEM2)のファイル管理テーブル134とを比較する。CPU10は、比較の結果に応じて、第1論理ドライブ(/MEM1)に記憶されている/aaa/bbb.txtの更新回数が31回であり、第2論理ドライブ(/MEM2)に記憶されている/aaa/bbb.txtの更新回数が20回であることを認識する。CPU10は、第1論理ドライブ(/MEM1)に記憶されている/aaa/bbb.txtが第2論理ドライブ(/MEM2)に記憶されている/aaa/bbb.txtよりも新しいことを認識する。その結果、CPU10は、第1論理ドライブ(/MEM1)に記憶されている/aaa/bbb.txtを第2論理ドライブ(/MEM2)の/aaa/bbb.txtに上書きし、第2論理ドライブ(/MEM2)に記憶されている/aaa/bbb.txtの更新回数を31回に更新する。
このような同期処理は予め設定された同期条件が満たされると実行される。同期条件としては、たとえば、定期的であってもよいし、あるいは、第1論理ドライブ(/MEM1)において操作されたファイルの数をカウントし、カウント値が所定の閾値を超えたことであってもよい。
CPU10は、ファイル管理テーブル134を参照し、第1論理ドライブ(/MEM1)から削除されたファイルが第2論理ドライブ(/MEM2)に未だに記憶されていることを検知すると、第2論理ドライブ(/MEM2)から当該ファイルを削除し、そのファイルのエントリーも第2論理ドライブ(/MEM2)のファイル管理テーブル134から削除する。
CPU10は、ファイル管理テーブル134を参照し、第1論理ドライブ(/MEM1)に第2論理ドライブ(/MEM2)には記憶されていない新規のファイルを検知すると、第2論理ドライブ(/MEM2)に対して当該ファイルをコピーし、そのファイルのエントリーも第2論理ドライブ(/MEM2)のファイル管理テーブル134に対してコピーする。
なお、ここではファイルの同期処理について説明したが、ディレクトリについても同様の同期処理が適用される。たとえば、ある新規のファイルが新規のディレクトリに格納されていることを検知すると、CPU10は、新規のディレクトリを作成し、作成した新規のディレクトリに新規のファイルを書き込む。また、CPU10は、新規のディレクトリのエントリーと新規のファイルのエントリーを第1論理ドライブ(/MEM1)のファイル管理テーブル134から第2論理ドライブ(/MEM2)のファイル管理テーブル134にコピーする。
図16(A)に示したように複数のメモリへの同時書き込みが設定されている場合、あるファイルを第1論理ドライブ(/MEM1)と第2論理ドライブ(/MEM2)とに書き込もうとしたときに、両者のファイル管理テーブル134が一致していないことがある。たとえば、ある種類のファイルについては即時に両方のドライブに書き込まれるが、別の種類のファイルについては一方のドライブには即時に書き込み、他方のドライブには遅延して書き込むといった設定が有効な場合にこのような事態が発生する。より具体的には、/xxxというディレクトリにyyy.txtを書き込むといった要求が発生したときに、第1論理ドライブ(/MEM1)には/xxxというディレクトリが存在するが、第2論理ドライブ(/MEM2)には/xxxというディレクトリが存在しないことがある。この場合、第2論理ドライブ(/MEM2)にyyy.txtを書き込めない。そこで、CPU10は、あるファイルの書き込み要求を受け付けると、第1論理ドライブ(/MEM1)と第2論理ドライブ(/MEM2)とを同期させてから、このファイルの書き込み要求を実行してもよい。上述した例であれば、CPU10は同期処理によって、第2論理ドライブ(/MEM2)に/xxxというディレクトリを作成した後で、yyy.txtの書き込み処理を第1論理ドライブ(/MEM1)と第2論理ドライブ(/MEM2)に実行する。
ところで、電源から電力を供給されてPLC2が起動すると、第1論理ドライブ(/MEM1)と第2論理ドライブ(/MEM2)との記憶内容が一致していないことがある。たとえば、第1メモリ200がRAMであり、第2メモリ210が不揮発性メモリである場合、第1メモリ200の第1論理ドライブ(/MEM1)の記憶内容は電源オフによって失われており、第2論理ドライブ(/MEM2)と齟齬を生じする。そこで、CPU10は、電源から電力を供給されてPLC2が起動すると、第2論理ドライブ(/MEM2)から第1論理ドライブ(/MEM1)へ同期処理を実行し、両者の記憶内容を一致させてもよい。
上述したように第1メモリ200がRAMであり、第2メモリ210が不揮発性メモリを搭載したメモリカードであってもよい。CPU10は、メモリカードが挿入されているときは、RAMとメモリカードとの双方に書き込みを実行し、RAMからのみ読み出しを実行する。メモリカードがアンマウントされると、CPU10は、RAMにのみ書き込みと読み出しを実行する。さらに、メモリカードがPLC2に挿入されて再度マウントされると、CPU10は、RAMからメモリカードに対して同期処理を実行する。このような同期処理はメモリカードが故障したときに、ファイルの書き込みを中断することなく、メモリカードを交換できる点で有利である。なお、メモリカードに対しても同時書き込みではなく、時間差書き込み(同期処理など)が採用されてもよい。
上述したように第1メモリ200がRAMであり、第2メモリ210がネットワークストレージ(不揮発性の記憶装置)であってもよい。ネットワークストレージはFTPなどの汎用のファイル転送プロトコルや専用のファイル転送プロトコルによってファイルが読み書きされるネットワーク上の記憶装置である。CPU10は、PLC2がネットワークストレージに接続されると、RAMとネットワークストレージとの双方に書き込みを実行し、RAMからのみ読み出しを実行する。ネットワークストレージとの通信が切断されると、CPU10は、RAMにのみ書き込みと読み出しを実行する。さらに、ネットワークストレージとの通信が回復すると、CPU10は、RAMからネットワークストレージに対して同期処理を実行する。このような同期処理は通信障害やネットワークストレージのメンテナンスによってネットワークストレージとの通信が切断されたときに、ファイルの書き込みを中断しなくて済むため、有利である。
<同期処理の関する機能>
図17はPLC2の基本ユニット3に搭載されているCPU10がファームウエアを実行することで実現する機能の一例を示している。なお、すべての機能は必須というわけではなく、オプションであってもよい。また、上述したいくつかの機能(たとえば、速度制御機能やイレース回数に基づき警告機能など)も含まれていてもよいが、その機能の説明はすでに説明済みであるため、説明を省略する。
記憶装置12には揮発性のメモリや不揮発性のメモリなど様々なメモリが含まれている。この例では、高速で揮発性の第1メモリ200に第1論理ドライブ203が構築されており、低速で不揮発性の第2メモリ210に第2論理ドライブ211が構築されている。第1論理ドライブ203と第2論理ドライブ211はそれぞれ同一のデータが格納される複数の記憶手段の一例である。第3メモリ220は揮発性または不揮発性のメモリであり、ドライブ管理テーブル133やファイル管理テーブル134などを記憶する。
受付部244は、ロギング部153、操作部6または通信部14を介した外部の情報処理装置からファイル(データ)の読み出し要求や書き込み要求を受け付ける機能である。上述したように通信部14は、汎用のファイル転送プロトコルや専用のファイル転送プロトコルを実装し、外部の情報処理装置(例:PCやプログラム作成支援装置1)と通信する。受付部244が受け付けたファイル操作要求はデータ操作部241に渡される。このファイル操作要求は、たとえば、複数のメモリ(ドライブ)のうち少なくとも予め選択された代表記憶手段であるメモリやドライブに対するデータの操作要求である。データ操作部241は、受付部244が受け付けたデータ(データはファイル形式で格納されてもよい)の操作要求を少なくとも予め選択された代表メモリまたは代表論理ドライブに対して実行する。なお、プログラム作成支援装置1や操作部6を通じて第1メモリ200と第2メモリ210への同時書き込みが設定されている場合、データ操作部241は代表メモリである第1メモリ200だけでなく、第2メモリ210にも同一のデータを書き込む。なお、データの操作要求が読み出し要求である場合、データ操作部241は、代表メモリである第1メモリ200からデータを読み出し、第2メモリ210にはアクセスしない。
同期部242は、第1メモリ200の第1論理ドライブ203の記憶内容と第2メモリ210の第2論理ドライブ211の記憶内容とを同期させる機能である。上述したように同期部242は、ドライブ管理テーブル133やファイル管理テーブル134を参照し、これらの記憶内容が一致するように同期処理を実行する。このように同期部242は、複数の論理ドライブがそれぞれ同一のデータを格納したファイルを記憶するようファイルの同期処理を実行する同期手段として機能する。同期部242は、プログラム作成支援装置1から通信部14を介して複数の論理ドライブ間での同期の対象となるファイルまたはディレクトリを指定されてもよい。この場合、同期部242は、指定されたファイルまたはディレクトリについて同期処理を実行する。
テーブル管理部243は、ドライブ管理テーブル133やファイル管理テーブル134を作成したり、更新したりする機能である。同期部242がファイルの同期処理を実行すると、更新内容をファイル管理テーブル134に反映させる。テーブル管理部243は、各論理ドライブの公開/非公開や同時書き込みまたは同期処理の対象となる2つ以上の論理ドライブなどの情報を、PLC2の操作部6やプログラム作成支援装置1から受け付けてドライブ管理テーブル133に書き込む。テーブル管理部243は、ファイル管理テーブル134を用いて、ファイルのタイムスタンプや更新回数を管理している。テーブル管理部243は、各ファイルの更新回数をカウントし、ファイル管理テーブル134に更新回数を登録する。
上述したようにドライブ管理テーブル133によって公開するよう設定されている論理ドライブについては、データ操作部241は、プログラム作成支援装置1の表示部7に当該論理ドライブの記憶内容が表示されるよう、この論理ドライブをプログラム作成支援装置1に公開する。通常、代表論理ドライブとして指定されている第1論理ドライブ203が公開に設定され、代表論理ドライブとして指定されていない第2論理ドライブ211が非公開に設定される。このように、データ操作部241は、プログラム作成支援装置1が複数の論理ドライブのうち代表論理ドライブをプログラム作成支援装置1の表示部7に表示するよう、代表論理ドライブをプログラム作成支援装置1に公開する。なお、第2論理ドライブ211の公開/非公開は、必ずしも設定されなくてもよい。
図18はプログラム作成支援装置1に搭載されているCPU24が設定プログラム161を実行することで実現する機能の一例を示している。同期設定部250は、同期処理の対象となる複数の論理ドライブを選択して設定したり、代表論理ドライブを設定したり、各論理ドライブごとの公開/非公開を設定したり、同期処理の対象となるファイルやディレクトリを指定したりする機能である(これらのうち、いずれか一つ又は複数の設定・指定を行ってもよい)。このように、同期設定部250は、代表論理ドライブを選択する選択手段として機能する。
ファイルマネージャ251は、PLC2で公開されている論理ドライブにアクセスし、論理ドライブに格納されているファイルやディレクトリの名称をUI制御部166を通じて表示部7に表示したり、当該論理ドライブからファイルを読み出したり、当該論理ドライブへファイルを書き込んだりする機能である。
<同期処理等のフローチャート>
図19は同期処理に関連した各工程を示すフローチャートである。PLC2のCPU10は、PLC2に電源から電力が供給されて起動すると、以下の各工程を実行する。
S21でCPU10(同期部242)はドライブ管理テーブル133を参照し、同期処理の対象となっている複数の論理ドライブ間で記憶内容が一致させるための同期処理を開始する。第1メモリ200の第1論理ドライブ203と第2メモリ210の第2論理ドライブ211が同期対象となっている場合、同期部242は、揮発性の第1メモリ200を初期化して第1論理ドライブ203を作成し、第2論理ドライブ211の記憶内容を第1論理ドライブ203に複製する。複製が完了すると、同期部242はテーブル管理部243に第2論理ドライブ211のファイル管理テーブル134を生成するよう指示する。テーブル管理部243は、第2論理ドライブ211をサーチしてファイル管理テーブル134を作成してもよいし、第1論理ドライブ203のファイル管理テーブル134をコピーして第2論理ドライブ211のファイル管理テーブル134を作成してもよい。なお、テーブルの更新時や同期処理の実行時はファイルが操作されないよう、データ操作部241がファイル操作を一時的に禁止してもよい。
S22でCPU10(受付部244)はファイル操作の要求を受け付けたかどうかを判定する。ファイル操作の要求が発生していなければ、S23に進む。
S23でCPU10(同期部242)は同期条件が満たされたかどうかを判定する。同期条件が満たされていなければ、S22に戻る。同期条件が満たされるとS24に進む。
S24でCPU10(同期部242)は同期処理を実行する。同期部242は、たとえば、第1論理ドライブ203のファイルに対する操作内容を第2論理ドライブ211に反映させる。同期部242は、複数の論理ドライブ間で記憶内容の差分を特定し、当該差分のみを複数の論理ドライブ間で反映させることで、複数の論理ドライブにそれぞれ同一のファイルを格納させてもよい。つまり、複数の論理ドライブ間で一致しているファイルについては更新しないものとする。これにより不揮発性メモリである第2メモリ210の寿命を延ばすことが可能となろう。同期部242は、複数の論理ドライブのそれぞれに記憶されているファイルのタイムスタンプまたは更新回数をファイル管理テーブル134をから取得して比較し、比較結果に応じて複数の論理ドライブのそれぞれに記憶されているファイルを同期してもよい。より具体的に説明すると、同期部242は、複数の論理ドライブのそれぞれに記憶されている同一のファイル名を付与されているファイルのタイムスタンプを比較し、最新のタイムスタンプを付与されているファイルをそれよりも古いタイムスタンプを付与されているファイルに対して上書きしてもよい。また、同期部242は、複数の論理ドライブのそれぞれに記憶されている同一のファイル名を付与されているファイルの更新回数を比較し、最多の更新回数のファイルをそれよりも少ない更新回数のファイルに対して上書きしてもよい。このようにタイムスタンプや更新回数を比較することでどちらの論理ドライブに記憶されているファイルが最新のものであるかを判別できるようになる。なお、テーブル管理部243は、同期部242によって同期されたファイルについてのファイル管理テーブル134のエントリーを更新する。これによりタイムスタンプや更新回数も更新されることになる。同期処理が完了すると、S22に戻る。このように操作要求が発生しない期間においては、同期条件が満たされたときに同期処理が実行される。S22で操作要求が受け付けられると、S25に進む。
S25でCPU10(同期部242)は同期処理を実行する。同期処理の内容はS24で説明したとおりである。ファイル操作の前に同期処理を実行することには、いくつかの理由がある。一般に、制御に関連したデータは、最新のデータであることを前提に制御に利用される。よって、古いデータは現在のPLC2の状態から乖離しており、これを利用すると制御が発散するかもしれない。よって、最新のファイルが利用されるよう、事前に同期処理が実行されることが望ましい。なお、同期処理の対象は、操作要求のあったファイルだけでもよい。これにより短時間で同期処理を終了できるからである。
S26でCPU10(データ操作部241)は要求されたファイル操作を実行する。たとえば、データ操作部241は、読み出し要求に応じてファイルの読み出し操作を代表論理ドライブに対して実行する。また、データ操作部241は、書き込み要求に応じてファイルの書き込み操作を代表論理ドライブに実行する。なお、データ操作部241は、書き込み要求に応じてファイルの書き込み操作を代表論理ドライブと、同期対象として指定されている他の論理ドライブとに対して、つまり複数の論理ドライブのすべてに対して実行してもよい。なお、ファイルの書き込みについても代表論理ドライブにだけ実行したほうが、他の論理ドライブの寿命の観点では有利であろう。ただし、双方を書き込み対象とすれば、データの保全性の面で有利であろう。
S27とS28はオプションである。S27でCPU10(同期部242)は操作部6を通じてシャットダウン(電源オフ)が指示されたかどうかを判定する。シャットダウンの指示は、PLC2に対する電力の供給を停止するための指示である。シャットダウンが指示されていなければS22に戻る。シャットダウンが指示されるとS28に進む。S28でCPU10(同期部242)は第1メモリ200の第1論理ドライブ203に記憶されているデータを第2メモリ210の第2論理ドライブ211に同期させる。これにより、最新のデータが不揮発性の第2メモリ210の第2論理ドライブ211に保持されることになる。シャットダウン時の同期処理が完了すると、CPU10は、PLC2に対する電源からの電力の供給を遮断する。
なお、シャットダウンの機能は必須ではなく、ハードウエアスイッチによって即座にPLC2に対する電源からの電力の供給が遮断されてもよい。ただし、この場合であってもPLC2の起動から停止までの間には同期処理が実行される機会が少なくとも1回はある可能性が高く、十分安全にデータが保全されよう。
<まとめ>
本実施形態では、ユーザプログラムとユーザデータとを記憶する記憶手段の一例として不揮発性メモリ100について説明した。また、不揮発性メモリ100において、ユーザプログラムを記憶するために許容される記憶領域(プロジェクト領域)の上限サイズと、ユーザデータを記憶するために許容される記憶領域(ユーザ領域)の上限サイズとのうちいずれかを確定するための情報を保持する保持手段として不揮発性メモリ142や領域管理テーブル130について説明した。読み書き制御部144は、不揮発性メモリ142や領域管理テーブル130に保持されている情報によって確定する上限サイズを超えない範囲でユーザプログラムまたはユーザデータを不揮発性メモリ100に書き込む。このように不揮発性メモリ100における複数の記憶領域のうち少なくとも1つの領域について上限サイズを設定することで、残りの未使用領域を他の記憶領域として使用することが可能となる。たとえば、ユーザプログラムについて想定される上限(最大)サイズを管理することで、残りの未使用領域を他の記憶領域(ユーザ領域)として使用することが可能となる。また、ユーザデータの上限サイズを管理することで、残りの未使用領域を他の記憶領域(プロジェクト領域)として使用することが可能となる。いずれの場合もメンテナンス等によるユーザプログラムのサイズの拡大を想定して、十分なサイズのプロジェクト領域を確保するように、上限サイズを決定することになろう。これにより、PLCにおいてユーザプログラムが記憶される記憶手段の未使用領域を有効活用することが可能となる。また、ユーザプログラムやユーザデータの上限サイズを超えない範囲でユーザプログラムやユーザデータを不揮発性メモリ100に書き込むようにしたので、ユーザプログラムの改変時の問題も緩和できるようになる。つまり、ユーザプログラムを改変してもユーザプログラムを不揮発性メモリ100に書き込めなくなってしまったり、ユーザデータを書き込めなくなってしまったりといった課題のいずれかが解決されよう。
不揮発性メモリ142や領域管理テーブル130は、不揮発性メモリ100においてユーザプログラムを格納可能な第1記憶領域(プロジェクト領域)と、ユーザデータを格納可能な第2記憶領域(ユーザ領域)との境界126となる記憶位置を保持していてもよい。図7などを用いて説明したように、境界126となる記憶位置は、アドレスであってもよいし、プロジェクト領域の上限サイズとユーザ領域の上限サイズとを個別に管理することで、実質的に境界126となる記憶位置が管理されてもよい。もちろん、記憶位置を管理せずに、単純に上限サイズだけを管理してもよい。これは、記憶領域の上限サイズを実際の消費サイズが超えなければ、十分だからである。
図12などを用いて説明したように、受付部151は、プロジェクト領域とユーザ領域との境界となる記憶位置の変更要求を受け付ける。サイズ調整部150は、受け付けられた変更要求にしたがってプロジェクト領域とユーザ領域との境界となる記憶位置を変更する変更手段として機能してもよい。これにより、プロジェクト領域の上限サイズやユーザ領域の上限サイズを変更することが可能となる。
図11(A)を用いて説明したように、不揮発性メモリ142や領域管理テーブル130は、ユーザプログラムを記憶するために許容される記憶領域の上限サイズと、ユーザデータを記憶するために許容される記憶領域の上限サイズとの両方を保持していてもよい。上述したように、片方の上限サイズだけを保持しておいて他方の上限サイズについては算出されてもよい。不揮発性メモリ100の全記憶領域のサイズは既知であるため、これを利用して片方の上限サイズから他方の上限サイズは簡単に求められる。
図7などを用いて説明したように、不揮発性メモリ100の全記憶領域のうち、ユーザプログラムを記憶するために許容される第1記憶領域以外の残りの第2記憶領域内にユーザデータが記憶される。これにより元々はプロジェクト領域専用のものであった不揮発性メモリ100の未使用領域を有効活用することが可能となる。
図12を用いて説明したように、サイズ取得部145は、不揮発性メモリ100においてユーザプログラムを記憶するために消費されている記憶領域の消費サイズを取得してもよい。サイズ調整部150は、不揮発性メモリ100における全記憶領域のサイズからユーザプログラムについての消費サイズを減算して得られる残りの記憶領域のサイズを超えない範囲でユーザデータの記憶領域の上限サイズを設定する。これにより、すでに不揮発性メモリ100に記憶されているユーザプログラムを破棄することなく、安全に上限サイズを調整することが可能となる。
図12を用いて説明したように、サイズ取得部145は、不揮発性メモリ100においてユーザプログラムとユーザデータを記憶するために実際に消費されている記憶領域の消費サイズを取得してもよい。可否判定部152は、消費サイズとユーザデータを記憶するための記憶領域についての拡張サイズとの和が、不揮発性メモリ100における全記憶領域のサイズ以下であるかどうかを判定する。サイズ調整部150は、この和が全記憶領域のサイズ以下である場合に、ユーザデータの記憶領域のサイズを拡張サイズに応じて拡張する拡張手段として機能する。不揮発性メモリ100における全記憶領域のサイズを超えるような、ユーザ領域の拡張は認められない。また、PLC2の動作中にユーザデータやプロジェクトデータを強制的に消去してしまうと、PLC2が誤作動してしまう。よって、ユーザプログラムとユーザデータの実際の消費サイズを考慮して、ユーザ領域の拡張を許容することで、PLC2の誤作動を低減できよう。
可否判定部152は、受付部151によって受け付けられた変更要求に基づくプロジェクト領域の変更後の上限サイズをユーザプログラムについての消費サイズが超えず、かつ、変更要求に基づくユーザ領域の変更後の上限サイズをユーザデータについての消費サイズが超えないかどうかに応じてプロジェクト領域の上限サイズとユーザ領域の上限サイズとの変更の可否を判定してもよい。サイズ調整部150は、可否判定部152がプロジェクト領域の上限サイズとユーザ領域の上限サイズとの変更が可能と判定すると、プロジェクト領域の上限サイズおよびユーザ領域の上限サイズの変更を反映させる領域設定手段として機能する。図12を用いて説明したように、プロジェクト領域の上限サイズとユーザ領域の上限サイズとが個別に調整されてもよいし、同時にこれらが調整されてもよい。後者の場合、両方の記憶領域について上限サイズの調整が可能と判断されたときに、調整が反映されることになる。前者の場合は、一方の記憶領域のみが調整条件を満たしており、他方の記憶領域は調整条件を満たしていないことがある。この場合、サイズ調整部150は、一方の記憶領域のみ調整を反映してもよいし、両方の記憶領域について反映を中止してもよい。
プロジェクトデータを改変したときに、プロジェクト領域の上限サイズの拡張が必要になることがある。この場合、改変後のプロジェクトデータ162を格納するための必要サイズと、ユーザデータ163を格納するための必要サイズがサイズ取得部145、164によって取得される。可否判定部152は、受け付けられた変更要求に基づくプロジェクト領域の変更後の上限サイズをプロジェクトデータ162についての必要サイズが超えず、かつ、変更要求に基づくユーザ領域の変更後の上限サイズをユーザデータ163についての必要サイズが超えないかどうかに応じてプロジェクト領域の上限サイズとユーザ領域の上限サイズとの変更の可否を判定してもよい。サイズ調整部150は、可否判定部152がプロジェクト領域の上限サイズとユーザ領域の上限サイズとの変更が可能と判定すると、プロジェクト領域の上限サイズおよびユーザ領域の上限サイズの変更を反映させる。これにより、プロジェクトデータを改変したときにも、改変されたプロジェクトデータを格納できる範囲内で上限サイズの変更が許容される。
このように、可否判定部152は、原則として、不揮発性メモリ100へのユーザプログラムとユーザデータの書き込みが要求されたときに判定処理を実行してもよい。
受付部151は、プロジェクトデータに含まれているユーザプログラムが実行されているときにもプロジェクト領域の上限サイズとユーザ領域の上限サイズの変更を受け付けてもよい。これによりPLC2の動作を止めることなく、つまり、製造ラインを止めることなく、上限サイズを調整することが可能となる。
受付部151は、プログラマブル・ロジック・コントローラにユーザプログラムを転送するプログラム作成支援装置1から送信される変更要求を受け付けてもよい。これによりプログラム作成支援装置1から上限サイズの調整を実行することが可能となる。図8や図9を用いて説明したように、プログラム作成支援装置1はPLC2よりもリッチな(情報量の多い)GUIを提供できる。よって、ユーザは視覚的に理解しやすい状態で上限サイズを調整することが可能となろう。
読み書き制御部144のロギング部153は、ユーザプログラムを実行することで生成されるロギングデータを一定のサンプリング数を単位として不揮発性メモリ100に書き込んでもよい。これにより停電等が発生したPLC2が停止しても、中途半端なロギングデータが保存されないようになろう。
読み書き制御部144の速度制御部147は、不揮発性メモリ100への情報の書き込み速度を不揮発性メモリ100の性能上の上限速度よりも低速な書き込み速度に制限してもよい。これにより不揮発性メモリ100の寿命を延ばすことが可能となろう。なお、読み書き制御部144の速度制御部147は、情報の書き込み速度を当該情報の種別に応じて制限してもよい。たとえばユーザプログラムとユーザデータとでは必要となる書き込み速度に違いがあるため、データの種別に応じて書き込み速度が制限されてもよい。また、速度制御部147は、ユーザプログラムの実行によって発生する情報の書き込み速度を制限し、プログラマブル・ロジック・コントローラの起動時、メンテナンス時またはプログラム作成支援装置1からのユーザプログラムまたはユーザデータの転送時には書き込み速度を制限しないように動作してもよい。これによりユーザビリティを低下させにくくしつつ、不揮発性メモリ100の寿命を延ばすことが可能となろう。
カウント部154は、不揮発性メモリ100のセクタごとイレース回数または書き換え回数をカウントしてもよい。警告部148や表示部5は、不揮発性メモリ100におけるいずれかセクタについてのカウント部154によるカウント値が閾値を超えると警報を出力する出力手段として機能してもよい。これによりユーザは不揮発性メモリ100の寿命が近づいていることを把握して、PLC2を交換することが可能となろう。また、不揮発性メモリ100の寿命が尽きることによる、突然のPLC2の動作停止といった事態を起こりにくくすることが可能となろう。
上述したように上限サイズの調整と設定はPLC2が主体となり、プログラム作成支援装置1はユーザインタフェースを提供するだけであってもよいが、図8や図13を用いて説明したように、プログラム作成支援装置1が主体となって上限サイズの調整と設定を実行してもよい。この場合、サイズ調整部150の機能はプログラム作成支援装置1に実装されることになろう。
たとえば、サイズ設定部165は、不揮発性メモリ100においてユーザプログラムを記憶するために許容されるプロジェクト領域の上限サイズと、ユーザデータを記憶するために許容されるユーザ領域の上限サイズとのうちいずれかを設定する。これにより不揮発性メモリ100の未使用領域にユーザデータを格納可能となり、未使用領域の有効活用を図れるであろう。
図8ないし図10を用いて説明したように、ユーザインタフェース120、120’およびUI制御部166は、プロジェクト領域の上限サイズとユーザ領域の上限サイズとを表示する表示手段として機能する。また、操作部8やスライダーバー121、テキストボックス、スピンボックスは、ユーザインタフェース120に表示されたプロジェクト領域の上限サイズとユーザ領域の上限サイズとを調整する調整手段として機能してもよい。
サイズ取得部164は、不揮発性メモリ100においてユーザプログラムとユーザデータを記憶するために実際に消費されている記憶領域の消費サイズを取得してもよい。ユーザインタフェース120、120’およびUI制御部166は、取得されたユーザプログラムについての消費サイズとユーザデータについての消費サイズとをさらに表示してもよい。これによりユーザは不揮発性メモリ100の各記憶領域にどの程度のデータが記憶されており、どの程度の空き領域があるかを容易に把握できるようになろう。
可否判定部167は、操作部8やスライダーバー121、テキストボックス、スピンボックスによって調整されたプロジェクト領域の上限サイズをユーザプログラムについての消費サイズが超えず、かつ、調整されたユーザ領域の上限サイズをユーザデータについての消費サイズが超えないかどうかに応じて、プロジェクト領域の上限サイズおよびユーザ領域の上限サイズの調整をPLC2に反映させることが可能かどうかを判定してもよい。サイズ設定部165は、可否判定部167がこれらの調整をPLC2に反映させることが可能と判定すると、プロジェクト領域の上限サイズおよびユーザ領域の上限サイズの調整をPLC2に反映させてもよい。
図8、図9を用いて説明したように、ユーザインタフェース120、120’およびUI制御部166は、ユーザデータについての消費サイズをバーグラフとして表示してもよい。サイズ設定部165は、ユーザ領域の上限サイズをバーグラフに沿って調整してもよい。これによりユーザは簡単な操作によりユーザ領域の上限サイズを調整できるようになろう。なお、ユーザインタフェース120、120’およびUI制御部166は、ユーザデータについての消費サイズと、ユーザプログラムを含むプロジェクトデータの消費サイズとをそれぞれバーグラフとして表示してもよい。これによりユーザは不揮発性メモリ100の各記憶領域にどの程度のデータが記憶されており、どの程度の空き領域があるかを容易に把握できるようになろう。
本実施形態によれば、PLC2の制御方法の各工程をCPU10に実行させるプログラム(ファームウエア)も提供される。同様に、プログラム作成支援装置1の制御方法の各工程をCPU24に実行させる設定プログラム161も提供される。
図15ないし図19を用いて説明したように、本実施の形態によれば、ユーザデータなどのデータを保全しつつユーザの使い勝手を向上することができる。上述したように、複数のメモリや論理ドライブにそれぞれ同一のデータが格納される。また、操作部6やプログラム作成支援装置1によって、予め代表記憶手段(例:第1メモリ200や第1論理ドライブ203)が選択される。受付部244によってデータの操作要求が受け付けられると、データ操作部241は受付部244が受け付けたデータの操作要求を少なくとも予め選択された代表記憶手段に対して実行する。このように同一のデータが複数のメモリや論理ドライブにそれぞれ格納されるため、データが保全される。また、ユーザは、複数の記憶手段のうち代表記憶手段などの一部の記憶手段に対してファイル操作を実行すればよいため、ユーザの使い勝手が向上しよう。
複数の記憶手段はそれぞれ異なる記憶装置においてファイルシステムに基づき構築された複数の論理ドライブであってもよい。また、代表記憶手段は代表論理ドライブであってもよい。上述した事例では論理ドライブをメモリ上に構築しているが、ファイルシステムを用いた論理ドライブは必須ではない。複数のメモリのそれぞれにおいてファイルシステムを用いずにそれぞれデータを保存して同期することも可能だからである。ただし、論理ドライブを構築することで、ファイルシステムにファイルの管理を担当させることが可能となるため、データ管理用のプログラムを作成する手間を省けるだろう。
複数の論理ドライブがそれぞれ同一のデータを格納したファイルを記憶するようファイルの同期処理を実行する同期部242をさらに有していてもよい。代表論理ドライブなど、一部の論理ドライブにだけファイル操作を実行すると、時間の経過とともに複数の論理ドライブ間では記憶内容に齟齬が生じうる。齟齬が小さかったり、齟齬が生じている期間が短かったりすれば、大きな問題は生じないが、齟齬が大きくなるとPLC2の制御に影響が及ぶことがある。そこで、同期部242が同期処理を実行することで、複数の論理ドライブ間で記憶内容を一致させてもよい。
複数の記憶手段には、記憶特性や記憶原理、読み書き速度など、性能の異なる複数の記憶手段が含まれていてもよい。たとえば、複数の記憶手段には、揮発性の第1記憶手段(例:第1メモリ200、第1論理ドライブ203)と不揮発性の第2記憶手段(例:第2メモリ210、第2論理ドライブ211)とが含まれていてもよい。つまり、代表論理ドライブは、第1記憶手段と第2記憶手段とのうちから予め選択された論理ドライブである。第1記憶手段の読み書き速度は第2記憶手段の読み書き速度よりも高速である場合、第1記憶手段が代表論理ドライブとして予め選択されてもよい。よって、代表論理ドライブに対するアクセスが高速となり、ファイル操作を短時間で実行できるようになろう。また、第1記憶手段の書き換え可能回数は第2記憶手段の書き換え可能回数よりも多くてもよい。この場合、第1記憶手段が代表論理ドライブとして予め選択されてもよい。上述したように、複数の論理ドライブのうち代表論理ドライブに対してデータの操作が実行されるため、代表論理ドライブは他の論理ドライブよりもデータの書き換え回数が多くなりやすい。つまり、他の論理ドライブにおけるデータの書き換え回数は少なくなるため、他の論理ドライブを含む不揮発性メモリの寿命を延ばすことが可能となる。一般に、揮発性メモリには書き換え可能回数に上限がなく、寿命が長いが、不揮発性メモリには書き換え可能回数に上限があり、寿命が長くはない。よって、ユーザデータのように比較的に頻繁に書き換えられ、かつ、アクセス速度も高速性を要求されるデータに関しては、揮発性メモリを代表メモリとすることで、不揮発性メモリによってデータを保全しつつ、揮発性メモリに対して動作の操作が実行される。これにより、ユーザの使い勝手が向上するとともに、不揮発性メモリの寿命を延ばしやすくなろう。
同期部242は、第1記憶手段(例:第1メモリ200、第1論理ドライブ203)のファイルに対する操作内容を第2記憶手段(例:第2メモリ210、第2論理ドライブ211)に反映させる。これにより、データへの高速なアクセスを確保しつつ、データの同一性も図れるであろう。
図19を用いて説明したように、同期部242は、遅くともPLC2に対する電力の供給の停止が指示されるときまでに、第1記憶手段である論理ドライブのファイルに対する操作内容を第2記憶手段である論理ドライブに反映させてもよい。これにより、電源からの電力が遮断されても、第1記憶手段と第2記憶手段とのデータの同一性を確保しやすくなろう。
同期部242は、複数の論理ドライブ間で記憶内容の差分を特定し、当該差分のみを複数の論理ドライブ間で反映させることで、複数の論理ドライブにそれぞれ同一のファイルを格納させてもよい。同期の手法として、一方の論理ドライブに記憶されているすべてのファイルを他方の論理ドライブに対して上書きする手法も考えられる。しかし、この手法は同期処理の時間が長くなりやすく、他方の論理ドライブが不揮発性メモリであればその寿命を縮めやすい。そこで、記憶内容の差分だけを一方から他方に反映させることで、同期時間を短縮できる。また、データの書き換え回数も減少するため、他方の論理ドライブが不揮発性メモリであればその寿命を延ばすこと(縮めにくくすること)が可能となろう。
データ操作部241は、ファイルの読み出し操作を代表論理ドライブに対してのみ実行し、ファイルの書き込み操作を複数の論理ドライブのすべてに対して実行してもよい。これによりファイルの高速な読み出しと、ファイルの保全とを実現しやすくなる。この場合は同期処理の回数を減らすことができるよう(究極には同期処理は不要となろう)。
ところで、不揮発性メモリの大容量化に伴い、上述したプログラムメモリの大容量化が進みつつある。その一方で、ユーザプログラムのサイズの増加はそれほど進んではいない。よって、プログラムメモリには広大な未使用領域が出現することがある。したがって、プログラムメモリの未使用領域の一部にユーザデータを記憶できるようにすれば、プログラムメモリとユーザデータ用のメモリとを個別に用意しなくて済むようになる。たとえば、図15(A)を用いて説明したように、第2記憶手段は、ユーザプログラムを格納する記憶領域(プロジェクト領域)をさらに有するメモリであってもよい。これにより、ユーザプログラムを格納するプログラムメモリの未使用領域を有効に活用できるであろう。また、PLCが突然に電力を遮断されても、ユーザデータは保持されるようになろう。ただし、不揮発性メモリの読み書き速度は、揮発性メモリの読み書き速度と比較すると、まだ低速である。また、揮発性メモリには書き換え可能回数に上限がなく、寿命が長いが、不揮発性メモリには書き換え可能回数に上限があり、寿命が長くはない。よって、ユーザデータのように比較的に頻繁に書き換えられ、かつ、アクセス速度も高速性を要求されるデータに関しては、何らかの対策が必要となる。よって、同一のデータを複数の記憶手段に記憶することでデータを保全しつつ、そのうちこれらの代表となる少なくとも1つの記憶手段についてユーザデータの操作を実行することで複数の記憶手段の全体としての寿命を延ばすことが可能となる。
図18などを用いて説明したように、PLC2はプログラム作成支援装置1と通信する通信部14をさらに有していてもよい。この場合、代表論理ドライブは、プログラム作成支援装置1によって通信部14を介して選択されてもよい。これによりユーザは自由に代表論理ドライブを選択できるようになろう。
ところで、代表論理ドライブ以外の他の論理ドライブもユーザに見える場合、ユーザはどちらにファイルを書き込めばよいか迷ってしまうかもしれない。そこで、データ操作部241は、プログラム作成支援装置1が複数の論理ドライブのうち代表論理ドライブをプログラム作成支援装置1の表示装置(例:表示部7)に表示するよう、代表論理ドライブをプログラム作成支援装置1に公開してもよい。これにより、複数の論理ドライブのうち1つの論理ドライブを扱っているようにユーザには見せることが可能となろう。代表論理ドライブをユーザに見せることで、ユーザはファイルの書き込み対象となる論理ドライブを明確に認識できるようになろう。
データ操作部241は、プログラム作成支援装置1の同期設定部250から通信部14を介して複数の論理ドライブ間での同期の対象となるファイルまたはディレクトリを指定されてもよい。データ操作部241は、当該指定されたファイルまたはディレクトリについて同期処理を実行する。なお、テーブル管理部243は、指定されたファイルまたはディレクトリの識別情報をファイル管理テーブル134に保持してもよい。これによりユーザは保全性が必要とされるファイルやディレクトリについては同期対象として設定することができ、保全性が不要と考えられるファイルやディレクトリについては同期対象として設定しないことが可能となろう。このように同期対象の設定はユーザに任せられてもよい。
もちろん、同期設定部250は、ファイルまたはディレクトリ(以下、ファイル等)に優先度を付与し、優先度に応じて同期処理の実行回数や実行頻度を可変設定してもよい。たとえば、同期設定部250は、優先度の高いファイル等は優先度の低いファイル等よりも同期処理の実行頻度を多くし、優先度の低いファイル等は優先度の高いファイル等よりも同期処理の実行頻度を少なくしてもよい。このように同期条件はファイル等の優先度や種別、PLC2の機能に応じて異ならしめてもよい。これはすべてのファイル等について頻繁に同期処理を実行する場合に比べて、全体としての同期処理の回数を削減することになり、同期処理時間の短縮と、不揮発性メモリの長寿命化をもたらすであろう。
このような同期対象や同時書き込み対象の指定は、PLC2の操作部6および同期設定部250からPLC2の機能を指定することで実現されてもよい。PLC2は、上述したようなロギング機能やトレースの機能(PLC2の接点の状態を時系列でファイルに出力する機能)、ファイル転送機能など、様々な機能を有している。そこで、同期設定部250は、これらの機能によって生成されたファイルやディレクトリについては同期や同時書き込みの対象としてもよい。たとえば、ファイルマネージャ251によってFTPによりファイルがPLC2に転送されるときは、第1論理ドライブ203と第2論理ドライブ211との両方にファイルの書き込みが実行されてもよい。また、ラダープログラムによって、第1論理ドライブ203にだけ書き込むのか、第1論理ドライブ203と第2論理ドライブ211との両方に書き込むのかが指定されてもよい。これによりラダープログラムを実行することで生成されたデータやファイルを同期処理や同時書き込みの対象とするのかどうかを指定できるようになる。
同期部242は、複数の論理ドライブのそれぞれに記憶されているファイルのタイムスタンプまたは更新回数を比較し、比較結果に応じて複数の論理ドライブのそれぞれに記憶されているファイルを同期してもよい。通常、ファイルはタイムスタンプの情報を保持しているため、タイムスタンプを参照することでどちらの論理ドライブに記憶されているファイルがより新しいかを容易に判断できるようになろう。
同期部242は、複数の論理ドライブのそれぞれに記憶されている同一のファイル名を付与されているファイルのタイムスタンプを比較し、最新のタイムスタンプを付与されているファイルをそれよりも古いタイムスタンプを付与されているファイルに対して上書きする。これにより複数の論理ドライブ間で最新のタイムスタンプを付与されているファイルが共通に保持されるようになろう。
同期部242は、複数の論理ドライブのそれぞれに記憶されている同一のファイル名を付与されているファイルの更新回数を比較し、最多の更新回数のファイルをそれよりも少ない更新回数のファイルに対して上書きしてもよい。タイムスタンプは、PLC2が保持している内蔵時計が正確であることが前提となる。しかし、タイムスタンプに代えて更新回数を採用すれば、内蔵時計に依存することなく、最新のファイルを容易に判別することが可能となろう。