(57)【特許請求の範囲】
【請求項１】
複数の設備より成るシステム構成を有し、該複数の設備を制御対象とし、各制御プログラムを実行することで各設備の各種機器を制御するものであって、各設備毎にそれぞれ１以上のＩ／Ｏモジュールを介して制御を行うプログラマブルコントローラと、該プログラマブルコントローラと接続する支援装置とを有するプログラマブルコントローラシステムであって、
前記支援装置は、
前記各Ｉ／Ｏモジュールと前記各設備との対応関係を登録させて記憶するシステム構成登録手段と、
前記各制御プログラムのソースコードをコンパイルして機械語オブジェクトを生成すると共に、該コンパイルの際に得られる各制御プログラムと前記Ｉ／Ｏモジュールとの対応関係を記憶部に記憶するコンパイル手段と、
任意の設備が指定されると、前記システム構成登録手段と前記記憶部とを参照することで、該指定された設備に対応する前記制御プログラムを全て判別して、該判別した制御プログラム全てを前記プログラマブルコントローラに転送する転送管理手段とを有し、
前記ソースコードの各変数のうちアドレス指定がある変数に関しては、該アドレス指定に前記Ｉ／Ｏモジュールの識別情報が含まれており、
前記コンパイル手段は、該Ｉ／Ｏモジュール識別情報を用いて、前記制御プログラムと前記Ｉ／Ｏモジュールとの対応関係を生成することを特徴とするプログラマブルコントローラシステム。
【請求項２】
前記システム構成の変更に伴って前記設備に関して順次リプレースが行われる場合において、前記転送管理手段で最初の設備が指定される前に、前記支援装置が保持する前記制御プログラムは全て変更後のシステム構成に応じた制御プログラムとなっており、
前記指定された設備は、前記リプレース済みの設備であることを特徴とする請求項１記載のプログラマブルコントローラシステム。
【請求項３】
前記転送管理手段は、前記支援装置が保持する各制御プログラムのうち、前記プログラマブルコントローラが保持する制御プログラムと異なる制御プログラムを転送候補として、前記システム構成登録手段と前記記憶部とを参照することで該転送候補の各制御プログラムが係わる設備を判別して、少なくとも該転送候補の各制御プログラムが係わる設備を一覧表示して前記指定を行わせる為の選択画面を表示することを特徴とする請求項１記載のプログラマブルコントローラシステム。
【請求項４】
前記選択画面は、前記転送候補の各制御プログラムを、当該制御プログラムに係わる前記設備と対応付けて一覧表示することを特徴とする請求項３記載のプログラマブルコントローラシステム。
【請求項５】
前記プログラマブルコントローラは、稼働中に、前記転送管理手段によって転送されてきた前記各制御プログラムを、自己が保持・実行していた制御プログラムに代えて保持・実行することを特徴とする請求項１記載のプログラマブルコントローラシステム。
【請求項６】
前記コンパイル手段は、前記コンパイルの際に前記ソースコードの各変数に対して割り当てたアドレスを保持しており、過去のコンパイルの際に既にアドレスを割り当て済みの変数に対しては同じアドレスを割り当てることを特徴とする請求項５記載のプログラマブルコントローラシステム。
【請求項７】
複数の設備より成るシステム構成を有し、該複数の設備を制御対象とし、各制御プログラムを実行することで各設備の各種機器を制御するものであって、各設備毎にそれぞれ１以上のＩ／Ｏモジュールを介して制御を行うプログラマブルコントローラと、該プログラマブルコントローラと接続する支援装置とを有するプログラマブルコントローラシステムにおける前記支援装置であって、
前記各Ｉ／Ｏモジュールと前記各設備との対応関係を登録させて記憶するシステム構成登録手段と、
前記各制御プログラムのソースコードをコンパイルして機械語オブジェクトを生成すると共に、該コンパイルの際に得られる各制御プログラムと前記Ｉ／Ｏモジュールとの対応関係を記憶部に記憶するコンパイル手段と、
任意の設備が指定されると、前記システム構成登録手段と前記記憶部とを参照することで、該指定された設備に対応する前記制御プログラムを全て判別して、該判別した制御プログラム全てを前記プログラマブルコントローラに転送する転送管理手段とを有し、
前記ソースコードの各変数のうちアドレス指定がある変数に関しては、該アドレス指定に前記Ｉ／Ｏモジュールの識別情報が含まれており、
前記コンパイル手段は、該Ｉ／Ｏモジュール識別情報を用いて、前記制御プログラムと前記Ｉ／Ｏモジュールとの対応関係を生成することを特徴とするプログラマブルコントローラシステムの支援装置。
【請求項８】
複数の設備より成るシステム構成を有し、該複数の設備を制御対象とし、各制御プログラムを実行することで各設備の各種機器を制御するものであって、各設備毎にそれぞれ１以上のＩ／Ｏモジュールを介して制御を行うプログラマブルコントローラと、該プログラマブルコントローラと接続する支援装置とを有するプログラマブルコントローラシステムにおける前記支援装置のコンピュータを、
前記各Ｉ／Ｏモジュールと前記各設備との対応関係を登録させて記憶するシステム構成登録手段と、
前記各制御プログラムのソースコードであってその各変数のうちアドレス指定がある変数に関しては該アドレス指定に前記Ｉ／Ｏモジュールの識別情報が含まれているソースコードをコンパイルして機械語オブジェクトを生成すると共に、前記Ｉ／Ｏモジュール識別情報を用いて前記各制御プログラムと前記Ｉ／Ｏモジュールとの対応関係を生成して記憶部に記憶するコンパイル手段と、
任意の設備が指定されると、前記システム構成登録手段と前記記憶部とを参照することで、該指定された設備に対応する前記制御プログラムを全て判別して、該判別した制御プログラム全てを前記プログラマブルコントローラに転送する転送管理手段、
として機能させるためのプログラム。
【請求項９】
複数の設備より成るシステム構成を有し、該複数の設備を制御対象とし、各制御プログラムを実行することで各設備の各種機器を制御するものであって、各設備毎にそれぞれ１以上のＩ／Ｏモジュールを介して制御を行うプログラマブルコントローラと、該プログラマブルコントローラと接続する支援装置とを有するプログラマブルコントローラシステムの前記支援装置における前記制御プログラムの前記プログラマブルコントローラへの転送方法であって、
予め前記各Ｉ／Ｏモジュールと前記各設備との対応関係を登録させて記憶し、
前記各制御プログラムのソースコードであってその各変数のうちアドレス指定がある変数に関しては該アドレス指定に前記Ｉ／Ｏモジュールの識別情報が含まれているソースコードをコンパイルして機械語オブジェクトを生成すると共に、前記Ｉ／Ｏモジュール識別情報を用いて前記各制御プログラムと前記Ｉ／Ｏモジュールとの対応関係を生成して記憶部に記憶し、
任意の設備が指定されると、前記登録した対応関係と前記記憶部に記憶した対応関係とを参照することで、該指定された設備に対応する前記制御プログラムを全て判別して、該判別した制御プログラム全てを前記プログラマブルコントローラに転送することを特徴とするプログラム転送方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラマブルコントローラと支援装置を有するプログラマブルコントローラシステムに関する。
【背景技術】
【０００２】
各Ｉ／Ｏモジュール等を介して各種制御対象機器（各設備の各機器など）を制御するプログラマブルコントローラ（ＰＬＣ）は、自己が保持する制御プログラムを実行することで当該制御を行う。
【０００３】
この制御プログラムは、ＰＬＣに接続された支援装置上で作成されて、ＰＬＣにダウンロードされる。これは、既にＰＬＣ上で保持されて実行されている制御プログラムの更新版（バージョンアップ版など）が作成されて、ＰＬＣにダウンロードされる場合が多い。これに対してＰＬＣ側では、制御プログラムを旧版から新版（バージョンアップ版等）に切り換えて、引き続き上記各種制御対象機器を制御することになる。制御対象機器を停止できない場合も少なくない為、この様なプログラムのダウンロードと切り換えは、システム運用中（ＰＬＣ稼働中）に行われることも少なくない。
【０００４】
ここで、例えば、特許文献１に記載の従来技術が知られている。
特許文献１は、プログラム実行中に、そのプログラムをオンラインで変更可能とするプログラマブルコントローラに関する発明である。
【０００５】
特許文献１の発明は、実行用と変更用のプログラムメモリとパルスメモリをそれぞれ装備したプログラマブルコントローラにおいて、実行中に変化したパルスメモリの内容を保証し、プログラムの変更量が多くてもプログラム制御のリアルタイム制御性を維持し、プログラムの変更内容と実行内容の同一性を維持し、上記実行用と変更用の切替を高速に行うことができるようにする発明である。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平９−１２０３０６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
ＰＬＣが稼働中に、ユーザが支援装置を利用して、ＰＬＣ上で動作している制御プログラムを安全に変更する方法は、上記の通り既知の技術である。
ところで、上記制御プログラムの更新は、様々な理由で行われるものであるが、例えば、上記設備の更新（リプレース；改造など）に伴って行われる場合がある。システムの規模が大きい場合、当該システムの複数の設備の更新（リプレース）を行う場合が多いが、更新（リプレース）対象の設備全てを一度に更新するのではなく、順次、各設備のリプレースを実施する。システム規模が大きい場合のリプレース作業は、システムの設備全てを一度にリプレースするのではなく、部分リプレースを繰り返して順番にリプレースしていく必要がある。
【０００８】
尚、上記“設備”とは、明確な定義はないが、例えばシステムを構成する多数の機器を機能単位で分類したものであり、１以上（通常は複数）の機器から成るものである。機能単位とは、例えばベルトコンベアを駆動する機器（モータ等）と、このベルトコンベア上を搬送される加工対象品に穴を空ける機器（ドリル等）とから成るもののように、相互に関連して何らかの機能（ここでは搬送物に順次穴を空ける）を実現するものである。それ故に、リプレース作業も“設備”単位で行われる場合が多い。
【０００９】
一方、ＰＬＣの制御プログラムの開発は、システム全体の最終形態（リプレースすべき設備は全てリプレースした状態）で設計・製作・試験を実施するため、変更する設備だけを対象に制御プログラムの開発を実施することは、困難であり、ユーザにとって大きな負担になる。
【００１０】
この為、ユーザは上記支援装置において、更新（リプレース；改造等）対象の設備全ての制御プログラムの更新版の作成をまとめて行う場合が多い。この為、任意の設備のリプレース作業が完了する毎に、リプレースした設備を制御する１または複数の制御プログラム（その更新版）だけをＰＬＣにダウンロードして変更させる必要がある。未だリプレースされていない設備に対応する制御プログラム（その更新版）までもＰＬＣにダウンロードして変更させてしまうと、当然、システムの動作に悪影響を及ぼす可能性があるからである。
【００１１】
これに対して、例えば支援装置側で保持・管理する全ての制御プログラム一覧を表示する等して、ユーザに所望の１以上の制御プログラム（ここでは特に、リプレースした設備に対応する制御プログラム（その更新版））を選択・指定させることで、ユーザが指定した制御プログラムのみをＰＬＣに転送する方法が考えられる。
【００１２】
しかしながら、通常、各設備毎にその設備に係わる制御プログラムは複数（場合によっては多数）存在するものであり、ユーザが正しく指定を行うことは困難である。つまり、ユーザは、更新対象の設備に対応する制御プログラムを全て選択・指定すると共に、それ以外の制御プログラムを誤って指定することがないようにする必要があるが、これは手間が掛かることになり、更にミスが生じる場合もある。つまり、指定すべき制御プログラムを指定しなかったり（指定漏れが生じる）、その逆に、未だリプレースされていない設備に対応する制御プログラム（更新版）を誤って選択・指定して、ＰＬＣ側でプログラム更新させてしまう等のミスが生じる可能性があり、システムの動作に悪影響を与えることになる。
【００１３】
本発明の課題は、複数の設備を制御対象とするプログラマブルコントローラシステムに係わり、複数の設備を順次変更するがそれらの制御プログラム変更は支援装置でまとめて行われる場合において、支援装置において任意の設備に係わる変更版プログラムを全て判別してダウンロードすることができるプログラマブルコントローラシステム、その支援装置等を提供することである。
【課題を解決するための手段】
【００１４】
本発明のプログラマブルコントローラシステムは、複数の設備より成るシステム構成を有し、該複数の設備を制御対象とし、各制御プログラムを実行することで各設備の各種機器を制御するものであって、各設備毎にそれぞれ１以上のＩ／Ｏモジュールを介して制御を行うプログラマブルコントローラと、該プログラマブルコントローラと接続する支援装置とを有するプログラマブルコントローラシステムであって、前記支援装置は、前記各Ｉ／Ｏモジュールと前記各設備との対応関係を登録させて記憶するシステム構成登録手段と、前記各制御プログラムのソースコードをコンパイルして機械語オブジェクトを生成すると共に、該コンパイルの際に得られる各制御プログラムと前記Ｉ／Ｏモジュールとの対応関係を記憶部に記憶するコンパイル手段と、任意の設備が指定されると、前記システム構成登録手段と前記記憶部とを参照することで、該指定された設備に対応する前記制御プログラムを全て判別して、該判別した制御プログラム全てを前記プログラマブルコントローラに転送する転送管理手段とを有し、前記ソースコードの各変数のうちアドレス指定がある変数に関しては、該アドレス指定に前記Ｉ／Ｏモジュールの識別情報が含まれており、前記コンパイル手段は、該Ｉ／Ｏモジュール識別情報を用いて、前記制御プログラムと前記Ｉ／Ｏモジュールとの対応関係を生成する。
【発明の効果】
【００１５】
本発明のプログラマブルコントローラシステム、その支援装置等によれば、複数の設備を制御対象とするプログラマブルコントローラシステムに係わり、複数の設備を順次に変更するがそれらのプログラム変更は支援装置でまとめて行われる場合において、支援装置において任意の設備に係わる変更版プログラムを全て判別してダウンロードすることができる。
【図面の簡単な説明】
【００１６】
【図１】本例のプログラマブルコントローラシステムの全体構成図である。
【図２】ＰＬＣによる各設備の制御に係わる構成を示す図である。
【図３】使用変数一覧のデータ構成例である。
【図４】（ａ）は設定画面、（ｂ）はモジュール情報の具体例である。
【図５】（ａ）、（ｂ）は、各プログラム一覧のデータ構成例である。
【図６】転送選択画面例である。
【図７】プログラムダウンロードに係わる前処理のフローチャート図である。
【図８】プログラムダウンロード処理のフローチャート図である。
【発明を実施するための形態】
【００１７】
以下、図面を参照して本発明の実施の形態について説明する。
図１は、本例のプログラマブルコントローラシステムの全体構成図である。
本例のプログラマブルコントローラシステムは、ＰＬＣ（プログラマブルコントローラ）３０と、その支援装置（ローダ）１０とが、（不図示の通信線等を介して）相互に通信可能な状態で接続されて成る。また、図１には示していないが、図２に示すように、更に、ＰＬＣ３０は、各Ｉ／Ｏモジュールを介して、各設備の各種制御対象機器を制御可能となっている。Ｉ／Ｏモジュールは、例えばサーボ、インバータ等であるが、この例に限らない。
【００１８】
ＰＬＣ３０は、例えば不図示の各種制御対象（各設備の各種機器）を制御するものであり、その為のプログラム（制御プログラム；その機械語オブジェクト３３）を保持している。この制御プログラムは、任意のときに更新（バージョンアップなど）する必要が生じる場合がある。
【００１９】
支援装置（ローダ）１０は、上記制御プログラム（そのソースコード１５）をユーザが任意に作成／更新／変更できるように支援する機能等を有する。支援装置（ローダ）１０は、例えばパソコン等によって実現されるものであり、不図示のＣＰＵ、記憶装置や、図示のディスプレイ２０、入力装置２１（キーボード、マウス、タッチパネル等）を備えている。
【００２０】
支援装置（ローダ）１０は、ユーザインターフェース機能部１１、コンパイラ機能部１２、システム構成定義機能部１３、通信機能部１４等の各種機能部を有する。そして、これら各種機能部によって、図示のソースコード１５、機械語オブジェクト１６、使用変数一覧１７、プログラム一覧（支援）１８、モジュール情報１９などが作成・生成・保持されることになる。
【００２１】
上記不図示の記憶装置には、予め所定のアプリケーションプログラム等が記憶されており、上記不図示のＣＰＵがこのアプリケーションプログラムを実行することにより、上記各種機能部１１，１２，１３、１４等の処理機能が実現される。
【００２２】
ユーザインターフェース機能部１１は、ユーザによる任意の制御プログラムのソースコード１５の作成作業を支援する機能（この機能自体は既存の一般的な機能）を有する。ユーザインターフェース機能部１１は、例えばディスプレイ２０上に所定のプログラム作成支援画面を表示する。ユーザは、上記入力装置２１を操作して、このプログラム作成支援画面上で所望のソースコード１５を記述する。作成されたソースコード１５は、基本的に、後述する機械語オブジェクト１６の生成・転送後も、支援装置１０側で保持される。
【００２３】
ここで、制御プログラムは、例えば、上記各設備の各種機器毎に対応して作成されるものであり、また、上述した設備の更新（リプレース）等に応じて変更（バージョンアップ等）されるものである。バージョンアップ等の際には、上記保持されているソースコード１５に対して、ユーザインターフェース機能部１１によりユーザが編集等を行うことになる。また、任意の１つの設備がリプレースされる場合、それに伴って、通常は、この設備に係る全ての制御プログラムを変更（バージョンアップ等）することになる。
【００２４】
尚、上述したことから、ソースコード１５や機械語オブジェクト１６、３３は、逐一述べないが、上記各設備の各種機器毎に対応して複数存在するものであり、よって、例えばソースコード群や機械語オブジェクト群などと見做してよいものとする。但し、これに限らず、本説明においてソースコード１５や機械語オブジェクト１６、３３が、上記ソースコード群や機械語オブジェクト群のうちの任意の１つのソースコードや機械語オブジェクトを意味する場合もあるものとする。
【００２５】
コンパイラ機能部１２は、上記ユーザインターフェース機能部１１によってユーザにより作成されたソースコード１５を、ターゲット（ＰＬＣ３０）上で動作する機械語オブジェクト１６に変換する。更に、このコンパイル処理に伴って、使用変数一覧１７、プログラム一覧１８を生成するが、これについては後に説明する。
【００２６】
システム構成定義機能部１３は、ユーザに任意のシステム構成情報を入力させて、これに基づいてモジュール情報１９を生成する。これについても後に説明する。
通信機能部１４は、生成された機械語オブジェクト１６をターゲット（ＰＬＣ３０）にダウンロードする。但し、生成された機械語オブジェクト１６全てをＰＬＣ３０にダウンロードするのではなく、ユーザ指定に応じて決定された１以上の（基本的には複数の）機械語オブジェクト１６のみをダウンロードする。
【００２７】
ＰＬＣ３０は、制御プログラム（そのソースコード１５）の更新／修正等に伴い更新／修正版等の機械語オブジェクト１６が上記支援装置１０からダウンロードされた場合には、それまで保持・実行していた旧プログラム（その時点で保持している機械語オブジェクト３３）に代えて、受信した機械語オブジェクトを新たな機械語オブジェクト３３として保持して実行開始する。このように、ＰＬＣ３０は、稼働中に制御プログラムを新版（バージョンアップ版）に切り換える。
【００２８】
ＰＬＣ（ターゲット）３０は、プログラム実行管理機能部３１、通信機能部３２等の各種機能部を有する。
通信機能部３２は、上記支援装置１０の通信機能部１４との通信処理を行って、例えば上記ダウンロードされる機械語オブジェクト１６等をデータを受信すると、これを上記の通り新たな機械語オブジェクト３３として不図示のメモリ等に格納する。通信機能部３２は、更に、この受信データに基づいてプログラム一覧（ＰＬＣ）３４を生成格納する。これについては後に説明する。また、通信機能部３２は、例えば支援装置１０からの要求に応じて、機械語オブジェクト３３やプログラム一覧（ＰＬＣ）３４を、支援装置１０に送信する（アップロード）。
【００２９】
プログラム実行管理機能部３１は、上記保持している機械語オブジェクト３３を実行することで、各種制御対象機器（後述する図２に示す各設備の各種機器）を制御する。
ＰＬＣ３０は、不図示のＣＰＵ、メモリ等を有しており、当該不図示のメモリ等には、予め所定のアプリケーションプログラム等が記憶されており、上記不図示のＣＰＵがこのアプリケーションプログラムを実行することにより、上記各種機能部３１、３２等の処理機能が実現される。
【００３０】
ここで、上記支援装置１０のソースコード１５と機械語オブジェクト１６について、図２に示す一例を参照しながら説明する。
図２は、ＰＬＣによる各設備の制御に係わる構成を示す図である。
【００３１】
図１では不図示であった上記各種制御対象（各設備の各種機器）の一例が、図２に示す設備１、設備２の２つの設備である。これら設備１，設備２は、それぞれ１以上の機器（通常は複数の機器）より構成される。ここでは、仮に、設備１は図示の機器１−１、機器１−２から成り，設備２は図示の機器２−１、機器２−２から成るものとする。尚、図２は、システム全体を構成する設備全てを図示しているとは限らない（３つ以上の設備があってもよい）。
【００３２】
上述したように、ＰＬＣ３０は、各Ｉ／Ｏモジュールを介して各設備（例えば上記設備１，設備２）の各種機器を制御する。例えば、１つの機器に対して１つのＩ／Ｏモジュールが設けられている。そして、上記各制御プログラムは、それぞれが特定の（重複しない）１つの設備に係わる１以上のＩ／Ｏモジュールを介して、この設備の１以上の機器を制御するものと見做してもよい。
【００３３】
そして、上述したように、本説明における制御プログラム（そのソースコード１５や、その機械語オブジェクト１６、３３）は、上記各制御プログラムより成る制御プログラム群と言えるものである。
【００３４】
例えば図示の制御プログラムＰＧ１、ＰＧ２、ＰＧ３、ＰＧ４の４つの制御プログラムがあるものとする。例えば制御プログラムＰＧ１は設備２の機器２−１を制御するプログラムであり、制御プログラムＰＧ２は設備２の機器２−２を制御するプログラムである。また、例えば制御プログラムＰＧ３は設備１の機器１−１を制御するプログラムであり、制御プログラムＰＧ４は設備１の機器１−２を制御するプログラムであるものとする。
【００３５】
ここで、既に述べた通り、ユーザ負担や作業効率等を考慮して、上記制御プログラムＰＧ１、ＰＧ２、ＰＧ３、ＰＧ４の各ソースコード１５を一度にまとめて作成（編集／更新）すると共に、一度にまとめてコンパイルして各機械語オブジェクト１６を生成する場合が多い。また、ソースコード１５の作成は、新規作成に限らず、むしろ何らかのバージョンアップ版の作成（例えば設備のリプレースに応じたもの）を行う場合が多い。
【００３６】
ここで、設備１、設備２の変更を行う場合に、これに伴って上記制御プログラムＰＧ１、ＰＧ２、ＰＧ３、ＰＧ４の各ソースコード１５をまとめて変更する場合が考えられる。しかし、設備の変更（リプレース）は、複数の設備を一度にまとめて行うことは困難であり、通常は、順次、変更作業が行われる。
【００３７】
例えば、今週は設備１を変更し、来週は設備２を変更する等している。この場合、設備１の変更作業が完了したら、制御プログラムＰＧ３、ＰＧ４の変更版をターゲット（ＰＬＣ３０）にダウンロードすることで、ＰＬＣ３０側で保持・実行する制御プログラムを変更させる必要がある一方で、制御プログラムＰＧ１、ＰＧ２の変更版は未だターゲット（ＰＬＣ３０）にダウンロードしないようにする必要がある（尚、逐一述べないが、既に説明してある通り、ダウンロードするのは機械語オブジェクト１６であり、ソースコード１５はダウンロードしない）。
【００３８】
この様に、例えば任意の設備の変更（リプレース）が完了したら、上記制御プログラム群の中から当該設備に係わる１以上の（基本的には複数の）制御プログラムのみを、ターゲット（ＰＬＣ３０）にダウンロードする必要がある。しかしながら、この様な選択・判断をユーザが行うことは困難であるし、ミスが生じる可能性がある。ユーザにとって、例えば上記の例では、変更作業が完了した設備が設備１であることを認識することは容易であるが、設備１に係わる制御プログラムを全て認識していることは困難である（上記の例では２つであるが、実際には多数ある場合も少なくない）。
【００３９】
本手法は、この様な問題を解消するものであるが、これについては後に説明するものとし、ここでは本例のプログラマブルコントローラシステムについて図２を参照しながら更に詳細に説明するものとする。
【００４０】
既に述べたように、ＰＬＣ３０は、上記各種制御プログラムを実行することで、各種制御対象機器を制御する。これは、例えば、図２に示すように、各Ｉ／Ｏモジュールを介して各機器を制御するものである。ＰＬＣ３０は、例えばシリアル線等を介して、基本的には全てのＩ／Ｏモジュールと接続している。各Ｉ／Ｏモジュールは、それぞれ、基本的に、１台の機器と１対１で接続している。各Ｉ／Ｏモジュールには、予め所定の識別番号（局番という）が割り当てられている。
【００４１】
例えば、図示の各Ｉ／Ｏモジュールに記載の１，２，３、・・・７の各番号が、そのＩ／Ｏモジュールに割り当てられている局番を意味するものとする。これより、以下、この局番を用いて、例えばＩ／Ｏモジュール‘１’等と記すものとする。図示の例では、Ｉ／Ｏモジュール‘２’とＩ／Ｏモジュール‘３’が、設備２の各機器に対応するＩ／Ｏモジュールである。Ｉ／Ｏモジュール‘１’とＩ／Ｏモジュール‘４’が、設備１の各機器に対応するＩ／Ｏモジュールである。
【００４２】
また、上記各制御プログラムにおいては、通常、任意の機器に対する制御に関して、その機器に対応するＩ／Ｏモジュールの局番が記述されている。これは、制御プログラムのソースコード１５には、各変数に係わる記述があるが、これは例えば変数名とアクセス情報等である。アクセス情報はメモリアドレス等であるが、対応するＩ／Ｏモジュールの局番が含まれる場合もある。尚、この例の場合、局番が記述されていない変数は、Ｉ／Ｏモジュールに割り付けられるものではなく、ＰＬＣ３０内部で使用する変数であることを意味している。
【００４３】
尚、Ｉ／Ｏモジュールに割り付けられる変数であっても、ＰＬＣ３０内部で使用する変数であっても、割付先メモリは、ＰＬＣ３０内のメモリである。このメモリには、各Ｉ／Ｏモジュールに割り当てられた各記憶領域がある。これより、たとえ変数に係わる記述に局番が無い場合であっても、アクセス先アドレスが記述されていれば、それが属する記憶領域を判別することで、対応するＩ／Ｏモジュールを判別できる。
【００４４】
以上、既存のプログラマブルコントローラシステムの構成や制御プログラムの一例について説明した。この例に応じた使用変数一覧１７、モジュール情報１９の具体例を、図３、図４（ｂ）に示す。以下、これら具体例について説明する。
【００４５】
まず、既に述べたように、コンパイル機能部１２は、各制御プログラム毎に、そのソースコード１５を機械語オブジェクト１６に変換する際に、プログラム中の各変数に係わる記述に基づいて、上記使用変数一覧１７を生成する。これは、既存の一般的なコンパイル機能として、ソースコード１５中に記述されている各変数のアクセス情報（メモリのアドレス割り当て等）を生成する機能があり、これに基づいて使用変数一覧１７を生成する。
【００４６】
図３に、使用変数一覧１７のデータ構成例を示す。
図示の例では、使用変数一覧（テーブル）１７は、プログラム名４１、変数名４２、局番４３の各データ項目より成る。プログラム名４１には、ソースコード１５のプログラム名（ファイル名；ユーザが任意に決めている）が格納される。変数名４２には、プログラム（ソースコード１５）中に記述されている各変数の変数名が格納される。変数名は、ユーザが任意に決めて記述している。局番４３は、上記プログラム名４１のプログラム（ソースコード１５）において、上記変数名４２の変数に係わるアクセス情報に含まれる局番が格納される。このアクセス情報（割当てアドレスの指定等）は、ユーザが任意に決めて記述してもよいが、アドレス指定が無い変数もある。アドレス指定が無い変数に対しては、例えばコンパイラ機能部１１が任意のアドレスを割り当てる。
【００４７】
図３に示す使用変数一覧１７の格納内容は、例えば下記のような制御プログラム（そのソースコード１５）が処理対象であった場合の例を示している。尚、下記の制御プログラムのファイル名は、“プログラム１”であるものとし、その一部を示しているものとする。
【００４８】
ここで、ユーザは、通常、そのプログラムで使用する変数の宣言を記述する。
以下がIEC61131-3での変数宣言例である。
VAR
変数１               :    INT;
変数2  AT %IW 2.0     :     INT;
変数3  AT %QW 3.0     :     INT;
END_VAR
変数名の後にある「AT」は、変数の割当てアドレス（アドレスは、％の後で指定する）をユーザが指定する場合に記述する。
【００４９】
変数宣言のアドレスの指定は、Ｉ／Ｏモジュールの場合、以下の規則で定義する。
・入力モジュールの場合；  ％IW  局番.ワード位置
・出力モジュールの場合；  ％QW  局番.ワード位置
つまり、上記変数２は入力モジュール、変数３は出力モジュールに関する記述であることになる。そして、変数２に関して指定されているアドレス（局番.ワード位置）は‘2.0’、変数３に関して指定されているアドレス（局番.ワード位置）は‘3.0’であることになる。よって、変数２に対応する局番は‘２’、変数３に対応する局番は‘３’であると判別できることになる。尚、局番は、各Ｉ／Ｏモジュールを識別するための管理番号であり、Ｉ／Ｏモジュール毎に一意な番号である。
【００５０】
コンパイラ機能部１２は、上記規則に従って各変数名とそれに対応する局番を抽出することができる。勿論、上記のようにファイル名（プログラム名）も取得できる。そして、このようにして取得したプログラム名、変数名、局番を、使用変数一覧１７のプログラム名４１、変数名４２、局番４３に格納する。この処理を、各制御プログラムについてコンパイルする際に実行することになる。
【００５１】
尚、変数１のように「AT」の記述が無い（よってアドレス指定もない）場合は、コンパイラ機能部１２が自動で任意のアドレスを割り付ける。但し、この場合は上記の通りこの変数はＩ／Ｏモジュールに割り付けられるものではないので、局番は存在しない。よって、図３に示すように、変数名４２が“変数１”の局番４３には、データ（局番）は格納されない。
【００５２】
この例のように、１つの制御プログラム（プログラム１）に関して、局番なし、局番＝‘２’、局番＝‘３’等の様々な変数があっても、Ｉ／Ｏモジュールへのアクセスに関しては同じ設備に係わるＩ／Ｏモジュールに限るものとなっている（図の例では設備２に係わるＩ／Ｏモジュールのみ）。
【００５３】
システム構成定義機能部１３は、ユーザにシステム構成（たとえば、プログラマブルコントローラシステムで使用するＩ／Ｏモジュールの構成等）を入力させるための機能部である。ユーザは、実際のシステム構成に準じて入力するものであり、図４には図２に示すシステム構成に従った入力例を示している。
【００５４】
システム構成定義機能部１３は、ディスプレイ２０に、例えば図４（ａ）に示すようなシステム構成定義画面５０を表示する。ユーザは、この画面５０上で、システム構成に関する所望の定義を入力することができる。
【００５５】
ユーザは、システムを構築する場合、どのようなモジュール構成を組むのか考えたうえで、システム構成定義画面５０を使用してモジュールの構成定義を実施する。特にＩ／Ｏモジュールを定義する時、そのＩ／Ｏモジュールがどの設備に関係するのか設定する。これより、例えば図示のように、各Ｉ／Ｏモジュールに関しては、そのＩ／Ｏモジュールの識別情報（名称や局番など）、そのＩ／Ｏモジュールが対応する設備（接続している機器が設けられている設備）の識別情報（設備名など）等が定義される。
【００５６】
この様な定義内容に基づいて、モジュール情報１９が生成・記憶される。
尚、図４（ａ）に示す定義内容は、図２に示すシステム構成に従っている。これより図示の通り、Ｉ／Ｏモジュール‘１’及びＩ／Ｏモジュール‘４’は設備１に関連するＩ／Ｏモジュールであり、Ｉ／Ｏモジュール‘２’及びＩ／Ｏモジュール‘３’は設備２に関連するＩ／Ｏモジュールであることが定義されている。また、図２には示されていないが、図４（ａ）に示す定義内容によれば、Ｉ／Ｏモジュール‘５’‘６’‘７’は、不図示の設備３に関連するＩ／Ｏモジュールであることになる。
【００５７】
図４（ｂ）に、モジュール情報１９の具体例を示す。
図示のモジュール情報１９では、局番６１に対応付けて設備名６２が格納されている。但し、この例に限らず、更に上記モジュール名が格納されてもよいし、局番６１の代わりにモジュール名が格納されてもよい。各Ｉ／Ｏモジュールの識別情報は、局番とモジュール名のどちらか一方があればよいからである。また、Ｉ／Ｏモジュールの識別情報は、局番やモジュール名に限らず、他の何らかの情報としてもよい。但し、本例では局番を用いるものとして説明する。
【００５８】
尚、図示の局番６１と設備名６２の各データ内容は、図４（ａ）に示す定義に従っている。上記の通り、これは図２に示すシステム構成に応じた定義であることになる。
また、コンパイラ機能部１２は、上記コンパイル処理に伴って、上記使用変数一覧１７だけでなく更にプログラム一覧（支援）１８も生成する。つまり、ソースプログラムをコンパイルした場合、それによって生成した機械語オブジェクトと元のソースプログラムとを関連付けるための情報を生成する。
【００５９】
図５（ａ）に、プログラム一覧（支援）１８の具体例を示す。
図示の例では、プログラム一覧（支援）１８は、管理番号７１、プログラム名７２、機械語オブジェクトファイル名７３、機械語オブジェクトサイズ７４のデータ項目から成る。
【００６０】
管理番号７１は、支援装置１０が各制御プログラムを識別するための一意の番号である。プログラム名７２はソースコード１５のプログラム名（ファイル名）であり、このプログラム名７２のソースコード１５をコンパイルして生成した機械語オブジェクト１６のファイル名が、機械語オブジェクトファイル名７３に格納される。更に、この機械語オブジェクト１６のデータサイズが、機械語オブジェクトサイズ７４に格納される。尚、各機械語オブジェクト１６のファイル名は、例えばコンパイラ機能部１２が任意に決定している。
【００６１】
支援装置１０（例えばその通信機能部１４など）は、上記コンパイル処理によって生成した機械語オブジェクト１６をＰＬＣ３０にダウンロードする際に、上記プログラム一覧（支援）１８を参照するなどして、その管理番号と機械語オブジェクト情報も一緒に送信する。機械語オブジェクト情報とは、例えば上記機械語オブジェクトサイズ７４等であるが、この例に限らない。
【００６２】
ＰＬＣ３０は、これらのダウンロード情報を受信すると、これに基づいてプログラム一覧（ＰＬＣ）３４を生成する。
図５（ｂ）に、プログラム一覧（ＰＬＣ）３４の具体例を示す。
【００６３】
図示の例のプログラム一覧（ＰＬＣ）３４は、管理番号８１、機械語オブジェクト格納先アドレス８２、機械語オブジェクトサイズ８３のデータ項目より成る。
管理番号８１と機械語オブジェクトサイズ８３には、それぞれ、上記支援装置１０から機械語オブジェクト１６と共にダウンロードされた上記管理番号と機械語オブジェクト情報が、格納される。
【００６４】
また、ＰＬＣ３０は、上記支援装置１０からダウンロードされた機械語オブジェクト１６を、任意の記憶領域に格納する（新たな機械語オブジェクト３３として保持する）。この格納領域の先頭アドレスが、上記機械語オブジェクト格納先アドレス８２に登録される。
【００６５】
後に、支援装置１０から所定の機械語オブジェクト３３（管理番号により指定）のアップロード指示があった場合、指定された管理番号を用いて上記プログラム一覧（ＰＬＣ）３４を参照すれば、該当する機械語オブジェクト３３が記憶された記憶領域（先頭アドレスとサイズ）が分かるので、この記憶領域から機械語オブジェクト３３を読み出して支援装置１０に送信（アップロード）することができる。
【００６６】
ここで、ＰＬＣ３０は、システムを構成する複数の設備（ここでは、設備１、設備２、設備３であるものとする）を制御するものであり、これら各設備を制御する為の各制御プログラム（各機械語オブジェクト３３）を保持・実行しているものとする。ＰＬＣ３０のプログラム実行管理機能部３１は、例えば予め設定されるスケジュール情報に従って、これら各機械語オブジェクト３３を実行する。また、これら各機械語オブジェクト３３に応じたプログラム一覧（ＰＬＣ）３４が格納されている。
【００６７】
一方、支援装置１０側には、上記各ソースコード１５や、これらをコンパイルして生成した各機械語オブジェクト１６が保持されている。ある時点において、ある制御プログラムの機械語オブジェクト３３と機械語オブジェクト１６とがもし一致するならば、ＰＬＣ３０はこの制御プログラムの最新版を保持・実行しているものと見做してよい。従って、この制御プログラムの機械語オブジェクト３３は、ＰＬＣ３０にダウンロードする必要はないことになる。
【００６８】
一方、ある時点において、ある制御プログラムの機械語オブジェクト３３と機械語オブジェクト１６とがもし不一致であるならば、基本的には、機械語オブジェクト１６が最新版であり、機械語オブジェクト３３は旧版であると見做してよい。従って、この場合には基本的には、この制御プログラムの機械語オブジェクト３３は、ＰＬＣ３０にダウンロードして、ＰＬＣ３０で保持・実行する制御プログラムを最新版へと更新したほうがよいことになる。しかしながら、既に述べた通り、本手法で想定している状況では、未だ最新版へと更新しないほうがよい場合もある。つまり、未だ対応する設備の更新（リプレース）が実行されていない制御プログラム（最新版；更新版）は、未だＰＬＣ３０にダウンロードしてはならないことになる。尚、バージョンアップが行われてもファイル名は変更されない。
【００６９】
上記ソースコード１５のバージョンアップ等は、上述したように作業効率等を考えて、一度に全て行われる場合が多い。仮に、設備１と設備２の改造が行われるものとし、今週は設備２の改造、来週は設備１の改造が行われるとした場合でも、設備１と設備２の両方に係る制御プログラムのソースコード１５のバージョンアップ作業が、まとめて行われることになる。そして、これら更新版のソースコード１５に対してコンパイル機能部１２によるコンパイル処理が実行されて、更新版の機械語オブジェクト１６が生成されると共に、使用変数一覧１７、プログラム一覧（支援）１８も新たに生成されることになる。
【００７０】
また、もし、上記設備の改造に伴ってシステム構成が変化した場合には、モジュール情報１９の再定義を行う必要がある。例えば、設備１に対して局番＝８のＩ／Ｏモジュールが追加された場合には、この情報がモジュール情報１９に追加される必要がある。
【００７１】
ユーザが、以上の作業を完了後、支援装置１０を操作して、例えばプログラム−設備関連付け処理の実行を指示すると、図７の処理が実行される。更に、その後に、ユーザが制御プログラムのダウンロード実行を指示すると、図８の処理が実行される。以下、図７、図８の処理について説明する。
【００７２】
尚、図７、図８の処理は、支援装置１０の図１に示す何れかの機能部（例えばユーザインタフェース機能部１１や通信機能部１４等）が実行してもよいし、不図示の機能部が行っても良い。何れにしても、支援装置１０において実行されることに変わりはなく、図７、図８の処理を実行する機能部を例えば「転送管理機能部」等と呼ぶものとする。
【００７３】
また、図７、図８の処理は、支援装置１０の上記不図示のＣＰＵが、上記不図示の記憶装置に記憶されているアプリケーションプログラムを実行することにより実現される。
まず、図７の処理について説明する。
【００７４】
図７は、プログラムダウンロードに係わる前処理のフローチャート図である。
上記の通り、図７の処理は、支援装置１０が実行する。
支援装置１０は、上記指示に応じて図７の処理を実行開始すると、まず、上記プログラム一覧（支援）１８を読み込みと共に（ステップＳ１）、ＰＬＣ３０から上記プログラム一覧（ＰＬＣ）３４を取得し読み込む（ステップＳ２）。
【００７５】
そして、これらプログラム一覧１８、３４を参照して、順次、同じ制御プログラムに係わる（管理番号が同一の）機械語オブジェクト同士を比較して一致するか否かを判定し（ステップＳ３〜Ｓ５）、一致しない場合にはステップＳ７〜Ｓ１０を実行する。これは、例えば、プログラム一覧（支援）１８の各レコードを順次処理対象とするものである。
【００７６】
尚、ここでは、管理番号が同一であれば例えばバージョンが異なっていても「同じ制御プログラム」であるものとしている。換言すれば、支援装置１０においては、任意の新規制御プログラムが作成された際に当該プログラムに任意の管理番号が割り当てられた後は、後に、当該プログラムをバージョンアップ等する変更が行われても、管理番号は変更されないし、新たな管理番号が割り当てられることもないように、管理・制御されている。
【００７７】
上記ステップＳ３〜Ｓ５の処理は、例えば下記のように行う。
すなわち、プログラム一覧（支援）１８の任意の処理対象レコードを参照して、その機械語オブジェクトファイル名７３を取得し、このファイル名の機械語オブジェクト１６を読み込む（ステップＳ３）。次に、この機械語オブジェクト１６に対応する機械語オブジェクト３３をＰＬＣ３０から読み込む。すなわち、上記処理対象レコードの管理番号７１を用いて、プログラム一覧（ＰＬＣ）３４における該当レコードを認識して、この該当レコードの機械語オブジェクト格納先アドレス８２と機械語オブジェクトサイズ８３によって示されるＰＬＣ３０の記憶領域から、データ（該当する機械語オブジェクト３３）を読み出す（ステップＳ４）。
【００７８】
上記処理は、例えばプログラム一覧（支援）１８の先頭レコードが処理対象である場合には、まずステップＳ３でファイル名＝“PG0001.dat”の機械語オブジェクト１６が読み込まれる。更に、先頭レコードの管理番号７１＝‘１’であることから、プログラム一覧（ＰＬＣ）３４における該当レコードは、管理番号８１＝‘１’のレコードであり、そのアドレス８２＝‘10000’とサイズ８３＝‘100’とが取得されて、これらに基づいてＰＬＣ３０のメモリの該当記憶領域のデータ（該当する機械語オブジェクト３３）が読み込まれることになる。
【００７９】
そして、ステップＳ３で取得した機械語オブジェクト１６とステップＳ４で取得した機械語オブジェクト３３とを相互に比較して、両者が同一であるか否かを判定する（ステップＳ５）。そして、両者が同一である場合には（ステップＳ５，ＹＥＳ）、ステップＳ６へ移行し、全てのプログラム（全ての処理対象レコード）について処理実行済みとならない限りは（ステップＳ６，ＮＯ）ステップＳ３に戻り、次の処理対象レコードについて同様の処理を行う。
【００８０】
一方、両者が同一ではない場合には（ステップＳ５，ＮＯ）、ステップＳ７〜Ｓ１０の処理を実行する。この場合、基本的には、機械語オブジェクト１６が最新版であり、機械語オブジェクト３３は旧版であるはずであるので、最新版をＰＬＣ３０にダウンロードすることで、ＰＬＣ３０側の機械語オブジェクト３３を最新版に置き換える必要がある。但し、本手法では必ずしもその時点でダウンロードすべき状況とは限らないので、ダウンロード候補として登録するが、その際、ステップＳ７〜Ｓ１０の処理によって、該当する設備名と対応付けて登録しておくことで、これを例えば後に図６に示すような転送選択画面９０の表示や、後述する図８の処理に用いる。尚、後述する図８の処理は、転送選択画面９０の表示、この画面９０上でのユーザによる任意の選択、この選択に応じたダウンロード処理実行等である。
【００８１】
以下、ステップＳ７〜Ｓ１０の処理について説明する。
まず、上記処理対象レコードのプログラム名７２を用いて、使用変数一覧１７を検索して、そのプログラムの各変数に係る局番（そのプログラムがアクセスするＩ／Ｏモジュールの識別情報）を取得する（ステップＳ７）。例えば、プログラム名７２が“プログラム１”である場合には、局番‘２’や局番‘３’が取得されることになる。但し、１つの局番が取得された時点でステップＳ７の処理を終了させてもよい。通常、１つのプログラムが複数の設備を制御するようなことはないので、複数の局番を取得してもそれは全て同じ設備に係わるＩ／Ｏモジュールの局番であるはずだからである。
【００８２】
次に、ステップＳ７で得た局番を用いてモジュール情報１９を検索して、該当する設備名を取得する（ステップＳ８）。上記の例では局番‘２’や局番‘３’が取得されるので、どちらも該当する設備名は“設備２”である。
【００８３】
そして、上記プログラム名（本例では“プログラム１”）とステップＳ８で得た設備名（本例では“設備２”）とを対応付けてメモリに記憶する（不図示のプログラム−設備テーブルに記憶するものとする）（ステップＳ９）。これは例えばダウンロード候補として記憶するものである。
【００８４】
その後、ステップＳ１０の処理を行ってもよいが、行わずにそのままステップＳ６へ移行してもよい。尚、ステップＳ１０では上記処理対象のプログラム（本例では“プログラム１”）の変数全てについて上記ステップＳ７〜Ｓ９の処理を実行しない限り、ステップＳ６に移行することなくステップＳ７に戻るようにする処理である。
【００８５】
上記図７の処理を実行完了した後に、ユーザが所定のプログラム転送指示を行うと、図６に示す転送選択画面９０が表示される。
ここで、図６の転送選択画面９０の例について説明しておく。
【００８６】
図示の転送選択画面９０における一覧表示部９１には、上記不図示のプログラム−設備テーブルの内容が表示される。つまり、ダウンロード候補のプログラム名と対応する設備名のペアが一覧表示される。更に、これら各ペア毎に図示の「転送有無」に示すチェックボックスが表示される。つまり、「転送有無」は、ユーザに所望のプログラム（または設備）を選択させる為のチェックボックス欄である。
【００８７】
ユーザは、例えば任意の設備のリプレース作業等が完了する毎に、転送選択画面９０を表示させる。本手法では、ユーザは、どの設備のリプレース作業が完了したのか程度は、把握しているものとする。これより、ユーザは、転送選択画面９０を参照することで、その時点で転送すべきプログラムを容易に的確に認識できる。
【００８８】
仮に、設備２のリプレース作業が完了した状況であったら、図６の例では、少なくとも“プログラム１”と“プログラム２”は今回ダウンロードすべきプログラムであり、その一方で少なくとも“プログラム３”は今回はダウンロードすべきではないプログラムであることが把握できる。
【００８９】
これより、ユーザが、“プログラム１”に対応するチェックボックスと“プログラム２”に対応するチェックボックスとをチェック状態とすることで（その後、「転送開始」ボタン９２を押下することで）、“プログラム１”と“プログラム２”の機械語オブジェクト１６を、ＰＬＣ３０にダウンロードさせることができる。
【００９０】
この様に、ユーザは、プログラム更新対象の設備名を把握しておけば、この設備に対応するプログラム名等を把握していなくても問題なく、その時点で必要なプログラムのみをダウンロードさせることができ、誤ってその時点ではダウンロードすべきでないプログラムがダウンロードされてしまう事態を抑止できる。
【００９１】
尚、上記図７の処理によって、ダウンロードの必要がないプログラム（例えば既に最新版がＰＬＣ３０側で保持・実行されているもの）は、そもそも一覧表示部９１に表示されないので、ダウンロードもされないことになる。この様に、無駄な選択作業や無駄なダウンロード処理を回避できる効果も得られる。
【００９２】
しかしながら、その一方で、例えば、全体のプログラム数が多数であり、転送選択画面９０の一覧表示部９１に表示される上記ペアも多く、上記設備２に対応するプログラムの数も少なくない場合も有り得る。この様な場合、ユーザは、例えば表示をスクロールさせながら設備２に対応する全てのプログラムに対応するチェックボックスを順次チェック（指定）していく必要があり、作業負担が少なくなく、ミス（指定漏れ等）が生じる可能性もある。
【００９３】
これより、図８には、この様な手間を軽減できる処理を示す。
この例では、ユーザは、例えば設備２の例の場合、設備２に対応するプログラムのうちの１つだけを指定すれば済む（図６ではプログラム１についてのみ、対応するチェックボックスをチェック状態としている）。そして、この状態で「転送開始」ボタン９２を押下すれば（図８のステップＳ１１）、図８のステップＳ１２以降の処理が実行される。
【００９４】
まず最初は、上記一覧表示部９１に係わる上記不図示のプログラム−設備テーブルの先頭レコードを、デフォルトの処理対象とする（ステップＳ１２）。そして、処理対象レコードのプログラムが転送対象か否かを判定する（ステップＳ１３）。これは、処理対象レコードの上記チェックボックスにチェックが入っている場合には転送対象と判定し（ステップＳ１３、ＹＥＳ）、ステップＳ１４〜Ｓ１６の処理を実行する。一方、チェックボックスにチェックが入っていない場合には転送対象ではないと判定し（ステップＳ１３、ＮＯ）、ステップＳ１７へ移行する。
【００９５】
ステップＳ１４では、上記プログラム−設備テーブルにおいて処理対象レコードの設備名を取得して、この設備名を用いて当該プログラム−設備テーブルを検索して、該当するレコードを全て抽出し、各該当レコードの各プログラム名も転送対象と判定する（ステップＳ１５）。例えば図６の例では、先頭レコードにはチェックが入っているので、その設備名である「設備２」を取得することになる。そして、この場合、上記検索を行うことで、他のレコードの中で設備名が「設備２」であるレコードを全て抽出することになる。図６の例では、２番目のレコードが該当レコードとなり、そのプログラム名「プログラム２」の制御プログラムも転送対象と判定されることになる。
【００９６】
そして、転送対象と判定されたプログラム名の制御プログラム（その機械語オブジェクト１６）全てを、ＰＬＣ３０へダウンロードする（ステップＳ１６）。つまり、上記処理対象レコードの制御プログラム（例ではプログラム１）だけでなく、上記ステップＳ１５の処理で転送対象となったプログラム全ても、ＰＬＣ３０へダウンロードする。換言すれば、ユーザが指定（チェック）した設備に係るプログラム全てを、ＰＬＣ３０へダウンロードする。そして、ステップＳ１７へ移行する。
【００９７】
尚、上記ステップＳ１６のダウンロード処理の際には、上記転送対象と判定されたプログラム名を用いて上記プログラム一覧（支援）１８を検索することで、該当する機械語オブジェクト１６を判別することになる（該当レコードの機械語オブジェクトファイル名７３を取得する）。
【００９８】
この様にすることで、ユーザは、任意の設備に係る制御プログラム全てをＰＬＣ３０へダウンロードして更新させたい場合に、これら全てについて逐一指定する必要はなく、そのうちの１つを指定（チェックボックスでチェック等）すれば済むようになる。よって、作業負担が軽減されると共に、ミス（指定漏れなど）が生じることになくなる。
【００９９】
ステップＳ１７において上記不図示のプログラム−設備テーブルの次のレコードを新たな処理対象レコードとし、ステップＳ１３に戻る。但し、次のレコードが無い場合、つまり全てのレコードについて処理完了した場合には（ステップＳ１８，ＹＥＳ）本処理を終了する。
【０１００】
尚、ステップＳ１７において、次のレコードの制御プログラムが既にダウンロード済みである場合には、更に次のレコードを新たな処理対象レコードとする。
尚、転送選択画面９０は、図６に示す例に限らず、例えば設備名だけを一覧表示するようにしてもよい（勿論、チェックボックスは表示する）。そして、ユーザに、所望の設備名を選択指定させるようにしてもよい。この様にした場合でも、上記図８と略同様の処理が実行されて、同様の効果が得られることになる。つまり、何れにしても少なくとも設備名は表示されることになり、ユーザは設備名の表示を見ることで的確な判断を行えて的確な選択を行うことができ、以って的確なダウンロードが行われるようになる。
【０１０１】
尚、上述した一例では、局番を用いて説明をしたが、これはＩ／Ｏモジュールの識別情報の一例を示すものであり、識別情報は局番に限るわけではない。例えば、支援装置１０のコンパイラは、一般的に、各変数をＰＬＣ内のメモリに割り付ける。これは、ＰＬＣ自体に係わる変数（例では変数１）だけでなく、Ｉ／Ｏモジュールに係わる変数（例では、変数２、変数３である）も、ＰＬＣ内のメモリに割り付ける。これより、局番の代わりに割付けアドレスを用いて設備名と変数（プログラム名）との関連付けを実施しても、上述した一例と同様の処理が実現可能である。尚、この場合、割付けアドレスによって該当するＩ／Ｏモジュールが判別できるようにする登録情報が、別途必要かもしれない。
【０１０２】
ここで、ＰＬＣが保持・実行する各制御プログラムを、ＰＬＣを停止させることなく（運用中に）実行する処理（オンライン更新処理と呼ぶ）について、説明する。ここでは、本出願人による方式を示すものとする。これは、例えば特願２００１−１００９９１号などでも述べているものである。
【０１０３】
尚、本手法は、オンライン更新処理が行われない場合であっても適用可能であるが、オンライン更新処理が行われる場合の方が、より顕著な効果を奏するものである。特に、その時点ではダウンロードすべきでない制御プログラムに係わる設備に関しては、もし誤ってこの様な制御プログラムがＰＬＣにダウンロードされてしまうと、ＰＬＣ側では当該設備の運用中に誤ったプログラムに更新されてしまうことになり、それによって当該設備に何らかの障害が発生する可能性が高いからである。
【０１０４】
ＰＬＣ（プログラマブルコントローラ）の支援ツールは、ユーザが記述したプログラム（ソースコード；変数含む）をコンパイルして、ＰＬＣで動作する機械語オブジェクトを生成し、その際、ＰＬＣ上の有限なメモリに（その任意のアドレスに）各変数を割り付ける（アドレス割当てを行う）。そして、機械語オブジェクトをＰＬＣにダウンロードして記憶させる。これより、ＰＬＣは、このプログラムを実行することで各種処理を実行し、各変数の値のリード／ライト等の処理の際には、その変数に割り付けられたアドレス（割当位置）にアクセスすることになる。
【０１０５】
尚、上記各変数へのアドレス割当ては、ソースコードにおいてアドレス指定されている場合には、この指定アドレスを用いる。アドレス指定が無い変数に関しては、例えばコンパイラが任意のアドレスを割り当てるが、この例に限らない。
【０１０６】
ＰＬＣが稼動中にそのプログラムを変更する場合は（プログラムのバージョンアップ等）、既に割り付けた変数（既存の変数というものとする）のアドレスを変更することができない（変数の割当位置が変化すると、変更前と変更後とで変数の値がプログラムで正常に扱えないため、誤動作する。；変数のアドレスが変更されることにより、アドレスの変更前と変更後とでデータを引き継ぐことができない）。
【０１０７】
そのため、従来は、変数を追加しても既存の変数のアドレスが変更されないようにするために予備領域を設けて、追加した変数（追加変数というものとする）をこの予備領域に割り付けるようにしている。予備領域に追加変数を割り付けることにより、既に割り付けた変数（既存の変数）の割当位置を変更しないで、変数の追加が可能になる。予備領域は、プログラム構成単位（以下ＰＯＵと示す）単位で持つため、予備領域のサイズは、大抵、数Ｗ(WORD)から数１０Ｗである。
【０１０８】
ここで、上記ＰＯＵには、ＰＧ（プログラム）、ＦＢ（ファンクションブロック）、ＦＣＴ（ファンクション）等の種類がある。基本的には、ＰＧがメインプログラムでＦＢやＦＣＴがサブプログラムと見做してよく、ＰＧが、その処理実行中にＦＢやＦＣＴ等を呼び出す。また、ＦＢが、その処理実行中に他のＦＢやＦＣＴを呼び出す場合もある。
【０１０９】
上述したプログラム１、プログラム２等は、例えば上記ＰＧ（プログラム）であるが、この例に限るものではない。
ここで、上記ＰＧ（プログラム）、ＦＢ（ファンクションブロック）、ＦＣＴ（ファンクション）等の各種ＰＯＵのソースコードには、通常、任意の変数が記述されている。そして、各種ＰＯＵを有するプログラムをコンパイルする際には、コンパイラ機能により各ＰＯＵのインスタンス化（各ＰＯＵの各変数をメモリに割り付ける）を実施する。そして、後にプログラムを修正（バージョンアップ）する等して、任意のＰＯＵにおける変数に追加があった場合、この追加変数を上記予備領域に割り付けることになる。
【０１１０】
ここで、ＰＬＣ３０の稼働中に、ユーザが支援装置１０上でプログラム修正（例えばバージョンアップしたソースコード１５の作成等）を行った場合であって、特にＰＬＣ３０を止めないでＰＬＣ３０の制御プログラム（機械語オブジェクト３３）の変更を実施しても異常動作しないようにするためには、既にメモリに割付けた変数（既存の変数）のメモリ割付け位置を変更しないようにする必要がある。これは、上記プログラム１の変数２、変数３のようにソースコード１５でアドレス指定されているものについては、ユーザがソースコード１５修正の際に誤ってアドレスを変えない限りは、特に問題はない。
【０１１１】
しかし、上記変数１の場合、コンパイラがコンパイル実行の都度、任意のアドレスを割り当てると、メモリ割付け位置が変わってしまう。これより、コンパイラ機能部１２は、例えば初版のソースコード１５のコンパイル実行の際に、各変数のメモリ割当て状況を記憶しておく。つまり、どの変数をどの記憶領域（アドレス）に割り当てたのかを示す情報を、不図示のテーブルに記憶しておく。そして、その後、バージョンアップ版のソースコード１５のコンパイル実行の際には、上記不図示のテーブルを参照することで、既存の変数に対しては現状と同じアドレスを割り当てるようにする。また、新規変数があった場合には、任意のアドレスを割り当てると共に上記不図示のテーブルに追加登録する。
【０１１２】
尚、例えば、上記変数のアドレス割当ては、各プログラム毎（各ＰＯＵ毎に）に一塊の記憶領域が割り当てられる。
以上説明したように、本手法では、プログラマブルコントローラと支援装置を有するプログラマブルコントローラシステムにおいて、下記の構成・動作を供する。
【０１１３】
支援装置は、既存の機能として、ユーザにＰＬＣの制御プログラム（そのソースコード）の作成を任意に行わせるためのプログラム作成支援機能や、このソースコードをコンパイルしてＰＬＣで実行出来る形式（機械語オブジェクト）に変換するコンパイル機能や、この機械語オブジェクトをＰＬＣにダウンロードする転送機能などを有する。
【０１１４】
一般的に、コンパイル機能は、上記コンパイル処理実行中、ソースコードの各変数にアドレス割当てを行うものであるが、本例では更に、処理対象のプログラム名（ソースコードファイル名など）、各変数名、各変数に係わるＩ／Ｏモジュール（各変数によるアクセス先のＩ／Ｏモジュール；割当てたアドレスに対応するＩ／Ｏモジュール）を示す情報等を関連付けて登録する。
【０１１５】
更に、ユーザにプログラマブルコントローラシステムのシステム構成定義を設定させる機能であって、各Ｉ／Ｏモジュール名等を設定させると共に、各Ｉ／Ｏモジュールが係わる設備の情報を設定させて登録する機能も有する。
【０１１６】
ＰＬＣに制御プログラムを転送する場合、ＰＬＣで動作している制御プログラム（機械語）と支援装置のコンパイラが生成した制御プログラム（機械語）とを比較し、同一ではないプログラムを転送候補とする。そして、転送候補プログラム群のなかから転送対象プログラム（１以上；基本的には複数）を決定してＰＬＣに転送する。
【０１１７】
この決定処理に上記登録データを利用する。すなわち、上記登録データを参照することで、任意の設備に係わるＩ／Ｏモジュールが判別でき、このＩ／Ｏモジュールに係わるプログラムが判別できる。これによって、任意の設備に係わるプログラムは、全て、ＰＬＣに転送されると共に、当該設備に係わらないプログラムが誤ってＰＬＣに転送されることはない。上記任意の設備は、例えばユーザが任意に指定するものであり、例えば複数の設備が順次更新される場合において、その時点で更新作業が完了した設備等である。
【０１１８】
尚、ユーザによる指定は、上記設備の指定に限るものではなく、例えばプログラムの指定等であっても構わない。この場合でも、上記登録データを参照すれば、指定プログラムが係わるＩ／Ｏモジュールが判別でき、このＩ／Ｏモジュールに係わる設備が判別できるので、当該判別された設備に係わるプログラム全てを判別することができる。例えば、更新作業が完了した設備の設備名は分からないが、当該設備に係わるプログラムの名称は１つは分かっている場合等には、この方法が適用できる。
【０１１９】
上述した本手法により、特に複数の設備を制御するプログラマブルコントローラのプログラム更新に関して、各設備を順次更新（リプレース）する場合において、当該設備更新に伴う全制御プログラムの更新（バージョンアップ等）をまとめて行う場合における問題を解消できる。すなわち、上記更新版のプログラム群のうち、その時点においてＰＬＣへ転送して更新させるべき１以上（通常、複数）の制御プログラムを自動的に決定して、転送させることができる。逆に、その時点ではＰＬＣへ転送するべきではない制御プログラムを、誤ってＰＬＣに転送することがないようにできる。つまり、ＰＬＣへ転送して更新させるべき制御プログラムの決定を、ユーザが手作業で行う手法に比べて、ユーザの作業負担を軽減できると共にミスが生じることがない。
【０１２０】
ＰＬＣへ転送するべきではない制御プログラムとは、例えば未だ更新（リプレース）が行われていない設備に係わる更新版プログラムである。更新版プログラムは、更新後の設備に応じた制御内容となっているので、これがＰＬＣに転送されて旧プログラムと置き換えられて実行されてしまうと、システム動作に悪影響を及ぼすことになる。従来ではユーザのミス等によってこのような問題が生じることがあり得たが、本手法によればこの様な問題が生じることはない。
【０１２１】
但し、上述した説明は、一例であり、この例に限らず、本手法はシステム構成が変更される場合全般に適用可能である。システム構成が変更される場合とは、例えば上述した一例では既存の設備が更新（リプレース）される場合を示したが、設備の更新（リプレース）には、新規設備の追加等も含まれるものとする。この場合、支援装置では新規設備に応じた新規の制御プログラムを追加作成してＰＬＣにダウンロードする必要がある。尚、この場合、当該新規プログラムに該当するプログラムはＰＬＣには無いので、これを以って上記ステップＳ５の判定はＮＯとなる（プログラムは同一ではない）ものとする。あるいは、既存の設備が更新（リプレース）される場合であっても、上記のようにそれに伴って既存の制御プログラムを更新する例に限らず、新規の制御プログラムを作成する場合も有り得る。本手法は、この様な各種ケースに対しても適用可能である。また、この様な各種ケースが混在する場合も有り得る。
【０１２２】
このように、本手法によれば、システム構成が変更される場合において、支援装置におけるユーザのプログラム開発効率向上と、設備の更新等に合わせたＰＬＣのプログラムの効率良く的確な更新が可能になり、大規模なシステムでも設備の更新計画に合わせて、手間が掛からずに、稼働中のＰＬＣのプログラムを安全に更新することができる。
【符号の説明】
【０１２３】
１０  支援装置（ローダ）
１１  ユーザインターフェース機能部
１２  コンパイラ機能部
１３  システム構成定義機能部
１４  通信機能部
１５  ソースコード
１６  機械語オブジェクト
１７  使用変数一覧
１８  プログラム一覧（支援）
１９  モジュール情報
２０  ディスプレイ
２１  入力装置
３０  ＰＬＣ（ターゲット）
３１  プログラム実行管理機能部
３２  通信機能部
３３  機械語オブジェクト
３４  プログラム一覧（ＰＬＣ）
３５  識別情報
４１  プログラム名
４２  変数名
４３  局番
５０  システム構成定義画面
６１  局番
６２  設備名
７１  管理番号
７２  プログラム名
７３  機械語オブジェクトファイル名
７４  機械語オブジェクトサイズ
８１  管理番号
８２  機械語オブジェクト格納先アドレス
８３  機械語オブジェクトサイズ
９０  転送選択画面９０
９１  一覧表示部
９２  「転送開始」ボタン
【図１】
0005978775.tif 000002
【図２】
0005978775.tif 000003
【図３】
0005978775.tif 000004
【図５】
0005978775.tif 000005
【図６】
0005978775.tif 000006
【図７】
0005978775.tif 000007
【図８】
0005978775.tif 000008
【図４】
0005978775.tif 000009