(57)【要約】【課題】プログラム稼動中に保持されているプログラムの書き換えを可能にするＰＬＣ用機器を提供すること【解決手段】Ｃ言語で記述されたプログラムを構成する複数のユーザアプリＡ，Ｂを格納するプログラムコードエリアＰと、プログラムエリアに格納された複数のユーザアプリのうち、使用するプログラム並びにその実行順を規定するタスク管理ブロックＴＣＢを格納するデータエリアＤを備える。データエリアには、ＢＢＳエリアＢに格納された変数をアクセスするためのアドレスを格納する変数データマッピングブロックＶＭＢも備える。システム稼働中にＴＣＢ中の実行プログラムを示すアドレスを更新することで、ユーザプアプリをＡからＢに切り替えることができ、また、ＴＣＢ中のＶＭＢの参照先アドレスを実線から破線に変更することで、参照する変数をａ，ｂからｃ，ｄに変更できる。【選択図】        図３
2004280306.tif 000002
【特許請求の範囲】
【請求項１】
プログラマブルコントローラを構成する機器であって、
Ｃ言語などのコンパイル方式の言語で記述されたプログラムを実行可能であり、
ワークメモリ中に、前記プログラムを構成する複数のアプリケーションプログラムを格納するプログラムエリアと、前記プログラムエリアに格納された複数のアプリケーションプログラムのうち、使用するプログラム並びにその実行順を規定するタスク管理ブロックを格納するデータエリアを備え、
前記タスク管理ブロックは、各タスクで実行するアプリケーションプログラムを指定するアドレス情報を含むとともに、そのアドレス情報を外部から書き換え可能にしたことを特徴とするプログラマブルコントローラ用機器。
【請求項２】
前記データエリアには、前記アプリケーションプログラムを実行する際に使用する変数が格納されたデータ領域をアクセスするための変数アドレス情報を備えた変数データマッピングブロックを設け、
前記タスク管理ブロックは、前記変数データマッピングブロックのアクセス先を特定する情報を含み、その情報を外部から書き換え可能にしたことを特徴とする請求項１に記載のプログラマブルコントローラ用機器。
【請求項３】
前記データエリアには、前記アプリケーションプログラムを実行する際に使用する変数が格納されたデータ領域をアクセスするための変数アドレス情報を備えた変数データマッピングブロックを設け、
前記変数アドレス情報を外部から書き換え可能にしたことを特徴とする請求項１または２に記載のプログラマブルコントローラ用機器。
【請求項４】
プログラマブルコントローラを構成する機器であって、
Ｃ言語などのコンパイル方式の言語で記述されたプログラムを実行可能であり、
ワークメモリ中に、前記プログラムを実行する際に使用する変数を格納する変数エリアと、前記変数エリアに格納された変数のうち、使用する変数を変数アドレスにて規定する変数データマッピングブロックとを格納するデータエリアを備え、
前記変数データマッピングブロックは、プログラムで使用するパラメータを指定するアドレス情報を含むとともに、そのアドレス情報を外部から書き換え可能にしたことを特徴とするプログラマブルコントローラ用機器。
【請求項５】
Ｃ言語などのコンパイル方式の言語で記述されたプログラムを実行可能なプログラマブルコントローラ用機器におけるプログラム変更方法であって、
プログラマブルコントローラ用機器が持つワークメモリ中に、前記プログラムを構成する複数のアプリケーションプログラムを格納するプログラムエリアと、前記プログラムエリアに格納された複数のアプリケーションプログラムのうち、使用するプログラム並びにその実行順を規定するタスク管理ブロックを格納するデータエリアを備えておき、
前記タスク管理ブロックは、各タスクで実行するアプリケーションプログラムを指定するアドレス情報を含むように構成し、
システムの動作稼働中に、前記アドレス情報を外部から書き換え、
それ以降、そのアドレス情報が書き換えられたタスクを実行する際には、書き換えられたアドレス情報により指定されるアプリケーションプログラムを実行することにより再コンパイルすることなく実行するプログラムを変更することを特徴とするプログラム変更方法。
【請求項６】
前記データエリアには、前記アプリケーションプログラムを実行する際に使用する変数が格納されたデータ領域をアクセスするための変数アドレス情報を備えた変数データマッピングブロックを備えており、
前記タスク管理ブロックは、前記変数データマッピングブロックのアクセス先を特定する情報を持たせるようにし、
システムの動作稼働中に、前記アクセス先を特定する情報を外部から書き換え、
それ以降に、アクセス先を特定する情報が書き換えられたタスクを実行する際に、そのタスクに関連するアプリケーションプログラムが使用・参照するメモリエリアを変更することにより、プログラムの実行内容を変更することを特徴とする請求項５に記載のプログラム変更方法。
【請求項７】
前記データエリアには、前記アプリケーションプログラムを実行する際に使用する変数が格納されたデータ領域をアクセスするための変数アドレス情報を備えた変数データマッピングブロックを設け、
システムの動作稼働中に、前記変数アドレス情報を外部から書き換え、
それ以降に、前記変数アドレス情報が書き換えられた変数データマッピングブロックを参照しているタスクを実行する際に、そのタスクに関連するアプリケーションプログラムが使用・参照するメモリエリアを変更することにより、プログラムの実行内容を変更することを特徴とする請求項５または６に記載のプログラム変更方法。
【請求項８】
Ｃ言語などのコンパイル方式の言語で記述されたプログラムを実行可能なプログラマブルコントローラ用機器における制御内容変更方法であって、
プログラマブルコントローラ用機器が持つワークメモリ中に、前記プログラムを実行する際に使用する変数を格納する変数エリアと、前記変数エリアに格納された変数のうち、使用する変数を変数アドレスにて規定する変数データマッピングブロックとを格納するデータエリアを備えておき、
前記変数データマッピングブロックは、プログラムで使用するパラメータを指定するアドレス情報を含むように構成し、
システムの動作稼働中に、前記アドレス情報を外部から書き換え、
それ以降、プルグラム実行する際には、書き換えられたアドレス情報により指定されるパラメータを用いてプログラムを実行することにより再コンパイルすることなく実行される制御内容を変更することを特徴とするプログラマブルコントローラ用機器における制御内容変更方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、Ｃ言語などのコンパイル方式の言語で記述されたプログラムを実行可能なプログラマブルコントローラ用機器並びにプログラム変更方法及び制御内容変更方法に関する。
【０００２】
【従来の技術】
ファクトリーオートメーション（ＦＡ）の制御装置として、プログラマブルコントローラ（ＰＬＣ）が用いられている。このＰＬＣは、複数のユニットから構成される。すなわち、電源供給源の電源ユニット，ＰＬＣ全体の制御を統率するＣＰＵユニット，ＦＡの生産装置や設備装置の適所に取り付けたスイッチやセンサの信号を入力する入力ユニット，アクチュエータなどに制御出力を出す出力ユニット，通信ネットワークに接続するための通信ユニットなどの各種のユニットを適宜組み合わせて構成される。
【０００３】
ＰＬＣのＣＰＵユニットにおける制御は、入力ユニットで入力した信号をＣＰＵユニットのＩ／Ｏメモリに取り込み（ＩＮリフレッシュ）、予め登録されたユーザプログラム記述言語（例えばラダー言語）で組まれたユーザプログラムに基づき論理演算をし（演算実行）、その演算実行結果をＩ／Ｏメモリに書き込んで出力ユニットに送り出し（ＯＵＴリフレッシュ）、その後、いわゆる周辺処理を行うということをサイクリックに繰り返し処理するようになる。そして、上記したユーザプログラムは、ＣＰＵユニットのユーザメモリに格納される。
【０００４】
ところで、ＰＬＣの一般的な使われ方としては、複数のＩＮデータの論理演算をして、その演算結果によってＯＵＴデータを出力して、被制御装置を制御するような使われ方がある。この場合のユーザプログラムは、ラダー言語を用いることが多い。その理由は、ラダーによるプログラミングは、入力機器の接点のＯＮ／ＯＦＦ状態と出力機器へのＯＵＴ信号の状態との論理関係を表しやすく、目視でわかりやすいためである。
【０００５】
しかし、最近ではＰＬＣの制御内容も単なる論理演算だけでなく、関数演算や数式演算，アナログ情報を扱う処理をすることもある。このような比較的高度な演算や処理をする場合のプログラミング言語としてＣ言語を使用することがある。そこで、ＰＬＣの中に、ラダープログラムを実行するＣＰＵと、Ｃ言語を実行するＣＰＵとの両方を持たせたものがある。このようなＰＬＣでは、Ｃ言語などのコンパイル方式の言語でプログラムを記述して演算処理可能となっている。そのようなＰＬＣにおいては、プログラムは、外部のプログラミング開発環境（プログラミングツール）で作成したのち、コンパイル→アセンブル→リンクの工程を経てオブジェクトコードに変換し、その変換されたオブジェクトコードをＰＬＣのＣＰＵユニットにダウンロードして、ＣＰＵユニット内に記憶される。そのプログラムはＣＰＵユニット内にて実行される。
【０００６】
そして、現在実行中のプログラムを変更すべくメモリ内容を書き換えるには、通常、以下のような手順を実行する。すなわち、（１）まずジャンパーピンやディップスイッチ等のモード切替手段によって、ＰＬＣをプログラム転送モードに変更する。（２）次いで、オブジェクトコードのダウンロードを実行する。これにより、ＰＬＣが持つプログラムを格納するメモリに、オブジェクトコードが格納される。（３）ダウンロードが完了したらならば、ＰＬＣをプログラム実行モードに変更した後、立ち上げ直す。
【０００７】
【発明が解決しようとする課題】
しかしながら、ＰＬＣにおける動作モードの決定は、電源ＯＮ時に決定されることが多いため、プログラムのダウンロードを行うに際し、ＰＬＣの再起動が必要となる場合があった。
【０００８】
従って、Ｃ言語で記述された制御プログラムの内容を、コントローラの稼働中に安全に入れ換えることができなかった。つまり、たとえ制御プログラムの実行内容を部分的に入れ替えたり、パラメータ等の設定を変更したい場合でも、一旦電源をＯＦＦにし、ＰＬＣの再起動をしなければならず、その作業が煩雑である。
【０００９】
この発明は、Ｃ言語等のコンパイル方式の言語で記述されたプログラムに対応するプログラマブルコントローラ用機器において、メモリに記録されたプログラム自体を修正・再コンパイルすることなくプログラムによる制御内容，参照メモリエリアの変更などを行うことができるようにしたプログラマブルコントローラ用機器並びにプログラム変更方法及び制御内容変更方法を提供することを目的とする。
【００１０】
【課題を解決するための手段】
この発明によるプログラマブルコントローラ用機器は、プログラマブルコントローラを構成する機器であって、Ｃ言語などのコンパイル方式の言語で記述されたプログラムを実行可能なものである。そして、ワークメモリ中に、前記プログラムを構成する複数のアプリケーションプログラムを格納するプログラムエリアと、前記プログラムエリアに格納された複数のアプリケーションプログラムのうち、使用するプログラム並びにその実行順を規定するタスク管理ブロックを格納するデータエリアを備える。さらに、前記タスク管理ブロックは、各タスクで実行するアプリケーションプログラムを指定するアドレス情報を含むとともに、そのアドレス情報を外部から書き換え可能にした。
【００１１】
また、この発明では、使用するプログラム並びにその実行順を書き換えするのに代えて、プログラム実行に使用する変数を変えるような構成にもした。
【００１２】
ここで、「プログラマブルコントローラ用機器」とは、例えば、プログラマブルコントローラを構成する１つのユニットでも良いし、ボードのように所定のユニットに実装されるものでも良いし、プログラマブルコントローラそのものでも良い。また、「実行順」というのは、各タスクを実行する順番のことで、実際にはアプリケーションプログラムにとっての実行順が相当する。
【００１３】
また、本発明に係るプログラム変更方法は、Ｃ言語などのコンパイル方式の言語で記述されたプログラムを実行可能なプログラマブルコントローラ用機器におけるプログラム変更方法であって、プログラマブルコントローラ用機器が持つワークメモリ中に、前記プログラムを構成する複数のアプリケーションプログラムを格納するプログラムエリアと、前記プログラムエリアに格納された複数のアプリケーションプログラムのうち、使用するプログラム並びにその実行順を規定するタスク管理ブロックを格納するデータエリアを備えておく。そして、前記タスク管理ブロックは、各タスクで実行するアプリケーションプログラムを指定するアドレス情報を含むように構成し、システムの動作稼働中に、前記アドレス情報を外部から書き換える。これにより、それ以降、そのアドレス情報が書き換えられたタスクを実行する際には、書き換えられたアドレス情報により指定されるアプリケーションプログラムを実行することにより再コンパイルすることなく実行するプログラムが変更される。
【００１４】
外部プログラムからタスク管理ブロックの情報を書き換えることができる。従って、タスク管理ブロック中の実行するアプリケーションプログラムを指定するアドレス情報を書き換えることより、実行するプログラム自身を変えてしまうことができる。しかも、係る変更は、データエリアにあるタスク管理ブロックに格納されたデータを変更するだけで、再コンパイルなども不要となる。もちろん、プログラムエリアには、予め変更対象のアプリケーションプログラムを格納しておく必要はある。
【００１５】
また、本発明に係るプログラマブルコントローラ用機器の他の解決手段としては、上記した発明を前提とし、さらに、前記データエリアには、前記アプリケーションプログラムを実行する際に使用する変数が格納されたデータ領域をアクセスするための変数アドレス情報を備えた変数データマッピングブロックを設け、前記タスク管理ブロックは、前記変数データマッピングブロックのアクセス先を特定する情報を含み、その情報を外部から書き換え可能にすることである。
【００１６】
また、前記データエリアには、前記アプリケーションプログラムを実行する際に使用する変数が格納されたデータ領域をアクセスするための変数アドレス情報を備えた変数データマッピングブロックを設け、前記変数アドレス情報を外部から書き換え可能にするようにしてもよい。
【００１７】
そして、本発明に係るプログラム変更方法の他の解決手段では、上記した発明を前提とし、前記データエリアには、前記アプリケーションプログラムを実行する際に使用する変数が格納されたデータ領域をアクセスするための変数アドレス情報を備えた変数データマッピングブロックを備えており、前記タスク管理ブロックは、前記変数データマッピングブロックのアクセス先を特定する情報を持たせるようにし、システムの動作稼働中に、前記アクセス先を特定する情報を外部から書き換え、それ以降に、アクセス先を特定する情報が書き換えられたタスクを実行する際に、そのタスクに関連するアプリケーションプログラムが使用・参照するメモリエリアを変更することにより、プログラムの実行内容を変更するようにしてもよい。
【００１８】
また、前記データエリアには、前記アプリケーションプログラムを実行する際に使用する変数が格納されたデータ領域をアクセスするための変数アドレス情報を備えた変数データマッピングブロックを設け、システムの動作稼働中に、前記変数アドレス情報を外部から書き換え、それ以降に、前記変数アドレス情報が書き換えられた変数データマッピングブロックを参照しているタスクを実行する際に、そのタスクに関連するアプリケーションプログラムが使用・参照するメモリエリアを変更することにより、プログラムの実行内容を変更するようにすることもできる。
【００１９】
上記した各発明では、タスク管理ブロックの情報や、変数データマッピングブロックの情報を書き換えることにより、タスクが管理するアプリケーションプログラムを実行する際に参照・使用されるメモリエリアが変わる。これにより、実質的に動作するプログラムの内容を変更することができる。
【００２０】
そして、タスク管理ブロックや変数データマッピングブロックは、外部からアクセス可能なデータエリアに配置したため、システムの動作を稼働状態のまま、再コンパイルすることなく変更することができ、その結果、システムの稼働中にプログラムを大きく変更することができる。
【００２１】
また、本発明に係るプログラマブルコントローラ用機器の制御内容の変更方法は、Ｃ言語などのコンパイル方式の言語で記述されたプログラムを実行可能なプログラマブルコントローラ用機器におけるプログラムの制御内容変更方法であって、プログラマブルコントローラ用機器が持つワークメモリ中に、前記プログラムを実行する際に使用する変数を格納する変数エリアと、前記変数エリアに格納された変数のうち、使用する変数を変数アドレスにて規定する変数データマッピングブロックとを格納するデータエリアを備えておく。そして、前記変数データマッピングブロックは、プログラムで使用するパラメータを指定するアドレス情報を含むように構成し、システムの動作稼働中に、前記アドレス情報を外部から書き換える。これにより、それ以降、プルグラム実行する際には、書き換えられたアドレス情報により指定されるパラメータを用いてプログラムを実行することにより再コンパイルすることなく実行される制御内容を変更される。
【００２２】
【発明の実施の形態】
図１は、本発明の好適な一実施の形態を示している。図１に示すように、ＰＬＣ１は、ＣＰＵユニット１０や、拡張ＣＰＵユニット２０等を備えて構成される。もちろん、図示省略するが、通信ユニット，Ｉ／Ｏユニット，マスタユニット，電源ユニットなど、その他のユニットも存在する。
【００２３】
ＣＰＵユニット１０は、図示省略するシステムＲＯＭに格納されたシステムプログラムにしたがって、ＣＰＵ１１が所定の処理をサイクリックに実行するものである。ここで所定の処理とは、共通処理，演算処理，サイクルタイム算出処理，Ｉ／Ｏリフレッシュ処理，周辺サービス処理がある。演算処理は、プログラムメモリ１２に格納されたユーザプログラムを順次実行するもので、その演算実行時に、適宜ＩＯメモリ１３にアクセスし、ＩＯデータを読み書きしたり、パラメータを取得する。そして、Ｉ／Ｏリフレッシュ処理では、ＩＯメモリ１３に対して、ＩＯデータの更新処理を行う。ＣＰＵ１１は、バスコントローラ１４を介してＩＯメモリ１３にアクセスしたり、拡張ＣＰＵユニット２０にアクセスしたりできるようになっている。なお、このＣＰＵ１１で実行されるユーザプログラムは、従来と同様にラダー言語で作成されている。
【００２４】
一方、拡張ＣＰＵユニット２０は、高級言語（例えばＣ言語）で作成されたプログラムを実行可能なユニットであって、係るＣ言語のプログラムを保持するフラッシュメモリ２１と、プログラム稼働用のワークメモリ２２を備えている。この拡張ＣＰＵユニット２０の形態は、ＣＰＵユニット１０とは別体のユニットで、ＣＰＵユニット１０とＰＬＣバス（内部バス）を介して、他のユニット（通信ユニット，Ｉ／Ｏユニットなど）と同様にユニット接続されている。なお、拡張ＣＰＵユニット２０の別の形態として、ＣＰＵユニット１０内に挿入して内蔵できるような増設基板タイプであってもよい。また別の形態として、ＣＰＵユニット１０に対する増設ユニットタイプでもよい。増設基板タイプや増設ユニットタイプの場合の接続バスは、他のユニットがつながるＰＬＣバスとは別のバスで、ＣＰＵユニット１０自体の内部バスでもよい（この場合もバスも回線は別でもＰＬＣバスには経由接続できるようになっている）。要するに、ＣＰＵ１１とバスを介してつながれ、拡張ＣＰＵとしてＣＰＵ１１とは別途に独自に動作するもので、ＣＰＵユニット１０のＩＯメモリ１３に対してアクセスする機能を持っていれば形態はなんでもよい。
【００２５】
フラッシュメモリ２１は、不揮発性のフラッシュメモリから構成され、ワークメモリ２２は高速に実行させる必要から、揮発性のＲＡＭから構成される。そして、プログラムを実行するための初めの準備として、電源投入時または手動によるリセット操作時など起動するときに、フラッシュメモリ２１に格納されたプログラムを、ワークメモリ２２にコピーをする。そしてそのワークメモリ２２に記憶保持されたプログラムを読み出し、そのプログラムに基づいてＣＰＵ２３が所定のアルゴリズムを実行するようになる。
【００２６】
また、拡張ＣＰＵユニット２０は、専用バスを介してメインのＣＰＵユニット１０と連携されている。具体的には、バスコントローラ１４とアドレスデコーダ２５の間でデータの送受を行うことにより、ＣＰＵユニット１０がアドレスデコーダ２５経由で各種のメモリにアクセスしたり、ＣＰＵ２３に所定の命令を与えたりする。また、拡張ＣＰＵユニット２０からのイベント等も、アドレスデコーダ２５からバスコントローラ１４経由でＣＰＵユニット１０（ＣＰＵ１１）に伝えられる。イベントというのは、例えばメインＣＰＵユニット１０の処理中の周辺処理において、拡張ＣＰＵユニット２０に対して行われるメッセージ通信である。イベントメッセージ通信によって、拡張ＣＰＵユニット２０は、メインＣＰＵユニット１０との間で読み出し要求コマンドを受けてそのレスポンスを渡したり、書き込みコマンド（書き込みデータ）を受け取ってワークメモリ２２に格納したりする。
【００２７】
ところで、ワークメモリ２２に格納されるプログラムのコンテキスト（Ｃ言語のプログラムをコンパイルした後のコード配置）は、図２に示すようになっている。すなわち、プログラムコードエリアＰと、定数エリアＣと、データエリアＤとＢＢＳエリアＢと、スタックエリアＳｔａｃｋを備えている。プログラムコードエリアＰには、プログラムのロジックが格納される。また、定数エリアＣには、ｃｏｎｓｔ宣言されたデータが格納される。このデータはプログラムの実行に伴って変化しない定数である。データエリアＤには、ｃｏｎｓｔ宣言されていないデータ、つまり変数が格納される。この変数データは、プログラムの実行時にとりこむＩＮデータや、プログラム実行途中に生じるデータ、プログラムの実行結果によるＯＵＴデータを含んでいる。もちろんデータエリアＤに格納するデータには、メインＣＰＵユニット１０が入力機器から取り込んだＩＮデータや、メインＣＰＵユニット１０にてプログラム実行された結果のＯＵＴデータ、つまりはメインＣＰＵユニット１０のＩＯメモリ１３のデータを含んでいても良い。なお、データエリアＤの初期値はブートローダにより任意のデータ値に設定される。ＢＢＳエリアＢは、初期化されていない変数が格納される領域であり、起動時にはゼロクリアされる。このＢＢＳエリアＢの変数データは、拡張ＣＰＵユニット２０におけるプログラムの実行時にとりこむＩＮデータや、プログラム実行途中に生じるデータ、プログラムの実行結果によるＯＵＴデータを含んでいてもよい。もちろんメインＣＰＵユニット１０ＩＯメモリ１３のデータが含まれていても良い。
【００２８】
なお、変数データには、アプリケーションプログラムで利用されるいわゆるパラメータも含まれている。パラメータの例を挙げると、プログラム実行のループ数や、温度に関する制御における気温や湿度など、ＰＩＤ制御をする際のＰ，Ｉ，Ｄそれぞれのパラメータがある。
【００２９】
さらに、スタックエリアＳｔａｃｋには、スタックが格納されて、プログラム同士のリンクするときに使われる。具体的にはサブルーチン処理をするときのプログラム呼び出し先情報や、サブルーチン処理後の戻り情報などが格納される。そして、プログラムコードおよび変数は、プログラムのリンク時に図２に示す各エリアに配置される。
【００３０】
さらに具体的には、図３に示すように、プログラムコードエリアＰに格納されるプログラムは、データエリアＤに格納されたタスク管理ブロックＴＣＢを参照し、登録されているタスクを呼び出すタスクマネージャ部ＴＭと、特定の機能を実施するためのユーザアプリ部ＵＡとを備えている。ユーザアプリ部ＵＡには、複数のユーザアプリケーションプログラム（図の例では、ユーザアプリＡとＢ）が格納される。ユーザアプリ部ＵＡは、開始アドレスから所定領域ぶんのアドレスまでにわたって、連続的にプログラムコードエリアＰに格納されている。
【００３１】
タスク管理ブロックＴＣＢは、データエリアに格納され、実行するタスクを特定するとともに、その実行順も決定するものである。タスクマネージャ部ＴＭは、タスク管理ブロックＴＣＢに記録された順番に従って、順次タスクを実行する。
【００３２】
ここで、タスク管理ブロックＴＣＢは、図４に示すようなデータ構造を採っている。すなわち、先頭から順に、そのタスクを特定するためのユニークな番号となるタスクＩＤを格納する「Ｔａｓｋ＿ｉｄ」と、次に実行するタスクＩＤを格納してリンクを張るための「ｆｏｒｗａｒｄ」と、前に実行されたタスクＩＤを格納する「ｂａｃｋｗａｒｄ」と、このタスクが活性状態なのか非活性状態なのかを特定するタスクステータスフラグを格納する「ｓｔａｔｅ」と、タスクレベル（実行頻度）を格納する「ｌｅｖｅｌ」と、プログラムコードの先頭アドレスを格納する「ｐＰｒｏｇｒａｍ」と、変数エリアアドレス定義の先頭アドレスを格納する「ｐＤａｔａ」などを関連付けたテーブル構造となっている。
【００３３】
ここで、「ｐＰｒｏｇｒａｍ」に格納される先頭アドレスは、プログラムコードエリアＰのユーザアプリ部ＵＡに記録された所望のユーザアプリケーションプログラムの先頭アドレスである。つまり、タスクマネージャ部ＴＭは、このタスク管理ブロックＴＣＢにアクセスし、決められたタスクの順番に従って、順次ユーザアプリケーションを呼び出して実行することになる。図４のタスク管理ブロックＴＣＢのテーブルの例では、Ｔａｓｋ＿ｉｄ＝０（タスク０）をまず実行する。そして、Ｔａｓｋ＿ｉｄ＝０のテーブル行にあるｆｏｗａｒｄ数値は「１」なので、その次に実行されるタスクは、Ｔａｓｋ＿ｉｄ＝１（タスク１）である。Ｔａｓｋ＿ｉｄ＝１のテーブル行にはｆｏｗａｒｄ数値が「２」と設定されているので、タスク１の実行の次にはタスク２が実行される。
【００３４】
また、「ｐＤａｔａ」に格納される変数アドレスは、データエリアＤに格納された変数データマッピングブロックＶＭＢのアクセス先を登録する。この変数データマッピングブロックＶＭＢは、図４に示すように、変数名を格納する「ｄｎａｍｅ」と、その変数の実体を示すアドレス「ｐＡｄｄｒ」を関連付けたテーブルからなる。このアドレスは、変数名に対応する具体的なデータが格納されたＢＳＳエリアＢ中の所望のアドレスが格納される。
【００３５】
つまり、タスク管理ブロックＴＣＢ中の各タスクの「ｐＤａｔａ」には、この変数データマッピングブロックＶＭＢの参照先アドレスが登録され、タスク実行時に実際に使用・参照するデータは、変数データマッピングブロックＶＭＢの「ｐＡｄｄｒ」に格納されたアドレスで規定されるＢＢＳエリア内のデータとなる。
【００３６】
そして、本実施の形態では、タスク管理ブロックＴＣＢ並びに変数データマッピングブロックＶＭＢを、外部からアクセス可能なデータエリアＤの固定アドレスに配置することによって、外部のプログラミングツールからのテーブル操作が容易に行える。その結果、ツール等を用いてＣＰＵユニット経由でデータエリアのタスク管理ブロックＴＣＢと変数データマッピングブロックＶＭＢを編集するだけで、動作するプログラムや参照するメモリを変更することができる。より具体的には、タスク管理ブロックＴＣＢ中の「ｐＰｒｏｇｒａｍ」，「ｐＤａｔａ」や、変数データマッピングブロックＶＭＢの「ｐＡｄｄｒ」のアドレスを変更することになる。
【００３７】
例えば、図４のタスク管理ブロックＴＣＢのテーブル中のあるタスク（Ｔａｓｋ＿ｉｄ＝２）の「ｐＰｒｏｇｒａｍ」にユーザアプリＡの先頭アドレスの数値が設定されているとした場合は、図３の実線で示されるように、タスク管理ブロックＴＣＢで記述された同じタスク（Ｔａｓｋ＿ｉｄ＝２）はユーザアプリＡに対応している。そこで、図４のタスク管理ブロックＴＣＢのテーブル中の同じタスク（Ｔａｓｋ＿ｉｄ＝２）の「ｐＰｒｏｇｒａｍ」の先頭アドレスをユーザアプリＢの先頭アドレスに書き換えたとする。そうすると、以降でその同じタスクを実行する際には、図３の点線に示されるようにユーザアプリＢを実行するようになる。
【００３８】
また、例えば、図４のタスク管理ブロックＴＣＢのテーブル中のあるタスク（Ｔａｓｋ＿ｉｄ＝２）の「ｐＤａｔａ」に、変数ａ，ｂを参照する変数データマッピングブロックＶＭＢのアドレスの数値を格納しているとした場合は、図３中の実線で示すように、タスク管理ブロックＴＣＢで記述された同じタスク（Ｔａｓｋ＿ｉｄ＝２）は変数ａ，ｂを参照するようになっている。そこで、図４のタスク管理ブロックＴＣＢのテーブル中の同じタスク（Ｔａｓｋ＿ｉｄ＝２）の「ｐＤａｔａ」を変数ｃ，ｄを参照するようにアドレスを書き換えることにより、以降のそのタスクを実行する際に使用される変数は、図３の点線に示されるようにｃ，ｄと変わる。つまり、参照する変数データのアドレスがＢＢＳエリアのアドレスａ，ｂからｃ、ｄに切り変わる。
【００３９】
さらに、参照する変数の変更は、上記したようにタスク管理ブロックＴＣＢの「ｐＤａｔａ」を変更する方法に限ることはなく、変数データマッピングブロックＶＭＢの「ｐＡｄｄｅｒ」を書き換える（現在の変数ａ，ｂを変数ｃ，ｄのアドレスに変更）ことによっても対応することができる。
【００４０】
なお、変数データには、前述したようにアプリケーションプログラムで利用されるいわゆるパラメータが含まれている。例えばプログラム実行のループ数をパラメータだとすると、ループ数を変えることでループ回数が変わるので、プログラム自体を変えなくても制御内容を変えることができる。他に例えば、温度に関する制御であれば、気温や湿度がパラメータとなり、具体的な例では晴れの日と雨の日とでパラメータを変えたり、季節やその日の温度・湿度でパラメータを変えることが実際に行われている。このパラメータ変更だけをすることで、プログラム変更せずに、最適な温度制御ができることもある。他にもＰＩＤ制御をする際のパラメータＰ，Ｉ，Ｄそれぞれを変えることで、プログラムのロジックは変更せずに、制御内容もしくは動作内容が変わる。
【００４１】
また、タスク管理ブロックＴＣＢと変数データマッピングブロックＶＭＢとは、それぞれ独立して、別々にその参照先アドレスを書き換えることができる。
【００４２】
従って、本実施の形態では、プログラムを稼動中に、変数データマッピングブロックＶＭＢの参照先アドレスはそのまま変更せずに、タスク管理ブロックＴＣＢの参照先アドレスを書き換えることで、ＰＬＣを停止・再起動することなくアプリケーションプログラムを入れ替えることにより、システム全体として制御内容を大きく変更することができる。
【００４３】
また、プログラムを稼動中に、タスク管理ブロックＴＣＢは変更せずに、変数データマッピングブロックＶＭＢの参照先アドレスを書き換えることで、ＰＬＣを停止・再起動することなく、プログラム実行に使用するパラメータ変数を変更できる。よって、アプリケーションプログラムのロジックはそのまま変更しないけれども、システム全体としての異なる制御動作をすることができる。これはパラメータが変われば自ずと制御動作も変わるからである。
【００４４】
もちろん、プログラムを稼動中に、タスク管理ブロックＴＣＢ及び変数データマッピングブロックＶＭＢの両方の参照先アドレスを書き換えることで、ＰＬＣを停止・再起動することなく、プログラム及びパラメータ変数の両方を入れ替えることができ、システム全体としての動作を大きく変更することができる。
【００４５】
また、上記した実施の形態では、データエリアＤに変数データマッピングブロックＶＭＢを設け、変数へのアクセスはこの変数データマッピングブロックＶＢＭを介して行うようにしたが、本発明はこれに限ることはなく、タスク管理ブロックＴＣＢが直接ＢＢＳエリアの変数のアドレスを管理し、そのアドレスを変更することにより、再コンパイルすることなしに参照する変数を切り替えるようにすることもできる。
【００４６】
【発明の効果】
以上のように、この発明では、Ｃ言語で記述されたプログラムソースを修正しなくても、タスク管理テーブル及びまたは変数データマッピングブロックを変更するだけで、実行するプログラムシステムの動作条件やシステムそのものを組替えることができる。
【図面の簡単な説明】
【図１】本発明に係るＰＬＣの一実施の形態を示すブロック図である。
【図２】ワークメモリ２２に格納（コピー・展開）されるプログラムのコンテキストの一例を示す図である。
【図３】本発明の機能を説明する図である。
【図４】タスク管理ブロックの一例を示す図である。
【図５】変数データマッピングブロックＶＭＢを示す図である。
【符号の説明】
１  ＰＬＣ
１０  ＣＰＵユニット
１１  ＣＰＵ
１２  プログラムメモリ
１３  ＩＯメモリ
１４  バスコントローラ
２０  拡張ＣＰＵユニット
２１  フラッシュメモリ
２２  ワークメモリ
２３  ＣＰＵ
２５  アドレスデコーダ
【図１】
2004280306.tif 000003
【図２】
2004280306.tif 000004
【図３】
2004280306.tif 000005
【図４】
2004280306.tif 000006
【図５】
2004280306.tif 000007