(57)【要約】【課題】各プログラマブルコントローラにおける共有変数データのコモンメモリへの転送を容易に実現させる。【解決手段】コンパイラ部１２は、コンパイル処理の際に、ソースコード１４の各変数に内部メモリ２５の任意のアドレスを割当てると共に、これら各変数のなかで共有変数に関しては更にコモンメモリ２１の任意のアドレスを割り当てて、これらアドレス割当情報と各変数が共有変数であるか否かを示す情報を含む変数情報管理表１７を生成する。ＰＬＣ２０の転送処理部２４この変数情報管理表を用いて、上記各変数のなかで共有変数のデータは、内部メモリ２５からコモンメモリ２１へ転送する。【選択図】図１
2015215865.tif 000002
【特許請求の範囲】
【請求項１】
各々が内部メモリとコモンメモリを有する複数のプログラマブルコントローラがネットワークに接続されており、該複数のプログラマブルコントローラが前記コモンメモリの格納データを共有するシステムであって、
任意の前記プログラマブルコントローラに対応して、そのプログラムのソースコードを任意に作成させる支援装置を更に有し、
該支援装置は、
前記ソースコードをコンパイルするコンパイル手段を有し、
該コンパイル手段は、
前記コンパイルの際に、前記ソースコードの各変数に前記内部メモリの任意のアドレスを割当てると共に、該内部メモリの割当アドレスとその変数が共有変数であるか否かを示す情報を含む変数情報を生成する変数情報作成手段と、
前記変数情報の各共有変数毎に、前記コモンメモリの任意のアドレスを割り当てて、該コモンメモリの割当アドレスを前記変数情報に前記内部メモリの割当アドレスに対応付けて追加記録するコモンメモリ割当手段とを有し、
前記プログラマブルコントローラは、
前記変数情報に基づいて、前記内部メモリに格納される前記各変数のデータのうち、前記共有変数のデータを前記コモンメモリの割当アドレスへ転送・格納する転送処理手段を有することを特徴とするプログラマブルコントローラシステム。
【請求項２】
前記変数情報には更に前記各変数のデータ型が含まれており、
前記コモンメモリ割当手段は、予め設定される所定アドレスと、前記各共有変数の前記データ型とに基づいて、前記各共有変数の前記コモンメモリの割当アドレスを決定することを特徴とする請求項１記載のプログラマブルコントローラシステム。
【請求項３】
前記支援装置は、
各タスクに対する任意の前記プログラムの割り当て情報を含むタスク情報を生成させるタスク情報生成手段を更に有し、
前記転送処理手段は、前記タスク情報と前記変数情報とに基づいて、任意のタスク実行完了時に、そのタスクに係わるプログラムの前記共有変数のデータを、前記内部メモリから前記コモンメモリの割当アドレスへ転送・格納することを特徴とする請求項１記載のプログラマブルコントローラシステム。
【請求項４】
前記変数情報には、更に、その変数に係わるタスクの情報が含まれており、
前記コモンメモリ割当手段は、各タスク毎に、そのタスクに係わる各共有変数に対して前記コモンメモリの任意のアドレスの割り当てを行うことを特徴とする請求項１記載のプログラマブルコントローラシステム。
【請求項５】
前記コモンメモリの同じ記憶領域を複数のタスクで共有させる形で前記共有変数のアドレス割当てが行われることを特徴とする請求項４記載のプログラマブルコントローラシステム。
【請求項６】
前記コモンメモリ割当手段は、同じタスクに係わる共有変数に関しては相互に異なるアドレスを割当てるが、任意の複数の共有変数が相互に異なるタスクに係わる共有変数である場合には該複数の共有変数に対して同一のアドレスを割当てる場合もあることを特徴とする請求項５記載のプログラマブルコントローラシステム。
【請求項７】
前記プログラマブルコントローラの前記転送処理手段は、
任意のタスクの処理を実行すると、前記変数情報に基づいて、前記内部メモリに格納される前記各変数のデータのうち、該実行したタスクに係わる前記共有変数のデータを、前記コモンメモリの割当アドレスへ転送・格納することを特徴とする請求項４〜６の何れかに記載のプログラマブルコントローラシステム。
【請求項８】
前記転送処理手段は、前記実行したタスクを示す情報も一緒に前記コモンメモリへ転送・格納することを特徴とする請求項７記載のプログラマブルコントローラシステム。
【請求項９】
他のプログラマブルコントローラは、自己のコモンメモリに現在格納されているデータが、どのタスクに係わる共有変数のデータであるのかを、前記コモンメモリに格納される前記実行したタスクを示す情報によって判別することを特徴とする請求項７または８記載のプログラマブルコントローラシステム。
【請求項１０】
各々が内部メモリとコモンメモリを有する複数のプログラマブルコントローラがネットワークに接続されており、該複数のプログラマブルコントローラが前記コモンメモリの格納データを共有するシステムにおける、任意の前記プログラマブルコントローラに対応して、そのプログラムのソースコードを任意に作成させる支援装置であって、
前記ソースコードをコンパイルするコンパイル手段を有し、
該コンパイル手段は、
前記コンパイルの際に、前記ソースコードの各変数に前記内部メモリの任意のアドレスを割当てると共に、該内部メモリの割当アドレスとその変数が共有変数であるか否かを示す情報を含む変数情報を生成する変数情報作成手段と、
前記変数情報の各共有変数毎に、前記コモンメモリの任意のアドレスを割り当てて、該コモンメモリの割当アドレスを前記変数情報に前記内部メモリの割当アドレスに対応付けて追加記録するコモンメモリ割当手段とを有することを特徴とするプログラマブルコントローラシステムの支援装置。
【請求項１１】
各々が内部メモリとコモンメモリを有する複数のプログラマブルコントローラがネットワークに接続されており、該複数のプログラマブルコントローラが前記コモンメモリの格納データを共有するシステムにおける該プログラマブルコントローラであって、
任意のプログラムを実行するプログラム実行手段と、
任意の外部装置で作成された、前記プログラムに係わる各共有変数毎の、前記内部メモリの割当アドレスと前記コモンメモリの割当アドレスとを含む変数情報に基づいて、前記内部メモリに格納される前記各変数のデータのうち、前記共有変数のデータを前記コモンメモリの割当アドレスへ転送・格納する転送処理手段を有することを特徴とするプログラマブルコントローラ。
【請求項１２】
前記転送処理手段は、任意のタスク実行完了時に、そのタスクに関して前記プログラム実行手段で実行されたプログラムの前記共有変数のデータを、前記内部メモリから前記コモンメモリの割当アドレスへ転送・格納することを特徴とする請求項１１記載のプログラマブルコントローラ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のプログラマブルコントローラ間でのデータ連携をコモンメモリ経由で実施するシステムに関する。
【背景技術】
【０００２】
複数のプログラマブルコントローラ（ＰＬＣ）間でデータを連携する方法として、コモンメモリ経由で他のＰＬＣのデータを参照する方法がある。例えば、特許文献１において従来の技術として、この様なコモンメモリ方式が説明されている。そして、特許文献１の場合、連携するデータ量が多くなるとデータ転送処理の負荷が増加する。
【０００３】
この様な問題に対して、負荷を抑制する方式として、例えば特許文献１の発明では、常にすべてのコモンメモリのデータを転送するのではなく、必要な分だけ指定してデータ転送を実施する。すなわち、コモンメモリ方式により他装置とデータの授受を行うデータ伝送装置において、コモンメモリ上で他装置がデータを書き込むエリアのなかで、プログラマブルコントローラ側で必要なデータのみを提供するデータ提供手段を提供している。当該必要なデータのみ提供することは、プログラマブルコントローラがデータ伝送装置に対して、例えば「コモンメモリ２５Ａのアドレスｍ番地からｎワード分を転送」等と通知することで実現される。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００２−２９７２１０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
上記特許文献１の発明では、上記必要なデータのコモンメモリ２５Ａ上での格納領域を、例えばユーザ等が認識していて予め設定する必要がある。
また、上記特許文献１の発明では、コモンメモリに係わるデータ転送の領域の指定の仕組みの提供だけであり、内部のデータの配置（後述する内部メモリへの変数のアドレス割り付け等）については、何等考慮されていない。また、別の観点から言えば、特許文献１の発明は、受信側としての動作に係わるものであり、送信側としての動作に係わるものではない。これらについて、以下、更に詳しく説明する。
【０００６】
まず、上記コモンメモリ方式により他装置と授受するデータは、複数のプログラマブルコントローラ間でのデータ連携を実施する為のデータであり、共有データ（共有変数に係わるデータ）等と呼ばれる。複数のプログラマブルコントローラが、それぞれ、他コントローラのコモンメモリの格納データ（共有データ）を利用する。
【０００７】
また、プログラマブルコントローラのアプリケーションで扱う各種変数データの全てが、共有データとなるわけではない。例えば各種変数が大別してローカル変数とグローバル変数に分類される例では、通常、グローバル変数が共有変数として扱われ、ローカル変数は共有変数とはならない。
【０００８】
プログラマブルコントローラには、上記アプリケーション実行に伴って上記各種変数データが格納・更新される内部メモリが備えられており、通常、この内部メモリには上記各ローカル変数のデータと、上記各グローバル変数のデータとが、混在して格納される。これより、内部メモリから各グローバル変数のデータだけをコモンメモリに転送する必要がある。これは、上記特許文献１の構成の場合、グローバル変数に属する各変数のデータだけを、伝送装置用メモリエリア４内の送信データエリアに、転送して格納させる必要があることになる。
【０００９】
従来では、上記動作を実現させる為に、予めユーザ等が上記内部メモリ上での各グローバル変数の格納アドレスを認識したうえで、手作業で、必要な設定やプログラマミング等を行う必要があり、非常に手間が掛かっていた。
【００１０】
近年ではＰＬＣで扱うデータ量が飛躍的に増加しているため、共有データのアドレス割り付けを考慮しながらプログラミングすることは、ユーザのエンジニアリング作業量の増加、複雑化する課題がある。
【００１１】
本発明の課題は、各々がコモンメモリを有する複数のプログラマブルコントローラがネットワークに接続されたシステムに関して、共有変数データのコモンメモリへの転送を容易に実現させるプログラマブルコントローラシステム等を、提供することである。
【課題を解決するための手段】
【００１２】
本発明のプログラマブルコントローラシステムは、各々が内部メモリとコモンメモリを有する複数のプログラマブルコントローラがネットワークに接続されており、該複数のプログラマブルコントローラが前記コモンメモリの格納データを共有するシステムであって、下記の各構成を有する。
【００１３】
まず、任意の前記プログラマブルコントローラに対応して、そのプログラムのソースコードを任意に作成させる支援装置を更に有する。
上記支援装置は、前記ソースコードをコンパイルするコンパイル手段を有する。
【００１４】
そして、該コンパイル手段は、下記の各構成を有する。
・前記コンパイルの際に、前記ソースコードの各変数に前記内部メモリの任意のアドレスを割当てると共に、該内部メモリの割当アドレスとその変数が共有変数であるか否かを示す情報を含む変数情報を生成する変数情報作成手段；
・前記変数情報の各共有変数毎に、前記コモンメモリの任意のアドレスを割り当てて、該コモンメモリの割当アドレスを前記変数情報に前記内部メモリの割当アドレスに対応付けて追加記録するコモンメモリ割当手段。
【００１５】
また、前記プログラマブルコントローラは、前記変数情報に基づいて、前記内部メモリに格納される前記各変数のデータのうち、前記共有変数のデータを前記コモンメモリの割当アドレスへ転送・格納する転送処理手段を有する。
【発明の効果】
【００１６】
本発明のプログラマブルコントローラシステム等によれば、各々がコモンメモリを有する複数のプログラマブルコントローラがネットワークに接続されたシステムに関して、各プログラマブルコントローラにおける共有変数データのコモンメモリへの転送を容易に実現させることができる。特に、共有変数データのコモンメモリへの転送処理の為のユーザの作業負担を軽減できる。この転送処理は、特に、共有変数データだけでなく他の変数データも混在して格納される内部メモリから、共有変数データをコモンメモリに転送させる処理である。
【図面の簡単な説明】
【００１７】
【図１】本例のプログラマブルコントローラ・システムの構成・機能図である。
【図２】（ａ）、（ｂ）は、ＰＬＣプログラムに係わる各変数の定義情報の一例である。
【図３】図２（ｂ）の例に応じた、内部メモリへの変数割当て結果例である。
【図４】図２（ｂ）の例に応じた変数情報管理表の具体例である。
【図５】コンパイラ部によるコモンメモリにおけるアドレス割当て処理の処理フローチャート図である。
【図６】図４の例に対して図５の処理を実行した後の変数情報管理表の状態を示す図である。
【図７】コモンメモリに対する共有変数のアドレス割当ての具体例である。
【図８】（ａ）、（ｂ）は、タスクに関する設定情報の一例を示す図である。
【図９】実施例２のプログラマブルコントローラ・システムの構成・機能図である。
【図１０】変数情報管理表（未完成）の具体例を示す図である。
【図１１】実施例２のコンパイラ部によるコモンメモリのアドレス割当て処理の処理フローチャート図である。
【図１２】（ａ）〜（ｃ）は、実施例２におけるコモンメモリのデータ格納例である。
【図１３】図１２との比較の為、実施例１のコモンメモリのデータ格納例を示す図である。
【図１４】変数情報管理表（完成）の具体例を示す図である。
【図１５】共有変数コモンメモリ割付情報の具体例を示す図である。
【図１６】送信側の転送処理実行タイミングを示す図である。
【発明を実施するための形態】
【００１８】
以下、図面を参照して、本発明の実施の形態について説明する。
図１は、本例のプログラマブルコントローラ・システムの構成・機能図である。
本システムは、コンピュータ上で動作する開発環境を有する。開発環境とは、例えば図示の開発支援装置（ローダ）１０である。開発支援装置１０は、ユーザに任意のプログラムのソースコードを作成させる為の既存のインタフェース機能部１１を有する。更に、ユーザが作成したソースコードをターゲット上で動作する機械語オブジェクトに変換するコンパイラ機能を有する。また、生成された機械語オブジェクトをターゲットに送信する通信機能を有する。尚、ターゲットとは、例えば、図示のＰＬＣ２０である。
【００１９】
尚、本説明では、プログラマブルコントローラを略してＰＬＣと記す場合もあるものとする。
本例のＰＬＣシステムは、各々がコモンメモリ２１を有する複数のＰＬＣ（プログラマブルコントローラ）２０と、このＰＬＣ２０用のプログラムをユーザが任意に作成できるように支援する機能等を有する開発支援装置（ローダ）１０を有する。本例のＰＬＣシステムは、複数のプログラマブルコントローラ２０間でのデータ連携をコモンメモリ２１経由で実施する。換言すれば、本例のＰＬＣシステムは、上記コモンメモリ方式のシステムである。つまり、複数のプログラマブルコントローラがコモンメモリ２１の格納データを共有するシステムである。各コントローラは、他のコントローラのコモンメモリ２１の格納データを参照する。上記の通り、例えば共有変数のデータが、コモンメモリ２１に格納される。
【００２０】
上記ＰＬＣ２０用のプログラムは、ＰＬＣプログラム等と呼ぶが、上記のようにユーザが任意に作成できること等から、ユーザプログラム等と呼ばれる場合もある。また、当該ユーザプログラムの一例が、ＰＬＣ２０の制御プログラム等である。尚、制御プログラムは、ＰＬＣが不図示の各種制御対象機器を制御する為のプログラム等である。
【００２１】
開発支援装置（ローダ）１０は、インタフェース機能部１１、コンパイラ部１２、通信機能部１３等の各種機能部等を有し、また不図示の記憶部等を有する。また、ユーザに上記任意のユーザプログラム等を作成させるための画面等を表示するディスプレイや、キーボード／マウス等の入力装置等も有する。また、特に図示しないが、開発支援装置（ローダ）１０は、ＣＰＵ／ＭＰＵ等の演算処理プロセッサも有している。
【００２２】
また、上記不図示の記憶部は、例えばハードディスク、メモリ等である。この記憶部には、予め不図示のアプリケーションプログラムが記憶されている。上記不図示のＣＰＵ／ＭＰＵ等が、このアプリケーションプログラムを読み出し・実行することにより、上記各種機能部１１，１２、１３の機能等が実現される。
【００２３】
また、不図示の記憶部には、図示の各種データ／プログラム等が記憶される。
すなわち、不図示の記憶部には、ユーザによって作成された任意のユーザプログラムのソースコード１４、このソースコード１４をコンパイラ部１２によってコンパイルした結果である機械語オブジェクト１６等が格納される。更に、不図示の記憶部には、図示のソースコード識別番号対応表１５、変数情報管理表１７、タスク情報１８等が、記憶される。但し、ソースコード識別番号対応表１５は、本手法には関係ないので、説明しない。
【００２４】
インタフェース機能部１１は、上記の通り、ユーザに任意のユーザプログラム（そのソースコード１４）を作成させるように支援する機能部であり、既存の構成であるので、ここでは特に説明しない。尚、ソースコード１４は、新規作成されたもの、あるいは既存のソースコードの更新／修正版等である。また、通信機能部１３も、不図示の通信線を介してＰＬＣ２０や他の開発支援装置１０との通信を行う既存の機能部であるので、ここでは特に説明しない。
【００２５】
コンパイラ部１２は、基本的には、ユーザによって任意に作成されたユーザプログラム（そのソースコード１４）を、コンパイルして機械語プログラム（機械語オブジェクト１６）に変換する機能部である。その際に、ユーザプログラムの各変数に、ＰＬＣ２０の内部メモリ２５の任意のアドレスを割り当てる。この様なコンパイル機能自体は既存の機能である。但し、本例のコンパイラ部１２は、更に、図示の変数情報管理表１７等を生成する処理等も行う。詳しくは後述する。
【００２６】
尚、上記機械語オブジェクト１６は、上記通信機能部１３によってＰＬＣ２０にダウンロードされる。ＰＬＣ２０は、このダウンロードされた機械語プログラムを、図示の機械語オブジェクト２７として記憶する。尚、通信機能部１３によってＰＬＣ２０にダウンロードされるプログラム／データは、後述するように、機械語オブジェクト１６に限らない。
【００２７】
ＰＬＣ２０は、内部メモリ２５とコモンメモリ２１を備えるプログラマブルコントローラである。内部メモリ２５は、ユーザプログラム（機械語オブジェクト２７）の実行に伴ってその各変数のデータが格納・更新されるメモリであり、プログラマブルコントローラの一般的な構成である。そして、本例のＰＬＣ２０は、更にコモンメモリ２１も備える。コモンメモリ２１には、複数のＰＬＣ２０で共有するデータが格納されるものであり、共有変数のデータが格納されるものと言える。
【００２８】
これより、内部メモリ２５に格納される各変数のデータのなかで共有変数のデータをコモンメモリ２１に転送して格納する必要がある。本手法では、この様な処理の為のユーザの作業負担を、軽減できることになる。詳しくは後述する。尚、これは、送信側としての処理であり、受信側としての処理については、必ずしもコモンメモリ２１から内部メモリ２５へデータ転送する必要はなく、コモンメモリ２１の格納データを直接参照するようにしてもよい。尚、受信側としての処理では、コモンメモリ２１における他コントローラ２０のデータを、参照することになる。
【００２９】
ＰＬＣ２０は、プログラム実行管理機能部２３、通信機能部２２、転送処理部２４等の各種機能部を有する。また、特に図示しないが、ＰＬＣ２０は、図示の各メモリ２５，２１以外の不図示の記憶部や、不図示のＣＰＵ／ＭＰＵ等の演算処理プロセッサも有している。尚、逐一述べないが、開発支援装置１０との通信処理は、図示の通信機能部２２と、開発支援装置１０の通信機能部１３とによって行われる。
【００３０】
不図示の記憶部には、予め不図示のアプリケーションプログラムが記憶されている。上記ＣＰＵ／ＭＰＵ等が、このアプリケーションプログラムを読み出し・実行することにより、上記各種機能部２２，２３，２４の機能処理が実現される。
【００３１】
通信機能部２２は、上記開発支援装置１０との通信を行って、例えば上記ダウンロードされる機械語オブジェクト１６の受信を行い、これを図示の機械語オブジェクト２７として上記不図示の記憶部に記憶する。
【００３２】
ＰＬＣ２０では、プログラム実行管理機能部２３が、機械語オブジェクト２７を実行することで、例えば制御対象の各種機器を制御する。ここで、この機械語オブジェクト２７の実行に伴って、内部メモリ２５の各変数のデータが更新される。つまり、上記コンパイルの際に各変数には内部メモリ２５における任意の記憶領域が割り当てられており、機械語オブジェクト２７の実行に伴って、これら各割当領域の格納データが更新される場合があることになる。そして、共有変数に係わる格納データについては、コモンメモリ２１にデータ転送して、コモンメモリ２１の格納データも更新させる必要がある。これより、他のコントローラ２０も、更新後のデータを参照／利用できることになる。
【００３３】
ここで、本例のＰＬＣ２０は、転送処理部２４を備える。転送処理部２４は、図示の変数情報管理表２６等を用いて、内部メモリ２５の格納データのなかで、コモンメモリ２１に転送・格納させるべきデータを判別して、これをコモンメモリ２１に転送する。これについては後述するが、変数情報管理表２６は、上記開発支援装置１０で生成された変数情報管理表１７が、ＰＬＣ２０にダウンロードされて記憶されたものである。尚、機械語オブジェクト２７や変数情報管理表２６は、不図示の記憶部に記憶される。
【００３４】
ここで、以下、上記コンパイラ部１２による上記変数情報管理表１７の生成処理について説明する。これについて、まず、この生成処理を実現する為に事前に行うことについて説明する。
【００３５】
まず、一例としては、ユーザが、ソースコード１４の変数宣言部分において、例えば図２（ａ）に示すような記述を行っておく。すなわち、各変数毎に、図示のように変数名、型、アドレス等を定義すると共に、更に各種属性情報を定義する。尚、アドレスは、ＰＬＣ２０の内部メモリ２５において当該変数のデータ格納領域として割当てるアドレスである。但し、アドレスは、ユーザが指定する方法に限らず、コンパイラ部１２が自動的に割り当てる方式であってもよい。
【００３６】
そして、上記各種属性情報として、図示の例では一例として「保持」や「共有」を示してある。このうち、「保持」は既存の属性情報であり本手法には特に関係しないので、説明しないものとする。「共有」は、本手法の為に新たに追加される属性情報であり、その変数が共有変数（共有データに係わる変数）であるか否かを示すフラグ等である。ここでは、フラグＯＮの場合には共有変数であり、フラグＯＦＦの場合には共有変数ではないことを意味するものとするが、この例に限らない。
【００３７】
あるいは、上記図２（ａ）の例に限らず、ソースコード１４とは別に、例えば図２（ｂ）に示すような共有変数宣言情報３０が、事前にユーザによって任意に作成されていてもよい。共有変数宣言情報３０は、各ユーザプログラムで使用する各変数に関して所定の設定が行われたものであり、図示の例では、プログラム名３１、変数名３２、データ型３３、共有変数３４から成る。
【００３８】
プログラム名３１はユーザプログラムの識別情報（名称等）であり、このユーザプログラムで使用する変数の名称等が変数名３２に設定される。また、変数名３２の変数のデータ型等がデータ型３３に設定されると共に、この変数が共有変数であるか否かが共有変数３４に設定される。尚、共有変数とは、複数のＰＬＣ２０で共有する変数であり、上記の通り一例は例えばグローバル変数である。そして、共有変数データは、コモンメモリ２１に格納すべき変数データであるとも言える。
【００３９】
尚、図では、図示の「共有する」が、共有変数であることを意味している。
一例としては、例えばディスプレイ上に図２（ｂ）に示す共有変数宣言情報３０の入力画面が表示され（但し、図示の各種データは未だ設定されていない）、この入力画面上でユーザが所望のデータを入力することで、共有変数宣言情報３０が作成される。
【００４０】
ここで、上記コンパイラ部１２は、上記ソースコード１４のコンパイル処理の際に、上記変数宣言された各変数に対して、内部メモリ２５内の任意の記憶領域を割り当てる。この処理自体は既存の処理であり、例えば図２（ｂ）の例に応じた内部メモリ２５における変数割当て結果例を図３に示すが、これについては特に説明しない。
【００４１】
コンパイラ部１２は、更に、上記変数宣言／共有変数宣言情報３０や、メモリ割当て結果等を用いて、変数情報管理表１７を生成する。
図４に、上記図２（ｂ）の共有変数宣言情報３０の例に応じた変数情報管理表１７の例を示す。但し、この状態では変数情報管理表１７は未だ完成していない。
【００４２】
図示の例では、変数情報管理表１７は、管理ＩＤ４１、プログラム名４２、変数名４３、データ型４４、「ＰＬＣ内メモリのアドレス」４５、共有変数４６、「コモンメモリへのデータ格納先アドレス」４７等の各データ項目を有する。尚、これらのうち、共有変数４６及び「コモンメモリへのデータ格納先アドレス」４７以外のデータ項目は、既存のデータ項目と見做しても良い。つまり、従来でも変数情報管理表１７の一部は作成していたと見做しても構わない。
【００４３】
上記変数情報管理表１７の作成方法は、例えば上記共有変数宣言情報３０に基づいて、各変数の変数名３２、データ型３３、共有変数３４を、変数名４３、データ型４４、共有変数４６に格納すると共に、その変数に割り当てた内部メモリ２５の記憶領域のアドレスを「ＰＬＣ内メモリのアドレス」４５に格納する。つまり、「ＰＬＣ内メモリのアドレス」４５は、変数名４３の変数の内部メモリ２５における割当アドレスである。また、変数名４３の変数を使用するプログラムのプログラム名３１が、プログラム名４２に格納される。
【００４４】
尚、管理ＩＤ４１は、上記変数情報管理表１７の各レコードに任意に割り当てられる識別番号等であり、例えばシリアル番号等である。
以上のように、「コモンメモリへのデータ格納先アドレス」４７以外のデータ項目については、上記共有変数宣言情報３０やアドレス割当結果等に基づいて、上記各データが格納される。尚、逐一述べないが、この様なコンパイル処理に係わる各種処理は、基本的に、コンパイラ部１２が実行するものである。そして、コンパイラ部１２は、更に、「コモンメモリへのデータ格納先アドレス」４７についてもデータ登録する。つまり、他のＰＬＣ２０とデータを共有する変数（共有変数）については、コモンメモリ２１についても、データ格納領域を割り当てる。この処理の一例を、図５に示す。
【００４５】
図５は、コンパイラ部１２によるコモンメモリにおけるアドレス割当て処理の処理フローチャート図である。
また、図６には、上記図４の例に対して図５の処理を実行した後の変数情報管理表１７の状態を示す。
【００４６】
図５の処理例では、上記変数情報管理表１７を用いて、その各レコードを順次処理対象としてステップＳ１３〜Ｓ１７の処理を繰り返し実行する。最初の処理対象は、例えば、変数情報管理表１７の先頭レコード（管理ＩＤ４１＝‘１’のレコード）に設定する（ステップＳ１１）。更に、“割付先コモンメモリ”の初期値を設定する。これは、例えば、コモンメモリ２１の該当記憶領域の先頭アドレス（本例では‘０’とする）が、予め登録されており、これを“割付先コモンメモリ”の初期値に設定する（ステップＳ１２）。
【００４７】
尚、上記コモンメモリ２１の該当記憶領域とは、例えば特許文献１の図３に示す「自装置データ」の領域である。
そして、上記処理対象レコードに基づいて、まず、当該処理対象の変数が、共有変数であるか否かを、共有変数４６から判定する（ステップＳ１３）。そして、共有変数である場合には（ステップＳ１３，ＹＥＳ）、処理対象レコードの「コモンメモリへのデータ格納先アドレス」４７に、現在の“割付先コモンメモリ”の値を格納する（ステップＳ１４）。本例では上記先頭レコードに関してはステップＳ１３の判定がＹＥＳとなり、更に、上記の通り“割付先コモンメモリ”の初期値は‘０’であるので、図６に示すように先頭レコードの「コモンメモリへのデータ格納先アドレス」４７には‘０’が格納されることになる。
【００４８】
そして、“割付先コモンメモリ”の値を更新する。これは、まず処理対象レコードのデータ型４３から、当該データ型に応じたサイズを求めて、このサイズを現在の“割付先コモンメモリ”に加算する（ステップＳ１５）。つまり、
“割付先コモンメモリ”＝“割付先コモンメモリ”＋サイズ
によって、“割付先コモンメモリ”の値を更新する。
【００４９】
尚、特に図示しないが、予め、各データ型毎に、それに対応するサイズが登録されている。
そして、次の処理対象レコードを決定して（ステップＳ１６）、ステップＳ１３に戻る。但し、次の処理対象レコードが無い場合には（ステップＳ１７，ＮＯ）、本処理を終了する。尚、上記ステップＳ１３の判定がＮＯの場合には、そのままステップＳ１６の処理へ移行する。
【００５０】
上記図５の処理によって変数情報管理表１７は例えば図６に示す状態となり、以って変数情報管理表１７が完成したことになる。
尚、図６に示す例の場合、コモンメモリ２１における各共有変数のアドレス割当て結果は、例えば図７に示すようになる。図６の例の場合、図７に示すように、変数１、変数３、変数５、変数７について、それぞれ、コモンメモリ２１内の所定のデータ格納領域が、割付けられることになる。そして、これら各変数に係わる内部メモリ２５の格納データが、コモンメモリ２１内の所定のデータ格納領域に、転送・格納されることになる。その一方で、変数２、変数４、変数６、変数８に関しては、コモンメモリ２１への割当ては行われない。変数２、変数４、変数６、変数８は、共有変数ではないので（例えばローカル変数であるので）、これで正しいことになる。
【００５１】
そして、開発支援装置１０は、例えば、完成した変数情報管理表１７を、ＰＬＣ２０にダウンロードして、上記変数情報管理表２６として記憶させる。ＰＬＣ２０側では、転送処理部２４が、例えば変数情報管理表２６に基づいて、内部メモリ２５の各変数データのうち、共有変数に係わるデータのみを、コモンメモリ２１内の所定のデータ格納領域に、転送・格納させる。図６の例の場合、例えば変数７に関しては、内部メモリ２５のアドレス‘７’の格納データを、コモンメモリ２１のアドレス‘３’へ転送・格納することになる。
【００５２】
尚、上記の例に限らない。例えば、変数情報管理表１７をＰＬＣ２０にダウンロードする代わりに、変数情報管理表１７に基づいて転送用プログラムを生成して、この転送用プログラムをＰＬＣ２０にダウンロードするようにしてもよい。この例の場合、ＰＬＣ２０側では、転送処理部２４は、この転送用プログラムを実行することで、上記コモンメモリ２１への変数データ転送処理を実現する。
【００５３】
転送用プログラムは、例えば予め登録された所定の雛形に、上記変数情報管理表１７の所定データを当て嵌めることで、生成される。所定の雛形とは、例えば下記のものである。
【００５４】
％ＭＷ１６．＊  ：＝  変数名
変数情報管理表１７の各レコードのなかで共有変数に係わる各レコード毎に、その変数名４３を上記雛形の変数名に当て嵌め、その「コモンメモリへのデータ格納先アドレス」４７を上記雛形の＊に当て嵌めることで、転送用プログラムが生成される。これより、この例の場合、図６に示す例に応じて、例えば下記のような転送用プログラムが生成されることになる。
【００５５】
％ＭＷ１６．０  ：＝  変数１
％ＭＷ１６．１  ：＝  変数３
％ＭＷ１６．２  ：＝  変数５
％ＭＤ１６．３  ：＝  変数７
尚、この例の場合、ＰＬＣ２０側では、各変数の内部メモリ２５における割当アドレスは、変数名が分かれば判別できるものとする。
【００５６】
既存の機能により、コモンメモリ２１の各格納データは、制御ＬＡＮの機能によって、制御ＬＡＮ１に接続した他のＰＬＣ２０でも参照することができる。これに関して、複数のＰＬＣ２０間でデータ連携する仕組みについては、一般的なことであり、例えば上記特許文献１等に開示されているので、ここでは特に説明しない。但し、簡単に説明するならば、例えば上記コモンメモリ２１のアドレス‘３’の格納データは、制御ＬＡＮ１を介して他のＰＬＣ２０へ転送されて、当該他のＰＬＣ２０のコモンメモリ２１に格納される。格納位置は、通常、同じアドレス、すなわちアドレス‘３’となるようにしている。
【００５７】
ここで、他のＰＬＣ２０側では、例えば、上記コモンメモリ２１のアドレス‘３’の格納データが、変数７に係わるデータであることを認識する必要がある。その為に、開発支援装置１０は、上記生成した変数情報管理表１７あるいは転送用プログラムを、他の開発支援装置１０にも送信するようにしてもよい。尚、開発支援装置１０は、例えば各ＰＬＣ２０毎に対応させて設けられていてもよく、図１では図示のＰＬＣ１に対応する開発支援装置１０のみ示すが、他にも例えば図示のＰＬＣ２に対応する不図示の開発支援装置１０も設けられていてもよい。そして、例えば、各開発支援装置１０同士は、不図示のネットワークを介して、通信可能な構成となっている。
【００５８】
上記生成した変数情報管理表１７あるいは転送用プログラムを受信した他の開発支援装置１０側では、例えば、これらの受信した情報／プログラムを参照することで、各共有変数のコモンメモリ２１上の割当アドレスを認識できるので、これに基づいて自己のユーザプログラムを作成できる。例えば変数７のデータを参照・利用するユーザプログラムを作成する場合、コモンメモリ２１におけるアクセス先アドレスを上記アドレス‘３’に設定できることになる。
【００５９】
但し、この例に限らない。例えば図１に示す開発支援装置１０は、図示のＰＬＣ１だけでなくＰＬＣ２のプログラムも作成させるものであってもよい。つまり、任意の１台の開発支援装置１０が、複数のＰＬＣ２０に対応して設けられていても良い。
【００６０】
また、上記転送処理部２４によるデータ転送処理は、例えば任意のタスク実行完了毎に行うようにする。そして、その際、実行完了したタスクに係わるプログラムに係わる共有変数データのみを、転送対象とする。これによって、データ転送量を削減できる。この様な処理について、以下、説明する。
【００６１】
まず、ＰＬＣ２０におけるタスク管理について、既存の一般的な方式について以下に説明する。
図８（ａ）、（ｂ）に、タスクに関する設定情報の一例を示す。
【００６２】
例えば図８（ａ）に示すように、一般的に、タスクには、優先順位、タスクの種類（定周期、イベント、デフォルト）の設定がある。優先順位は、タスク間でどのタスクを優先して実行するかを指定する。タスクの種類が、定周期の場合、設定した周期で、タスクに登録されたプログラムを実行する。イベントの場合は、イベントとして登録された変数の立ち上がりで、タスクに登録されたプログラムを実行する。デフォルトは、一番低い優先度であり、他のタスクで実行するプログラムが存在しない場合に、登録されたプログラムを実行する。
【００６３】
図８（ａ）の例では、タスクが４つ設定されてある。タスク名の定周期１は、優先度１、定周期は200msでプログラムを実行する。イベント１は、優先度３、イベントで、FLGの値が、FLASEからTRUEに変更になった場合に、プログラムを実行する。
【００６４】
上記タスクの設定情報は、例えば開発支援装置１０側でユーザによって任意に作成されて、ＰＬＣ２０に転送されて保持される。そして、ＰＬＣ２０側では、この設定情報に従って、各タスクに係わるプログラム等を実行する。
【００６５】
ここで、各タスクに対して、そのタスクに係わる任意のプログラムが、登録されている。その一例を図８（ｂ）に示す。これは、例えば、開発支援装置１０側でユーザによる任意の登録作業によって作成されるものである。
【００６６】
ユーザは、例えば、任意のユーザプログラムを作成する毎に、このユーザプログラムを所望のタスクに関連付けて登録する。図８（ｂ）の例では、タスク「定周期１」に関してはプログラム１とプログラム２とが登録されている。タスク「定周期２」に関しては、プログラム３が登録されている。タスク「デフォルト」に関しては、プログラム４が登録されている。タスク「イベント１」に関しては、プログラムは登録されていない。
【００６７】
例えば図１に示すタスク情報１８の一例が、上記図８（ａ）、（ｂ）に示す情報である。そして、図１には示していないが、タスク情報１８は、ＰＬＣ２０にダウンロードして保持させるようにしてもよい。
【００６８】
そして、転送処理部２４は、上記変数情報管理表２６等だけでなく、更に、上記タスク情報１８も用いて、コモンメモリ２１への変数データ転送処理を実行するようにしてもよい。これは、任意のタスクを実行完了する毎に、そのタスクに関連するプログラムを、上記タスク情報１８を参照して判別する。そして、更に、変数情報管理表２６を参照することで、このタスクに関連するプログラムに係わる共有変数を判別し、この共有変数の内部メモリ２５における割当アドレスを判別する。これによって、上記実行完了したタスクに係わる共有変数のデータのみを、内部メモリ２５からコモンメモリ２１へ転送する。
【００６９】
例えば、タスク「定周期２」を実行完了した場合には、図８（ｂ）の例の場合、このタスクに関連するのはプログラム３である。よって、変数情報管理表２６より、プログラム３に係わる共有変数は変数７であると判別できるので、変数７のデータのみを内部メモリ２５からコモンメモリ２１へ転送する。
【００７０】
内部メモリ２５における各変数のデータは、基本的に、その変数に係わるプログラムが実行されていないならば、変更されていないはずである。従って、上記例の場合、変数７以外の他の変数のデータは、変更されていないはずである。よって、これら他の変数のデータは、コモンメモリ２１に転送する必要はないことになる。
【００７１】
以上のことから、上記の例の場合、変数７のデータのみをコモンメモリ２１へ転送するだけで、コモンメモリ２１の格納データを最新の状態とすることができる。また、この例の場合、例えば、タスク「イベント１」を完了時には、コモンメモリ２１へのデータ転送は、必要ないことになる。
【００７２】
この様に、必要最低限のデータ転送処理を行えるようにすることができ、データ転送に係わる処理負担を軽減できるという効果も得られる。
上述したように、本例のＰＬＣシステムによれば、その開発支援装置のユーザにとっては、「自己が任意に作成するＰＬＣプログラムの各変数が、共有変数であるか否かを指定する作業」が、増えるだけである。これによって、自動的に、全ての共有変数について、コモンメモリのデータ格納領域が割り当てられると共に、内部メモリにおける割当アドレスと対応付けられる。尚、必ずしも全ての共有変数を指定する必要はなく、共有変数のなかでユーザが必要と考える共有変数だけを指定することも可能である。
【００７３】
これより、コントローラ側では、各共有変数のデータを、内部メモリからコモンメモリへ転送することができ、以ってネットワーク（制御ＬＡＮなど）に接続している他のコントローラとデータの共有が簡単に実現できる。この実現の為のユーザのエンジニアリングの作業工数の削減が実現できる。また、ユーザが設定した必要な共有変数のデータだけをコモンメモリに転送するため、転送処理負荷の軽減にもなる。
【００７４】
更に、コントローラ側では、任意のタスク実行完了毎に、そのタスクに関係するＰＬＣプログラムに係わる共有変数のみを転送対象として、そのデータを内部メモリからコモンメモリへ転送することができる。つまり、そのデータの内容が変わった可能性がある共有変数のみを、転送対象とすることができ、転送処理負荷を更に軽減することができる。
【００７５】
この例に限らず、例えば任意のＰＬＣプログラムの実行完了時に、そのＰＬＣプログラムに係わる共有変数のみを転送対象として、そのデータを内部メモリからコモンメモリへ転送するようにしてもよい。尚、この処理は、変数情報管理表２６を参照すれば実現できる。
【００７６】
上記のようにして、本手法では、その都度、必要な分だけコモンメモリにデータを転送することができる。
あるいは、例えば、内部メモリの所定の記憶領域範囲を指定して当該範囲内の全データをコモンメモリへ転送する方式の場合、この範囲内に全ての共有変数を手作業で割り当てる必要があり、ユーザの作業負担が大きかった。本手法では、この様な問題を解消できる。
【００７７】
尚、特に図示しないが、上記コンパイラ部１２や後述するコンパイラ部１２’は、下記の不図示の各処理機能部（変数情報作成部、コモンメモリ割当部）を、有するものと見做しても良い。
・コンパイル処理の際に、ソースコード１４の各変数に内部メモリ２５の任意のアドレスを割当てると共に、該内部メモリ２５の割当アドレスとその変数が共有変数であるか否かを示す情報を含む変数情報（例えば変数情報管理表１７の一部（図４等）等）を生成する変数情報作成部；
・上記変数情報の各共有変数毎に、コモンメモリ２１の任意のアドレスを割り当てて、該コモンメモリ２１の割当アドレスを上記変数情報に上記内部メモリ２５の割当アドレスに対応付けて追加記録するコモンメモリ割当部；これによって、例えば上記のように変数情報管理表１７が完成する（図６の状態となる）。
【００７８】
また、例えば、上記変数情報には更に各変数のデータ型が含まれており、上記コモンメモリ割当部は、予め設定される所定アドレスと、上記各共有変数のデータ型とに基づいて、各共有変数のコモンメモリ２１上の割当アドレスを決定する。
【００７９】
あるいは、開発支援装置１０は、不図示のタスク情報生成機能部を更に有するものであってもよい。このタスク情報生成機能部は、例えば上記タスク情報１８を生成するものである。上記のように、タスク情報１８には、各タスクに対する任意のユーザプログラムの割り当て情報などが含まれる。また、上記のように、タスク情報１８は、例えばユーザが任意に設定・入力するものであるが、この例に限らない。
【００８０】
また、上記ＰＬＣ２０や後述するＰＬＣ２０’は、上記変数情報に基づいて、内部メモリ２５に格納される各変数のデータのうち、上記共有変数のデータを上記コモンメモリ２１の割当アドレスへ転送・格納する転送処理部（不図示）を有する。尚、これより、開発支援装置１０は、上記変数情報をＰＬＣ２０等にダウンロードするダウンロード部（不図示）も有する。
【００８１】
ここで、以上説明した実施例を実施例１とする。これより、例えば、図１は、実施例１のプログラマブルコントローラ・システムの構成・機能図であると言える。
後述する実施例２の場合、更に下記の特徴を有するものと考えてもよい。
【００８２】
すなわち、後述する実施例２の場合、上記変数情報には、更に、その変数に係わるタスクの情報が含まれている。更に、上記コモンメモリ割当部は、各タスク毎に、そのタスクに係わる各共有変数に対してコモンメモリ２１の任意のアドレスの割り当てを行うものである。このアドレス割当て結果は、例えば後述する図１２（ａ）〜（ｃ）に示す例のようになる。つまり、コモンメモリ２１の同じ記憶領域を複数のタスクで共有させる形で、各共有変数のアドレス割当てが行われる。尚、実施例１の場合、後述する図１３に示す例のようになる。
【００８３】
また、上記のように複数のタスクで記憶領域を共有させることにより、上記コモンメモリ割当部は、同じタスクに係わる共有変数に関しては相互に異なるアドレスを割当てるが、任意の複数の共有変数が相互に異なるタスクに係わる共有変数である場合には該複数の共有変数に対して同一のアドレスを割当てる場合もある。
【００８４】
また、実施例２の場合、例えば、上記転送処理部（不図示）は、任意のタスクの処理を実行すると、上記変数情報に基づいて、内部メモリ２５に格納される各変数のデータのうち、該実行したタスクに係わる共有変数のデータを、コモンメモリ２１の割当アドレスへ転送・格納する。
【００８５】
また、上記転送処理部は、例えば更に“実行したタスクを示す情報”も一緒にコモンメモリ２１へ転送・格納する。
コモンメモリ２１に格納データは、上記既存の機能によって、他のプログラマブルコントローラ（ＰＬＣ２０等）のコモンメモリ２１に転送・格納される。
【００８６】
他のプログラマブルコントローラは、自己のコモンメモリ２１に現在格納されているデータが、どのタスクに係わる共有変数のデータであるのかを、自己のコモンメモリ２１に格納される上記“実行したタスクを示す情報”によって判別する。
【００８７】
上記“実行したタスクを示す情報”は、例えば後述する“コモンメモリマッピング識別子”や、タスク名等である。
以下、実施例２について説明する。
【００８８】
図９は、実施例２のプログラマブルコントローラ・システムの構成・機能図である。
尚、図９において、図１に示す構成と同一の構成については、同一符号を付してあり、その説明は省略する。
【００８９】
また、図９において、図１に示す構成とほぼ同じ構成については、同一符号に「’（ダッシュ）」を付して示すものとする。例えば、図９に示す変数情報管理表１７’は、図１に示す変数情報管理表１７とほぼ同じであり、後述するタスク４８が追加されているだけであるので、「１７」に「’（ダッシュ）」を付して「１７’」と表記している。この様な構成に関しては、図１に示すものと同じ部分に関しては、その説明は省略する。例えば上記変数情報管理表１７’に関しては上記タスク４８以外に関しては説明は省略する。
【００９０】
実施例２のプログラマブルコントローラ・システムは、図示の開発支援装置（ローダ）１０’と、ＰＬＣ２０’を有する。尚、上述したことから、開発支援装置（ローダ）１０’は、図１の開発支援装置（ローダ）１０とほぼ同じであるが、一部、異なる点があるものである。同様に、ＰＬＣ２０’は、図１のＰＬＣ２０とほぼ同じであるが、一部、異なる点があるものである。以下、主に、実施例１とは異なる点について説明する。
【００９１】
まず、開発支援装置（ローダ）１０’は、図示のコンパイラ部１２’等を有する。
コンパイラ部１２’は、基本的には上記図１のコンパイラ部１２とほぼ同じであるが、以下の点で異なる。
【００９２】
すなわち、図１のコンパイラ部１２が、コンパイル処理に伴って上記変数情報管理表１７を生成するのに対して、コンパイラ部１２’は図示の変数情報管理表１７’や共有変数コモンメモリ割付情報５０等を生成する。変数情報管理表１７’については既に簡単に説明してあるが、図１０に具体例を示し後に説明する。共有変数コモンメモリ割付情報５０についても、図１５に具体例を示しており後に説明する。
【００９３】
また、コンパイラ部１２’は、各変数のコモンメモリへのアドレス割当て処理の内容が、図１のコンパイラ部１２とは異なる。すなわち、図１のコンパイラ部１２は上記図５の処理を実行するが、コンパイラ部１２’は後述する図１１の処理を実行する。
【００９４】
生成された上記変数情報管理表１７’や共有変数コモンメモリ割付情報５０は、各ＰＬＣ２０’に転送され、図示の変数情報管理表２６’や共有変数コモンメモリ割付情報６０として保持される。
【００９５】
ここで、図１０に、上記変数情報管理表１７’の具体例を示す。
既に述べたように、図示のタスク４８が追加されている点以外は、上記変数情報管理表１７と同じであるので、その説明は省略する。タスク４８には、プログラム名４２のプログラムが設定されるタスクのタスク名等が格納される。これは、例えば上述したタスク情報１８（特に図８（ｂ）に示す情報）を参照することで、プログラム名４２に対応するタスク名等が分かる。
【００９６】
図１０は、作成途中の変数情報管理表１７’を示している。すなわち、“コモンメモリへのデータ格納先アドレス”４７のデータが、未だ生成されていない状態を示している。尚、これ以外の各データは、図示のように生成されているが、これらの生成処理はコンパイラ部１２と同じであるので、ここでは特に説明しない。
【００９７】
図１０の状態において、コンパイラ部１２’が図１１の処理を実行することで、“コモンメモリへのデータ格納先アドレス”４７の各データが生成・格納される。
以下、図１１の処理例について説明する。
【００９８】
図１１の処理では、上記変数情報管理表１７’を用いて、その各レコード（各変数）を順次処理対象としてステップＳ２３〜Ｓ２９の処理を繰り返し実行する。最初の処理対象レコードは、例えば、変数情報管理表１７’の先頭レコード（管理ＩＤ４１＝‘１’のレコード）とする（ステップＳ２１）。
【００９９】
更に、各タスク毎の“割付先コモンメモリ”に対して初期値を設定する（ステップＳ２２）。これは、上記ステップＳ１２では初期値は‘０’に設定したが、本例では例えば初期値は‘２’に設定する。これは、実施例２の場合、例えば後述する図１２に示すようにコモンメモリ２１の先頭の記憶領域は、コモンメモリマッピング識別子の格納領域としているからである。更に、ここでは、この格納領域のサイズを‘２’としているからである。
【０１００】
また、実施例２では、実施例１とは異なり、“割付先コモンメモリ”は各タスク毎に対応して複数設けられている。本例では、“定周期１”、“定周期２”、“デフォルト”の３種類のタスクがあるものとし、これより、例えば、“定周期１”に対しては“割付先コモンメモリ（１）”が、“定周期２”に対しては“割付先コモンメモリ（２）”、“デフォルト”に対しては“割付先コモンメモリ（３）”が、設けられるものとする。そして、ここでは、これら３つ全てについて、例えば上記初期値＝‘２’が設定されるものとする。
【０１０１】
尚、上記“割付先コモンメモリ”は、図５や図１１の処理実行中に任意の値を随時格納／更新する変数と見做してよい。
そして、上記処理対象レコードに基づいて、まず、当該処理対象の変数が、共有変数であるか否かを、共有変数４６から判定する（ステップＳ２３）。そして、共有変数ではない場合には（ステップＳ２３，ＮＯ）、後述するステップＳ２８の処理へ移行する。
【０１０２】
一方、処理対象の変数が共有変数である場合には（ステップＳ２３，ＹＥＳ）、まず、処理対象レコードのタスク４８を取得し（ステップＳ２４）、このタスク４８のタスクに対応する“割付先コモンメモリ”の値を取得する（ステップＳ２５）。例えば先頭レコード（変数１１）の場合、タスク４８は“定周期１”であるので、上記の例では、上記“割付先コモンメモリ（１）”の現在の値が、取得されることになる。そして、この場合、現在値は上記初期値であるので、‘２’が取得されることになる。
【０１０３】
そして、ステップＳ２５で取得した値を、上記処理対象レコードの“コモンメモリへのデータ格納先アドレス”４７に格納する（ステップＳ２６）。これより、上記先頭レコードに関しては、図１４に示すように、“コモンメモリへのデータ格納先アドレス”４７に‘２’が格納されることになる。
【０１０４】
そして、上記該当する“割付先コモンメモリ”（ここでは“割付先コモンメモリ（１）”）の値を更新する（ステップＳ２７）。これは、処理対象レコードのデータ型４４に応じたサイズを判別して、このサイズを“割付先コモンメモリ（１）”の現在値に加算することで、“割付先コモンメモリ（１）”の値を更新する。尚、ここでは、ＩＮＴやＷＯＲＤに応じたサイズは‘１’であるものとする。よって、“割付先コモンメモリ（１）”の値は‘３’（＝２＋１）になる。
【０１０５】
そして、次のレコードを新たな処理対象レコードとして（ステップＳ２８）、ステップＳ２３の処理に戻る。但し、次の処理対象レコードが無い場合には（ステップＳ２９，ＮＯ）、本処理を終了する。
【０１０６】
３番目のレコード（変数１３）が処理対象のとき、“割付先コモンメモリ（１）”の値が‘３’となっているので、図１４に示すように、その“コモンメモリへのデータ格納先アドレス”４７には‘３’が格納されることになる。そして、ステップＳ２７によって“割付先コモンメモリ（１）”の値は‘４’に更新されることになる。
【０１０７】
これより、５番目のレコード（変数２２）が処理対象のときには、“割付先コモンメモリ（１）”の値が‘４’となっているので、図１４に示すように、その“コモンメモリへのデータ格納先アドレス”４７には‘４’が格納されることになる。そして、ステップＳ２７によって、“割付先コモンメモリ（１）”の値は‘５’に更新されることになる。
【０１０８】
ここで、７番目のレコード（変数３２）に関しては、タスク４８が“定周期２”であるので、“割付先コモンメモリ（１）”ではなく、“割付先コモンメモリ（２）”の値を用いる。このとき、“割付先コモンメモリ（２）”の値は上記初期値（＝２）であるので、図１４に示すように、“コモンメモリへのデータ格納先アドレス”４７には‘５’ではなく‘２’が格納されることになる。
【０１０９】
また、９番目のレコード（変数４１）に関しては、タスク４８が“デフォルト”であるので、“割付先コモンメモリ（１）”ではなく、“割付先コモンメモリ（３）”の値を用いる。このとき、“割付先コモンメモリ（３）”の値は上記初期値（＝２）であるので、図１４に示すように、“コモンメモリへのデータ格納先アドレス”４７には‘５’ではなく‘２’が格納されることになる。
【０１１０】
例えばこの様にして、図１４に示すような変数情報管理表１７’が完成する。
コンパイラ部１２’は、更に、上記完成した変数情報管理表１７’に基づいて、上記共有変数コモンメモリ割付情報５０を生成する。図１５に、図１４に示す変数情報管理表１７’の具体例に応じて生成される、共有変数コモンメモリ割付情報５０の具体例を示す。
【０１１１】
共有変数コモンメモリ割付情報５０は、例えば、タスク５１、コモンメモリマッピング識別子５２、変数名５３、ＢＣアドレス５４、データ型５５等の各データ項目より成る。
コンパイラ部１２’は、例えば上記変数情報管理表１７’において共有変数４６が“共有する”となっている全てのレコードについて、そのタスク４８、変数名４３、“コモンメモリへのデータ格納先アドレス”４７、データ型４４を、それぞれ、上記タスク５１、変数名５３、ＢＣアドレス５４、データ型５５に格納する。更に、タスク５１に対応する識別ＩＤを、コモンメモリマッピング識別子５２に格納する。尚、この識別ＩＤは、各タスクに対応して任意に割当ててもよいし、予め各タスクには固有の識別ＩＤが割当てられているものであってもよい。
【０１１２】
但し、共有変数コモンメモリ割付情報５０は、必ずも生成する必要はなく、以って必ずしも各ＰＬＣ２０’に保持させる必要はない。各ＰＬＣ２０’は、変数情報管理表１７’を保持するだけでも構わない。尚、この場合、変数情報管理表１７’に上記コモンメモリマッピング識別子５２のデータ項目を付加してもよいが、付加しなくてもよい。コモンメモリマッピング識別子は、必ずしも必要ないからである（タスクの種類が判別できればよいので、タスク４８（タスク名）を用いても構わない。勿論、この場合には、コモンメモリ２１にタスク名を格納することになる）。
【０１１３】
そして、開発支援装置１０’は、上記のように生成した上記変数情報管理表１７’や共有変数コモンメモリ割付情報５０を、各ＰＬＣ２０’にダウンロードする。各ＰＬＣ２０’は、これら変数情報管理表１７’と共有変数コモンメモリ割付情報５０を、図９に示す変数情報管理表２６’と共有変数コモンメモリ割付情報６０として記憶する。
【０１１４】
但し、共有変数コモンメモリ割付情報５０は、受信側のＰＬＣ２０’用に生成される情報であるので、送信側のＰＬＣ２０’にはダウンロードする必要がない。また、受信側のＰＬＣ２０’は、共有変数コモンメモリ割付情報５０があれば問題なく受信処理が行えるので、変数情報管理表１７’をダウンロードする必要はない。但し、勿論、全てのＰＬＣ２０’に変数情報管理表１７’と共有変数コモンメモリ割付情報５０の両方をダウンロードして保持させるようにしてもよい。
【０１１５】
尚、上記送信側、受信側とは、例えば特許文献１における図２を例にした場合、図示の「装置１Ａ送信エリア」のデータに関しては、データ伝送装置１Ａが送信側となり、他のデータ伝送装置１Ｂ，１Ｃが受信側となる。これは、図９の例の場合、開発支援装置１０’が例えば図示のＰＬＣ−Ａ用のソースコード１４のコンパイルに伴って上記変数情報管理表１７’と共有変数コモンメモリ割付情報５０を生成した場合には、ＰＬＣ−Ａが送信側、ＰＬＣ−Ｂが受信側となる。この例では、例えば、ＰＬＣ−Ａには変数情報管理表１７’をダウンロードして保持させ、ＰＬＣ−Ｂには共有変数コモンメモリ割付情報５０をダウンロードして保持させることになる。尚、この場合には、変数情報管理表１７’には更にコモンメモリマッピング識別子５２が追加されていることが望ましい。
【０１１６】
但し、この例に限らず、共有変数コモンメモリ割付情報５０は必ずしに生成しなくてよいので、この場合にはＰＬＣ−Ｂにも変数情報管理表１７’をダウンロードして保持させることになる。共有変数コモンメモリ割付情報５０は、基本的に、変数情報管理表１７’のデータのなかで受信処理に必要なデータを抽出して成るものであり、変数情報管理表１７’に比べてデータ量が少なくて済むというメリットが得られる。
【０１１７】
また、コモンメモリマッピング識別子５２は、必ずしも必要なく、タスク５１（タスク名）があればタスクを識別できるが、「コモンメモリマッピング識別子」を用いる方がコモンメモリ２１に格納するデータ量が少なくて済む。
【０１１８】
各ＰＬＣ２０’は、上記自己が保持する変数情報管理表２６’や共有変数コモンメモリ割付情報６０を用いて、コモンメモリデータ交換処理を実行する。以下、ＰＬＣ２０’におけるコモンメモリデータ交換処理について説明する。
【０１１９】
まず、送信側のＰＬＣ２０’は、例えば図１６に示す動作を行う。これは、例えば上記図８（ａ）、（ｂ）に示す設定情報に従って、各タスクを動作させる。この例では、タスク“定周期１”は、２００ms周期で動作させ、プログラム１とプログラム２を実行することになる。また、タスク“定周期２”は、１０００ms周期で動作させ、プログラム３を実行することになる。そして、各タスク実行毎に、転送処理部２４’が、図１６に示す転送処理を行う。
【０１２０】
ここで、図１６において、△は、転送処理を示し、この△内に示す数字は、コモンメモリマッピング識別子５２を示す。
転送処理部２４’は、基本的には上記図１の転送処理部２４と略同様の処理を行うものであるが、異なる点は、全ての共有変数データを転送するのではなく、その都度、そのときに（直前に）実行されたタスクに係わる共有変数データを転送する点である。更に、そのときに実行されたタスクの上記識別ＩＤ（コモンメモリマッピング識別子）を、コモンメモリ２１の所定の格納領域（ここではアドレス‘０’‘１’）に格納する。
【０１２１】
転送処理部２４’は、任意のタスク実行完了に伴って呼び出されると、コモンメモリ２１の自己の記憶領域のデータを消去したうえで、まず、当該実行完了したタスクに対応するコモンメモリマッピング識別子５２を、コモンメモリ２１の所定の格納領域（ここではアドレス‘０’‘１’）に格納する。そして、変数情報管理表２６’に基づいて、当該実行完了したタスクに係わる共有変数データを、内部メモリ２５からコモンメモリ２１へ転送する。
【０１２２】
例えば、図１６において△内が‘１’である転送処理は、タスク“定周期１”を実行完了後、換言すればプログラム１とプログラム２を実行完了後に実行される転送処理である。この転送処理では、まず、タスク“定周期１”のコモンメモリマッピング識別子＝‘１’が、コモンメモリ２１の所定の格納領域に格納される。更に、タスク“定周期１”に係わる共有変数である変数１１、変数１３、変数２２のデータが、内部メモリ２５からコモンメモリ２１の該当アドレスへと転送・記憶される。図１４の例の場合、変数１１、変数１３、変数２２の各データは、それぞれ、コモンメモリ２１のアドレス‘２’、アドレス‘３’、アドレス‘４’へと転送・記憶される。これより、この転送処理実行後のコモンメモリ２１のデータ格納状態は、図１２（ａ）に示すようになる。
【０１２３】
また、例えば、図１６において△内が‘２’である転送処理は、タスク“定周期２”を実行完了後、換言すればプログラム３を実行完了後に実行される転送処理である。この転送処理では、まず、タスク“定周期２”のコモンメモリマッピング識別子＝‘２’が、コモンメモリ２１の所定の格納領域に格納される。更に、タスク“定周期２”に係わる共有変数である変数３２のデータが、内部メモリ２５からコモンメモリ２１の該当アドレスへと転送・記憶される。図１４の例の場合、変数３２データは、コモンメモリ２１のアドレス‘２’へと転送・記憶される。これより、この転送処理実行後のコモンメモリ２１のデータ格納状態は、図１２（ｂ）に示すようになる。
【０１２４】
また、例えば、図１６において△内が‘３’である転送処理は、タスク“デフォルト”を実行完了後、換言すればプログラム４を実行完了後に実行される転送処理である。この転送処理では、まず、タスク“デフォルト”のコモンメモリマッピング識別子＝‘３’が、コモンメモリ２１の所定の格納領域に格納される。更に、タスク“デフォルト”に係わる共有変数である変数４１のデータが、内部メモリ２５からコモンメモリ２１の該当アドレスへと転送・記憶される。図１４の例の場合、変数４１データは、コモンメモリ２１のアドレス‘２’へと転送・記憶される。これより、この転送処理実行後のコモンメモリ２１のデータ格納状態は、図１２（ｃ）に示すようになる。
【０１２５】
尚、図１２との比較の為、図１３には上記実施例１におけるコモンメモリ２１のデータ割り付け例を示す。
図１３に示すように、実施例１の場合、そのとき実行されたタスクが何であるかは関係なく、常に、全ての変数（変数１１，１３，２２，３２，４１）のデータが、コモンメモリ２１に格納される。つまり、コモンメモリ２１には、これら５つの変数のデータを格納する為の記憶容量が、必要となる。
【０１２６】
一方、実施例２の場合、上記の例では最大でも図１２（ａ）に示す３つの変数のデータを格納する為の記憶容量が、あればよいことになる（尚、正確には、更に、コモンメモリマッピング識別子を格納するための記憶容量も必要となる）。この様に、実施例２は、実施例１に比べて、コモンメモリ２１の記憶容量が少なくて済む、という効果が得られる。
【０１２７】
更に、内部メモリ２５からコモンメモリ２１へのデータ転送量も、実施例２は実施例１に比べて少なくて済むという効果も得られる。すなわち、実施例１の場合、データ転送処理実行毎に、上記の例では上記５つの変数のデータを転送することになる。これに対して、実施例２の場合、特にタスク“定周期２”やタスク“デフォルト”の実行完了後に行われるデータ転送処理では、１つの変数のデータを転送すればよく（正確には、更に、コモンメモリマッピング識別子も転送するが）、データ転送量が非常に少なくて済む。
【０１２８】
上記コモンメモリ２１の格納データは、例えば上記特許文献１等に開示されている既存機能によって、他のＰＬＣ２０’のコモンメモリ２１に転送・格納される。
ここで、実施例２では、受信側のＰＬＣ２０’は、自己が保持する上記共有変数コモンメモリ割付情報６０等を参照して、自己のコモンメモリ２１から所望の変数のデータを取得する。これは、まず、自己のコモンメモリ２１から上記コモンメモリマッピング識別子を取得し、これを用いて共有変数コモンメモリ割付情報６０等を参照することで、現在、自己のコモンメモリ２１のどのアドレスにどの変数のデータが格納されているのかを認識できる。そして、これによって、自己のコモンメモリ２１から所望の変数のデータを取得できる。
【０１２９】
例えば、自己のコモンメモリ２１の状態が図１２（ａ）に示す状態であった場合、そのコモンメモリマッピング識別子は‘１’であるので、例えば図１５に示す共有変数コモンメモリ割付情報６０を参照すれば、例えばアドレス‘２’には変数１１のデータが格納されていることを認識できることになる。更に、これがタスク“定周期１”に係わる変数であること等も認識できる。また、コモンメモリ２１から変数データを読み出す際には、ＢＣアドレス５４からデータ型５５に応じたデータ量のデータを、読み出すことになる。
【０１３０】
更に、変数情報管理表２６’を参照すれば、この変数１１がプログラム１に係わる変数であること等が認識できることになる。
また、例えば、自己のコモンメモリ２１の状態が図１２（ｂ）に示す状態であった場合、そのコモンメモリマッピング識別子は‘２’であるので、例えばアドレス‘２’には変数３２のデータが格納されていることを認識できることになる。
【０１３１】
この様に、実施例２においても、受信側のＰＬＣ２０’は、問題なく所望の共有変数データを取得することができる。
【符号の説明】
【０１３２】
１０  開発支援装置（ローダ）
１１  インタフェース機能部
１２  コンパイラ部
１３  通信機能部
１４  ソースコード
１５  ソースコード識別番号対応表
１６  機械語オブジェクト
１７  変数情報管理表
１８  タスク情報
２０  ＰＬＣ
２１  コモンメモリ
２２  通信機能部
２３  プログラム実行管理機能部
２４  転送処理部
２５  内部メモリ
２６  変数情報管理表
２７  機械語オブジェクト
３０  共有変数宣言情報
３１  プログラム名
３２  変数名
３３  データ型
３４  共有変数
４１  管理ＩＤ
４２  プログラム名
４３  変数名
４４  データ型
４５  「ＰＬＣ内メモリのアドレス」
４６  共有変数
４７  「コモンメモリへのデータ格納先アドレス」
１０’  開発支援装置
１２’  コンパイラ部
１７’  変数情報管理表
２０’  ＰＬＣ
２４’  転送処理部
２６’  変数情報管理表
４８  タスク
５０  共有変数コモンメモリ割付情報
５１  タスク
５２  コモンメモリマッピング識別子
５３  変数名
５４  ＢＣアドレス
５５  データ型
【図１】
2015215865.tif 000003
【図２】
2015215865.tif 000004
【図３】
2015215865.tif 000005
【図４】
2015215865.tif 000006
【図５】
2015215865.tif 000007
【図６】
2015215865.tif 000008
【図７】
2015215865.tif 000009
【図８】
2015215865.tif 000010
【図９】
2015215865.tif 000011
【図１０】
2015215865.tif 000012
【図１１】
2015215865.tif 000013
【図１２】
2015215865.tif 000014
【図１３】
2015215865.tif 000015
【図１４】
2015215865.tif 000016
【図１５】
2015215865.tif 000017
【図１６】
2015215865.tif 000018