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