(57)【特許請求の範囲】
【請求項１】
プログラマブルコントローラに接続可能な支援装置であって、
ファンクションブロックが記述された任意の制御プログラムのソースコードをコンパイルして該ファンクションブロックに係わる各ＦＢインスタンスを生成する際に、ファンクションブロックの呼出元のタスクのレベルに応じたインデックスメモリ領域にアクセスする為のアクセス情報を生成して、該アクセス情報を当該ＦＢインスタンスに埋め込むコンパイラ手段、
を有することを特徴とする支援装置。
【請求項２】
複数の前記インデックスメモリ領域は、前記プログラマブルコントローラが有するインデックスレジスタの記憶領域を、複数に分割して成るものであり、
各インデックスメモリ領域は、各タスクレベルに対応して設けられ、
前記アクセス情報は、該インデックスレジスタの記憶領域の先頭からのオフセット値であることを特徴とする請求項１記載の支援装置。
【請求項３】
前記コンパイラ手段は、前記インデックスメモリ領域の記憶容量に、前記呼出元のタスクのレベル値を乗じることで、前記オフセット値を算出することを特徴とする請求項２記載の支援装置。
【請求項４】
前記インデックスメモリ領域へのアクセスをメモリ間接指定命令によって命令することを特徴とする請求項１〜３の何れかに記載の支援装置。
【請求項５】
ファンクションブロックが記述された任意の制御プログラムのソースコードをコンパイルして該ファンクションブロックに係わる各ＦＢインスタンスを生成する際に、ファンクションブロックの呼出元のタスクのレベルに応じたインデックスメモリ領域にアクセスする為のアクセス情報を生成して、該アクセス情報を当該ＦＢインスタンスに埋め込むコンパイラ手段を有する支援装置に接続可能に構成されるプログラマブルコントローラであって、
前記コンパイラ手段による前記コンパイルの結果である機械語オブジェクトを保持する記憶手段と、
前記記憶手段に保持された前記機械語オブジェクトを実行するプログラム実行手段と、
を有することを特徴とするプログラマブルコントローラ。
【請求項６】
前記支援装置が有する転送手段によって転送されてくる前記機械語オブジェクトを受信して、該受信した機械語オブジェクトを前記記憶手段に記憶する受信手段を更に有することを特徴とする請求項５記載のプログラマブルコントローラ。
【請求項７】
前記プログラム実行手段は、前記記憶手段に保持された前記機械語オブジェクトをプログラム実行メモリにコピーし、当該プログラム実行メモリにコピーしたプログラムを実行することを特徴とする請求項５または６記載のプログラマブルコントローラ。
【請求項８】
前記インデックスメモリ領域は複数あり、該複数のインデックスメモリ領域は、前記プログラマブルコントローラが有するインデックスレジスタの記憶領域を、複数に分割して成るものであり、
前記ＦＢインスタンス実行の際には呼出元のタスクレベルに応じたインデックスメモリ領域にアクセスすることを特徴とする請求項６記載のプログラマブルコントローラ。
【請求項９】
インデックスレジスタを有し、
前記プログラム実行手段が前記機械語オブジェクトを実行することで、前記ＦＢインスタンス実行の際には呼出元のタスクレベルに応じたインデックスメモリ領域にアクセスすることを特徴とする請求項５記載のプログラマブルコントローラ。
【請求項１０】
プログラマブルコントローラと、該プログラマブルコントローラに接続可能な支援装置を有するプログラマブルコントローラシステムにおいて、
前記支援装置は、
ファンクションブロックが記述された任意の制御プログラムのソースコードをコンパイルして該ファンクションブロックに係わる各ＦＢインスタンスを生成する際に、ファンクションブロックの呼出元のタスクのレベルに応じたインデックスメモリ領域にアクセスする為のアクセス情報を生成して、該アクセス情報を当該ＦＢインスタンスに埋め込むコンパイラ手段を有し、
前記プログラマブルコントローラは、
前記コンパイラ手段による前記コンパイルの結果である機械語オブジェクトを実行するプログラム実行手段、
を有することを特徴とするプログラマブルコントローラシステム。
【請求項１１】
前記プログラマブルコントローラは、
インデックスレジスタを有し、前記プログラム実行手段が前記機械語オブジェクトを実行することで、前記ＦＢインスタンス実行の際には呼出元のタスクレベルに応じたインデックスメモリ領域にアクセスすることを特徴とする請求項１０記載のプログラマブルコントローラシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、IEC61131-3に準拠したプログラマブルコントローラの制御プログラム生成に関する。
【背景技術】
【０００２】
プログラマブルコントローラ（ＰＬＣ）の技術分野において、IEC61131−3に準拠したソフトウェアは、図４に示すように、コンフィグレーション（PLCシステム）、リソース（PLCの単一CPU）、タスク（Task；PLCプログラムの型）から構成される。
【０００３】
Taskは複数定義可能であり、各Taskにレベルが設定される。プログラムはTaskに登録する事で、Taskの実行時にCallされ実行される。ファンクションブロック（ＦＢ）は、プログラムの実行時にプログラム（ＰＧ）もしくは他のＦＢからCallされて実行される。プログラム（ＰＧ）やＦＢ上では様々な命令が使用される。また、後述するように、任意の１つのＦＢが複数のプログラム（ＰＧ）からCallされる場合もある。
【０００４】
また、プログラマブルコントローラのプログラム（制御プログラム等）に関して、近年、旧システムのプログラムを、IEC61131-3に準拠したシステムに移植する要望が増えてきている。
【０００５】
ここで、IEC61131-3に規定されている命令群には、メモリ間接指定命令（インデックス命令など）は、存在していない。そもそも、IEC61131-3には、インデックスレジスタに係わる処理の概念がない。その一方で、この様な制約が無かった旧システムのプログラムの中には、インデックス命令（インデックスレジスタ命令）があるプログラムも少なくない。更に、旧システムでは、インデックスレジスタのデータ入出力制御に係わるサポート機能が、そのＯＳ（オペレーティングシステム）に組み込まれている場合がある。これについては後述する。
【０００６】
上記旧システムでは、インデックス命令（ＬＥＡ命令、ＰＵＳＨ命令、ＰＯＰ命令など）を使用してインデックスレジスタのデータ操作を行っている。ＬＥＡ命令は、インデックスレジスタからデータ（アドレス）をロードする処理を行い、ＰＵＳＨ命令はインデックスレジスタにデータをセットする処理を行い、ＰＯＰ命令はインデックスレジスタからデータを取り出す処理を行う。
【０００７】
また、上記インデックスレジスタからロードしたアドレスを用いて、当該アドレスが示す領域にアクセスしてその格納データを取得／更新等する。あるいは、このアドレスに対して所定のオフセットを加算／減算する等して求めたアドレスを用いて、当該アドレスが示す領域にアクセスしてその格納データを取得／更新等する。あるいは、上記インデックスレジスタの格納アドレスの値自体を、更新する場合もある。尚、これは、インデックス命令の一般的な処理例であるが、この例に限らない。
【０００８】
ここで、上記インデックス命令が、任意のタスク（そのタスクに設定されているプログラム）から呼び出されて実行される場合がある。タスクにはレベルが設定されている。この場合、異なるレベルの複数のタスクから、インデックスレジスタにアクセスすることになり、特にインデックスレジスタの格納データ（上記格納アドレス）が更新されると、問題が生じることになる。例えば、任意のレベルのタスクの処理を実行中に上位タスクの割込みを受けた場合、この上位タスクによるインデックス命令によってインデックスレジスタの格納データ（上記格納アドレス）が書き換えられると、問題が生じる場合がある。つまり、上位レベルタスクによってインデックスレジスタの内容が書き換えられた場合、元々実行中であったタスクの動作に影響する場合がある。
【０００９】
この為、旧システムでは、この様な問題を解消する為の機能が、そのＯＳ（オペレーティングシステム）に組み込まれている。例えば、旧システムでは上記ＯＳのサポート機能によって、上記ＰＯＰ命令やＰＵＳＨ命令を用いてインデックスレジスタを操作することで、上記問題を解消している。
【００１０】
しかしながら、IEC61131-3に準拠したシステムの場合、そもそもインデックスレジスタに係わる処理の概念がないので、そのＯＳには上記の様なサポート機能は存在していない。
【００１１】
この為、上記のように、旧システムのプログラムを、IEC61131-3に準拠したシステムに移植しようとしても、インデックス命令に関して問題が生じることになる。
また、例えば、特許文献１の従来技術が知られている。
【００１２】
特許文献１の発明は、インデックスレジスタ命令をもたないプログラマブルコントローラにおいて、インデックスレジスタ命令を含む命令からインデックスレジスタ命令を用いない命令を機械的に作成するものである。
【００１３】
特許文献１の技術では、インデックスレジスタ命令を使用して作成されたプログラムを、機械的作業によってインデックスレジスタ命令を持たない命令に変換し、インデックスレジスタ命令を持たないプログラマブルコントローラを動作させる。
【先行技術文献】
【特許文献】
【００１４】
【特許文献１】特開２００６−３２３６０９号公報
【発明の概要】
【発明が解決しようとする課題】
【００１５】
上記従来の問題を解決する為に、従来では例えば、インデックスレジスタのメモリ領域を、各タスクレベル毎に分割することが考えられている。これによって、例えばタスクレベル１のタスクによるインデックス命令は、タスクレベル１用の分割領域にしかアクセスできない。例えばタスクレベル２のタスクによるインデックス命令は、タスクレベル２用の分割領域にしかアクセスできない。尚、分割領域を設けることは、インデックスレジスタを複数設けることと同義であると見做してもよい。
【００１６】
しかしながら、図５に示すように、異なるレベルのタスクに登録された各プログラムが、同一のＦＢをコールする場合、このＦＢからインデックス命令を実行する際に、どのレベル用の分割領域にアクセスするのかを指定することが出来なかった。
【００１７】
このように、IEC61131-3に準拠したプログラマブルコントローラシステムでは、インデックスレジスタに係わる処理の概念がないので、上記旧システムのＯＳの様なサポート機能がなく、複数の異なるレベルのタスクから同一のＦＢをコールする場合に、上述した問題が生じることになる。
【００１８】
尚、上記の通り、IEC61131-3に準拠したプログラマブルコントローラシステムでは、インデックスレジスタに係わる処理の概念がないが、実質的にインデックス命令に相当する処理が、行えないわけではない。上記のように、インデックス命令とは、メモリ間接指定命令であり、特定のメモリ領域に格納データに基づいて、アクセス先のアドレスを求めてアクセスするものである。IEC61131-3ではこの様なアクセス方法を禁じる思想であるが、技術的にこの様なアクセスが出来ないわけではない。
【００１９】
本発明の課題は、メモリ間接指定命令を有するＦＢを複数のレベルのタスクからコールし得るプログラマブルコントローラシステムに関して、タスクレベル毎に対応するインデックスメモリ領域を定義すると共に、上記ＦＢに係わる各ＦＢインスタンスが呼出元のタスクレベルに応じたインデックスメモリ領域にアクセスすることを実現させる開発支援装置、プログラマブルコントローラシステム等を、提供することである。
【課題を解決するための手段】
【００２０】
本発明の支援装置は、プログラマブルコントローラに接続可能な支援装置であって、ファンクションブロックが記述された任意の制御プログラムのソースコードをコンパイルして該ファンクションブロックに係わる各ＦＢインスタンスを生成する際に、ファンクションブロックの呼出元のタスクのレベルに応じたインデックスメモリ領域にアクセスする為のアクセス情報を生成して、該アクセス情報を当該ＦＢインスタンスに埋め込むコンパイラ手段を有する。
【発明の効果】
【００２１】
本発明の開発支援装置、プログラマブルコントローラシステム等によれば、メモリ間接指定命令を有するＦＢを複数のレベルのタスクからコールし得るプログラマブルコントローラシステムに関して、タスクレベル毎に対応するインデックスメモリ領域を定義すると共に、上記ＦＢに係わる各ＦＢインスタンスが呼出元のタスクレベルに応じたインデックスメモリ領域にアクセスすることを実現させることができる。
【図面の簡単な説明】
【００２２】
【図１】開発支援装置の機能構成図である。
【図２】インデックス領域の分割使用例である。
【図３】機械語オブジェクトのＰＬＣにおける実行イメージを示す。
【図４】IEC61131−3に準拠したソフトウェアの構成例である。
【図５】複数のタスクレベルのプログラムがＦＢをCallする図である。
【発明を実施するための形態】
【００２３】
以下、図面を参照して本発明の実施の形態について説明する。
本発明は、プログラマブルコントローラ（ＰＬＣ）の開発支援装置に係わる。
図１は、開発支援装置の機能構成図である。
【００２４】
開発支援装置１０は、例えばコンパイラ機能部１１を有する。
開発支援装置１０は、コンパイラ機能部１１によって、任意の制御プログラム１（ソースコード）をコンパイルして、機械語オブジェクトコード２を生成する。そして、不図示の転送機能部によって、この機械語オブジェクトコード２をＰＬＣ（プログラマブルコントローラ）３にダウンロード（転送）する。ＰＬＣ３は、不図示のプログラム実行機能部によってこの機械語オブジェクトコード２を実行することで、不図示の制御対象機器等の制御処理等を実現する。
【００２５】
上記制御プログラム１（ソースコード）には、ファンクションブロックが記述されている。コンパイラ機能部１１は、制御プログラム１のコンパイル処理において、任意のファンクションブロックに係わる各ＦＢインスタンスを生成する際に、該ファンクションブロックの呼出元のタスクのレベルに応じたインデックスメモリ領域にアクセスする為のアクセス情報を生成して、該アクセス情報を当該ＦＢインスタンスに埋め込む。１つのファンクションブロックに対して複数のタスクが呼出しを行う場合、呼出元のタスク毎に応じたＦＢインスタンスが生成される。これら各ＦＢインスタンス毎に、呼出元のタスクのレベルに応じたアクセス情報が、埋め込まれることになる。
【００２６】
上記インデックスメモリ領域は、ＰＬＣ３が有するインデックスレジスタの記憶領域を、複数に分割して成るものである。各インデックスメモリ領域は、各タスクレベルに対応して設けられている。上記アクセス情報は、例えば、該インデックスレジスタの記憶領域の先頭からのオフセット値である。コンパイラ機能部１１は、例えば、インデックスメモリ領域の記憶容量に、呼出元のタスクのレベル値を乗じることで、オフセット値を算出するが、この例に限らない。尚、オフセット値の算出は、図示のオフセットアドレス算出部１１ａが行う。
【００２７】
ＰＬＣ３は、不図示のプログラム実行機能部によって上記機械語オブジェクトコード２を実行することで、ＦＢインスタンス実行の際には呼出元のタスクレベルに応じたインデックスメモリ領域にアクセスすることになる。例えばインデックス命令によって、インデックスメモリ領域へのアクセスが行われる。
【００２８】
ここで、上述したことから、ＰＬＣ３は、IEC61131-3に準拠したプログラマブルコントローラシステムである。また、制御プログラム１（ソースコード）は、ＦＢ（ファンクションブロック）等を用いて作成されているものとする。上記のように、１つのＦＢが、複数のタスク（プログラム（ＰＧ））から呼び出される（Call）場合もあり、これら複数のタスクのレベルが異なる場合もある。
【００２９】
また、上述したことから、上記制御プログラム１（ソースコード）は、例えば、不図示の旧システム（上述したIEC61131-3に準拠していないプログラマブルコントローラシステム）における制御プログラムに基づいて、これと略同様の処理内容となるように、開発者等が作成したものである。制御プログラム１には、インデックス命令（インデックスレジスタ命令；ＬＥＡ命令、ＰＵＳＨ命令、ＰＯＰ命令など）も、記述されていてよい。
【００３０】
ここで、上述したように、IEC61131-3準拠のプログラマブルコントローラシステムは、インデックス命令に対応していない。しかし、上記ＰＬＣ３は、IEC61131-3準拠のプログラマブルコントローラであるが、インデックス命令に対応している。これについて、詳しくは後述するが、例えば上記旧システム等におけるインデックス命令を、本システムでも利用可能とすることもできる。但し、この例に限らず、例えば、上記旧システム等におけるインデックス命令に相当する処理を本システムで実現する命令を、開発者等が新たに作成してもよい。ここでは、この様なインデックス命令やインデックス命令に相当する処理を実現する命令を、“メモリ間接指定命令”と呼ぶものとする。
【００３１】
そして、ここでは特に、レベルが異なる複数のタスク（プログラム（ＰＧ））から呼び出されるＦＢが、上記“メモリ間接指定命令”を実行するものである場合について説明する。
【００３２】
ここで、一般的に、制御プログラムを構成するＦＢをコンパイルすると、呼出元タスクに応じた各ＦＢインスタンスが生成される。本手法では、上記コンパイル機能部１１によるコンパイル処理において、ＦＢの実行コードをマッピングする際に（ＦＢインスタンスの生成時に）、呼出元のタスクのレベルに応じたオフセットアドレスを算出して、このオフセットアドレスをＦＢインスタンスに保有させるものである。
【００３３】
これより、図示のように、コンパイラ機能部１１の処理結果である機械語オブジェクト２に含まれる各ＦＢインスタンス２ａには、オフセットアドレスが含まれることになる。詳しくは後述する。
【００３４】
ここで、本例では、タスクレベル毎に対応してインデックスレジスタ領域（インデックスメモリ領域）を設ける。例えば、図２に示すように、インデックスレジスタの記憶領域を複数に分割して、これら各分割領域それぞれを任意のタスクレベルに応じたインデックスレジスタ領域とする。つまり、図示の例では、例えば“Level3退避領域”は、タスクレベル‘３’に対応するインデックスレジスタ領域であり、“Level0退避領域”は、タスクレベル‘０’に対応するインデックスレジスタ領域であり、“Default退避領域”は、デフォルトレベルに対応するインデックスレジスタ領域である。
【００３５】
尚、ここではレベル‘３’が最上位レベル、デフォルトレベルが最下位レベルであるものとする。そして、上記“メモリ間接指定命令”を有する任意のＦＢが、例えばタスクレベル３のタスク（そのプログラム）からCallされた場合には“Level3退避領域”にアクセスし、あるいは例えばデフォルトレベルのタスク（そのプログラム）からCallされた場合には“Default退避領域””にアクセスする。これを実現する為に、コンパイル機能部１１（オフセットアドレス算出部１１ａ）の機能が設けられている。
【００３６】
上記のように、呼び出し元のタスクのレベルに応じたインデックスレジスタ領域にアクセスするので、例えばレベル３のタスクに係わる処理によって例えば“Default退避領域”の格納データが書き換えられてしまうような事態は、生じることはない。
【００３７】
ここで、各ＦＢは、特に図示しない任意のプログラムコード群から成るものである。任意の１つのＦＢを例にすると、本例のコンパイル機能部１１によれば、このＦＢに係わる各ＦＢインスタンスには、呼出元のタスクのレベルに応じたオフセットアドレス値が、含まれるようになる。すなわち、このＦＢに係わる上記プログラムコード群の中にメモリ間接指定命令があった場合には、コンパイル機能部１１は、当該ＦＢの呼出元のタスクのレベルに応じたオフセットアドレス値を求めて、これをＦＢインスタンス中に埋め込む。
【００３８】
尚、特に説明しないが、当然、コンパイラ機能部１１の機能によって、ＦＢインスタンスには、自己に埋め込まれたオフセットアドレス値を用いて、該当するインデックスレジスタ領域にアクセスする処理が、記述されることになる。例えば、後述する図３の例のように、「アクセス先アドレス＝インデックスレジスタの記憶領域の先頭アドレス＋オフセットアドレス値」等として、当該アクセス先アドレスにアクセスする処理が、ＦＢインスタンス中に記述されることになる。
【００３９】
コンパイル機能部１１には、上記のようなオフセットアドレス値を算出する機能も含まれており、これが上記オフセットアドレス算出部１１ａである。コンパイル機能部１１は、例えば、呼出元のタスクは分かるので、そのタスクレベルも分かる。これより、このタスクレベルを、予め決められた算出式に適用することで、オフセットアドレス値を算出することができる。この算出式の一例を以下に示す。
【００４０】
オフセットアドレス値  ＝  所定記憶容量×（タスクレベル＋１）
但し、これは図示の例に応じた一例に過ぎない。例えば、仮にデフォルトレベルが無いとする場合には（この場合、Level0が最下位レベルとなる）、
オフセットアドレス値  ＝  所定記憶容量×タスクレベル
等となることになる。
【００４１】
上記所定記憶容量は、例えば図２に示す各退避領域（各タスクレベル毎に対応するインデックス記憶領域；インデックスレジスタの記憶領域を分割した領域と見做すこともできる）の記憶容量である。尚、ここでは全ての退避領域の記憶容量が同一であるものとする。尚、上記所定記憶容量は、図２の例では１ＷＯＲＤ（ワード）である。
【００４２】
コンパイル機能部１１は、上記メモリ間接指定命令のコンパイル処理結果として、「上記インデックスレジスタの記憶領域の先頭アドレス＋上記オフセットアドレス値」で得られるアドレスから始まる上記“退避領域”にアクセスする処理を生成する。尚、インデックスレジスタの記憶領域（インデックス領域）の先頭アドレスは、予め設定されているものとする。
【００４３】
この様にして生成された機械語オブジェクト２は、ＰＬＣ３にダウンロードされて実行されることになる。ＰＬＣ３は、この機械語オブジェクトコード２を実行する。尚、特に図示しないが、ＰＬＣ３は、機械語オブジェクトコード２を記憶する記憶部と、この記憶されている機械語オブジェクトコード２を実行するプログラム実行機能部等を有する。
【００４４】
開発支援装置１０で生成された上記機械語オブジェクトコード２を、ＰＬＣ３に記憶させる方法は、様々であってよい。例えば開発支援装置１０は、機械語オブジェクトコード２をＰＬＣ３にダウンロード（転送）する転送機能部（不図示）を有し、ＰＬＣ３は、この機械語オブジェクトコード２を受信して上記記憶部に記憶する受信機能部（不図示）を有する。但し、この例に限らず、例えばメモリカード等の可搬型記憶媒体を介する方法であっても構わない。
【００４５】
また、例えば一例としては、ＰＬＣ３は更に不図示のプログラム実行メモリを有し、上記不図示のプログラム実行機能部は、上記記憶部に保持された上記機械語オブジェクトコード２を、上記プログラム実行メモリにコピーし、当該プログラム実行メモリにコピーしたプログラムを実行するように構成してもよい。
【００４６】
図３に、上記のように生成された機械語オブジェクトのＰＬＣ３における実行イメージを示す。
図３では、まず図上左側に、任意のＦＢに関して複数のＦＢインスタンスが生成されたイメージを示す。そして、図上中央には、そのなかの“ＦＢインスタンスｎ”の機械語コード群のイメージを示すが、この機械語コード群の殆どは省略して示しており、上記オフセットアドレス値のみを示している。ここでは図示のように、オフセットアドレス値は‘ｍ WORD’であるものとする。尚、ここでは、上記各“退避領域”の記憶容量は全て１WORDであるものとする。
【００４７】
そして、上記省略している機械語コード群の一部として、このオフセットアドレス値は‘ｍWORD’を用いて、「インデックス領域の先頭アドレス＋オフセットアドレス値‘ｍ WORD’」のアドレスから始まる退避領域に、アクセスする処理が記述されることになる。
【００４８】
これより、この例では、図上右側に示すように、インデックス領域の先頭から‘ｍ WORD’分、すなわちｍ個の退避領域の分をオフセットし、その次の退避領域（Level2 退避領域）にアクセスすることになる。
【００４９】
本発明では、上述したように、IEC61131-3に準拠したＰＬＣに係わる開発支援装置において、レベルが異なる複数のタスクからコールされるＦＢであって実質的にインデックス命令を含むＦＢをコンパイルしてＦＢインスタンスを生成する際に、呼出元タスクのレベルに応じたオフセットアドレス値を求めて、これをＦＢインスタンスに埋め込む。これによって、ＰＬＣ側でインデックスメモリアクセスを実行する際には、呼出元のタスクレベルに応じた分割領域にアクセスすることができる。つまり、任意のタスク実行中に、より上位レベルのタスク割込みがあった場合でも、この上位タスクによって元のタスクのインデックス値が書き換えられる（メモリ値が破壊される）ことはない。
【００５０】
尚、図１に示す開発支援装置１０（プログラマブルコントローラの支援装置）は、例えば例えばパソコン等の汎用の一般的なコンピュータ装置により実現される。よって、開発支援装置１０は、特に図示しないがハードウェア的には一般的なパソコン等の構成を有している。すなわち、ＣＰＵ、ハードディスク／メモリ等の記憶装置、入出力インタフェース、ディスプレイ等の表示部、キーボード等のユーザ操作部、通信機能部等の不図示の各構成を有している。
【００５１】
上不図示の記記憶装置には、予め所定のアプリケーションプログラムが記憶されている。上記不図示のＣＰＵが、このアプリケーションプログラムを実行することで、コンパイラ機能部１１（そのオフセットアドレス算出部１１ａ等）の各種処理機能や上記転送機能部等が実現される。
【００５２】
また、ＰＬＣ３も、例えば不図示のＣＰＵや記憶装置を有し、この記憶装置に予め記憶されている所定のアプリケーションプログラムを、ＣＰＵが実行することにより、上記不図示のプログラム実行機能部や受信機能部等を実現するものである。
【００５３】
ここで、ここまで説明していなかったが、ＰＬＣ３は、IEC61131-3に準拠した既存のプログラマブルコントローラそのままではなく、そのファームウェアに改良を施してある。
まず、上記背景技術や課題で説明したように、旧システムでは、インデックス命令（ＬＥＡ命令、ＰＵＳＨ命令、ＰＯＰ命令）を使用出来たが、IEC61131-3準拠のプログラマブルコントローラシステムでは、そもそもインデックスレジスタに係わる処理の概念がない。この為、上記ＰＬＣ３は、インデックス命令を使用できるようにする為の改良をファームウェアに施してある。
【００５４】
まず、ＰＬＣ（プログラマブルコントローラ）のファームウェアは、通常、サポートしている命令群のリストを保持している。IEC61131-3準拠の既存のプログラマブルコントローラの場合、上記のことから当然、命令群リスト中にインデックス命令（ＬＥＡ命令、ＰＵＳＨ命令、ＰＯＰ命令）は無い。これに対して、ＰＬＣ３の場合、開発者等が事前に命令群リスト中にインデックス命令（ＬＥＡ命令、ＰＵＳＨ命令、ＰＯＰ命令）を追加する作業を行っている。
【００５５】
更に、これらＬＥＡ命令、ＰＵＳＨ命令、ＰＯＰ命令に応じたプログラムコード（マイクロプログラム等）を、予め開発者等が任意に作成して、ＰＬＣ３に保持させている。このプログラムコード（マイクロプログラム等）は、旧システムにおけるＬＥＡ命令、ＰＵＳＨ命令、ＰＯＰ命令に応じたプログラムコード（マイクロプログラム等）と同一ではないが、同じ処理が実行されるように開発者等が作成している。尚、この様なプログラムコード（マイクロプログラム等）の作成は、当業者であれば問題なく実現できるものである。
【００５６】
ＰＬＣ３は、上記機械語オブジェクト２中にインデックス命令がある場合には、これに応じた上記プログラムコード（マイクロプログラム等）を実行することで、当該インデックス命令の処理を実現させる。
【００５７】
例えば上述したようにして、ＰＬＣ３は、IEC61131-3準拠のプログラマブルコントローラであるが、旧システムと略同様にインデックス命令（ＬＥＡ命令、ＰＵＳＨ命令、ＰＯＰ命令）を実行できるようになっている。しかしながら、上述したように、IEC61131-3に準拠したシステムの場合、そもそもインデックスレジスタに係わる処理の概念がないので、そのＯＳには旧システムの上述したサポート機能は存在していない。本手法は、上述したようにして、この問題を解消している。
【符号の説明】
【００５８】
１  制御プログラム
２  機械語オブジェクト
３  ＰＬＣ
１０  開発支援装置
１１  コンパイラ機能部
１１ａ  オフセットアドレス算出部
【図１】
0006295914.tif 000002
【図２】
0006295914.tif 000003
【図３】
0006295914.tif 000004
【図４】
0006295914.tif 000005
【図５】
0006295914.tif 000006