(57)【特許請求の範囲】
【請求項１】
入出力に変数名を使用してプログラミングした制御プログラムを制御装置へ送出するツール手段と、
ツールから受取った前記制御プログラムをサイクリックに実行するとともに、接続されたデバイスへＩ／Ｏデータを転送する制御機器と、からなる制御システムであって、
前記ツール手段は、
制御プログラムで使用されているすべての変数名情報と、制御機器において制御プログラム実行時にＩ／Ｏデータをアクセスするときのメモリアドレス情報とが関係付けて格納されるタグ記憶部と、
タグ記憶部の変数名情報と、制御機器に接続されたデバイスを指定するデバイス情報とが関係付けた設定情報を格納するデバイス・タグ設定部と、を備え、
タグ記憶部の情報と、デバイス・タグ設定部の設定情報と、を制御機器に送出するものであり、
前記制御機器は、
前記ツール手段のタグ記憶部からの変数名情報、メモリアドレス情報と、デバイス・タグ設定部からの設定情報とを格納する設定記憶手段と、
接続されているデバイスからそのデバイスの識別情報とデータの入出力サイズとを取得するデバイス検出手段と、
前記デバイス検出手段にて取得したデバイス識別情報とデータの入出力サイズとに基づき、メモリ上における前記デバイスとデータの送受をするためのデバイスデータ領域を設定し、前記設定記憶手段に格納された設定情報に基づき、前記設定したデバイスデータ領域と制御プログラムが参照する前記デバイスに関連づけられた前記メモリ上の変数データ領域とを関連づけたメモリマップを作成するメモリマップ設定手段と、
前記メモリマップ設定手段のメモリマップに従いメモリ上の前記デバイスデータ領域を使用して前記デバイスと定期的にデータリンク方式でデータの送受をする通信手段と、
前記メモリマップに従いメモリ上の前記変数データ領域と前記デバイスデータ領域の間でデータを転送するデータ転送手段と、を備えた
ことを特徴とする制御システム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、制御システムに関するものである。
【０００２】
【発明の背景】
良く知られているように、ＦＡ（Factory Automation）などの工業領域におけるコントロールシステムには、ＰＬＣなどの制御装置と、その制御装置により制御される機器（デバイス）を適宜組み合わせて構築される。ＰＬＣには、直接或いはネットワークを介して１または複数のデバイスが接続されている。
【０００３】
そして、ＰＬＣは、各デバイスと通信を行い、ユーザプログラムにて所定の処理を行うことを繰り返しサイクリックに実行する。このとき、通常、デバイスに対してネットワーク上にユニークに設定される識別子としてのノード番号を付与し、そのノード番号（ネットワークアドレス）を指定してアクセスする。なお、デバイスがバス接続されている場合には、ノード番号はユニット番号となるが、基本的な考えは同じである。また、実際のデータの通信は、ＰＬＣ内のＩ／Ｏメモリに対し、予め各デバイス等が使用するメモリアドレスを割り付けておき、デバイスと通信するユーザプログラムは当該メモリに対して読み書きをするようにしている。
【０００４】
このように、各デバイス毎に各種のアドレスを設定する必要がある。そこで、係るアドレスの割り付けが煩雑であるので、係る割り付けが自動的に行えると便利である。パソコンなどに代表されるＯＡ（Office Automation ）の世界で用いられるプラグアンドプレイ方式により、デバイスの装着とともに自動的にアドレス等の割り付けが実行できる環境ができると便利である。
【０００５】
しかし、パソコンなどの場合、装着されるデバイスとしては、数個程度であるのに対し、ＰＬＣの場合には、ネットワークに多数の入力デバイス，出力デバイスが接続され、そのデバイスにはさらにセンサやリレー（ソレノイド）等のＩ／Ｏ機器等が接続されており、１つのＰＬＣが管理する外部機器の数は数百から数千のオーダーになることもある。従って、単純にパソコンにおけるプラグアンドプレイ方式を転用することはできない。
【０００６】
さらに、自動的にＰＬＣの資源を割り当てると、アクセスすべき資源（メモリアドレスなど）がその都度変わってしまう。そして、ＰＬＣにおけるユーザプログラムは、ラダープログラムに代表されるようにプログラム中に直接参照先のアドレスを記述するものが良く用いられる。
【０００７】
従って、まず自動的に割り当たられたメモリアドレスを、人手によりプログラム中で設定しなければならず、上記のようにその数が多くなるほど煩雑さがます。しかも、上記したようにメモリアドレスがその都度変わってしまうと、プログラムの改定を余儀なくされしまい、煩雑である。
【０００８】
この発明は、プラグアンドプレイ方式が実現でき、さらに、プラグアンドプレイに対応していない機器であっても対応可能に拡張することのできる制御システムを提供することを目的とする。
【０００９】
【課題を解決するための手段】
この発明による制御システムは、入出力に変数名を使用してプログラミングした制御プログラムを制御装置へ送出するツール手段と、ツールから受取った前記制御プログラムをサイクリックに実行するとともに、接続されたデバイスへＩ／Ｏデータを転送する制御機器と、からなる制御システムであって、
前記ツール手段は、
制御プログラムで使用されているすべての変数名情報と、制御機器において制御プログラム実行時にＩ／Ｏデータをアクセスするときのメモリアドレス情報とが関係付けて格納されるタグ記憶部と、
タグ記憶部の変数名情報と、制御機器に接続されたデバイスを指定するデバイス情報とが関係付けた設定情報を格納するデバイス・タグ設定部と、を備え、
タグ記憶部の情報と、デバイス・タグ設定部の設定情報と、を制御機器に送出するものであり、
前記制御機器は、
制御プログラムで使用されているすべての変数名情報と、制御プログラム実行時にＩ／Ｏデータをアクセスするときのメモリアドレス情報との関係付け情報と、接続されたデバイスを指定するデバイス情報とを関係付けた設定情報を格納する設定記憶手段と、
前記ツール手段のタグ記憶部からの変数名情報、メモリアドレス情報と、デバイス・タグ設定部からの設定情報とを格納する設定記憶部と、
接続されているデバイスからそのデバイスの識別情報とデータの入出力サイズとを取得するデバイス検出手段と、
前記デバイス検出手段にて取得したデバイス識別情報とデータの入出力サイズとに基づき、メモリ上における前記デバイスとデータの送受をするためのデバイスデータ領域を設定し、前記設定記憶手段に格納された設定情報に基づき、前記設定したデバイスデータ領域と制御プログラムが参照する前記デバイスに関連づけられた前記メモリ上の変数データ領域とを関連づけたメモリマップを作成するメモリマップ設定手段と、
前記メモリマップ設定手段のメモリマップに従いメモリ上の前記デバイスデータ領域を使用して前記デバイスと定期的にデータリンク方式でデータの送受をする通信手段と、
前記メモリマップに従いメモリ上の前記変数データ領域と前記デバイスデータ領域の間でデータを転送するデータ転送手段と、を備えて構成することができる。制御機器とデバイスとの接続は、直接又は間接的に行える。
【００１０】
直接とは、バスなどを介して制御機器に接続されることを意味し、間接的とはネットワークを介して、或いは制御機器などを介して接続されることを意味する。識別情報は、個々のデバイスに割り付けられ、個体識別をするための情報であり、例えば、シリアル番号やデバイス名称などがあり、システム上ユニークなものとなる。
【００１１】
制御機器は、接続されたデバイスとデータ通信をし、その動作を制御することのできる装置であり、広義ではＦＡに用いられる機器で、例えば、産業用ロボットなどが含まれる。また、狭義では、コントローラ、つまり、生産製造分野において、ユーザが記述した制御プログラムに基づいて、センサなどの入力データから、ソレノイドコイルなどへの出力データを算出、出力し、制御対象（ロボット、シリンダ、モータなどの生産ラインの稼動要素）を動作させる機器である。例えば、モータの角度制御，トルク制御などを行うボードコンピュータ等や、Ｉ／Ｏ制御を行うプログラムロジックコントローラ（ＰＬＣ）等がある。
【００１２】
デバイスは、コントローラ等への入力データ、コントローラからの出力データを、ネットワークあるいはバスなどを経由して受け取る生産ラインの構成要素を指す。センサ，スイッチ，多点入力端子，カメラなどの入力機器や、ソレノイドコイル，多点出力端子，シリンダ，モータなどの出力機器、ロボットなどの入力と出力の複合機器などがある。また、コントローラ自身も、入力と出力の複合機器として振る舞うことがあり、係る場合には、本発明で言うデバイスとなる。
【００１３】
通信手段は、実施の形態ではサイクリックサービス２１に対応する。また、データ転送手段は、実施の形態では、データ転送サービス１９や、オブジェクトプログラム実行エンジン４３等に対応する。メモリは、実施の形態ではＩ／Ｏメモリ１１に対応する。
【００１４】
この発明によれば、データ転送手段によりメモリ上のデータを別のデータ領域に転送することができるので、制御プログラムにおける外部入出力変数として、プログラム中に直接デバイスのアドレス等を記述する必要が無く、制御プログラムは変数データ領域を固定的に特定しても、デバイスデータ領域との間でデータの転送ができ、ひいては、通信手段を介してデバイスとデータの送受が行える。つまり、外部入出力変数の入出力処理が行える。そして、参照先のデバイスのアドレスが変更されても、メモリマップを更新することにより、変数データ領域を変えることなく参照できる。つまり、制御プログラムを変更することなく、デバイスのアドレス変更に対応できる。
【００１５】
そして、デバイス検出手段と、メモリマップ設定手段を設けたことにより、メモリマップを自動的に作成することができる。つまり、コントローラ等で実行される制御プログラムの記述（例えば変数）と、着脱可能なデバイスとを、自動的に関連付け、制御プログラムが常に正しいデバイスにアクセスできるようなプラグアンドプレイを実現できる。
【００１６】
好ましくは、デバイスを制御する制御プログラムと、前記デバイスを関連付けた関連情報を記憶する関連情報記憶手段を持ち、前記制御プログラムが前記デバイスにアクセスするに際し、前記記憶手段に格納された関連情報を参照することによりアクセス先を特定し、実行するように構成することである。この発明は、第３の実施の形態により実現されている。そして、関連情報記憶手段は、実施の形態ではオブジェクトデータベース４１に対応する。
【００１７】
このように、関連情報を備えることにより、制御プログラムにおいて、入出力データにアクセスするデバイスの指定方法で、システム構成，ネットワーク構成に依存しない記述方法とすることができる。例えば、デバイスの入出力データを変数でアクセスできるようにすることなどがある。オブジェクト化はさらに論理化をより進化させた概念であり、デバイスを操作するためのデータやプログラムを内包して管理し、それら内部データや内部プログラムの存在を意識することなく制御プログラムをプログラミングできるようにすることである。代表的な効果の１つとして、指定の仕方・内容が同じであれば、例えデバイスが異なるものであっても、制御プログラムからは区別なくデバイスにアクセスすることができる。
【００１８】
また、拡張ボードは、入出力に変数名を使用してプログラミングされた制御プログラムをサイクリックに実行するとともに、接続されたデバイスへＩ／Ｏデータを転送する制御機器に接続される拡張ボードであって、制御プログラムで使用されているすべての変数名情報と、制御プログラム実行時にＩ／Ｏデータをアクセスするときのメモリアドレス情報との関係付け情報と、接続されたデバイスを指定するデバイス情報とを関係付けた設定情報を格納する設定記憶手段と、接続されているデバイスからそのデバイスの識別情報とデータの入出力サイズとを取得するデバイス検出手段と、前記デバイス検出手段にて取得した識別情報に基づき、制御機器内のメモリ上における前記デバイスとデータの送受をするためのデバイスデータ領域を設定し、前記設定記憶手段に格納された設定情報に基づき、前記設定したデバイスデータ領域と、制御プログラムが参照する前記デバイスに関連づけられた前記メモリ上の変数データ領域とを関連づけたメモリマップを作成するメモリマップ設定手段と、前記メモリマップ設定手段が作成したメモリマップに従い前記メモリ上の前記変数データ領域と前記デバイスデータ領域の間でデータを転送するデータ転送手段とを備えて構成することができる。
【００１９】
係る拡張ボードは、上記したプラグアンドプレイを実現するための機能を備えており、この拡張ボードを実装することにより、プラグアンドプレイの無い従来の制御機器が、プラグアンドプレイに対応することができる。
【００２０】
また、通信ユニットは、入出力に変数名を使用してプログラミングされた制御プログラムをサイクリックに実行するとともに、接続されたデバイスへＩ／Ｏデータを転送する制御機器を構成する前記デバイスと通信するための通信ユニットであって、制御プログラムで使用されているすべての変数名情報と、制御プログラム実行時にＩ／Ｏデータをアクセスするときのメモリアドレス情報との関係付け情報と、接続されたデバイスを指定するデバイス情報とを関係付けた設定情報を格納する設定記憶手段（実施の形態では、「オブジェクトデータベース４１」）と、接続されているデバイスからそのデバイスの識別情報とデータの入出力サイズとを取得するデバイス検出手段と、前記デバイス検出手段にて取得した識別情報に基づき、制御機器内のメモリ上における前記デバイスとデータの送受をするためのデバイスデータ領域を設定し、前記設定記憶手段に格納された設定情報に基づき、前記設定したデバイスデータ領域と、制御プログラムが参照する前記デバイスに関連づけられた前記メモリ上の変数データ領域とを関連づけたメモリマップを作成するメモリマップ設定手段と、前記メモリマップ設定手段が作成したメモリマップに従い制御機器内のメモリ上のデバイスデータ領域を使用して前記デバイスと定期的にデータリンク方式でデータの送受をする通信手段と、前記メモリマップに従い前記メモリ上の前記変数データ領域と前記デバイスデータ領域の間でデータを転送するデータ転送手段とを備えて構成することができる。
【００２１】
上記拡張ボードと同様に、本発明の通信ユニットは、上記したプラグアンドプレイを実現するための機能を備えている。従って、制御機器の本体ユニットと、この通信ユニットを組み合わせることにより、プラグアンドプレイに対応する制御機器を構成することができる。
【００２２】
【発明の実施の形態】
図１は、本発明の第１の実施の形態を示している。同図に示すように、ＰＬＣ等のコントローラ１０は、ツール１で作成され、ダウンロードされたユーザプログラム（制御プログラム）をサイクリックに実行し、ネットワークやバスシステムを介して接続された入出力デバイス５を管理する。この基本的なシステム構成は、従来のものと同様である。もちろん、ツール１は、ダウンロード後は、コントローラ１０との接続を解除しても良い。
【００２３】
また、本形態で用いられる入出力デバイス５は、コントローラ１０からのコマンドメッセージを受信し、そこに記述された指示を実行してレスポンスメッセージをコントローラ１０に返す。また定期的に或いはイベント的に入出力デバイス５に接続されたセンサやスイッチのデータを取得し、Ｉ／Ｏデータとしてコントローラ１０に送出する機能も有する。更に、デバイス個体を識別するデバイス情報（例えば、シリアル番号，デバイス名称など）を記憶保持し、コントローラ１０からの所定のコマンドメッセージに対し、デバイス情報をレスポンスメッセージとして返信する機能も有する。
【００２４】
ツール１は、コントローラ１０の制御プログラムを作成（編集含む）したり、入出力デバイス５とタグ（後述する）を関連付けたりし、それら作成したプログラム等をコントローラ１０に送出するもので、具体的には、制御プログラムエディタ２と、タグ記憶部３と、デバイス・タグ設定部４を備えている。
【００２５】
制御プログラムエディタ２は、ラダー言語からなる制御プログラムを作成（編集）するユーザインタフェースである。そして、作成した制御プログラムを送出する機能も持つ。良く知られているように、ラダー言語で作成される制御プログラムは、例えば、図２に示すように規定される。図に示すように、制御プログラムでは、入出力に変数が使用される。図示の例では、「始動ＳＷ」，「停止」，「始動」等と記述されているものである。
【００２６】
変数には、デバイスに関連づけられる外部入力変数や外部出力変数（以降、「外部入出力変数」）と、それ以外の内部変数がある。外部入出力変数は、図示の例では「始動ＳＷ」，「停止ＳＷ」，「始動ランプ電源」等に対応する。そして、外部入出力変数の場合、デバイスとの関連づけを行う必要があり、係る関連づけをデバイス・タグ設定部４で行う（具体的な処理機能は後述する）。
【００２７】
これら外部入出力変数などは、コントローラ１０内のＩ／Ｏメモリ上に領域が割り当てられるが、本形態では制御プログラムエディタ２が自動的に行う。そして、制御プログラム内の変数に関する情報は、タグ記憶部３に格納される。
【００２８】
すなわち、タグ記憶部３は、制御プログラムで使用されているすべての変数の情報が格納される。格納される情報は、制御プログラムエディタ２から与えられ、図３に示すようなデータ構造で変数の情報が記憶保持されるようになっている。
【００２９】
つまり、変数名，メモリアドレス，データタイプから構成される変数情報を格納する。ここで、上記した例に対応づけると、「変数名」は、制御プログラム内での変数の名称であり、「始動」，「始動ＳＷ」等が対応する。
【００３０】
また、「メモリアドレス」は、制御プログラムエディタによって自動的に決定されるものであり、制御プログラムがアクセスするメモリアドレスを示す。このメモリアドレスは、アクセスメモリ指定，チャネル番号，ビット位置から構成される。なお、アクセスメモリ指定は、通常「Ｉ／Ｏメモリ」であり、データタイプは、変数の型を示す。例えばＢＯＯＬ型，ＩＮＴ型などである。
【００３１】
通常のツールは、上記した制御プログラムエディタ２と、タグ記憶部３から構成されるが、本発明では、デバイス・タグ設定部４を設けている。このデバイス・タグ設定部４は、制御プログラムのユーザが、タグ記憶部３に格納された変数情報を参照して、どの変数が外部入出力変数かを指定するユーザインタフェースである。ツール１の表示画面に、図４に示す入力画面を表示し、必要箇所にユーザが入力した情報に基づき、入出力変数に関する情報を設定し、コントローラ１０に送出する。
【００３２】
すなわち、デバイス・タグ設定部４は、まず、タグ記憶部３から変数名の情報を取得し、図４に示すように入力画面の所定位置に変数名を差し込んだ一覧表を生成し、ツール１の表示画面上に表示する。
【００３３】
この表示画面に表示された一覧表の中で、ユーザ入力の項目をユーザが図示省略のツール１の入力装置を操作して指定する。デバイスの指定は、本形態ではシリアル番号、或いはノード番号により行う。つまり、それらの番号を所定の形式のテキストに書き換えることにより、その変数が外部入出力変数として指定されたことになる。なお、何も入力しなければ、その変数は＜内部変数＞となる。
【００３４】
なお、本形態では、基本的にデバイスはシリアル番号で指定するようにする。つまり、シリアル番号は、そのデバイス個体それぞれにつけられた製造番号であり、同じシリアル番号を持ったデバイスは存在しないので、ネットワーク上に存在するユニークな番号（ＩＤ）となる。よって、後述するごとく、コントローラ１０は、ユニークな番号であるシリアル番号によって個々のデバイスを識別し、資源の割り当てを自動的に行うことができる。
【００３５】
さらに、シリアル番号が不明な場合にも対応できるようにしている。すなわち、ノード番号による指定を許容するようにしているため、ユーザはシリアル番号が不明の場合には、ノード番号による指定を行うようにする。
【００３６】
もちろん、実際にこの設定情報をコントローラを反映する前には、ノード番号をシリアル番号に変換する必要がある。そこで、ツール１をネットワークに直接または間接的に接続し、画面中の「ノード番号をシリアル番号に置換」のアイコン部分をクリックする。すると、デバイス・タグ設定部４は、該当するノード番号で指定されたノード番号のデバイスに対し、シリアル番号の問い合わせを行う。そして、この問い合わせに対し、そのノードに接続されたデバイスが、自己が持つ情報を返信してくるので、係る情報を受信し、対応するノード番号で指定したデバイス情報をシリアル番号のものに置き換える処理を実行する。
【００３７】
そして、全ての指定が終了したならば、画面中の「コントローラに設定を反映する」のアイコン部分をクリックする。すると、デバイス・タグ設定部４は、設定内容をコントローラ１０に送出される。なお、このときコントローラ１０に送出するデータは、外部入出力変数に関する情報のみである。
【００３８】
更に本形態では、図５に示すように、デバイス一覧の情報収集機能を持たせている。すなわち、「実際に編集されているデバイスを取得」のアイコンをクリックすると、ブロードキャストによりネットワークに接続された全てのデバイスに対して、デバイス名とシリアル番号の問い合わせを行う。これを受けた各デバイスが、所定の情報を返信するので、その返信を受けたツール１（デバイス・タグ設定部４）は、取得した情報に基づき、図５に示すようなデバイス一覧表を表示画面に出力する。そして、ユーザは係る表示された一覧画面を参考にして、図４に示す入力画面中の所定位置にシリアル番号を入力することもできる。
【００３９】
さらにまた、所定のノードに接続されたデバイスに対してシリアル番号等の問い合わせをし、返信を受ける機能をコントローラ１０に組み込むようにすると、ツール１側ではノード番号で入力された場合には、そのままコントローラ１０へ設定情報を送り、コントローラ１０側でノード番号からシリアル番号への置換を行うようにしても良い。
【００４０】
従来のツールは、制御プログラムエディタとタグ記憶部のみから構成されるが、これらの各機能ブロックは、本実施の形態においても機能的になんら付加するものがない。従って、既存のツールに含まれる機能ブロックを変更することなく、デバイス・タグ設定機能ブロックを追加するだけでプラグアンドプレイに対応したツールとすることができる。
【００４１】
これにより、ツールの大幅な改造が不要となるので、開発期間の短縮，コスト削減といった効果が得られる。またユーザにとっては既存のツールを買い換えることなく、新規の機能ブロックを買い足すだけでプラグアンドプレイ機能を使うことが可能になる。
【００４２】
次に、コントローラ１０を説明する。コントローラ１０は、ツール１と通信をする通信サービス１４を有している。この通信サービス１４は、ツール１からのコマンドによって所定の機能ブロック部に処理を依頼したり、データを転送する機能を持つ。ツール１から与えられる主なコマンドは、「設定データ記憶コマンド」，「制御プログラム記憶コマンド」，「制御プログラム実行コマンド」，「制御プログラム停止コマンド」などがある。
【００４３】
データを転送する機能としては、制御プログラムエディタ２が使用する「制御プログラム記憶コマンド」に基づき、制御プログラムエディタ２が作成（編集）した制御プログラムをツール１から受け取り、制御プログラム記憶部１２に格納するものがある。なお、ここで取り扱われるデータ内容は、実際には制御プログラムエディタ２で作成された制御プログラムをコンパイルしたものとなる。また、デバイス・タグ設定部４が使用する「設定データ記憶コマンド」に基づき、デバイス・タグの設定情報をツール１から受け取り、設定記憶部１３に格納するものがある。
【００４４】
一方、処理の依頼の機能としては、ユーザの操作に基づきツール１からの指示や、コントローラ１０の外部に設けられたスイッチからの信号により実行される「制御プログラム実行コマンド」に基づき、スケジューラ１５に制御プログラムの実行を指示するものである。なお、スケジューラ１５の指示に従い、制御プログラム実行エンジン１６は、制御プログラム記憶部１２に格納された制御プログラムの評価実行が開始される。また、「制御プログラム停止コマンド」を受けた場合、通信サービス１４は、スケジューラ１５に対し、制御プログラムの評価実行停止を指示する。
【００４５】
なお、制御プログラム記憶部１２への制御プログラムの格納や、その格納された制御プログラムの評価実行・停止等は、従来公知のものと同様であるので、その詳細な説明を省略する。
【００４６】
設定記憶部１３は、図６に示すようなデータ構造で設定情報が格納されている。すなわち、変数名，メモリアドレス，データタイプ，変数種別，デバイスアドレスから構成される。ここで、変数名，メモリアドレス，データタイプは、タグ記憶部３に記憶され、デバイス・タグ設定部４から送られてきたデータを格納する。更に、変数種別は、入力外部変数と出力外部変数の別を示す数値が格納される。デバイスアドレスは、デバイスシリアル番号，チャネル番号並びにビット位置から構成される。
【００４７】
ここで本形態では、デバイス検出サービス１７を設け、コントローラ１０に直接または間接的に接続されたデバイスを定期的に監視するようにしている。すなわち、ネットワーク等に接続された各デバイスに対し、メッセージサービス２０（機能ブロック部からの指示に従って、ネットワーク上の指定ノード、或いは全ノードにコマンドメッセージを送出し、入出力デバイス５からのレスポンスメッセージを受信し、受信したデータを機能ブロック部に返す機能を持つ）を介してデバイス情報取得のコマンドメッセージを送信する。
【００４８】
すると、そのコマンドメッセージに応答して各デバイスが、レスポンスメッセージとしてデバイス名，シリアル番号，ノード番号，入出力サイズ，メーカ名などのデバイス情報を送ってくるので、そのデバイス情報を取得する。そして、取得したデバイス情報と既に保持しているデバイス情報を比較し、差分がある場合には、新規なデバイスがネットワーク等に接続されたと判断し、その差分（新規なデバイスに関する）情報をメモリマップ設定サービス１８に送る。なお、コントローラ１０に電源を投入した直後は、直前のデータがないので、メモリマップ設定サービスに取得した情報を送出する。
【００４９】
メモリマップ設定サービス１８は、デバイス検出サービスからデバイス情報を取得し、その情報を元にメモリマップを作成するとともに、作成したメモリマップはデータ転送サービス、サイクリックサービスに送出する。
【００５０】
メモリマップは、データ源とそのデータ源をＩ／Ｏメモリ上のどこにマッピング（コピー）するかを示した情報であり、図７に示すようなデータ構造となっている。そして、データ転送種別としては、▲１▼「デバイスＩ／ＯデータからＩ／Ｏメモリ」，▲２▼「Ｉ／ＯメモリからデバイスＩ／Ｏデータ」，▲３▼「Ｉ／ＯメモリからＩ／Ｏメモリ」の３種類が用意され、そのうちのいずれかを示す数値が格納される。そして、それら３つの種類に応じて、データソースアドレス並びに転送先Ｉ／Ｏメモリアドレスは、図８に示す内容が登録される。さらに、データソースデータタイプには、ＢＯＯＬ型、ＩＮＴ型などデータ型を示す数値が格納される。さらに、配列データの場合には要素数もいっしょに格納される。
【００５１】
上記した３つの種類のうち、▲１▼，▲２▼は、従来から生産製造分野において一般に用いられているもので、デバイスＩ／Ｏデータの参照方式「データリンク」に対応するデータである。そして、本発明では、上記▲３▼のデータ形式を用意することにより、後述するようにマップ情報を外部入出力変数の入出力処理に使用することができる。
【００５２】
そして、メモリマップ設定サービス１８の具体的な処理機能は、図９から図１１に示すフローチャートのようになっている。すなわち、まずデバイス毎に先頭アドレスを割り当てる（ＳＴ１）。これは、図１における▲１▼，▲２▼のデータを格納するための処理であり、従来公知の部分である。この処理ステップの具体的なアルゴリズムは、図１０に示すようになる。
【００５３】
すなわち、まずデバイス検出サービス１７から取得されたデバイス情報に基づき、接続された全てのデバイスの入力サイズの総和と出力サイズの総和を求める（ＳＴ１０）。
【００５４】
そして、先頭のデバイス情報を操作対象に設定するとともに、入力先頭アドレスと、出力先頭アドレスを設定する（ＳＴ１１，ＳＴ１２）。本例では、入力データの格納領域に続いて出力データの格納領域を設定し、各デバイスのそれぞれのデータを隙間無くメモリに割り付けるようにしている。
【００５５】
次いで、処理対象のデバイス情報からデバイスのシリアル番号と入出力サイズを取り出し、そのデバイスについて、Ｉ／Ｏメモリ（データリンクエリア）の割り付けを行う（ＳＴ１３〜ＳＴ１７）。つまり、現在設定されている入力先頭アドレスと出力先頭アドレスをそれぞれそのデバイスについての入力先頭アドレス，出力先頭アドレスに決定し（ＳＴ１３，ＳＴ１４）、決定したアドレスをシリアル番号を関連付けてメモリマップ設定サービス１８が管理するデバイスアドレス情報記憶部（データ構造は図１２参照）に格納する（ＳＴ１５）。さらに、各先頭アドレスに基づく所定のデータを、上記したマップ情報に格納する（ＳＴ１６，ＳＴ１７）。
【００５６】
操作対象のデバイスが最後のデバイスでない場合には、次のデバイスの情報を操作対象にする（ＳＴ１８，ＳＴ１９）。そして、新たな操作対象の入力並びに出力先頭アドレスを求める（ＳＴ２０）。つまり、前回処理したデバイスで使用したメモリ領域分（ステップ１３で取得した入力サイズ，出力サイズにより既知）だけ加算する。その後、ステップ１３に戻り、上記処理を繰り返し実行する。そして、最後のデバイス情報に対する処理が終了すると、ステップ１８の分岐判断でＹｅｓとなるので、今回の「デバイス毎に先頭アドレスを割り当て（ＳＴ１）」の一連の処理を終了する。
【００５７】
次いで、変数毎にマップ情報を作成する（ＳＴ２）。この処理ステップの具体的なアルゴリズムは、図１１に示すようになる。つまり、設定記憶部１３内に格納された設定情報を先頭から順に処理をする。すなわち、先頭の設定情報を操作対象に設定する（ＳＴ２１）。そして、操作対象の設定情報のデバイスアドレスから、デバイスのシリアル番号を取得する（ＳＴ２２）。このシリアル番号をキーにして、上記ステップ１の処理で作成したデバイスアドレス情報記憶部をアクセスし、そのデバイスの入力，出力先頭アドレスを取得する（ＳＴ２３）。
【００５８】
さらに、設定情報のデバイスアドレスから、オフセットアドレスとビット位置を取り出すとともに、変数のメモリアドレス，データタイプ並びに変数種別を取り出す（ＳＴ２４，ＳＴ２５）。そして、取得した各情報に基づいて、データリンクエリアにおける変数位置を求め、変数種別に従ってマップ情報（データ転送種別▲３▼）に算出した値を格納する（ＳＴ２６，ＳＴ２７）。
【００５９】
最後の設定情報でない場合には、次の設定情報を操作対象にした後、ステップ２２に戻る（ＳＴ２８，ＳＴ２９）。このようにして、上記した処理を、設定情報毎に順に繰り返し実行し、全ての設定情報に基づいて、変数位置を算出し、マップ情報に格納することにより、今回の「変数毎にマップ情報を作成（ＳＴ２）」の一連の処理を終了する。
【００６０】
上記した処理により設定されたマップ情報に従い、入出力デバイス５が観測した入力データがコントローラ１０内のＩ／Ｏメモリ１１に定期的に反映され、コントローラ１０内のＩ／Ｏメモリ１１上の値を入出力デバイス５に定期的に出力するデータリンクが実行される。
【００６１】
このデータリンクを行うサービスとして、データ転送種別▲１▼，▲２▼のマップ情報に基づいて実行されるサイクリックサービス２１と、データ転送種別▲３▼のマップ情報に基づいて実行されるデータ転送サービス１９がある。
【００６２】
サイクリックサービス２１は、従来公知のもので、データ転送種別▲１▼と▲２▼のマップ情報を取得し、その情報に基づいて、Ｉ／Ｏメモリ１１上のデータをＩ／Ｏメモリ１１上の他のデータ領域に転送するものである。転送するタイミングはスケジューラ１５より通知されるタイミングであり、該当するすべてのマップ情報を処理し終えたらスケジューラ１５に処理終了を通知する。
【００６３】
一方、上記ステップ２（ステップ２１〜２９）を実行して生成されたデータ転送種別▲３▼のマップ情報は、データ転送サービス１９によって呼び出され、データ転送サービス１９は、スケジューラ１５から通知されるタイミングに従って、そのマップ情報に基づいて、Ｉ／Ｏメモリ上のデータを、Ｉ／Ｏメモリ上の他のデータ領域に転送する。そして、該当するすべてのマップ情報の転送処理を終了したらスケジューラ１５に処理終了を通知する。つまり、このデータ転送サービス１９により、Ｉ／Ｏメモリ１１を外部入出力変数の入出力処理に使用するところが本発明の特徴の１つである。
【００６４】
係る処理を図１３を用いて詳述する。同図に示すように、Ｉ／Ｏメモリ１１上の所定アドレスに、データ転送種別▲１▼から▲３▼に応じたデータの格納領域が設定されている。
【００６５】
すなわち、外部入出力変数の「始動ＳＷ」，「始動ランプ電源」は、制御プログラム内で、Ｉ／Ｏメモリ１１上のアドレスにそれぞれ「チャネル番号２０（ＣＨ００２０）ビット位置０」「チャネル番号１００（ＣＨ０１００）ビット位置１」に割り当てられている。さらに、Ｉ／Ｏメモリ１１の先頭チャネル番号１１００（先頭ＣＨ１１００）から所定サイズ分は、デバイス（シリアル番号＃１２３４５６）５′からのデータを格納する領域として割付が行われている。また、先頭チャネル番号１１００（先頭ＣＨ１０００）から所定サイズ分は、デバイス（シリアル番号＃７８９ＡＢＣ）５″からのデータを格納する領域として割付が行われている。
【００６６】
上記した前提において、サイクリックサービス２１によるデータ転送処理が、図中実線（太）の矢印で示すように行われ、データ転送サービス１９によるデータ転送処理が図中波線（太）の矢印で示すように行われる。そして、各サービスを稼働しつつ行われる具体的な外部入出力変数の入出力処理の一例を示すと、以下のようになる。
【００６７】
すなわち、まず入力である始動ＳＷをデバイス側からたどると、制御プログラム中に記述された始動ＳＷは、デバイス（シリアル番号＃１２３４５６）５′に接続されたスイッチが実体である。そして、係るスイッチのＯＮ／ＯＦＦ状態（Ｉ／Ｏデータ）はデバイス５′に伝達され、ネットワークを経由してサイクリックサービス２１によってコントローラ１０内部に収集される。
【００６８】
サイクリックサービス２１は、メモリマップ設定サービス１８によって指定されたメモリマップ情報に基づき、収集したＩ／ＯデータをＩ／Ｏメモリ上の指定位置（ここではチャネル番号１１００）を先頭にブロック転送する。
【００６９】
また、データ転送サービス１９は同じくメモリマップ設定サービス１８によって指定されたメモリマップに基づき、サイクリックサービス２１によってブロック転送されたＩ／Ｏメモリ（ここではチャネル番号１１００）の指定ビットを、制御プログラムが参照する変数データ領域（ここではチャネル番号２０ビット位置０）にビットデータ転送をする。これにより、制御プログラムは、デバイスによって取り込まれた入力データを外部入力変数「始動ＳＷ」として参照可能となる。
【００７０】
一方、制御プログラムが外部出力変数「始動ランプ電源」に出力した値は、メモリマップ設定サービス１８で指定された変数データ領域（ここではチャネル番号１００ビット位置１）に書き込まれ、次いで、データ転送サービス１９により、デバイス５″に割り付けられたＩ／Ｏメモリの所定領域（ここでは先頭チャネル番号１０００から始まるブロックの所定ビット）にビット転送され、これに基づきサイクリックサービス２１により、先頭チャネル番号１０００からの所定領域分のデータが、デバイス５″にブロック転送され、デバイス５″に接続される始動ランプ電源のＯＮ／ＯＦＦが制御される。
【００７１】
このように、本形態によれば、「メモリマップ」というコントローラ１０内のサービスによって、ネットワークの状況（デバイスのノード番号設定状況など）に従い情報が生成され、例えばノード番号が生産ラインの運用中に変更されたとしても、その情報に基づいて制御プログラム内の外部入出力変数と、デバイスとの関連付けが維持され、適切にデータの入出力が行える。
【００７２】
また、サイクリックサービス２１は一般に「データリンク」として生産製造分野で広く用いられているデータ入出力の仕組みであり、その仕組みに何らの変更を加えること無しに上記のデータ入出力の仕組みとすることができる。
【００７３】
さらに、本発明では、コントローラはシリアル番号によってデバイスを特定し、たとえ、そのデバイスのノード番号が変更されたとしても、制御プログラムが参照する外部入出力変数のデータ領域に適切にデバイスの入力データを格納し、デバイスに変数の値を出力する。これにより，一度デバイス・タグ設定を行えば、いかなるデバイス構成の変更があったとしても、その変更を検出することができる。従来のようにノード番号の変更により制御プログラムの変更や、メモリ割付の変更を行う必要が全くない。
【００７４】
なお、マップ情報からデータを転送するコードで構成される制御プログラムを機械的に生成することは容易に行える。そして、メモリマップ設定サービス１８がマップ情報から制御プログラムを生成し、制御プログラム記憶部１２に記憶保持させ、データ転送をデータ転送サービス１９が行うのではなく、制御プログラム実行エンジン１６に処理させることもできる（この場合、データ転送サービスは不要となる）。
【００７５】
さらに、上記した実施の形態では制御プログラムエディタ２等は機能が追加されていないと説明したが、より具体的には、不要な機能がある。すなわち、従来のコントローラ１０の制御プロクラムの場合、外部入出力変数と、他の内部変数を区別して管理し、特別なメモリ領域が用意されていた。しかし、本形態では、ユーザが通常の内部変数と区別なく取り扱えるという効果がある。これにともない、制御プログラムエディタ２においても、内部変数と外部入出力変数を区別して処理する必要がなく、制御プログラムエディタの構造，アルゴリズムを簡単にできるという効果がある。
【００７６】
また、コントローラの制御プログラム実行エンジンも、本発明のために特別な命令語をサポートする必要がない。さらに、特別に用意されたメモリ領域も必要なくなることからメモリアクセスの種類も減らすことができ実行エンジンの命令語体系を簡単にできるという効果も併せて存在する。
【００７７】
図１４は、本発明の第２の実施の形態を示している。本実施の形態は、基本的に第１の実施の形態と同様であり、プラグアンドプレイ方式に適用していない従来のコントローラを本発明に係るコントローラに変更するための仕組みを示している。
【００７８】
すなわち、図１に示した第１の実施の形態におけるコントローラ１０は、従来のコントローラに比べ、設定記憶部１３，デバイス検出サービス１７並びにメモリマップ設定サービス１８が付加されたものであり、その他の機能ブロック部は、従前のものをそのまま使用することができる。そして、係る追加された機能ブロック部は、従来のデータリンク方式・制御プログラム方式の機能ブロックに追加されるだけであり、従来のデータリンク方式・制御プログラム方式の機能ブロック内のアルゴリズムを改造する必要はない。そこで、追加された機能ブロック部を物理的に拡張ボードとして、従前の本体部分と分離するようにした。
【００７９】
具体的には、コントローラ１０の内部に、Ｉ／Ｏデータ，メッセージデータを流すためのバス３０を設け、そのバス３０に、ＣＰＵユニット３１，通信ユニット３２，プラグアンドプレイユニット３３を連結する。それぞれのユニットは物理的に着脱可能なボード（拡張ボード）形式に構成している。さらに、各ユニット上に、第１の実施の形態で示した各機能ブロック部が適宜配置される。
【００８０】
そして、各ユニット３１，３２，３３は、バスドライバ３１ａ，３２ａ，３３ａを経由してデータを指定のユニットの通信サービス１４，３２ｂ，３３ｂにメッセージを送信することができる。通信サービス１４，３２ｂ，３３ｂはさらにメッセージ内に指定されている機能ブロックにメッセージを送出するようになっている。
【００８１】
本発明との関係で言うと、ＣＰＵユニット３１内のＩ／Ｏメモリ１１を、プラグアンドプレイユニット３３のデータ転送サービス１９，通信ユニット３２のサイクリックサービス２１がバスドライバを経由して読み書き、データのブロック転送が可能となっている。なお、排他制御はバスドライバ３１ａ〜３３ａが行う。さらに、バスドライバ３１ａ〜３３ａは、バス３０経由で任意のユニットのＣＰＵに割込みを要求することができる。
【００８２】
また、ツール１は、ツール１内の通信ドライバ１ｃからＣＰＵユニット３１の通信ドライバ３１ｃを経由して、ＣＰＵユニット３１の通信サービス１４にメッセージを送信できる。また、各ユニット３１〜３３には、ネットワーク上独立したネットワークアドレスが付与されており、ＣＰＵユニット３１の通信サービス１４は、ツール１から送信されきたメッセージの宛先によって、通信ユニット３２或いは通信サービス３３ｂ，３３ｂにメッセージを転送する。これによってツール１は、ＣＰＵユニット３１，通信ユニット３２並びにプラグアンドプレイユニット３３にメッセージを送信することができる。従って、第１の実施の形態で説明した作用効果を、本実施の形態においても実現することができる。
【００８３】
さらに、上記したように３つのユニットに分離して実装し、それぞれに独立したネットワークアドレスが付与されているとともに、各ユニットを物理的に脱着可能としたことから、例えば、図１４に示した構成のものから、プラグアンドプレイユニット３３を取り外すと、従来からあるコントローラとなる。つまり、プラグアンドプレイ機能が不要な場合には、プラグアンドプレイユニット３３を取り外した状態でコントローラを構成し、プラグアンドプレイ機能が必要となる場合にはプラグアンドプレイユニット３３を構成に追加することにより、多くの部品を共通にしていずれの対応もとれる。
【００８４】
一方、特にＰＬＣにおいては、従来から拡張用のバスシステムを持った構成が一般的である。従って、そのようなバスシステムに併せたプラグアンドプレイユニット３３を構成することにより、従来のＰＬＣを、プラグアンドプレイを持ったものに容易に拡張することができる。すなわち、すでに稼働している生産ラインのＰＬＣも拡張できる。
【００８５】
図１５は、本発明の第３の実施の形態を示している。本実施の形態では、入出力デバイス５とその入出力デバイス５を管理する制御プログラム（ドライバ）を関連づけて一体にした制御オブジェクトという単位で取り扱いを可能とし、係る取り扱いを行うために必要な情報をオブジェクトデータベース４１に格納するようにしている。
【００８６】
すなわち、入出力デバイス５を特定するのに際し、オブジェクト名（デバイス名）を用いて識別するようにし構成した。つまり、制御プログラム中でデバイスを読み出す場合、従来はアドレスを直接入力するようにしていたが、本形態ではデバイス名で定義するようにした。そして、デバイス名で特定されるデバイスが実際にどこに接続され存在するかの情報を別途用意するようにした。そして、具体的にどこに接続されているか等の情報は別途管理するようにした。これにより、例えば、制御プログラムとデバイスを別のコントローラに接続（再利用）した際に、アドレス（メモリアドレス，通信アドレス等）が異なった場合でも、別途管理しているデバイス名とアドレスの関係を修正するだけで済み、制御プログラムの内容の修正までは不要となる。
【００８７】
係る処理を実現するため、オブジェクトデータベース４１には、制御オブジェクトを構成するデバイス情報とデバイスをオブジェクト名で識別するための情報を保持するために、「制御オブジェクト名」と「制御オブジェクトを構成するデバイス情報」を格納している。ここで、デバイス情報としては、バス或いはネットワーク上におけるデバイスのアドレス（以下、通信アドレス）である。すなわち、デバイスがＰＬＣ等の内部状態を保持できる場合は、ユーザがＰＬＣ等に対して定義したデバイス名とそのデバイス名がＰＬＣ等のデバイスのどのエリアに保存されているかというアドレス情報がある。更に、デバイスが単純なデジタルＩ／Ｏのように内部状態を保持できない場合は、ユーザが定義するデバイス名に加え、デバイスの製造メーカが定義するデバイスのシリアル番号なども併せて格納するようにしている。さらにまた、ユーザが定義した制御オブジェクトのインタフェース情報（以下、オブジェクトインタフェース情報：サービス名、サービスに必要なデータの型情報、オブジェクトの属性名、及びその型情報）を保持する仕組みを持つ。
【００８８】
よって、オブジェクトデータベース４１により、制御オブジェクトがどのようなデバイスから構成されているかということと、デバイスをオブジェクト名という論理名で識別することが可能となる。
【００８９】
上記各情報は、ツール１により作成されたものをコントローラ１０にダウンロードすることにより実装される。また、コントローラ１０にダウンロードされる際に必要なデータの修正が行われる。
【００９０】
すなわち、まず、ツール１は、第１の実施の形態と同様に、制御プログラムエディタ２を備えるが、第１の実施の形態におけるタグ記憶部３，デバイス・タグ設定部４に替えて、オブジェクト記憶部８とオブジェクトエディタ９を設けている。
【００９１】
そして、本形態におけるオブジェクトは、オブジェクトに含まれるデバイス，オブジェクトのインタフェース定義（プロパティ，メソッド）から構成される。オブジェクトエディタ９は、これらのデバイスの指定並びにインタフェース定義を編集するユーザインタフェースを構成する。このユーザインタフェースの一例としては、図１６に示すようになる。
【００９２】
図中左上に用意された「オブジェクトリスト」には、定義されたオブジェクト名の一覧が表示される。オブジェクトはユーザが新規に作成したり、削除することができる。このリストに表示されているアイテム（オブジェクト）の内、１つを選択することで、選択したオブジェクトが編集可能になる（図では、「組み付けオブジェクト」が選択されている）。
【００９３】
つまり、そのオブジェクトについて設定された情報が右上方部位に表示される。ここで表示される情報は、図から明らかなように、第１の実施の形態で示したデバイス・タグ設定と同じ画面構成である。但し、表示されている変数のリストは、オブジェクトリストの中から選択されたオブジェクトのものに限られている。さらに、オブジェクトの変数の宣言は、ツール１の入力装置を使用して、全てこの画面上で登録する。これにより、変数リストの変数を追加したり削除したりすることが本ユーザインタフェース上で可能となっている。さらにまた、＜入力変数＞，＜出力変数＞の設定を付加している。これは、オブジェクトにアクセスするための入出力変数であり、制御プログラムで使用される。
【００９４】
また、右下方部位には、オブジェクトリストの中で選択されたオブジェクトに関連付けられたプログラムが表示される。この表示領域において、ユーザは、変数リストにある変数を使ってプログラムを記述することができる。ここで使用可能なプログラム言語は、Ｃ，ＰＡＳＣＡＬなどの手続き型言語をはじめ任意の言語である。
【００９５】
なお、オブジェクトに関連付けられたプログラム内で使用する変数のＩ／Ｏメモリアドレスは、オブジェクトエディタ９がオブジェクト用に割り当てられたＩ／Ｏメモリの中から、空いている場所を適宜割り当てる。
【００９６】
なおまた、その他の機能、つまり、「ノード番号をシリアル番号に置換」，「コントローラに設定を反映する」などは、第１の実施の形態と同様であるので、その詳細な説明を省略する。
【００９７】
上記した各種機能を用いて作成，編集した結果は、オブジェクト記憶部８に格納され、また、通信サービス１４を介してコントローラ１０に送出する。そして、オブジェクト記憶部８は、オブジェクトエディタ９でオブジェクトの入力変数，出力変数の指定を受けた変数のみの情報を記憶保持するもので、具体的な記憶内容（データ構造）は、図１７に示す通りである。すなわち、オブジェクト名と、そのオブジェクト名で規定されるオブジェクトを構成する変数情報からなるオブジェクト情報単位で登録されている。
【００９８】
ここで、オブジェクト名は、オブジェクトを一意に識別するためのオブジェクトの名称である。図１６に示す例では、「搬入オブジェクト」，「組み付けオブジェクト」，「搬出オブジェクト」がそれぞれ対応する。
【００９９】
また、変数情報は、そのオブジェクトで定義された数だけ並ぶ。つまり、オブジェクトエディタ９で定義された全ての変数（図１６に示す「組み付けオブジェクト」が選択された状態で示された変数）が抽出され、順に格納される。なお、変数情報は、変数名，メモリアドレス，データタイプ，変数種別で構成される。そして、変数種別は、「入力変数」と「出力変数」を識別する値が格納される。他の内容は第１の実施の形態におけるタグ記憶部のものと同じである。
【０１００】
なお、本実施例では、オブジェクトにはオブジェクト指向の概念としてのインスタンスのみ含まれている。メソッド並びにクラスが含まれていないが、それらの概念を含めるようにしてもよい。
【０１０１】
なおまた、オブジェクトを使った制御プログラムの記述例を示すと、図１８のようになる。図から明らかなように、オブジェクト（図の例では、搬送オブジェクト）は、制御プログラムから入力変数の値を受け取り、オブジェクトに関連付けられたプログラムを実行し、その結果は出力変数を通じて制御プログラムに返される。
【０１０２】
一方、コントローラ１０は、第１の実施の形態と相違して、オブジェクトデータベース４１並びにオブジェクトプログラム実行エンジン４３を設けている。機能的には、オブジェクトデータベース４１は、設定記憶部１３に対応し、オブジェクトプログラム実行エンジン４３は、データ転送サービス１９に対応する。
【０１０３】
ここで、オブジェクトデータベース４１は、ツール１から送られてくるオブジェクトエディタ９で定義されたオブジェクトのすべての変数情報（内部変数、入力変数、出力変数、入出力外部変数）と、それに関連づけられたプログラムを記憶保持するようになっている。
【０１０４】
具体的なデータ構造としては、図１９のようになっている。すなわち、オブジェクトデータベース４１は、オブジェクト名，変数情報，プログラムから構成される設定情報が順に記憶される。ここで、変数情報は、変数名，メモリアドレス，データタイプ，変数種別並びにデバイスアドレスから構成される。そして、変数種別は、「入力変数」，「出力変数」，「入力外部変数」，「出力外部変数」，「内部変数」の別を識別するための数値であり、デバイスアドレスは変数種別が「入力外部変数」並びに「出力外部変数」の場合のみ有効な値が格納される。なお、その他のデータは第１の実施の形態において説明したものと同様である。さらにまた、プログラムは、オブジェクトエディタで関連付けて編集しコード化されたプログラムが格納される。
【０１０５】
オブジェクトの入出力外部変数についてのＩ／Ｏメモリ１１上のマップ情報は、メモリマップ設定サービス１８にて作成され、オブジェクトプログラム実行エンジン４３とサイクリックサービス２１に送出される。そして、このマップ情報は、第１の実施の形態で説明したものと同様で、図１１に示すように、制御プログラム側から参照するＩ／Ｏメモリ１１上のアドレスは固定にし、その参照先のアドレスと、デバイスに割り付けられたアドレスとの関連づけを行うためのデータである。
【０１０６】
オブジェクトプログラム実行エンジン４３は、第１の実施の形態におけるデータ転送サービス１９と、オブジェクトに関連付けられたプログラムの実行機能とを併せ持つ。すなわち、上記したように、制御プログラム側から参照するＩ／Ｏメモリ１１上のアドレスと、その制御プログラムが本来参照するデバイスに割り付けられたＩ／Ｏメモリ１１上のアドレスとの関連付け情報に基づき、Ｉ／Ｏメモリ１１上でのデータ転送サービスを行う機能を持つ。
【０１０７】
さらに、プログラムの実行機能として、入力変数，出力変数，入力外部変数，出力外部変数，内部変数の値を参照し、プログラムを評価実行して出力変数，出力外部変数，内部変数に値を書き込む。つまり、図１８に示すオブジェクトを実行する。そして、実行した結果得られた出力変数の値は制御プログラムに、また、出力外部変数の値はデータ転送サービス機能とサイクリックサービス２１を経由して入出力デバイス５に出力される。
【０１０８】
なお、本実施の形態では、オブジェクトに関連付けられたプログラムを実行する機能をオブジェクトプログラム実行エンジン４３に組み込むようにしたが、制御プログラム実行エンジン１６側を組み込むようにしても良い。なお、デバイス検出サービス１７に基づく新規なデバイスの検出に基づくメモリ情報の設定並びにそれに基づくデータリンク方式を利用した実際の入出力変数の処理などは、上記した第１の実施の形態と同様であるので、対応する部材に同一符号を付し、その詳細な説明を省略する。
【０１０９】
図２０は、本発明の第４の実施の形態を示している。本実施の形態は、第３の実施の形態を基本とし、第２の実施の形態と同様にバス３０に脱着自在に装着される複数のユニットで構成される例を示している。図から明らかなように、本実施の形態では、ＣＰＵユニット３１と通信ユニット３４の２つのボードから構成し、通信ユニット３４にプラグアンドプレイの機能ブロックを組み込むようにしている。
【０１１０】
つまり、各ユニット３１，３４は、バスドライバ３１ａ，３４ａを介して相互にデータの送受が行える。そして、通信ユニット３４は、通信ドライバ３４ｃを介して入出力デバイス５とメッセージやＩ／Ｏデータの送受を行うようになっている。そして、この図２０と図１５を比較すると明らかなように、機能としてはバス３０を介して接続するための機能が追加されるものの、基本的に機能は同一である。つまり、本実施の形態は、第３の実施の形態と同様の作用効果を奏することができるので、対応する部材に同一符号を付し、その詳細な説明を省略する。
【０１１１】
なお、本実施の形態では、通信ユニットにプラグアンドプレイの機能ブロックを組み込むようにしたが、ＣＰＵユニットに組み込むようにしても良いし、第２の実施の形態と同様に、別途独立したユニットを構成するようにしても良い。また、第１の実施の形態を基本として、第４の実施の形態のように通信ユニットにプラグアンドプレイの機能ブロックを組み込むようにしてもよいし、ＣＰＵユニットに組み込むようにしてももちろん良い。
【０１１２】
【発明の効果】
以上のように、この発明では、データリンク方式を利用し、しかも、メモリ上に割り当てた制御プログラムの変数の参照先（変数データ領域）と、デバイスと送受するために設定されたデバイスデータ領域をそれぞれ別の場所に割り当てるとともに、それらの領域間をデータ転送でデータを移すことができるようにしたため、デバイスの接続を検知したならば、係る転送する領域間を設定することにより、制御プログラムを変更することなく外部入出力変数の入出力処理が実現できる。つまり、プラグアンドプレイ方式が実現できる。さらに、拡張ボードや通信ユニットなどを使用することにより、プラグアンドプレイに対応していない機器であっても対応可能に拡張することができる。
【図面の簡単な説明】
【図１】本発明の第１の実施の形態を示す図である。
【図２】制御プログラムの一例を示す図である。
【図３】タグ記憶部のデータ構造の一例を示す図である。
【図４】デバイス・タグ設定部を説明する図である。
【図５】デバイス一覧のユーザインタフェースの一例を示す図である。
【図６】設定記憶部のデータ構造の一例を示す図である。
【図７】メモリマップ設定サービスで生成されるマップ情報のデータ構造を示す図である。
【図８】マップ情報の内容を説明する図である。
【図９】メモリマップ設定サービスの機能を説明するフローチャートである。
【図１０】メモリマップ設定サービスの機能を説明するフローチャートである。
【図１１】メモリマップ設定サービスの機能を説明するフローチャートである。
【図１２】デバイスアドレス情報のデータ構造を示す図である。
【図１３】外部入出力変数の入出力処理を説明する図である。
【図１４】本発明の第２の実施の形態を示す図である。
【図１５】本発明の第３の実施の形態を示す図である。
【図１６】オブジェクトエディタを説明する図である。
【図１７】オブジェクト記憶部のデータ構造を示す図である。
【図１８】オブジェクトを使った制御プログラムの一例を示す図である。
【図１９】設定情報を説明する図である。
【図２０】本発明の第４の実施の形態を示す図である。
【符号の説明】
１  ツール
２  制御プログラムエディタ
３  タグ記憶部
４  デバイス・タグ設定部
５  デバイス（入出力デバイス）
８  オブジェクト記憶部
９  オブジェクトエディタ
１０  コントローラ
１１  Ｉ／Ｏメモリ
１２  制御プログラム記憶部
１３  設定記憶部
１４  通信サービス
１５  スケジューラ
１６  制御プログラム実行エンジン
１７  デバイス検出サービス
１８  メモリマップ設定サービス
１９  データ転送サービス
２０  メッセージサービス
２１  サイクリックサービス
３０  バス
３１  ＣＰＵユニット
３２  通信ユニット
３３  プラグアンドプレイユニット
３４  通信ユニット
４１  オブジェクトデータベース
４３  オブジェクトプログラム設定サービス
【図１】
0003932817.tif 000002
【図２】
0003932817.tif 000003
【図３】
0003932817.tif 000004
【図４】
0003932817.tif 000005
【図５】
0003932817.tif 000006
【図６】
0003932817.tif 000007
【図７】
0003932817.tif 000008
【図８】
0003932817.tif 000009
【図９】
0003932817.tif 000010
【図１０】
0003932817.tif 000011
【図１１】
0003932817.tif 000012
【図１２】
0003932817.tif 000013
【図１３】
0003932817.tif 000014
【図１４】
0003932817.tif 000015
【図１５】
0003932817.tif 000016
【図１６】
0003932817.tif 000017
【図１７】
0003932817.tif 000018
【図１８】
0003932817.tif 000019
【図１９】
0003932817.tif 000020
【図２０】
0003932817.tif 000021