本発明の一実施形態について図1ないし図20に基づいて説明すると以下の通りである。すなわち、本実施形態に係るデータ伝送方法は、受信装置の負担を軽減できるため、比較的演算能力の高い送信装置から、比較的演算能力が低く、しかも、不揮発性の記憶装置を備えた受信装置に対して、データを送信し、当該不揮発性の記憶装置に、そのデータを書き込ませる場合などに好適に用いることができる。
以下では、上記データ伝送方法を採用したデータ伝送の例として、制御システムに設けられた制御用ホストコンピュータからプログラマブル表示器へのデータ伝送について説明する前に、制御システム全体の概略構成および動作について簡単に説明する。
本実施形態に係る制御システム1は、図2に示すように、ターゲットシステム2のデバイス2aを制御するためのシステムであって、例えば、ベルトコンベアー式の自動組付機などのデバイス2aの制御などに好適に用いられている。
上記制御システム1には、上記デバイス2aを制御する制御装置としてのPLC11と、多くの場合、制御対象近傍に配されると共に、制御システム1のHMIとして、デバイス2aの状態を表示し、オペレータによるデバイス2aへの操作を受け付けるプログラマブル表示器(受信装置)13とを備えている。
本実施形態に係る制御システム1では、各プログラマブル表示器13は、イーサネット(登録商標)などのLAN(ローカルエリアネットワーク)15によって互いに接続されている。さらに、上記LAN15には、多くの場合、プログラマブル表示器13よりも離れた場所から、制御システム1全体を管理する制御用ホストコンピュータ(送信装置)17が接続されている。
また、上記各プログラマブル表示器13は、シリアルケーブルなどの通信路を介して、それぞれに対応するPLC11と接続されている。なお、図2では、説明の便宜上、LAN15にプログラマブル表示器13が2台接続されると共に、各プログラマブル表示器13に1台ずつのPLC11、各PLC11に1台ずつのデバイス2aがそれぞれ接続されている場合を例示しているが、当然ながら、それぞれの接続台数は任意に設定できる。
また、デバイスは、デバイスアドレスにより特定可能で、しかも、状態を取得したり、制御(変更)できるものであれば、例えば、デバイス2a自体であってもよいし、例えば、PLC11やプログラマブル表示器13の記憶装置など、制御システム1に設けられた記憶装置の一領域を示していてもよい。
ここで、上記制御システム1では、制御システム1に必須の構成であり、しかも、HMIとして動作するため、演算能力に余力のあるプログラマブル表示器13が通信の大半を処理するように構成されている。さらに、各プログラマブル表示器13は、自らに接続されているPLC11の機種に固有の専用プロトコルと、LAN15での共通プロトコルとを変換して、他のプログラマブル表示器13や制御用ホストコンピュータ17と、PLC11との通信を中継する。なお、共通プロトコルと専用プロトコルとの間のプロトコル変換には、同じ指示に同じコードが割り当てられるように予め定められた共通のコマンドと上記共通のコマンドに対応するPLC11固有のコマンドとの間の変換や、データやアドレスの表現方法の変換、デバイスアドレスと、当該デバイスアドレスに対応し、しかも、デバイスアドレスとは異なる値に設定可能な変数や変数の名称(変数名)との変換なども含まれる。
これにより、プログラマブル表示器13および制御用ホストコンピュータ17は、他のプログラマブル表示器13に接続されているPLC11の機種に拘らず、LAN15を介して共通のプロトコルで通信できる。この結果、互いに異なる機種のPLC11の混在する制御システム1が比較的容易に実現されている。
上記プログラマブル表示器13は、後述する画面データに基づいて、デバイスの状態を画面表示する際の動作や、画面への操作に応じてデバイスの状態を制御する際の動作を特定するものであって、PLC11と通信するPLC・IF部31と、上記LAN15に接続するためのLAN・IF部32と、例えば、液晶表示装置などからなるディスプレイ33と、ディスプレイ33の画面上に配されたタッチパネルなどからなる入力装置34と、上記各部材31〜34を制御するHMI処理部35と、当該HMI処理部35によって参照され、上記画面データおよび上記変数が格納される記憶部36とを備えている。
また、本実施形態に係るプログラマブル表示器13には、上記記憶部36として、例えば、DRAMなどから構成され、主に作業領域として使用される揮発性のメモリ36aと、不揮発性の記憶領域として用いられるフラッシュROM36bとが設けられている。なお、当該メモリ36aが特許請求の範囲に記載の作業用メモリに対応し、フラッシュROM36bが不揮発性記憶装置に対応している。
上記画面データは、デバイスの状態を画面表示する際の動作や、画面への操作に応じてデバイスの状態を制御する際の動作を特定できれば、例えば、画面に表示可能な部品(図形要素)に対応するオブジェクトを生成するためのデータであってもよいが、本実施形態では、上記画面データは、画面上の領域と、当該領域への表示や入力に対応するデバイスとの対応関係を示すタグを組み合わせて構成されている。本実施形態では、上記HMI処理部35が複数の単位画面(ベース画面)を切り換え表示可能であり、上記タグは、当該タグが有効となる単位画面を示すファイル番号と、単位画面上で実行すべき動作内容を特定する事象名と、各事象毎に参照される参照情報とを含んでいる。
例えば、上記タグが所定の画面領域(表示座標範囲)へ所定のデバイスの状態に応じた部品図形を表示する表示タグの場合、上記参照情報には、表示座標範囲と、デバイスを特定可能な変数と、例えば、部品図形がスイッチの場合、ONを示す図形のファイルおよびOFFを示す図形のファイルなど、表示時に参照するファイル番号とが含まれる。さらに、タグが入力タグの場合、参照情報として、有効入力座標範囲と、入力結果が書き込まれるデバイスの変数とが含まれる。
また、記憶部36には、各変数について、変数の名称(変数名)と、変数に対応するデバイス2aまたは内部メモリを特定するための情報(例えば、アドレスなど)と、変数の内容との組み合わせが記憶されている。なお、本実施形態では、変数に対応するデバイス2aの機種に拘わらず、変数の内容を格納する際の表現方法(例えば、ワード長や符号の有無、あるいは、BCD/2進表記など)が予め定められた表現方法に統一されており、変数が実在のデバイス2aに対応する場合、記憶部36には、実際の機種での表現方法も格納されている。この場合、HMI処理部35は、PLC・IF部31を介してデバイス2aの状態を取得あるいは制御する際、表現方法を形式変換して、格納時の表現方法を統一する。
一方、上記HMI処理部35は、所定の時間間隔で、記憶部36に格納された画面データから、ベース画面のファイル番号が、現在表示中のベース画面である表示タグを抽出する。さらに、HMI処理部35は、記憶部36に格納された変数を参照して、タグに対応する変数の内容を読み出し、内容に応じた部品図形をディスプレイ33に表示する。ここで、PLC・IF部31に接続されたPLC11により制御されるデバイス2aに、上記変数が対応している場合、HMI処理部35は、PLC・IF部31によるPLC11との通信によって、デバイス2aの状態を取得し、上記変数の内容を当該状態に応じて更新している。これにより、ディスプレイ33には、例えば、図2に示すように、デバイス2aの状態が表示される。
なお、変数が他のプログラマブル表示器13に接続されたPLC11によって制御されるデバイス2aの場合、HMI処理部35は、LAN・IF部32、LAN15および他のプログラマブル表示器13を介して当該PLC11と通信するなどして、デバイスの状態を取得し、それに応じて変数の内容を更新する。
また、入力装置34への押し操作など、オペレータの入力操作を受け付けると、HMI処理部35は、上記画面データから、現在表示中のベース画面に対応し、当該入力操作にマッチする入力タグを検索すると共に、入力結果に応じて、タグに対応する変数の内容を更新する。さらに、HMI処理部35は、デバイス2aの状態を取得する場合と略同様に、PLC11やプログラマブル表示器13と通信するなどして、上記変数の内容に応じて、デバイス2aの状態を制御させる。ここで、入力操作の後も、HMI処理部35は、デバイス2aの状態を画面表示するので、操作結果が画面表示に反映される。
なお、HMI処理部35は、例えば、他のプログラマブル表示器13や制御用ホストコンピュータ17など、LAN15に接続された機器から自らに接続されたPLC11のデバイス2aへの制御指示を受け取った場合や、これとは逆に、上記機器へ報告すべきデバイス2aの状態を自らのPLC11から受け取った場合には、上述したプロトコル変換によって、LAN15での通信とPLC11相手の通信との間を中継できる。
一方、上記制御用ホストコンピュータ17は、制御システム1の監視制御を行うHMI処理部71と、LAN15に接続され、上述の共通プロトコルで通信するLAN・IF部72と、LAN・IF部72およびLAN15を介して各プログラマブル表示器13と通信して、HMI処理部71などの要求に応じるサーバ部73とを備えており、ターゲットシステム2やPLC11あるいはプログラマブル表示器13の状態を表示したり制御できる。
さらに、上記制御用ホストコンピュータ17には、画面データなどのデータを格納する記憶部74と、ユーザの操作に応じて、記憶部74に格納された画面データを修正したり、新規作成したりして、表示画面を設計し、新たな画面データを生成する作画処理部75とが設けられており、制御用ホストコンピュータ17は、作画処理部75の生成した画面データを、プログラマブル表示器13に送信し、その記憶部36(より詳細には、フラッシュROM36b)に格納させることができる。
なお、上記画面データは、上述したように、画面上の領域と、当該領域への表示や入力に対応するデバイスを特定可能なアドレスとの対応関係を示すタグを組み合わせて構成されているので、設計者は、作画処理部75を操作して、画面上の所望の位置にタグを配置すると共に、各タグとデバイスのアドレスとを対応付けるだけで、画面データを作成できる。したがって、プログラマブル表示器13の表示プログラムを修正する場合に比べて容易に、各プログラマブル表示器13の表示や操作を決定(変更)でき、制御システム1のユーザ(制御用ホストコンピュータ17を操作する設計者)は、ターゲットシステム2の実情や、プログラマブル表示器13のオペレータの習熟度、あるいは、ユーザの好みに合わせることができる。
ここで、上述の制御システム1においては、種々のデータ伝送が行われているが、以下では、制御用ホストコンピュータ17からプログラマブル表示器13へ画面データのファイル(画面データファイル)を伝送する場合を例にして、伝送に関連する構成、および、その動作を、図1を参照しながら詳細に説明する。
すなわち、上述したメモリ36aは、HMI処理部35の行う種々の処理において作業領域として使用されており、HMI処理部35には、メモリ36aの記憶領域を、これらの各処理に配分するメモリ管理部41が設けられている。
当該メモリ管理部41は、例えば、OS(Operating System)の一機能として実現されており、メモリ36aの記憶領域を複数の小領域に分割して管理すると共に、上記各処理を行う種々の部材(図示せず)からの依頼に応じて、各小領域を各処理に割り当てたり、開放したりすることができる。これにより、メモリ36aの記憶領域を、種々の用途に動的に割り当てることができる。
また、フラッシュROM36bは、通常のSRAMやDRAMなどと比較して、書き込む際の単位が比較的大きく、書き込みに要する時間が比較的長い。したがって、本実施形態に係るHMI処理部35は、書き込み時の効率を向上させるため、上記画面データファイルを示すデータ列Dsを、メモリ36aに確保したバッファ領域ABへ、一度格納した後で、フラッシュROM36bに書き込んでいる。
より詳細には、上記データ列Dsは、詳細は後述するように、複数の部分データ列Dp…に分割された後で伝送されており、HMI処理部35には、LAN15およびLAN・IF部32を介して送信されてきた部分データ列Dpを受け取った場合、上記メモリ管理部41に指示して、メモリ36a上にバッファ領域ABを確保すると共に、確保されたバッファ領域ABに受け取った部分データ列Dpを格納する受信処理部51と、バッファ領域ABに格納された部分データ列Dp…を、フラッシュROM36bに書き込み可能なアクセス処理部52とが設けられている。なお、バッファ領域ABは、動的に確保されるため、図1では、バッファ領域ABを破線で図示している。
本実施形態に係る上記アクセス処理部52は、フラッシュROM36b上にファイルシステムを構築しており、指定されたデータ列を格納したファイルを、指定された論理的な格納場所(例えば、フルパス名など)に生成したり、指定されたデータ列を、指定された論理的な格納場所のファイルに追記したりできる。また、上記アクセス処理部52は、ファイルの移動指示に従って、当該論理的な格納場所を変更することもできる。
なお、本実施形態に係るアクセス処理部52は、指定された論理的な格納場所のファイルからデータ列を読み出したり、指定された論理的な格納場所のファイルの一部または全部を書き換えて、ファイルを更新することもできる。また、本実施形態では、ファイルに対してデータ列を読み書きする際、指定したオフセットから、指定したサイズだけを読み書きの対象にしたり、指定したオフセットから指定したサイズを削除することもできる。
ここで、上記アクセス処理部52は、フラッシュROM36b上にファイルシステムを構築しており、データ列の実体が格納された記憶領域(物理的な格納場所)にアクセスする際、そのアドレスを、データ列の実体が格納された記憶領域とは異なる索引用の記憶領域(例えば、ディレクトリエントリなど)を参照して特定している。また、アクセス処理部52は、例えば、ある物理的な記憶領域に格納されたデータ列を読み出し終わった場合、当該索引用の記憶領域を参照して、当該データ列に論理的に連続するデータ列が格納された物理的な記憶領域を特定するなどして、複数の物理的には連続しない記憶領域を論理的には連続した領域として扱っている。
これにより、上記アクセス処理部52は、上記ファイル移動やファイルの一部削除/一部追加などが指示された場合、当該索引用の記憶領域を変更することによって、データ列の実体が格納されている物理的な記憶領域の内容を変更する処理と場所を変更する処理との一部または全部を省略できる。したがって、以下の構成、すなわち、論理的に連続するデータ列を必ず物理的に連続した記憶領域に格納する必要がある構成と比較して、上記ファイル移動やファイルの一部削除/一部追加が指示された場合に、実際にフラッシュROM36bの内容を書き換える必要のあるデータの量を削減できる。
さらに、本実施形態では、上記受信処理部51は、バッファ領域ABの各小領域Maを、例えば、図3に示すように、チェーン状に管理している。具体的には、各小領域(例えば、Ma1)には、データを記憶する記憶領域Mbとは別に、当該小領域Ma1の次の小領域(例えば、Ma2)を示す情報(例えば、小領域Ma2のアドレスなど)が格納された記憶領域Mhが設けられている。また、受信処理部51は、各小領域Maのうち、最初の小領域(例えば、Ma1)を示す情報Dfを記憶部36(本実施形態では、メモリ36a)に格納している。これにより、受信処理部51およびアクセス処理部52は、バッファ領域ABを構成する小領域Maの数に拘わらず、これらの小領域Maを一連の連続した記憶領域として扱うことができ、受信処理部51が上記受信した部分データ列Dp…を順に格納したり、アクセス処理部52が、これらの部分データ列Dp…を順に読み出して、フラッシュROM36bに書き込んだりできる。
一例として、図4に示すように、分割処理部81が、データ列Dsを、部分データ列Dp0〜Dp7に分割して送信した場合に、メモリ36aには、これらの部分データ列Dp0〜Dp7を格納可能な連続した空き領域が無く、3つの部分データ列Dpを連続して格納可能な記憶領域M1と、2つの部分データ列Dpをそれぞれ連続して格納可能な記憶領域M2・M4と、1つの部分データ列Dpしか格納不可能な記憶領域M3としか存在しなかったとする。なお、残余の記憶領域は、他のプログラムなどの処理によって使用されている。
この場合であっても、上述したように、受信処理部51がバッファ領域ABの各小領域Maをチェーン状に管理することによって、非連続な記憶領域を連続した記憶領域として扱っている。したがって、受信処理部51が、上記それぞれ独立して(非連続に)存在する記憶領域M1、M2、M3およびM4のそれぞれに、部分データ列Dp0〜Dp2、Dp6〜Dp7、Dp3、および、Dp4〜Dp5をそれぞれ格納しているにも拘わらず、受信処理部51は、各部分データ列Dp0〜Dp7を連続したデータ列Dsとして扱うことができる。
また、詳細は後述するように、制御用ホストコンピュータ17は、1または複数の部分データ列Dpを送信した後、フラッシュROM36bへの書き込みなどを指示するコマンドも送信しており、受信処理部51は、受信したコマンドを識別すると共に、識別結果に応じて、上記アクセス処理部52を制御できる。
さらに、上記受信処理部51は、例えば、受信した部分データ列Dpの数が増加して、より大きなバッファ領域ABが必要になった場合など、必要に応じて、新たなバッファ領域ABの確保をメモリ管理部41に指示することもできる。また、上記受信処理部51は、部分データ列Dpを格納するために必要なバッファ領域ABを確保できなかった場合、送信側となる制御用ホストコンピュータ17へ異常通知を送信して、バッファ領域ABが足りないことを伝えることができる。
ここで、受信処理部51は、実際に部分データ列Dpを受信しながら、新たなバッファ領域ABが必要か否かを判定してもよいが、本実施形態では、各部分データ列Dpの先頭には、部分データ列Dpの長さの情報を含むヘッダが付されており、受信処理部51は、当該情報を参照して、その後に送られてくる部分データ列Dpの長さ、および、新たなバッファ領域ABが必要か否かを判定している。
これにより、本実施形態に係る受信処理部51は、上述した構成、すなわち、部分データ列Dpの本体を受信しながら、その都度、新たなバッファ領域ABの要否を判定する構成と比較して、より早い時点で、制御用ホストコンピュータ17に異常通知を送信することができ、部分データ列本体の送信の全部または大部分を中止させることができる。
一方、本実施形態に係る制御用ホストコンピュータ17(より詳細には、サーバ部73)には、送信すべきデータ列Dsの生成源としての作画処理部75から受け取ったデータ列Dsを部分データ列Dp…に分割する分割処理部(データ送信手段)81が設けられており、当該分割処理部81は、例えば、LAN・IF部72へ指示するなどして、これらの各部分データ列Dpに、上述したヘッダをそれぞれ付加したデータを、プログラマブル表示器13に送信できる。
さらに、上記サーバ部73には、上記分割処理部81が、上記データ列Dsを構成する部分データ列Dp…を全て送信したか否かと、プログラマブル表示器13の受信処理部51から異常通知を受け付けたか否かとを判定し、それらの判定結果に応じたコマンドを生成するコマンド生成部(指示手段)82が設けられており、当該コマンド生成部82は、例えば、LAN・IF部72へ指示するなどして、上記生成したコマンドを、プログラマブル表示器13に送信できる。
より詳細には、上記コマンド生成部82は、異常通知を受け付けた場合、その異常通知が初回の異常通知であれば、第1の書き込みコマンドとして、バッファ領域ABに格納されている各部分データ列Dpを、フラッシュROM36bに書き込むよう指示するコマンドを送信できる。
なお、例えば、第1の書き込みコマンドに場所の情報を含めておき、受信処理部51が、第1の書き込みコマンドを受け取る度に、上記各部分データ列Dpを当該場所に格納してもよいが、仮に、このように構成すると、最初の部分データの書き込みを開始してから、最後の部分データの書き込みが終了するまでの期間は、上記場所には、更新前のデータと更新後のデータとが混在して記憶される。したがって、この期間中は、正しいデータを参照できなくなる。また、この期間中に、例えば、停電などが発生して、データ伝送が中止されてしまうと、更新前のデータが破損してしまい、フラッシュROM36b中に正しいデータが存在しなくなってしまう。
これに対して、本実施形態では、当該第1の書き込みコマンドを受信した受信処理部51は、フラッシュROM36bのうち、作業用のファイル(更新前の画面データが格納されているファイルとは異なるファイル)に、上記各部分データ列Dpを格納しており、後述する第3の書き込みコマンドが発行され、全部分データ列Dp…の書き込みが完了した時点で、当該全部分データ列Dp…を格納した、上記作業用のファイルを移動している。
当該構成では、更新後のデータ列DsがフラッシュROM36bに書き込まれている間、フラッシュROM36bには、更新前のデータ列が残っているので、更新前のデータを読み出すことのできる期間を延長でき、正しいデータが破損する可能性を低減できる。なお、上述したように、本実施形態に係るプログラマブル表示器13では、索引用の記憶領域を変更することによって、データ列の実体が格納されている物理的な記憶領域の場所を変更させることなく、ファイルの論理的な格納場所を変更できる。したがって、プログラマブル表示器13の負担を余り増大させることなく、全部分データ列Dp…の書き込み完了後に、当該全部分データ列Dp…を格納したファイルの格納場所を変更できる。
なお、この構成では、全部分データ列Dp…を作業用のファイルに書き込んだ後に、当該ファイルの論理的な格納場所が変更されるため、第1の書き込みコマンド発行時に、格納場所の情報が不要であり、受信処理部51が上記作業用の領域に上記各部分データ列Dpを格納すればよい。したがって、本実施形態に係る第1の書き込みコマンドは、格納場所を含まずに構成されている。
また、コマンド生成部82は、2回目以降の異常通知を受け付けた場合、第2の書き込みコマンドとして、バッファ領域ABに格納されている各部分データ列Dpを、第1の書き込みコマンドによって書き込んだデータに追記するように指示するコマンドを送信できる。一方、プログラマブル表示器13のアクセス処理部52は、当該第2の書き込みコマンドを受信した場合、アクセス処理部52へ指示して、上記各部分データ列Dpを、上記第1の書き込みコマンドによって生成された、上記作業用のファイルに追記させることができる。
なお、初回か否かは、例えば、異常通知の回数を記憶しておき、当該回数を異常通知を受け付ける度に更新したり、異常通知があったか否かを示すフラグを記憶しておき、当該フラグをデータ列Dsの送信前にクリアすると共に、異常通知があった場合は、当該フラグを設定したりして記憶すると共に、これらの記憶を参照することによって判定できる。
さらに、上記コマンド生成部82は、全ての部分データ列Dp…が送信されたとき、そのデータ列Dsを伝送している間に一度でも異常通知があれば、第3の書き込みコマンドとして、それまでの異常通知に応じてフラッシュROM36bに書き込まれたデータに、上記バッファ領域ABに格納されている各部分データ列Dpを追記し、その後、フラッシュROM36bに格納されたデータ列(全部分データ列)Dp…を、指定した場所に移動するように指示するコマンドを送信できる。また、プログラマブル表示器13のアクセス処理部52は、当該第3の書き込みコマンドを受信した場合、アクセス処理部52へ指示して、上記第1の書き込みコマンドによって作成された作業用のファイルに、上記各部分データ列Dpを追記させると共に、当該作業用のファイルの論理的な格納場所を、当該第3の書き込みコマンドによって指示された場所に変更させることができる。
一方、上記コマンド生成部82は、全ての部分データ列Dp…が送信されたとき、そのデータ列Dsの伝送中に一度も異常通知がなかった場合は、第4の書き込みコマンドとして、バッファ領域ABに格納されている全部分データ列Dp…を、フラッシュROM36bの記憶領域のうち、指定する場所に書き込むように指示するコマンドを送信できる。
なお、当該第4の書き込みコマンドを受信した受信処理部51は、全部分データ列Dp…を、直接指定された場所に書き込んでもよいが、本実施形態では、異常通知があった場合と同様に、正常なデータが失われる可能性を低減するために、全部分データ列Dp…を、フラッシュROM36bの作業用のファイルに書き込んだ後、当該作業用のファイルを、当該第4の書き込みコマンドで指定された場所に移動している。
なお、制御用ホストコンピュータ17が送信したデータ(例えば、画面データなど)を格納する場所が固定されていれば、上記第3および第4の書き込みコマンドに上記場所を示す情報を含める必要がないが、本実施形態では、第3および第4の書き込みコマンドに当該情報が含まれている。これにより、制御用ホストコンピュータ17は、フラッシュROM36bの記憶領域のうち、所望の格納場所のファイルに、送信したデータ列Dsを格納させることができる。
以下では、画面データファイルを示すデータ列Dsの格納に充分なバッファ領域ABが確保できた場合における各装置の動作と、できなかった場合の動作とを、図5〜図12を参照しながら、順番に説明する。
図5に示すステップ1(以下では、S1のように略称する)において、制御用ホストコンピュータ17の分割処理部81は、送信すべきデータ列Dsを部分データ列Dp…に分割し、全部分データ列Dp…の送信が終了するまでの間(S2にて、YES になるまでの間)、S3〜S7の処理を繰り返す。
具体的には、制御用ホストコンピュータ17のコマンド生成部82は、S3において、上記各部分データ列Dpを伝送し、プログラマブル表示器13から異常通知を受領したか否かを判定する(S4)。
一方、プログラマブル表示器13の受信処理部51は、制御用ホストコンピュータ17から部分データ列Dpを受け取ると(図6に示すS21にて、YES の場合)、S22において、当該部分データ列Dpをバッファ領域ABに格納できるかを判定する。なお、受信処理部51は、これまでに確保したバッファ領域ABでは、部分データ列Dpを格納できない場合、メモリ管理部41へ指示して、バッファ領域ABの拡大を試みる。
ここでは、プログラマブル表示器13がデータ列Dsの格納に充分なバッファ領域ABを確保できた場合について説明しているので、上記S22の判定は、YES となる。この場合、受信処理部51は、制御用ホストコンピュータ17へ異常通知を送信せず、制御用ホストコンピュータ17から送られてくる部分データ列Dpを順次受信して、バッファ領域ABに格納する(S23)。
この場合、プログラマブル表示器13が異常通知を送信しないので、制御用ホストコンピュータ17のコマンド生成部82は、上記S4において、常に、異常通知の受領なし(NO)と判定する。したがって、コマンド生成部82は、全部分データ列Dp…の送信が終了するまでの間、S3およびS4の処理を繰り返す。これにより、図7中、t1〜t2の期間に示すように、データ列Dsを構成する全部分データ列Dp…は、上述したいずれのコマンドを間に挟むことなく伝送される。
さらに、全部分データ列Dp…の伝送が終了すると(図5に示すS2にて、YES の場合)、コマンド生成部82は、S11において、当該全部分データ列Dp…の伝送に関する異常通知を受け取ったか否かを判定する。
ここでは、上述したように、異常通知が受け取られていないので、当該S11の判定は、NOになる。したがって、コマンド生成部82は、S12において、上記第4の書き込みコマンドを送信し、上記全部分データ列Dp…を、画面データとしての格納場所のファイルに格納するように指示する(図7中、t3の時点)。
一方、プログラマブル表示器13の受信処理部51は、当該第4の書き込みコマンドを受領すると(図6に示すS21、S31、S41、S51にてNOの場合)、S53において、アクセス処理部52に指示して、バッファ領域ABに格納されていた全部分データ列Dp…を、上記第4の書き込みコマンドにて指定された格納場所のファイルとして、フラッシュROM36bに書き込ませる。(図7中、t4〜t5の期間)。なお、上述したように、本実施形態では、アクセス処理部52は、上記受信処理部51の指示に従い、上記全部分データ列Dp…を、作業用のファイルに書き込んだ後、ファイルの論理的な格納場所を変更することによって、当該全部分データ列Dp…を当該格納場所に格納している。
一例として、図8に示すように、全部分データ列Dp0〜Dp4が、メモリ36aのバッファ領域ABに確保された、互いに非連続な記憶領域M1・M2に格納された後、第4の書き込みコマンドを受け付けた場合、アクセス処理部52は、当該部分データ列Dp0〜Dp4を、フラッシュROM36bに書き込むことができる。なお、図8では、一例として、記憶領域M1に部分データ列Dp3・Dp4が格納され、記憶領域M2に部分データ列Dp0〜Dp2が格納されている場合を例示している。また、図8では、フラッシュROM36bの記憶領域は、論理的な記憶領域を示しており、全部分データ列Dp0〜Dp4が、あるファイルに連続して書き込まれている。
これとは逆に、例えば、画面データのデータ量がバッファ領域ABとして確保可能な記憶容量の上限を超えていたり、プログラマブル表示器13の他の処理がメモリ36aの記憶領域を占有したりして、プログラマブル表示器13が上記データ列Dsの格納に充分なバッファ領域ABを確保できなかった場合は、上記各装置17・13は、以下に示すように動作する。
すなわち、これまで送られてきた部分データ列Dpをバッファ領域ABに格納できている間は、上記各装置17・13は、上記と同様に動作しており、制御用ホストコンピュータ17は、各部分データ列Dpを送信し、プログラマブル表示器13は、これらの部分データ列Dp…をバッファ領域ABに格納している(図9中、t11〜t12の期間)。
ただし、今度の場合は、上述したように、全部分データ列Dp…の格納に充分なバッファ領域ABを確保できない。したがって、プログラマブル表示器13の受信処理部51は、いずれかの部分データ列Dpが伝送されようとしたときに、当該部分データ列Dpをバッファ領域ABに格納できないことを検出する。この場合(図6に示すS22にて、NOの場合)、受信処理部51は、S24において、制御用ホストコンピュータ17へ異常通知を送信する(図9に示すt13の時点)。
例えば、図10の状態では、図8と同様、記憶領域M1およびM2が確保されているが、送信側としての制御用ホストコンピュータ17が送信しようとしているデータ列Dsは、部分データ列Dp0〜Dp11に分割されているので、これらの部分データ列Dp0〜Dp11を全て記憶領域M1およびM2に格納できない。したがって、部分データ列Dp0〜Dp4が格納された時点で、それ以上の部分データ列(この場合は、Dp5)を格納できないことが検出され、異常通知が送信される。
一方、制御用ホストコンピュータ17のコマンド生成部82は、異常通知を受領すると(図5に示すS4にて、YES の場合)、S5において、当該異常通知が、データ列Dsの送信の間に初めて通知されたものか否かを判断する。この場合は、初回の異常通知なので、コマンド生成部82は、S6において、第1の書き込みコマンドをプログラマブル表示器13に送信して、バッファ領域ABに格納されていた、データ列Dsに関連する部分データ列Dpを、フラッシュROM36bに書き込むように指示する(図9に示すt14の時点)。
さらに、プログラマブル表示器13の受信処理部51は、当該第1の書き込みコマンドを受信すると(図6に示すS21にてNO、S31にてYES の場合)、S32において、アクセス処理部52に指示して、バッファ領域ABに格納されていた上記部分データ列Dp…を、フラッシュROM36bのうち、フラッシュROM36bの作業用のファイルに順次書き込ませる(図9中、t15〜t16の期間)。
ここで、アクセス処理部52が上記各部分データ列Dp…をフラッシュROM36bに順次書き込んでいくと、バッファ領域ABのうち、これらの部分データ列Dp…を書き込んでいた領域が順次空いていくので、制御用ホストコンピュータ17の分割処理部81が次の部分データ列Dpの送信を開始しても、受信処理部51は、当該部分データ列Dpを格納できるようになる。
上記構成では、例えば、t15〜t16の期間とt17〜t18の期間とが重なっている期間のように、アクセス処理部52がバッファ領域ABに格納された部分データ列DpをフラッシュROM36bへ順次書き込んでいる間も、受信処理部51は、次の部分データ列Dpを受信することができる。したがって、書き込み期間と受信期間とを別個に設ける構成と比較して、データ列Dsの最初の伝送を開始してから、データ列Dsの最後をフラッシュROM36bに書き込み終えるまでの期間を短縮できる。
なお、上記分割処理部81は、受信処理部51が格納できることを制御用ホストコンピュータ17へ伝えてから、次の部分データ列Dpの送信を開始してもよいが、本実施形態に係る分割処理部81は、プログラマブル表示器13の負担をより軽減するために、コマンド生成部82がコマンドを送信してから、予め定められた期間が経過した時点(図9に示すt17の時点)で、次の部分データ列Dpの送信を開始している。ここで、当該期間は、アクセス処理部52による書き込み速度や部分データ列Dpの大きさなどに基づいて、アクセス処理部52の書き込みによって、バッファ領域ABに、次の部分データ列Dpの送信に充分な空き領域が形成される程度の値に設定されている。
例えば、図10は、部分データ列Dp0〜Dp4をフラッシュROM36bに格納した結果、上記記憶領域M1・M2が空いた状態を示してる。これにより、受信処理部51は、図11に示すように、次の部分データ列Dp5…を順次記憶領域M1・M2に格納できるようになる。なお、図11では、説明の便宜上、フラッシュROM36bに部分データ列Dp0〜Dp4が書き込まれ後に、次の部分データ列Dp5…が格納される状態を図示しているが、上述したように、フラッシュROM36bへの書き込みと、新たな部分データ列Dpの受信とは並列して行われる。より詳細には、アクセス処理部52が上記各部分データ列Dp…をフラッシュROM36bに順次書き込んでいき、バッファ領域ABのうち、これらの部分データ列Dp…を書き込んでいた領域が順次空いていくと、受信処理部51は、この順次空いていく領域に、新たに受信した部分データ列Dpを格納していく。
その後は、次に送信する部分データ列Dpをバッファ領域ABに格納できなくなるか、あるいは、データ列Dsの伝送が終了するまでの間(t17〜t18の期間)、制御用ホストコンピュータ17およびプログラマブル表示器13は、上記t11〜t12までの期間と同様の処理を繰り返し、制御用ホストコンピュータ17から送られる部分データ列Dpは、バッファ領域ABに順次格納されていく。
ここで、データ列Dsの伝送が終了するまでの間に、次に送信する部分データ列Dpをバッファ領域ABに格納できなくなると(図6に示すS22にてNOの場合)、プログラマブル表示器13の受信処理部51は、上記の時点t13と同様に、t19の時点において、異常通知を送信し(図6に示すS24)、制御用ホストコンピュータ17のコマンド生成部82は、異常通知の受領を検出する(図5に示すS4にてYES の場合)。
ただし、この場合は、異常通知の受領が初回ではないので、コマンド生成部82は、時点t20において、第2の書き込みコマンドを送信して、プログラマブル表示器13に追記を指示する(図5に示すS7)。一方、第2の書き込みコマンドを受信した場合、(図6に示すS21、S31にてNO、S41にてYES の場合)、プログラマブル表示器13の受信処理部51は、アクセス処理部52へ指示して、バッファ領域ABに格納されていた上記部分データ列Dp…を、上記S32にて生成した作業用のファイルに順次追記させる(t21〜t22の期間)。
例えば、図12は、図11の後、部分データ列Dp5〜Dp9が各記憶領域M1・M2に格納され、さらに、アクセス処理部52が、上記第2の書き込みコマンドに応じて、当該部分データ列Dp5〜Dp9をフラッシュROM36bに追記しようとしている状態を示している。
また、制御用ホストコンピュータ17の分割処理部81は、上記t17時点と同様、t23の時点において、次の部分データ列Dpの送信を開始する。なお、図9では、特に記載していないが、上記t17〜t22の動作は、次に送信する部分データ列Dpをバッファ領域ABに格納できなくなる度に繰り返される。
一方、t24の時点において、データ列Dsの伝送が終了すると(図5に示すS2にて、YES の場合)、コマンド生成部82は、上記S11において、データ列Dsの送信中に、異常通知を受信したか否かを判断する。この場合は、異常通知を受信しているので、コマンド生成部82は、S13において、第3の書き込みコマンドを送信して、バッファ領域ABに格納されていた、データ列Dsに関連する部分データ列Dpを、これまでにフラッシュROM36bに書き込んでいた上記データに追記した後で、指定した場所に書き込むように指示する(t25の時点)。
一方、第3の書き込みコマンドを受信した場合、(図6に示すS21、S31、S41にてNO、S51にてYES の場合)、プログラマブル表示器13の受信処理部51は、アクセス処理部52へ指示して、バッファ領域ABに格納されていた上記部分データ列Dp…を、上記S32(あるいは、さらにS42)にて生成(あるいは、さらに更新)したファイルに順次追記させた後、上記指定された格納場所に移動させる(t26〜t27の期間)。
ここで、比較例として、コマンドを送信した後、書き込むべきデータ列を送信する構成では、制御用ホストコンピュータが、事前に何回に分けて送信するかを判定するために、バッファ領域ABの大きさを知っている必要があり、プログラマブル表示器13は、事前にバッファ領域ABの大きさ通知する必要がある。また、プログラマブル表示器13において、バッファ領域ABとして確保可能な記憶領域の大きさが変化しても、その変化に追従することが難しい。したがって、効率的なメモリ管理が難しくなってしまう。また、適切なバッファ領域ABの大きさを正確に予測しようとすると、プログラマブル表示器13の負担が大きくなってしまう。
これに対して、本実施形態では、部分データ列Dpの後に、コマンドが送っている。したがって、制御用ホストコンピュータ17は、事前にコマンドを送信する構成とは異なり、プログラマブル表示器13で確保されるバッファ領域ABの大きさに拘わらず、部分データ列Dpを送信し、プログラマブル表示器13からの異常通知の有無に応じて変更するだけでよい。
また、プログラマブル表示器13は、コマンドが送られるまでの間は、コマンドの内容に拘わらず、常に同一の処理、すなわち、部分データ列Dpをバッファ領域ABに格納するという処理を行い、コマンドが発行された時点で、バッファ領域ABに格納された部分データ列Dpを、コマンドに従ってフラッシュROM36bに書き込むだけでよい。
このように、上記構成では、追記すべきか否かは、部分データ列Dp…を送信した後で、伝送が終了したか否かと合わせ、制御用ホストコンピュータ17側で判定される。したがって、プログラマブル表示器13は、上記書き込みコマンドを受け付けるまでの間、制御用ホストコンピュータ17から受け取った部分データ列Dp…をバッファ領域ABに格納すると共に、格納できない場合は、異常通知を送信するだけでよく、書き込みコマンドを受け付けた時点で、コマンドに従って、新たな書き込みを行うか、追記するかを選択すればよい。この結果、先にコマンドを送信する構成と比較して、プログラマブル表示器13の負担を軽減できる。
また、当該構成では、異常通知を受け取ってから、いずれのコマンドを送信するかを判定できるので、プログラマブル表示器13において、バッファ領域ABの大きさが変更されても、プログラマブル表示器13および制御用ホストコンピュータ17の上記動作を変更することなく、適切なコマンドが送信される。したがって、プログラマブル表示器13は、制御用ホストコンピュータ17との通信処理を阻害することなく、より柔軟にメモリ36aを管理できる。
ところで、上記では、データ列Dsの伝送によって、フラッシュROM36bに格納されている画面データファイル全体を更新する場合について説明したが、本実施形態に係る制御用ホストコンピュータ17およびプログラマブル表示器13は、ファイルの一部のみを更新することもできる。
具体的には、本実施形態において、第3および第4の書き込みコマンドには、上述した格納場所の情報に加えて、当該格納場所におけるオフセットを示すオフセット情報も含めることができる。また、コマンド生成部82がオフセット情報を含む第3または第4の書き込みコマンドを送信した場合、それを受信した受信処理部51は、全部分データ列Dp…からなるデータ列Dsを移動する際、上記格納場所のうち、上記オフセット情報で指定されたオフセットに、当該データ列Dsを移動する。
これにより、データの一部分のみが更新された場合でも全てのデータを伝送する構成と比較して、制御用ホストコンピュータ17およびプログラマブル表示器13間で伝送されるデータ量を削減でき、データ更新に要する時間を削減できる。
なお、本実施形態に係るプログラマブル表示器13は、フラッシュROM36bにファイルを記憶する際、1ファイルの大きさが、単一のブロックに収まらない場合、1ファイルのデータを、複数のブロックに連続して記憶すると共に、各ファイルがいずれのブロックから構成されているかも記憶している。したがって、ファイル全体を、物理アドレスが連続した記憶領域に格納する必要がなく、ファイルの1部分を更新する場合であっても、ファイル全体を書き換える必要がない。
ところで、本実施形態に係る制御用ホストコンピュータ17の分割処理部81は、ファイルを示すデータ列Dsを部分データ列Dpに分割して、プログラマブル表示器13に送信する際、各部分データ列Dpにチェーン番号を示す情報を付加して送信している。当該チェーン番号は、あるコマンドと、そのコマンドによってフラッシュROM36bに書き込まれる部分データ列Dp同士であって、互いに同一のファイルに順次書き込まれる部分データ列Dp同士とが互いに同じ値を持つように設定されている。
一方、プログラマブル表示器13の受信処理部51は、互いに同じチェーン番号を示す情報が付された部分データ列Dp同士を、互いに同じデータ列Dsに含まれる部分データ列Dpとして管理している。具体的には、本実施形態に係る受信処理部51は、各部分データ列Dpを、そのチェーン番号に関連付けて、バッファ領域ABに格納できる。
例えば、本実施形態に係る受信処理部51およびアクセス処理部52は、上述したように、バッファ領域ABの各小領域Maをチェーン状に管理しており、上記受信処理部51は、最初の小領域(例えば、Ma1)を示す情報Dfを、チェーン番号のそれぞれに対応付けて記憶している。
さらに、上記制御用ホストコンピュータ17のコマンド生成部82は、書き込みコマンドを送信する際、チェーン番号を特定する情報を付加して送信することができ、上記受信処理部51は、当該情報を付加した書き込みコマンドを受信した場合、バッファ領域ABに格納されている部分データ列Dpのうち、当該情報の示すチェーン番号に関連付けて記憶された部分データ列Dpのみを、フラッシュROM36bに書き込むことができる。なお、上記コマンド生成部82は、例えば、分割処理部81からの通知などによって、現在伝送中の各部分データ列Dpのチェーン番号を把握できる。
上記構成では、各部分データ列Dpにチェーン番号を示す情報が付されており、受信処理部51は、各部分データ列Dpを、そのチェーン番号に関連付けて、バッファ領域ABに格納している。
したがって、制御用ホストコンピュータ17が複数のファイルを同時に伝送したとしても、より正確には、分割処理部81が、あるファイルに関連する部分データ列Dpのうち、最初の部分データ列Dpの送信を開始してから、最後の部分データ列Dpの送信を完了するまでの期間(そのファイルの伝送期間)と、他のファイルの伝送期間とが、重なっていたとしても、受信処理部51およびアクセス処理部52は、あるファイルに関連する部分データ列Dpと、他のファイルに関連する部分データ列Dpとを区別することができる。この結果、制御用ホストコンピュータ17が、それぞれの伝送期間が重なるように各ファイルを伝送したとしても、プログラマブル表示器13は、何ら支障なく、各ファイルに関連する部分データ列Dpを正しく受信すると共に、各ファイルを、フラッシュROM36bに正しく書き込むことができる。
なお、この場合、コマンド生成部82は、異常通知を受け付けたときに、現在伝送中の全ファイルに関連するチェーン番号を示す情報を付加して、それぞれ用の書き込みコマンドを送信してもよい。また、コマンド生成部82は、例えば、各ファイルの残りのデータ量(未送付のデータ量)と、各ファイルの書き込んでいないデータ量となどを分割処理部81から取得すると共に、それに基づいて、各ファイル毎に書き込みコマンド送付の要否を判定してもよい。この場合、残りデータ量が少ないファイルの書き込みコマンドの送付を停止することができ、残りのデータ量とまとめて書き込みを指示できる。なお、各ファイルの書き込んでいないデータ量は、未だ書き込みコマンドを送信していない場合は、これまでに送信した部分データ列Dpのデータ量、既に書き込みコマンドを送信している場合は、前回書き込みコマンドを送付した後に送信した部分データ列Dpのデータ量として検出できるので、コマンド生成部82は、分割処理部81から、これらの情報を受け取れば、各ファイルの書き込んでいないデータ量を算出できる。
ところで、上記では、複数のファイルを送信する場合、各ファイルを個別に伝送する場合について説明した。これに対して、以下では、複数のファイルを1つのデータ列Dsaにまとめた後、それを部分データ列Dpに分割して送信する構成について説明する。
すなわち、本変形例に係る制御用ホストコンピュータ17のサーバ部73aは、図1の構成と略同様であるが、図13に示すように、送信すべきデータ列Dsaの生成源として、ファイル統合部83が設けられている。当該ファイル統合部83は、例えば、作画処理部75などの部材から、プログラマブル表示器13へ送信すべきファイルを複数受け取ると、これらのファイルをまとめて、それらを示す1つのデータ列Dsaを生成し、上述したデータ列Dsの代わりに当該データ列Dsaを分割処理部81へ与えることができる。
上記ファイル統合部83の生成する上記データ列Dsaには、図14に示すように、転送すべき複数のファイルを示すデータ列Dに加えて、各ファイルを示すデータ列が、データ列Dsaのどの部分を占めているかを特定するためのファイル情報FIが含まれている。本変形例では、一例として、上記データ列Dは、各ファイルF1…の全体を示すデータ列D1…を順番に連結して生成されており、上記ファイル情報FIは、各ファイルF1…を示すデータ列D1…の先頭アドレスを含んでいる。なお、当該先頭アドレスは、データ列Dsaまたはデータ列Dにおけるオフセット(データ列Dsaまたはデータ列Dの先頭アドレスを0とする相対アドレス)で指定されている。また、上記データ列Dsaでは、上記データ列Dの前にファイル情報FIを配置してもよいが、本変形例では、より早い時点で、データ列Dsaの送信を開始できるように、データ列Dの後にファイル情報FIが配置されている。
また、新たな書き込みコマンドによって、当該データ列Dsaの分離・書き込みを指示してもよいが、本変形例に係るコマンド生成部82は、第3および第4の書き込みコマンドにおいて、特定のパターンにマッチしたファイル名(例えば、拡張子が、”.con”であるファイル名)を指定することによってデータ列Dsaの分離および書き込みを指示している。これに伴なって、上記ファイル統合部83は、各ファイルの格納先を示す情報も、上記ファイル情報FIに含めている。
一方、プログラマブル表示器13は、図1の構成と略同様であるが、図13に示すように、アクセス処理部52に代えて、アクセス処理部52aが設けられている。当該アクセス処理部52aは、図1に示すアクセス処理部52の処理に加えて、ファイル情報FIを含むデータ列Dsaの分離・書き込みが指示された場合、データ列Dsaに含まれるファイル情報FIに基づいて、データ列Dsaに含まれる上記データ列Dを複数のファイルに分離できる。
本変形例では、上述したように、第3および第4の書き込みコマンドを、通常のデータ列Dsの書き込み指示と、データ列Dsaの分離・書き込み指示との間で兼用すると共に、ファイル情報FIに、各ファイルの格納場所が含まれている。
これに伴なって、当該アクセス処理部52aは、第3および第4の書き込みコマンドにて指定された場所が、上記特定のパターンにマッチするか否かを判定し、マッチしている場合、分離・書き込みが指示されたと判断している。さらに、上記アクセス処理部52aは、データ列Dsaの分離・書き込みの指示を受け付けた場合、データ列Dsaに含まれるファイル情報FIに基づいて、データ列Dsa中の各データ列D1…の配置を特定し、各データ列D1…を、それぞれ別のファイルF1…に分離すると共に、各ファイルの格納場所を上記ファイル情報FIの示す格納場所に設定している。
本変形例では、データが破損する可能性を低減するため、データ列Dsaを、作業用のファイルとして、フラッシュROM36bに書き込んだ後、当該データ列Dsaを示す作業用のファイルを分割している。ただし、本変形例に係るフラッシュROM36bには、上述したファイルシステムが構築されている。したがって、作業用のファイルを分離する際、フラッシュROM36bのアクセス単位となる領域中に、上記各ファイルの区切りが入っている場合(複数のファイルを示すデータ列の一部が当該領域中に混在している場合)を除いては、索引用の記憶領域(例えば、ディレクトリエントリなど)を更新することによって、データの実体を移動させることなく、ファイルを分離できる。この結果、フラッシュROM36bに書き込んだ後、上記作業用のファイルを分離し、それぞれの論理的な格納場所を変更しているにも拘わらず、データの実体を全て移動する構成に比べて、分離・書き込み時に更新する必要のあるデータのデータ量は、低減されている。
当該構成でも、図1の構成と同様に追記すべきか否かは、部分データ列Dp…を送信した後で、伝送が終了したか否かと合わせ、制御用ホストコンピュータ17側で判定されるので、先にコマンドを送信する構成よりも、プログラマブル表示器13の負担を軽減できる。
また、当該構成では、異常通知を受け取ってから、いずれのコマンドを送信するかを判定できるので、プログラマブル表示器13において、バッファ領域ABの大きさが変更されても、プログラマブル表示器13および制御用ホストコンピュータ17の上記動作を変更することなく、適切なコマンドが送信される。したがって、プログラマブル表示器13は、制御用ホストコンピュータ17との通信処理を阻害することなく、より柔軟にメモリ36aを管理できる。
なお、上記では、第3および第4の書き込みコマンドにて指定する格納場所が、特定のパターンにマッチしているか否かによって、分離・書き込みを指示したが、これに限るものではなく、第3および第4の書き込みコマンドとは別に、それぞれに対応する分離・書き込み用の書き込みコマンドを設けてもよい。また、上記では、書き込みコマンドではなく、ファイル情報FIによって、各ファイルの格納場所を指定したが、これに代えて/加えて、書き込みコマンド中に、各ファイルの格納場所の情報を含めてもよい。いずれの場合であっても、上記と同様の効果が得られる。
また、上記では、ファイル情報FIに、各ファイルを示すデータ列D1…の先頭アドレスが含まれている場合を例にして説明したが、データ列Dsa中の各データ列D1…の配置を特定できれば、例えば、先頭アドレスに代えて/加えて、各データ列D1…の終了アドレスあるいはサイズを用いてもよい。さらに、これら先頭/終了アドレスまたはサイズの組み合わせを用いてもよい。また、データ列Dでは、1つのファイルを示すデータ列(例えばD1)が、データ列Dで連続している場合を例にして説明したが、複数に分割されていてもよい。いずれの場合であっても、上記ファイル情報FIに基づいて、データ列Dsaにおいて、各ファイルを示すデータ列の配置を特定でき、各ファイルに復元できれば、いずれのファイル情報DIを用いても同様の効果が得られる。
ところで、上記では、データ列Ds(Dsa)が圧縮されていない構成について説明した。これに対して、以下では、圧縮した後のデータ列を伝送すると共に、解凍時に確保可能な作業領域の大きさを低減可能な構成について説明する。なお、当該構成は、後述するように図1の構成にも適用できるが、以下では、図13の構成に適用した場合を例にして説明する。
すなわち、本変形例に係る制御用ホストコンピュータ17のサーバ部73bは、図13の構成と略同様であるが、図15に示すように、ファイル統合部83に代えて、上記圧縮後のデータ列Dsbを生成可能なファイル統合部(圧縮手段)83bが設けられている。当該ファイル統合部83bは、プログラマブル表示器13へ送信すべきファイルを示すデータ列を、予め定められたデータ量毎に分割した後、それぞれを圧縮し、それらをまとめて生成したデータ列Dsbを、上述したデータ列Dsaの代わりに、分割処理部81へ与えることができる。
複数のファイルをまとめて伝送する場合を例にして、データ列Dsbの生成処理について詳細に説明すると、ファイル統合部83bは、例えば、作画処理部75などの部材から、プログラマブル表示器13へ送信すべきファイルを複数受け取ると、図16に示すように、図14と同様に、転送すべき複数のファイルを示すデータ列Dを生成する。なお、図16では、図14と同様に、当該データ列Dが、各ファイルF1〜F3の全体をそれぞれ示すデータ列D1〜D3を順番に連結して生成されている場合を例示している。
さらに、ファイル統合部83bは、当該データ列Dを、予め定められたデータ量L毎に分割して、分割データ列Dd(図中では、Dd11〜Dd14)を生成する。なお、データ量Lを、ある程度の幅を持って設定しておき、その幅の内で、各分割データ列Ddが均一になるように分割してもよいが、図16では、上記データ量Lを、ある1つの固定値に設定し、余った部分は、新たな分割データ列Dd(図の例では、最後の分割データ列Dd14)して生成する場合を例示している。
また、上記ファイル統合部83bは、各分割データ列Dd11〜Dd14を、それぞれ符号化して、圧縮後分割データ列Da11〜Da14を生成する。なお、本変形例では、符号化方法として、データ量を圧縮可能な符号化方法を採用している。また、各圧縮後分割データ列Da11〜Da14は、各分割データ列Dd11〜Dd14のうち、末尾に付した数字が互いに同じにものに対応しており、例えば、各圧縮後分割データ列Da11は、分割データ列Dd11を圧縮して生成されたデータ列である。
さらに、上記ファイル統合部83bは、上記各圧縮後分割データ列Da11〜Da14をまとめて、圧縮後データ列Daを生成する。本変形例では、まとめ方の一例として、各圧縮後分割データ列Da11〜Da14を連結して圧縮後データ列Daを生成する方法を採用している。
また、第3および第4の書き込みコマンドとは別のコマンドを用意し、ファイル情報FIおよび圧縮マージ情報MI(後述)と同等の情報を含めてもよいが、本変形例では、図13の構成と同様に、圧縮する場合にも第3および第4の書き込みコマンドを用いており、これらの書き込みコマンドにおいて、特定のパターンにマッチしたファイル名(例えば、拡張子が、”.pac”であるファイル名)を指定することによってデータ列Dsbの解凍・書き込みを指示している。
これに伴なって、本変形例に係るファイル統合部83bは、上記圧縮後データ列Daに、ファイル情報FIと、圧縮マージ情報MIとを付加して、データ列Dsbを生成できる。当該ファイル情報FIは、図14と同様のものであって、各ファイルを示すデータ列が、データ列Dsbのどの部分を占めているかを特定するための情報である。一方、当該圧縮マージ情報MIは、上記圧縮後データ列Daにおいて、各圧縮後分割データ列Da11〜Da14が、データ列Daのどの部分を占めているかを特定するためのものであって、上記ファイル情報FIと同様に、例えば、各圧縮後分割データ列Da11〜Da14の先頭アドレスなどを含んでいる。ただし、圧縮マージ情報MIは、上記ファイル情報FIとは異なってファイルの格納場所の情報は含まれていない。なお、データ列Dsbには、必要に応じて、ヘッダが含まれていてもよい。
一方、本変形例に係るプログラマブル表示器13では、図15に示すように、アクセス処理部52aに代えて、アクセス処理部52bが設けられている。当該アクセス処理部52bは、図13に示すアクセス処理部52aの処理に加えて、圧縮マージ情報MIを含むデータ列Dsbの復号・書き込みが指示された場合、データ列Dsbに含まれる圧縮マージ情報MIに基づいて、上記データ列Dを復号できる。また、アクセス処理部52bは、アクセス処理部52aと同様、ファイル情報FIに基づいて、復号されたデータ列Dを分割している。
より詳細に説明すると、本変形例では、上述したように、第3および第4の書き込みコマンドを、通常のデータ列Dsの書き込み指示と、データ列Dsaの解凍・書き込み指示との間で兼用すると共に、データ列Dsbにファイル情報FIおよび圧縮マージ情報MIが含まれている。
これに伴なって、本変形例に係るアクセス処理部52bは、第3および第4の書き込みコマンドにて指定された場所が、上記特定のパターンにマッチするか否かを判定し、マッチしている場合、解凍・書き込みが指示されたと判断している。さらに、上記アクセス処理部52bは、データ列Dsbの解凍・書き込みの指示を受け付けた場合、データ列Dsbに含まれる圧縮マージ情報MIに基づいて、データ列Dsb中の各圧縮後分割データ列Da11〜Da14の配置を特定し、各圧縮後分割データ列Da11〜Da14を順番に解凍し、解凍後のデータ列Da11〜Da14を、順次、作業用のファイルに追記している。
ここで、作業用のファイルに上記データ列Dsbを格納するか否かに拘わらず、アクセス処理部52bは、データを解凍する際、高速処理のために、例えば、メモリ管理部41へ依頼するなどして、メモリ36a上に解凍処理に必要な記憶容量を持った作業領域ATを確保する。当該記憶容量は、一般に、解凍処理の対象となるデータ列のデータ量が大きい程、大きくなる傾向にあり、比較例として、例えば、上記複数のファイルを示すデータ列D全体を一度に圧縮すると、その解凍には、非常に大きな記憶容量が必要になってしまう。
一例として、ファイルF1〜F3の容量が、それぞれ、概ね、1.5〔MB〕、1〔MB〕、0.8〔MB〕であり、それら全体を示すデータ列D(3.3〔MB〕)を圧縮すると、概ね、0.9〔MB〕になる場合、これらのデータ列を解凍するためには、図17に示すように、4.2〔MB〕の記憶容量の作業領域ATをメモリ36a上に確保する必要がある。
これに対して、本変形例に係るアクセス処理部52bは、各圧縮後分割データ列Da11〜Da14を順番に解凍し、解凍後のデータ列Dd11〜Dd14を、順次、作業用のファイルに追記している。
この場合、ある時点において、メモリ36aに確保する必要のある作業領域ATの記憶容量は、上記圧縮後分割データ列Da11〜Da14の1つの解凍処理に必要な容量で充分であり、上記比較例と比較して当該記憶容量を大幅に削減できる。
例えば、上記の数値例と同様のファイルF1〜F3を示すデータ列Dを1〔MB〕毎に分割して、それぞれ、概ね、0.3〔MB〕、0.3〔MB〕、0.2〔MB〕および0.1〔MB〕の上記各圧縮後分割データ列Da11〜Da14を生成する場合、圧縮後分割データ列Da11〜Da14のいずれを解凍する時点であっても、図18および図19に示すように、これらのデータ列を解凍するために必要な記憶容量は、圧縮後分割データ列Da11〜Da14の合計(約0.9〔MB〕)と、解凍されるデータ列(D11〜D14のいずれか)のデータ量(1〔MB〕)とを加算した値、すなわち、約1.9〔MB〕もあれば十分である。したがって、上記比較例の場合(4.2〔MB〕)よりも大幅に上記記憶容量を削減できる。なお、一例として、上記図18は、データ列D11に解凍される場合を例示しており、図19は、データ列D12に解凍される場合を例示している。
さらに、上記解凍後データ列Dd11〜Dd14を、順次、作業用のファイルに追記することによって、複数のファイルを示すデータ列Dが復元されると、上述した図13の構成と同様に、アクセス処理部52bは、ファイル情報FIを参照して、当該データ列Dを各ファイルに分割する。
当該構成では、図1および図13の構成と同様、追記すべきか否かは、部分データ列Dp…を送信した後で、伝送が終了したか否かと合わせ、制御用ホストコンピュータ17側で判定されるので、先にコマンドを送信する構成よりも、プログラマブル表示器13の負担を軽減できる。
また、当該構成では、異常通知を受け取ってから、いずれのコマンドを送信するかを判定できるので、プログラマブル表示器13において、バッファ領域ABの大きさが変更されても、プログラマブル表示器13および制御用ホストコンピュータ17の上記動作を変更することなく、適切なコマンドが送信される。したがって、プログラマブル表示器13は、制御用ホストコンピュータ17との通信処理を阻害することなく、より柔軟にメモリ36aを管理できる。
さらに、本変形例に係る制御用ホストコンピュータ17は、伝送すべきデータ列Dを圧縮した後でプログラマブル表示器13に送信しているので、両者間に伝送されるデータ量を削減できる。また、制御用ホストコンピュータ17は、上記データ列を分割した後で、それぞれを圧縮し、それらをまとめたデータ列Dsbを、プログラマブル表示器13に送信している。
したがって、上記比較例の構成、すなわち、上記データ列Dの大きさに拘わらず、当該データ列全体を一度に圧縮する構成とは異なって、プログラマブル表示器13が解凍時にメモリ36a上に確保すべき作業領域ATの大きさを大幅に削減できる。
なお、上記では、上記データ列Dが図13と同様に複数のファイルを示している場合を例にして説明したが、これに限るものではない。例えば、図1に示すように、複数のファイルを1つのデータ列Dsa(Dsb)にまとめることなく、個別に伝送する構成にも適用できる。この場合、図20に示すように、上記制御用ホストコンピュータ17のサーバ部73cには、図15に示すファイル統合部83bに代えて、符号化部83cが設けられており、当該符号化部83cは、例えば、作画処理部75などの部材から、プログラマブル表示器13へ送信すべきファイルを受け取ると、当該ファイルを示すデータ列Dを、上記予め定められたデータ量L毎に分割して、分割データ列Dd11…を、それぞれ圧縮して、圧縮後分割データ列Da11…を生成すると共に、それらをまとめて圧縮後データ列Daを生成する。なお、この場合、第3および第4の書き込みコマンドを圧縮無の場合と兼用する場合であっても、ファイル情報FIの付加は不要である。また、この場合、上記符号化部83cが特許請求の範囲に記載の圧縮手段に対応する。
一方、アクセス処理部52bに代えて設けられたアクセス処理部52cは、圧縮マージ情報MIに基づいて、上記圧縮後データ列Daを各圧縮後分割データ列Da11…に分割し、それらを順番に解凍できる。
当該構成でも、データ列Dは、分割された後、個別に圧縮されるので、図16の構成と同様に、制御用ホストコンピュータ17およびプログラマブル表示器13間で伝送されるデータ列のデータ量を削減すると共に、解凍時に、プログラマブル表示器13がメモリ36a上に確保する必要のある作業領域ATの大きさを削減できる。
ところで、上記では、通信に異常が発生しない場合を例にして説明したが、上記実施形態および各変形例に係るプログラマブル表示器13は、通信異常が発生したことを検出して、それに対応できるように、以下の構成を備えている方が望ましい。なお、当該構成は、上述した、いずれの構成にも適用できるが、以下では、一例として、図1に示すプログラマブル表示器13について説明する。
すなわち、図1に示すように、本実施形態では、送信側となる制御用ホストコンピュータ17が、送信すべきデータ列Dsを、部分データ列Dpに分割して、受信側となるプログラマブル表示器13に送信して、メモリ36aのバッファ領域ABに格納させると共に、部分データ列Dpの送信後に、書き込みコマンドを送信して、バッファ領域ABの部分データ列DpをフラッシュROM36bに格納するように指示している。
ここで、プログラマブル表示器13は、書き込みコマンドに応じて、バッファ領域ABの部分データ列DpをフラッシュROM36bに格納しているので、途中で通信が途切れてしまった場合には、図21に示すように、本来送信すべき部分データ列Dpのうち、いずれかの部分データ列Dpが欠落し、フラッシュROM36bに中途半端なデータが残ってしまう虞れがある。
なお、図21は、制御用ホストコンピュータ17が、データ列Dsを、部分データ列Dp0〜Dp4に分割して送信しているにも拘わらず、通信異常によって、プログラマブル表示器13が、部分データ列Dp3およびDp4の受信に失敗した状態を示している。
この状態で、制御用ホストコンピュータ17が書き込みコマンドを送信すると、プログラマブル表示器13は、部分データ列Dp0〜Dp2のみをフラッシュROM36bに書き込んでしまう。この結果、プログラマブル表示器13が、最後の書き込みコマンド(第3または第4の書き込みコマンド)に応じて、部分データ列DpをフラッシュROM36bに書き込んだとき、それまでに書き込まれた全部分データDpは、元のデータ列Dsにはならず、中途半端なデータになってしまう。
これに対して、本変形例では、送信側の制御用ホストコンピュータ17(より詳細には、分割処理部81や図15に示すファイル統合部83aあるいは図20に示す符号化部83c)が、全部分データDpのいずれかに、全部分データDpが正常に伝送されたか否かを確認するための正誤情報を付加できるように構成されており、受信側のプログラマブル表示器13(より詳細には、受信処理部51またはアクセス処理部52〜52c)が、当該正誤情報に基づいて、全部分データDpが正常に伝送されたか否かを確認し、伝送の異常を検出した場合には、異常処理できるように構成されている。
なお、上記正誤情報としては、例えば、CRCやチェックサムなどの誤り検出符号や、データサイズ、あるいは、それらの組み合わせなどが挙げられる。また、異常処理としては、例えば、送信側の制御用ホストコンピュータ17に、異常を通知して、再送を依頼したり、制御用ホストコンピュータ17やプログラマブル表示器13のユーザに異常発生を通知するなどの処理が挙げられる。さらに、上記正誤情報を格納する位置としては、例えば、最初の部分データ列Dp0にヘッダとして付加する方法や、最後の部分データ列(この場合は、Dp4)に付加する方法などが挙げられる。なお、プログラマブル表示器13は、例えば、最後の書き込みコマンドによって最後に書き込まれる部分データ列などとして、最後の部分データ列を特定できる。さらに、通信経路の状態(通信途絶の頻度など)によって、どのような正誤情報が適切であるか(あるいは、正誤情報自体が不要であるか)が異なる場合には、上記制御用ホストコンピュータ17が正誤情報の種類を示す種別情報もプログラマブル表示器13に伝送し、プログラマブル表示器13が当該種別情報に基づいて正誤情報の種類を判定する方が望ましい。なお、伝送方法としては、例えば、全部分データ列Dpのいずれかに付加してもよいし、部分データ列Dpとは別に、例えば、書き込みコマンドに、例えば、ファイル名などとして付加して伝送してもよい。ここで、図22は、CRCとサイズからなる正誤情報と種別情報とがヘッダとして、最初の部分データ列Dp0に付加されている場合を例示している。
上記構成では、プログラマブル表示器13は、正誤情報に基づいて、全部分データDpが正常に伝送されたか否かを確認し、伝送の異常を検出した場合は、異常処理を行うことができる。この結果、例えば、図21に示すように、部分データ列Dpの伝送中に通信が途絶したとしても、プログラマブル表示器13は、伝送の異常を検出でき、異常処理によって、フラッシュROM36bに中途半端なデータが残ってしまうという不具合を回避できる。
さらに、上記構成では、種別情報も伝送しているので、通信経路の状態(通信途絶の頻度など)によって、どのような正誤情報が適切であるか(あるいは、正誤情報自体が不要であるか)が異なる場合であっても、制御用ホストコンピュータ17とプログラマブル表示器13との間で伝送される正誤情報の種類を、その状態に適した種類の正誤情報に変更できる。
なお、上記各部材21〜83cは、CPUなどの演算手段が、ROMやRAMなどの記憶手段に格納されたプログラムを実行し、タッチパネルや液晶表示装置などの入出力手段、あるいは、インターフェース回路などの通信回路を制御することによって実現される機能ブロックである。なお、これらの部材のうち、記憶部36は、例えば、半導体メモリなどの記憶装置自体であってもよい。したがって、これらの手段を有するコンピュータが、上記プログラムを記録した記録媒体(例えば、CD−ROMなど)を読み取って、当該プログラムを実行するだけで、本実施形態に係るプログラマブル表示器13および制御用ホストコンピュータ17を実現できる。
また、例えば、シリアルケーブルやLAN15あるいは、他の通信路を介してプログラムをダウンロードするためのプログラムが、上記コンピュータに予めインストールされていれば、当該通信路を介して、上記コンピュータへ上記プログラムを配付することもできる。
なお、上記では、不揮発性記憶装置がフラッシュROM36bである場合を例にして説明したが、例えば、ハードディスクドライブなど、他の不揮発性記憶装置でも同様の効果が得られる。また、上記では、不揮発性記憶装置にファイルシステムが構築されており、データ列の実体が格納された記憶領域(物理的な格納場所)にアクセスする際、そのアドレスを、データ列の実体が格納された記憶領域とは異なる索引用の記憶領域(例えば、ディレクトリエントリなど)を参照して特定する場合を例にして説明したが、ファイルシステムを構築せず、連続するデータ列を、物理的に連続した記憶領域に書き込んでもよい。ただし、上記のように、ファイルシステムが構築されていれば、データ列の実体を記憶している物理的な領域を移動しなくても、ファイルを移動できるので、さらに、プログラマブル表示器13の負担を軽減できる。