以下、図面を参照しながら、実施形態を詳細に説明する。
図1は、PLCシステムの構成例を示している。図1のPLCシステムは、PLC1と、パーソナルコンピュータ(Personal Computer,PC)2と、入出力モジュール3-1~3-M(Mは2以上の整数)と、通信モジュール4-1~4-Mとを含む。
PLC1は、工場等に設置される各種制御機器を統括的に制御する。PLC1は、マルチCPU構成のPLCであり、CPUモジュール7-1~7-Mと共有メモリ8とを含む。CPUモジュール7-i(i=1~M)と共有メモリ8とはバス9を介して接続されている。CPUモジュール7-iは、バス9を介して、共有メモリ8にアクセスする。共有メモリ8は、変数の値を記憶する記憶部として動作する。
CPUモジュール7-iは、着脱可能なハードウェアモジュールであり、メンテナンス等のためにPLC1から取り外されることがある。CPUモジュール7-iは、演算処理部として動作する。
CPUモジュール7-1は、後述するロギング処理を行う。CPUモジュール7-1とPC2とは通信ケーブル5を介して接続されている。PC2は通信ケーブル5を介して他のCPUモジュール7-iと接続されていてもよい。CPUモジュール7-1を含む2以上のCPUモジュール7-iがロギング処理を行ってもよい。例えば、CPUモジュール7-1は、第1演算処理部として動作し、他のCPUモジュール7-iは、第2演算処理部として動作する。
PC2はPLC1を支援する支援装置としての機能を提供する。PC2は、例えば、ユーザアプリケーションプログラムの編集を行うために用いられる。なお、以降の説明では、ユーザアプリケーションプログラムを「ユーザプログラム」と称することもある。ユーザプログラムは、例えば、IEC(International Electrotechnical Commission)61131-3準拠のラダー言語を用いて作成されてもよい。ユーザプログラムは、シーケンシャルファンクションチャート(Sequential Function Chart,SFC)等のフローチャート形式のモーションプログラム等といったグラフィカルプログラミング言語を用いて作成されてもよい。ユーザプログラムは、C言語等の高級プログラミング言語を用いて作成されてもよい。
また、後述するように、PC2は、ロギング処理の実行の条件の設定を行う機能も提供する。
CPUモジュール7-iと入出力モジュール3-i及び通信モジュール4-iとは通信バス6-iを介して接続されている。通信バス6-iには、複数の入出力モジュール3-iや複数の通信モジュール4-iが接続されていてもよい。入出力モジュール3-i及び通信モジュール4-iは、着脱可能となっている。
入出力モジュール3-iは、サーボアンプやエンコーダ、あるいは、センサの信号を電気信号に変換するものであり、また、デジタル信号若しくはアナログ信号を入出力するものであってもよい。
通信モジュール4-iは、他の機器との通信インタフェースを提供する。
図2は、図1のPLCシステムにおいてCPUモジュール7-1が実行する各処理の実行期間の例を示している。
CPUモジュール7-1は、入力処理、プログラム実行処理、出力処理、ロギング処理、及びシステム処理を含む制御処理のサイクルを繰り返し実行する。入力処理は、外部機器である入出力モジュール3-1から受信した入力データを取り込む処理である。プログラム実行処理は、ユーザにより作成されたユーザプログラムを実行する処理である。このユーザプログラムの実行では、入力処理により取り込まれた入力データが用いられる。出力処理は、ユーザプログラムの実行結果を出力することによって入出力モジュール3-1を制御して、実行結果を入出力モジュール3-1の出力に反映させる処理である。
ロギング処理は、ユーザプログラムにおいて使用されている変数の値を収集して、収集データを生成する処理である。ロギング処理は、PLC1を含むPLCシステムの各構成機器の動作状態を示すデータを記録し、履歴として保存する処理でもある。システム処理は、CPUモジュール7-1自身の動作を管理して、適正な動作を維持するための処理である。
CPUモジュール7-1は、ユーザプログラムの実行を妨げないように、各制御周期における出力処理の後の所定の収集タイミングで、ロギング処理を実行する。制御周期は、入力処理、プログラム実行処理、出力処理、ロギング処理、及びシステム処理の実行期間の合計である。CPUモジュール7-2~7-Mも、入力処理、プログラム実行処理、出力処理、及びシステム処理を含む制御処理のサイクルを繰り返し実行する。
次に、PLCシステムにおけるPLC1及びPC2ついて更に詳細に説明する。
まず、CPUモジュール7-iのハードウェア構成について、図3に示されているハードウェア構成例を参照しながら説明する。図3のCPUモジュール7-iは通信I/F11、CPU12、バスコントローラ13、メモリ14、記憶装置I/F15、及びバスI/F16を含む。これらの構成要素はいずれもハードウェアであって、内部バス17に接続されており、相互にデータの授受を行うことが可能である。「I/F」とはインタフェースの略称である。CPUは、プロセッサと呼ばれることもある。
通信I/F11は通信ケーブル5に接続されており、PC2との間で行われる各種のデータの授受を管理する。
CPU12は、ユーザプログラム、CPUモジュール7-i自身の動作を管理するためのシステムプログラム、ロギング実行プログラム等の各種のプログラムを実行する。
バスコントローラ13は通信バス6-iに接続されており、外部機器である入出力モジュール3-iや通信モジュール4-iとの間で行われる各種のデータの授受を管理する。
メモリ14は、例えば半導体メモリであり、RAM(Random Access Memory)領域及びROM(Read Only Memory)領域を含む。RAM領域は、CPU12が各種のプログラムを実行する際に各種のデータを一時的に記憶しておく記憶領域として利用される。ROM領域は、各種のプログラムやデータが保存される領域であり、例えば不揮発性メモリが用いられる。
RAM領域は、CPUモジュール7-1~7-Mの共有メモリとして利用することもできる。RAM領域が共有メモリとして利用される場合、図1の共有メモリ8を省略してもよい。共有メモリとして利用されるメモリ14は、CPUモジュール7-iによって使用されている変数の値を記憶する記憶部として動作する。
記憶装置I/F15は、メモリカード等の外部記憶装置18に対する各種のデータの書き込み処理や読み出し処理を管理する。
バスI/F16はバス9に接続されており、共有メモリ8との間で行われる各種のデータの授受を管理する。CPU12は、バスI/F16を介して共有メモリ8にアクセスする。他のCPUモジュール7-iのメモリ14が共有メモリとして利用される場合、CPU12は、バスI/F16を介して、他のCPUモジュール7-iのメモリ14にアクセスすることもできる。バスI/F16は、変数の値を記憶する記憶部にアクセスするインタフェースとして動作する。
次に、PC2のハードウェア構成について、図4に示されているハードウェア構成例を参照しながら説明する。図4のPC2はCPU21、メモリ22、入力装置23、表示装置24、補助記憶装置25、及び通信I/F26を含む。これらの構成要素はいずれもハードウェアであって、内部バス27に接続されており、相互にデータの授受を行うことが可能である。
CPU21は、例えば、メモリ22を利用して所定のプログラムを実行することにより、ユーザプログラムの編集機能や、ロギング処理の実行の条件の設定を行うための機能を提供する。
入力装置23は、例えば、キーボードやポインティングデバイス等であり、ユーザからの指示又は情報の入力に用いられる。
表示装置24は、例えば、ユーザへの問い合わせ又は指示や、処理結果の表示出力に用いられる。
補助記憶装置25は、磁気ディスク装置、光ディスク装置、光磁気ディスク装置等であり、例えば、ハードディスクドライブやフラッシュメモリであってもよい。PC2は、補助記憶装置25にプログラム及びデータを格納しておき、それらをメモリ22にロードして使用することができる。
通信I/F26は通信ケーブル5に接続されており、PLC1との間で行われる各種のデータの授受を管理する。
<ロギングの設定>
次に、図1のPLCシステムにおいて、ロギング処理の実行の条件をPLC1に設定する手法について説明する。
まず図5について説明する。図5は支援装置30の機能構成例を示した図である。この構成例は、PLC1によるロギング処理の実行の条件を設定する機能を支援装置30が提供する場合の一例である。PLCシステムでは、所定の設定ツールプログラムをPC2に実行させることによって、支援装置30の機能をPC2が提供する。
図5において、支援装置30は、プログラム解析部31、表示部32、特定部33、及び出力部34を含む。
プログラム解析部31は、PLC1に実行させるユーザプログラムを解析して、ユーザプログラムにおいて使用されている複数の変数を抽出する。表示部32は、プログラム解析部31により抽出された変数のうち、各CPUモジュール7-iによって使用されている変数を表示する。
特定部33は、各CPUモジュール7-iによって使用されている変数の中から選択された変数を、収集対象の変数として特定する。出力部34は、収集対象の変数を示す情報を、設定情報として出力する。
このような支援装置30によれば、ユーザは、各CPUモジュール7-iによって使用されている変数の中から、ロギング処理における収集対象の変数を選択して、設定情報を容易に生成することができる。従って、複数のCPUモジュール7-iを含むPLCにおいてロギングを行うことが可能になる。
図5のような構成を含む支援装置30によって行われる支援方法の一例である、ロギング処理の実行の条件の設定を行う方法について、図6を用いて更に詳細に説明する。
支援装置30には設定ツール40が備えられている。PC2では、所定の設定ツールプログラムをCPU21に実行させることによって設定ツール40の機能が提供される。
設定ツール40にはプロジェクトデータ41が入力される。プロジェクトデータ41は、PLCシステムのシステム構成の情報、PLC1で実行させるユーザプログラム、及び、PLCシステムが含む外部機器である入出力モジュール3-iや通信モジュール4-i等についての機能設定情報を含む情報である。ここでは、このプロジェクトデータ41は、例えばPC2において所定のプロジェクトデータ編集プログラムを実行することによりユーザによって既に作成されていて、例えば補助記憶装置25に既に記憶されているものとする。
設定ツール40により、まず、このプロジェクトデータ41に対してS110の収集対象設定処理が行われる。この処理は、ユーザプログラムで使用されている変数から、ロギングの対象とする変数を設定する処理であって、図5の支援装置30におけるプログラム解析部31及び特定部33の機能を提供する処理である。
このS110の処理はS111のプログラム解析処理を含む。プログラム解析処理は、プロジェクトデータ41に含まれているユーザプログラムを解析して、ユーザプログラムで使用されている複数の変数を抽出する処理である。S110の収集対象設定処理では、プログラム解析処理の実行によって抽出された変数から、PLC1に行わせるロギング処理による収集対象の変数をユーザに選択させる処理が更に行われる。
ここで図7について説明する。図7は、S110の収集対象設定処理で用いられるUI(User Interface)画面100の画面例を表している。
図7の画面例では、UI画面100は、プログラム選択部101、抽出変数表示部102、及び対象変数表示部103を含む。支援装置30の機能を図4のPC2が提供する場合、表示装置24は表示部32として動作し、UI画面100を表示する。
プログラム選択部101には、プロジェクトデータ41に含まれていたユーザプログラムを示す情報が表示される。なお、本実施形態では、複数のプログラムの集合体としてタスクが構成され、複数のタスクの集合体としてCPU処理が構成され、複数のCPU処理とグローバル変数の集合体としてユーザプログラムが構成されているものとする。
図7の画面例において、「アプリ名称」はユーザプログラムの名称であり、「CPU1」及び「CPU2」は各CPU処理の名称である。「CPUi」は、CPUモジュール7-iによって実行される処理を表す。「タスク1」は各CPU処理に属する各タスクの名称であり、「プログラム」及び「プログラムN」は各タスクに属する各プログラムの名称である。「グローバル変数」は複数のプログラムからアクセス可能な変数であり、ユーザによって定義される。この画面例では、ユーザプログラムと各CPU処理と各タスクと各プログラムとグローバル変数との関係をツリー形式で表現することが表されている。
プログラム選択部101に表示されているプログラムの名称のいずれかを選択する操作がユーザにより行われると、選択された名称に対応するプログラムに対してS111のプログラム解析処理が行われ、そのプログラムで使用されている変数が抽出される。
なお、プログラムの名称の代わりにタスクの名称を選択する操作が行われた場合には、選択された名称に対応するタスクに属するプログラムのそれぞれから変数が抽出される。また、CPU処理の名称を選択する操作が行われた場合には、選択された名称に対応するCPU処理に含まれるタスクに属するプログラムのそれぞれから変数が抽出される。このとき、抽出された変数の名称が抽出変数表示部102に一覧表示される。
抽出変数表示部102に表示されている変数の名称のうちからいずれか1以上を選択し、登録ボタン104を押下する操作がユーザにより行われると、選択された名称に対応する変数が収集対象の変数として特定される。このとき、特定された収集対象の変数の名称が対象変数表示部103に一覧表示される。
なお、対象変数表示部103に表示されている収集対象の変数の名称のうちからいずれか1以上を選択し、解除ボタン105を押下する操作がユーザにより行われると、選択された名称に対応する変数が収集対象の変数から除外される。
また、一括登録ボタン106を押下する操作がユーザにより行われると、抽出変数表示部102に名称が表示されている変数の全てが収集対象の変数として選択され、その名称が対象変数表示部103に一覧表示される。その一方で、一括解除ボタン107を押下する操作がユーザにより行われると、対象変数表示部103に名称が表示されている変数の全てが収集対象の変数から除外される。
図6の説明に戻る。S120では収集動作設定処理が行われる。この処理はロギング処理の動作設定のための情報を作成する処理である。この情報によって、例えば、収集対象のデータである変数の値の収集タイミング、データの収集を行う期間、収集したデータをPLC1が外部記憶装置18に保存させる保存タイミング等の設定がPLC1に対して行われる。
上述したS110及びS120の処理に続いて、S130の設定ファイル作成処理が行われる。この設定ファイル作成処理は、図5の支援装置30における出力部34の機能を提供する処理である。
設定ファイル作成処理は、S110の処理により選択された収集対象の変数を特定する情報とS120の処理により設定されたロギング処理の動作設定情報とをロギング設定データ42として出力する処理である。ロギング設定データ42は、出力部34が出力する設定情報に対応する。ロギング設定データ42はPLC1に転送され、PLC1では、ロギング処理についての動作設定が、ロギング設定データ42の内容に基づいて行われる。
ロギング設定データ42について更に説明する。図8は、ロギング設定データ42のデータ構造の一例を示している。
ロギング設定データ42は、プロジェクトデータ情報51と、収集動作設定情報52と、収集対象設定情報53とを含む。
プロジェクトデータ情報51は、PLC1に実行させるユーザプログラムを特定する情報であり、例えば、ユーザプログラムをコンパイルして得られるオブジェクトコードに付された名称(プロジェクト名)や、コンパイルの実行日時等の情報を含む。なお、プロジェクトデータ情報51は、プロジェクトデータ41の一部として含まれている。
収集動作設定情報52はS120の収集動作設定処理によって作成される情報である。収集動作設定情報52には、例えば、データの収集タイミングや収集を行う期間、収集したデータをPLC1が外部記憶装置18に保存させる保存タイミング、収集したデータを保存させる保存先の外部記憶装置18を特定する情報が含まれている。
収集対象設定情報53は、S110の収集対象設定処理によって選択された収集対象の変数についての情報である。収集対象設定情報53のデータ構造の一例が図9に示されている。
図9の例では、収集対象設定情報53には、データの収集タイミングにおける収集データの合計サイズの情報が含まれている。また、収集対象設定情報53には、収集対象の変数の個数の情報が含まれている。
更に、収集対象設定情報53には、収集対象の変数のそれぞれについての情報として、メモリ種別、データ型、メモリアドレス、及びデータサイズの情報が含まれている。メモリ種別は、共有メモリ8の識別情報を含んでいてもよく、CPUモジュール7-1~7-Mそれぞれに含まれるメモリ14のうち、収集対象の変数の値を記憶しているメモリ14の識別情報を含んでいてもよい。これらの情報によって、PLC1においてユーザプログラムが実行されたときに収集対象の変数の値の保持に使用される記憶領域の位置を特定することが可能になる。
PLC1によるロギング処理の実行の条件の設定は、上述した設定ツール40を用いることによって、支援装置30によって行われる。
<ロギングの実行>
次に、図1のPLCシステムにおいて、支援装置30としてのPC2によって設定された条件に従ってPLC1により行われるロギング処理について説明する。
まず図10について説明する。図10はロギング処理を行うCPUモジュール7-1の機能構成例を示した図である。
図10に示した構成例では、CPUモジュール7-1は、処理実行部61、収集部62、リングバッファ63、及び保存部64を含む。
前述したように、CPUモジュール7-1は、入力処理、プログラム実行処理、出力処理、ロギング処理、及びシステム処理を含む制御処理のサイクルを繰り返し実行する。図10に示した機能構成例では、処理実行部61が入力処理、プログラム実行処理、出力処理、及びシステム処理を実行し、収集部62がロギング処理を実行する。図3に示したハードウェア構成例では、CPU12が処理実行部61及び収集部62として動作する。
リングバッファ63は、ロギング処理による変数の値の収集時刻を、その収集時刻に収集された変数の値に対応付けた収集データを、変数の値を収集する度に保存する記憶領域である。図3に示したハードウェア構成例では、メモリ14の記憶領域の一部によってリングバッファ63が構成される。
収集部62は、ロギング処理において、他のCPUモジュール7-iによって使用されている所定変数の値に対するアクセスに失敗した場合、所定変数の値の欠損を示す欠損情報を収集データに設定する。例えば、プロジェクトデータ41が示すPLCシステムのシステム構成と、実際のPLCシステムのシステム構成との間に差異が生じている場合、所定変数の値に対するアクセスに失敗することがある。例えば、他のCPUモジュール7-iがメンテナンス等のためにPLC1から取り外されている場合、このような差異が生じ得る。
保存部64は、リングバッファ63に保存されている収集データを順次読み出して外部記憶装置18に保存する。図3に示したハードウェア構成例では記憶装置I/F15がCPU12による制御の下で保存部64の機能を提供する。この記憶装置I/F15に対する制御を、例えば、CPU12によって提供される収集部62がロギング処理の一部として行ってもよい。
他のCPUモジュール7-iは、例えば、図10のCPUモジュール7-1から収集部62、リングバッファ63、及び保存部64を除外した構成を有する。
このようなPLC1によれば、各CPUモジュール7-iが使用している変数の値へのアクセスに成功した場合、変数の値が収集データに記録される。また、ロギング処理を行うCPUモジュール7-1以外のCPUモジュール7-iが使用している変数の値へのアクセスに失敗した場合であっても、失敗に起因する変数の値の欠損を示す欠損情報が収集データに記録される。従って、複数のCPUモジュール7-iを含むPLCにおいてロギングを行うことが可能になる。
図10のような構成要素を含むCPUモジュール7-1によって行われるロギング実行方法について、図11を用いて更に詳細に説明する。
S210のプログラム実行処理は、入力処理で取り込まれた、入出力モジュール3-1や通信モジュール4-1等の外部機器から送られてくる入力データを用いてユーザプログラムを実行する処理である。この実行結果は、外部機器の制御のために出力処理によって出力される。図3のハードウェア構成例において、このプログラム実行処理を実行するCPU12は、ユーザプログラムの実行のためにメモリ14の記憶領域を使用する。このときに使用される記憶領域を、プログラム使用領域14aと称することとする。
S220のロギング処理は、S210のプログラム実行処理により実行されるユーザプログラムにおいて使用されている変数のうちの前述した収集対象の変数のそれぞれの値を収集する処理である。この収集対象の変数についての情報と、ロギング処理の動作設定情報とを含むロギング設定データ42は、支援装置30(PC2)において前述したようにして作成されてCPUモジュール7-1に予め提供されているものとする。
CPUモジュール7-1のCPU12は、制御処理と並行して、S230の時刻管理処理とS240の収集タイミング検知処理とを行っている。時刻管理処理は現在の時刻を計時する処理である。収集タイミング検知処理は、ロギング設定データ42に含まれている収集動作設定情報52により示されているデータの収集タイミングの到来を検知する処理である。
S220のロギング処理では、収集タイミング検知処理による収集タイミングの到来の検知に応じて、収集対象の変数のそれぞれの値を収集する処理が行われる。また、ロギング処理では、変数の値の収集時刻を時刻管理処理による計時結果から取得し、変数の値と収集時刻とをそれぞれ対応付けた収集データをリングバッファ63に保存する処理が行われる。
また、CPUモジュール7-1のCPU12はS250の保存処理を実行する。この保存処理は、ロギング設定データ42に含まれている収集動作設定情報52により示されている保存タイミングの到来を検知する処理を含む。また、この保存処理は、記憶装置I/F15を制御して、リングバッファ63に保存されている収集データを保存タイミングの到来の検知に応じて読み出させて、収集動作設定情報52により示されている保存先である外部記憶装置18に保存させる処理を含む。
ここで、S220のロギング処理とS250の保存処理とについて、図12に示したフローチャートを用いて更に詳細に説明する。
図12において、S251及びS252の処理はロギング処理の詳細を表しており、S253及びS254の処理は保存処理の詳細を表している。
図12に示されている処理は、制御処理の各サイクルにおいて、ロギング処理の処理開始タイミングが到来すると開始される。
まず、S251において、前述したS240の収集タイミング検知処理によって収集タイミングの到来が検知されたか否かを判定する処理が行われる。この判定処理において、収集タイミングの到来が検知されたと判定されたとき(判定結果がYESのとき)には、S252の収集処理が行われる。一方、この判定処理において、収集タイミングの到来が検知されないと判定されたとき(判定結果がNOのとき)には、図12に示されている処理が終了する。
S252の収集処理は、収集対象の変数のそれぞれの値を収集し、収集した値を、後述する収集データ73として、リングバッファ63に保存する処理である。この収集処理の詳細については後述する。
S252の収集処理に続き、S253では、ロギング設定データ42に含まれている収集動作設定情報52により示されている保存タイミングが到来したか否かを判定する処理が行われる。この判定処理において、保存タイミングが到来したと判定したとき(判定結果がYESのとき)にはS254に処理を進める。一方、この判定処理において、保存タイミングが到来しないと判定したとき(判定結果がNOのとき)には、S254の処理を行わずに、図12に示されている処理が終了する。
S254では、今回実行中のロギング処理におけるS252の収集処理によりリングバッファ63に保存された収集データ73を読み出し、収集動作設定情報52で示されている保存先の外部記憶装置18にロギング収集データ70として保存する処理が行われる。
ロギング収集データ70について更に説明する。図13は、ロギング収集データ70のデータ構造の一例を示している。
ロギング収集データ70は、プロジェクトデータ情報51と、収集データ数71と、収集データサイズ72と、1以上の収集データ73とを含む。
プロジェクトデータ情報51は、PLC1で実行されたユーザプログラムを特定する情報であり、例えば、ユーザプログラムをコンパイルして得られるオブジェクトコードに付された名称や、コンパイルの実行日時の情報を含む。つまり、ロギング収集データ70に含まれているプロジェクトデータ情報51は、ロギング設定データ42に含まれていたプロジェクトデータ情報51と同様のものである。CPU12は、S252の収集処理において、ロギング設定データ42からプロジェクトデータ情報51を読み出してロギング収集データ70に取り込む。
収集データ数71は、ロギング収集データ70に含まれている収集データ73の個数を表している情報である。また、収集データサイズ72は、ロギング収集データ70に含まれている収集データ73の総データ量を表している情報である。
ロギング収集データ70には、収集データ73として、収集された変数の値についてのデータが、収集された順序に従って含まれている。この収集データ73のデータ構造の一例が図14に示されている。
図14の例では、収集データ73にはタイムスタンプ74の情報が含まれている。このタイムスタンプ74は、変数の値の収集が行われたときの時刻を表している。
また、収集データ73には、タイムスタンプ74の時刻において収集された1以上の変数のそれぞれの値を表す変数データ75が含まれている。この変数データ75のデータ構造の一例が図15に示されている。
図15の例では、変数データ75には変数有効フラグ76、変数サイズ77、及び変数値78の情報が含まれている。
変数有効フラグ76は変数値78が有効又は無効のいずれであるかを示す。変数値78が有効である場合、変数有効フラグ76にONが設定され、変数値78が無効である場合、変数有効フラグ76にOFFが設定される。OFFが設定された変数有効フラグ76は、変数の値の欠損を示す欠損情報の一例である。変数有効フラグ76を設けることで、変数データ75に変数の値の欠損を記録することが可能になる。
変数サイズ77は変数値78のデータ量を表す。変数値78は、収集された変数の値を表す。
S254の処理では、ロギング設定データ42とリングバッファ63に保存された収集データとを用いて、このようなデータ構造を有するロギング収集データ70を作成して外部記憶装置18に保存する処理が行われる。
その後、S254の処理が終了すると、図12に示されている処理が終了する。
なお、図12のフローチャートで示したロギング処理が終了したときには、CPU12は、ロギング設定データ42を外部記憶装置18に更に保存する処理も行うようにする。このロギング設定データ42は、後述する収集データ73の表示の際に使用される。
次に、図12におけるS252の収集処理について、図16に示したフローチャートを用いて更に詳細に説明する。
まず、S291において、前述したS230の時刻管理処理により計時されている現在の時刻をタイムスタンプとして取得し、得られたタイムスタンプを収集データ73のタイムスタンプ74としてリングバッファ63に書き込む処理が行われる。
次に、S292において、収集対象の変数の値に対するアクセスが成功したか否かを判定する判定処理が行われる。ロギング処理を行っているCPUモジュール7-1内の変数の値に対するアクセスは、CPUモジュール7-1の故障が発生しない限り成功する。一方、バスI/F16を介して行われる共有メモリ8又は他のCPUモジュール7-iに対するアクセスは、アクセス対象が存在しない等の状況によって失敗することがある。例えば、他のCPUモジュール7-iがメンテナンス等のためにPLC1から取り外されている場合、そのCPUモジュール7-iのメモリ14が記憶している変数の値に対するアクセスは失敗することがある。
変数の値に対するアクセスが成功したと判定されたとき(判定結果がYESのとき)には、S293において、その変数の変数有効フラグ76がONに設定される。
次に、S294において、変数有効フラグ76がONに設定された変数の現在の値を取得し、取得した値を、変数データ75の変数値78としてリングバッファ63に書き込む処理が行われる。
収集対象の変数の値は、共有メモリ8又はCPUモジュール7-1~7-Mそれぞれに含まれるメモリ14に記憶されている。変数の値の記憶領域は、ロギング設定データ42の収集対象設定情報53に含まれている収集対象の変数についてのメモリ種別、データ型、メモリアドレス、及びデータサイズの情報に基づいて特定される。従って、S294の処理では、特定された記憶領域に保持されているデータを読み出すことによって、収集対象の変数の値の取得が行われる。
変数の値に対するアクセスが失敗したと判定されたとき(判定結果がNOのとき)には、S296において、その変数の変数有効フラグ76がOFFに設定される。
次に、S295において、ロギング設定データ42の収集対象設定情報53に情報が含まれていた収集対象の変数の全てについて値の収集を済ませたか否かを判定する処理が行われる。この判定処理において、収集対象の変数の全てについて値の収集を済ませたと判定されたとき(判定結果がYESのとき)には今回の収集処理が終了する。一方、この判定処理において、値の収集を済ませていない収集対象の変数が残っていると判定されたとき(判定結果がNOのとき)にはS292へ処理を戻して、値の収集を済ませていない収集対象の変数について、その値を収集する処理が行われる。
以上の収集処理が終了すると、収集データ73のリングバッファ63への保存が完了し、続いて図12のS253の処理が行われる。
<ロギングによる収集データの表示>
次に、図1のPLCシステムにおけるPLC1により行われたロギング処理により得られた収集データ73を表示する手法について説明する。
まず、収集データ73を表示する装置のハードウェア構成について説明する。図17は収集データ表示装置80のハードウェア構成例を示している。
図17の構成例では、収集データ表示装置80は、CPU81、メモリ82、入力装置83、補助記憶装置84、表示装置85、及び記憶装置I/F86を含む。これらの構成要素はいずれもハードウェアであって、内部バス87に接続されており、相互にデータの授受を行うことが可能である。
CPU81は、例えば、メモリ82を利用して所定のプログラムを実行することにより、収集データの表示や収集データの波形表示、データ欠損時の不定値表示等の各種の表示を制御する機能を提供する。
入力装置83は、例えば、キーボードやポインティングデバイス等であり、ユーザからの指示又は情報の入力に用いられる。
補助記憶装置84は、磁気ディスク装置、光ディスク装置、光磁気ディスク装置等であり、例えば、ハードディスクドライブやフラッシュメモリであってもよい。収集データ表示装置80は、補助記憶装置84にプログラム及びデータを格納しておき、それらをメモリ82にロードして使用することができる。
表示装置85は、例えば、ユーザへの問い合わせ又は指示や、処理結果の表示出力に用いられる。
記憶装置I/F86は、メモリカード等の外部記憶装置18に対する各種のデータの読み出し処理を管理する。
収集データ表示装置80は以上のハードウェア構成を有している。なお、このようなハードウェア構成は、一般的なコンピュータが有している標準的な構成であるので、このようなコンピュータを用いて収集データ表示装置80を構成するようにしてもよい。また、図1のPLCシステムにおいて支援装置30として機能させたPC2を更に用いて、収集データ表示装置80を構成するようにしてもよい。
次に図18について説明する。図18は収集データ表示装置80の機能構成例を示した図である。
図18において、外部記憶装置18には、前述したロギング収集データ70がPLC1によって保存されているものとする。図13及び図14を用いて説明したように、ロギング収集データ70には、PLC1が実行したS220のロギング処理により収集された収集対象の変数の値を収集時刻に対応付けた収集データ73が収集時刻順に並べられている。
図18の構成例では、収集データ表示装置80は、表示制御部91及び表示部92を含む。図17のCPU81は表示制御部91として動作し、表示装置85は表示部92として動作する。
表示制御部91は、収集データ73に含まれる各変数データ75について、変数の値又は変数の値の欠損を示す欠損情報のいずれが含まれているかをチェックする。
表示部92は、変数の値が収集データ73に含まれている変数について、変数の値を表示し、欠損情報が収集データ73に含まれている変数について、変数の値の欠損を示す欠損表示情報を表示する。表示部92は、欠損表示情報として、例えば、変数の値が不定値であることを示す不定値情報を表示してもよい。
このような収集データ表示装置80によれば、CPUモジュール7-1~7-Mから収集された収集データ73に含まれている変数の値が表示されると共に、変数の値が含まれていない場合には、変数の値の欠損を示す欠損表示情報が表示される。従って、複数のCPUモジュール7-iを含むPLCにおいてロギングを行うことが可能になる。
図18のような構成を含む収集データ表示装置80によって行われる、収集データを表示する方法の一例について、図19を用いて更に詳細に説明する。
収集データ表示装置80は、S310のプログラム表示処理、S320の波形表示処理、S330のロギングファイル解析・変換処理、及びS340の表示制御処理を行う。これらの各処理は、表示制御部91によって行われる。これらの各処理をCPU81に行わせるプログラムはエンジニアリングソフトウェアと称されることもある。
S310のプログラム表示処理は、前述したプロジェクトデータ41に含まれるユーザプログラムを表示すると共に、ロギング収集データ70から作成された表示用データを用いて、ユーザプログラムについての収集対象の変数の値を表示する処理である。表示用データは、収集時刻及び変数値を含む。なお、ここでは、プロジェクトデータ41は、例えばPC2において所定のプロジェクトデータ編集プログラムを実行することによりユーザによって既に作成されていて、例えば補助記憶装置84に既に記憶されているものとする。
S320の波形表示処理は、ロギング収集データ70から作成された表示用データを用いて、収集時刻と収集対象の変数の値との関係を波形によって表示する処理である。
S330のロギングファイル解析・変換処理は、ロギング設定データ42とロギング収集データ70を解析して、収集データ73を、S310のプログラム表示処理とS320の波形表示処理とのそれぞれに入力される表示用データに変換する処理である。なお、ここでは、ロギング設定データ42及びロギング収集データ70は外部記憶装置18により提供されるものとする。ロギングファイル解析・変換処理では、これらのデータが外部記憶装置18から読み出されて使用される。
S340の表示制御処理は、S330のロギングファイル解析・変換処理によって作成された表示用データを、S310のプログラム表示処理とS320の波形表示処理とに提供する処理を含む。また、この表示制御処理は、プログラム表示処理と波形表示処理との表示を連動させる処理を含む。
以下、収集データ表示装置80によって行われる、図19に示した各処理の詳細を更に説明する。
まず、S310のプログラム表示処理の詳細について、図20を用いて説明する。
図20で表されているように、S310のプログラム表示処理は、S311の操作UI処理と、S312の変数値表示制御処理と、S313のユーザプログラム表示処理と、S314の照合処理と、S315の警告処理とを含む。
S311の操作UI処理は、収集データ表示装置80のユーザによる入力装置83に対する操作に応じた入力を受け付ける処理である。
S312の変数値表示制御処理は、S311の操作UI処理により受け付けられた入力の情報や、S340の表示制御処理からの連動の情報を受け付けて、表示用データに含まれる変数値の表示を制御する処理である。
S313のユーザプログラム表示処理は、プロジェクトデータ41に含まれるユーザプログラムを表示すると共に、S312の変数値表示制御処理による制御の下で、収集対象の変数の値を、ユーザプログラムの表示上に表示させる処理である。
S314の照合処理は、プロジェクトデータ41、ロギング設定データ42、及びロギング収集データ70のプロジェクトデータ情報51の照合を行う処理である。
S315の警告処理は、S314の照合処理によって、各データのプロジェクトデータ情報51が一致しない場合に所定の警告を行う処理である。
図21は、表示装置85に表示される警告画面の画面例を表している。S315の警告処理による所定の警告は、例えばこのような警告画面を表示装置85に表示することによって行われる。この画面例には、プロジェクトデータ情報51が一致しないことをユーザに警告する警告ダイアログ130が含まれている。なお、例えばユーザプログラムのデバッグを行う場合等には有益であるので、収集データ表示装置80では、プロジェクトデータ情報51が不一致であっても変数の値の表示の機能は利用可能としている。
次に、S320の波形表示処理の詳細について、図22を用いて説明する。
図22で表されているように、S320の波形表示処理は、S321の操作UI処理と、S322の変数値表示制御処理と、S323の波形作成処理とを含む。
S321の操作UI処理は、S311の処理と同様の処理であり、収集データ表示装置80のユーザによる入力装置83に対する操作に応じた入力を受け付ける処理である。
S322の変数値表示制御処理は、S312の処理と同様の処理であり、S321の操作UI処理により受け付けられた入力の情報や、S340の表示制御処理からの前述の連動の情報を受け付けて、表示用データに含まれる変数値の表示を制御する処理である。
S323の波形作成処理は、S340の表示制御処理により提供される表示用データに基づいて、収集タイミングと変数との関係を表している波形を作成して表示する処理である。
次に、S330のロギングファイル解析・変換処理の詳細について、図23を用いて説明する。
図23で表されているように、S330のロギングファイル解析・変換処理は、S331のロギング設定データ取得処理、S332のロギング収集データ取得処理、S333の変数データ欠損判定処理、及び、S334の表示用データ作成処理を含んでいる。
S331のロギング設定データ取得処理は、ロギング設定データ42を外部記憶装置18から取り込む処理である。
S332のロギング収集データ取得処理は、ロギング収集データ70を外部記憶装置18から読み出して取り込む処理である。
S333の変数データ欠損判定処理は、外部記憶装置18から読み出したロギング収集データ70において、変数値が欠損しているか否かを判定する処理である。より具体的には、この変数データ欠損判定処理は、S332のロギング収集データ取得処理により取得されたロギング収集データ70に含まれている変数データ75を参照することによって、変数値の欠損が生じているか否かを判定する処理である。
S334の表示用データ作成処理は、ロギング設定データ42とロギング収集データ70から、収集時刻及び変数値を含む表示用データを作成する処理である。S333の変数データ欠損判定処理によって欠損が生じていると判定された場合は、欠損していた変数値の代わりに、変数の値が不定値であることを示す不定値情報が作成される。
次に図24について説明する。図24は、S330のロギングファイル解析・変換処理の処理内容を示したフローチャートである。
図24において、まず、S401では、ロギング設定データ42とロギング収集データ70とを外部記憶装置18から読み出して取り込む処理が行われる。この処理は、図23におけるS331のロギング設定データ取得処理とS332のロギング収集データ取得処理とに相当する処理である。
S402では、ロギング収集データ70に含まれている収集データ73から、収集時刻及び変数値を含む表示用データを作成する変数値生成処理が行われる。S402の処理は、図23におけるS334の表示用データ作成処理に相当する処理である。
S403では、S402の処理による収集データ73の取り出しの回数を計数するカウンタをインクリメントする(1増加させる)処理が行われる。
S404では、カウンタの現在の値がロギング収集データ70に含まれている収集データ数71で示されている値に達したか否かを判定する処理が行われる。この判定処理において、カウンタの値が収集データ数71で示されている値に達したと判定したとき(判定結果がYESのとき)には、このロギングファイル解析・変換処理を終了する。一方、この判定処理において、カウンタの値が収集データ数71で示されている値には未だ達してはいないと判定したとき(判定結果がNOのとき)には、S402に処理を戻す。このときには、ロギング収集データ70から未だ取り出されていない残余の収集データ73についてS402以降の処理が行われる。
以上の処理がS330のロギングファイル解析・変換処理である。
次に、図24におけるS402の変数値生成処理について、図25に示したフローチャートを用いて更に詳細に説明する。
まず、S411において、収集データ73に含まれている変数データ75の変数有効フラグ76がONであるか否かを判定する処理が行われる。この判定処理において、変数有効フラグ76がONであると判定したとき(判定結果がYESのとき)には、変数値78がそのまま表示用データの変数値として用いられる。一方、この判定処理において、変数有効フラグ76がOFFであると判定したとき(判定結果がNOのとき)には、S412において、変数サイズ77が示すデータ量の不定値情報を表示用データの変数値として作成する処理が行われる。なお、表示用データの収集時刻としては、変数データ75を含む収集データ73に対応付けられている収集時刻が用いられる。
S413では、S411において判定された変数データ75の個数を計数するカウンタをインクリメントする(1増加させる)処理が行われる。
S414では、カウンタの現在の値が収集データ73に含まれている変数データ75の個数に達したか否かを判定する処理が行われる。この判定処理において、カウンタの値が変数データ75の個数に達したと判定したとき(判定結果がYESのとき)には、このロギングファイル解析・変換処理を終了する。一方、この判定処理において、カウンタの値が変数データ75の個数には未だ達してはいないと判定したとき(判定結果がNOのとき)には、S411に処理を戻す。このときには、未だ判定されていない残余の変数データ75についてS411以降の処理が行われる。
次に、S340の表示制御処理の詳細について、図26を用いて説明する。
図26で表されているように、S340の表示制御処理は、S341の変数値提供処理、S342の再生制御処理、及び、S343の収集データ取得処理を含む。
S341の変数値提供処理は、S330のロギングファイル解析・変換処理により作成された表示用データを、収集タイミングが対応付けられている変数の値として、S310のプログラム表示処理とS320の波形表示処理とに提供する処理である。なお、提供される表示用データには、ロギングファイル解析・変換処理により作成された不定値情報が含まれている場合がある。
S342の再生制御処理は、所定の連動の指示を受けると、S310のプログラム表示処理とS320の波形表示処理とを制御して、それぞれの処理により表示される画面の内容を連動させる処理である。
S343の収集データ取得処理は、S330のロギングファイル解析・変換処理により作成された表示用データを取得してS341の変数値提供処理に提供する処理である。
以上のように、S340の表示制御処理によって、S330のロギングファイル解析・変換処理により作成された表示用データが、S310のプログラム表示処理とS320の波形表示処理とに提供される。次に、プログラム表示処理と波形表示処理とが表示装置85にそれぞれ表示させる画面について説明する。
まず図27について説明する。図27は、収集データの表示画面の例である。この表示画面は、CPU81がS310のプログラム表示処理を実行することによって表示装置85に表示される。
図27の画面例は、S313のユーザプログラム表示処理により得られるユーザプログラム表示画面110に重ねて、S311の操作UI処理により得られるUI画面120が表示されている状態を表している。
S313のユーザプログラム表示処理によって、プロジェクトデータ41に含まれているユーザプログラムの内容を表す図(例えばラダープログラム)が作成され、ユーザプログラム表示画面110として表示される。
UI画面120は、収集タイミング毎に収集されている変数の値についての表示を順次更新させる指示を与えるコマ送りボタン121やシークバー122、表示させる変数の値の収集タイミングの時刻を直接入力する時刻入力欄123等を有している。なお、時刻入力欄123は、コマ送りボタン121やシークバー122への操作によって指定される収集タイミングの時刻を表示する表示欄としての機能も有している。
S311の操作UI処理によって、コマ送りボタン121やシークバー122への操作に応じて指定された収集タイミングが取得され、このタイミングの時刻が時刻入力欄123に表示される。また、時刻の入力操作が時刻入力欄123に対して行われた場合には、この操作UI処理によって、入力された時刻が、指定した収集タイミングとして取得される。
S312の変数値表示制御処理により、ロギング収集データ70において収集タイミングが対応付けられている変数の値や、S311の操作UI処理によって取得された収集タイミングの指定が取得される。また、この変数値表示制御処理により、指定された収集タイミングにおける変数の値がS313のユーザプログラム表示処理に送られ、ユーザプログラム表示処理により、変数の値についての表示が、ユーザプログラム表示画面110で行われる。
図27の画面例において、ON/OFF表示111、ON/OFF不定表示112、変数表示113、変数表示114、及び変数不定値表示115は、収集対象の変数の値を表示するものである。
ON/OFF表示111は、ONとOFFとのどちらかの状態を有するプログラム構成要素の状態が収集対象の変数として選択されている場合に、変数値で示される状態に応じた異なる色彩で要素を塗りつぶした表示を行って変数値を表すものである。図27の画面例では、ON/OFF表示111として、ユーザプログラム中の要素が黒塗りで表示されているが、実際には、例えば、「ON」の場合には赤塗りで、また、「OFF」の場合には青塗りで要素が表示される。
塗りつぶしが施されていないON/OFF不定表示112は、ONとOFFとのどちらかの状態を有するプログラム構成要素の状態が収集対象の変数として選択されており、且つ、その変数値が欠損している場合の表示である。ON/OFF不定表示112は、不定値情報の一例である。
変数表示113及び変数表示114は、プログラム構成要素に関する数値が収集対象の変数として選択されている場合に、その数値を変数値として直接表示するものである。
変数不定値表示115は、プログラム構成要素に関する数値の表示として「???」なる表示を含む。この変数不定値表示115は、プログラム構成要素に関する数値が収集対象の変数として選択されており、且つ、その変数の値が欠損している場合の表示である。変数不定値表示115は、不定値情報の一例である。
変数データ75の変数有効フラグ76がOFFである場合には、ON/OFF不定表示112や変数不定値表示115がユーザプログラム表示画面110で表示される。この表示はS313のユーザプログラム表示処理によって行われる。
以上のように、S311、S312、及びS313の処理によって、図27の画面例で表されているように、収集時刻と収集された変数の値とが関係付けされて表示装置85で表示される。
次に図28について説明する。図28は、収集データの波形表示画面140の例である。この波形表示画面140は、CPU81がS320の波形表示処理を実行することによって表示装置85に表示される。
波形表示画面140に含まれている波形141は、S323の波形作成処理によって作成されたものである。なお、図28の画面例では、「変数1」、「変数2」、及び「変数3」のそれぞれについての波形141が、それぞれ実線、破線、及び一点鎖線を用いて表示されている。また、波形表示画面140に含まれている時刻表示142は、波形141により変数値との関係が表されている収集タイミングを表しており、S323の波形作成処理によって波形表示画面140に表示される。
また、S321の操作UI処理によって、収集タイミングの範囲の移動指示が受け付けられると、S323の波形作成処理により、移動後の収集タイミングの範囲についての波形141が波形表示画面140に表示される。また、波形表示画面140に表示されている太線143によって示される収集タイミングの時刻が、S323の波形作成処理によって時刻表示欄144に表示される。
S322の変数値表示制御処理により、S340の表示制御処理により提供される変数値の表示データにおいて収集タイミングが対応付けられている変数の値が取得される。また、このS322の変数値表示制御処理により、時刻表示欄144に表示された収集タイミングの時刻が取得される。更に、この変数値表示制御処理により、取得された収集タイミングにおける変数の値が、波形141と太線143との交点の位置で表される変数の値として、変数値表示欄145に表示される。
変数値表示欄145における変数不定値表示146は、図27の変数不定値表示115と同様に、変数の値が欠損している場合の表示である。変数3の波形141の一部を覆い隠している波形不定表示147は、変数不定値表示146と同様に、変数の値が欠損している場合の表示である。
変数有効フラグ76がOFFである場合には、波形表示画面140における収集タイミングに対応する位置に、このような波形不定表示147が波形141の代わりに表示される。この表示はS323の波形作成処理によって作成される。
以上のように、S321、S322、及びS323の処理によって、図28の画面例で表されているように、収集時刻と収集された変数の値とが関係付けされて表示装置85で表示される。
S342の再生制御処理により、例えば、図27の画面例におけるUI画面120に対する操作により指定された収集タイミングと、図28の画面例における太線143によって示される収集タイミングとを同一の時刻とする処理が行われる。
以上、開示の実施形態とその利点について詳しく説明したが、当業者は、特許請求の範囲に明確に記載した本発明の範囲から逸脱することなく、様々な変更、追加、省略をすることができるであろう。