(57)【特許請求の範囲】
【請求項１】
制御対象機器を制御する制御装置であって、
プログラムを含むタスクを実行するタスク実行手段と、
プログラムにおいて参照および更新することが可能なグローバル変数と、前記グローバル変数に対応する参照用データとを記憶する記憶手段と、
前記タスク実行手段によりプログラムを含むタスクが実行されているときに、前記グローバル変数を収集する収集手段と、
前記記憶手段に記憶される参照用データを管理する参照用データ管理手段とを備え、
前記タスク実行手段は、複数の前記タスクを並行に実行し、かつ、前記複数のタスクの各タスクを前記各タスクに応じた周期で実行するように構成され、
前記複数のタスクは、前記グローバル変数を更新および参照することが可能な更新タスクと、前記参照用データを参照することが可能な参照タスクとを含み、
前記参照用データ管理手段は、前記参照タスクが実行される前に、前記参照用データの値を前記グローバル変数の値に変更するように構成され、
前記収集手段は、前記タスク実行手段により前記複数のタスクが実行されているときに、前記参照用データを収集するように構成されていること
を特徴とする制御装置。
【請求項２】
請求項１に記載の制御装置であって、
前記収集手段は、前記タスク実行手段により前記複数のタスクが実行されているときに、前記更新タスクにより更新および参照されるグローバル変数を収集するように構成されていること
を特徴とする制御装置。
【請求項３】
請求項１または請求項２に記載の制御装置であって、
前記複数のタスクは、１個の前記更新タスクと、複数の前記参照タスクとを含み、
前記記憶手段には、前記グローバル変数に対応する参照用データが前記複数の参照タスク毎に記憶され、
前記収集手段は、前記タスク実行手段により前記複数のタスクが実行されているときに、複数の前記参照用データを収集するように構成されていること
を特徴とする制御装置。
【請求項４】
請求項１から請求項３までのいずれか一つに記載の制御装置であって、
前記収集手段による収集対象を設定する設定手段を備え、
前記収集手段は、前記タスク実行手段により前記複数のタスクが実行されているときに、前記設定手段により設定された収集対象の値を収集するように構成されていること
を特徴とする制御装置。
【請求項５】
請求項１から請求項４までのいずれか一つに記載の制御装置であって、
前記収集手段による収集対象と、前記収集対象の値を収集する収集周期とをツール装置から受信するための通信手段を備え、
前記収集手段は、前記タスク実行手段により前記複数のタスクが実行されているときに、前記通信手段により受信した収集対象の値を、前記通信手段により受信した収集周期で収集するように構成されていること
を特徴とする制御装置。
【請求項６】
請求項５に記載の制御装置であって、
前記通信手段は、前記収集手段により収集された収集結果を前記ツール装置に送信する機能を有すること
を特徴とする制御装置。
【請求項７】
請求項１から請求項６までのいずれか一つに記載の制御装置であって、
前記記憶手段は、前記収集手段により収集された収集結果を記憶すること
を特徴とする制御装置。
【請求項８】
制御対象機器を制御する制御装置を、
プログラムを含むタスクを実行するタスク実行手段と、
プログラムにおいて参照および更新することが可能なグローバル変数と、前記グローバル変数に対応する参照用データとを記憶する記憶手段と、
前記タスク実行手段によりプログラムを含むタスクが実行されているときに、前記グローバル変数を収集する収集手段と、
前記記憶手段に記憶される参照用データを管理する参照用データ管理手段として機能させるシステムプログラムであって、
前記タスク実行手段は、前記グローバル変数を更新および参照することが可能な更新タスクと、前記参照用データを参照することが可能な参照タスクとを含む複数のタスクを並行に実行し、かつ、前記複数のタスクの各タスクを前記各タスクに応じた周期で実行し、
前記参照用データ管理手段は、前記参照タスクが実行される前に、前記参照用データの値を前記グローバル変数の値に変更し、
前記収集手段は、前記タスク実行手段により前記複数のタスクが実行されているときに、前記参照用データを収集すること
を特徴とするシステムプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、制御対象機器を制御する制御装置およびその制御装置で実行されるシステムプログラムに関する。
【背景技術】
【０００２】
従来、工場の生産ラインに設置される産業用機械などを制御するＰＬＣ（Programmable Logic Controller：プログラマブルロジックコントローラ）が知られている。
【０００３】
ＰＬＣは、ＰＬＣを制御するＣＰＵユニットと、センサからの信号が入力される入力ユニットと、産業用機械などに制御信号を出力する出力ユニットとを備えている。ＣＰＵユニットは、産業用機械などを制御するためのユーザプログラムを記憶するメモリを有する。このユーザプログラムは、ＣＰＵユニットに接続されるツール装置により編集可能に構成されている。
【０００４】
そして、ＰＬＣでは、入力ユニットに入力された信号をＣＰＵユニットのメモリに取り込む処理と、ユーザプログラムを実行する処理と、ユーザプログラムの実行結果（演算結果）をメモリに書き込んで出力ユニットに送り出す処理と、ツール装置との間でデータの送受信を行うなどの周辺処理とが繰り返し行われる。これにより、ＰＬＣは、センサからの入力に基づいて産業用機械などを制御する。
【０００５】
また、従来では、パーソナルコンピュータの高度なソフトウェア機能と、ＰＬＣの信頼性とを備えるＰＡＣ（Programmable Automation Controller：プログラマブルオートメーションコントローラ）も知られている（たとえば、特許文献１参照）。
【０００６】
上記特許文献１のＰＡＣは、時分割により複数のタスクを並行して実行し、かつ、複数のタスクの各タスクを各タスクに応じた周期で実行するように構成されている。すなわち、このＰＡＣでは、マルチタスクで処理が行われる。なお、タスクには、各タスクに応じたユーザプログラムの実行などが含まれている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００９−１８１４４３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、特許文献１に開示された従来のＰＡＣにおいて、プログラム全体に対して定義されるグローバル変数（広域変数）に対して複数のタスクがアクセスする場合には、たとえば、所定のタスクの実行が開始されてから終了されるまでの間に、所定のタスク以外のタスクが実行されることによりグローバル変数の値が更新された場合に、所定のタスクがグローバル変数を用いた一貫性のある演算を行うことができなくなるという問題点がある。
【０００９】
本発明は、上記の課題を解決するためになされたものであり、本発明の目的は、グローバル変数に対して複数のタスクがアクセスする場合にも、一貫性のある演算を行うことが可能な制御装置およびその制御装置で実行されるシステムプログラムを提供することである。
【課題を解決するための手段】
【００１０】
本発明による制御装置は、制御対象機器を制御する制御装置であって、プログラムを含むタスクを実行するタスク実行手段と、プログラムにおいて参照および更新することが可能なグローバル変数と、前記グローバル変数に対応する参照用データとを記憶する記憶手段と、前記タスク実行手段によりプログラムを含むタスクが実行されているときに、前記グローバル変数を収集する収集手段と、前記記憶手段に記憶される参照用データを管理する参照用データ管理手段とを備え、前記タスク実行手段は、複数の前記タスクを並行に実行し、かつ、前記複数のタスクの各タスクを前記各タスクに応じた周期で実行するように構成され、前記複数のタスクは、前記グローバル変数を更新および参照することが可能な更新タスクと、前記参照用データを参照することが可能な参照タスクとを含み、前記参照用データ管理手段は、前記参照タスクが実行される前に、前記参照用データの値を前記グローバル変数の値に変更するように構成され、前記収集手段は、前記タスク実行手段により前記複数のタスクが実行されているときに、前記参照用データを収集するように構成されている。
【００１１】
なお、複数のタスクを並行に実行するとは、複数のタスクを同時に並行して実行する場合と、時分割により複数のタスクを並行して実行する場合とを含む。また、グローバル変数に対応する参照用データとは、グローバル変数の参照用のバッファである。
【００１２】
このように構成することによって、更新タスクのみがグローバル変数に対して更新および参照するとともに、参照タスクがグローバル変数に対応する参照用データを参照することにより、参照タスクの実行中（参照タスクのプログラムが開始されてから完了されるまでの間）に、更新タスクによりグローバル変数の値が更新された場合にも、参照タスクが参照用データを参照するので、参照タスクにおいて一貫性のある演算を行うことができる。すなわち、参照タスクの実行中に、参照タスクにより参照される参照用データが更新タスクにより更新されることがないので、参照タスクにおいて一貫性のある演算を行うことができる。また、更新タスクでは、更新タスクのみがグローバル変数に対して更新および参照することにより、更新タスクにおいて一貫性のある演算を行うことができる。したがって、グローバル変数に対して複数のタスクがアクセスする場合にも、参照タスクに参照用データを参照させることにより、一貫性のある演算を行うことができる。さらに、収集手段により、タスクが実行されているときに、参照用データを収集することによって、参照タスクにより参照される参照用データについてデータトレースすることができる。これにより、グローバル変数に対して複数のタスクがアクセスする場合において、一貫性のある演算を行うために、参照タスクに参照用データを参照させる場合にも、参照タスクの参照先である参照用データを適切にデータトレースすることができる。
【００１３】
上記制御装置において、前記収集手段は、前記タスク実行手段により前記複数のタスクが実行されているときに、前記更新タスクにより更新および参照されるグローバル変数を収集するように構成されていてもよい。
【００１４】
このように構成すれば、収集手段により、タスクが実行されているときに、グローバル変数を収集することによって、更新タスクにより更新および参照されるグローバル変数についてデータトレースすることができる。
【００１５】
上記制御装置において、前記複数のタスクは、１個の前記更新タスクと、複数の前記参照タスクとを含み、前記記憶手段には、前記グローバル変数に対応する参照用データが前記複数の参照タスク毎に記憶され、前記収集手段は、前記タスク実行手段により前記複数のタスクが実行されているときに、複数の前記参照用データを収集するように構成されていてもよい。
【００１６】
このように構成すれば、参照タスクが複数ある場合にも、各参照タスクにおいて一貫性のある演算を行うことができる。さらに、参照タスクが複数ある場合にも、各参照タスクの参照先である参照用データを適切にデータトレースすることができる。
【００１９】
上記制御装置において、前記収集手段による収集対象を設定する設定手段を備え、前記収集手段は、前記タスク実行手段により前記複数のタスクが実行されているときに、前記設定手段により設定された収集対象の値を収集するように構成されていてもよい。
【００２０】
このように構成すれば、設定手段により、データトレースの対象を容易に設定することができる。
【００２１】
上記制御装置において、前記収集手段による収集対象と、前記収集対象の値を収集する収集周期とをツール装置から受信するための通信手段を備え、前記収集手段は、前記タスク実行手段により前記複数のタスクが実行されているときに、前記通信手段により受信した収集対象の値を、前記通信手段により受信した収集周期で収集するように構成されていてもよい。
【００２２】
このように構成すれば、利用者がツール装置を用いてデータトレースの収集対象および収集周期を設定することができる。
【００２３】
この場合において、前記通信手段は、前記収集手段により収集された収集結果を前記ツール装置に送信する機能を有していてもよい。
【００２４】
このように構成すれば、ツール装置が収集結果を得ることができるので、利用者がツール装置を用いて収集結果を確認することができる。
【００２５】
上記制御装置において、前記記憶手段は、前記収集手段により収集された収集結果を記憶するようにしてもよい。
【００２６】
このように構成すれば、収集結果を記憶手段に蓄積することができる。
【００２７】
本発明によるシステムプログラムは、制御対象機器を制御する制御装置を、プログラムを含むタスクを実行するタスク実行手段と、プログラムにおいて参照および更新することが可能なグローバル変数と、前記グローバル変数に対応する参照用データとを記憶する記憶手段と、前記タスク実行手段によりプログラムを含むタスクが実行されているときに、前記グローバル変数を収集する収集手段と、前記記憶手段に記憶される参照用データを管理する参照用データ管理手段として機能させるシステムプログラムであって、前記タスク実行手段は、前記グローバル変数を更新および参照することが可能な更新タスクと、前記参照用データを参照することが可能な参照タスクとを含む複数のタスクを並行に実行し、かつ、前記複数のタスクの各タスクを前記各タスクに応じた周期で実行し、前記参照用データ管理手段は、前記参照タスクが実行される前に、前記参照用データの値を前記グローバル変数の値に変更し、前記収集手段は、前記タスク実行手段により前記複数のタスクが実行されているときに、前記参照用データを収集する。
【００２８】
このように構成することによって、制御装置に、参照タスクに参照用データを参照させることにより、一貫性のある演算を行わせながら、参照タスクの参照先である参照用データを適切にデータトレースさせることができる。
【発明の効果】
【００２９】
本発明によれば、グローバル変数に対して複数のタスクがアクセスする場合にも、一貫性のある演算を行うことが可能な制御装置およびその制御装置で実行されるシステムプログラムを提供することができる。                                                                            
【図面の簡単な説明】
【００３０】
【図１】本発明の一実施形態によるＣＰＵユニットを備えるＰＡＣの構成を示したハードウェアブロック図である。
【図２】図１に示したＰＡＣのＣＰＵユニットの構成を示したハードウェアブロック図である。
【図３】図２に示したＣＰＵユニットのＲＯＭに記憶されるタスクに関する情報を説明するための図である。
【図４】図２に示したＣＰＵユニットのＲＯＭに記憶されるグローバル変数に対する設定情報を説明するための図である。
【図５】図２に示したＣＰＵユニットのＣＰＵの機能ブロック図である。
【図６】図２に示したＣＰＵユニットのグローバル変数に対するタスク間の排他制御を説明するための図である。
【図７】図２に示したＣＰＵユニットにツール装置から送信されるデータトレース情報を説明するための図である。
【図８】図２に示したツール装置においてトレース結果がグラフ表示された状態を示した図である。
【図９】本発明の一実施形態によるＣＰＵユニットのデータトレース時の動作を説明するためのタイムチャートである。
【図１０】図２に示したＣＰＵユニットのＲＡＭに記憶されるトレース結果を説明するための図である。
【発明を実施するための形態】
【００３１】
以下、本発明の実施形態について図面を参照して説明する。
【００３２】
まず、図１〜図８を参照して、本発明の一実施形態によるＣＰＵユニット１を備えるＰＡＣ１００の構成について説明する。
【００３３】
ＰＡＣ１００は、図１に示すように、ＰＡＣ１００を制御するＣＰＵユニット１と、センサ５０からの信号が入力される入力ユニット２と、産業用機械などの制御対象機器６０に制御信号を出力する出力ユニット３と、各ユニットに電力を供給する電源ユニット４と、各ユニットを接続する内部バス５とを備えている。なお、ＣＰＵユニット１は、本発明の「制御装置」の一例である。
【００３４】
ＰＡＣ１００は、タスクを実行することにより、センサ５０からの入力に基づいて制御対象機器６０を制御するように構成されている。ここで、タスクには、制御対象機器６０を制御するためのユーザプログラムの実行が含まれている。
【００３５】
ＣＰＵユニット１では、ユーザプログラムを含むシステムプログラム１２１（図２参照）がインストールされており、そのシステムプログラム１２１が実行されることによりＣＰＵユニット１の動作が制御されるように構成されている。
【００３６】
なお、システムプログラム１２１には、入力ユニット２に入力された信号をＣＰＵユニット１に取り込む処理を実行するためのプログラムや、ＣＰＵユニット１による演算結果を出力ユニット３に送り出す処理を実行するためのプログラムなどが含まれている。また、システムプログラム１２１には、プログラム全体に対して定義されるグローバル変数（広域変数）が含まれている。グローバル変数は、複数のタスク（プログラム）からアクセス可能な変数である。
【００３７】
ＣＰＵユニット１は、図２に示すように、ＣＰＵ１１と、ＲＯＭ１２と、ＲＡＭ１３と、通信インターフェース（以下、「通信ＩＦ」という）１４および１５とを含んでいる。なお、ＲＡＭ１３は、本発明の「記憶手段」の一例であり、通信ＩＦ１５は、本発明の「通信手段」の一例である。
【００３８】
ＣＰＵ１１は、システムプログラム１２１を実行する機能を有する。ＣＰＵ１１は、時分割により複数のタスクを並行して実行するように構成されている。すなわち、ＣＰＵ１１では、マルチタスクで処理が実行される。
【００３９】
ＲＯＭ１２は、不揮発性のメモリであり、たとえば、フラッシュメモリである。ＲＯＭ１２には、システムプログラム１２１が記憶されるとともに、ＣＰＵユニット１において実行されるタスクに関する情報Ｌ１（図３参照）が記憶されている。タスクに関する情報Ｌ１には、各タスクの名称と、各タスクの優先度と、各タスクが実行される周期と、各タスクで実行されるプログラムとが含まれている。なお、タスクは、優先度の値が小さいタスクが優先的に実行される。また、ＣＰＵユニット１では、予め設定された時間間隔（たとえば、１ｍｓ）の制御サイクルを処理全体の共通サイクルとして採用している。また、プログラムは、たとえば、ユーザプログラムであり、ラダー言語で記述されている。
【００４０】
図３の例では、タスクＡは、タスクＢおよびＣよりも優先的に実行されるとともに、１ｍｓの周期でプログラムＰ１およびＰ２を実行する。すなわち、タスクＡは、１回分の制御サイクル（１ｍｓの時間間隔）を実行サイクルとしている。また、タスクＢは、タスクＣよりも優先的に実行されるとともに、２ｍｓの周期でプログラムＰ３およびＰ４を実行する。すなわち、タスクＢは、２回分の制御サイクル（２ｍｓの時間間隔）を実行サイクルとしている。また、タスクＢの周期は、タスクＡの周期の整数倍（２倍）に設定されている。また、タスクＣは、タスクＡおよびＢよりも劣後して実行されるとともに、４ｍｓの周期でプログラムＰ５を実行する。すなわち、タスクＣは、４回分の制御サイクル（４ｍｓの時間間隔）を実行サイクルとしている。また、タスクＣの周期は、タスクＡの周期の整数倍（４倍）に設定されている。
【００４１】
また、ＲＯＭ１２には、システムプログラム１２１で定義されたグローバル変数に対する設定情報Ｌ２（図４参照）が記憶されている。設定情報Ｌ２には、グローバル変数の名称と、更新タスクの名称と、参照タスクの名称とが含まれている。ここで、更新タスクとは、グローバル変数を更新および参照することが可能なタスクであり、参照タスクとは、グローバル変数を参照することが可能であるが、更新することが不可能なタスクである。更新タスクは、１個のグローバル変数に対して１個だけ設定可能であり、参照タスクは、１個のグローバル変数に対して１個以上設定可能である。なお、参照タスクは、実際には、後述するようにグローバル変数に対応する参照用データを参照する。
【００４２】
図４の例では、グローバル変数ＧＶ１の更新タスクとしてタスクＡが設定され、グローバル変数ＧＶ１の参照タスクとしてタスクＢおよびＣが設定されている。すなわち、タスクＡでは、グローバル変数ＧＶ１に対して更新および参照することが可能である。その一方、タスクＢおよびＣでは、グローバル変数ＧＶ１に対して参照のみが可能であり、グローバル変数ＧＶ１に対して更新することができない。
【００４３】
ＲＡＭ１３は、揮発性のメモリであり、たとえば、ＤＲＡＭである。ＲＡＭ１３は、ＣＰＵ１１により実行されるシステムプログラム１２１などを一時的に記憶する機能を有する。具体的には、ＲＡＭ１３は、システムプログラム１２１が実行される際に、更新タスクであるタスクＡにより更新および参照されるグローバル変数ＧＶ１（図６参照）と、参照タスクであるタスクＢおよびＣにより参照される参照用データＲＤ１およびＲＤ２（図６参照）とを記憶する機能を有する。ここで、参照用データＲＤ１およびＲＤ２は、グローバル変数ＧＶ１の参照用のバッファであり、参照タスクであるタスクＢおよびＣにそれぞれ対応するように設けられる。
【００４４】
通信ＩＦ１４は、内部バス５に接続されており、ＣＰＵユニット１が内部バス５を介して各ユニットと通信するために設けられている。通信ＩＦ１５は、ツール装置７０に接続されており、ＣＰＵユニット１がツール装置７０と通信するために設けられている。
【００４５】
また、ＣＰＵユニット１は、図５に示すように、タスク実行部２１と、参照用データ管理部２２と、収集部２３と、設定部２４とを含んでいる。なお、タスク実行部２１、参照用データ管理部２２、収集部２３および設定部２４は、ＣＰＵ１１がシステムプログラム１２１を実行することにより実現される。また、タスク実行部２１は、本発明の「タスク実行手段」の一例であり、参照用データ管理部２２は、本発明の「参照用データ管理手段」の一例である。また、収集部２３は、本発明の「収集手段」の一例であり、設定部２４は、本発明の「設定手段」の一例である。
【００４６】
タスク実行部２１は、複数のタスクを並行に実行し、かつ、複数のタスクの各タスクを各タスクに応じた周期で実行するように構成されている。具体的には、タスク実行部２１は、時分割によりタスクＡ、ＢおよびＣを並行に実行する。また、タスク実行部２１は、タスクＡを１ｍｓの周期で実行し、タスクＢを２ｍｓの周期で実行し、タスクＣを４ｍｓの周期で実行する。
【００４７】
参照用データ管理部２２は、システムプログラム１２１が実行されるときに、ＲＡＭ１３に記憶される参照用データを管理する機能を有する。具体的には、参照用データ管理部２２は、参照タスクが実行される前（参照タスクのプログラムの実行が開始される前）に、参照用データの値をグローバル変数の値に変更するように構成されている。すなわち、参照用データ管理部２２は、参照タスクであるタスクＢが実行される前に、参照用データＲＤ１の値をグローバル変数ＧＶ１の値に変更し、参照タスクであるタスクＣが実行される前に、参照用データＲＤ２をグローバル変数ＧＶ１の値に変更するように構成されている。
【００４８】
収集部２３は、タスク実行部２１によりタスクが実行されているときに、グローバル変数の値を収集する機能を有する。また、収集部２３は、タスク実行部２１によりタスクが実行されているときに、参照用データの値を収集する機能を有する。具体的には、収集部２３は、グローバル変数ＧＶ１、参照用データＲＤ１およびＲＤ２の値を収集する機能を有する。これにより、ＣＰＵユニット１では、システムプログラム１２１が実行されているときの変数（グローバル変数ＧＶ１や参照用データＲＤ１およびＲＤ２など）の経時変化を収集することが可能である。すなわち、ＣＰＵユニット１では、システムプログラム１２１が実行されているときに、変数をデータトレースすることが可能である。
【００４９】
設定部２４は、収集部２３による収集対象を設定する機能を有する。すなわち、設定部２４は、データトレースされる変数を設定する機能を有する。具体的には、設定部２４は、後述するデータトレース情報Ｔ（図７参照）に基づいて、データトレースされる変数を設定するように構成されている。
【００５０】
また、ＣＰＵユニット１は、グローバル変数に対するタスク間の排他制御を行うように構成されている。たとえば、ＣＰＵユニット１では、図６に示すように、グローバル変数ＧＶ１に対して、更新タスクであるタスクＡと、参照タスクであるタスクＢおよびＣとがアクセスする。
【００５１】
具体的には、タスクＡのプログラムＰ１に外部変数（グローバル変数）ＧＶ１が登録されている。このプログラムＰ１の外部変数Ｐ１．ＧＶ１は、タスクＡが更新タスクであることから、ＲＡＭ１３のグローバル変数ＧＶ１の本体に直接アクセスする。
【００５２】
また、タスクＢのプログラムＰ４に外部変数ＧＶ１が登録されている。このプログラムＰ４の外部変数Ｐ４．ＧＶ１は、タスクＢが参照タスクであることから、ＲＡＭ１３のタスクＢ用の参照用データＲＤ１にアクセスする。このタスクＢ用の参照用データＲＤ１の値は、タスク実行部２１（図５参照）によりタスクＢが実行されるときに、参照用データ管理部２２（図５参照）によりグローバル変数ＧＶ１の値に変更（更新）される。
【００５３】
また、タスクＣのプログラムＰ５に外部変数ＧＶ１が登録されている。このプログラムＰ５の外部変数Ｐ５．ＧＶ１は、タスクＣが参照タスクであることから、ＲＡＭ１３のタスクＣ用の参照用データＲＤ２にアクセスする。このタスクＣ用の参照用データＲＤ２の値は、タスク実行部２１によりタスクＣが実行されるときに、参照用データ管理部２２によりグローバル変数ＧＶ１の値に変更（更新）される。
【００５４】
ツール装置７０は、たとえば、パーソナルコンピュータであり、ＰＡＣ１００において実行されるユーザプログラムの作成・編集機能を有する。また、ツール装置７０は、ユーザプログラムをＰＡＣ１００からダウンロードする機能を有するとともに、ユーザプログラムをＰＡＣ１００にアップロードする機能を有する。
【００５５】
また、ツール装置７０は、ＲＯＭ１２に記憶されたグローバル変数に対する設定情報Ｌ２（図４参照）を変更する機能を有する。これにより、利用者は、ツール装置７０を用いて、グローバル変数に対する更新タスクおよび参照タスクを設定することが可能である。
【００５６】
また、ツール装置７０は、ＣＰＵユニット１に対してデータトレースの実行を指示する機能を有する。具体的には、ツール装置７０は、データトレースの対象となる変数名と、データトレースのサンプリング周期（収集周期）とを含むデータトレース情報Ｔ（図７参照）をＣＰＵユニット１に送信するように構成されている。
【００５７】
また、ツール装置７０は、利用者がデータトレースの結果を確認するために、図８に示すように、ＣＰＵユニット１によるトレース結果のグラフを表示部（図示省略）に表示する機能を有する。
【００５８】
次に、図９および図１０を参照して、本実施形態によるＣＰＵユニット１のデータトレース時の動作について説明する。なお、以下の動作は、ＣＰＵユニット１（図２参照）のＣＰＵ１１によりシステムプログラム１２１が実行されることにより行われる。すなわち、システムプログラム１２１は、ＣＰＵユニット１に以下の動作を実行させるためのシステムプログラムである。また、データトレースは、プログラムをデバッグする際に、プログラムの動作を確認するために行われる。すなわち、データトレースは、プログラムの欠陥を検出するために行われる。
【００５９】
なお、以下では、データトレースが開始される前において、グローバル変数ＧＶ１が「０」に設定されるとともに、参照用データＲＤ１およびＲＤ２が「０」に設定されている場合を例に説明する。
【００６０】
まず、ツール装置７０（図２参照）からデータトレース情報Ｔ（図７参照）がＣＰＵユニット１に送信される。なお、このデータトレース情報Ｔには、データトレースによるデータ（値）の収集対象（変数名）と、収集対象のデータを収集する収集周期（サンプリング周期）とが含まれている。図７の例では、収集対象として、プログラムＰ１の外部変数Ｐ１．ＧＶ１と、プログラムＰ４の外部変数Ｐ４．ＧＶ１と、プログラムＰ５の外部変数Ｐ５．ＧＶ１とが指定され、収集周期として１ｍｓが指定されている。
【００６１】
ＣＰＵユニット１では、通信ＩＦ１５（図２参照）により、ツール装置７０からデータトレース情報Ｔを受信した場合に、データトレースが開始される。このとき、設定部２４（図５参照）により、通信ＩＦ１５が受信したデータトレース情報Ｔに基づいて、収集部２３（図５参照）によるデータの収集対象が設定される。具体的には、プログラムＰ１の外部変数Ｐ１．ＧＶ１と、プログラムＰ４の外部変数Ｐ４．ＧＶ１と、プログラムＰ５の外部変数Ｐ５．ＧＶ１とが収集対象として設定される。
【００６２】
そして、ＣＰＵ１１により、制御サイクルと同時にタスクＡ、ＢおよびＣの実行サイクルが開始される。なお、タスクＡは１ｍｓの周期で実行され、タスクＢは２ｍｓの周期で実行され、タスクＣは４ｍｓの周期で実行される。
【００６３】
具体的には、まず、タスク実行部２１（図５参照）により、最も優先度の高いタスクＡの処理が開始される。このとき、タスクＢおよびＣは、タスクＡよりも優先度が低いことから、実際の処理が開始されることなく待機状態になる。
【００６４】
そして、更新タスクであるタスクＡのプログラムＰ１が実行され、そのプログラムＰ１において外部変数（グローバル変数）ＧＶ１に対して「１」が書き込まれる。これにより、ＲＡＭ１３に記憶されるグローバル変数ＧＶ１の値が「０」から「１」に更新される。このとき、タスクＡは、更新タスクであることから、ＲＡＭ１３のグローバル変数ＧＶ１の本体に直接アクセスする。その後、タスクＡのプログラムＰ２が実行され、タスクＡの処理が完了する。
【００６５】
そして、タスクＣよりも優先度の高いタスクＢが実行される前に、参照用データ管理部２２により、タスクＢに用いられる参照用データＲＤ１の値がグローバル変数ＧＶ１の値に変更される。このとき、グローバル変数ＧＶ１の値が「１」であることから、参照用データＲＤ１の値が「０」から「１」に更新される。
【００６６】
その後、タスク実行部２１により、参照タスクであるタスクＢのプログラムＰ３およびＰ４が実行される。なお、プログラムＰ４において外部変数ＧＶ１の読み出しが行われる。このとき、タスクＢは、参照タスクであることから、ＲＡＭ１３の参照用データＲＤ１にアクセスする。これにより、参照用データＲＤ１の「１」が読み出される。
【００６７】
次に、タスクＡ、ＢおよびＣの実行サイクルが同時に開始されてから１ｍｓ経過すると、タスクＢのプログラムＰ４が中断される。そして、収集部２３（図５参照）により、設定部２４により設定されたプログラムＰ１の外部変数Ｐ１．ＧＶ１、プログラムＰ４の外部変数Ｐ４．ＧＶ１、および、プログラムＰ５の外部変数Ｐ５．ＧＶ１の値が収集される。このとき、グローバル変数ＧＶ１が「１」であり、参照用データＲＤ１が「１」であり、参照用データＲＤ２が「０」であることから、外部変数Ｐ１．ＧＶ１が「１」であり、外部変数Ｐ４．ＧＶ１が「１」であり、外部変数Ｐ５．ＧＶ１が「０」である。そして、ＣＰＵ１１により、収集部２３による収集結果が、データトレースが開始されてからの経過時間（１ｍｓ）と関連付けられてＲＡＭ１３に格納されることにより、ＲＡＭ１３にトレース結果Ｌ３（図１０参照）が蓄積される。
【００６８】
そして、タスクＡの実行サイクルが経過することから、タスク実行部２１により、タスクＡが実行される。このとき、タスクＢおよびＣは待機状態である。このため、更新タスクであるタスクＡのプログラムＰ１が実行され、そのプログラムＰ１において外部変数（グローバル変数）ＧＶ１に対して「２」が書き込まれる。これにより、ＲＡＭ１３に記憶されるグローバル変数ＧＶ１の値が「１」から「２」に更新される。その後、タスクＡのプログラムＰ２が実行され、タスクＡの処理が完了すると、中断されたタスクＢの処理が再開される。なお、このとき、タスクＢが中断されていたことにより、参照用データＲＤ１の値は更新されない。そして、タスク実行部２１によりタスクＢのプログラムＰ４の残りが実行され、タスクＢの処理が完了する。
【００６９】
そして、タスクＣが実行される前に、参照用データ管理部２２により、タスクＣに用いられる参照用データＲＤ２の値がグローバル変数ＧＶ１の値に変更される。このとき、グローバル変数ＧＶ１の値が「２」であることから、参照用データＲＤ２の値が「０」から「２」に更新される。
【００７０】
その後、タスク実行部２１により、参照タスクであるタスクＣのプログラムＰ５が実行される。なお、プログラムＰ５において外部変数ＧＶ１の読み出しが行われる。このとき、タスクＣは、参照タスクであることから、ＲＡＭ１３の参照用データＲＤ２にアクセスする。これにより、参照用データＲＤ２の「２」が読み出される。
【００７１】
次に、タスクＡ、ＢおよびＣの実行サイクルが同時に開始されてから２ｍｓ経過すると、タスクＣのプログラムＰ５が中断される。そして、収集部２３により、プログラムＰ１の外部変数Ｐ１．ＧＶ１、プログラムＰ４の外部変数Ｐ４．ＧＶ１、および、プログラムＰ５の外部変数Ｐ５．ＧＶ１の値が収集される。このとき、グローバル変数ＧＶ１が「２」であり、参照用データＲＤ１が「１」であり、参照用データＲＤ２が「２」であることから、外部変数Ｐ１．ＧＶ１が「２」であり、外部変数Ｐ４．ＧＶ１が「１」であり、外部変数Ｐ５．ＧＶ１が「２」である。そして、ＣＰＵ１１により、収集部２３による収集結果が、データトレースが開始されてからの経過時間（２ｍｓ）と関連付けられてＲＡＭ１３に格納されることにより、ＲＡＭ１３にトレース結果Ｌ３が蓄積される。
【００７２】
そして、タスクＡの実行サイクルが経過することから、タスク実行部２１により、タスクＡが実行される。このとき、タスクＢの実行サイクルも経過することから、タスクＢおよびＣが待機状態である。このため、更新タスクであるタスクＡのプログラムＰ１が実行され、そのプログラムＰ１において外部変数（グローバル変数）ＧＶ１に対して「３」が書き込まれる。これにより、ＲＡＭ１３に記憶されるグローバル変数ＧＶ１の値が「２」から「３」に更新される。その後、タスクＡのプログラムＰ２が実行され、タスクＡの処理が完了する。
【００７３】
そして、タスクＣよりも優先度の高いタスクＢが実行される前に、参照用データ管理部２２により、タスクＢに用いられる参照用データＲＤ１の値がグローバル変数ＧＶ１の値に変更される。このとき、グローバル変数ＧＶ１の値が「３」であることから、参照用データＲＤ１の値が「１」から「３」に更新される。
【００７４】
その後、タスク実行部２１により、参照タスクであるタスクＢのプログラムＰ３およびＰ４が実行される。なお、プログラムＰ４において外部変数ＧＶ１の読み出しが行われる。このとき、タスクＢは、参照タスクであることから、ＲＡＭ１３の参照用データＲＤ１にアクセスする。これにより、参照用データＲＤ１の「３」が読み出される。
【００７５】
次に、タスクＡ、ＢおよびＣの実行サイクルが同時に開始されてから３ｍｓ経過すると、タスクＢのプログラムＰ４が中断される。そして、収集部２３により、プログラムＰ１の外部変数Ｐ１．ＧＶ１、プログラムＰ４の外部変数Ｐ４．ＧＶ１、および、プログラムＰ５の外部変数Ｐ５．ＧＶ１の値が収集される。このとき、グローバル変数ＧＶ１が「３」であり、参照用データＲＤ１が「３」であり、参照用データＲＤ２が「２」であることから、外部変数Ｐ１．ＧＶ１が「３」であり、外部変数Ｐ４．ＧＶ１が「３」であり、外部変数Ｐ５．ＧＶ１が「２」である。そして、ＣＰＵ１１により、収集部２３による収集結果が、データトレースが開始されてからの経過時間（３ｍｓ）と関連付けられてＲＡＭ１３に格納されることにより、ＲＡＭ１３にトレース結果Ｌ３が蓄積される。
【００７６】
そして、タスクＡの実行サイクルが経過することから、タスク実行部２１により、タスクＡが実行される。このとき、タスクＢおよびＣは待機状態である。このため、更新タスクであるタスクＡのプログラムＰ１が実行され、そのプログラムＰ１において外部変数（グローバル変数）ＧＶ１に対して「４」が書き込まれる。これにより、ＲＡＭ１３に記憶されるグローバル変数ＧＶ１の値が「３」から「４」に更新される。その後、タスクＡのプログラムＰ２が実行され、タスクＡの処理が完了すると、中断されたタスクＢの処理が再開される。なお、このとき、タスクＢが中断されていたことにより、参照用データＲＤ１の値は更新されない。このとき、タスクＣは待機状態である。そして、タスク実行部２１により、タスクＢのプログラムＰ４の残りが実行される。その後、タスクＢの処理が完了すると、中断されたタスクＣの処理が開始される。なお、このとき、タスクＣが中断されていたことにより、参照用データＲＤ２の値は更新されない。
【００７７】
そして、タスク実行部２１により、参照タスクであるタスクＣのプログラムＰ５の残りが実行される。なお、プログラムＰ５において外部変数ＧＶ１の読み出しが行われる。このとき、タスクＣは、参照タスクであることから、ＲＡＭ１３の参照用データＲＤ２にアクセスする。これにより、参照用データＲＤ２の「２」が読み出される。
【００７８】
そして、タスクＣの処理が完了した後、タスクＡ、ＢおよびＣの実行サイクルが同時に開始されてから４ｍｓ経過すると、収集部２３により、プログラムＰ１の外部変数Ｐ１．ＧＶ１、プログラムＰ４の外部変数Ｐ４．ＧＶ１、および、プログラムＰ５の外部変数Ｐ５．ＧＶ１の値が収集される。このとき、グローバル変数ＧＶ１が「４」であり、参照用データＲＤ１が「３」であり、参照用データＲＤ２が「２」であることから、外部変数Ｐ１．ＧＶ１が「４」であり、外部変数Ｐ４．ＧＶ１が「３」であり、外部変数Ｐ５．ＧＶ１が「２」である。そして、ＣＰＵ１１により、収集部２３による収集結果が、データトレースが開始されてからの経過時間（４ｍｓ）と関連付けられてＲＡＭ１３に格納されることにより、ＲＡＭ１３にトレース結果Ｌ３が蓄積される。
【００７９】
そして、タスクＡの実行サイクルが経過することから、タスク実行部２１により、タスクＡが実行される。このとき、タスクＢおよびＣの実行サイクルも経過することから、タスクＢおよびＣが待機状態である。
【００８０】
そして、上記した動作と同様の動作が繰り返し行われる。
【００８１】
その後、ＣＰＵユニット１によるデータトレースが終了されると、ＣＰＵ１１により、通信ＩＦ１５からトレース結果Ｌ３がツール装置７０に送信される。これにより、ツール装置７０では、受信したトレース結果Ｌ３に基づいて、図８に示すようグラフを表示部（図示省略）に表示することが可能になる。図８に示すグラフでは、データトレースの対象であったプログラムＰ１の外部変数Ｐ１．ＧＶ１、プログラムＰ４の外部変数Ｐ４．ＧＶ１、および、プログラムＰ５の外部変数Ｐ５．ＧＶ１について、データトレースが開始されてからの経過時間と、各外部変数の値との関係が折れ線で示されている。
【００８２】
本実施形態では、上記のように、更新タスクであるタスクＡのみがグローバル変数ＧＶ１に対して更新および参照するとともに、参照タスクであるタスクＢがグローバル変数ＧＶ１に対応する参照用データＲＤ１を参照することによって、タスクＢのプログラムＰ３が開始されてからプログラムＰ４が完了されるまでの間に、タスクＡによりグローバル変数ＧＶ１の値が更新された場合にも、タスクＢが参照用データＲＤ１を参照するので、タスクＢにおいて一貫性のある演算を行うことができる。すなわち、タスクＢのプログラムＰ３が開始される前にグローバル変数ＧＶ１と対応するように更新され、プログラムＰ３が開始されてからプログラムＰ４が完了されるまでの間は一定である参照用データＲＤ１をタスクＢが参照することにより、プログラムＰ３が開始されてからプログラムＰ４が完了されるまでの間に、タスクＢが予期しない更新が参照用データＲＤ１に対して行われることがないので、タスクＢにおいて一貫性のある演算を行うことができる。
【００８３】
同様に、更新タスクであるタスクＡのみがグローバル変数ＧＶ１に対して更新および参照するとともに、参照タスクであるタスクＣがグローバル変数ＧＶ１に対応する参照用データＲＤ２を参照することによって、タスクＣのプログラムＰ５が開始されてから完了されるまでの間に、タスクＡによりグローバル変数ＧＶ１の値が更新された場合にも、タスクＣが参照用データＲＤ２を参照するので、タスクＣにおいて一貫性のある演算を行うことができる。すなわち、タスクＣのプログラムＰ５が開始される前にグローバル変数ＧＶ１と対応するように更新され、プログラムＰ５が開始されてから完了されるまでの間は一定である参照用データＲＤ２をタスクＣが参照することにより、プログラムＰ５が開始されてから完了されるまでの間に、タスクＣが予期しない更新が参照用データＲＤ２に対して行われることがないので、タスクＣにおいて一貫性のある演算を行うことができる。
【００８４】
また、更新タスクであるタスクＡでは、タスクＡのみがグローバル変数ＧＶ１に対して更新および参照することにより、タスクＡにおいて一貫性のある演算を行うことができる。したがって、グローバル変数ＧＶ１に対して複数のタスクＡ、ＢおよびＣがアクセスする場合にも、参照タスクであるタスクＢおよびＣにそれぞれ参照用データＲＤ１およびＲＤ２を参照させることにより、一貫性のある演算を行うことができる。その結果、グローバル変数ＧＶ１に対するタスクＡ、ＢおよびＣ間の排他制御を適切に行うことができる。
【００８５】
また、本実施形態では、収集部２３により、タスクＡ、ＢおよびＣが実行されているときに、グローバル変数ＧＶ１の値を収集することによって、更新タスクであるタスクＡにより更新および参照されるグローバル変数ＧＶ１（外部変数Ｐ１．ＧＶ１）についてデータトレースすることができる。また、収集部２３により、タスクＡ、ＢおよびＣが実行されているときに、参照用データＲＤ１およびＲＤ２の値を収集することによって、参照タスクであるタスクＢおよびＣにより参照されるグローバル変数ＧＶ１（外部変数Ｐ４．ＧＶ１およびＰ５．ＧＶ１）についてデータトレースすることができる。これにより、グローバル変数ＧＶ１に対してタスクＡ、ＢおよびＣがアクセスする場合において、一貫性のある演算を行うために、参照タスクであるタスクＢおよびＣにそれぞれ参照用データＲＤ１およびＲＤ２を参照させる場合にも、タスクＢおよびＣの参照先である参照用データＲＤ１およびＲＤ２を適切にデータトレースすることができる。
【００８６】
また、本実施形態では、参照タスクであるタスクＢが実行されるときに、参照用データＲＤ１の値をグローバル変数ＧＶ１の値に変更し、参照タスクであるタスクＣが実行されるときに、参照用データＲＤ２の値をグローバル変数ＧＶ１の値に変更することによって、参照用データＲＤ１およびＲＤ２をグローバル変数ＧＶ１に対応させながら、更新タスクであるタスクＢおよびＣにおいて一貫性のある演算を行うことができる。
【００８７】
また、本実施形態では、通信ＩＦ１５がツール装置７０から受信したデータトレース情報Ｔに基づいて、データトレースの収集対象と収集周期とを設定することによって、利用者がツール装置７０を用いて収集対象および収集周期を設定することができる。
【００８８】
また、本実施形態では、通信ＩＦ１５からツール装置７０にトレース結果Ｌ３が送信されることによって、ツール装置７０がトレース結果Ｌ３を得ることができるので、利用者がツール装置７０を用いてトレース結果Ｌ３を確認することができる。
【００８９】
また、本実施形態では、ＣＰＵ１１が、時分割により複数のタスクを並行して実行することによって、ＣＰＵ１１の処理能力を効率的に利用することができる。
【００９０】
なお、今回開示した実施形態は、すべての点で例示であって、限定的な解釈の根拠となるものではない。したがって、本発明の技術的範囲は、上記した実施形態のみによって解釈されるものではなく、特許請求の範囲の記載に基づいて画定される。また、本発明の技術的範囲には、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれる。
【００９１】
たとえば、本実施形態では、ＰＡＣ１００がＣＰＵユニット１と、入力ユニット２と、出力ユニット３と、電源ユニット４とを備える例を示したが、これに限らず、ＰＡＣが通信ユニットなどのその他のユニットを備えていてもよいし、ＰＡＣに入力ユニットが設けられていなくてもよい。
【００９２】
また、本実施形態では、ＰＡＣ１００が複数のユニットにより構成される例を示したが、これに限らず、ＰＡＣが１つの筐体により構成され、その筐体に各ユニットの機能が組み込まれていてもよい。
【００９３】
また、本実施形態において、タスクＡのプログラムＰ２に外部変数（グローバル変数）ＧＶ１が登録されていてもよい。この場合、このプログラムＰ２の外部変数Ｐ２．ＧＶ１では、タスクＡが更新タスクであることから、ＲＡＭ１３のグローバル変数ＧＶ１の本体に直接アクセスする。
【００９４】
また、本実施形態において、タスクＢのプログラムＰ３に外部変数ＧＶ１が登録されていてもよい。この場合、このプログラムＰ３の外部変数Ｐ３．ＧＶ１は、タスクＢが参照タスクであることから、ＲＡＭ１３のタスクＢ用の参照用データＲＤ１にアクセスする。
【００９５】
また、本実施形態では、ＣＰＵ１１が時分割により複数のタスクを並行して実行する例を示したが、これに限らず、ＣＰＵがマルチコアであり、複数のタスクを同時に並行して実行するようにしてもよい。このように構成すれば、タスクの処理能力の向上を図ることができる。
【００９６】
また、本実施形態では、ＣＰＵ１１がシステムプログラム１２１を実行することにより、タスク実行部２１、参照用データ管理部２２、収集部２３および設定部２４が実現される例を示したが、これに限らず、タスク実行部２１、参照用データ管理部２２、収集部２３および設定部２４がそれぞれハードウェアで構成されていてもよい。
【００９７】
また、本実施形態では、データトレース情報Ｔに含まれるサンプリング周期が時間間隔で設定される例を示したが、これに限らず、指定されるタスクの周期によりサンプリング周期が設定されるようにしてもよい。
【００９８】
また、本実施形態では、説明を簡略化するために、１ｍｓ〜８ｍｓまでのトレース結果Ｌ３を示したが、実際には、データトレースはより長い期間実行される。たとえば、データトレースは１０秒（１００００ｍｓ）間実行される。
【００９９】
また、本実施形態では、トレース結果Ｌ３に収集結果と経過時間が含まれる例を示したが、これに限らず、トレース結果に、データが収集された時刻情報や、収集された順番を示すインデックス情報などが含まれていてもよい。
【０１００】
また、本実施形態では、トレース結果Ｌ３がＲＡＭ１３に記憶される例を示したが、これに限らず、トレース結果Ｌ３がＲＯＭ１２に記憶されるようにしてもよい。
【０１０１】
また、本実施形態では、複数のタスクに、１個の更新タスク（タスクＡ）と、２個の参照タスク（タスクＢおよびＣ）とが含まれる例を示したが、これに限らず、更新タスクが１個であれば、参照タスクが１個であってもよいし、参照タスクが３個以上であってもよい。
【０１０２】
また、本実施形態において、タスクには、定期的に実行されるタスク（定周期タスク）に加えて、予め設定された実行条件が成立した場合に実行されるタスク（イベントタスク）が含まれていてもよい。
【符号の説明】
【０１０３】
１      ＣＰＵユニット（制御装置）
１３    ＲＡＭ（記憶手段）
１５    通信ＩＦ（通信手段）
２１    タスク実行部（タスク実行手段）
２２    参照用データ管理部（参照用データ管理手段）
２３    収集部（収集手段）
２４    設定部（設定手段）
６０    制御対象機器
７０    ツール装置
１２１  システムプログラム
【図１】
0005218585.tif 000002
【図２】
0005218585.tif 000003
【図３】
0005218585.tif 000004
【図４】
0005218585.tif 000005
【図５】
0005218585.tif 000006
【図６】
0005218585.tif 000007
【図７】
0005218585.tif 000008
【図８】
0005218585.tif 000009
【図９】
0005218585.tif 000010
【図１０】
0005218585.tif 000011