(57)【特許請求の範囲】
【請求項１】
ユーザプログラムを周期的に繰り返し実行するプログラマブル・ロジック・コントローラであって、
複数の記憶手段と、
前記複数の記憶手段のうち少なくとも予め選択された揮発性の代表記憶手段に対するデータの書き込み要求を受け付ける受付手段と、
前記受付手段が受け付けたデータの書き込み要求に応じて、該書き込み要求の対象となるデータを、前記代表記憶手段と、前記複数の記憶手段のうち前記代表記憶手段とは異なる不揮発性記憶手段との両方に書き込む書き込み手段と、
前記代表記憶手段と前記不揮発性記憶手段との両方に書き込まれるデータが、前記ユーザプログラムの実行により生成されるユーザデータである場合には、前記ユーザプログラムの実行により生成されるものではないデータの場合と比較して、前記書き込み手段の前記不揮発性記憶手段に対する書き込み速度を相対的に低速に制御する速度制御手段と、
を有することを特徴とするプログラマブル・ロジック・コントローラ。
【請求項２】
前記ユーザプログラムの実行により生成されるユーザデータは、前記ユーザプログラムの実行により生成されるロギングデータであることを特徴とする請求項１に記載のプログラマブル・ロジック・コントローラ。
【請求項３】
前記プログラマブル・ロジック・コントローラは、前記ユーザプログラムの作成を支援するプログラム作成支援装置を接続可能であり、
前記ユーザプログラムの実行により生成されるものではないデータは、前記プログラム作成支援装置から書き込まれる前記ユーザプログラムのプロジェクトデータであることを特徴とする請求項１または２に記載のプログラマブル・ロジック・コントローラ。
【請求項４】
前記複数の記憶手段はそれぞれ異なる記憶装置においてファイルシステムに基づき構築された複数の論理ドライブであり、前記代表記憶手段は代表論理ドライブであることを特徴とする請求項１ないし３のいずれか一項に記載のプログラマブル・ロジック・コントローラ。
【請求項５】
前記複数の論理ドライブがそれぞれ同一のデータを格納したファイルを記憶するようファイルの同期処理を実行する同期手段をさらに有することを特徴とする請求項４に記載のプログラマブル・ロジック・コントローラ。
【請求項６】
前記複数の記憶手段は、揮発性の第１記憶手段と前記不揮発性記憶手段である第２記憶手段とを有し、
前記代表論理ドライブは、前記第１記憶手段と前記第２記憶手段とのうちから予め選択された論理ドライブであることを特徴とする請求項５に記載のプログラマブル・ロジック・コントローラ。
【請求項７】
前記同期手段は、前記第１記憶手段のファイルに対する操作内容を前記第２記憶手段に反映させることを特徴とする請求項６に記載のプログラマブル・ロジック・コントローラ。
【請求項８】
前記同期手段は、遅くとも前記プログラマブル・ロジック・コントローラに対する電力の供給の停止が指示されるときまでに、前記第１記憶手段のファイルに対する操作内容を前記第２記憶手段に反映させることを特徴とする請求項７に記載のプログラマブル・ロジック・コントローラ。
【請求項９】
前記同期手段は、前記複数の論理ドライブ間で記憶内容の差分を特定し、当該差分のみを前記複数の論理ドライブ間で反映させることで、前記複数の論理ドライブにそれぞれ同一のファイルを格納させることを特徴とする請求項５に記載のプログラマブル・ロジック・コントローラ。
【請求項１０】
前記書き込み手段は、ファイルの読み出し操作を前記代表論理ドライブに対してのみ実行し、ファイルの書き込み操作を前記複数の論理ドライブのすべてに対して実行することを特徴とする請求項４に記載のプログラマブル・ロジック・コントローラ。
【請求項１１】
前記第２記憶手段は、前記ユーザプログラムを格納する記憶領域をさらに有するメモリであることを特徴とする請求項６ないし８のいずれか１項に記載のプログラマブル・ロジック・コントローラ。
【請求項１２】
前記ユーザプログラムを作成して前記プログラマブル・ロジック・コントローラに転送するプログラム作成支援装置と通信する通信手段をさらに有し、
前記代表論理ドライブは、前記プログラム作成支援装置によって前記通信手段を介して選択されることを特徴とする請求項４ないし１１のいずれか１項に記載のプログラマブル・ロジック・コントローラ。
【請求項１３】
前記書き込み手段は、前記プログラム作成支援装置が前記複数の論理ドライブのうち前記代表論理ドライブを前記プログラム作成支援装置の表示装置に表示するよう、前記代表論理ドライブを前記プログラム作成支援装置に公開することを特徴とする請求項１２に記載のプログラマブル・ロジック・コントローラ。
【請求項１４】
前記書き込み手段は、前記プログラム作成支援装置から前記通信手段を介して前記複数の論理ドライブ間での同期の対象となるファイルまたはディレクトリを指定され、当該指定されたファイルまたはディレクトリについて同期処理を実行することを特徴とする請求項１２または１３に記載のプログラマブル・ロジック・コントローラ。
【請求項１５】
前記同期手段は、前記複数の論理ドライブのそれぞれに記憶されているファイルのタイムスタンプまたは更新回数を比較し、比較結果に応じて前記複数の論理ドライブのそれぞれに記憶されているファイルを同期することを特徴とする請求項５に記載のプログラマブル・ロジック・コントローラ。
【請求項１６】
前記同期手段は、前記複数の論理ドライブのそれぞれに記憶されている同一のファイル名を付与されているファイルのタイムスタンプを比較し、最新のタイムスタンプを付与されているファイルをそれよりも古いタイムスタンプを付与されているファイルに対して上書きすることを特徴とする請求項１５に記載のプログラマブル・ロジック・コントローラ。
【請求項１７】
前記同期手段は、前記複数の論理ドライブのそれぞれに記憶されている同一のファイル名を付与されているファイルの更新回数を比較し、最多の更新回数のファイルをそれよりも少ない更新回数のファイルに対して上書きすることを特徴とする請求項１５に記載のプログラマブル・ロジック・コントローラ。
【請求項１８】
ユーザプログラムを周期的に繰り返し実行するプログラマブル・ロジック・コントローラと、当該ユーザプログラムを作成して当該プログラマブル・ロジック・コントローラに対して転送するプログラム作成支援装置とを有するプログラマブル・ロジック・コントローラシステムであって、
前記プログラマブル・ロジック・コントローラは、
複数の記憶手段と、
前記複数の記憶手段のうち少なくとも予め選択された揮発性の代表記憶手段に対するデータの書き込み要求を受け付ける受付手段と、
前記受付手段が受け付けたデータの書き込み要求に応じて、該書き込み要求の対象となるデータを、前記代表記憶手段と、前記複数の記憶手段のうち前記代表記憶手段とは異なる不揮発性記憶手段との両方に書き込む書き込み手段と、
前記代表記憶手段と前記不揮発性記憶手段との両方に書き込まれるデータが、前記ユーザプログラムの実行により生成されるユーザデータである場合には、前記ユーザプログラムの実行により生成されるものではないデータの場合と比較して、前記書き込み手段の前記不揮発性記憶手段に対する書き込み速度を相対的に低速に制御する速度制御手段と、
を有し、
前記プログラム作成支援装置は、
前記代表記憶手段を選択する選択手段
を有することを特徴とするプログラマブル・ロジック・コントローラシステム。
【請求項１９】
ユーザプログラムを周期的に繰り返し実行するプログラマブル・ロジック・コントローラの制御方法であって、
複数の記憶手段のうち少なくとも予め選択された揮発性の代表記憶手段に対するデータの書き込み要求を受け付ける受付工程と、
前記受付工程で受け付けられたデータの書き込み要求に応じて、該書き込み要求の対象となるデータを、前記代表記憶手段と、前記複数の記憶手段のうち前記代表記憶手段とは異なる不揮発性記憶手段との両方に書き込む工程と、
前記代表記憶手段と前記不揮発性記憶手段との両方に書き込まれるデータが、前記ユーザプログラムの実行により生成されるユーザデータである場合には、前記ユーザプログラムの実行により生成されるものではないデータの場合と比較して、前記不揮発性記憶手段に対する書き込み速度を相対的に低速に制御する工程と、
を有することを特徴とするプログラマブル・ロジック・コントローラの制御方法。
【請求項２０】
請求項１９に記載された制御方法の各工程をプログラマブル・ロジック・コントローラのＣＰＵに実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラマブル・ロジック・コントローラ、システム、制御方法およびプログラムに関する。
【背景技術】
【０００２】
特許文献１が示すようにプログラマブル・ロジック・コントローラ（ＰＬＣ）のＣＰＵユニットには、ラダープログラム等のユーザプログラムを記憶するプログラムメモリが設けられている。ＣＰＵはユーザプログラムを実行することでデータの読み書きを行いながら拡張ユニットなどを制御するが、制御の高速化の観点からデータは高速かつ不揮発性のメモリに格納される。プログラムメモリは、ユーザプログラムが書き込まれるだけであるため低速なメモリで十分である。このような理由からユーザプログラムが格納されるメモリとユーザデータが格納されるメモリは別々に用意されていた。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１１−０３４３７８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ところで、ＰＬＣにおいてユーザデータを複数の記憶手段に保持しておけばデータの保全性が高まるであろう。プロジェクトデータの書き換え頻度はそれほど多くないが、ユーザプログラムを実行することで発生するロギングデータなどのユーザデータの書き換え頻度は相対的に多い。不揮発性記憶手段の寿命がＰＬＣの期待寿命を下回らないように、不揮発性記憶手段への書き込みを制限する必要がある。
【０００５】
そこで、本発明は、データを保全しつつ不揮発性記憶手段の寿命を延ばすことを目的とする。
【課題を解決するための手段】
【０００６】
本発明は、たとえば、
ユーザプログラムを周期的に繰り返し実行するプログラマブル・ロジック・コントローラであって、
それぞれ同一のデータが格納される複数の記憶手段と、
ユーザプログラムを周期的に繰り返し実行するプログラマブル・ロジック・コントローラであって、
複数の記憶手段と、
前記複数の記憶手段のうち少なくとも予め選択された揮発性の代表記憶手段に対するデータの書き込み要求を受け付ける受付手段と、
前記受付手段が受け付けたデータの書き込み要求に応じて、該書き込み要求の対象となるデータを、前記代表記憶手段と、前記複数の記憶手段のうち前記代表記憶手段とは異なる不揮発性記憶手段との両方に書き込む書き込み手段と、
前記代表記憶手段と前記不揮発性記憶手段との両方に書き込まれるデータが、前記ユーザプログラムの実行により生成されるユーザデータである場合には、前記ユーザプログラムの実行により生成されるものではないデータの場合と比較して、前記書き込み手段の前記不揮発性記憶手段に対する書き込み速度を相対的に低速に制御する速度制御手段と、
を有することを特徴とするプログラマブル・ロジック・コントローラを提供する。
【発明の効果】
【０００７】
本発明によれば、データを保全しつつ不揮発性記憶手段の寿命を延ばすことが可能となるであろう。
【図面の簡単な説明】
【０００８】
【図１】ＰＬＣシステムの一例を示す図
【図２】ユーザプログラムの一例を示す図
【図３】プログラム作成支援装置の一例を示す図
【図４】ＰＬＣの一例を示す図
【図５】スキャンタイムを説明するための図
【図６】ベースレス・ビルディングタイプのＰＬＣの一例を示す図
【図７】複数の記憶領域の上限サイズを管理する手法の一例を示す図
【図８】上限サイズを設定するためのユーザインタフェースの一例を示す図
【図９】上限サイズを設定するためのユーザインタフェースの一例を示す図
【図１０】上限サイズを設定するためのユーザインタフェースの一例を示す図
【図１１】管理テーブルの一例を示す図
【図１２】基本ユニットのＣＰＵの機能の一例を示す図
【図１３】設定プログラムによって実現される機能の一例を示す図
【図１４】上限サイズの設定処理を示すフローチャート
【図１５】同期処理に関する実施の形態の基本的な概念を説明するための図
【図１６】管理テーブルの一例を示す図
【図１７】ＰＬＣが備えるＣＰＵの機能の一例を示す図
【図１８】設定プログラムによって実現される機能の一例を示す図
【図１９】同期処理を示すフローチャート
【発明を実施するための形態】
【０００９】
以下に本発明の一実施形態を示す。以下で説明される個別の実施形態は、本発明の上位概念、中位概念および下位概念など種々の概念を理解するために役立つであろう。また、本発明の技術的範囲は、特許請求の範囲によって確定されるのであって、以下の個別の実施形態によって限定されるわけではない。
【００１０】
はじめにプログラマブル・ロジック・コントローラ（ＰＬＣ、単にプログラマブルコントローラと呼ばれてもよい）を当業者にとってよりよく理解できるようにするために、一般的なＰＬＣの構成とその動作について説明する。
【００１１】
図１は、本発明の実施の形態によるプログラマブル・ロジック・コントローラシステムの一構成例を示す概念図である。図１に示すように、このシステムは、ラダープログラムなどのユーザプログラムの編集を行うためのプログラム作成支援装置１と、工場等に設置される各種制御装置を統括的に制御するためのＰＬＣ（プログラマブル・ロジック・コントローラ）２とを備えている。ＰＬＣ２は、ＣＰＵが内蔵された基本ユニット３と１つないし複数の拡張ユニット４を備えている。基本ユニット３に対して１つないし複数の拡張ユニット４が着脱可能となっている。基本ユニット３は基本ユニットと呼ばれることもある。
【００１２】
基本ユニット３には、表示部５及び操作部６が備えられている。表示部５には、基本ユニット３に取り付けられている各拡張ユニット４の動作状況などを表示することができ、表示部５の表示内容は、操作部６を操作することにより切り替えることができる。表示部５には、通常、ＰＬＣ２内のデバイスの現在値（デバイス値）やＰＬＣ２内で生じたエラー情報などが表示される。なお、デバイスとは、デバイス値を格納するために設けられたメモリ上の領域を指す名称である。デバイス値とは、入力機器からの入力状態、出力機器への出力状態およびユーザプログラム上で設定される内部リレー（補助リレー）、タイマー、カウンタ、データメモリ等の状態を示す情報である。
【００１３】
拡張ユニット４は、ＰＬＣ２の機能を拡張するために用意されており、基本ユニット３に対して側方から取り付けられる。１つ目の拡張ユニット４は、基本ユニット３に対して側方から直接的に取り付けられる。２つ目以降の拡張ユニット４は、既に取り付けられている拡張ユニット４に対して、側方から直列的に取り付けられる。たとえば、基本ユニット３の右側面と拡張ユニット４の左側面とが連結面になっている。同様に、１つ目の拡張ユニット４の右側面の形状等は基本ユニット３の右側面とほぼ同じであるため、１つ目の拡張ユニット４の右側面に２つ目の拡張ユニット４の左側面が連結される。このような連結方式は、数珠つなぎ方式とかデイジーチェーン方式と呼ばれてもよい。各連結面にはコネクタが設けられており、通信や電力供給を行うためのバスもコネクタを介して連結される。このようにして、基本ユニット３と複数の拡張ユニット４が直列的に取り付けられると、各拡張ユニット４内に備えられた配線（例：バス）を介して、各拡張ユニット４が基本ユニット３に対して通信可能に接続される。各拡張ユニット４には、その拡張ユニット４の機能に対応する被制御装置１６（図４）が接続され、これにより、各被制御装置１６が拡張ユニット４を介して基本ユニット３に接続される。被制御装置１６には、センサなどの入力装置や、アクチュエータなどの出力装置が含まれる。
【００１４】
プログラム作成支援装置１は、たとえば、携帯可能ないわゆるノートタイプやタブレットタイプのパーソナルコンピュータであって、表示部７及び操作部８が備えられている。ＰＬＣ２を制御するためのユーザプログラムの一例であるラダープログラムは、プログラム作成支援装置１を用いて作成され、その作成されたラダープログラムは、プログラム作成支援装置１内でニモニックコードに変換される。そして、プログラム作成支援装置１を、ＵＳＢ(Universal Serial Bus)などの通信ケーブル９を介してＰＬＣ２の基本ユニット３に接続し、ニモニックコードに変換されたラダープログラムをプログラム作成支援装置１から基本ユニット３に送ると、そのラダープログラムが基本ユニット３内でマシンコードに変換され、基本ユニット３に備えられたメモリ内に記憶される。
【００１５】
なお、図１では示していないが、プログラム作成支援装置１の操作部８には、プログラム作成支援装置１に接続されたマウスなどのポインティングデバイスが含まれていてもよい。また、プログラム作成支援装置１は、ＵＳＢ以外の他の通信ケーブル９を介して、ＰＬＣ２の基本ユニット３に対して着脱可能に接続されるような構成であってもよい。
【００１６】
図２は、ラダープログラムの作成時にプログラム作成支援装置１の表示部７に表示されるラダー図１７の一例を示す図である。図２に示すように、ＰＬＣ２を制御するためのラダープログラムは、プログラム作成支援装置１の表示部７にマトリックス状に表示される複数のセル１８内に仮想デバイスのシンボル１９を適宜配置して、視覚的なリレー回路を表すラダー図１７を構築することにより作成される。
【００１７】
ラダー図１７には、たとえば、１０列×Ｎ行（Ｎは任意の自然数）のセル１８が配置されている。そして、各行のセル１８内に、図２に示す左側から右側に向かって、時系列的に仮想デバイスのシンボル１９を適宜配置することにより、視覚的なリレー回路を作成することができる。作成されるリレー回路は、１行で表される直列的なリレー回路であってもよいし、複数行に並列的に表されたリレー回路を互いに結合することにより作成された、並列的なリレー回路であってもよい。
【００１８】
図２に示すリレー回路は、入力装置からの入力信号に基づいてオン／オフされる３つの仮想デバイス（以下、「入力デバイス」と呼ぶ。）のシンボル１９ａ，１９ｂ，１９ｃと、出力装置の動作を制御するためにオン／オフされる仮想デバイス（以下、「出力デバイス」と呼ぶ。）のシンボル１９ｄとが適宜結合されることにより構成されている。
【００１９】
各入力デバイスのシンボル１９ａ，１９ｂ，１９ｃの上方に表示されている文字（「Ｒ０００１」、「Ｒ０００２」及び「Ｒ０００３」）は、その入力デバイスのデバイス名（アドレス名）２１を表している。各入力デバイスのシンボル１９ａ，１９ｂ，１９ｃの下方に表示されている文字（「フラグ１」、「フラグ２」及び「フラグ３」）は、その入力デバイスに対応付けられたデバイスコメント２２を表している。出力デバイスのシンボル１９ｄの上方に表示されている文字（「原点復帰」）は、その出力デバイスの機能を表す文字列からなるラベル２３である。
【００２０】
図２に示す例では、デバイス名「Ｒ０００１」及び「Ｒ０００２」にそれぞれ対応する２つの入力デバイスのシンボル１９ａ，１９ｂが直列的に結合されることにより、ＡＮＤ回路が構成されている。また、これらの２つの入力デバイスのシンボル１９ａ，１９ｂからなるＡＮＤ回路に対して、デバイス名「Ｒ０００３」に対応する入力デバイスのシンボル１９ｃが並列的に結合されることにより、ＯＲ回路が構成されている。すなわち、このリレー回路では、２つのシンボル１９ａ，１９ｂに対応する入力デバイスがいずれもオンした場合、又は、シンボル１９ｃに対応する入力デバイスがオンした場合にのみ、シンボル１９ｄに対応する出力デバイスがオンされるようになっている。
【００２１】
図３は、図１のプログラム作成支援装置１の電気的構成について説明するためのブロック図である。図３に示すように、プログラム作成支援装置１には、ＣＰＵ２４、表示部７、操作部８、記憶装置２５及び通信部２６が備えられている。表示部７、操作部８、記憶装置２５及び通信部２６は、それぞれＣＰＵ２４に対して電気的に接続されている。記憶装置２５は、少なくともＲＡＭを含む構成であり、ラダープログラム記憶部２５ａと、編集ソフト記憶部２５ｂとを備えている。
【００２２】
ユーザは、編集ソフト記憶部２５ｂに記憶されている編集ソフトをＣＰＵ２４に実行させて、操作部８を通じてラダープログラムを編集する。ここで、ラダープログラムの編集には、ラダープログラムの作成及び変更が含まれる。編集ソフトを用いて作成されたラダープログラムは、ラダープログラム記憶部２５ａに記憶される。また、ユーザは、必要に応じてラダープログラム記憶部２５ａに記憶されているラダープログラムを読み出し、そのラダープログラムを、編集ソフトを用いて変更することができる。通信部２６は、通信ケーブル９を介してプログラム作成支援装置１を基本ユニット３に通信可能に接続するためのものである。
【００２３】
図４は、ＰＬＣ２の電気的構成について説明するためのブロック図である。図４に示すように、基本ユニット３には、ＣＰＵ１０、表示部５、操作部６、記憶装置１２及び通信部１４が備えられている。表示部５、操作部６、記憶装置１２、及び通信部１４は、それぞれＣＰＵ１０に電気的に接続されている。記憶装置１２は、ＲＡＭやＲＯＭ、メモリカードなどを含んでもよく、ラダープログラムなどが記憶される。記憶装置１２には、プログラム作成支援装置１から入力されたラダープログラムやユーザデータが上書きして記憶される。
【００２４】
図５は、本発明の実施の形態に係るプログラマブルコントローラの基本ユニット３でのスキャンタイムの構成を示す模式図である。図５が示すように１つのスキャンタイムＴは、入出力のリフレッシュを行うためのユニット間通信２０１、プログラム実行２０２、ＥＮＤ処理２０４により構成されている。ユニット間通信２０１で、基本ユニット３は、ラダープログラムを実行して得られた出力データを基本ユニット３内の記憶装置１２から外部機器などに送信するとともに、受信データを含めた入力データを基本ユニット３内の記憶装置１２に取り込む。プログラム実行２０２で、基本ユニット３は、更新された入力データを用いてプログラムを実行（演算）する。基本ユニット３はプログラムの実行によりデータを演算処理する。なお、ＥＮＤ処理とは、プログラム作成支援装置１や基本ユニット３に接続された表示器（図示せず）等の外部機器とのデータ通信、システムのエラーチェック等の周辺サービスに関する処理全般を意味する。
【００２５】
このように、プログラム作成支援装置１はユーザの操作に応じたラダープログラムを作成し、作成したラダープログラムをＰＬＣ２に転送する。ＰＬＣ２は、入出力リフレッシュ、ラダープログラムの実行およびＥＮＤ処理を１サイクル（１スキャン）として、このサイクルを周期的、すなわちサイクリックに繰り返し実行する。これにより、各種入力機器（センサ等）からのタイミング信号に基づいて、各種出力機器（モータ等）を制御する。よって、ＰＬＣ２は汎用のパーソナルコンピュータ（ＰＣ）とは全く異なる動きをする。
【００２６】
＜連結構造＞
図６（Ａ）はＰＬＣ２を構成する基本ユニット３、拡張ユニット４およびエンドユニット１１が連結される前の状態を示している。この例では、基本ユニット３の右方向に１つ以上の拡張ユニット４が連結される。最も右に位置する拡張ユニット４にはエンドユニット１１が連結される。エンドユニット１１は、最も右に位置する拡張ユニット４の右側面を保護するものであり、バスの終端機能を備えていてもよい。
【００２７】
図６（Ｂ）はＰＬＣ２を構成する基本ユニット３、拡張ユニット４およびエンドユニット１１が連結された状態を示している。このＰＬＣ２はベースレスのビルディングタイプであるため、ベースを使用せずに、基本ユニット３、拡張ユニット４およびエンドユニット１１が連結される。工場において制御盤に設置しやすくするために、ＰＬＣ２の背面にはＤＩＮレールなどの基準レール１３が取り付けられるようになっている。なお、基本ユニット３および拡張ユニット４の連結状態を維持するためにロック機構が採用されてもよい。
【００２８】
＜メモリの管理＞
上述したようにＰＬＣ２の記憶装置１２は揮発性メモリ（ＲＡＭなど）と不揮発性メモリ（ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリ、ＳＤメモリカードなど）を有している。一般に、プログラム作成支援装置１によって作成されたプロジェクトデータ（ラダープログラム、ユニット構成情報（拡張ユニットの識別情報など）、ラベル（変数など））は不揮発性メモリ（フラッシュメモリ）に格納され、そこからＲＡＭにロードされて使用される。また、ＰＬＣの制御に関連しないユーザデータ（ラダープログラムを実行することで作成されたロギングファイル、ＰＬＣの取扱説明書など）は不揮発性メモリ（ＳＤメモリカード）に格納される。近年になり、プロジェクトデータを格納するのに使用されていた不揮発性メモリの容量が増大し、未使用領域も増加することになった。この未使用領域にユーザデータを記憶すれば、未使用領域を有効活用することが可能となる。また、ユーザデータを格納するための専用のメモリを省略できる利点もある。ただし、プロジェクトデータとユーザデータとを単一のメモリに混在させると、プロジェクトデータを改変したときに、プロジェクトデータを格納できなくなってしまう恐れがある。これは未使用領域にユーザデータを格納した結果、未使用領域がほとんどなくなってしまうことで発生するだろう。よって、プロジェクトデータが改変されてサイズが増加することも考慮して、プロジェクトデータの記憶領域を確保しておき、その記憶領域にはユーザデータを格納しないような工夫が必要となる。反対にプロジェクトデータが膨大となり、ユーザデータを格納できなくなってしまうことも考えられる。よって、プロジェクトデータの記憶する記憶領域やユーザデータを記憶する記憶領域については上限サイズの管理が必要となろう。
【００２９】
図７（Ａ）ないし図７（Ｄ）は上限サイズを管理する手法の一例を示す図である。記憶装置１２には上述したように書き換え可能な不揮発性メモリ１００が設けられている。図７（Ａ）は最も単純な例を示しており、不揮発性メモリ１００にはプロジェクトデータ１０２を記憶するプロジェクト領域１０１とユーザデータ１０４を記憶するユーザ領域１０３とが存在する。プロジェクト領域１０１のうち実際にプロジェクトデータ１０２によって消費されている記憶領域は斜線の部分である。同様に、ユーザ領域１０３のうち実際にユーザデータ１０４によって消費されている記憶領域は斜線の部分である。境界１１１は、プロジェクト領域１０１とユーザ領域１０３との境界を示している。境界１１１は、プロジェクト領域１０１の上限サイズとユーザ領域１０３の上限サイズとを示している。境界１１１はアドレスとして管理されてもよいし、プロジェクト領域１０１の上限サイズとユーザ領域１０３の上限サイズとを示す情報によって管理されてもよい。なお、この例は最も単純な例であるため、不揮発性メモリ１００の全記憶領域のサイズは、プロジェクト領域１０１の上限サイズとユーザ領域１０３の上限サイズとの和に等しい。つまり、不揮発性メモリ１００の全記憶領域のサイズとプロジェクト領域１０１の上限サイズとの差から、ユーザ領域１０３の上限サイズが算出されてもよい。反対に、不揮発性メモリ１００の全記憶領域のサイズとユーザ領域１０３の上限サイズとの差から、プロジェクト領域１０１の上限サイズが算出されてもよい。このように、プロジェクト領域１０１の上限サイズとユーザ領域１０３の上限サイズとのうち一方を保持しておけば、境界１１１を管理できる。ユーザは、プログラム作成支援装置１やＰＬＣ２の基本ユニット３を操作することで境界１１１（プロジェクト領域１０１の上限サイズやユーザ領域１０３の上限サイズ）を変更する。
【００３０】
図７（Ｂ）は、プロジェクト領域１０１とユーザ領域１０３とを管理する手法の他の例を示している。この例では、プロジェクト領域１０１の上限サイズ１１２とユーザ領域１０３の上限サイズ１１３とが個別に管理されることを示している。ユーザは、プログラム作成支援装置１やＰＬＣ２の基本ユニット３を操作することでプロジェクト領域１０１の上限サイズ１１２やユーザ領域１０３の上限サイズ１１３を変更する。ただし、プロジェクト領域１０１の上限サイズ１１２やユーザ領域１０３の上限サイズ１１３との和は、不揮発性メモリ１００の全記憶領域のサイズを超えることはできない。
【００３１】
図７（Ｃ）は、プロジェクト領域１０１、ユーザ領域１０３およびその他の用途の領域１０５を管理する手法の他の例を示している。上述した例は２つの記憶領域が例示されているが、本発明は３つ以上の記憶領域についても適用可能である。ユーザは、プログラム作成支援装置１やＰＬＣ２の基本ユニット３を操作することでプロジェクト領域１０１の上限サイズ１１６やユーザ領域１０３の上限サイズ１１７、その他の用途の領域１０５の上限サイズ１１８を変更する。ただし、プロジェクト領域１０１の上限サイズ１１６とユーザ領域１０３の上限サイズ１１７とその他の用途の領域１０５の上限サイズ１１８との和は、不揮発性メモリ１００の全記憶領域のサイズを超えることはできない。
【００３２】
１つの不揮発性メモリ１００を複数の記憶領域に分割する方法はいくつか存在する。１つはファイルシステムを用いて不揮発性メモリ１００に複数のドライブを構築したり、１つのドライブに複数のパーティションを構築したりする手法がある。しかし、これらの場合は上限サイズを変更するためにフォーマットやディスクイメージの書き込みなど、複雑な作業が発生してしまう。また、その時点で記憶領域に保存されているファイルのバックアップとリストアも必要になってしまい、非常に長い作業時間が必要になってしまう。
【００３３】
そこで、１つのドライブに複数のフォルダ（ディレクトリ）を作成し、各フォルダに格納されるファイルのサイズの合計値が上限サイズを超えないように管理する手法が柔軟性やサイズの変更時間の点で有利であろう。また、この手法はファイルシステムを使用しなくても実現できる。ファイル（ファイルシステムを使用しない場合はファイルという概念は必須ではないが、便宜上１つのデータをファイルと呼ぶことにする）の種別（プロジェクトデータに属するファイルやユーザデータに属するファイル）ごとにファイルのサイズの合計値を算出し、各合計値がそれぞれの上限サイズを超えないように書き込みを制限する手法が考えられる。ファイルシステムでは読み書きはクラスタと呼ばれる最小単位に基づき実行されるため、小さなデータであっても、少なくとも１つのクラスタを占有してしまう。これは無駄である。一方で、ファイルシステムを使用しなければ、このような問題は生じないといった利点もある。
【００３４】
＜記憶領域の上限サイズの調整方法＞
上限サイズの調整はプログラム作成支援装置１から実行されてもよいし、プログラム作成支援装置１を用いずにＰＬＣ２で実行されてもよい。
【００３５】
図８は上限サイズを設定するためのユーザインタフェース（ＵＩ）１２０の一例を示している。ここでは最も簡単な例である２つの記憶領域の境界１２６を変更することで、２つの記憶領域の上限サイズを調整する手法について説明する。
【００３６】
ユーザインタフェース１２０はプログラム作成支援装置１の表示部７に表示され、操作部８の操作に連動する。ＣＰＵ２４はユーザによる操作部８の操作に応じてポインタ６４の表示位置を変更して、表示部７に表示する。スライダーバー１２１は、プロジェクト領域の上限サイズとユーザ領域の上限サイズを確定する境界１２６を調整するためのコントロールである。ＣＰＵ２４は、ポインタ６４によってスライダーバー１２１が右方向に移動されると、これに連動して境界１２６を右方向に移動し、境界１２６の移動量または位置に応じて、プロジェクト領域の上限サイズを拡張（増加）し、ユーザ領域の上限サイズを縮小（削減）する。また、ＣＰＵ２４は、ポインタ６４によってスライダーバー１２１が左方向に移動されると、これに連動して境界１２６を左方向に移動し、境界１２６の移動量または位置に応じて、プロジェクト領域の上限サイズを縮小（削減）し、ユーザ領域の上限サイズを拡張（増大）する。
【００３７】
ＣＰＵ２４は、ＰＬＣ２に問い合わせて取得したプロジェクト領域における実際の消費サイズと、ユーザ領域における実際の消費サイズとについてそれぞれ表示してもよい。図８では消費サイズがグラフ（斜線部のバーグラフで表示されているが、円グラフなど他のグラフ形式でもよい）で表示されるとともに、表１２３にも数値（％表示等であってもよいし、％表示等も併記されてもよい）で表示されている。これにより、ユーザは各記憶領域にどの程度の未使用領域があるかを視覚的に把握でき、上限サイズの決定と調整に役立つであろう。表１２３には、各記憶領域の上限サイズ、プログラム作成支援装置１に保持されている現在のプロジェクトデータをＰＬＣ２に格納する上で必要となるサイズ（現在の必要サイズ）、プログラム作成支援装置１に保持されている現在のユーザデータをＰＬＣ２に格納する上で必要となるサイズ（現在の必要サイズ）、プロジェクトデータをＰＬＣ２に格納する上で実際に消費されているサイズ（ＰＬＣ２内の消費要サイズ）、ユーザデータをＰＬＣ２に格納する上で実際に消費されているサイズ（ＰＬＣ２内の消費要サイズ）といった情報が含まれている。ＣＰＵ２４は、ＯＫボタン１２４が押下されると、スライダーバー１２１によって調整された上限サイズをＰＬＣ２に反映させる。これは変更要求をＰＬＣ２に送信し、ＰＬＣ２が保持している上限サイズを示す情報を書き換えることで実現される。ＣＰＵ２４は、キャンセルボタン１２５が押下されると、スライダーバー１２１によって調整された上限サイズを破棄し、ＰＬＣ２に反映させずに、ユーザインタフェース１２０を閉じる。
【００３８】
図９は上限サイズを設定するためのユーザインタフェース１２０’の一例を示している。ユーザインタフェース１２０’は、上述したユーザインタフェース１２０を簡素化したものであり、プログラム作成支援装置１の表示部７に表示されてもよいし、ＰＬＣ２の表示部５に表示されてもよい。ここでは後者について説明する。
【００３９】
ＰＬＣ２の基本ユニット３は市場から小型化が求められているため、表示部５や操作部６も小型化が求められる。よって、表示部５に表示可能な情報量は少なくなり、操作部６から入力可能な指示も少なくなりやすい。この例では、操作部６に選択キー、決定キー、右キー、左キー、キャンセルキーなどが含まれているものとする。ＣＰＵ１０は、選択キーによって上限サイズの調整を選択されると、ユーザインタフェース１２０’を表示部５に表示する。ＣＰＵ１０は、記憶装置１２の不揮発性メモリ１００に保持されている上限サイズの情報や、各記憶領域の消費サイズの情報を読み出す。ＣＰＵ１０は上限サイズの情報に基づき境界１２６の位置を決定して表示する。また、ＣＰＵ１０は各記憶領域の消費サイズの情報に基づき、バーグラフを表示する。
【００４０】
ＣＰＵ１０は、右キーが押下されると、これに連動して境界１２６を右方向に移動し、境界１２６の移動量または位置に応じて、プロジェクト領域の上限サイズを拡張（増加）し、ユーザ領域の上限サイズを縮小（削減）する。また、ＣＰＵ１０は、左キーが押下されると、これに連動して境界１２６を左方向に移動し、境界１２６の移動量または位置に応じて、ユーザ領域の上限サイズを拡張（増加）し、プロジェクト領域の上限サイズを縮小（削減）する。
【００４１】
また、ＣＰＵ１０は、各記憶領域について、実際の消費サイズと上限サイズとを数値（％表示等であってもよいし、％表示等も併記されてもよい）で表示してもよい。
【００４２】
消費サイズや必要サイズなどの記憶サイズ（記憶容量）に関する％（百分率）値は、ＣＰＵ１０が記憶サイズを上限サイズで除算し、その商に１００を乗算することで算出されてもよい。同様に上限サイズに関する％値は、ＣＰＵ１０が不揮発性メモリ１００の全記憶容量で上限サイズを除算し、その商に１００を乗算することで算出されてもよい。
【００４３】
図１０（Ａ）は上限サイズを調整するためのユーザインタフェース１２０の他の例を示す図である。この例では、プロジェクト領域の上限サイズを調整するためのコントロールとしてテキストボックスが採用されている。同様に、ユーザ領域の上限サイズを調整するためのコントロールとしてもテキストボックスが採用されている。
【００４４】
図１０（Ｂ）は上限サイズを調整するためのユーザインタフェース１２０の他の例を示す図である。この例では、プロジェクト領域の上限サイズを調整するためのコントロールとしてスピンコントロール（スピンボックス）が採用されている。同様に、ユーザ領域の上限サイズを調整するためのコントロールとしてもスピンコントロール（スピンボックス）が採用されている。なお、ＣＰＵ２４は、一方の記憶領域の上限サイズがテキストボックスに入力されたり、スピンコントロールによって変更されたりすると、他方の記憶領域の上限サイズを算出して変更してもよい。不揮発性メモリ１００の全記憶容量から一方の記憶領域の上限サイズを減算することで他方の記憶領域の上限サイズを算出できるからである。このように一方の記憶領域の上限サイズと他方の記憶領域の上限サイズとが関連している場合は、予めこれらの関連性を示す関数を用意しておくことで、ＣＰＵ１０は一方の記憶領域の上限サイズから他方の記憶領域の上限サイズを算出してもよい。
【００４５】
＜記憶領域とファイルパスの管理＞
ユーザに対しては複数の記憶領域をそれぞれ上限サイズを設定された個別の記憶領域であることを認識してもらうことで、プロジェクトデータやユーザデータの消費サイズに注意してもらうことが可能となろう。しかし、１つのドライブにおいて記憶領域ごとに複数のフォルダを作成する手法では、複数の記憶領域をそれぞれ上限サイズを設定された個別の記憶領域であることが分かりにくい。そこで、プログラム作成支援装置１から見たときの論理パスと、ＰＬＣ２における実パスとを変えることで、複数の記憶領域がそれぞれ上限サイズを設定された個別の記憶領域であることを明示してもよい。
【００４６】
図１１（Ａ）は、領域管理テーブルの一例を示す図である。領域管理テーブル１３０は、記憶領域の名称である領域名と、プログラム作成支援装置１から見たときの記憶領域のパスである論理パスと、ＰＬＣ２における記憶領域の実際のパスである実パスと、記憶領域に設定されている上限サイズと、実際の消費サイズとを示す情報が含まれてもよい。基本ユニット３のＣＰＵ１０は、領域管理テーブル１３０を参照することで、プログラム作成支援装置１から指定される論理パスを実パスに変更し、ファイルの読み書きを実行する。なお、ＣＰＵ１０は、上述した上限サイズの調整が実行されると、領域管理テーブル１３０に保持されている上限サイズを更新する。
【００４７】
図１１（Ｂ）はファイルサイズ管理テーブルの一例を示す図である。ＣＰＵ１０は、各記憶領域に記憶されているファイルのサイズとその合計値（消費サイズ）を管理するためにファイルサイズ管理テーブル１３１を作成して維持している。基本ユニット３が起動すると、ＣＰＵ１０は、各記憶領域に記憶されているファイルをスキャンしてサイズの情報を取得し、ファイルサイズ管理テーブル１３１に登録する。また、ＣＰＵ１０は、ファイルの新規作成、更新、削除などのファイル操作が発生する度に、ファイルサイズを取得して、ファイルサイズ管理テーブル１３１を更新する。ＣＰＵ１０は、ファイルサイズ管理テーブル１３１を参照して各記憶領域に記憶されているファイルのサイズの合計値（消費サイズ）を算出し、領域管理テーブル１３０の消費サイズを更新する。ＣＰＵ１０は、消費サイズと上限サイズを比較することで、各記憶領域に設定された上限サイズを超えるようなファイルの書き込みが要求されると、警告を出力（表示または音声出力）したり、当該書き込みを禁止したりする。
【００４８】
＜ＰＬＣの機能＞
図１２はＰＬＣ２の基本ユニット３に搭載されているＣＰＵ１０がファームウエアを実行することで実現する機能の一例を示している。なお、すべての機能は必須というわけではなく、オプションであってもよい。記憶装置１２は、揮発性メモリであるＲＡＭ１４１と２つの不揮発性メモリ１００、１４２を有している。上述したように不揮発性メモリ１００には複数の記憶領域が設けられ、プロジェクト領域にはプロジェクトデータが記憶され、ユーザ領域にはユーザデータが記憶される。もう一つの不揮発性メモリ１４２には、各記憶領域の上限サイズを示す情報や領域管理テーブル１３０やファイルサイズ管理テーブル１３１、イレース回数などが保持される。イレース回数は不揮発性メモリ１００に対して実行されたイレース処理をカウントするための変数である。なお、不揮発性メモリ１００の一部にこれらを記憶する記憶領域が確保されてもよい。なお、イレース回数に代えて書き換え回数がカウントされてもよい。
【００４９】
ＵＩ制御部１４３は、表示部５に対するユーザインタフェース１２０’の表示や操作部６から操作の入力を受け付けるユニットである。読み書き制御部１４４は、記憶装置１２に対する読み書きを担当するユニットである。読み書き制御部１４４には様々な機能が含まれる。サイズ取得部１４５は、不揮発性メモリ１００の各記憶領域における実際の消費サイズを取得するユニットであり、上述した領域管理テーブル１３０やファイルサイズ管理テーブル１３１を管理している。書き込み判定部１４６は、不揮発性メモリ１００に確保されている記憶領域に対するファイルの書き込み要求を実行できるかどうかを、上限サイズと消費サイズとに基づいて判定するユニットである。速度制御部１４７は不揮発性メモリ１００に対するデータの書き込み速度（例：所定時間当たりの平均書き込み速度）を制御するユニットである。警告部１４８は、上限サイズの変更が許容されない場合やファイルの書き込みが禁止されるべき場合に警告を表示部５やスピーカー（不図示）から出力するユニットである。読み書き制御部１４４は、ファイル転送プロトコル（ＦＴＰなど）などの通信プログラムが実装されており、通信部１４を通じて外部機器と通信してデータの読み書きを実行してもよい。
【００５０】
サイズ調整部１５０は、不揮発性メモリ１００に確保されている複数の記憶領域のそれぞれの上限サイズを調整するユニットである。受付部１５１は、操作部６やプログラム作成支援装置１から上限サイズの変更要求を受け付けるユニットである。可否判定部１５２は、操作部６やプログラム作成支援装置１によって要求された上限サイズの調整を反映できるかどうかを判定するユニットである。サイズ調整部１５０は、上限サイズの調整を反映可能と判定すると、領域管理テーブル１３０に保持されている上限サイズを調整後の上限サイズでもって更新する。
【００５１】
ここではＰＬＣ２が主体となって上限サイズを調整する例を示しているが、プログラム作成支援装置１が主体となってもよい。とりわけ、プログラム作成支援装置１が記憶装置１２にアクセスできる場合、読み書き制御部１４４やサイズ調整部１５０の機能の大半はプログラム作成支援装置１のＣＰＵ２４によって実現されてもよい。
【００５２】
＜プログラム作成支援装置の機能＞
図１３はプログラム作成支援装置１に搭載されているＣＰＵ２４が設定プログラム１６１を実行することで実現する機能の一例を示している。なお、すべての機能は必須というわけではなく、オプションであってもよい。記憶装置２５の編集ソフト記憶部２５ｂには、上限サイズを調整して設定する設定プログラム１６１が記憶されている。また、記憶装置２５のラダープログラム記憶部２５ａには、プロジェクトデータ１６２が記憶されている。また、記憶装置２５にはユーザデータ１６３が記憶されている。
【００５３】
ＣＰＵ２４は例えば次のような機能を実現する。サイズ取得部１６４は、記憶装置２５に記憶されているプロジェクトデータ１６２のサイズとユーザデータのサイズを取得するユニットである。これらは上述した必要サイズである。これらはＰＬＣ２に対して書き込みの対象となっているデータである。また、サイズ取得部１６４は、通信部２６を介してＰＬＣ２と通信し、各記憶領域の上限サイズや消費サイズを取得してもよい。サイズ設定部１６５は、スライダーバー１２１の移動量やテキストボックスまたはスピンボックスに入力された数値に基づき、各記憶領域の上限サイズを算出し、算出した上限サイズを指定した上限サイズの変更要求をＰＬＣ２に対して通信部２６を介して送信するユニットである。ＵＩ制御部１６６はユーザインタフェース１２０の表示を制御したり、操作部８からの入力を受け付けたりするユニットである。ＵＩ制御部１６６は、サイズ取得部１６４によって取得された上限サイズや消費サイズに応じてバーグラフを作成したり、境界１２６の位置を確定したり、操作部から入力された指示に応じてスライダーバー１２１の表示位置を変更したりする。また、ＵＩ制御部１６６は、サイズ取得部１６４を通じて取得した各記憶領域の上限サイズ、必要サイズおよび消費サイズに基づき表１２３を作成して、ユーザインタフェース１２０に表示してもよい。可否判定部１６７は、サイズ設定部１６５により設定された上限サイズをＰＬＣ２に対して反映させることができるかどうかを判定するユニットである。可否判定部１６７は、たとえば、消費サイズと上限サイズとを比較してもよいし、消費サイズと上限サイズとの比較結果をＰＬＣ２の可否判定部１５２から取得し、比較結果が上限サイズを変更可能であることを示しているのかそれとも不可能であることを示しているのかを判定してもよい。
【００５４】
＜フローチャート＞
図１４は、ＰＬＣ２のＣＰＵ１０が実行する上限サイズの設定処理を示すフローチャートである。ＰＬＣ２の操作部６やプログラム作成支援装置１の操作部８を通じて上限サイズの設定処理の開始が指示されるとＣＰＵ１０は以下の処理を実行する。なお、上限サイズの設定処理が開始されると、読み書き制御部１４４は、不揮発性メモリ１００に対するデータの書き込みを禁止または制限してもよい。上限サイズの設定処理は、プロジェクトデータに含まれているラダープログラムが実行されている期間においても実行可能であり、実行されていない期間においても実行可能である。
【００５５】
Ｓ１１でＣＰＵ１０（サイズ取得部１４５）は不揮発性メモリ１００の各記憶領域における消費サイズを取得する。たとえば、サイズ取得部１４５は、ファイルサイズ管理テーブル１３１を参照して各ファイルのサイズを取得し、取得したサイズを加算して合計値を算出する。なお、これから書き込まれるファイルについて必要サイズが必要な場合は、プログラム作成支援装置１から必要サイズを取得する。
【００５６】
Ｓ１２でＣＰＵ１０（受付部１５１）は上限サイズの調整を受け付ける。受付部１５１は操作部６やプログラム作成支援装置１から指定される上限サイズの調整量を受け付ける。
【００５７】
Ｓ１３でＣＰＵ１０（可否判定部１５２）は上限サイズの調整をＰＬＣ２に対して反映可能かどうかを判定する。可否判定部１５２は受付部１５１により受け付けられた各記憶領域の上限サイズとサイズ取得部１４５によって取得された消費サイズに基づき、上限サイズの調整を反映可能かどうかを判定する。なお、これからプログラム作成支援装置１によって作成されたプロジェクトデータ１６２やユーザデータ１６３が書き込まれるタイミングでは、可否判定部１５２は、上限サイズと必要サイズとに基づき、上限サイズの調整を反映可能かどうかを判定する。調整を反映可能でない場合、可否判定部１５２は警告部１４８に警告の出力を指示し、Ｓ１４に進む。
【００５８】
Ｓ１４でＣＰＵ１０（警告部１４８）は上限サイズを調整できないことを示す警告メッセージを表示部５に出力する。一方で、調整を反映可能であればＳ１５に進む。
【００５９】
Ｓ１５でＣＰＵ１０（サイズ調整部１５０）は、上限サイズの調整を反映させる。たとえば、サイズ調整部１５０は、読み書き制御部１４４に対して領域管理テーブル１３０などによって管理されている各記憶領域の上限サイズを、指定した上限サイズで更新するよう指示する。読み書き制御部１４４は、指定された上限サイズで領域管理テーブル１３０などによって管理されている各記憶領域の上限サイズを書き換える。
【００６０】
Ｓ１６でＣＰＵ１０（読み書き制御部１４４）は不揮発性メモリ１００に対するデータの書き込みを再開する。読み書き制御部１４４は、たとえば、プログラム作成支援装置１から送信されてきた新しいプロジェクトデータをプロジェクト領域に書き込み、領域管理テーブル１３０とファイルサイズ管理テーブル１３１を更新する。同様に、読み書き制御部１４４は、プログラム作成支援装置１から送信されてきた新しいユーザデータをユーザ領域に書き込み、領域管理テーブル１３０とファイルサイズ管理テーブル１３１を更新する。
【００６１】
＜ユーザ領域に対するデータの書き込み単位＞
ＰＬＣ２のＣＰＵ２４のロギング部１５３はラダープログラムなどのユーザプログラムを実行することで生成されたデータをログとして記録する。ロギング部１５３はこのようなロギングデータをユーザ領域に書き込む。ところで、ユーザはＰＬＣ２の電源スイッチをオフにすることでＰＬＣ２の動作電力を簡単に遮断することができる。そのため、ユーザによってロギングデータの書き込み中に電源スイッチがオフにされると、ロギングデータの書き込みが中途半端な状態で終了してしまう可能性がある。
【００６２】
そこで、ロギング部１５３は、ユーザプログラムを実行することで生成されるロギングデータを一定のサンプリング数を単位としてユーザ領域に書き込むことにする。一般にファイルシステムではトランザクションを単位としてデータを書き込む。よって、ロギング部１５３が１つのトランザクションに相当するサンプリング数のデータを一塊としてユーザ領域に書き込むことで、ロギングデータの中途半場な書き込みを抑制できるようになる。たとえば、１つのトランザクションがｎ個のサンプルから構成される場合、ロギング部１５３は、ｎ個のサンプルずつロギングデータをユーザ領域へ書き込む。
【００６３】
＜書き込み速度の制御＞
不揮発性メモリ１００などの記憶装置には性能上（設計上）の上限速度が存在する。よって、通常は、性能上の上限速度でデータが不揮発性メモリ１００に書き込まれる。その一方で、不揮発性メモリ１００をフラッシュメモリやＥＥＰＲＯＭで構成する場合、不揮発性メモリ１００にはイレース回数や書き換え回数の制限が存在する。この制限を超えると不揮発性メモリ１００に書き込むことが不可能となってしまう。ＰＬＣ２には設計段階で製品寿命（期待寿命）が想定され、その製品寿命を下回らないように各部品が選択される。よって、不揮発性メモリ１００の寿命がＰＬＣ２の期待寿命を下回らないように、不揮発性メモリ１００への書き込みを制限する必要がある。
【００６４】
たとえば、読み書き制御部１４４の速度制御部１４７は、不揮発性メモリ１００への情報の書き込み速度を不揮発性メモリ１００の性能上の上限速度よりも低速な書き込み速度に制限してもよい。ここで、書き込み速度は、ある所定期間における平均書き込み速度である。速度制御部１４７が書き込み用のバッファに保持されているデータを不揮発性メモリ１００に対して間欠的（一定の待機時間ごとに）に出力することで、ある所定期間における平均書き込み速度を低下させることが可能となる。これにより、ある所定期間に発生するイレース回数や書き換え回数が制限されるため、不揮発性メモリ１００の寿命がＰＬＣ２の期待寿命を下回らないようになる。なお、ある所定期間における平均書き込み速度は、不揮発性メモリ１００の寿命（イレース回数や書き換え回数の上限値）とＰＬＣ２の期待寿命とから算出される。つまり、期待寿命内でのイレース回数や書き換え回数が上限値以下となるように、平均書き込み速度が算出される。
【００６５】
ところで、プロジェクトデータの書き換え頻度はそれほど多くないが、ユーザプログラムを実行することで発生するロギングデータなどのユーザデータの書き換え頻度は相対的に多い。そこで、速度制御部１４７は、不揮発性メモリ１００に対する書き込みの対象となっているデータの種別（プロジェクトデータか、ユーザデータかなど）に応じて書き込み速度を制限してもよい。たとえば、速度制御部１４７は、プロジェクト領域に対するプロジェクトデータの書き込みを検知すると、書き込み速度を高速に設定する。一方で、速度制御部１４７は、ユーザ領域に対するユーザデータの書き込みを検知すると、書き込み速度を低速に設定する。このように書き換え頻度の多い種別のデータについては書き込み速度を低速にすることで、効率よく、不揮発性メモリ１００の寿命を延ばすことができる。一方で、プロジェクトデータのような比較的にサイズの大きなデータについて書き込み速度を低下させてしまうと、プログラム作成支援装置１からＰＬＣ２へのデータの転送時間が長くなり、ユーザビリティが低下する。よって、このような種別のデータについては書き込み速度を高速とし、ユーザビリティ向上させる。
【００６６】
なお、このような低速化は、プログラム作成支援装置１からの書き込み要求には適用されず、ＰＬＣ２内で発生した書き込み要求にだけ適用されてもよい。速度制御部１４７は、ユーザプログラムの実行によって発生する情報の書き込み速度を制限し、プログラマブル・ロジック・コントローラの起動時、メンテナンス時またはプログラム作成支援装置１からのユーザプログラムまたはユーザデータの転送時には書き込み速度を制限しないようにしてもよい。これにより不揮発性メモリ１００の寿命がＰＬＣ２の期待寿命を下回らないようにしつつ、高速に書き込むことが必要な情報については高速に書き込むことが可能となる。つまり、ＰＬＣ２の期待寿命内で実行されるイレース回数や読み書き回数が不揮発性メモリ１００の寿命回数を超えないようになる。
【００６７】
＜イレース回数に基づく警告＞
不揮発性メモリ１００のイレース回数が不揮発性メモリ１００の寿命回数を超えると、不揮発性メモリ１００にはもはや情報を書き込めなくなってしまう。これは、ＰＬＣ２の交換や修理が必要となることを意味する。工場で製造ラインが稼働中にＰＬＣ２の動作が停止してしまうと、製造ラインの稼働率が低下してしまう。製造ラインの稼働中におけるＰＬＣ２の動作停止を回避するためには、不揮発性メモリ１００の寿命が近づいた時に、ユーザにそれを警告して、ＰＬＣ２の交換や修理を事前に促すことが望ましい。
【００６８】
そこで、カウント部１５４は、不揮発性メモリ１００のセクタごとイレース回数または書き換え回数をカウントし、カウント値（イレース回数／書き換え回数）を不揮発性メモリ１４２に記憶させる。さらに、書き込み判定部１４６は、不揮発性メモリ１００におけるいずれかのセクタについてのカウント値が閾値を超えると警告部１４８に警報を出力するよう指示する。警告部１４８に警報を表示部５や音声出力部（不図示）から出力する。
【００６９】
これにより不揮発性メモリ１００の寿命が尽きる前にＰＬＣ２のメンテナンスをユーザに促すことが可能となる。
【００７０】
＜ユーザデータの保全とユーザの使い勝手の向上＞
上述したように不揮発性メモリ１００などのプログラムメモリにプロジェクトデータだけでなくユーザデータを記憶することで、プログラムメモリの未使用領域を有効活用できるようになる。ところで、ＰＬＣ２においてユーザデータを複数の記憶手段に保持しておけばデータの保全性が高まるであろう。ユーザはＰＬＣ２に接続されたプログラム作成支援装置１からユーザデータを書き込むことがあるが、複数の記憶手段はそれぞれ個別の記憶手段としてユーザには見えるため、ユーザは同一のデータを複数の記憶手段のそれぞれに書き込む必要があり、使い勝手に欠けるであろう。そこで、本実施の形態では、データの保全を図りつつユーザの使い勝手も向上することにする。
【００７１】
また、ユーザデータとしては、ＰＬＣ２がラダープログラムを実行して生成するロギングデータなども含まれてもよい。この場合、ユーザデータはプロジェクトデータと比較して頻繁に書き換えられる。つまり、不揮発性メモリ１００にユーザデータを保持すると、ユーザデータの頻繁な書き換えによって不揮発性メモリ１００の寿命が尽きやすくなる。そこで、本実施の形態では、さらに、ユーザデータを複数の記憶手段に記憶することでデータの保全を図りつつ、代表記憶手段に対してデータの操作を許容することで複数の記憶手段の全体としての寿命を延ばす手法を提案する。
【００７２】
図１５（Ａ）および図１５（Ｂ）は実施の形態の基本的な概念を説明するための図である。上述した記憶装置１２は物理的に分割された複数の記憶部（半導体記憶素子などの記憶装置）を備えている。ここでは、最も簡単な例として、記憶装置１２は第１メモリ２００と第２メモリ２１０を有しているものとする。第１メモリ２００は、たとえば、ＲＡＭなど高速に読み書き可能な揮発性メモリである。第２メモリ２１０は、たとえば、不揮発性メモリ１００や着脱可能なメモリカードであり、ＲＡＭと比較して低速に読み書き可能なメモリである。なお、第１メモリ２００や第２のメモリ２１０は、ネットワークドライブなど、必ずしもＰＬＣ２に内蔵されている必要はない。
【００７３】
第１メモリ２００や第２メモリ２１０には必ずしもファイルシステムが構築されている必要はない。なぜなら、同一のデータを記憶して相互に同期していれば十分だからである。ただし、ここでは説明の便宜上、第１メモリ２００や第２メモリ２１０にはファイルシステムに基づき論理ドライブが構築されているものとする。第１メモリ２００には、ＲＡＭディスクなどの第１論理ドライブ２０３が構築されている。第２メモリ２１０には第１論理ドライブ２０３と同一のデータ（ファイル）を記憶するための第２論理ドライブ２１１が構築されている。なお、図１５（Ａ）が示すように、第２メモリ２１０には、第１論理ドライブ２０３と同期する必要のない第３論理ドライブ２１２が構築されていてもよい。
【００７４】
第１論理ドライブ２０３と第２論理ドライブ２１１には、頻繁に書き換えられ、かつ、高速にアクセスすることが望まれるユーザデータなどが記憶される。第１論理ドライブ２０３の書き換え可能回数が第２論理ドライブ２１１の書き換え可能回数よりも多い場合、第１論理ドライブ２０３が予め代表論理ドライブとして選択され、第１論理ドライブ２０３に対してファイル操作が実行される。第２論理ドライブ２１１は、予め定められた同期条件（例：定期的であってもよいし、トリガーが発生したことであってもよい）が満たされると、第１論理ドライブ２０３との同期処理を実行し、同一のファイルを保持する。なお、寿命よりも保全性（ファイルの同一性）を重視する場合、ファイルの書き込みは第１論理ドライブ２０３と第２論理ドライブ２１１とに同時に実行されてもよい。また、第１論理ドライブ２０３が高速で、第２論理ドライブ２１１が低速である場合、ファイルの読み出しは第１論理ドライブ２０３だけに実行されてもよい。
【００７５】
ところで、記憶装置に関する技術としてキャッシュという技術があるが、キャッシュは一部のファイルにだけ適用され、ドライブ全体の同期処理を行うものではない。また、本実施の形態では、第１論理ドライブ２０３の記憶容量と第２論理ドライブ２１１の記憶容量は実質的に同一であるが、キャッシュにおけるキャッシュメモリの記憶容量とキャッシュの対象となるファイルを記憶した記憶装置の記憶容量は大きく異なっている。また、ハードディスクドライブ（ＨＤＤ）では、ミラーリング（ＲＡＩＤ  １）という技術が存在するが、ミラーリング用のハードディスクドライブは同一の機種であり、ＲＡＭと不揮発性メモリのように読み書き性能や寿命などが大きく異なるものではない。
【００７６】
なお、第１論理ドライブ２０３と第２論理ドライブ２１１との同期はミラーリングのように頻繁に実行される必要はない。頻繁に実行してしまうと、第２論理ドライブ２１１の寿命を縮めてしまうことになるからである。
【００７７】
ＰＬＣ２が起動したときに第２論理ドライブ２１１のユーザデータが第１論理ドライブ２０３に書き込まれ、両者の記憶内容が同期する。さらに、所定時間（例：数分、数時間）が経過する度に同期処理が実行されうる。なお、これとは異なる同期条件（例：同期指示の入力、ラダープログラムの終了など）が満たされたときに、同期処理が実行されてもよい。このように少なくともＰＬＣ２の起動から遅くとも動作電力の供給が遮断されるまでの間に一度以上の同期処理が実行される。
【００７８】
＜ドライブ管理テーブルとファイル管理テーブル＞
図１６（Ａ）は記憶装置１２に備えられている複数の記憶装置とドライブとの関係を管理するドライブ管理テーブルの一例である。ドライブ管理テーブル１３３は記憶装置１２の不揮発性メモリに格納される。
【００７９】
ドライブ管理テーブル１３３にはドライブごとにエントリーが作成される。各エントリーにはパス（ドライブ名など）、ファイルの読み出し対象となるメモリの名称、ファイルの書き込み対象となるメモリの名称、プログラム作成支援装置１などの外部の情報処理装置に対してドライブを公開するかどうかを示すフラグなどが含まれている。この例では、第１メモリ２００に第１論理ドライブ（／ＭＥＭ１）が構築されており、第２メモリ２１０に第２論理ドライブ（／ＭＥＭ２）が構築されていることが示されている。第１論理ドライブ（／ＭＥＭ１）に対してファイルの読み出し要求があると、第１メモリ２００に対してファイルの読み出しが実行される。第１論理ドライブ（／ＭＥＭ１）に対してファイルの書き込み要求があると、第１メモリ２００と第２メモリ２００に対してファイルの書き込みが実行される。つまり、第１メモリ２００の第１論理ドライブ（／ＭＥＭ１）に対するファイルの書き込みは、第２メモリ２１０の第２論理ドライブ（／ＭＥＭ２）にも実行される。たとえば、第１メモリ２００が高速な揮発性メモリであり、第２メモリ２１０が低速な不揮発性メモリである場合、第１メモリ２００から対象ファイルを高速に読み出すことが可能となり、また、ＰＬＣ２が電源からの電力を遮断されても対象ファイルは第２メモリ２１０によって保全されることになる。なお、第２メモリ２１０への書き込みは第１メモリ２００とほぼ同時に実行されてもよいし、ある程度時間が経過してから同期処理によって実行されてもよい。
【００８０】
ドライブ管理テーブル１３３によれば、第２論理ドライブ（／ＭＥＭ２）に対してファイルの読み出し要求があると、第２メモリ２１０に対してファイルの読み出しが実行される。第２論理ドライブ（／ＭＥＭ２）に対してファイルの書き込み要求があると、第２メモリ２１０に対してファイルの書き込みが実行される。第２論理ドライブ（／ＭＥＭ２）のファイルが更新されると、第１論理ドライブ（／ＭＥＭ１）と第２論理ドライブ（／ＭＥＭ２）の同期処理が実行されることになる。
【００８１】
第１論理ドライブ（／ＭＥＭ１）は、プログラム作成支援装置１などの外部の情報処理装置に対して公開されているため、外部の情報処理装置が第１論理ドライブ（／ＭＥＭ１）にファイルを書き込むことができる。第２論理ドライブ（／ＭＥＭ２）は公開されていないため、外部の情報処理装置から直接的にファイルを書き込むことはできない。しかし、ＰＬＣ２は、ドライブ管理テーブル１３３を参照し、第１論理ドライブ（／ＭＥＭ１）だけでなく第２論理ドライブ（／ＭＥＭ２）にもファイルの書き込みを実行する。
【００８２】
図１６（Ｂ）はファイル管理テーブルの一例を示す図である。ファイル管理テーブル１３４は各ドライブごとに作成されて、記憶装置１２の不揮発性メモリに格納される。ファイル管理テーブル１３４には、ファイル名とパスを示す情報であるファイルパスと、ファイルの操作（書き換え）日時を示すタイムスタンプと、ディレクトリなのかそれともファイルなのかを示す属性の情報とが含まれている。第１論理ドライブ（／ＭＥＭ１）と第２論理ドライブ（／ＭＥＭ２）の同期処理を実行すると、ＰＬＣ２は、各ドライブのファイル管理テーブル１３４を参照し、タイムスタンプに基づいて古いファイルを新しいファイルで上書きしたり、新規のファイルをコピーしたりして、第１論理ドライブ（／ＭＥＭ１）と第２論理ドライブ（／ＭＥＭ２）の記憶内容を最新の状態に同期させる。
【００８３】
図１６（Ｃ）はファイル管理テーブルの他の例を示す図である。ファイルの新旧を判断する情報として、タイムスタンプの代わりにファイルの更新回数（書き換え回数）が採用されている。これにより、ＰＬＣ２は、更新回数の多いファイルを更新回数の少ないファイルに対して上書きして、第１論理ドライブ（／ＭＥＭ１）と第２論理ドライブ（／ＭＥＭ２）の記憶内容を最新の状態に維持する。なお、ＰＬＣ２のＣＰＵ１０は、ファイルの操作（追記、書き込み、書き換え、上書き、消去など記憶内容の変更をもたらすもの）を監視しており、ファイルの操作を検出するたびにファイル管理テーブル１３４を更新する。たとえば、ＣＰＵ１０は第１論理ドライブ（／ＭＥＭ１）において／ａａａ／ｂｂｂ．ｔｘｔの書き換えを検出すると、ファイル管理テーブル１３４をサーチしてこのファイルのエントリーを発見し、発見したエントリーにおける更新回数を３０回から３１回へと更新する（図１６（Ｃ）で示す更新回数が重複しないように、ファイル管理テーブル１３４の全ディレクトリ及び全ファイルの更新回数をサーチし、最大の更新回数に１を足した値、ここでは３１回へと更新する）。また、ＣＰＵ１０は、第１論理ドライブ（／ＭＥＭ１）のファイル管理テーブル１３４と第２論理ドライブ（／ＭＥＭ２）のファイル管理テーブル１３４とを比較する。ＣＰＵ１０は、比較の結果に応じて、第１論理ドライブ（／ＭＥＭ１）に記憶されている／ａａａ／ｂｂｂ．ｔｘｔの更新回数が３１回であり、第２論理ドライブ（／ＭＥＭ２）に記憶されている／ａａａ／ｂｂｂ．ｔｘｔの更新回数が２０回であることを認識する。ＣＰＵ１０は、第１論理ドライブ（／ＭＥＭ１）に記憶されている／ａａａ／ｂｂｂ．ｔｘｔが第２論理ドライブ（／ＭＥＭ２）に記憶されている／ａａａ／ｂｂｂ．ｔｘｔよりも新しいことを認識する。その結果、ＣＰＵ１０は、第１論理ドライブ（／ＭＥＭ１）に記憶されている／ａａａ／ｂｂｂ．ｔｘｔを第２論理ドライブ（／ＭＥＭ２）の／ａａａ／ｂｂｂ．ｔｘｔに上書きし、第２論理ドライブ（／ＭＥＭ２）に記憶されている／ａａａ／ｂｂｂ．ｔｘｔの更新回数を３１回に更新する。
【００８４】
このような同期処理は予め設定された同期条件が満たされると実行される。同期条件としては、たとえば、定期的であってもよいし、あるいは、第１論理ドライブ（／ＭＥＭ１）において操作されたファイルの数をカウントし、カウント値が所定の閾値を超えたことであってもよい。
【００８５】
ＣＰＵ１０は、ファイル管理テーブル１３４を参照し、第１論理ドライブ（／ＭＥＭ１）から削除されたファイルが第２論理ドライブ（／ＭＥＭ２）に未だに記憶されていることを検知すると、第２論理ドライブ（／ＭＥＭ２）から当該ファイルを削除し、そのファイルのエントリーも第２論理ドライブ（／ＭＥＭ２）のファイル管理テーブル１３４から削除する。
【００８６】
ＣＰＵ１０は、ファイル管理テーブル１３４を参照し、第１論理ドライブ（／ＭＥＭ１）に第２論理ドライブ（／ＭＥＭ２）には記憶されていない新規のファイルを検知すると、第２論理ドライブ（／ＭＥＭ２）に対して当該ファイルをコピーし、そのファイルのエントリーも第２論理ドライブ（／ＭＥＭ２）のファイル管理テーブル１３４に対してコピーする。
【００８７】
なお、ここではファイルの同期処理について説明したが、ディレクトリについても同様の同期処理が適用される。たとえば、ある新規のファイルが新規のディレクトリに格納されていることを検知すると、ＣＰＵ１０は、新規のディレクトリを作成し、作成した新規のディレクトリに新規のファイルを書き込む。また、ＣＰＵ１０は、新規のディレクトリのエントリーと新規のファイルのエントリーを第１論理ドライブ（／ＭＥＭ１）のファイル管理テーブル１３４から第２論理ドライブ（／ＭＥＭ２）のファイル管理テーブル１３４にコピーする。
【００８８】
図１６（Ａ）に示したように複数のメモリへの同時書き込みが設定されている場合、あるファイルを第１論理ドライブ（／ＭＥＭ１）と第２論理ドライブ（／ＭＥＭ２）とに書き込もうとしたときに、両者のファイル管理テーブル１３４が一致していないことがある。たとえば、ある種類のファイルについては即時に両方のドライブに書き込まれるが、別の種類のファイルについては一方のドライブには即時に書き込み、他方のドライブには遅延して書き込むといった設定が有効な場合にこのような事態が発生する。より具体的には、／ｘｘｘというディレクトリにｙｙｙ．ｔｘｔを書き込むといった要求が発生したときに、第１論理ドライブ（／ＭＥＭ１）には／ｘｘｘというディレクトリが存在するが、第２論理ドライブ（／ＭＥＭ２）には／ｘｘｘというディレクトリが存在しないことがある。この場合、第２論理ドライブ（／ＭＥＭ２）にｙｙｙ．ｔｘｔを書き込めない。そこで、ＣＰＵ１０は、あるファイルの書き込み要求を受け付けると、第１論理ドライブ（／ＭＥＭ１）と第２論理ドライブ（／ＭＥＭ２）とを同期させてから、このファイルの書き込み要求を実行してもよい。上述した例であれば、ＣＰＵ１０は同期処理によって、第２論理ドライブ（／ＭＥＭ２）に／ｘｘｘというディレクトリを作成した後で、ｙｙｙ．ｔｘｔの書き込み処理を第１論理ドライブ（／ＭＥＭ１）と第２論理ドライブ（／ＭＥＭ２）に実行する。
【００８９】
ところで、電源から電力を供給されてＰＬＣ２が起動すると、第１論理ドライブ（／ＭＥＭ１）と第２論理ドライブ（／ＭＥＭ２）との記憶内容が一致していないことがある。たとえば、第１メモリ２００がＲＡＭであり、第２メモリ２１０が不揮発性メモリである場合、第１メモリ２００の第１論理ドライブ（／ＭＥＭ１）の記憶内容は電源オフによって失われており、第２論理ドライブ（／ＭＥＭ２）と齟齬を生じする。そこで、ＣＰＵ１０は、電源から電力を供給されてＰＬＣ２が起動すると、第２論理ドライブ（／ＭＥＭ２）から第１論理ドライブ（／ＭＥＭ１）へ同期処理を実行し、両者の記憶内容を一致させてもよい。
【００９０】
上述したように第１メモリ２００がＲＡＭであり、第２メモリ２１０が不揮発性メモリを搭載したメモリカードであってもよい。ＣＰＵ１０は、メモリカードが挿入されているときは、ＲＡＭとメモリカードとの双方に書き込みを実行し、ＲＡＭからのみ読み出しを実行する。メモリカードがアンマウントされると、ＣＰＵ１０は、ＲＡＭにのみ書き込みと読み出しを実行する。さらに、メモリカードがＰＬＣ２に挿入されて再度マウントされると、ＣＰＵ１０は、ＲＡＭからメモリカードに対して同期処理を実行する。このような同期処理はメモリカードが故障したときに、ファイルの書き込みを中断することなく、メモリカードを交換できる点で有利である。なお、メモリカードに対しても同時書き込みではなく、時間差書き込み（同期処理など）が採用されてもよい。
【００９１】
上述したように第１メモリ２００がＲＡＭであり、第２メモリ２１０がネットワークストレージ（不揮発性の記憶装置）であってもよい。ネットワークストレージはＦＴＰなどの汎用のファイル転送プロトコルや専用のファイル転送プロトコルによってファイルが読み書きされるネットワーク上の記憶装置である。ＣＰＵ１０は、ＰＬＣ２がネットワークストレージに接続されると、ＲＡＭとネットワークストレージとの双方に書き込みを実行し、ＲＡＭからのみ読み出しを実行する。ネットワークストレージとの通信が切断されると、ＣＰＵ１０は、ＲＡＭにのみ書き込みと読み出しを実行する。さらに、ネットワークストレージとの通信が回復すると、ＣＰＵ１０は、ＲＡＭからネットワークストレージに対して同期処理を実行する。このような同期処理は通信障害やネットワークストレージのメンテナンスによってネットワークストレージとの通信が切断されたときに、ファイルの書き込みを中断しなくて済むため、有利である。
【００９２】
＜同期処理の関する機能＞
図１７はＰＬＣ２の基本ユニット３に搭載されているＣＰＵ１０がファームウエアを実行することで実現する機能の一例を示している。なお、すべての機能は必須というわけではなく、オプションであってもよい。また、上述したいくつかの機能（たとえば、速度制御機能やイレース回数に基づき警告機能など）も含まれていてもよいが、その機能の説明はすでに説明済みであるため、説明を省略する。
【００９３】
記憶装置１２には揮発性のメモリや不揮発性のメモリなど様々なメモリが含まれている。この例では、高速で揮発性の第１メモリ２００に第１論理ドライブ２０３が構築されており、低速で不揮発性の第２メモリ２１０に第２論理ドライブ２１１が構築されている。第１論理ドライブ２０３と第２論理ドライブ２１１はそれぞれ同一のデータが格納される複数の記憶手段の一例である。第３メモリ２２０は揮発性または不揮発性のメモリであり、ドライブ管理テーブル１３３やファイル管理テーブル１３４などを記憶する。
【００９４】
受付部２４４は、ロギング部１５３、操作部６または通信部１４を介した外部の情報処理装置からファイル（データ）の読み出し要求や書き込み要求を受け付ける機能である。上述したように通信部１４は、汎用のファイル転送プロトコルや専用のファイル転送プロトコルを実装し、外部の情報処理装置（例：ＰＣやプログラム作成支援装置１）と通信する。受付部２４４が受け付けたファイル操作要求はデータ操作部２４１に渡される。このファイル操作要求は、たとえば、複数のメモリ（ドライブ）のうち少なくとも予め選択された代表記憶手段であるメモリやドライブに対するデータの操作要求である。データ操作部２４１は、受付部２４４が受け付けたデータ（データはファイル形式で格納されてもよい）の操作要求を少なくとも予め選択された代表メモリまたは代表論理ドライブに対して実行する。なお、プログラム作成支援装置１や操作部６を通じて第１メモリ２００と第２メモリ２１０への同時書き込みが設定されている場合、データ操作部２４１は代表メモリである第１メモリ２００だけでなく、第２メモリ２１０にも同一のデータを書き込む。なお、データの操作要求が読み出し要求である場合、データ操作部２４１は、代表メモリである第１メモリ２００からデータを読み出し、第２メモリ２１０にはアクセスしない。
【００９５】
同期部２４２は、第１メモリ２００の第１論理ドライブ２０３の記憶内容と第２メモリ２１０の第２論理ドライブ２１１の記憶内容とを同期させる機能である。上述したように同期部２４２は、ドライブ管理テーブル１３３やファイル管理テーブル１３４を参照し、これらの記憶内容が一致するように同期処理を実行する。このように同期部２４２は、複数の論理ドライブがそれぞれ同一のデータを格納したファイルを記憶するようファイルの同期処理を実行する同期手段として機能する。同期部２４２は、プログラム作成支援装置１から通信部１４を介して複数の論理ドライブ間での同期の対象となるファイルまたはディレクトリを指定されてもよい。この場合、同期部２４２は、指定されたファイルまたはディレクトリについて同期処理を実行する。
【００９６】
テーブル管理部２４３は、ドライブ管理テーブル１３３やファイル管理テーブル１３４を作成したり、更新したりする機能である。同期部２４２がファイルの同期処理を実行すると、更新内容をファイル管理テーブル１３４に反映させる。テーブル管理部２４３は、各論理ドライブの公開／非公開や同時書き込みまたは同期処理の対象となる２つ以上の論理ドライブなどの情報を、ＰＬＣ２の操作部６やプログラム作成支援装置１から受け付けてドライブ管理テーブル１３３に書き込む。テーブル管理部２４３は、ファイル管理テーブル１３４を用いて、ファイルのタイムスタンプや更新回数を管理している。テーブル管理部２４３は、各ファイルの更新回数をカウントし、ファイル管理テーブル１３４に更新回数を登録する。
【００９７】
上述したようにドライブ管理テーブル１３３によって公開するよう設定されている論理ドライブについては、データ操作部２４１は、プログラム作成支援装置１の表示部７に当該論理ドライブの記憶内容が表示されるよう、この論理ドライブをプログラム作成支援装置１に公開する。通常、代表論理ドライブとして指定されている第１論理ドライブ２０３が公開に設定され、代表論理ドライブとして指定されていない第２論理ドライブ２１１が非公開に設定される。このように、データ操作部２４１は、プログラム作成支援装置１が複数の論理ドライブのうち代表論理ドライブをプログラム作成支援装置１の表示部７に表示するよう、代表論理ドライブをプログラム作成支援装置１に公開する。なお、第２論理ドライブ２１１の公開／非公開は、必ずしも設定されなくてもよい。
【００９８】
図１８はプログラム作成支援装置１に搭載されているＣＰＵ２４が設定プログラム１６１を実行することで実現する機能の一例を示している。同期設定部２５０は、同期処理の対象となる複数の論理ドライブを選択して設定したり、代表論理ドライブを設定したり、各論理ドライブごとの公開／非公開を設定したり、同期処理の対象となるファイルやディレクトリを指定したりする機能である（これらのうち、いずれか一つ又は複数の設定・指定を行ってもよい）。このように、同期設定部２５０は、代表論理ドライブを選択する選択手段として機能する。
【００９９】
ファイルマネージャ２５１は、ＰＬＣ２で公開されている論理ドライブにアクセスし、論理ドライブに格納されているファイルやディレクトリの名称をＵＩ制御部１６６を通じて表示部７に表示したり、当該論理ドライブからファイルを読み出したり、当該論理ドライブへファイルを書き込んだりする機能である。
【０１００】
＜同期処理等のフローチャート＞
図１９は同期処理に関連した各工程を示すフローチャートである。ＰＬＣ２のＣＰＵ１０は、ＰＬＣ２に電源から電力が供給されて起動すると、以下の各工程を実行する。
【０１０１】
Ｓ２１でＣＰＵ１０（同期部２４２）はドライブ管理テーブル１３３を参照し、同期処理の対象となっている複数の論理ドライブ間で記憶内容が一致させるための同期処理を開始する。第１メモリ２００の第１論理ドライブ２０３と第２メモリ２１０の第２論理ドライブ２１１が同期対象となっている場合、同期部２４２は、揮発性の第１メモリ２００を初期化して第１論理ドライブ２０３を作成し、第２論理ドライブ２１１の記憶内容を第１論理ドライブ２０３に複製する。複製が完了すると、同期部２４２はテーブル管理部２４３に第２論理ドライブ２１１のファイル管理テーブル１３４を生成するよう指示する。テーブル管理部２４３は、第２論理ドライブ２１１をサーチしてファイル管理テーブル１３４を作成してもよいし、第１論理ドライブ２０３のファイル管理テーブル１３４をコピーして第２論理ドライブ２１１のファイル管理テーブル１３４を作成してもよい。なお、テーブルの更新時や同期処理の実行時はファイルが操作されないよう、データ操作部２４１がファイル操作を一時的に禁止してもよい。
【０１０２】
Ｓ２２でＣＰＵ１０（受付部２４４）はファイル操作の要求を受け付けたかどうかを判定する。ファイル操作の要求が発生していなければ、Ｓ２３に進む。
【０１０３】
Ｓ２３でＣＰＵ１０（同期部２４２）は同期条件が満たされたかどうかを判定する。同期条件が満たされていなければ、Ｓ２２に戻る。同期条件が満たされるとＳ２４に進む。
【０１０４】
Ｓ２４でＣＰＵ１０（同期部２４２）は同期処理を実行する。同期部２４２は、たとえば、第１論理ドライブ２０３のファイルに対する操作内容を第２論理ドライブ２１１に反映させる。同期部２４２は、複数の論理ドライブ間で記憶内容の差分を特定し、当該差分のみを複数の論理ドライブ間で反映させることで、複数の論理ドライブにそれぞれ同一のファイルを格納させてもよい。つまり、複数の論理ドライブ間で一致しているファイルについては更新しないものとする。これにより不揮発性メモリである第２メモリ２１０の寿命を延ばすことが可能となろう。同期部２４２は、複数の論理ドライブのそれぞれに記憶されているファイルのタイムスタンプまたは更新回数をファイル管理テーブル１３４をから取得して比較し、比較結果に応じて複数の論理ドライブのそれぞれに記憶されているファイルを同期してもよい。より具体的に説明すると、同期部２４２は、複数の論理ドライブのそれぞれに記憶されている同一のファイル名を付与されているファイルのタイムスタンプを比較し、最新のタイムスタンプを付与されているファイルをそれよりも古いタイムスタンプを付与されているファイルに対して上書きしてもよい。また、同期部２４２は、複数の論理ドライブのそれぞれに記憶されている同一のファイル名を付与されているファイルの更新回数を比較し、最多の更新回数のファイルをそれよりも少ない更新回数のファイルに対して上書きしてもよい。このようにタイムスタンプや更新回数を比較することでどちらの論理ドライブに記憶されているファイルが最新のものであるかを判別できるようになる。なお、テーブル管理部２４３は、同期部２４２によって同期されたファイルについてのファイル管理テーブル１３４のエントリーを更新する。これによりタイムスタンプや更新回数も更新されることになる。同期処理が完了すると、Ｓ２２に戻る。このように操作要求が発生しない期間においては、同期条件が満たされたときに同期処理が実行される。Ｓ２２で操作要求が受け付けられると、Ｓ２５に進む。
【０１０５】
Ｓ２５でＣＰＵ１０（同期部２４２）は同期処理を実行する。同期処理の内容はＳ２４で説明したとおりである。ファイル操作の前に同期処理を実行することには、いくつかの理由がある。一般に、制御に関連したデータは、最新のデータであることを前提に制御に利用される。よって、古いデータは現在のＰＬＣ２の状態から乖離しており、これを利用すると制御が発散するかもしれない。よって、最新のファイルが利用されるよう、事前に同期処理が実行されることが望ましい。なお、同期処理の対象は、操作要求のあったファイルだけでもよい。これにより短時間で同期処理を終了できるからである。
【０１０６】
Ｓ２６でＣＰＵ１０（データ操作部２４１）は要求されたファイル操作を実行する。たとえば、データ操作部２４１は、読み出し要求に応じてファイルの読み出し操作を代表論理ドライブに対して実行する。また、データ操作部２４１は、書き込み要求に応じてファイルの書き込み操作を代表論理ドライブに実行する。なお、データ操作部２４１は、書き込み要求に応じてファイルの書き込み操作を代表論理ドライブと、同期対象として指定されている他の論理ドライブとに対して、つまり複数の論理ドライブのすべてに対して実行してもよい。なお、ファイルの書き込みについても代表論理ドライブにだけ実行したほうが、他の論理ドライブの寿命の観点では有利であろう。ただし、双方を書き込み対象とすれば、データの保全性の面で有利であろう。
【０１０７】
Ｓ２７とＳ２８はオプションである。Ｓ２７でＣＰＵ１０（同期部２４２）は操作部６を通じてシャットダウン（電源オフ）が指示されたかどうかを判定する。シャットダウンの指示は、ＰＬＣ２に対する電力の供給を停止するための指示である。シャットダウンが指示されていなければＳ２２に戻る。シャットダウンが指示されるとＳ２８に進む。Ｓ２８でＣＰＵ１０（同期部２４２）は第１メモリ２００の第１論理ドライブ２０３に記憶されているデータを第２メモリ２１０の第２論理ドライブ２１１に同期させる。これにより、最新のデータが不揮発性の第２メモリ２１０の第２論理ドライブ２１１に保持されることになる。シャットダウン時の同期処理が完了すると、ＣＰＵ１０は、ＰＬＣ２に対する電源からの電力の供給を遮断する。
【０１０８】
なお、シャットダウンの機能は必須ではなく、ハードウエアスイッチによって即座にＰＬＣ２に対する電源からの電力の供給が遮断されてもよい。ただし、この場合であってもＰＬＣ２の起動から停止までの間には同期処理が実行される機会が少なくとも１回はある可能性が高く、十分安全にデータが保全されよう。
【０１０９】
＜まとめ＞
本実施形態では、ユーザプログラムとユーザデータとを記憶する記憶手段の一例として不揮発性メモリ１００について説明した。また、不揮発性メモリ１００において、ユーザプログラムを記憶するために許容される記憶領域（プロジェクト領域）の上限サイズと、ユーザデータを記憶するために許容される記憶領域（ユーザ領域）の上限サイズとのうちいずれかを確定するための情報を保持する保持手段として不揮発性メモリ１４２や領域管理テーブル１３０について説明した。読み書き制御部１４４は、不揮発性メモリ１４２や領域管理テーブル１３０に保持されている情報によって確定する上限サイズを超えない範囲でユーザプログラムまたはユーザデータを不揮発性メモリ１００に書き込む。このように不揮発性メモリ１００における複数の記憶領域のうち少なくとも１つの領域について上限サイズを設定することで、残りの未使用領域を他の記憶領域として使用することが可能となる。たとえば、ユーザプログラムについて想定される上限（最大）サイズを管理することで、残りの未使用領域を他の記憶領域（ユーザ領域）として使用することが可能となる。また、ユーザデータの上限サイズを管理することで、残りの未使用領域を他の記憶領域（プロジェクト領域）として使用することが可能となる。いずれの場合もメンテナンス等によるユーザプログラムのサイズの拡大を想定して、十分なサイズのプロジェクト領域を確保するように、上限サイズを決定することになろう。これにより、ＰＬＣにおいてユーザプログラムが記憶される記憶手段の未使用領域を有効活用することが可能となる。また、ユーザプログラムやユーザデータの上限サイズを超えない範囲でユーザプログラムやユーザデータを不揮発性メモリ１００に書き込むようにしたので、ユーザプログラムの改変時の問題も緩和できるようになる。つまり、ユーザプログラムを改変してもユーザプログラムを不揮発性メモリ１００に書き込めなくなってしまったり、ユーザデータを書き込めなくなってしまったりといった課題のいずれかが解決されよう。
【０１１０】
不揮発性メモリ１４２や領域管理テーブル１３０は、不揮発性メモリ１００においてユーザプログラムを格納可能な第１記憶領域（プロジェクト領域）と、ユーザデータを格納可能な第２記憶領域（ユーザ領域）との境界１２６となる記憶位置を保持していてもよい。図７などを用いて説明したように、境界１２６となる記憶位置は、アドレスであってもよいし、プロジェクト領域の上限サイズとユーザ領域の上限サイズとを個別に管理することで、実質的に境界１２６となる記憶位置が管理されてもよい。もちろん、記憶位置を管理せずに、単純に上限サイズだけを管理してもよい。これは、記憶領域の上限サイズを実際の消費サイズが超えなければ、十分だからである。
【０１１１】
図１２などを用いて説明したように、受付部１５１は、プロジェクト領域とユーザ領域との境界となる記憶位置の変更要求を受け付ける。サイズ調整部１５０は、受け付けられた変更要求にしたがってプロジェクト領域とユーザ領域との境界となる記憶位置を変更する変更手段として機能してもよい。これにより、プロジェクト領域の上限サイズやユーザ領域の上限サイズを変更することが可能となる。
【０１１２】
図１１（Ａ）を用いて説明したように、不揮発性メモリ１４２や領域管理テーブル１３０は、ユーザプログラムを記憶するために許容される記憶領域の上限サイズと、ユーザデータを記憶するために許容される記憶領域の上限サイズとの両方を保持していてもよい。上述したように、片方の上限サイズだけを保持しておいて他方の上限サイズについては算出されてもよい。不揮発性メモリ１００の全記憶領域のサイズは既知であるため、これを利用して片方の上限サイズから他方の上限サイズは簡単に求められる。
【０１１３】
図７などを用いて説明したように、不揮発性メモリ１００の全記憶領域のうち、ユーザプログラムを記憶するために許容される第１記憶領域以外の残りの第２記憶領域内にユーザデータが記憶される。これにより元々はプロジェクト領域専用のものであった不揮発性メモリ１００の未使用領域を有効活用することが可能となる。
【０１１４】
図１２を用いて説明したように、サイズ取得部１４５は、不揮発性メモリ１００においてユーザプログラムを記憶するために消費されている記憶領域の消費サイズを取得してもよい。サイズ調整部１５０は、不揮発性メモリ１００における全記憶領域のサイズからユーザプログラムについての消費サイズを減算して得られる残りの記憶領域のサイズを超えない範囲でユーザデータの記憶領域の上限サイズを設定する。これにより、すでに不揮発性メモリ１００に記憶されているユーザプログラムを破棄することなく、安全に上限サイズを調整することが可能となる。
【０１１５】
図１２を用いて説明したように、サイズ取得部１４５は、不揮発性メモリ１００においてユーザプログラムとユーザデータを記憶するために実際に消費されている記憶領域の消費サイズを取得してもよい。可否判定部１５２は、消費サイズとユーザデータを記憶するための記憶領域についての拡張サイズとの和が、不揮発性メモリ１００における全記憶領域のサイズ以下であるかどうかを判定する。サイズ調整部１５０は、この和が全記憶領域のサイズ以下である場合に、ユーザデータの記憶領域のサイズを拡張サイズに応じて拡張する拡張手段として機能する。不揮発性メモリ１００における全記憶領域のサイズを超えるような、ユーザ領域の拡張は認められない。また、ＰＬＣ２の動作中にユーザデータやプロジェクトデータを強制的に消去してしまうと、ＰＬＣ２が誤作動してしまう。よって、ユーザプログラムとユーザデータの実際の消費サイズを考慮して、ユーザ領域の拡張を許容することで、ＰＬＣ２の誤作動を低減できよう。
【０１１６】
可否判定部１５２は、受付部１５１によって受け付けられた変更要求に基づくプロジェクト領域の変更後の上限サイズをユーザプログラムについての消費サイズが超えず、かつ、変更要求に基づくユーザ領域の変更後の上限サイズをユーザデータについての消費サイズが超えないかどうかに応じてプロジェクト領域の上限サイズとユーザ領域の上限サイズとの変更の可否を判定してもよい。サイズ調整部１５０は、可否判定部１５２がプロジェクト領域の上限サイズとユーザ領域の上限サイズとの変更が可能と判定すると、プロジェクト領域の上限サイズおよびユーザ領域の上限サイズの変更を反映させる領域設定手段として機能する。図１２を用いて説明したように、プロジェクト領域の上限サイズとユーザ領域の上限サイズとが個別に調整されてもよいし、同時にこれらが調整されてもよい。後者の場合、両方の記憶領域について上限サイズの調整が可能と判断されたときに、調整が反映されることになる。前者の場合は、一方の記憶領域のみが調整条件を満たしており、他方の記憶領域は調整条件を満たしていないことがある。この場合、サイズ調整部１５０は、一方の記憶領域のみ調整を反映してもよいし、両方の記憶領域について反映を中止してもよい。
【０１１７】
プロジェクトデータを改変したときに、プロジェクト領域の上限サイズの拡張が必要になることがある。この場合、改変後のプロジェクトデータ１６２を格納するための必要サイズと、ユーザデータ１６３を格納するための必要サイズがサイズ取得部１４５、１６４によって取得される。可否判定部１５２は、受け付けられた変更要求に基づくプロジェクト領域の変更後の上限サイズをプロジェクトデータ１６２についての必要サイズが超えず、かつ、変更要求に基づくユーザ領域の変更後の上限サイズをユーザデータ１６３についての必要サイズが超えないかどうかに応じてプロジェクト領域の上限サイズとユーザ領域の上限サイズとの変更の可否を判定してもよい。サイズ調整部１５０は、可否判定部１５２がプロジェクト領域の上限サイズとユーザ領域の上限サイズとの変更が可能と判定すると、プロジェクト領域の上限サイズおよびユーザ領域の上限サイズの変更を反映させる。これにより、プロジェクトデータを改変したときにも、改変されたプロジェクトデータを格納できる範囲内で上限サイズの変更が許容される。
【０１１８】
このように、可否判定部１５２は、原則として、不揮発性メモリ１００へのユーザプログラムとユーザデータの書き込みが要求されたときに判定処理を実行してもよい。
【０１１９】
受付部１５１は、プロジェクトデータに含まれているユーザプログラムが実行されているときにもプロジェクト領域の上限サイズとユーザ領域の上限サイズの変更を受け付けてもよい。これによりＰＬＣ２の動作を止めることなく、つまり、製造ラインを止めることなく、上限サイズを調整することが可能となる。
【０１２０】
受付部１５１は、プログラマブル・ロジック・コントローラにユーザプログラムを転送するプログラム作成支援装置１から送信される変更要求を受け付けてもよい。これによりプログラム作成支援装置１から上限サイズの調整を実行することが可能となる。図８や図９を用いて説明したように、プログラム作成支援装置１はＰＬＣ２よりもリッチな（情報量の多い）ＧＵＩを提供できる。よって、ユーザは視覚的に理解しやすい状態で上限サイズを調整することが可能となろう。
【０１２１】
読み書き制御部１４４のロギング部１５３は、ユーザプログラムを実行することで生成されるロギングデータを一定のサンプリング数を単位として不揮発性メモリ１００に書き込んでもよい。これにより停電等が発生したＰＬＣ２が停止しても、中途半端なロギングデータが保存されないようになろう。
【０１２２】
読み書き制御部１４４の速度制御部１４７は、不揮発性メモリ１００への情報の書き込み速度を不揮発性メモリ１００の性能上の上限速度よりも低速な書き込み速度に制限してもよい。これにより不揮発性メモリ１００の寿命を延ばすことが可能となろう。なお、読み書き制御部１４４の速度制御部１４７は、情報の書き込み速度を当該情報の種別に応じて制限してもよい。たとえばユーザプログラムとユーザデータとでは必要となる書き込み速度に違いがあるため、データの種別に応じて書き込み速度が制限されてもよい。また、速度制御部１４７は、ユーザプログラムの実行によって発生する情報の書き込み速度を制限し、プログラマブル・ロジック・コントローラの起動時、メンテナンス時またはプログラム作成支援装置１からのユーザプログラムまたはユーザデータの転送時には書き込み速度を制限しないように動作してもよい。これによりユーザビリティを低下させにくくしつつ、不揮発性メモリ１００の寿命を延ばすことが可能となろう。
【０１２３】
カウント部１５４は、不揮発性メモリ１００のセクタごとイレース回数または書き換え回数をカウントしてもよい。警告部１４８や表示部５は、不揮発性メモリ１００におけるいずれかセクタについてのカウント部１５４によるカウント値が閾値を超えると警報を出力する出力手段として機能してもよい。これによりユーザは不揮発性メモリ１００の寿命が近づいていることを把握して、ＰＬＣ２を交換することが可能となろう。また、不揮発性メモリ１００の寿命が尽きることによる、突然のＰＬＣ２の動作停止といった事態を起こりにくくすることが可能となろう。
【０１２４】
上述したように上限サイズの調整と設定はＰＬＣ２が主体となり、プログラム作成支援装置１はユーザインタフェースを提供するだけであってもよいが、図８や図１３を用いて説明したように、プログラム作成支援装置１が主体となって上限サイズの調整と設定を実行してもよい。この場合、サイズ調整部１５０の機能はプログラム作成支援装置１に実装されることになろう。
【０１２５】
たとえば、サイズ設定部１６５は、不揮発性メモリ１００においてユーザプログラムを記憶するために許容されるプロジェクト領域の上限サイズと、ユーザデータを記憶するために許容されるユーザ領域の上限サイズとのうちいずれかを設定する。これにより不揮発性メモリ１００の未使用領域にユーザデータを格納可能となり、未使用領域の有効活用を図れるであろう。
【０１２６】
図８ないし図１０を用いて説明したように、ユーザインタフェース１２０、１２０’およびＵＩ制御部１６６は、プロジェクト領域の上限サイズとユーザ領域の上限サイズとを表示する表示手段として機能する。また、操作部８やスライダーバー１２１、テキストボックス、スピンボックスは、ユーザインタフェース１２０に表示されたプロジェクト領域の上限サイズとユーザ領域の上限サイズとを調整する調整手段として機能してもよい。
【０１２７】
サイズ取得部１６４は、不揮発性メモリ１００においてユーザプログラムとユーザデータを記憶するために実際に消費されている記憶領域の消費サイズを取得してもよい。ユーザインタフェース１２０、１２０’およびＵＩ制御部１６６は、取得されたユーザプログラムについての消費サイズとユーザデータについての消費サイズとをさらに表示してもよい。これによりユーザは不揮発性メモリ１００の各記憶領域にどの程度のデータが記憶されており、どの程度の空き領域があるかを容易に把握できるようになろう。
【０１２８】
可否判定部１６７は、操作部８やスライダーバー１２１、テキストボックス、スピンボックスによって調整されたプロジェクト領域の上限サイズをユーザプログラムについての消費サイズが超えず、かつ、調整されたユーザ領域の上限サイズをユーザデータについての消費サイズが超えないかどうかに応じて、プロジェクト領域の上限サイズおよびユーザ領域の上限サイズの調整をＰＬＣ２に反映させることが可能かどうかを判定してもよい。サイズ設定部１６５は、可否判定部１６７がこれらの調整をＰＬＣ２に反映させることが可能と判定すると、プロジェクト領域の上限サイズおよびユーザ領域の上限サイズの調整をＰＬＣ２に反映させてもよい。
【０１２９】
図８、図９を用いて説明したように、ユーザインタフェース１２０、１２０’およびＵＩ制御部１６６は、ユーザデータについての消費サイズをバーグラフとして表示してもよい。サイズ設定部１６５は、ユーザ領域の上限サイズをバーグラフに沿って調整してもよい。これによりユーザは簡単な操作によりユーザ領域の上限サイズを調整できるようになろう。なお、ユーザインタフェース１２０、１２０’およびＵＩ制御部１６６は、ユーザデータについての消費サイズと、ユーザプログラムを含むプロジェクトデータの消費サイズとをそれぞれバーグラフとして表示してもよい。これによりユーザは不揮発性メモリ１００の各記憶領域にどの程度のデータが記憶されており、どの程度の空き領域があるかを容易に把握できるようになろう。
【０１３０】
本実施形態によれば、ＰＬＣ２の制御方法の各工程をＣＰＵ１０に実行させるプログラム（ファームウエア）も提供される。同様に、プログラム作成支援装置１の制御方法の各工程をＣＰＵ２４に実行させる設定プログラム１６１も提供される。
【０１３１】
図１５ないし図１９を用いて説明したように、本実施の形態によれば、ユーザデータなどのデータを保全しつつユーザの使い勝手を向上することができる。上述したように、複数のメモリや論理ドライブにそれぞれ同一のデータが格納される。また、操作部６やプログラム作成支援装置１によって、予め代表記憶手段（例：第１メモリ２００や第１論理ドライブ２０３）が選択される。受付部２４４によってデータの操作要求が受け付けられると、データ操作部２４１は受付部２４４が受け付けたデータの操作要求を少なくとも予め選択された代表記憶手段に対して実行する。このように同一のデータが複数のメモリや論理ドライブにそれぞれ格納されるため、データが保全される。また、ユーザは、複数の記憶手段のうち代表記憶手段などの一部の記憶手段に対してファイル操作を実行すればよいため、ユーザの使い勝手が向上しよう。
【０１３２】
複数の記憶手段はそれぞれ異なる記憶装置においてファイルシステムに基づき構築された複数の論理ドライブであってもよい。また、代表記憶手段は代表論理ドライブであってもよい。上述した事例では論理ドライブをメモリ上に構築しているが、ファイルシステムを用いた論理ドライブは必須ではない。複数のメモリのそれぞれにおいてファイルシステムを用いずにそれぞれデータを保存して同期することも可能だからである。ただし、論理ドライブを構築することで、ファイルシステムにファイルの管理を担当させることが可能となるため、データ管理用のプログラムを作成する手間を省けるだろう。
【０１３３】
複数の論理ドライブがそれぞれ同一のデータを格納したファイルを記憶するようファイルの同期処理を実行する同期部２４２をさらに有していてもよい。代表論理ドライブなど、一部の論理ドライブにだけファイル操作を実行すると、時間の経過とともに複数の論理ドライブ間では記憶内容に齟齬が生じうる。齟齬が小さかったり、齟齬が生じている期間が短かったりすれば、大きな問題は生じないが、齟齬が大きくなるとＰＬＣ２の制御に影響が及ぶことがある。そこで、同期部２４２が同期処理を実行することで、複数の論理ドライブ間で記憶内容を一致させてもよい。
【０１３４】
複数の記憶手段には、記憶特性や記憶原理、読み書き速度など、性能の異なる複数の記憶手段が含まれていてもよい。たとえば、複数の記憶手段には、揮発性の第１記憶手段（例：第１メモリ２００、第１論理ドライブ２０３）と不揮発性の第２記憶手段（例：第２メモリ２１０、第２論理ドライブ２１１）とが含まれていてもよい。つまり、代表論理ドライブは、第１記憶手段と第２記憶手段とのうちから予め選択された論理ドライブである。第１記憶手段の読み書き速度は第２記憶手段の読み書き速度よりも高速である場合、第１記憶手段が代表論理ドライブとして予め選択されてもよい。よって、代表論理ドライブに対するアクセスが高速となり、ファイル操作を短時間で実行できるようになろう。また、第１記憶手段の書き換え可能回数は第２記憶手段の書き換え可能回数よりも多くてもよい。この場合、第１記憶手段が代表論理ドライブとして予め選択されてもよい。上述したように、複数の論理ドライブのうち代表論理ドライブに対してデータの操作が実行されるため、代表論理ドライブは他の論理ドライブよりもデータの書き換え回数が多くなりやすい。つまり、他の論理ドライブにおけるデータの書き換え回数は少なくなるため、他の論理ドライブを含む不揮発性メモリの寿命を延ばすことが可能となる。一般に、揮発性メモリには書き換え可能回数に上限がなく、寿命が長いが、不揮発性メモリには書き換え可能回数に上限があり、寿命が長くはない。よって、ユーザデータのように比較的に頻繁に書き換えられ、かつ、アクセス速度も高速性を要求されるデータに関しては、揮発性メモリを代表メモリとすることで、不揮発性メモリによってデータを保全しつつ、揮発性メモリに対して動作の操作が実行される。これにより、ユーザの使い勝手が向上するとともに、不揮発性メモリの寿命を延ばしやすくなろう。
【０１３５】
同期部２４２は、第１記憶手段（例：第１メモリ２００、第１論理ドライブ２０３）のファイルに対する操作内容を第２記憶手段（例：第２メモリ２１０、第２論理ドライブ２１１）に反映させる。これにより、データへの高速なアクセスを確保しつつ、データの同一性も図れるであろう。
【０１３６】
図１９を用いて説明したように、同期部２４２は、遅くともＰＬＣ２に対する電力の供給の停止が指示されるときまでに、第１記憶手段である論理ドライブのファイルに対する操作内容を第２記憶手段である論理ドライブに反映させてもよい。これにより、電源からの電力が遮断されても、第１記憶手段と第２記憶手段とのデータの同一性を確保しやすくなろう。
【０１３７】
同期部２４２は、複数の論理ドライブ間で記憶内容の差分を特定し、当該差分のみを複数の論理ドライブ間で反映させることで、複数の論理ドライブにそれぞれ同一のファイルを格納させてもよい。同期の手法として、一方の論理ドライブに記憶されているすべてのファイルを他方の論理ドライブに対して上書きする手法も考えられる。しかし、この手法は同期処理の時間が長くなりやすく、他方の論理ドライブが不揮発性メモリであればその寿命を縮めやすい。そこで、記憶内容の差分だけを一方から他方に反映させることで、同期時間を短縮できる。また、データの書き換え回数も減少するため、他方の論理ドライブが不揮発性メモリであればその寿命を延ばすこと（縮めにくくすること）が可能となろう。
【０１３８】
データ操作部２４１は、ファイルの読み出し操作を代表論理ドライブに対してのみ実行し、ファイルの書き込み操作を複数の論理ドライブのすべてに対して実行してもよい。これによりファイルの高速な読み出しと、ファイルの保全とを実現しやすくなる。この場合は同期処理の回数を減らすことができるよう（究極には同期処理は不要となろう）。
【０１３９】
ところで、不揮発性メモリの大容量化に伴い、上述したプログラムメモリの大容量化が進みつつある。その一方で、ユーザプログラムのサイズの増加はそれほど進んではいない。よって、プログラムメモリには広大な未使用領域が出現することがある。したがって、プログラムメモリの未使用領域の一部にユーザデータを記憶できるようにすれば、プログラムメモリとユーザデータ用のメモリとを個別に用意しなくて済むようになる。たとえば、図１５（Ａ）を用いて説明したように、第２記憶手段は、ユーザプログラムを格納する記憶領域（プロジェクト領域）をさらに有するメモリであってもよい。これにより、ユーザプログラムを格納するプログラムメモリの未使用領域を有効に活用できるであろう。また、ＰＬＣが突然に電力を遮断されても、ユーザデータは保持されるようになろう。ただし、不揮発性メモリの読み書き速度は、揮発性メモリの読み書き速度と比較すると、まだ低速である。また、揮発性メモリには書き換え可能回数に上限がなく、寿命が長いが、不揮発性メモリには書き換え可能回数に上限があり、寿命が長くはない。よって、ユーザデータのように比較的に頻繁に書き換えられ、かつ、アクセス速度も高速性を要求されるデータに関しては、何らかの対策が必要となる。よって、同一のデータを複数の記憶手段に記憶することでデータを保全しつつ、そのうちこれらの代表となる少なくとも１つの記憶手段についてユーザデータの操作を実行することで複数の記憶手段の全体としての寿命を延ばすことが可能となる。
【０１４０】
図１８などを用いて説明したように、ＰＬＣ２はプログラム作成支援装置１と通信する通信部１４をさらに有していてもよい。この場合、代表論理ドライブは、プログラム作成支援装置１によって通信部１４を介して選択されてもよい。これによりユーザは自由に代表論理ドライブを選択できるようになろう。
【０１４１】
ところで、代表論理ドライブ以外の他の論理ドライブもユーザに見える場合、ユーザはどちらにファイルを書き込めばよいか迷ってしまうかもしれない。そこで、データ操作部２４１は、プログラム作成支援装置１が複数の論理ドライブのうち代表論理ドライブをプログラム作成支援装置１の表示装置（例：表示部７）に表示するよう、代表論理ドライブをプログラム作成支援装置１に公開してもよい。これにより、複数の論理ドライブのうち１つの論理ドライブを扱っているようにユーザには見せることが可能となろう。代表論理ドライブをユーザに見せることで、ユーザはファイルの書き込み対象となる論理ドライブを明確に認識できるようになろう。
【０１４２】
データ操作部２４１は、プログラム作成支援装置１の同期設定部２５０から通信部１４を介して複数の論理ドライブ間での同期の対象となるファイルまたはディレクトリを指定されてもよい。データ操作部２４１は、当該指定されたファイルまたはディレクトリについて同期処理を実行する。なお、テーブル管理部２４３は、指定されたファイルまたはディレクトリの識別情報をファイル管理テーブル１３４に保持してもよい。これによりユーザは保全性が必要とされるファイルやディレクトリについては同期対象として設定することができ、保全性が不要と考えられるファイルやディレクトリについては同期対象として設定しないことが可能となろう。このように同期対象の設定はユーザに任せられてもよい。
【０１４３】
もちろん、同期設定部２５０は、ファイルまたはディレクトリ（以下、ファイル等）に優先度を付与し、優先度に応じて同期処理の実行回数や実行頻度を可変設定してもよい。たとえば、同期設定部２５０は、優先度の高いファイル等は優先度の低いファイル等よりも同期処理の実行頻度を多くし、優先度の低いファイル等は優先度の高いファイル等よりも同期処理の実行頻度を少なくしてもよい。このように同期条件はファイル等の優先度や種別、ＰＬＣ２の機能に応じて異ならしめてもよい。これはすべてのファイル等について頻繁に同期処理を実行する場合に比べて、全体としての同期処理の回数を削減することになり、同期処理時間の短縮と、不揮発性メモリの長寿命化をもたらすであろう。
【０１４４】
このような同期対象や同時書き込み対象の指定は、ＰＬＣ２の操作部６および同期設定部２５０からＰＬＣ２の機能を指定することで実現されてもよい。ＰＬＣ２は、上述したようなロギング機能やトレースの機能（ＰＬＣ２の接点の状態を時系列でファイルに出力する機能）、ファイル転送機能など、様々な機能を有している。そこで、同期設定部２５０は、これらの機能によって生成されたファイルやディレクトリについては同期や同時書き込みの対象としてもよい。たとえば、ファイルマネージャ２５１によってＦＴＰによりファイルがＰＬＣ２に転送されるときは、第１論理ドライブ２０３と第２論理ドライブ２１１との両方にファイルの書き込みが実行されてもよい。また、ラダープログラムによって、第１論理ドライブ２０３にだけ書き込むのか、第１論理ドライブ２０３と第２論理ドライブ２１１との両方に書き込むのかが指定されてもよい。これによりラダープログラムを実行することで生成されたデータやファイルを同期処理や同時書き込みの対象とするのかどうかを指定できるようになる。
【０１４５】
同期部２４２は、複数の論理ドライブのそれぞれに記憶されているファイルのタイムスタンプまたは更新回数を比較し、比較結果に応じて複数の論理ドライブのそれぞれに記憶されているファイルを同期してもよい。通常、ファイルはタイムスタンプの情報を保持しているため、タイムスタンプを参照することでどちらの論理ドライブに記憶されているファイルがより新しいかを容易に判断できるようになろう。
【０１４６】
同期部２４２は、複数の論理ドライブのそれぞれに記憶されている同一のファイル名を付与されているファイルのタイムスタンプを比較し、最新のタイムスタンプを付与されているファイルをそれよりも古いタイムスタンプを付与されているファイルに対して上書きする。これにより複数の論理ドライブ間で最新のタイムスタンプを付与されているファイルが共通に保持されるようになろう。
【０１４７】
同期部２４２は、複数の論理ドライブのそれぞれに記憶されている同一のファイル名を付与されているファイルの更新回数を比較し、最多の更新回数のファイルをそれよりも少ない更新回数のファイルに対して上書きしてもよい。タイムスタンプは、ＰＬＣ２が保持している内蔵時計が正確であることが前提となる。しかし、タイムスタンプに代えて更新回数を採用すれば、内蔵時計に依存することなく、最新のファイルを容易に判別することが可能となろう。
【図１】
0006514479.tif 000002
【図２】
0006514479.tif 000003
【図３】
0006514479.tif 000004
【図４】
0006514479.tif 000005
【図５】
0006514479.tif 000006
【図６】
0006514479.tif 000007
【図７】
0006514479.tif 000008
【図８】
0006514479.tif 000009
【図９】
0006514479.tif 000010
【図１０】
0006514479.tif 000011
【図１１】
0006514479.tif 000012
【図１２】
0006514479.tif 000013
【図１３】
0006514479.tif 000014
【図１４】
0006514479.tif 000015
【図１５】
0006514479.tif 000016
【図１６】
0006514479.tif 000017
【図１７】
0006514479.tif 000018
【図１８】
0006514479.tif 000019
【図１９】
0006514479.tif 000020