(57)【特許請求の範囲】
【請求項１】
通信手段が受信した受信データを、複数の一時記憶エリアのいずれかに書き込み、
前記一時記憶エリアに対して格納された前記受信データを、時系列に沿って順次読み出して単一のメモリに格納するデータ伝送方法であって、
前記通信手段側で受信データの一部に異常があったか否かを判断し、
異常があった場合には、前回格納した一時記憶エリアから、前記異常のあったデータについての正常受信データを読み出し、その読み出した正常受信データを今回受信したデータとして、正常に受信した受信データとともに前記一時記憶エリアに格納するようにしたことを特徴とするデータ伝送方法。
【請求項２】
受信データを取得する手段と、
その取得した受信データを複数の一時記憶エリアのいずれかに対して順次書き込む受信データ書き込み手段とを備え、
その受信データ書き込み手段は、前記受信データの一部に異常があった場合に、前回格納した一時記憶エリアから、前記異常のあったデータについての正常受信データを読み出し、その読み出した正常受信データを今回受信したデータとして、正常に受信した受信データとともに前記一時記憶エリアに格納する機能を備えたことを特徴とする通信装置。
【請求項３】
コントローラに対して共有メモリを介してデータ伝送を行う通信装置において、
前記複数の一時記憶エリアが、前記共有メモリにより構成されていることを特徴とする請求項２に記載の通信装置。
【請求項４】
コントローラに対して共有メモリを介してデータ伝送を行う通信装置において、
前記複数の一時記憶エリアが、前記通信装置が持つ内部メモリにより構成され、
最新の受信データが書き込まれた受信データ記憶エリアに格納された受信データを前記共有メモリに転送する転送手段を備えたことを特徴とする請求項２に記載の通信装置。
【請求項５】
前記共有メモリは、前記通信装置に実装されていることを特徴とする請求項３または４に記載の通信装置。
【請求項６】
通信手段と、コントローラと、それら通信手段とコントローラの間で伝送するデータを一時的に格納する共有メモリを備えたデータ伝送システムにおいて、
前記共有メモリは、前記通信手段が取得した受信データを書き込むための複数の受信データ記憶エリアを備え、
前記通信手段は、最新の受信データが格納されていない受信データ記憶エリアに対して受信データを書き込む処理を行う受信データ書き込み手段を備え、
前記受信データ書き込み手段は、受信データの一部に異常があった場合に、前記最新の受信データが格納された受信データ記憶エリアから前記異常のあったデータについての正常受信データを読み出し、その読み出した正常受信データを今回受信したデータとして、正常に受信した受信データとともに前記書き込む処理を行う機能を持ち、
前記コントローラは、最新の受信データが書き込まれた受信データ記憶エリアに格納された受信データを読み出す受信データ読み出し手段を備えたことを特徴とするデータ伝送システム。
【請求項７】
通信手段と、コントローラと、それら通信手段とコントローラの間で伝送するデータを一時的に格納する共有メモリを備えたデータ伝送システムにおいて、
前記通信手段は、内部メモリに受信データを格納する複数の一時記憶エリアを持ち、
最新の受信データが格納されていない前記一時記憶エリアに対して受信データを書き込む処理を行う受信データ書き込み手段と、
最新の受信データが書き込まれた受信データ記憶エリアに格納された受信データを前記共有メモリに転送する転送手段を備え、
前記受信データ書き込み手段は、受信データの一部に異常があった場合に、前記最新の受信データが格納された受信データ記憶エリアから前記異常のあったデータについての正常受信データを読み出し、その読み出した正常受信データを今回受信したデータとして、正常に受信した受信データとともに前記書き込む処理を行う機能を持ち、
前記コントローラは、前記共有メモリに格納された受信データを読み出す受信データ読み出し手段を備えたことを特徴とするデータ伝送システム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、データ伝送方法及びデータ伝送システム並びに通信装置に関するものである。
【０００２】
【発明の背景】
図１に示すように、複数の機器１がＬＡＮその他のネットワーク２に接続され、所定の機器１間でデータの送受を行うようなシステムの場合、各機器１は、１つのマスタと複数のスレーブのように、マスタによってシステム全体の通信がコントロールされるものもあれば、各機器が所定のタイミングで通信を行うものもある。
【０００３】
機器１の内部構造を見ると、図２に示すように、ネットワーク２に接続され、実際にデータの送受を行う通信機器５と、その機器１の本来の動作を行うためのコントローラ６とを備えている。そして、コントローラ６は通信機器５を介して自己宛てのデータを取得する。また、コントローラ６が、ネットワーク２を介して他の機器１にデータを送信する場合には、一旦通信機器５にデータを渡し、通信機器５が所定のデータ変換を行った後、目的とする送信先に向けてデータを送信するようになっている。
【０００４】
ここで、機器１として代表されるのは、ファクトリオートメーションで利用されている「プログラマブルコントローラ（ＰＬＣ）」がある。このＰＬＣは、ＣＰＵユニット（コントローラ６に相当），Ｉ／Ｏユニット，高機能ユニットなどがバス接続されている。さらに、いわゆるリモートＩ／Ｏを実現する場合には、通信ユニット（通信機器５に相当）を用い、ＣＰＵユニットに対してバス接続する。そして通信ユニットにつながれた通信回線ケーブルには、スイッチやセンサ，通信装置（通信スレーブ装置，センサターミナルやリレーターミナル，他のＰＬＣに備えられた通信ユニット）などが接続される。そして、このＰＬＣは、Ｉ／Ｏユニットに接続されたセンサやスイッチからの入力信号或いは通信ユニットを介して取得した入力信号を入力し、その入力信号に基づいて演算処理（ラダープログラム実行処理）を実行し、実行結果に基づいてＩ／Ｏユニットに接続されたモータやアクチュエータへ直接、または通信ユニットを介して出力信号を出す。つまり、信号の入出力はＩ／Ｏユニットまたは通信マスタユニットを介して、いわゆるＩ／Ｏ接点点数（Ｉ／Ｏチャンネル数）ごとに独立した信号で行われる。
【０００５】
また、ＰＬＣのＣＰＵユニットのシーケンス制御は、「ＩＮリフレッシュ→演算処理→ＯＵＴリフレッシュ→周辺処理」をサイクリックに繰返し実行をする。一方で通信ユニットは、通信回線に接続された他の通信装置との間で所定時間ごとにデータ通信をする。係るシーケンス制御の１サイクルの時間とデータ通信の１サイクルの時間は、異なり、非同期で動作するものがある。
【０００６】
そこで、このＣＰＵユニット（コントローラ６）と通信ユニット（通信機器５）間のインタフェース部としてＤｕａｌ−Ｐｏｒｔ  ＲＡＭや、競合制御する仕組みを持ったＳＲＡＭなどの共有メモリ７を用意し、コントローラ６と通信機器５の一方が共有メモリ７にデータを書き込み、他方がその書き込んだデータを読み出すようになる。なお、上記のリモートＩ／Ｏを実現するときにおけるＣＰＵユニットと通信ユニット間でのデータ授受の場合も、同様となる。
【０００７】
ところで、従来の共有メモリ７は、データ転送のためのメモリ領域を１つしか持っていなかったため、高速処理ができないという問題があった。すなわち、コントローラ６と通信機器５の一方が共有メモリ７にデータを書き込んでいるときは、他方はデータの読み出しができず、係るデータの書き込み終了後にデータの読み出しが行われる。同様に、データが読み出されている最中には、新たなデータを書き込むことができない。その結果、必ずどちらかを待たせる方式となり、一方の処理が終わるまで、他方は、待ち時間が生じてしまう。
【０００８】
さらに、一定の通信サイクル時間を保証するような通信機器においては、通信回線から、連続的にデータが送受信されるため、上記のようにインタフェース部（共有メモリ７）で待たされると通信データをリアルタイムに交換できなくなる。そのため、内部に別バッファ（ローカルメモリ）を持ち、受信したデータを一時的に格納し、次の通信処理を実行し、インタフェース部のアクセスが許可された時にデータ交換するなどの対策が必要となる。
【０００９】
係る構成をとると、機器内部に余分なメモリ（ローカルメモリ）を必要とするとともに、コントローラと通信の処理速度が異なる場合に、高速に動作しているシステム側に待ち時間の影響を与えるという欠点になる。しかも、一旦ローカルメモリにデータを保存する処理と、そのローカルメモリから保存したデータを読み出すとともに、共有メモリに格納する処理が必要となり、処理手順が煩雑となり、高速なデータ交換が阻害される。
【００１０】
係る問題を解決するため、本発明者は、共有メモリ７に送信データ用，受信データ用にそれぞれ３つずつ用意し、データの読み書きのルールを以下のようにすることにより、相手の動作状態に関係なく自己の都合でデータの読み出しや書き込みが行えるようにしたシステムを発明した。簡単にそのルールを説明すると、最新のデータが書き込まれたエリアを特定するための情報Ｘと、読み出し側が読み出し対象としているエリアを特定する情報Ｙを保有する。データ書き込み側は、読み出し対象でなく（情報Ｙから知得）、かつ、最新のデータが格納されていないデータ記憶エリアに対して新たなデータを書き込む。データの読み出し側は、情報Ｘから知得した最新のデータが書き込まれたデータ記憶エリアに格納されたデータを読み出す。データ書き込み対象のエリア並びにデータ読み出し対象のエリアはそれぞれ相手側がアクセスしないので、相手を待たすことなく所定のデータ処理が行える。
【００１１】
このように、データの記憶エリアを複数設けたことにより、リアルタイムでのデータの読み／書きを行うことができるものの、たとえば、受信したデータの一部にエラーが生じた場合に、以下に示す問題があった。
【００１２】
通信機器５からコントローラ６にデータを渡す場合について説明する。説明を簡単にするために、図３に示すように、共有メモリ７に２つのエリア７ａ，７ｂを持ち、通信機器５は、第１エリア７ａと第２エリア７ｂに対して交互にでデータを書き込み、コントローラ６はその書き込みに伴い第１，第２エリア７ａ，７ｂから交互にデータを読み出し、自己が管理するメモリ６ａに格納する場合を想定する。そして、通信機器５は、１回の通信サイクルでＡ〜Ｄの４つのデータを受信するとともにいずれかのエリアに書き込むようにする。
【００１３】
上記した前提において、各通信サイクルで図４に示すようなデータを受信したとする。すなわち、１回目と２回目の通信サイクルでは、いずれも正常なデータを受信し、３回目の通信サイクルでは、Ｂ，Ｄの２つのデータが異常であり、４回目の通信サイクルではＢのデータが異常であったとする。
【００１４】
そして、通信機器５は、１回目と３回目の通信サイクルで取得したデータを第１エリア７ａに書き込みをし、２回目と４回目の通信サイクルで取得したデータを第２エリア７ｂに書き込みをする。各データの書き込みは上書きをすることにより、前のデータを更新する。このとき、一部のデータに異常があった場合には、正常なデータのみを書き込むように動作する。従って、異常データがあった場合には、それ以前の通信サイクルで正常に取得したデータが残ることになる。
【００１５】
その結果、第１エリア７ａと第２エリア７ｂに格納されたデータは、図５に示すようになる。すなわち、１回目の通信サイクルでは第１エリア７ａにデータＡ〜Ｄの正常な値が記憶される。第２エリア７ｂは何もデータが記憶されていない。
【００１６】
次に、２回目の通信サイクルで受信した正常なデータＡ〜Ｄは、第２エリア７ｂに書き込まれる。この時、第１エリア７ａに対しては書き込み処理がされないので、前回の１回目の通信サイクルで書き込まれたデータが保持される。
【００１７】
次に３回目の通信サイクルで受信したデータは、Ａ，Ｃのみが正常であったため、第１エリア７ａのうち、Ａ，Ｃについてのデータは更新されるが、データＢ，Ｄを格納する領域については書き込まれないので、１回目の通信サイクルの際に格納されたデータがそのまま保持される。
【００１８】
同様に、４回目の通信サイクルで受信したデータは、Ｂのみ異常であったため、受信したＡ，Ｃ，Ｄのデータが第２エリア７ｂの所定領域に格納される。そして、データＢを格納する領域については書き込まれないので、２回目の通信サイクルの際に格納されたデータがそのまま保持される。
【００１９】
上記したように第１，第２エリア７ａ，７ｂに対してデータの書き込みが行われた場合、コントローラ６は、第１，第２エリア７ａ，７ｂから交互にデータを読み出して、自己のメモリ６ａに格納するので、メモリ６ａに格納されるデータの推移は、図６に示すようになる。すなわち、コントローラ６は、通信機器５がデータを書き込んだあとで、そのデータを読み出すが、その読み出しの際には通信機器５は読み出しエリアに対して書き込み処理をしていない必要がある。つまり、通信機器５があるエリアに書き込んでいる際に、書き込みをしていないエリアからコントローラ６がデータを読み出す。これにより１サイクルずつ遅れて読み出しが行われる。
【００２０】
具体的には、２回目の通信サイクルでの受信データを通信機器５が第２エリア７ｂに書き込んでいる際に、コントローラ６は第１エリア７ａからデータを読み出し、Ａ〜Ｄの各データをメモリ６ａ内の各記憶エリアに格納する。次に、３回目の通信サイクルの際に、第２エリア７ｂからデータを読み出し、メモリ６ａに格納する。これにより、「Ａ，Ｂ，Ｃ，Ｄ」の各データは「０，１，１，０」に更新される。
【００２１】
ところで、４回目の通信サイクルの時には、コントローラ６は第１エリア７ａに格納されたデータを読み出すことになる。このとき読み出すデータは、３回目の通信サイクルの際に通信機器５が書き込んだデータであるが、Ｂ，Ｄについてのデータは異常であったために更新されず、１回目の通信サイクルの際に書き込まれたデータとなっている。
【００２２】
同様に、５回目の通信サイクルの時には、コントローラ６は第２エリア７ｂに格納されたデータを読み出すことになる。このとき読み出すデータは、４回目の通信サイクルの際に通信機器５が書き込んだデータであるが、Ｂについてのデータは異常であったために更新されず、２回目の通信サイクルの際に書き込まれたデータとなっている。
【００２３】
従って、Ａ，Ｄのデータについては、常に最新のデータに更新されている。しかし、たとえばＤのデータを見ると、まず、通信機器５が１回目に受信したデータ「１」を読み込み、次に通信機器５が２回目に受信したデータ「０」を読み込んでいる。ここまでは最新のデータの更新がされている。しかし、その次に第１エリアから読み込んだデータは、通信機器５が１回目に受信したデータ「１」であり、前回読み込んだデータよりも古いデータとなっている。また、その次に読み込んだデータは、通信機器５が４回目に受信したデータ「１」となっている。このように、時系列で過去のデータに一旦戻ることになり、このデータに基づいて各種制御を行おうとすると、制御対象の動作も不安定になるおそれがあり好ましくなる。
【００２４】
同様のことは、Ｂのデータにおいても発生している。つまり、通信機器５が１回目に受信したデータ「０」→通信機器５が２回目に受信したデータ「１」→通信機器５が１回目に受信したデータ「０」→通信機器５が２回目に受信したデータ「１」というように時間の経過と異なる順序でデータが更新される。
【００２５】
この発明は、受信データを伝送するに際し送受する場合に、複数の一時記憶エリアを用い、その複数の記憶エリアの任意の記憶エリアに受信データを書き込み、その書き込み終了後に最新の受信データが書き込まれた記憶エリアを一括して読み込むに際し、時系列で古いデータを読み込むことがないようにしたデータ伝送方法及びデータ伝送システム並びに通信装置を提供することを目的とする。
【００２６】
【課題を解決するための手段】
この発明によるデータ伝送方法は、通信手段が受信した受信データを、複数の一時記憶エリアのいずれかに書き込み、前記一時記憶エリアに対して格納された前記受信データを、時系列に沿って順次読み出して単一のメモリに格納するデータ伝送方法であって、前記通信手段側で受信データの一部に異常があったか否かを判断し、異常があった場合には、前回格納した一時記憶エリアから、前記異常のあったデータについての正常受信データを読み出し、その読み出した正常受信データを今回受信したデータとして、正常に受信した受信データとともに前記一時記憶エリアに格納するようにしたものである。
【００２７】
この方法を実施するのに適した通信装置としては、たとえば、受信データを取得する手段と、その取得した受信データを複数の一時記憶エリアのいずれかに対して順次書き込む受信データ書き込み手段とを備え、その受信データ書き込み手段は、前記受信データの一部に異常があった場合に、前回格納した一時記憶エリアから、前記異常のあったデータについての正常受信データを読み出し、その読み出した正常受信データを今回受信したデータとして、正常に受信した受信データとともに前記一時記憶エリアに格納する機能を備えて構成することである。ここで、「取得する手段」は、実施の形態では「通信チップ１１」に対応する。また、受信データ書き込み手段は、実施の形態ではＩＮデータ書き込み部により実現される。
【００２８】
「読み出した正常受信データを今回正常に受信した受信データとともに格納する」とは、物理的に同時刻に格納するものに限らない。つまり、受信データの一部に受信異常があった場合に、その異常があったデータは書き込まずに、正常に受信した受信データのみを格納するのではなく、受信異常があったデータは代替のデータを格納することを意味する。一例を示すと、１つの通信サイクル中に複数回データを受信するような場合、その通信サイクル中に受信すべきすべてのデータが上記で言う受信データの全体となり、複数回にわたって受信した個々のデータが、それぞれ一部のデータに対応する。１回の受信データの一部に異常があるようなものの場合、１回の受信データ全体を異常なデータと判断してもよいし、データ構造上可能であれば、異常な部分に対して過去に格納した正常なデータに置き換えるようにしてもよい。
【００２９】
また、前回格納した一時記憶エリアに記憶されている正常データであるが、必ずしも前回の受信時に取得したデータとは限らない。つまり、前回の受信時にも受信異常があった場合には、さらにその前に取得した正常データが代わりに書き込まれている可能性もある。
【００３０】
いずれにしても、上記した構成をとることにより、前回格納した一時記憶エリアには、同一対象についてのデータにとって正常受信した最新のデータが記憶されることになる。よって、前回格納した一時記憶エリアには、各データの正常な最新情報が格納されるので、係る一時記憶エリアに格納されたデータを、単一のメモリに順次書き込むようにすると、同一対処についてのデータに着目した場合、時系列で前後することはない。よって、読み出し側は、受信データが正常受信したか否かを判断する必要がなく、一括して読み出すことができるので、処理が高速化される。そして、読み出したデータに基づき処理をする場合にも、時系列で前後関係が正しいので、正常な制御等が行える。
【００３１】
この発明の一実施態様においては、通信手段からコントローラへのデータ伝送を、共有メモリに対する読み出しと書き込みを行うことで実行するデータ伝送方法において、前記複数の一時記憶エリアが、前記共有メモリにより構成され、前記単一のメモリは、前記コントローラに備えるようにすることができる。
【００３２】
この方法を実施するために適した通信装置としては、受信データを取得する手段と、その取得した受信データを複数の一時記憶エリアのいずれかに対して順次書き込む受信データ書き込み手段とを備え、その受信データ書き込み手段は、前記受信データの一部に異常があった場合に、前回格納した一時記憶エリアから、前記異常のあったデータについての正常受信データを読み出し、その読み出した正常受信データを今回受信したデータとして、正常に受信した受信データとともに前記一時記憶エリアに格納する機能を備えて構成することを前提とする。そして、係る前提の通信装置において、コントローラに対して共有メモリを介してデータ伝送を行う通信装置において、前記複数の一時記憶エリアが、前記共有メモリにより構成することである。
【００３３】
また、上記した伝送方法により実現されるデータ伝送システムの一例としては、通信手段と、コントローラと、それら通信手段とコントローラの間で伝送するデータを一時的に格納する共有メモリを備えたデータ伝送システムにおいて、前記共有メモリは、前記通信手段が取得した受信データを書き込むための複数の受信データ記憶エリアを備え、前記通信手段は、最新の受信データが格納されていない受信データ記憶エリアに対して受信データを書き込む処理を行う受信データ書き込み手段を備え、前記受信データ書き込み手段は、受信データの一部に異常があった場合に、前記最新の受信データが格納された受信データ記憶エリアから前記異常のあったデータについての正常受信データを読み出し、その読み出した正常受信データを今回受信したデータとして、正常に受信した受信データとともに前記書き込む処理を行う機能を持ち、前記コントローラは、最新の受信データが書き込まれた受信データ記憶エリアに格納された受信データを読み出す受信データ読み出し手段を備えることである。
【００３４】
上記した各発明によれば、コントローラは、共有メモリの複数の一時記憶エリアに対し、最新の受信データが格納された一時記憶エリアに記憶されたデータを一括して読み込むことになる。
【００３５】
また、別の実施態様としては、通信手段からコントローラへのデータ伝送を、共有メモリに対する読み出しと書き込みを行うことで実行するデータ伝送方法において、前記複数の一時記憶エリアが、前記通信手段が持つ内部メモリにより構成され、前記単一のメモリは、前記共有メモリとすることができる。
【００３６】
この方法を実施するために適した通信装置としては、上記したのと同様の前提を備えた通信装置において、前記複数の一時記憶エリアが、前記通信装置が持つ内部メモリにより構成され、最新の受信データが書き込まれた受信データ記憶エリアに格納された受信データを前記共有メモリに転送する転送手段を備えることである。
【００３７】
そして、上記した伝送方法により実現されるデータ伝送システムの一例としては、通信手段と、コントローラと、それら通信手段とコントローラの間で伝送するデータを一時的に格納する共有メモリを備えたデータ伝送システムにおいて、前記通信手段は、内部メモリに受信データを格納する複数の一時記憶エリアを持ち、最新の受信データが格納されていない前記一時記憶エリアに対して受信データを書き込む処理を行う受信データ書き込み手段と、最新の受信データが書き込まれた受信データ記憶エリアに格納された受信データを前記共有メモリに転送する転送手段を備え、前記受信データ書き込み手段は、受信データの一部に異常があった場合に、前記最新の受信データが格納された受信データ記憶エリアから前記異常のあったデータについての正常受信データを読み出し、その読み出した正常受信データを今回受信したデータとして、正常に受信した受信データとともに前記書き込む処理を行う機能を持ち、前記コントローラは、前記共有メモリに格納された受信データを読み出す受信データ読み出し手段を備えて構成することである。
【００３８】
上記した各発明によれば、コントローラが読み出し対象となる共有メモリ内の受信データが書き込まれたエリアは１つであるので、コントローラは、所定のタイミングで共有メモリに格納されたデータを一括して読み出せばよい。なお、共有メモリの記憶エリアが１とすると、通信手段（通信装置）側とコントローラ側では、排他的にアクセスするような制御を行う必要がある。つまり、通信手段側がデータを書き込んでいる最中はコントローラ側ではデータの読み出しができず、コントローラ側でデータの読み出しが行われているときは通信手段はデータの書き込みができない。よって、待ち時間が多くなるので、リアルタイムでの迅速なデータ伝送を図るためには、共有メモリ内に複数の一時記憶エリアを設けることである。
【００３９】
なお、共有メモリは、通信装置に実装してもよいし、コントローラ側に実装してもよい。但し、通信装置側に実装したほうが、データの書き込み側である通信装置にとっては制御が容易になるので好ましい。
【００４０】
この発明の以上説明した構成要素は可能な限り組み合わせることができる。この発明による通信装置並びにコントローラを構成する各手段を専用のハードウエア回路によって実現することができるし、プログラムされたコンピュータによって実現することもできる。この発明によるデータ伝送方法は、コンピュータを動作させるソフトウエア（プログラム）によっても、専用のハードウエア回路によっても実現できる。
【００４１】
【発明の実施の形態】
図７は、本発明が適用される機器１を含むネットワークシステムを示している。すなわち、マスタとしての機器１とスレーブとしての複数の機器１′がＬＡＮその他のネットワーク（通信回線）２に接続される。このネットワークシステムでは、マスタである機器１によりシステム全体の通信がコントロールされる。そして、１回の通信サイクルで、４つの機器１′（Ａ，Ｂ，Ｃ，Ｄ）から順にデータを取得するようになっている。
【００４２】
機器１の内部構造を見ると、図８に示すように、ネットワーク２に接続され、実際にデータの送受を行う通信機器１０と、その機器１の本来の動作を行うためのコントローラ２０とを備えている。そして、コントローラ２０は通信機器１０を介して自己宛てのデータを取得する。また、コントローラ２０が、ネットワーク２を介して他の機器１にデータを送信する場合には、一旦通信機器１０にデータを渡し、通信機器１０が所定のデータ変換を行った後、目的とする送信先に向けてデータを送信するようになっている。
【００４３】
より具体的には、通信機器１０は、ネットワーク２に接続される通信チップ１１と、所定の動作を行うＭＰＵ１２とローカルメモリ１３とを備えている。通信チップ１１は、ネットワーク２を流れる自己宛ての受信データを取得し、必要なデータ部分を抽出し、ＭＰＵ１２に渡したり、ＭＰＵ１２から受け取った送信データに対して、送信先や送信元などの情報をヘッダに付加するとともに、所定のプロトコル変換を行い、ネットワーク２に向けて送信する機能を有する。この通信チップ１１自体は従来と同様であるので、その詳細な説明を省略する。
【００４４】
ローカルメモリ１３には、ＭＰＵ１２が動作するためのプログラムが格納されており、そのプログラムに従ってＭＰＵ１２は、共有メモリ３０に対してデータの読み出し（リード）／書き込み（ライト）を行ったり、通信チップ１１との間でデータの送受を行うようになっている。
【００４５】
つまり、共有メモリ３０に格納されたデータ（コントローラ２０が書き込んだデータ）を所定のタイミングで読み出すとともに、通信チップ１１に渡す機能と、ネットワーク２を介して通信チップ１１が取得した自己宛てのデータを受け取るとともに、所定のタイミングで共有メモリ３０に書き込む機能を持つ。すなわち、通常であれば、通信チップ１１から受け取ったデータは一旦ローカルメモリ１３に格納するようにしていたが、本形態では、直接共有メモリ３０に書き込むようにしている。これにより、通信機器１０内でのデータ転送回数が削減され、高速処理が行える。また、ローカルメモリ１３にとっても、従来は受信したデータを一時的に保存するためのメモリ領域を確保していたが、係るデータ保存のためのメモリ領域がなくなる。もちろん、従来と同様に一旦ローカルメモリ１３に格納するようにしても良い。
【００４６】
一方、コントローラ２０は、ＭＰＵ２１とローカルメモリ２２を備えている。ＭＰＵ２１は、機器１自体の本来の動作を行う機能と、共有メモリ３０に対してデータの読み出し（リード）／書き込み（ライト）を行う機能を持っている。ローカルメモリ２２は、ＭＰＵ２１が動作するためのプログラムが格納されていたり、ＭＰＵ２１の動作のためのワークメモリとして機能する。なお、共有メモリ３０に対するデータの読み書き以外のＭＰＵ２１の処理機能や、ローカルメモリ２２は従来と同様であるので、その詳細な説明を省略する。
【００４７】
共有メモリ３０は、図９に示すように、通信機器１０が取得した受信データを格納する領域として２つのＩＮデータエリア３１ａ，３１ｂを用意する。さらに、Ｉ／Ｏセマフォ領域として、ＩＮカレント指定エリア３２を有している。通信機器１０のＭＰＵ１２は、後述するアルゴリズムに従って２つのＩＮデータエリア３１ａ，３１ｂに対し、交互に受信したデータを書き込む。そして、ＩＮカレント指定エリア３２は、書き込みが完了した最新のＩＮデータエリア３１ａ，３１ｂを特定する情報を格納する。これにより、コントローラ２０側では、このＩＮカレント指定エリア３２を見ることにより、最新のＩ／Ｏデータが格納されているＩＮデータエリアを知ることができる。
【００４８】
同様に、コントローラ２０から通信機器１０に渡すデータを一時的に保有するＯＵＴデータエリア３５ａ，３５ｂも２つ確保する。そして、書き込みが完了した最新のＯＵＴデータエリアを特定するＯＵＴカレント指定エリア３６を備えている。コントローラ２０のＭＰＵ２１は、２つのＯＵＴデータエリアに対して交互に送信データを書き込む。そして、ＯＵＴカレント指定エリア３６は、書き込みが完了した最新のＯＵＴデータエリア３５ａ，３５ｂを特定する情報を格納する。これにより、通信機器１０側では、このＯＵＴカレント指定エリア３６を見ることにより、最新のＩ／Ｏデータが格納されているＯＵＴデータエリアを確認し、最新の送信データを読み出す。
【００４９】
次に、通信機器１０のＭＰＵ１２について詳述する。本発明の要部となる共有メモリ３０に対するデータの読み書き制御を行うための処理部としては、図１０に示すように、共有メモリ３０のＩＮデータエリア３１ａ，３１ｂに対してデータ（受信データ）を格納するＩＮデータ書き込み部１２ａと、共有メモリ３０のＯＵＴデータエリア３５ａ，３５ｂに格納されたデータ（送信データ）を読み出すとともに、その読み出した送信データを通信チップ１１に送るＯＵＴデータ読み出し部１２ｂを有する。
【００５０】
同様に、コントローラ２０におけるＭＰＵ２１は、図１１に示すように、本発明の要部となる共有メモリ３０に対するデータの読み書き制御を行うための処理部としては、共有メモリ３０のＩＮデータエリア３１ａ，３１ｂに格納されたデータ（受信データ）を読み出すとともに、ローカルメモリ２２に格納するＩＮデータ読み出し部２１ａと、共有メモリ３０のＯＵＴデータエリア３５ａ，３５ｂに対してデータ（送信データ）を格納するＯＵＴデータ書き込み部２１ｂとを有する。もちろん、ＭＰＵ２１には、コントローラ２０本来の機能を実行する処理部２１ｄも備えている。
【００５１】
次に、上記したＭＰＵの各処理部の機能を説明する。本発明では、異常データの受信があった場合でも時系列で正しいデータの転送が行えるようにするものであるので、受信データの転送を主に説明する。まず、前提として、図１２に示すように、１回の通信サイクルで機器Ａ，機器Ｂ，機器Ｃ，機器Ｄからデータを順に取得し、４つの機器についての受信データを共有メモリの１つのＩＮデータエリアに格納するようにしている。そして、次の通信サイクルでは、同様にして取得した４つの機器からの受信データを別のＩＮデータエリアに格納するようにしている。このように、４つの機器からの受信データを、ＩＮデータ第１，第２エリア３１ａ，３１ｂに対して交互に格納するようなっている。
【００５２】
具体例をあげて説明すると、ＰＬＣは、Ｉ／Ｏのチャンネル接点のひとつひとつが、１つのデータとなり、例えば図１２に示す場合、Ａ〜Ｄが４チャンネル分のデータとなる。そして、機器１がＰＬＣとすると、機器１′がスイッチ，センサ（或いはそれらをネットワークに接続するリモートＩ／Ｏターミナル）となり、係るスイッチ，センサの一系統ごとの接点４つ分がＡ〜Ｄそれぞれのデータとなる。そして、この例では、この４チャンネル分のデータを（あるタイミングで）まとめて機器１内の１つのメモリエリアに格納する。もちろん、データの送受は、上記したように１チャンネル分が１データのものに限らないのは言うまでもない。
【００５３】
そして、係る処理を行う通信機器１０のＩＮデータ書き込み部１２ａの機能は、図１３〜図１６に示すフローチャートのようになっている。すなわち、まず、電源が投入されたならば、初期設定として、ＩＮカレント指定エリア３２に「不定」を特定するコード情報（例えば「００」）を格納するとともに、今回受信データを書き込むカレントエリアとして、ＩＮデータ第１エリア３１ａを設定する（ＳＴ１）。そして、ＩＮデータ第１，第２エリア３１ａ，３１ｂに「００００」を格納する（ＳＴ２）。本形態では、各機器１′からの受信データは「１」／「０」であり、１回のサイクルで送られてくる受信データは、４つの機器１′と既知である。そこで、各ＩＮデータエリアは、それぞれ４ビット確保され、先頭から順に「Ａ，Ｂ，Ｃ，Ｄ」の受信データを格納する領域とする。つまり、上記した「００００」を格納するとは、全ての機器１′からの受信データが「０」であることを意味する。
【００５４】
次に、機器Ａからのデータを受信したならば、正常受信か異常受信かを判断する（ＳＴ３）。ここで、異常とは、回線異常の場合もあれば、特定の機器がダウンしたりして、その特定の機器からの正常なデータが受信できない状態を示す。そして、そのままでは、データの更新できず、前回そのＩＮデータエリアに格納した時のデータが残ってしまうことになる。
【００５５】
そして、正常受信の場合には、取得した機器Ａからの受信データをカレントエリアに設定されたＩＮデータ第１エリア３１ａの所定領域（先頭のビット）に書き込む（ＳＴ４）。一方、機器Ａから受信データが異常受信の場合には、ＩＮデータ第２エリア３１ｂに格納された機器Ａのデータを、ＩＮデータ第１エリア３１ａの機器Ａの記憶領域にコピーする（ＳＴ５）。
【００５６】
このように、正常受信か否かを判断し、正常であれば受信データを該当する領域に書き込み、異常受信の場合には、ＩＮデータ第２エリア３１ｂに格納された対応する機器についてのデータをコピーする処理を、機器Ｂ（ＳＴ６〜ＳＴ８），機器Ｃ（ＳＴ９〜ＳＴ１１），機器Ｄ（ＳＴ１２〜ＳＴ１４）について順番に実行する。そして、１回のサイクルの終わりである機器Ｄについての処理が終了したならば、ＩＮカレント指定エリア３２に、受信データの書き込みが完了したＩＮデータ第１エリアを特定するコード情報（例えば「０１」）を格納するとともに、次の通信サイクルでの受信データを書き込むカレントエリアをＩＮデータ第２エリア３１ｂに変更する（ＳＴ１５）。
【００５７】
そして、次の通信サイクルが開始したならば、機器Ａから順に受信データを取得する。そこで、まず、機器Ａからの受信が正常であったか否かを判断し（ＳＴ１６）、正常の場合には、現在のカレントエリアであるＩＮデータ第２エリア３１ｂにおける機器Ａのための領域に受信データを書き込む（ＳＴ１７）。また、異常データの場合には、ＩＮデータ第１エリア３１ａに格納された機器ＡについてのデータをＩＮデータ第２エリア３１ｂの所定領域にコピーする（ＳＴ１８）。これにより、異常データがあった場合には、ＩＮデータ第２エリア３１ｂに格納されたデータがそのまま残るのではなく、前回の通信サイクルで書き込まれたＩＮデータ第１エリア３１ａのデータをコピーすることにより、正常なデータの中で最も最新のデータが格納される。よって、機器Ａについての受信データで、時系列で過去に溯った古いデータがコントローラ２０側に送られるのが阻止される。
【００５８】
このように、正常受信か否かを判断し、正常であれば受信データを該当する領域に書き込み、異常受信の場合には、ＩＮデータ第２エリア３１ｂに格納された対応する機器についてのデータをコピーする処理を、機器Ｂ（ＳＴ１９〜ＳＴ２１），機器Ｃ（ＳＴ２２〜ＳＴ２４），機器Ｄ（ＳＴ２５〜ＳＴ２７）について順番に実行する。そして、１回のサイクルの終わりである機器Ｄについての処理が終了したならば、ＩＮカレント指定エリア３２に、受信データの書き込みが完了したならば、ＩＮデータ第２エリア３１ｂを特定するコード情報（例えば「１０」）を格納するとともに、次の通信サイクルでの受信データを書き込むカレントエリアをＩＮデータ第１エリア３１ａに変更する（ＳＴ２８）。
【００５９】
以後、上記したステップ３からステップ２８までを繰り返し実行することにより、ＩＮデータ第１エリア３１ａとＩＮデータ第２エリア３１ｂに、通信サイクルごとに交互に受信データが書き込まれる。そして、異常があった場合には、前回通信サイクル時の処理で書き込んだデータがコピーされるので、ＩＮカレント指定エリア３２に格納された最新に書き込みされたエリアには、各機器にとって最新の正常データが格納される。
【００６０】
一方、コントローラ２０のＩＮデータ読み出し部２１ａでは、図１７に示すように、電源ＯＮとともに、読み出し対象のエリアを特定する（ＳＴ３１）。具体的には、ＩＮカレント指定エリア３２をアクセスし、そこに格納されたコードで特定されるＩＮデータエリアに決定する。そして、その決定したＩＮデータエリアに格納された受信データを一括してコピーしてローカルメモリ２２に格納し、読み出し処理を行う（ＳＴ３２）。さらに、受信ステータスを一緒にコピーする（ＳＴ３３）。
【００６１】
このようにすると、ＩＮカレント指定エリアに格納されたデータエリアは、各機器についての最新のデータが格納されていることが保証されているので、データ更新がされても、ローカルメモリ２２には、常に各機器にとって最新のデータが格納されることになる。
【００６２】
なお、送信データは、コントローラ２０のＯＵＴデータ書き込み部２１ｂが、２つのＯＵＴデータエリアの何れかに送信データを書き込み、書き込みが完了すると、その書き込んだエリアを特定するための情報をＯＵＴカレント指定エリアに格納する。
【００６３】
そして、通信機器１０のＯＵＴデータ読み込み部１２ｂでは、電源ＯＮとともに、ＯＵＴカレント指定エリア３６をアクセスし、そこに格納されたコードで特定されるＯＵＴデータエリアから送信データを一括してコピーし、通信チップ１１に渡すことになる。なお、送信データにおいても一部データ異常が想定される場合には、上記した受信データにおける各処理を実行すると良い。
【００６４】
なお、実施の形態では、データの読み出しは、カレント指定エリアをアクセスし、最新のデータが格納された領域を調べ、そこから読み出すようにしたが、本発明はこれに限ることはなく、例えば、データを書き込んだ側が、書き込み完了通知を出すようにし、データ読み出し側（コントローラ２０のＩＮデータ読み出し部２１ａ）では、係る完了通知を受けてからデータの一括受信をするようにしても良い（図１８参照）。読み出し可能エリアの初期エリアを確認する（ＳＴ４１）。本形態では、最初にＩＮデータ第１エリア３１ａに受信データを格納するようにしているので、初期エリアはＩＮデータ第１エリア３１ａとなる。
【００６５】
この状態で通信機器１０側から送られてくる受信完了通知の割り込みを待つ（ＳＴ４２）。受信完了通知の割り込みがあったならば、読み出し可能エリアに対してアクセスし、そこに格納された受信データを一括コピーで読み出す（ＳＴ４３）。さらに、通信装置１０は、ＩＮデータエリアとは別のメモリエリアに、受信ステータス、つまり、正常受信か異常受信かを判別する情報を格納しておくので、かかる受信ステータスも一括コピーする（ＳＴ４４）。
【００６６】
すなわち、仮に受信異常があったとしても、その機器にとっての正常データの中での最新データであることが保障され、時間的に前後したデータ、つまり古いデータが後にくることがなくなる。その結果、コントローラ２０側で受信データを取得する際に、受信ステータスを利用して個々のデータについて有効／無効の判断を行う必要がなく、本形態のように一括コピーができる。その結果、読み込みに要する処理時間が短時間ですむ。さらに、受信ステータスもあわせて取得するようにしたので、コントローラ２０側では、本来の通信タイミングで取得した受信データか否かを知ることができる。
【００６７】
このようにデータの一括コピーを行ったならば、読み出し可能エリアの切り替えを行い（ＳＴ４５）、ステップ４２に戻り次の受信完了割り込みを待つ。なお、本形態ではエリアは２つであるので、現在受信データを読み出したエリアでない方を、読み出し可能エリアに設定する。以後、上記した処理を繰り返し実行することにより、ＩＮデータ第１エリア３１ａとＩＮデータ第２エリア３１ｂから交互に受信データを読み出すことができる。
【００６８】
上記した実施の形態の効果を具体例をあげつつ説明する。１回目から４回目までの通信サイクルにおける受信データが図４に示すようになっていたとすると、ＩＮデータ第１エリア３１ａとＩＮデータ第２エリア３１ｂに格納されるデータの推移は、図１９に示すようになる。すなわち、３回目の通信サイクルでは第１エリアに格納するとともにＢ，Ｄの２つのデータが異常であったため、それぞれ第２エリアの２回目の通信サイクルで格納されたデータをコピーする。よって、機器Ｂについてのデータは１となり、機器Ｄについてのデータは０となる。同様に、４回目の通信サイクルでは受信異常のあった機器Ｂからのデータは、３回目の通信サイクルで第１エリアに格納したデータをコピーし、「１」が格納される。
【００６９】
そして、コントローラ２０が読み込み、ローカルメモリ２２に格納されるデータの推移は、第１エリアと第２エリアを交互に読み出すので、図２０に示すようになる。図から明らかなように、過去の通信サイクルで受信したデータが読み出されることがなく、機器単位で時系列に正しいデータが格納されることが確認できる。
【００７０】
上記した実施の形態では、共有メモリ３０に複数の記憶エリアを設けた（２重化した）ものに適用した例を説明したが、本発明はこれに限ることはなく、例えば、通信機器１０が持つローカルメモリ１３内に複数の記憶エリアを設定し、共有メモリ３０は従来どおりＩＮ／ＯＵＴに対しそれぞれ１つずつの記憶エリアを設けるようにしたものにも適用できる。
【００７１】
図２１は、係る実施の形態の要部を示している。この図では、受信データを取得し、共有メモリ３０内の単一の記憶エリアに格納するために必要な機能ブロックを示している。もちろん、この通信装置１０にも、共有メモリ３０に格納された送信データを読み出すとともに、送信する機能を備えている。
【００７２】
同図に示すように、本発明との関係で言えば、通信装置１０は、受信データを取得する手段である通信チップ１１と、ＭＰＵ１２と、内部メモリたるローカルメモリ１３を備え、このローカルメモリ１３内に、第１記憶エリア１３ａと第２記憶エリア１３ｂを設けている。そして、ＭＰＵ１２には、通信チップ１１から送られてきた受信データを、第１，第２記憶エリア１３ａ，１３ｂの何れかに書き込むＩＮデータ書き込み部１２ａ′と、最新の受信データが書き込まれた記憶エリアに格納された受信データを一括コピーにより読み出して共有メモリ３０に転送する転送部１２ｃとを備えている。
【００７３】
そして、ＩＮデータ書き込み部１２ａ′の機能は、第１の実施の形態におけるＩＮデータ書き込み部１２ａと基本的に同じである。すなわち、データの格納先が、共有メモリ３０かローカルメモリ１３かの相違があるものの、何れのメモリにも２つの記憶エリアがあり、格納先を交互に入れ替える。そして、受信異常があった場合には、前回格納した記憶エリアから正常な受信データを読み出して、今回格納する記憶エリアに正常なデータとして書き込む。従って、具体的な処理機能としては、図１３から図１６に示すフローチャートと同様である。これにより、書き込みが完了した記憶エリアには、各機器にとっての正常受信された中で最新のデータが記憶保持される。
【００７４】
また、転送部１２ｃの機能は、第１の実施の形態におけるコントローラ２０のＩＮデータ読み出し部２１ａの機能と同様である。つまり、ローカルメモリ１３の第１，第２記憶エリア１３ａ，１３ｂから交互にデータを取得し、共有メモリ３０に上書き更新する。そして、転送部１２ｃは、ＩＮデータ書き込み部１２ａ′と同一のＭＰＵ１２内に実現されているので、どのタイミングで受信データの書き込みが完了したかがわかるので、書き込み完了後、その書き込んだエリアからデータを読み出し、共有メモリに書き込むことになる。処理機能としては、例えば、図１８に示すフローチャートと同様にすることができ、「コピー」処理が、所定の記憶エリアから共有メモリ３０への一括データ転送を実行することになる。
【００７５】
また、上記した実施の形態では、共有メモリ３０や、ローカルメモリ１３に２つの記憶エリアを持つ２重化について説明したが、転送のためのエリアを３つ以上持つものにも適用できる。特に、上記した第１の実施の形態のように共有メモリ３０に２つの記憶エリアを設けた場合、共有データへの書き込みと、読み出しのタイミングが合うと、通信装置１０がＩＮデータ第１エリア３１ａへ書き込んでいる時には、コントローラ２０はＩＮデータ第２エリア３１ｂから読み出し、通信装置１０がＩＮデータ第２エリア３１ｂへ書き込んでいる時には、コントローラ２０はＩＮデータ第１エリア３１ａから読み出すようにすると問題がないが、通信装置１０とコントローラ２０が非同期とすると、同一のエリアに対する読み出しと書き込みのタイミングが合ってしまうおそれがある。係る場合には、排他制御をすることになり、一方を待たすことになる。
【００７６】
係る待ち時間を解消するために、例えば、共有メモリ３０に、図２２に示すように、通信機器１０が取得した受信データを格納する領域として３つのＩＮデータエリア３１ａ〜３１ｃを用意する。さらに、Ｉ／Ｏセマフォ領域として、ＩＮカレント指定エリア３２とＩＮリードロックエリア３３を設けるようにすることができる。
【００７７】
つまり、通信機器１０のＭＰＵ１２は、３つのＩＮデータエリア３１ａ〜３１ｃのいずれかに受信したデータを書き込む。そして、ＩＮカレント指定エリア３２は、書き込みが完了した最新のＩＮデータエリア３１ａ〜３１ｃ（Ａ〜Ｃ）を特定する情報を格納する。これにより、コントローラ２０側では、このＩＮカレント指定エリア３２を見ることにより、最新のＩ／Ｏデータが格納されているＩＮデータエリアを知ることができる。さらに、後述するように、ＩＮカレント指定エリア３２で指定されているエリアにはデータの書き込みは行われない。従って、コントローラ２０は、自己の都合の良いタイミングで、指定されたエリアに格納された受信データを読み出すことができる。
【００７８】
また、ＩＮリードロックエリア３３は、コントローラ２０側が現在受信データを読み出しているＩＮデータエリア（Ａ〜Ｃ）を特定する情報を格納する。これにより、通信機器１０側では、このＩＮリードロックエリア３３を見ることにより、コントローラ２０側が現在アクセス中のＩＮデータエリアを知ることができる。つまり、少なくともこのＩＮリードロックエリア３３で指定されたＩＮデータエリアについては、データ更新ができない領域となる。
【００７９】
なお、このＩ／Ｏセマフォ領域として、各エリアに登録する情報の具体例を示すと、エリアＡを特定する場合は“０１ｈ”，エリアＢを特定する場合は“０２ｈ”，エリアＣを特定する場合は“０４ｈ”を書き込み、特定しない（初期化する）場合は“００ｈ”を書き込むことになる。
【００８０】
このようにすると、取得した受信データの書き込み対象のＩＮデータエリア（占有エリア）は、まずＩＮリードロックエリア３３を読み出し、現在コントローラ２０がＩＮデータ（受信データ）を読み出し中のＩＮデータエリア（Ａ〜Ｃ）３１ａ〜３１ｃを認識する。そして、空いているＩＮデータエリアを検出し、占有エリアに決定することができる。具体的には、最新のＩＮデータが格納されているＩＮデータエリア、つまり、前回書き込んだエリアはわかっているので、係る最新のＩＮデータが書き込まれておらず、しかも、読み出し中でないＩＮデータエリアを特定する。なお、該当するＩＮデータエリアが複数存在する場合には、何れか１つのＩＮデータエリアを選択する。この選択の基準は、ランダムでも良いし、予め各ＩＮデータエリアに優先順位を付与しておき、優先順位の高いものを選択するなど各種の方法が採れる。この決定アルゴリズムによれば、書き込み対象のデータエリアは、コントローラが読み出しておらず、しかも、最新のデータが書き込まれてもいないので、通信機器１０側のタイミングで書き込んでも相手側に影響を与えない。これにより、通信機器１０とコントローラ２０は、互いに任意のタイミングでデータの読み書きをすることができる。
【００８１】
同様に、コントローラ２０から通信機器１０に渡すデータを一時的に保有するＯＵＴデータエリア３５ａ〜３５ｃも３つ確保する。そして、書き込みが完了した最新のＯＵＴデータエリア（Ａ〜Ｃ）を特定するＯＵＴカレント指定エリア３６と、通信機器１０側が現在送信データを読み出しているＯＵＴデータエリア（Ａ〜Ｃ）３５ａ〜３５ｃを特定する情報を格納するＯＵＴリードロックエリア３７を備えている。
【００８２】
これにより、コントローラ２０のＭＰＵ２１は、ＯＵＴリードロックエリア３７を見て格納可能なＯＵＴデータエリアを決定し、そこに送信データを登録した後、ＯＵＴカレント指定エリア３６に、今送信データを格納したエリアを特定する情報を記憶する。そして、通信機器１０では、ＯＵＴカレント指定エリア３６を見て、最新の送信データが格納されたＯＵＴデータエリアを確認し、最新の送信データを読み出す。
【００８３】
さらに、Ｉ／Ｏセマフォ領域のアクセス権を排他的に与えるためにアクセスフラグ３８を設定している。そして、通信機器１０側とコントローラ２０側のいずれからも、書き込み／読み出しが可能なものを用いる。つまり、ＩＮ／ＯＵＴカレント指定エリアやＩＮ／ＯＵＴリードロックエリアに対して、通信機器１０とコントローラ２０の両方から同時にアクセスできないようにするため、通信機器１０並びにコントローラ２０は、アクセス権を確保した後でデータの更新を行うようにしている。
【００８４】
そして、この３重化された記憶エリアを用いたシステムにおける通信機器１０のＩＮデータ書き込み部の機能は、図２３，図２４に示すフローチャートのようになる。
【００８５】
すなわち、電源が投入されたならば、カレント指定エリア３２に「不定」を特定するコード情報（例えば「００」）を格納するとともに、今回受信データを書き込むカレントエリア（占有エリア）を決定する（ＳＴ５１）。この決定は、上記したルールに従い、コントローラ２０が読み込み中でなく、最新の受信データが書き込まれていないエリアを決定する。そして、すべてのＩＮデータエリア３１ａ〜３１ｃに「００００」を格納する（ＳＴ５２）。本形態では、各機器１′からの受信データは「１」／「０」であり、１回のサイクルで送られてくる受信データは、４つの機器１′と既知である。そこで、各ＩＮデータエリアは、それぞれ４ビット確保され、先頭から順に「Ａ，Ｂ，Ｃ，Ｄ」の受信データを格納する領域とする。つまり、上記した「００００」を格納するとは、全ての機器１′からの受信データが「０」であることを意味する。
【００８６】
次に、機器Ａからのデータを受信したならば、正常受信か異常受信かを判断する（ＳＴ５３）。そして、正常受信の場合には、取得した機器Ａからの受信データをカレントエリアの所定領域（先頭のビット）に書き込む（ＳＴ５４）。一方、機器Ａから受信データが異常受信の場合には、前回データを書き込んだエリア、つまり、ＩＮカレント指定エリア３２に格納された情報により特定されるエリアに格納された機器Ａのデータを、カレントエリアの機器Ａの記憶領域にコピーする（ＳＴ５５）。
【００８７】
このように、正常受信か否かを判断し、正常であれば受信データをカレントエリアの該当する領域に書き込み、異常受信の場合には、前回格納したＩＮデータエリアに格納された対応する機器についてのデータをコピーする処理を、機器Ｂ（ＳＴ５６〜ＳＴ５８），機器Ｃ（ＳＴ５９〜ＳＴ６１），機器Ｄ（ＳＴ６２〜ＳＴ６４）について順番に実行する。そして、１回のサイクルの終わりである機器Ｄについての処理が終了したならば、ＩＮカレント指定エリア３２に、受信データの書き込みが完了したＩＮデータエリア（現在のカレントエリア）を特定するコード情報を格納する。さらに、次の通信サイクルの開始に先立ち受信データを書き込むカレントエリアを決定する（ＳＴ６５）。そして、ステップ５３に戻り、次の通信サイクルで受信した機器Ａからのデータを取得し、正常であればその受信データをカレントエリアに格納し、異常の場合には、前回格納した機器Ａについての正常なデータをカレントエリアの該当領域に格納する。以後、上記処理を繰り返すことにより、カレントエリアには、各機器にとっての正常受信データの最新値が記憶される。よって、ある機器についての受信データで、時系列で過去にさかのぼった古いデータがコントローラ２０側に送られるのが阻止される。
【００８８】
一方コントローラ２０のＩＮデータ読み出し部では、図１７に示すフローチャートを実行することにより、最新のデータを順次所定のタイミングで取得することができる。ここで、ステップ３１における読み出し対象エリア特定処理が、ＩＮカレント指定エリア３２に格納された情報により最新の受信データが記憶されたエリアを特定することである。
【００８９】
上記した実施の形態における通信機器１０と、コントローラ２０は、例えば、１つの装置に組み込まれていても良いし、別々に設けられた装置を組み合わせることにより構成するようにしても良い。そして、特に別々に設けた装置を用いる場合には、共有メモリ３０は、通信機器１０側とコントローラ２０側のいずれに設置しても良い。
【００９０】
一例を示すと、１つの装置としては、ＰＬＣや、図２５に示すように、制御系であるＰＬＣ４０と情報処理系である上位コンピュータ４２との間に配置された中継装置４３などがある。この中継装置は、ＰＬＣ４０と上位コンピュータ４２との間の情報の送受を行うもので、下位のＰＬＣ４０に対する通信を行う第１通信ユニット４３ａと、上位コンピュータ４２に対する通信を行う第２通信ユニット４３ｂと、各種の処理を行うＭＰＵ４３ｃを備えている。ＭＰＵ４３ｃの機能を種々のものにしたことにより、中継装置４３は情報を伝送するためのゲートウェイとして機能したり、上位コンピュータ４２の変わりに、情報を収集する情報収集装置として機能したりする。この場合において、例えば第１通信ユニット４３ａが通信機器となり、ＭＰＵ４３ｃがコントローラとなる。
【００９１】
一方別途形成したものとしては、例えば各機能毎にユニット化したものを組み合わせてＰＬＣを構築するタイプがあるが、係る場合における通信ユニット（通信機器１０）とＣＰＵユニット（コントローラ２０）がある。
【００９２】
さらにまた、別の利用態様としては、例えば図２６に示すように、パソコン４５に通信ボード４６を組み込んだ場合がある。すなわち、拡張ボードとしての通信ボード４６は、例えばパソコン４５の拡張バス４８に接続され、その拡張バス４８を介してパソコン本体のＭＰＵ４７に連携される。具体的なデータの送受は、拡張バス用マスタ４７ａと拡張バス用スレーブ４６ｃにより管理される。また、通信ボード４６は、ネットワーク（通信回線）２に接続可能となっている。
【００９３】
係る場合に、ネットワーク２を介して送られてきた受信データをＭＰＵ４６ａが受け取り、ＲＡＭ４６ｂに書き込む。そして、そのＲＡＭ４６ｂに書き込まれた受信データがＭＰＵ４７に読み込まれる。この場合に、通信ボード４６が通信機器１０となり、ＭＰＵ４７がコントローラ２０側となり、ＲＡＭ４６ｂが共有メモリ３０となるように構成することにより、本発明による効率的なデータの転送が行える。
【００９４】
図示の場合、通信ボード４６を組み込んだパソコン全体を見ると、通信機器１０，コントローラ２０並びに共有メモリ３０を１つの装置に実装したととらえることができる。また、通信ボード４６に着目すると、通信機器１０と共有メモリ３０を備えた装置を構成することになる。この場合に、ＭＰＵ４７は、係る通信機器１０と共有メモリ３０を備えた装置に対応可能なコントローラとなる。
【００９５】
【発明の効果】
以上のように、この発明では、複数の一時記憶エリアを用い、その複数の記憶エリアの任意の記憶エリアに受信データを書き込み、その書き込み終了後に最新の受信データが書き込まれた記憶エリアを一括して読み込むようなデータ伝送を行うに際し、受信異常があった場合には、前回正常なデータを格納した他の一時記憶エリアから対応する正常なデータを読み出し、今回格納する一時記憶エリアに書き込むようにしたため、書き込み完了直後の一時記憶エリアには、時系列で古いデータが記憶されるようなことがなく、常に正常に受信されたデータの中で最新のデータが記憶される。よって、前後が逆になるような古いデータを読み込むことがない。
【図面の簡単な説明】
【図１】従来例を示す図である。
【図２】従来の機器の内部構造を示す図である。
【図３】従来の機器のメモリ，データ転送に着目した内部構造を示す図である。
【図４】各通信サイクルで受信したデータの一例を示す図である。
【図５】図４に示した受信データ例に基づく共有メモリに格納されるデータの推移を示す図である。
【図６】共有メモリから取得し、コントローラのローカルメモリに格納されたデータの推移を示す図である。
【図７】本発明が適用される機器を含むネットワークシステムの一例を示す図である。
【図８】機器の内部構造を示す図である。
【図９】共有メモリの内部構造を示す図である。
【図１０】通信機器の内部構造を示す図である。
【図１１】コントローラの内部構造を示す図である。
【図１２】アクセス権獲得部の機能を示すフローチャートである。
【図１３】ＩＮデータ書き込み部の機能を示すフローチャートの一部である。
【図１４】ＩＮデータ書き込み部の機能を示すフローチャートの一部である。
【図１５】ＩＮデータ書き込み部の機能を示すフローチャートの一部である。
【図１６】ＩＮデータ書き込み部の機能を示すフローチャートの一部である。
【図１７】ＩＮデータ読み出し部の機能を示すフローチャートである。
【図１８】ＩＮデータ読み出し部の機能を示すフローチャートである。
【図１９】図４に示した受信データ例に基づく共有メモリに格納されるデータの推移を示す図である。
【図２０】共有メモリから取得し、コントローラのローカルメモリに格納されたデータの推移を示す図である。
【図２１】本発明の第２の実施の形態の要部である通信機器１０の内部構造を示す図である。
【図２２】本発明の変形例における共有メモリの内部構造を示す図である。
【図２３】変形例におけるＩＮデータ書き込み部の機能を示すフローチャートの一部である。
【図２４】変形例におけるＩＮデータ書き込み部の機能を示すフローチャートの一部である。
【図２５】本発明の適用例を示す図である。
【図２６】本発明の適用例を示す図である。
【符号の説明】
１  機器
２  ネットワーク
１０  通信機器
１１  通信チップ
１２  ＭＰＵ
１２ａ，１２ａ′  ＩＮデータ書き込み部（受信データ書き込み手段）
１２ｂ  ＯＵＴデータ読み出し部
１２ｃ  転送部
１３  ローカルメモリ
１３ａ  第１記憶エリア
１３ｂ  第２記憶エリア
２０  コントローラ
２１  ＭＰＵ
２１ａ  ＩＮデータ読み出し部（受信データ読み出し手段）
２１ｂ  ＯＵＴデータ書き込み部
２２  ローカルメモリ
３０  共有メモリ
３１ａ〜３１ｃ  ＩＮデータエリア（一時記憶エリア）
３２  ＩＮカレント指定エリア
３３  ＩＮリードロックエリア
３５ａ〜３５ｃ  ＯＵＴデータエリア
３６  ＯＵＴカレント指定エリア
３７  ＯＵＴリードロックエリア
３８  アクセスフラグ
【図１】
0004517263.tif 000002
【図２】
0004517263.tif 000003
【図３】
0004517263.tif 000004
【図４】
0004517263.tif 000005
【図５】
0004517263.tif 000006
【図６】
0004517263.tif 000007
【図７】
0004517263.tif 000008
【図８】
0004517263.tif 000009
【図９】
0004517263.tif 000010
【図１０】
0004517263.tif 000011
【図１１】
0004517263.tif 000012
【図１２】
0004517263.tif 000013
【図１３】
0004517263.tif 000014
【図１４】
0004517263.tif 000015
【図１５】
0004517263.tif 000016
【図１６】
0004517263.tif 000017
【図１７】
0004517263.tif 000018
【図１８】
0004517263.tif 000019
【図１９】
0004517263.tif 000020
【図２０】
0004517263.tif 000021
【図２１】
0004517263.tif 000022
【図２２】
0004517263.tif 000023
【図２３】
0004517263.tif 000024
【図２４】
0004517263.tif 000025
【図２５】
0004517263.tif 000026
【図２６】
0004517263.tif 000027