(57)【要約】  ネットワークユニット（２００）の受信データ書き込み部（２６２）は、第１スレーブ局（１００１）と第２スレーブ局（１００２）とから受信した受信データのうち、データの同時性を保証するデータを、書き込みが可能であることを示すフラグがセットされた場合に第１データ領域（２１１）に記録し、受信データのうちリアルタイム性を保証するデータを第２データ領域（２１２）に記録する。ＣＰＵユニット（１００）の第１転送部（１４２）は、第１の転送周期で、かつ、読み出しが可能であることを示すフラグがセットされた場合に第１データ領域（２１１）のデータを第１記憶部（１１１）に転送する。ＣＰＵユニット（１００）の第２転送部（１４３）は、第２の転送周期で、第２データ領域（２１２）のデータを第２記憶部（１１２）に転送する。
2019142288.tif 000002
【特許請求の範囲】
【請求項１】
ＣＰＵユニットと、ネットワークユニットと、前記ＣＰＵユニットとネットワークユニットが読み書き可能な共有メモリと、を含むＰＬＣであって、
前記共有メモリは、第１データ領域と、第２データ領域と、を含み、
前記ネットワークユニットは、
ネットワークを介して接続された機器から受信した受信データのうちデータの同時性を保証するデータを、前記第１データ領域に書き込みが可能であることを示すフラグがセットされた場合に前記第１データ領域に記録し、前記受信データのうちリアルタイム性を保証するデータを前記第２データ領域に記録する受信データ書き込み部、
を有し、
前記ＣＰＵユニットは、
記憶部と、
第１の転送周期で、かつ、前記第１データ領域から読み出しが可能であることを示すフラグがセットされた場合に、前記データの同時性を保証するデータを前記第１データ領域から読み出し、前記記憶部に転送する第１転送部と、
前記第１の転送周期とは異なる第２の転送周期で、前記リアルタイム性を保証するデータを前記第２データ領域から読み出し、前記記憶部に転送する第２転送部と、
を有する、
ＰＬＣ。
【請求項２】
前記第１の転送周期は、前記ＣＰＵユニットのサイクルタイムであり、
前記第２の転送周期は、前記第１の転送周期より短い、
請求項１に記載のＰＬＣ。
【請求項３】
前記第１データ領域に対して排他制御を行い、
前記第２データ領域に対して排他制御を行わない、
請求項１または２に記載のＰＬＣ。
【請求項４】
前記第１データ領域と前記第２データ領域に対して排他制御を行う、
請求項１または２に記載のＰＬＣ。
【請求項５】
前記データの同時性を保証するデータは、第１の機器から受信したデータであり、
前記リアルタイム性を保証するデータは、前記第１の機器とは異なる第２の機器から受信したデータである、
請求項１から４のいずれか１項に記載のＰＬＣ。
【請求項６】
ＰＬＣに含まれ、前記ＰＬＣに含まれるＣＰＵユニットと共有メモリを介してデータの授受を行うネットワークユニットであって、
前記共有メモリは、ＣＰＵユニットへ第１の転送周期で転送可能であり、かつ、データの同時性を保証するデータを記憶する第１データ領域と、前記ＣＰＵユニットへ第２の転送周期で転送可能であり、かつ、リアルタイム性を保証するデータを記憶する第２データ領域と、を含み、
前記第１データ領域に書き込みが可能であることを示すフラグがセットされた場合に、ネットワークを介して接続された機器から受信したデータのうち前記データの同時性を保証するデータを前記第１データ領域に記録し、
前記機器から受信したデータのうち前記リアルタイム性を保証するデータを前記第２データ領域に記録する、
ネットワークユニット。
【請求項７】
ＰＬＣに含まれ、前記ＰＬＣに含まれるネットワークユニットと共有メモリを介してデータの授受を行うＣＰＵユニットであって、
記憶部と、
第１の転送周期で、かつ、前記共有メモリから読み出しが可能であることを示すフラグがセットされた場合に、前記共有メモリに格納されているデータのうちデータの同時性を保証するデータを読み出し、読み出したデータを前記記憶部に転送する第１転送部と、
前記第１の転送周期とは異なる第２の転送周期で、前記共有メモリに格納されているデータのうちリアルタイム性を保証するデータを読み出し、読み出したデータを前記記憶部に転送する第２転送部と、
を含む、
ＣＰＵユニット。
【請求項８】
前記第１転送部は、前記ＣＰＵユニットのサイクルタイム毎に、前記共有メモリから前記データの同時性を保証するデータを前記記憶部に転送し、
前記第２転送部は、前記ＣＰＵユニットのサイクルタイムより短い周期で、前記共有メモリから前記リアルタイム性を保証するデータを前記記憶部に転送する、
請求項７に記載のＣＰＵユニット。
【請求項９】
ＰＬＣのＣＰＵユニットとネットワークユニットとの間で前記ＣＰＵユニットと前記ネットワークユニットが読み書き可能な共有メモリを介してデータを転送するデータ転送方法であって、
前記ネットワークユニットが、前記共有メモリに書き込みが可能であることを示すフラグがセットされた場合に、ネットワークを介して接続された機器から受信した受信データのうちデータの同時性を保証するデータを、前記共有メモリに記録するステップと、
前記ネットワークユニットが、前記受信データのうちリアルタイム性を保証するデータを前記共有メモリに記録するステップと、
前記ＣＰＵユニットが、第１の転送周期で、かつ、前記共有メモリから読み出しが可能であることを示すフラグがセットされた場合に、前記共有メモリから前記データの同時性を保証するデータを読み出して前記ＣＰＵユニットの記憶部に転送するステップと、
前記ＣＰＵユニットが、前記第１の転送周期とは異なる第２の転送周期で、前記共有メモリから前記リアルタイム性を保証するデータを読み出して前記記憶部に転送するステップと、
を含むデータ転送方法。
【請求項１０】
前記第１の転送周期は、前記ＣＰＵユニットのサイクルタイムであり、
前記第２の転送周期は、前記第１の転送周期より短い、
請求項９に記載のデータ転送方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＰＬＣ、ネットワークユニット、ＣＰＵユニット、及びデータ転送方法に関する。
【背景技術】
【０００２】
ＦＡ（Factory Automation）制御システムにおいて使用されているＰＬＣ（Programmable Logic Controller）では、ＰＬＣ全体を制御するＣＰＵ（Central Processing Unit）ユニットと、機能ユニットのひとつであり、ネットワークを介して他の機器からデータを受信するネットワークユニットとが共有メモリを使用して相互にデータをやり取りする。【０００３】
ネットワークユニットが共有メモリのデータを更新している最中に、ＣＰＵユニットが共有メモリからデータを読み出すと、ＣＰＵユニットが読み出したデータは、ネットワークユニットが前回のサイクルタイムで受信し、すでに共有メモリに書き込まれていたデータと、ネットワークユニットが今回のサイクルタイムで受信したデータとが混在したものとなる。ネットワークユニットが受信するデータは一定のかたまりで意味を持つことがあり、この場合、一度に読み出すべきデータが同時に読み出されること、即ち、データの同時性を保証することができない。【０００４】
この問題を解消するため、特許文献１には、フラグを使用して、ＣＰＵユニットと機能ユニットが共有メモリのデータの読み書きを同時に行わないように排他制御することが記載されている。【０００５】
従来の排他制御の一例として、以下のようにフラグを使用する制御方式がある。共有メモリに対するアクセスの状態を、ネットワークユニットが書き込み可能な状態「０」、ＣＰＵユニットが読み出し可能な状態「１」、ＣＰＵユニットが読み出し中の状態「２」の３つに区分する。これらの３つの区分の状態を表すフラグの値を、「０」から「１」へ、「１」から「２」へ、「２」から「０」へと変更する。ＣＰＵユニットとネットワークユニットは、フラグの値が共有メモリにアクセス可能なことを示す場合に、共有メモリにアクセスする。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００４−２６５００１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
上述の３値のフラグを使用する場合、「０」で表されるネットワークユニットが書き込み可能な状態の前の状態は、「２」で表されるＣＰＵユニットが読み出し中の状態である。即ち、ＣＰＵユニットがデータを共有メモリから読み出した後でなければ、ネットワークユニットは共有メモリに書き込むことができない。【０００８】
ここで、ＣＰＵユニットのサイクルタイムは、ネットワークユニットのサイクルタイムと異なる場合が多い。ＣＰＵユニットのサイクルタイムがネットワークユニットのサイクルタイムより長い場合には、ＣＰＵユニットの共有メモリからの読み出しの間隔は、ネットワークユニットの共有メモリへの書き込みの間隔に対して長くなる。ネットワークユニットは、ＣＰＵユニットの読み出しを待って、共有メモリに書き込むことになるため、ネットワークが共有メモリに書き込めないタイミングが生じてしまう。【０００９】
さらに、ネットワークユニットの受信バッファの容量は限られたものであり、同一スレーブ局からの受信データは最新の１件しか保持できない場合がある。このため、ネットワークユニットが共有メモリに書き込めない期間に、ネットワークユニットがスレーブ局からデータを受信した場合、受信バッファ内の以前に受信されたデータが新たに受信されたデータで上書きされる。【００１０】
この結果、ネットワークユニットは、上書きされたデータを共有メモリに書き込むことができず、ＣＰＵユニットは上書きされたデータを取得することができない。よって、ＣＰＵユニットがネットワークユニットから取得するデータの一部が抜けてしまう。【００１１】
こうした状況を避けるため、ネットワークユニットが、受信バッファが上書きされる前に、受信バッファのデータを他の記憶領域に退避させるといった方法も考えられるが、ネットワークユニット側の構成が複雑になってしまう。【００１２】
本発明は、上記実情に鑑みてなされたものであり、データの同時性を維持しつつ、簡易な方法でＣＰＵユニットがネットワークユニットから取得するデータの欠落を低減することを目的とする。
【課題を解決するための手段】
【００１３】
上記目的を達成するため、本発明に係るＰＬＣは、ＣＰＵユニットと、ネットワークユニットと、ＣＰＵユニットとネットワークユニットが読み書き可能な共有メモリと、を含む。共有メモリは、第１データ領域と第２データ領域とを含む。ネットワークユニットの受信データ書き込み部は、ネットワークを介して接続された機器から受信した受信データのうちデータの同時性を保証するデータを、第１データ領域に書き込みが可能であることを示すフラグがセットされた場合に第１データ領域に記録し、受信データのうちリアルタイム性を保証するデータを第２データ領域に記録する。ＣＰＵユニットの第１転送部は、第１の転送周期で、かつ、第１データ領域から読み出しが可能であることを示すフラグがセットされた場合に、データの同時性を保証するデータを第１データ領域から読み出し、ＣＰＵユニットの記憶部に転送する。ＣＰＵユニットの第２転送部は、第１の転送周期とは異なる第２の転送周期で、リアルタイム性を保証するデータを第２データ領域から読み出し、記憶部に転送する。
【発明の効果】
【００１４】
本発明に係るＰＬＣでは、ネットワークユニットは、受信データのうちデータの同時性を保証するデータを、第１データ領域に書き込みが可能であることを示すフラグがセットされた場合に第１データ領域に記録し、受信データのうちリアルタイム性を保証するデータを第２データ領域に記録する。ＣＰＵユニットは、リアルタイム性を保証するデータを、データの同時性を保証するデータの第１の転送周期とは異なる第２の転送周期で、第２データ領域から記憶部に転送する。
このような構成を備えることで、データの同時性を保証するデータについては同時性を維持しつつ、リアルタイム性を保証するデータについては、データの欠落を低減することができる。
【図面の簡単な説明】
【００１５】
【図１】本発明の実施の形態１に係るＰＬＣの構成を示すブロック図
【図２Ａ】実施の形態１に係るＣＰＵユニットの設定テーブルに登録される情報の例を示す図
【図２Ｂ】実施の形態１の第１フラグにセットされる値の例を示す図
【図２Ｃ】実施の形態１に係るネットワークユニットの設定テーブルに登録される情報の例を示す図
【図３】実施の形態１のネットワークユニットの受信データ書き込み処理のフローチャート
【図４Ａ】実施の形態１のＣＰＵユニットの第１転送処理のフローチャート
【図４Ｂ】実施の形態１のＣＰＵユニットの第２転送処理のフローチャート
【図５】実施の形態１に係るネットワークユニット、共有メモリ、ＣＰＵユニットの間でデータが転送される様子を示す図
【図６】実施の形態２に係るＰＬＣの構成を示すブロック図
【図７】実施の形態２のネットワークユニットの受信データ書き込み処理のフローチャート
【図８】実施の形態２のＣＰＵユニットの第２転送処理のフローチャート
【図９】実施の形態２における、ネットワークユニット、共有メモリ、ＣＰＵユニットの間でデータが転送される様子を示す図
【発明を実施するための形態】
【００１６】
（実施の形態１）
以下、本発明の実施の形態１に係るＰＬＣ１を説明する。
【００１７】
図１に示すように、ＰＬＣ１は、マスタ局として機能し、ネットワーク１０００を介して接続された第１スレーブ局１００１と第２スレーブ局１００２とを管理する。ＰＬＣ１は、ＰＬＣ１全体を制御するＣＰＵユニット１００と、第１スレーブ局１００１と第２スレーブ局１００２と通信するネットワークユニット２００とを含む。
【００１８】
図１では図示していないが、ＣＰＵユニット１００とネットワークユニット２００は電源ユニットとともに、ベースユニットに装着され、電源ユニットから供給された電源によって動作する。ＣＰＵユニット１００とネットワークユニット２００とは共有バス３００によって接続され、相互に通信する。
【００１９】
第１スレーブ局１００１の例としては、スイッチ、センサ、表示灯等の入出力機器、アクチュエータ、ドライバ等の制御機器、パーソナルコンピュータといった情報通信機器がある。第２スレーブ局１００２も同様である。第１スレーブ局１００１は、本発明の第１の機器の一例である。第２スレーブ局１００２は、本発明の第２の機器の一例である。
【００２０】
ＣＰＵユニット１００は、第１スレーブ局１００１と第２スレーブ局１００２から取得した入力データを使用して演算を行い、演算結果に基づいて、第１スレーブ局１００１と第２スレーブ局１００２とを管理する。以下、第１スレーブ局１００１を例に説明するが、第２スレーブ局１００２についても同様である。
【００２１】
ＣＰＵユニット１００が演算に使用する入力データは、例えば、第１スレーブ局１００１に接続されているスイッチがオンしたことを示す情報、スイッチがオフしたことを示す情報である。まず、第１スレーブ局１００１は、入力データをネットワークユニット２００に送信する。ネットワークユニット２００は第１スレーブ局１００１から受け取った入力データを、後述の共有メモリ２１０を介して、ＣＰＵユニット１００に供給する。
【００２２】
ＣＰＵユニット１００は、取得した入力データを使用して、演算を行い、演算結果から、第１スレーブ局１００１を制御するための制御データを出力する。ＣＰＵユニット１００が出力する制御データは、例えば、第１スレーブ局１００１に接続されているアクチュエータの駆動を指示する情報、アクチュエータの停止を指示する情報である。このようにして、ＰＬＣ１は、第１スレーブ局１００１を管理する。
【００２３】
実施の形態１では、本発明のデータの同時性を保証するデータとして、ネットワークユニット２００が第１スレーブ局１００１と第２スレーブ局１００２から受信するデータのうち、データの同時性を保証するデータの範囲を設定する。具体的には、データの同時性を保証するデータを、第１スレーブ局１００１から受信するデータとする。第１スレーブ局１００１から受信するデータについては、データの同時性を保証できるよう、共有メモリ２１０のアクセスの排他制御を行う。以下、第１スレーブ局１００１から受信するデータを第１の範囲のデータと呼ぶことがある。
【００２４】
また、本発明のリアルタイム性を保証するデータとして、ネットワークユニット２００が第１スレーブ局１００１と第２スレーブ局１００２から受信するデータのうち、データの同時性を保証しないデータの範囲を設定する。具体的には、リアルタイム性を保証するデータを、第２スレーブ局１００２から受信するデータとする。第２スレーブ局１００２から受信するデータについては、共有メモリ２１０のアクセスの排他制御を行わない。第２スレーブ局１００２から受信するデータについては、取得データの欠落を低減するよう、共有メモリ２１０からの読み出しタイミングを、第１の範囲のデータの読み出しタイミングとは異ならせる。以下、第２スレーブ局１００２から受信するデータを第２の範囲のデータと呼ぶことがある。
【００２５】
ＣＰＵユニット１００は、各種データを記憶する内部メモリ１１０と、後述する設定ツール３０１と通信をするための設定ツールインタフェース１２０と、共有バス３００を介した通信のための共有バスインタフェース１３０と、ＣＰＵユニット１００全体を制御する演算部１４０とを含む。各部はバス１９０を介して接続されている。
【００２６】
内部メモリ１１０は、ＲＯＭ（Read Only Memory）、ＲＡＭ（Random Access Memory）、メモリカード等を含む。内部メモリ１１０は、第１記憶部１１１と、第２記憶部１１２と、設定テーブル１１３と、ユーザプログラム１１４とを有する。
【００２７】
第１記憶部１１１と第２記憶部１１２とは、ＣＰＵユニット１００によるサイクリック処理により、後述のネットワークユニット２００の共有メモリ２１０から読み出されるデータを格納する領域である。
【００２８】
設定テーブル１１３は、共有メモリ２１０内において、第１の範囲のデータが格納されている領域を示す情報と、第２の範囲のデータが格納されている領域を示す情報とを含む。設定テーブル１１３は、後述する第１転送処理と第２転送処理に使用される。設定テーブル１１３は、設定ツール３０１をユーザが操作することにより内部メモリ１１０に格納される。また、設定テーブル１１３に格納された情報は、後述するネットワークユニット２００の受信データ書き込み処理にも使用される。このため、ＣＰＵユニット１００は、ネットワークユニット２００の起動時に、設定テーブル１１３に格納された情報をネットワークユニット２００に提供する。
【００２９】
図２Ａに、設定テーブル１１３に登録される情報の例を示す。設定テーブル１１３には、第１の範囲のデータである第１スレーブ局１００１から受信するデータの格納先が、第１データ領域２１１であることを示す情報と、第２の範囲のデータである第２スレーブ局１００２から受信するデータの格納先が、第２データ領域２１２であることを示す情報とが登録されている。
【００３０】
ユーザプログラム１１４は、ラダーロジックのプログラムを含み、ＰＬＣ１が管理対象とする第１スレーブ局１００１と第２スレーブ局１００２を制御するためのプログラムである。ユーザプログラム１１４に含まれる命令は、第１スレーブ局１００１と第２スレーブ局１００２から受信データを入力としてオンまたはオフし、オンの状態になった命令が実行される。ユーザプログラム１１４の命令の実行により、例えば、入力値を使用した演算、演算値の出力等が行われる。ユーザプログラム１１４は、不図示のプログラム作成支援装置を用いて作成される。プログラム作成支援装置は、パーソナルコンピュータに専用プログラムをインストールした装置である。プログラム作成支援装置で作成されたユーザプログラム１１４は、ＰＬＣ１のＣＰＵユニット１００にアップロードされ、内部メモリ１１０に格納される。
【００３１】
設定ツールインタフェース１２０は、ＣＰＵユニット１００が、設定ツール３０１と通信するための通信インタフェースである。設定ツールインタフェース１２０は、演算部１４０の制御に従って動作する。
【００３２】
共有バスインタフェース１３０は、ＣＰＵユニット１００が共有バス３００を介してネットワークユニット２００と通信するための通信インタフェースである。共有バスインタフェース１３０は、演算部１４０の制御に従って動作する。
【００３３】
演算部１４０は、ＭＰＵ（Micro-processing Unit）を含み、プログラムを実行して、各種演算、ＣＰＵユニット１００の各部の制御を行う。演算部１４０は、プログラム実行部１４１、第１転送部１４２、第２転送部１４３を有する。
【００３４】
プログラム実行部１４１は、第１記憶部１１１と第２記憶部１１２に格納されたデータを使用して、ユーザプログラム１１４を繰り返し実行する。プログラム実行部１４１が、ユーザプログラム１１４を実行する周期をＣＰＵユニット１００の制御周期、または、サイクルタイムという。プログラム実行部１４１は、ＣＰＵユニット１００の制御周期で、ユーザプログラム１１４内のオンした命令を順次処理していく。プログラム実行部１４１は、ユーザプログラム１１４の命令を全て実行し終えると、ユーザプログラム１１４の実行を停止する。プログラム実行部１４１は、次の制御周期で、再びユーザプログラム１１４の実行を開始する。
【００３５】
第１転送部１４２は、第１スレーブ局１００１から送信されたデータを、設定テーブル１１３に基づいて共有メモリ２１０から読み出し、内部メモリ１１０の指定された領域に転送する。ここでは、第１記憶部１１１が指定された領域である。転送先を指定する方法として、設定ツール３０１であらかじめ設定しておく方法とユーザプログラム１１４で指定する方法がある。第１転送部１４２は、ＣＰＵユニット１００の制御周期と同じ周期である第１の転送周期で動作する。なお、ＣＰＵユニット１００の演算能力上、最も短い周期よりも大きい範囲であれば、第１の転送周期は、ユーザが後述する設定ツール３０１を用いて変更することも可能である。
【００３６】
第２転送部１４３は、第２スレーブ局１００２から送信されたデータを、設定テーブル１１３に基づいて共有メモリ２１０から読み出し、内部メモリ１１０の指定された領域に転送する。ここでは、第２記憶部１１２が指定された領域である。転送先を指定する方法として、設定ツール３０１であらかじめ設定しておく方法とユーザプログラム１１４で指定する方法がある。第２転送部１４３は、ＣＰＵユニット１００の制御周期より短い第２の転送周期で動作する。第２の転送周期は、ユーザが後述する設定ツール３０１を用いて設定する。
【００３７】
ネットワークユニット２００は、ネットワークユニット２００とＣＰＵユニット１００のいずれもが読み書きが可能な共有メモリ２１０と、各種データを記憶する内部メモリ２２０と、共有バス３００を介してＣＰＵユニット１００と通信するための共有バスインタフェース２３０と、第１スレーブ局１００１と第２スレーブ局１００２と通信するためのネットワークインタフェース２４０と、第１スレーブ局１００１と第２スレーブ局１００２とから受信したデータを一時的に保持するための受信バッファ２５０と、ネットワークユニット２００全体の制御を実行する演算部２６０と、後述する設定ツール３０１と通信するための設定ツールインタフェース２７０とを含む。各部はバス２９０を介して接続されている。
【００３８】
共有メモリ２１０は、ＲＡＭを含み、第１データ領域２１１と、第２データ領域２１２と、第１フラグ２１３とを有する。第１データ領域２１１には、第１スレーブ局１００１から受信されたデータが格納される。第２データ領域２１２には、第２スレーブ局１００２から受信されたデータが格納される。
【００３９】
第１フラグ２１３には、第１データ領域２１１の書き込み可否と読み出し可否を示す値をセットする。第１フラグ２１３にセットされる値は以下のとおりである。図２Ｂに示すように、ネットワークユニット２００が第１データ領域２１１に書き込み可能な状態では、第１フラグ２１３には“０”がセットされる。ＣＰＵユニット１００が第１データ領域２１１から読み出し可能な状態では、第１フラグ２１３には“１”がセットされる。ＣＰＵユニット１００が第１データ領域２１１から読み出し中である状態では、第１フラグ２１３には“２”がセットされる。第１フラグ２１３は、ＣＰＵユニット１００またはネットワークユニット２００がセットする。
【００４０】
内部メモリ２２０は、ＲＯＭ、ＲＡＭ、メモリカード等を含む。内部メモリ２２０は、設定テーブル２２１を有する。設定テーブル２２１は、後述する受信データ書き込み処理に使用される。設定テーブル２２１は、第１スレーブ局１００１と第２スレーブ局１００２から受信したデータを格納する領域を示す情報を含む。設定テーブル２２１には、ネットワークユニット２００の起動時にＣＰＵユニット１００から提供された情報が格納されている。具体的には、設定テーブル１１３に格納されている情報がＣＰＵユニット１００からネットワークユニット２００に提供される。
【００４１】
図２Ｃに、設定テーブル２２１に登録される情報の例を示す。設定テーブル２２１は、第１スレーブ局１００１から送信されたデータの格納先として、ネットワークユニット２００の共有メモリ２１０の第１データ領域２１１を示す情報が登録されている。さらに、設定テーブル２２１には、第２スレーブ局１００２から送信されたデータの格納先として、共有メモリ２１０の第２データ領域２１２を示す情報が登録されている。
【００４２】
ネットワークインタフェース２４０は、演算部２６０の制御に従って、第１スレーブ局１００１と第２スレーブ局１００２に対して、決められたタイミングでデータの送信を要求する。ネットワークインタフェース２４０は、第１スレーブ局１００１と第２スレーブ局１００２とから受信したデータを受信バッファ２５０に書き込む。
【００４３】
受信バッファ２５０は、ネットワークユニット２００が受信したデータを一時的に保持する。受信バッファ２５０には、ネットワークユニット２００が受信したデータと、当該データの送信元を示す情報とが順次記録される。受信バッファ２５０は、送信元のスレーブ局毎に割り当てられた領域を含む。具体的には、ネットワークユニット２５０が第１スレーブ局１００１から受信したデータは、受信バッファ２５０の第１スレーブ局１００１のために割り当てられた領域に格納される。ネットワークユニット２５０が第２スレーブ局１００２から受信したデータは、受信バッファ２５０の第２スレーブ局１００２のために割り当てられた領域に格納される。ネットワークユニット２５０がいずれかのスレーブ局からデータを受信すると、受信バッファ２５０の当該スレーブ局のために割り当てられた領域に格納されているデータが上書きされる。
【００４４】
演算部２６０は、データ受信部２６１、受信データ書き込み部２６２を含む。
データ受信部２６１は、ネットワークインタフェース２４０に第１スレーブ局１００１と第２スレーブ局１００２にデータの送信を要求する制御信号を決められたタイミングで送信させる。データ受信部２６１は、ネットワークインタフェース２４０に第１スレーブ局１００１と第２スレーブ局１００２から受信したデータを受信バッファ２５０に格納させる。
【００４５】
受信データ書き込み部２６２は、受信バッファ２５０に保持されたデータを、設定テーブル２２１に基づいて、共有メモリ２１０に記録する。図２Ｃに示す例では、受信データ書き込み部２６２は、第１フラグ２１３を確認し、第１フラグの値が０である場合に、第１スレーブ局１００１から受信したデータを第１データ領域２１１に記録する。このとき、第１データ領域２１１にすでに記録されているデータは上書きされる。また、受信データ書き込み部２６２は、第１フラグ２１３の値に関係なく、第２スレーブ局１００２から受信したデータを第２データ領域２１２に記録する。このとき第２データ領域２１２にすでに記録されているデータは上書きされる。受信データ書き込み部２６２は、ネットワークユニット２００の制御周期で動作する。
【００４６】
設定ツール３０１は、専用のアプリケーションプログラムをインストールしたパーソナルコンピュータを含む。ユーザは、設定ツール３０１とＣＰＵユニット１００とを通信ケーブルで接続し、設定ツール３０１を操作して、ＣＰＵユニット１００の内部メモリ１１０に、図２Ａに示す設定テーブル１１３を格納する。
【００４７】
本実施の形態では、第１スレーブ局１００１から送信されるデータは、一定のかたまりで意味を持ち、データの同時性を保証することが望ましいデータであるものとする。データの同時性を保証することが望ましいデータの例としては、サイズの大きいデータ、桁数の大きい数字データなどが挙げられる。第２スレーブ局１００２から送信されるデータは、データの同時性を保証する必要がないデータとする。例えば、第２スレーブ局１００２からは、気温、気圧等といった、ロギングで使用され、リアルタイムで取得することが望ましいデータ（リアルタイム性を保証するデータ）がネットワークユニット２００に送信されうる。
【００４８】
まず、ネットワークユニット２００の受信データ書き込み部２６２が第１スレーブ局１００１と第２スレーブ局１００２から受信したデータを、共有メモリ２１０に書き込む受信データ書き込み処理を説明する。受信データ書き込み部２６２は、受信データ書き込み処理をネットワークユニット２００の制御周期で実行する。
【００４９】
図３に示すように、ネットワークユニット２００の受信データ書き込み部２６２は、第１フラグ２１３の値が“０”であるか否かを判別する（ステップＳ１１）。受信データ書き込み部２６２は、第１フラグ２１３の値が“０”であると判別すると（ステップＳ１１；Ｙｅｓ）、受信バッファ２５０に格納されているデータのうち第１スレーブ局１００１から受信したデータを、第１データ領域２１１に書き込む（ステップＳ１２）。その後、受信データ書き込み部２６２は、第１フラグ２１３の値を“１”に変更し（ステップＳ１３）、ステップＳ１４の処理を実行する。
【００５０】
一方、ステップＳ１１で、受信データ書き込み部２６２は、第１フラグ２１３の値が“０”でないと判別すると（ステップＳ１１；Ｎｏ）、ステップＳ１４の処理を実行する。
【００５１】
ステップＳ１４において、受信データ書き込み部２６２は、受信バッファ２５０に格納されているデータのうち第２スレーブ局１００２から受信したデータを、第２データ領域２１２に書き込む（ステップＳ１４）。
【００５２】
続いて、ＣＰＵユニット１００が、共有メモリ２１０のデータを読み出して、内部メモリ１１０に転送する処理を説明する。
【００５３】
まず、第１転送部１４２が第１データ領域２１１から内部メモリ１１０にデータを転送する第１転送処理を説明する。第１転送部１４２は、ＣＰＵユニット１００の制御周期で第１転送処理を実行する。
【００５４】
図４Ａに示すように、第１転送部１４２は、ＣＰＵユニット１００の制御周期で第１転送処理を実行する。まず、第１転送部１４２は、ネットワークユニット２００の第１フラグ２１３の値を読み出し、第１フラグ２１３の値が“１”であるか否かを判別する（ステップＳ２１）。第１転送部１４２は、第１フラグ２１３の値が“１”であると判別すると（ステップＳ２１；Ｙｅｓ）、第１フラグ２１３の値を“２”に変更する（ステップＳ２２）。その後、第１転送部１４２は、ネットワークユニット２００の第１データ領域２１１に格納されているデータを読み出し、内部メモリ１１０の第１記憶部１１１に転送する（ステップＳ２３）。具体的には、第１転送部１４２は、第１データ領域２１１に格納されているデータを第１記憶部１１１にコピーする。
【００５５】
その後、第１転送部１４２は、第１フラグ２１３の値を“０”に変更する（ステップＳ２４）。これにより、ネットワークユニット２００が再び共有メモリ２１０の第１データ領域２１１に書き込み可能になる。以上が第１転送部１４２の第１転送処理である。
【００５６】
次に、第２転送部１４３が第２データ領域２１２から内部メモリ１１０にデータを転送する第２転送処理を説明する。第２転送部１４３は、ＣＰＵユニット１００の制御周期より短い周期で第２転送処理を実行する。以下、第２転送部１４３が第２転送処理を開始する周期を第２の転送周期とする。
【００５７】
図４Ｂに示すように、第２転送部１４３は、第２データ領域２１２に格納されているデータを読み出し、内部メモリ１１０の第２記憶部１１２に転送する（ステップ３１）。第２データ領域２１２にはフラグが設定されていないため、第２転送処理は以上である。
【００５８】
上記の処理により、共有メモリ２１０の第１データ領域２１１に格納されたデータは、ＣＰＵユニット１００の第１記憶部１１１に転送される。共有メモリ２１０の第２データ領域２１２に格納されたデータは、ＣＰＵユニット１００の第２記憶部１１２に転送される。
【００５９】
図５を参照して、上記の受信データ書き込み処理、第１転送処理、第２転送処理の実行により、ネットワークユニット２００が第１スレーブ局１００１と第２スレーブ局１００２から受信したデータがどのようにＣＰＵユニット１００に転送されるかを説明する。
【００６０】
時刻ｔ１の時点で、ネットワークユニット２００の受信バッファ２５０には、第１スレーブ局１００１から受信されたデータＳ１００１＿１と、第２スレーブ局１００２から受信されたＳ１００２＿１が格納されているものとする。第１スレーブ局１００１と第２スレーブ局１００２からは決められたタイミングでデータが送信されており、図５の例では、時刻ｔ１、ｔ４、ｔ６、ｔ８、ｔ１１、ｔ１３、ｔ１５、ｔ１８の各時点において、受信バッファ２５０のデータは、新たな受信データで上書きされているものとする。
【００６１】
また、第２の転送周期は、ネットワークユニット２００の制御周期とほぼ同じとなるよう設定されている。なお、第２の転送周期と、ネットワークユニット２００の制御周期とは非同期である。
【００６２】
時刻ｔ１において、受信データ書き込み部２６２は、第１フラグ２１３の値が“０”なのでデータＳ１００１＿１を第１データ領域２１１に書き込む。併せて、受信データ書き込み部２６２はデータＳ１００２＿１を第２データ領域２１２に書き込む。続いて、受信データ書き込み部２６２は、第１フラグ２１３の値を“１”に変更する。
【００６３】
時刻ｔ２において、第１転送部１４２は、第１フラグ２１３の値が“１”なので、第１フラグ２１３の値を“２”に変更し、第１データ領域２１１のデータを読み出し、第１記憶部１１１に転送する。よって、第１記憶部１１１には、データＳ１００１＿１が格納される。その後、第１転送部１４２は第１フラグ２１３の値を“０”に変更する。
【００６４】
時刻ｔ３において、第２転送部１４３は、第２データ領域２１２のデータを読み出し、第２記憶部１１２に転送する。よって、第２記憶部１１２にはデータＳ１００２＿１が格納される。
【００６５】
時刻ｔ４において、受信データ書き込み部２６２は、第１フラグ２１３の値が“０”であるので、データＳ１００１＿２を読み出し、第１データ領域２１１に書き込む。併せて、受信データ書き込み部２６２はデータＳ１００２＿２を読み出し、第２データ領域２１２に書き込む。続いて、受信データ書き込み部２６２は、第１フラグ２１３の値を“１”に変更する。
【００６６】
時刻ｔ５において、第２転送部１４３は、第２データ領域２１２のデータを読み出し、第２記憶部１１２に転送する。よって、第２記憶部１１２にはデータＳ１００２＿２が格納される。なお、時刻ｔ５はＣＰＵユニット１００の制御周期ではないため、第１転送部１４２は、第１データ領域２１１のデータを第１記憶部１１１に転送しない。
【００６７】
時刻ｔ６において、受信データ書き込み部２６２は、第１フラグ２１３の値が“１”なので、第１データ領域２１１にデータＳ１００１＿３を書き込まず、第２データ領域２１２にだけデータＳ１００２＿３を書き込む。
【００６８】
時刻ｔ７において、第２転送部１４３は、第２データ領域２１２のデータを読み出し、第２記憶部１１２に転送する。よって、第２記憶部１１２にはデータＳ１００２＿３が格納される。なお、時刻ｔ７は、ＣＰＵユニット１００の制御周期ではないため、第１転送部１４２は、第１データ領域２１１のデータを第１記憶部１１１に転送しない。
【００６９】
時刻ｔ８において、受信データ書き込み部２６２は、第１フラグ２１３の値が“１”であるため、データＳ１００１＿４を第１データ領域２１１に書き込まず、データＳ１００２＿４だけを読み出して第２データ領域２１２に書き込む。
【００７０】
時刻ｔ９において、第１転送部１４２は、第１フラグ２１３の値が“１”なので、第１フラグ２１３の値を“２”に変更し、第１データ領域２１１のデータを読み出し、第１記憶部１１１に転送する。よって、第１記憶部１１１には、データＳ１００１＿２が格納される。その後、第１転送部１４２は、第１フラグ２１３の値を“０”に変更する。
【００７１】
時刻ｔ１０において、第２転送部１４３は、第２データ領域２１２のデータを読み出し、第２記憶部１１２に転送する。よって、第２記憶部１１２にはデータＳ１００２＿４が格納される。なお、時刻ｔ１０は、ＣＰＵユニット１００の制御周期ではないため、第１転送部１４２は、第１データ領域２１１のデータを第１記憶部１１１に転送しない。時刻ｔ１１以降については説明を省略するが、受信データ書き込み部２６２、第１転送部１４２、第２転送部１４３は同様に処理を継続する。
【００７２】
上記のとおり、受信データ書き込み部２６２は、第１データ領域２１１に書き込み可能な場合に、第１スレーブ局１００１から受信したデータを読み出し、第１データ領域２１１に書き込む。第１転送部１４２は、ＣＰＵユニット１００が第１データ領域２１１から読み出し可能な場合に、第１データ領域２１１から読み出したデータを内部メモリ１１０の第１記憶部１１１に転送する。従って、第１スレーブ局１００１から受信されたデータについては、データの同時性が保証される。
【００７３】
また、受信データ書き込み部２６２は、第２データ領域２１２の読み書きの状態にかかわらず、第２スレーブ局１００２から受信したデータを第２データ領域２１２に書き込む。さらに、第２転送部１４３は、ＣＰＵユニット１００の制御周期より短い周期で、かつ、第２データ領域２１２の読み書きの状態にかかわらず、共有メモリ２１０の第２データ領域２１２のデータを読み出し、第２記憶部１１２に転送する。この場合、データの同時性は保証されないものの、ネットワークユニット２００が第２スレーブ局１００２から受信したデータの大部分を、第２データ領域２１２に転送することが可能となる。
【００７４】
図５に示す例では、ネットワークユニット２００が全ての制御周期において第２スレーブ局１００２から受信したデータを、ＣＰＵユニット１００の第２記憶部１１２に転送することができている。これは、第２の転送周期を、ネットワークユニット２００の制御周期とほぼ同じに設定したためである。
【００７５】
第２の転送周期を、ネットワークユニット２００の制御周期の期間より長くした場合、第２スレーブ局１００２から送信されたデータの一部については転送されない事態が発生しうると考えられる。このため、第２の転送周期を、ＣＰＵユニット１００の制御周期より短くした上で、第２転送部１４３が第２データ領域２１２から第２記憶部１１２へデータを転送する時間を確保しつつ、ネットワークユニット２００の制御周期の期間に合わせることが望ましい。
【００７６】
第２の転送周期を、ＣＰＵユニット１００の制御周期より短くすることにより、転送されるデータの抜けが生じたとしても、その数は少ないと考えられる。このように、ＣＰＵユニット１００に転送されるデータの抜けを低減することができる。
【００７７】
上記の実施の形態１では、リアルタイム性を保証するデータとして設定した第２スレーブ局１００２から供給されたデータについては、データの同時性を保証することができない。
【００７８】
（実施の形態２）
実施の形態２では、第２の範囲のデータについても、データの同時性を保証する構成を説明する。実施の形態２に係るＰＬＣ２は、実施の形態１のＰＬＣ１と同様に、ＣＰＵユニット１００とネットワークユニット２００を有する。以下、実施の形態１と異なる点を中心に説明する。
【００７９】
実施の形態２では、データの同時性を保証するデータを、第１スレーブ局１００１から受信するデータとする。実施の形態１と同様に、第１スレーブ局１００１から受信するデータについては、データの同時性を保証できるよう、共有メモリ２１０のアクセスの排他制御を行う。以下、第１スレーブ局１００１から受信するデータを第１の範囲のデータと呼ぶことがある。
【００８０】
また、リアルタイム性を保証するデータを、第２スレーブ局１００２から受信するデータとする。第２スレーブ局１００２から受信するデータについては、データの同時性を保証しつつ、取得データの欠落を低減する。このため、第２スレーブ局１００２から受信するデータについては、共有メモリ２１０のアクセスの排他制御を行い、共有メモリ２１０からの読み出しタイミングを、第１の範囲のデータの読み出しタイミングとは異ならせる。以下、第２スレーブ局１００２から受信するデータを第２の範囲のデータと呼ぶことがある。
【００８１】
図６に示すように、ＰＬＣ２では、ネットワークユニット２００の共有メモリ２１０は、第２フラグ２１４をさらに含む。第２フラグ２１４には、第２データ領域２１２のアクセスの排他制御のためのフラグである。第２フラグ２１４にセットする値は、第１フラグ２１３と同様である。図２Ｂに示すように、ネットワークユニット２００が第２データ領域２１２に書き込み可能な状態では、第１フラグ２１３には“０”がセットされる。ＣＰＵユニット１００が第２データ領域２１２から読み出し可能な状態では、第２フラグ２１４には“１”がセットされる。ＣＰＵユニット１００が第１データ領域２１１から読み出し中である状態では、第２フラグ２１４には“２”がセットされる。
【００８２】
図７を参照して、ネットワークユニット２００の受信データ書き込み部２６２が、第１スレーブ局１００１と第２スレーブ局１００２から受信したデータを、共有メモリ２１０に書き込む処理を説明する。受信データ書き込み部２６２は、ネットワークユニット２００の制御周期で下記の処理を実行する。
【００８３】
図７に示すように、ネットワークユニット２００の受信データ書き込み部２６２は、第１フラグ２１３の値が“０”であるか否かを判別する（ステップＳ４１）。受信データ書き込み部２６２は、第１フラグ２１３の値が“０”であると判別すると（ステップＳ４１；Ｙｅｓ）、受信バッファ２５０に格納されているデータのうち第１スレーブ局１００１から受信したデータを第１データ領域２１１に書き込む（ステップＳ４２）。その後、受信データ書き込み部２６２は、第１フラグ２１３の値を“１”に変更し（ステップＳ４３）、ステップＳ４４の処理を実行する。
【００８４】
一方、ステップＳ４１で、受信データ書き込み部２６２は、第１フラグ２１３の値が“０”でないと判別すると（ステップＳ４１；Ｎｏ）、ステップＳ４４の処理を実行する。ステップＳ４４において、受信データ書き込み部２６２は、第２フラグ２１４の値が“０”であるか否かを判別する（ステップＳ４４）。
【００８５】
受信データ書き込み部２６２は、第２フラグ２１４の値が“０”であると判別すると（ステップＳ４４；Ｙｅｓ）、受信バッファ２５０に格納されているデータのうち第２スレーブ局１００２から受信したデータを第２データ領域２１２に書き込む（ステップＳ４５）。その後、受信データ書き込み部２６２は、第２フラグ２１４の値を”１”に変更する（ステップＳ４６）。
【００８６】
一方、ステップＳ４４で、受信データ書き込み部２６２は、第１フラグ２１３の値が“０”でないと判別すると（ステップＳ４４；Ｎｏ）、受信バッファ２５０のデータを第２データ領域２１２に書き込むことなく受信データ書き込み処理を終了する。
【００８７】
ＣＰＵユニット１００の第１転送部１４２が実行する第１転送処理は、実施の形態１の図４Ａに示したフローと同様であるので、ここでは説明を省略する。
【００８８】
以下、図８を参照しながら、第２転送部１４３が、共有メモリ２１０に格納されたデータを読み出し、内部メモリ１１０に転送する第２転送処理を説明する。第２転送部１４３は、ＣＰＵユニット１００の制御周期より短い第２の転送周期で第２転送処理を実行する。
【００８９】
まず、第２転送部１４３は、第２フラグ２１４の値が“１”であるか否かを判別する（ステップＳ５１）。第２転送部１４３は、第２フラグ２１４の値が“１”であると判別すると（ステップＳ５１；Ｙｅｓ）、第２フラグ２１４の値を“２”に変更する（ステップＳ５２）。その後、第２転送部１４３は、ネットワークユニット２００の第２データ領域２１２に格納されているデータを読み出し、内部メモリ１１０の第２記憶部１１２に転送する（ステップＳ５３）。具体的には、第２転送部１４３は、第２データ領域２１２に格納されているデータを第２記憶部１１２にコピーする。
【００９０】
その後、第２転送部１４３は、第２フラグ２１４の値を“０”に変更する（ステップＳ５４）。これにより、ネットワークユニット２００が再び共有メモリ２１０の第２データ領域２１２に書き込み可能になる。
【００９１】
一方、ステップＳ５１で、受信データ書き込み部２６２は、第２フラグ２１４の値が“１”でないと判別すると（ステップＳ５１；Ｎｏ）、受信バッファ２５０のデータを第２データ領域２１２に書き込むことなく第２転送処理を終了する。
【００９２】
続いて、図９を参照して、上記の受信データ書き込み処理、第１転送処理、第２転送処理の実行により、ネットワークユニット２００が第１スレーブ局１００１と第２スレーブ局１００２から受信したデータがどのように転送されるかを説明する。
【００９３】
時刻ｔ１の時点で、ネットワークユニット２００の受信バッファ２５０には第１スレーブ局１００１と第２スレーブ局１００２から受信されたデータＳ１００１＿１、Ｓ１００２＿１が格納されているものとする。第１スレーブ局１００１と第２スレーブ局１００２からは決められたタイミングでデータが送信されており、図９の例では、時刻ｔ１、ｔ４、ｔ６、ｔ８、ｔ１１、ｔ１３、ｔ１５、ｔ１８の各時点において、受信バッファ２５０のデータは、新たな受信データで上書きされているものとする。
【００９４】
また、図５の例と同じく、第２転送部１４３が転送処理を開始する第２の転送周期は、ネットワークユニット２００の制御周期とほぼ同じになるように設定されている。なお、第２の転送周期と、ネットワークユニット２００の制御周期とは非同期である。
【００９５】
時刻ｔ１において、受信データ書き込み部２６２は、第１フラグ２１３の値が“０”なので、データＳ１００１＿１を第１データ領域２１１に書き込み、第１フラグ２１３の値を“１”に変更する。併せて、受信データ書き込み部２６２は、第２フラグ２１４の値が“０”なのでデータＳ１００２＿１を第２データ領域２１２に書き込む。続いて、受信データ書き込み部２６２は、第２フラグを“１”に変更する。
【００９６】
時刻ｔ２において、第１転送部１４２は、第１フラグ２１３の値が“１”なので、第１フラグ２１３の値を“２”に変更し、第１データ領域２１１のデータを読み出し、第１記憶部１１１に転送する。よって、第１記憶部１１１には、データＳ１００１＿１が格納される。その後、第１転送部１４２は、第１フラグ２１３の値を“０”に変更する。
【００９７】
時刻ｔ３において、第２転送部１４３は、第２フラグ２１４の値が“１”なので、第２フラグ２１４の値を“２”に変更し、第２データ領域２１２のデータを読み出し、第２記憶部１１２に転送する。よって、第２記憶部１１２にはデータＳ１００２＿１が格納される。その後、第２転送部１４３は、第２フラグ２１４の値を“０”に変更する。
【００９８】
時刻ｔ４において、受信データ書き込み部２６２は、第１フラグ２１３の値が“０”なので、データＳ１００１＿２を第１データ領域２１１に書き込み、第１フラグ２１３の値を“１”に変更する。併せて、受信データ書き込み部２６２は、第２フラグ２１４の値が“０”なので、データＳ１００２＿２を第２データ領域２１２に書き込む。続いて、受信データ書き込み部２６２は、第２フラグを“１”に変更する。
【００９９】
時刻ｔ５において、第２転送部１４３は、第２フラグ２１４の値が“１”なので、第２フラグ２１４の値を“２”に変更し、第２データ領域２１２のデータを読み出し、第２記憶部１１２に転送する。よって、第２記憶部１１２にはデータＳ１００２＿２が格納される。その後、第２転送部１４３は、第２フラグ２１４の値を“０”に変更する。なお、時刻ｔ５は、ＣＰＵユニット１００の制御周期ではないため、第１転送部１４２は、第１データ領域２１１のデータを第１記憶部１１１に転送しない。
【０１００】
時刻ｔ６において、第１フラグ２１３の値が“１”であるため、受信データ書き込み部２６２は、第１データ領域２１１にデータＳ１００１＿３を書き込まない。受信データ書き込み部２６２は、第２フラグ２１４の値が“０”なので、データＳ１００２＿３を第２データ領域２１２に書き込む。続いて、受信データ書き込み部２６２は、第２フラグを“１”に変更する。
【０１０１】
時刻ｔ７において、第２転送部１４３は、第２フラグ２１４の値が“１”なので、第２フラグ２１４の値を“２”に変更し、第２データ領域２１２のデータを読み出し、第２記憶部１１２に転送する。よって、第２記憶部１１２にはデータＳ１００２＿３が格納される。その後、第２転送部１４３は、第２フラグ２１４の値を“０”に変更する。なお、時刻ｔ７は、ＣＰＵユニット１００の制御周期ではないため、第１転送部１４２は、第１データ領域２１１のデータを第１記憶部１１１に転送しない。
【０１０２】
時刻ｔ８において、受信データ書き込み部２６２は、第１フラグ２１３の値が“１”であるため、第１データ領域２１１にデータＳ１００１＿４を書き込まない。受信データ書き込み部２６２は、第２フラグ２１４の値が“０”なので、データＳ１００２＿４を第２データ領域２１２に書き込む。続いて、受信データ書き込み部２６２は、第２フラグを“１”に変更する。
【０１０３】
時刻ｔ９において、第１転送部１４２は、第１フラグ２１３の値が“１”であるため、第１フラグ２１３の値を“２”に変更し、第１データ領域２１１のデータを読み出し、第１記憶部１１１に転送する。よって、第１記憶部１１１には、データＳ１００１＿２が格納される。その後、第１転送部１４２は、第１フラグ２１３の値を“０”に変更する。
【０１０４】
時刻ｔ１０において、第２転送部１４３は、第２フラグ２１４の値が“１”なので、第２フラグ２１４の値を“２”に変更し、第２データ領域２１２のデータを読み出し、第２記憶部１１２に転送する。よって、第２記憶部１１２にはデータＳ１００２＿４が格納される。その後、第２転送部１４３は、第２フラグ２１４の値を“０”に変更する。
【０１０５】
なお、時刻ｔ１０は、ＣＰＵユニット１００の制御周期ではないため、第１転送部１４２は、第１データ領域２１１のデータを第１記憶部１１１に転送しない。時刻ｔ１１以降については説明を省略するが、受信データ書き込み部２６２、第１転送部１４２、第２転送部１４３は同様に処理を継続する。
【０１０６】
実施の形態２においては、第１データ領域２１１、第２データ領域２１２のそれぞれについて第１フラグ２１３、第２フラグ２１４を使用して、共有メモリ２１０の読み書きの制御を行ったため、第１スレーブ局１００１から送信されたデータ、第２スレーブ局１００２から送信されたデータのいずれについてもデータの同時性が保証される。
【０１０７】
さらに、図９に示す例では、実施の形態１と同様に、ネットワークユニット２００が全ての制御周期において第２スレーブ局１００２から受信したデータを、ＣＰＵユニット１００に転送することができた。これは、第２の転送周期を、ネットワークユニット２００の制御周期とほぼ同じに設定したためである。
【０１０８】
第２の転送周期を、ネットワークユニット２００の制御周期の期間より長くした場合、第２スレーブ局１００２から送信されたデータの一部については転送されない事態が発生しうると考えられる。このため、第２の転送周期を、ＣＰＵユニット１００の制御周期より短くした上で、第２転送部１４３の第２データ領域２１２から第２記憶部１１２への転送のための時間を確保しつつ、ネットワークユニット２００の制御周期の期間に合わせた期間とすることが望ましい。
【０１０９】
実施の形態２においては、第２スレーブ局１００２から受信したデータについても第２フラグ２１４を使用して、共有メモリ２１０の第２データ領域２１２の読み書きを制限するため、実施の形態１の構成よりも、受信データ書き込み部２６２が第２データ領域２１２に書き込むことができない場合が多くなることが予想される。しかしながら、実施の形態２においても、第２スレーブ局１００２からの受信データの転送周期を、第１スレーブ局１００１からの受信データの転送周期より短くしているため、第２スレーブ局１００２から受信したデータの抜けを低減することが可能である。
【０１１０】
（変形例１）
実施の形態１及び２では、第１スレーブ局１００１から受信したデータをデータの同時性を保証するデータである第１の範囲のデータとし、第２スレーブ局１００２から受信したデータをリアルタイム性を保証するデータである第２の範囲のデータと設定したが、これらのデータの範囲は任意に決めることができる。例えば、第１の範囲のデータを複数のスレーブ局Ａ、Ｂ、Ｃから受信したデータとし、第２の範囲のデータを他の複数のスレーブ局Ｄ、Ｅ、Ｆから受信したデータと設定してもよい。
【０１１１】
あるいは、データの同時性を保証するデータである第１の範囲のデータと、リアルタイム性を保証するデータである第２の範囲のデータを送信するスレーブ局の一部が重複してもよい。例えば、第１の範囲のデータをスレーブ局Ａ、Ｂ、Ｃから受信したデータとし、第２の範囲のデータをスレーブ局Ａ、Ｄ、Ｅから受信したデータと設定してもよい。この場合、第１の範囲のデータについてだけ排他制御を行っていたとして、スレーブ局Ａから受信するデータについて、第１の範囲のデータと第２の範囲のデータとを併合、修正することで、データの同時性を保証しつつ、データの欠落を低減することが可能である。
【０１１２】
また、あるいは、データの同時性を保証するデータである第１の範囲のデータを送信するスレーブ局の全部とリアルタイム性を保証するデータである第２の範囲のデータを送信するスレーブ局の全部とが重複してもよい。この場合も、第１の範囲のデータと第２の範囲のデータとを併合、修正することで、全てのスレーブ局について、データの同時性を保証しつつ、データの欠落を低減することが可能である。
【０１１３】
（変形例２）
また、同一のスレーブ局から受信したデータの一部を、データの同時性を保証するデータである第１の範囲のデータとし、その他の範囲をリアルタイム性を保証するデータである第２の範囲のデータと設定してもよい。例えば、スレーブ局Ａから、温度の計測値と、湿度の計測値とが送信されている。また、スレーブ局Ａの機器は、温度の変化にはあまり影響を受けず、湿度の変化に大きな影響を受ける機器である。この場合、温度の計測値については第１の範囲のデータに含め、湿度の計測値については第２の範囲に含めてもよい。ネットワークユニット２００は、スレーブ局Ａの受信データのヘッダ情報に基づいて、温度の計測値と、湿度の計測値とを振り分けて共有メモリに記録する。このようにして、第２の範囲のデータである湿度の計測値の抜けを低減することができ、スレーブ局Ａの機器の状態を監視するのに有効である。
【０１１４】
（変形例３）
また設定する範囲の数は、２つに限られない。第１の範囲のデータ、第２の範囲のデータ、第３の範囲のデータを設定してもよい。この場合、共有メモリ２１０には、さらに、第３データ領域を確保する。共有メモリのすべてのデータ領域にフラグを設定してもよいし、一部にフラグを設定してもよい。ＣＰＵユニット１００の内部メモリ１１０には、さらに、第３記憶部を確保する。あるいは、設定する範囲の数が４つ以上の場合も同様である。
【０１１５】
（変形例４）
上述の実施の形態１、２では、共有メモリ２１０の第２データ領域２１２を常に使用する例を説明したが、共有メモリ２１０の第２データ領域２１２を使用するか否かを設定し、使用しないと設定した場合には、共有メモリ２１０の第１データ領域２１１だけを使用してもよい。
【０１１６】
この場合、設定ツール３０１により、ＣＰＵユニット１００の設定テーブル１１３、ネットワークユニット２００の設定テーブル２２１にそれぞれネットワークユニット２００の共有メモリ２１０の第２データ領域２１２の使用の可否を示す情報を登録すればよい。ネットワークユニット２００は、受信データ書き込み処理において、設定テーブル２２１に登録された第２データ領域２１２の使用の可否を示す情報に基づいて、第２データ領域２１２に書き込む、または、書き込まないようにすればよい。また、ＣＰＵユニット１００は、第２転送処理において、設定テーブル１１３に登録された第２データ領域２１２の使用の可否を示す情報に基づいて、第２データ領域２１２のデータの転送を行う、または、データの転送を行わないようにすればよい。
【０１１７】
（変形例５）
実施の形態１、２では、共有メモリ２１０と、ＣＰＵユニット１００の内部メモリ１１０は、それぞれ第１の範囲のデータと第２の範囲のデータをそれぞれ格納する領域を有していなくてもよい。図１に示す例では、これらの領域は、第１データ領域２１１、第２データ領域２１２、第１記憶部１１１、第２記憶部１１２である。しかし、共有メモリ２１０、内部メモリ１１０にこのような領域を設けなくてもよい。例えば、ネットワークユニット２００は、受信したデータのヘッダ情報に基づいて、そのデータの送信元を示す情報とともに、受信したデータを共有メモリ２１０に書き込む。ＣＰＵユニット２００は、共有メモリ２１０から、送信元情報とともに受信データを読み出し、読み出した送信元情報と受信データとを、内部メモリ１１０に書き込めばよい。
【０１１８】
本発明は、広義の精神と範囲を逸脱することなく、様々な実施形態及び変形が可能とされるものである。また、上述した実施形態は、本発明を説明するためのものであり、本発明の範囲を限定するものではない。つまり、本発明の範囲は、実施形態ではなく、請求の範囲によって示される。そして、請求の範囲内及びそれと同等の発明の意義の範囲内で施される様々な変形が、本発明の範囲内とみなされる。
【符号の説明】
【０１１９】
１，２  ＰＬＣ、１００  ＣＰＵユニット、１１０  内部メモリ、１１１  第１記憶部、１１２  第２記憶部、１１３  設定テーブル、１１４  ユーザプログラム、１２０  設定ツールインタフェース、１３０  共有バスインタフェース、１４０  演算部、１４１  プログラム実行部、１４２  第１転送部、１４３  第２転送部、１９０  バス、２００  ネットワークユニット、２１０  共有メモリ、２１１  第１データ領域、２１２  第２データ領域、２１３  第１フラグ、２１４  第２フラグ、２２０  内部メモリ、２２１  設定テーブル、２３０  共有バスインタフェース、２４０  ネットワークインタフェース、２５０  受信バッファ、２６０  演算部、２６１  データ受信部、２６２  受信データ書き込み部、２７０  設定ツールインタフェース、２９０  バス、３００  共有バス、３０１  設定ツール、１０００  ネットワーク、１００１  第１スレーブ局、１００２  第２スレーブ局
【図１】
2019142288.tif 000003
【図２Ａ】
2019142288.tif 000004
【図２Ｂ】
2019142288.tif 000005
【図２Ｃ】
2019142288.tif 000006
【図３】
2019142288.tif 000007
【図４Ａ】
2019142288.tif 000008
【図４Ｂ】
2019142288.tif 000009
【図５】
2019142288.tif 000010
【図６】
2019142288.tif 000011
【図７】
2019142288.tif 000012
【図８】
2019142288.tif 000013
【図９】
2019142288.tif 000014
【国際調査報告】
2019142288.tif 000015
2019142288.tif 000016