以下、本発明の実施形態を図面に基づいて説明する。ただし、以下に示す実施形態は、本発明の技術思想を具体化するための例示であって、本発明は以下のものに特定されない。また、本明細書は特許請求の範囲に示される部材を、実施形態の部材に特定するものでは決してない。特に実施形態に記載されている構成部品の寸法、材質、形状、その相対的配置等は特に特定的な記載がない限りは、本発明の範囲をそれのみに限定する趣旨ではなく、単なる説明例にすぎない。なお、各図面が示す部材の大きさや位置関係等は、説明を明確にするため誇張していることがある。さらに以下の説明において、同一の名称、符号については同一若しくは同質の部材を示しており、詳細説明を適宜省略する。さらに、本発明を構成する各要素は、複数の要素を同一の部材で構成して一の部材で複数の要素を兼用する態様としてもよいし、逆に一の部材の機能を複数の部材で分担して実現することもできる。
図1に、プログラマブルロジックコントローラシステムの概要図を示す。この図に示すプログラマブルロジックコントローラシステム1000は、ラインを流れる対象物WKをカメラ部98で撮像して検査するシステムを例示している。このプログラマブルロジックコントローラシステム1000は、PC2と接続されて、プロジェクトデータ編集プログラムを編集する。
プログラマブルロジックコントローラ1は、複数のユニットを接続して構成される。複数のユニット間は、ユニット間バス90を介して通信可能に接続されている。ユニットは、CPUユニット3と拡張ユニット4に大別される。CPUユニット3はメインユニットや基本ユニットとも呼ばれ、プログラマブルロジックコントローラの基本動作を行う。また拡張ユニット4は、CPUユニット3の機能を拡張する機能拡張ユニットである。図1の例では、拡張ユニット4はカメラ入力拡張ユニット4cと、モーションユニット4dと、通信ユニット4eを含む。拡張ユニット4の一種であるカメラ入力拡張ユニット4cは、カメラ部98と接続されて、対象物WKを所定のタイミングで撮像して、CPUユニットに送出する。モーションユニット4dは、位置決めユニットとも呼ばれ、軸とよばれる制御対象の位置を制御する。一般に軸ごとにモータ等の駆動源が存在する。通信ユニット4eは、外部機器と通信を行う。またCPUユニット3は、これら拡張ユニット4からのデータを収集して、必要な制御を行う。
<システム構成>
ここで、プログラマブルロジックコントローラ(以下「PLC」とも呼ぶ。)を当業者にとってよりよく理解できるようにするために、一般的なPLCの構成とその動作について説明する。
図2は、本発明の実施の形態によるプログラマブルロジックコントローラシステムの一構成例を示す概念図である。図2が示すように、このシステムは、ラダープログラム等のユーザープログラムの編集を行うためのPC2と、工場等に設置される各種制御装置を統括的に制御するためのPLC1とを備えている。PCはパーソナルコンピュータの略称である。ユーザープログラムは、ラダー言語やSFC(シーケンシャルファンクションチャート)等のフローチャート形式のモーションプログラム等のグラフィカルプログラミング言語を用いて作成されてもよいし、C言語等の高級プログラミング言語を用いて作成されてもよい。以下では、説明の便宜上、ユーザープログラムはラダープログラムとする。PLC1は、CPUが内蔵されたCPUユニット3と、1つないし複数の拡張ユニット4を備えている。CPUユニット3に対して1つないし複数の拡張ユニット4が着脱可能となっている。例えば、拡張ユニット4aはモータ(フィールドデバイス10a)を駆動してワークの位置決めする位置決めユニットであり、拡張ユニット4bはカウンタユニットであってもよい。カウンタユニットは手動パルサ等のエンコーダ(フィールドデバイス10b)からの信号をカウントする。なお、参照符号の末尾に付与されているa、b、c・・・の文字は省略されることがある。なお、PLC1とPC2とを含むシステムはプログラマブルロジックコントローラシステムと呼ばれてもよい。
CPUユニット3には、PLC側表示部5及びPLC側操作部6が備えられている。PLC側表示部5は、CPUユニット3に取り付けられている各拡張ユニット4の動作状況等を表示することができる。PLC側操作部6の操作内容に応じてPLC側表示部5は表示内容を切り替える。またPLC側操作部6は、CPUユニット3と一体に組み込まれたボタン等とする他、外付けのコンソールやマウスやキーボード等の入力装置としてもよい。あるいは、PLC側表示部5をタッチパネルとして操作部の機能を兼用させることもできる。
PLC側表示部5は、通常、PLC1内のデバイスの現在値(デバイス値)やPLC1内で生じたエラー情報等を表示する。デバイスとは、デバイス値(デバイスデータ)を格納するために設けられたメモリ上の領域を指す名称であり、デバイスメモリと呼ばれてもよい。デバイス値とは、入力機器からの入力状態、出力機器への出力状態及びユーザープログラム上で設定される内部リレー(補助リレー)、タイマ、カウンタ、データメモリ等の状態を示す情報である。デバイス値の型にはビット型とワード型がある。ビットデバイスは1ビットのデバイス値を記憶する。ワードデバイスは1ワードのデバイス値を記憶する。
拡張ユニット4は、PLC1の機能を拡張するために用意されている。各拡張ユニット4には、その拡張ユニット4の機能に対応するフィールドデバイス(被制御装置)10が接続され、これにより、各フィールドデバイス10が拡張ユニット4を介してCPUユニット3に接続される。フィールドデバイス10は、センサやカメラ部等の入力機器であってもよいし、アクチュエータ等の出力機器であってもよい。また、一つの拡張ユニット4に対して複数のフィールドデバイスが接続されてもよい。
(プログラマブルロジックコントローラ用エンジニアリングツール)
PC2は、プログラマブルロジックコントローラ用エンジニアリングツール(以下「PLC用エンジニアリングツール」ともいう。)を実現する。PLC用エンジニアリングツールとは、PLC1と接続して、その設定や、運用時の制御や動作確認等を行うための部材である。また、PLC1やこれを含めたプログラマブルロジックコントローラシステムを動作させる各種プログラムの作成や、作成済みのプログラムの編集、修正を行うこともできる。この意味ではプログラム作成支援装置と呼ばれてもよい。さらにPLC用エンジニアリングツールは、過去のプログラマブルロジックコントローラシステムの動作を記録した運転記録データに基づいて、その当時の各デバイスの動作状況を再現することもできる。運転記録データは、ラダープログラム等のユーザープログラムや、各ユニットのユニット構成情報などの設定データを含むプロジェクトデータ、及び運転当時の各デバイスのデバイス値やカメラ部の画像データ等の運用データであるログデータを含んでいる。このPLC用エンジニアリングツールは運転記録データの内、プロジェクトデータを読み込んで編集することも可能である。この意味でPLC用エンジニアリングツールは、プロジェクトデータ編集プログラムと呼ばれてもよい。
PC2は、例えば携帯可能なノートタイプやタブレットタイプのパーソナルコンピュータであって、表示部7及びPC側操作部8を備えている。PLC1を制御するためのユーザープログラムの一例であるラダープログラムは、PC2を用いて作成される。その作成されたラダープログラムは、PC2内でニモニックコードに変換される。PC2は、USB(Universal Serial Bus)等の通信ケーブル9を介してPLC1のCPUユニット3に接続され、ニモニックコードに変換されたラダープログラムをCPUユニット3に送る。CPUユニット3はラダープログラムをマシンコードに変換し、CPUユニット3に備えられたメモリ内に記憶する。なお、ここではニモニックコードがCPUユニット3に送信されているが、本発明はこれに限られない。例えば、PC2は、ニモニックコードを中間コードに変換し、中間コードをCPUユニット3に送信してもよい。
なお、図2は示していないが、PC2のPC側操作部8には、PC2に接続されたマウス等のポインティングデバイスが含まれていてもよい。またPC2は、USB以外の他の通信ケーブル9を介して、PLC1のCPUユニット3に対して着脱可能に接続されるような構成であってもよい。また、通信ケーブル9を介さず、PLC1のCPUユニット3に対して無線によって接続されるような構成であってもよい。
<ラダープログラム>
図3は、ラダープログラムの作成時にPC2の表示部7に表示されるラダー図Ldの一例を示す図である。PC2は、マトリックス状に配置された複数のセルを表示部7に表示する。各セルには、仮想デバイスのシンボルが配置される。シンボルは、入力リレーや出力リレー等を示している。このような複数のシンボルによってリレー回路が形成される。ラダー図Ldには、例えば10列×N行(Nは任意の自然数)のセルが配置されている。そして各行のセル内には、仮想デバイスのシンボルが適宜配置される。
図3が示すリレー回路は、入力装置からの入力信号に基づいてON/OFFされる3つの仮想デバイス(以下、「入力デバイス」と呼ぶ。)のシンボルと、出力装置の動作を制御するためにON/OFFされる仮想デバイス(以下、「出力デバイス」と呼ぶ。)のシンボルと、が適宜結合されることにより構成されている。
各入力デバイスのシンボルの上方に表示されている文字(「R0001」、「R0002」及び「R0003」)は、その入力デバイスのデバイス名(アドレス名)を表している。各入力デバイスのシンボルの下方に表示されている文字(「フラグ1」、「フラグ2」及び「フラグ3」)は、その入力デバイスに対応付けられたデバイスコメントを表している。出力デバイスのシンボルの上方に表示されている文字(「原点復帰」)は、その出力デバイスの機能を表す文字列からなるラベルである。
図3が示す例では、デバイス名「R0001」及び「R0002」にそれぞれ対応する2つの入力デバイスのシンボルが直列的に結合されることにより、AND回路が構成されている。また、これらの2つの入力デバイスのシンボルからなるAND回路に対して、デバイス名「R0003」に対応する入力デバイスのシンボルが並列的に結合されることにより、OR回路が構成されている。すなわち、このリレー回路では、一行目の2つのシンボルに対応する入力デバイスがいずれもONした場合、又は二行目のシンボルに対応する入力デバイスがONした場合にのみ、一行目のシンボルに対応する出力デバイスがONになる。
<プログラム作成支援装置>
図4は、PC2の電気的構成について説明するためのブロック図である。図4が示すように、PC2は、PC側メモリ部11、PC側CPU21、表示部7、PC側操作部8、PC側記憶装置22及びPC側通信部23を備えている。表示部7、PC側操作部8、PC側記憶装置22及びPC側通信部23は、それぞれPC側CPU21に対して電気的に接続されている。
PC側メモリ部11は、PC側CPU21が処理を実行するための作業空間となる作業メモリであり、典型的にはRAM等で構成される。PC側記憶装置22は、後述する運転記録データ記憶部36Bの機能を実現する。運転記録データは、プロジェクトデータを含んでいる。
PC側記憶装置22はハードディスクや半導体メモリ、ROM等を含み、さらに着脱可能なメモリカードを含んでもよい。CPUは中央演算処理装置の略称である。ROMはリードオンリーメモリの略称である。RAMはランダムアクセスメモリの略称である。
ユーザは、PC側記憶装置22に記憶されているコンピュータプログラムである編集ソフトウエアをPC側CPU21に実行させて、PC側操作部8を通じてプロジェクトデータを編集する。この編集ソフトウエアは、プロジェクトデータ編集プログラムにあたる。
(プロジェクトデータ)
プロジェクトデータは、一つ以上のユーザープログラム(例えばラダープログラム)と、CPUユニット3や拡張ユニット4のユニット構成情報等を含む。またプロジェクトデータは、ユーザープログラムがどのようなプログラム部品から構成されているかを示すプログラム構成情報を含めてもよい。さらにユニット構成情報は、CPUユニット3に対する複数の拡張ユニット4の接続位置や、CPUユニット3に備えられた機能(例えば通信機能や位置決め機能)を示す情報、拡張ユニット4の機能(例えば撮影機能)等を示す情報である。
ここで、プロジェクトデータの編集には、プロジェクトデータの作成及び変更が含まれる。プロジェクトデータ編集プログラムを用いて作成されたプロジェクトデータは、PC側記憶装置22に記憶される。またユーザは、必要に応じてPC側記憶装置22に記憶されているプロジェクトデータを読み出し、そのプロジェクトデータを、プロジェクトデータ編集プログラムを用いて変更することができる。PC側通信部23は、通信ケーブル9を介してPC2をCPUユニット3に通信可能に接続するためのものである。PC側CPU21はPC側通信部23を介してプロジェクトデータをCPUユニット3に転送する。
プロジェクトデータ編集プログラムは、編集モードとモニタモードと履歴再生モードを備える。編集モードはエディットモード等とも呼ばれ、プロジェクトデータを編集することができる。またモニタモードはユーザープログラムのデバッグ等を行うためのシミュレーション動作を行うことができる。さらに履歴再生モードはリプレイモードやタイムマシン再生等とも呼ばれ、再生表示を行うことができる。これらの編集モード、モニタモード、履歴再生モードの切り替えは、後述するモード選択部50Dで行われる。
<PLC1>
図5はPLC1の電気的構成について説明するためのブロック図である。この図に示すように、CPUユニット3は、PLC側CPU31、PLC側表示部5、PLC側操作部6、PLC側記憶装置32及びPLC側通信部33を備えている。PLC側表示部5、PLC側操作部6、PLC側記憶装置32及びPLC側通信部33は、それぞれPLC側CPU31に電気的に接続されている。
(PLC側記憶装置32)
PLC側記憶装置32は、プロジェクト記憶部35、デバイス部34、一時記録部91a、保存メモリ36を備えている。
プロジェクト記憶部35は、PC2から入力されたプロジェクトデータを記憶する。またPLC側記憶装置32はCPUユニット3用の制御プログラムも記憶する。
デバイス部34はビットデバイスやワードデバイス等を有し、各デバイスはデバイス値を記憶する。このデバイス部34は、複数のデバイスの各デバイス値を記憶するデバイスメモリとして機能する。またユーザープログラムに従い参照される記憶領域として機能させてもよい。
一時記録部91aは、デバイス部34に記憶されているデバイス値を時系列に記録する。この一時記録部91aは、リングバッファ等で構成できる。
保存メモリ36は、一時記録部91aに時系列に記録されたデバイス値を保存する。保存メモリ36は、不揮発性メモリとして、内部メモリ37や着脱可能なメモリカード36A等で構成される。
このようにPLC側記憶装置32は複数の記憶領域を有している。このPLC側記憶装置32はRAMやROM、メモリカード等を含んでもよい。例えば図5の例では、保存メモリ36は着脱可能なメモリカード36Aで構成されている。
(PLC側CPU31)
PLC側CPU31は、プログラム実行部514と、保存条件設定部45と、記録制御部39と、保存制御部50Cを備えている。プログラム実行部514は、ユーザープログラムを繰り返し実行するラダー実行エンジンとして機能する。ユーザープログラムに従い、プログラム実行部514により参照される記憶領域であるデバイス部34は、複数のデバイスの各デバイス値を記憶している。
保存条件設定部45は、各種の条件を設定するための部材である。ここでは保存条件設定部45は、一時記録部91aに記録するための記録トリガについての第1トリガ条件と、保存メモリ36に保存するための保存トリガについての第2トリガ条件と、記録トリガが示す時点を基準時とし、この基準時までの期間及び該基準時からの期間の少なくとも一方を含む期間であって、一時記録部91aに一時的な記録を行う期間を示すバッファ記録期間を設定する。
保存条件設定部45で、第1トリガ条件として、一時記録部91aへの記録を開始するための記録開始トリガについての条件を設定することができる。またバッファ記録期間として、この記録開始トリガが示す基準時からの期間を設定することができる。
記録制御部39は、記録トリガについての第1トリガ条件が成立すると、この記録トリガが示す時点を基準時とするバッファ記録期間に対応した時系列のデバイス値をログデータとして一時記録部91aに記録する。また記録制御部39は、保存トリガについての第2トリガ条件が成立する時点、又は次に記録トリガについての第1トリガ条件が成立する時点の、いずれか早い時点までの間、記録した該ログデータを一時記録部91aに保持させる。そして、次に記録トリガについての第1トリガ条件が成立すると、次に該記録トリガが示す時点を基準時とするバッファ記録期間に対応した時系列のデバイス値をログデータとして、一時記録部91aに記録する。
保存制御部50Cは、保存トリガについての第2トリガ条件が成立すると、記録制御部39により一時記録部91aに保持されたログデータを保存メモリ36に保存する。ここで保存制御部50Cは、保存トリガについての第2トリガ条件が成立すると、記録制御部39により一時記録部91aに保持され、保存トリガからみて直前の記録トリガに対応するログデータを、保存メモリに保存することが好ましい。このように保存制御部50Cは、バッファ記録期間を経過した後も、バッファ記録期間中に記録したログデータを保持しておき、保存トリガが起動すると、記録トリガに対応付けて保持されたログデータを保存する。ただ記録制御部39が保存するログデータは、直近の記録トリガに対応するログデータに限らず、2個前の記録トリガや、3回前の記録トリガとしてもよい。
図5が示すように,CPUユニット3と拡張ユニット4とは拡張バスの一種であるユニット間バス90を介して接続されている。なお、ユニット間バス90に関する通信機能は、PLC側通信部33の一部として実装されてもよい。またPLC側通信部33は、ネットワーク通信回路を有してもよい。PLC側CPU31は、PLC側通信部33を介してログデータ等をPC2やクラウド等に送信してもよい。
ここで、ユニット間バス90について、補足説明する。このユニット間バス90は、次に説明する入出力リフレッシュ等が行われるバスである。ユニット間バス90における通信制御は、いわゆるバスマスタ38によって実現される(なお、PLC側通信部33の一部としてバスマスタを設けてもよいし、PLC側CPU31の一部としてバスマスタ38を設けてもよい)。バスマスタ38は、ユニット間バス90での通信を制御するための制御回路であって、PLC側CPU31からの通信要求を受けて、拡張ユニット4との間で、後述する入出力リフレッシュ等の通信を行う。
拡張ユニット4はCPU41とメモリ42を備えている。CPU41は、デバイスに格納されたCPUユニット3からの指示(デバイス値)に従って、フィールドデバイス10を制御する。またCPU41は、フィールドデバイス10の制御結果をバッファメモリとよばれるデバイスに格納する。デバイスに格納された制御結果は入出力リフレッシュによってCPUユニット3に転送される。またデバイスに格納されている制御結果は、CPUユニット3からの読み出し命令に従って、入出力リフレッシュとは異なるタイミングであっても、CPUユニット3に転送される。メモリ42はRAMやROM等を含む。とりわけ、RAMにはバッファメモリとして使用される記憶領域が確保されている。またメモリ42は、フィールドデバイス10によって取得されたデータ(例:静止画データや動画データ)を一時的に保持するバッファを有してもよい。
図6はCPUユニット3のスキャンタイムを示す模式図である。図6が示すように1つのスキャンタイムTは、入出力のリフレッシュを行うためのユニット間通信201、プログラム実行202、END処理204により構成されている。ユニット間通信201で、CPUユニット3は、ラダープログラムを実行して得られた出力データをCPUユニット3内のPLC側記憶装置32から拡張ユニット4等の外部機器に送信する。さらにCPUユニット3は、拡張ユニット4等の外部機器から受信した入力データをCPUユニット3内のPLC側記憶装置32に取り込む。つまり、CPUユニット3のデバイスに記憶されているデバイス値は出力リフレッシュによって拡張ユニット4のデバイスに反映される。同様に、拡張ユニット4のデバイスに記憶されているデバイス値は、入力リフレッシュによってCPUユニット3のデバイスに反映される。このように入出力リフレッシュによって、CPUユニット3のデバイスと拡張ユニット4のデバイスが同期する。
なお、リフレッシュ以外のタイミングでデバイス値をユニット間で更新する仕組み(ユニット間同期)が採用されてもよい。ただ、CPUユニット3のデバイスは、CPUユニット3が随時書き換えており、同様に拡張ユニット4のデバイスは拡張ユニット4が随時書き換えている。つまり、CPUユニット3のデバイスは、CPUユニット3の内部の装置によって随時アクセス可能である。同様に、拡張ユニット4のデバイスは拡張ユニット4の内部の装置によって随時アクセス可能になっている。CPUユニット3と拡張ユニット4との間では、基本的にリフレッシュのタイミングにおいて相互にデバイス値を更新して同期する。プログラム実行202で、CPUユニット3は、更新された入力データを用いてプログラムを実行(演算)する。図6が示すように、プログラム実行202においては複数のプログラムモジュール又はラダープログラムがプロジェクトデータに従って順番に実行されてもよい。CPUユニット3はプログラムの実行によりデータを演算処理する。なお、END処理とは、PC2やCPUユニット3に接続された表示器(図示せず)等の外部機器とのデータ通信、システムのエラーチェック等の周辺サービスに関する処理全般を意味する。
このように、PC2はユーザの操作に応じたラダープログラムを作成し、作成したラダープログラムをPLC1に転送する。PLC1は、入出力リフレッシュ、ラダープログラムの実行及びEND処理を1サイクル(1スキャン)として、このサイクルを周期的、すなわちサイクリックに繰り返し実行する。これにより、各種の入力機器(センサ等)からのタイミング信号に基づいて、各種の出力機器(モータ等)を制御する。なお、スキャン周期とは別に、CPUユニット3や拡張ユニット4はそれぞれ内部制御周期を有している。CPUユニット3や拡張ユニット4は内部制御周期を基準としてフィールドデバイス10等の機能を制御する。
<ロギング>
ユーザがユーザープログラムを改良したり、修正したりする際に、PLC1がユーザープログラムを実行している際に取得されたデバイス値が役に立つことがある。そこで、PLC1は予め指定されたデバイス値を取得し、ログデータを作成する。ここで、PLC1が管理するデバイスには、ユーザープログラムによって利用されるものだけでなく、ユーザープログラムによって利用されないものも存在する。また、ユーザープログラムを改良したり、修正したりする際に役立つデバイスもあれば、役に立たないデバイスもある。一般にデバイスの数は数千個に及ぶため、ユーザが必要なデバイスを指定することは大きな負担となっていた。そこで、PC2は、ユーザープログラムを解析し、ユーザープログラムに使用又は記述されているデバイスをロギング対象として抽出する。これにより、ユーザの負担が軽減される。
PLC1が管理するすべてのデバイスをロギングの対象とすると、スキャンタイムが長くなってしまう。なぜなら、ロギングは、ユーザープログラムの一つとして実行されたり、入出力リフレッシュの際に実行されたりするからである。時には、ロギングのもたらす遅延によって、ユーザープログラムがユーザの希望通りに動作しないこともありうる。したがって、ロギング対象のデバイスの数は適切に維持されるべきであろう。
ユーザープログラムは、複数のプログラム部品(例えばプログラムモジュール(メインのラダープログラムとサブのラダープログラム)、ファンクションブロック)から構成されることがある。この内、ユーザが修正を希望するプログラム部品に関連したデバイスがロギングされれば、ユーザにとって十分な場合がある。また、複数のプログラム部品の内で、ユーザは特定のプログラム部品を抽出対象から除外したり、特定のプログラム部品を抽出対象に追加したりすることを希望することもあろう。よって、プログラム部品を単位として、ロギング対象からデバイスを追加又は削除できればユーザにとって便利であろう。
上述したようにCPUユニット3や拡張ユニット4は一つ以上の機能を有している。各機能には様々なデバイスが割り付けられている。よって、これらの機能を単位として、ロギング対象からデバイスを追加又は削除できれば、ユーザにとって便利であろう。例えば、CPUユニット3の通信機能に関する望ましくないイベントが発生した場合、ユーザはCPUユニット3の通信機能に関するデバイスのデバイス値を参照することで、このイベントを解消することが容易になろう。
(プログラム作成支援装置)
プログラム作成支援装置の一例を、図7のブロック図に示す。この図に示すプログラム作成支援装置1200は、一以上のユニットで構成されたPLC1で実行されるユーザープログラムの作成を支援する。このプログラム作成支援装置1200は、PC2にユーザープログラム作成支援プログラムをロードさせて実行させて実現する他、専用のハードウェアで構築してもよい。図7に示す例では、PC2にユーザープログラム作成支援プログラムをインストールして実現した例を示している。このプログラム作成支援装置1200は、PC側CPU21と、PC側メモリ部11と、PC側記憶装置22と、表示部7と、PC側操作部8と、通信部を備える。
PC側メモリ部11はPC側CPU21が処理を実行するための作業空間である。このような作業メモリとして、RAM等が利用できる。
PC側記憶装置22は、PC2で読み取り可能なストレージである。典型的には、PC2が備えるハードディスクなどの記憶装置であるが、固定式に限らず、可搬式の媒体やメディアとすることもできる。例えば、PLC1が備えるメモリカード36Aを、PLC1側から抜き取り、PC2側に挿入して読み取る態様としてもよい。または、PC2とネットワーク接続されたPLC1のPLC側記憶装置32にアクセスする態様としてもよい。
このPC側記憶装置22は、運転記録データを記憶する運転記録データ記憶部36Bの機能を実現する。運転記録データは、プロジェクトデータと、ログデータを含んでいる。プロジェクトデータは、PLC1のユーザープログラム及び各ユニットのユニット構成情報を含む。ユニット構成情報には、各ユニットの機能、ユニット間の接続位置の情報等が含まれる。ログデータは、PLC1の運転時におけるデバイス値等のデータである。これらプロジェクトデータとログデータとが関連付けられた運転記録データが、運転記録データ記憶部36Bに記憶されている。
表示部7は、ログ表示制御部61によりログを表示させる。ログ表示制御部61は、運転記録データ記憶部36Bから運転記録データをPC側メモリ部11に読み出して、運転記録データ内のログデータとプロジェクトデータとを関連付けて表示する。
PC側CPU21は、プロジェクト編集部50B、保存制御部50C等の機能を実現する。プロジェクト編集部50Bは、ログ表示制御部61により表示部7に表示されたプロジェクトデータの編集指示を受け付けて、このプロジェクトデータを編集する。そして編集後のプロジェクトデータを保存する際には、そのプロジェクトデータと対応するログデータとを関連付けた運転記録データとして、運転記録データ記憶部36Bに記憶される。
保存制御部50Cは、運転記録データ記憶部36Bに記憶された運転記録データ内のプロジェクトデータに対して、プロジェクト編集部50Bにより編集された状態で保存することを規制する。これにより、ユーザによるプロジェクトデータ内のユーザープログラム等の修正によって意図せずプロジェクトデータ全体の信ぴょう性が損なわれる事態を回避できる。具体的には、保存制御部50Cが、運転記録データ記憶部36Bに記憶された運転記録データ内のプロジェクトデータに対して、プロジェクト編集部50Bにより編集された状態で上書き保存することを規制する。例えば、プロジェクト編集部50Bによりプロジェクトデータに対して上書き操作が試みられたことを検出して、表示部7上に上書き禁止ポップアップが表示される。あるいは、編集後のプロジェクトデータを保存しようとしたとき、この編集後のプロジェクトデータを、運転記録データに含まれる元のプロジェクトデータとは別のファイルとして保存する。例えば別名での保存を促すよう、保存ファイル名の入力ダイヤログを表示させたり、自動で名称を変更して新たにコピー保存させてもよい。
(運転記録データ)
運転記録データは、所定のタイミングで記録される。具体的には、トラブルが発生する可能性のある時期を指定して、この間のデータを運転記録データとしてまとめて保存しておくことで、トラブル発生時の原因解析に役立てることができる。
運転記録データは、複数のファイルをパッケージしたものとできる。運転記録データに含める情報は、例えば管理情報データ、プロジェクトデータ、プロジェクト識別情報、デバイスデータ、画像データ、イベントデータ等が挙げられる。管理情報データは、運転記録データに何が含まれているかの情報である。その拡張子は、例えばTMNとする。プロジェクトデータは、運転記録データの記録時点(例えばトラブル発生時)でのプロジェクトデータである。その拡張子は、例えばTPJとする。詳細については後述する。
プロジェクト識別情報は、この運転記録データ記録時点でのプロジェクトデータを識別するための情報である。その拡張子は、例えばTPIとする。デバイスデータは、運転記録データの記録時点でのデバイスを記録したデータであり、デバイスの数だけ存在する。その拡張子は、例えばTDVとする。画像データは、運転記録データの記録時点の画像を記録したデータである。その拡張子は、例えばTCAとする。イベントデータは、運転記録データの記録時点に発生していたイベントやエラーを記録したデータである。その拡張子は、例えばTEVとする。これらは一例であって、この内いずれかの情報のみを運転記録データに含めてもよいし、あるいはこれ以外の情報を追加してもよい。
(プロジェクトデータの構成)
プロジェクトデータは、複数のデータで構成される。データの数が多い場合は、圧縮形式で保存することが好ましい。プロジェクトデータには、プロジェクトファイル、モジュール、ファンクションブロック、ユニット設定ファイル、メール設定ファイル等を含めることができる。プロジェクトファイルは、プロジェクトの設定に関する情報である。その拡張子は、kpr例えばとする。モジュールは、ラダープログラムの情報である。その拡張子は、例えばmodとする。ファンクションブロックは、部品化されたラダープログラムの情報である。その拡張子は、例えばkfbとする。ユニット設定ファイルは、ユニットの構成情報である。その拡張子は、例えばue2とする。メール設定ファイルは、メールの設定情報である。その拡張子は、例えばmilとする。これら以外にも、ユニット毎に拡張子が異なるファイルを含めてもよい。またこれらは一例であって、この内いずれかの情報のみをプロジェクトデータに含めてもよいし、あるいはこれ以外の情報を追加してもよい。
各データファイルの種別を示す識別情報には、ファイルの拡張子を利用できる。またファイルの拡張子を用いて、運転記録データとプロジェクトデータの関連付けを行うこともできる。例えば運転記録データについてはTMNファイルが、プロジェクトデータについてはkprファイルが、それぞれPC2上でユーザープログラム作成支援プログラムに関連付けられている。PC2上の該当するファイルをダブルクリックすることで、ユーザープログラム作成支援プログラムが起動される。この様子を図8に示す。ここでは、ユーザープログラム作成支援プログラムのプロジェクト編集部50Bは、識別情報解釈部を備えている。ここでは識別情報解釈部の例として、TPJ解釈部50B1とkpr解釈部50B2を示している。表示部7上でエクスプローラ等のファイラ画面上から、TMNファイルをダブルクリックした場合、ユーザープログラム作成支援プログラムは、圧縮形式で保存されたTPJファイルを解凍し、PC側メモリ部11上にロードする。またkprファイルをダブルクリックした場合、ユーザープログラム作成支援プログラムは、kprと同じフォルダに配置された、他の設定ファイルを合わせてPC側メモリ部11上にロードする。一方、TPJファイル及びkprファイルは、TPJ解釈部50B1とkpr解釈部50B2により共通のモデルデータとして解釈され、PC側メモリ部11上にロードされる。
(モード選択部50D)
さらにPC側CPU21は、モード選択部50Dの機能を実現することもできる。モード選択部50Dは、編集モードや履歴再生モードを選択できる。編集モードは、プロジェクトデータを編集するモードであり、エディットモード等とも呼ばれる。また履歴再生モードは、ログ表示制御部61による表示を行うモードであり、リプレイモード等とも呼ばれる。このように、ユーザープログラム作成支援プログラムでは、一のプログラム中で動作モードを切り替えて、トラブル解決のため過去のイベントを再生させつつ、原因と思われる箇所のユーザープログラムを修正するという作業に移行することができる。また履歴再生モードと編集モードとで共通のGUIを用いることで、スムーズな作業の移行を行わせることが可能となる。
(ユーザープログラム作成支援プログラム1300)
まず、モード選択部50Dで履歴再生モードを選択した場合の、ユーザープログラム作成支援プログラム1300のGUIを図9に示す。この図に示すGUIは、プロジェクト表示領域420と、ラダーモニタ450と、カメラモニタ430と、ユニットモニタ440を備えている。図9において、左欄のプロジェクト表示領域420には、プロジェクトデータ71を構成する様々な情報が表示されている。上から順に、ユニット構成(CPUユニット、モーションユニット、アナログ入力ユニット、カメラ入力拡張ユニット等)、プログラム構成(毎スキャンモジュール、定周期モジュール、ユニット間同期モジュール、ファンクションブロック、マクロ等)が表示されている。モーションユニットについては、機能設定として軸構成や軸制御の設定パラメータが表示されている。ユーザは、図9に示すGUI上において、軸構成や軸制御をダブルクリックすることで、これらの設定パラメータについて、どのような設定内容になっているかを確認することができる。また、プロジェクト表示領域420において、毎スキャンモジュールに対してMainとSubが表示されているところ、ユーザがMainをクリックすると、中央のラダーモニタ450のプログラム表示領域410に、Mainプログラムが表示される。
(履歴再生モード)
次に履歴再生モードにおいて、トラブル発生時等に記録された運転記録データを再生する手順を、図10に基づいて説明する。例えば、予め保存された運転記録データのデータファイル(上述した拡張子TMNの運転記録データファイル)やプロジェクトファイル(拡張子kprのプロジェクトデータファイル)をダブルクリックすると、図10に示すユーザープログラム作成支援プログラム1300が起動されると共に、ダブルクリックされたファイルを解析して、含まれているファイルを展開したり、関連付けられた別ファイルを呼び出すなどして、運転記録データ保存時の状況が自動で再現される。あるいは、ユーザープログラム作成支援プログラム1300をユーザが起動した上で、ファイルメニューなどから、運転記録データファイル等の該当するファイルを選択して展開することもできる。
この例では、運転記録データをダブルクリックした場合は、図10に示す履歴再生モードでユーザープログラム作成支援プログラム1300が起動するよう構成している。一方、プロジェクトデータをダブルクリックした場合は、図11に示す編集モードでユーザープログラム作成支援プログラム1300が起動するよう構成している。このようにユーザが選択したファイルに応じて、初期選択される動作モードを異ならせることで、想定されるユーザの操作に沿った動作モードを予め選択してスムーズな操作環境を提供できる。
(履歴再生モードと編集モードの切り替え)
ユーザープログラム作成支援プログラム1300の起動後に、編集モードと履歴再生モードの2つの動作モードを切り替えるには、モード選択部50Dの一形態であるモード選択欄50D1から、切り替えたい動作モードを選択する。例えばモード選択欄50D1を、図12に示すようなプルダウンメニューで構成して、ユーザは所望の動作モードを容易に選択できる。図12の例では、「リプレイ」を選択すると履歴再生モード(リプレイモード)に、「エディタ」を選択すると編集モード(エディタモード)に、それぞれ切り替えられる。またモード選択欄50D1には、現在選択中の動作モードが表示されており、ユーザに対して現在の動作モードを告知する機能も奏している。
なおプロジェクトデータをダブルクリックして編集モードで起動したユーザープログラム作成支援プログラムを、履歴再生モードに切り替える場合、プロジェクトデータにはデバイスデータ等が指定されていないため、履歴再生モードで使用するためのデバイスデータを含む運転記録データを、別途指定するように促される。例えば、運転記録データを選択するダイヤログ画面を表示させる。
このように履歴再生モードにおいて、保存された運転記録データを読み込んでトラブル発生時のイベントを再生し、ユーザはトラブルの原因を推定し、これを改善するように必要な処置を検討できる。例えば、トラブルを解消できるようにラダープログラムを編集する。
図9の履歴再生モードにおいては、ユーザープログラムの編集が禁止されるようにしている。言い換えると、運転記録データの再生すなわち閲覧が許可され、改ざんは禁止される。これによってトラブル発生時の運転記録データの信ぴょう性が確保される。なお、ユーザープログラムの編集が禁止された履歴再生モードを、ログ再生モードと呼ぶ。
(編集モード)
ここで編集モードとしたユーザープログラム作成支援プログラム1300を用いて、ユーザープログラムの編集を行う手順として、ラダープログラムを修正する例を図13〜図15に基づいて説明する。この例では、ユーザープログラム作成支援プログラム1300を用いてモーションユニットの位置決め制御を行っている途中で、現在座標を示すデバイスの値が12000を超えていたら、動作をトルク制御に変更するようなユーザープログラムを検討している。ここでは、履歴再生モードでトラブルの発生原因を検証した結果、図13に示すようにプログラム表示領域410に示すラダー図のデバイス値が12000を超えてから動作を変更すると、可動アームがワークに接触してしまうことが判明したため、編集モードにおいて、しきい値を12000から10000に変更したいケースを想定する。まず、図13のユーザープログラム作成支援プログラム1300において、破線で囲む部分を選択して、PC側操作部8を構成するキーボードのEnterキーを押す等して、図14のプログラム編集画面1310を表示させる。このプログラム編集画面1310から、デバイス値入力欄1312において、値12000を、10000に修正して、「上書」ボタン1314を押下する。これにより、図15のユーザープログラム作成支援プログラム1300のプログラム表示領域410に示すように、ラダープログラムが変更される。
またユーザープログラムを編集する他の例として、モーションユニットの位置決め制御のパラメータを修正する手順を、図16のユーザープログラム作成支援プログラム1300に基づいて説明する。ここでは、履歴再生モードでトラブルの発生原因を検証した結果、ワークの加速が急すぎたことが判明したため、編集モードの切り替えて、ポイントパラメータNo1に移動する際のワークの速度を減少させることを考える。まず図16のユーザープログラム作成支援プログラム1300において、左側に表示されるプロジェクト表示欄420にツリー表示されるユニット構成から、モーションユニットの「ポイントパラメータ」を選択する。この状態で、変更したいパラメータを選択し、PC側操作部8であるキーボード等から値を入力する。ここで画面右側のポイントパラメータ編集欄1320において、速度指定欄1322から、速度を低い値(例えば300mm/s)に変更する。このような操作により、ユーザープログラムを所望の値に変更できる。
このようにしてユーザープログラムを編集した結果を保存する手順を、図17〜図18に基づいて説明する。ユーザープログラムを保存する際、運転記録データに含まれる元のユーザープログラムを編集してしまうと、履歴再生モードにおいてトラブル発生時のユーザープログラムを再現できなくなるため、元のユーザープログラムとは別に保存する必要がある。ここでは、別のプロジェクトデータとして保存する場合を考える。まず、図17に示すユーザープログラム作成支援プログラム1300のファイルメニュー1330のように、通常のプロジェクトと同様の手順で、プロジェクトデータの保存操作を行う。ここで、ファイルメニュー1330から「プロジェクトを別名保存」1332を選択する場合は、図18に示すように「プロジェクトの別名保存」ダイヤログ画面1340が表示され、ユーザはプロジェクト名やデータファイルの保存場所を指定するよう促される。この手順であれば、運転記録データに含まれるユーザープログラムを維持したまま、新たなプロジェクトデータとして保存される。
一方、図17のファイルメニュー1330において「プロジェクトを上書き保存」1334や、一般的なショートカットキーであるCtrl+Sのキーボード操作を行って上書き保存しようとすると、保存制御部50Cが上書き保存を制御する。すなわち、上書き保存の指示に拘わらず、図18に示す「プロジェクトの別名保存」ダイヤログ画面1340を表示させて、別名でのプロジェクトデータの保存を促す。あるいは、図17の保存画面において、上書き保存を禁止するように、該当する「プロジェクトを上書き保存」をグレーアウトさせて選択できないようにしたり、「プロジェクトを上書き保存」をファイルメニューの選択肢として表示させないようにしてもよい。あるいは、自動的にプロジェクトデータを別名で保存することもできる。例えばファイル名に「−1」等の枝番号を付すなどして、別名のファイルを自動生成する。あるいはまた「プロジェクトを上書き保存」を選択すると、上書き保存操作が禁止されていることを示す上書き禁止ポップアップを表示させてもよい。
なお、既に別名での保存を行ったユーザープログラムに対して、さらに上書き保存を指示した場合は、運転記録データに含まれる元のユーザープログラムに対する操作ではないため、そのまま上書き保存が実行される。すなわち、上述した上書き保存操作を規制する保存制御部50Cの動作は、トラブル発生時の運転記録データに含まれる元のプロジェクトデータやユーザープログラムが未だ別名でコピーされて保存されていない場合に実行され、一旦別名で保存されると、上書き保存操作が許容される。
(運転記録データの保存操作)
以上のように、ユーザはPC2上にあらかじめ保存された、装置のバックアッププロジェクトに基づいて、運転記録データを再生できる。また、装置のバックアッププロジェクトがない場合は、運転記録データに保存されたプロジェクトデータに基づいて、運転記録を再生できる。ユーザは履歴再生モードで運転記録データを再生することにより、そのプロジェクトデータが対象とする処理の問題個所を見つけ、編集モードにてその問題個所を修正した場合、その変更内容をPC2上に保存する操作を行うことができる。
一方で運転記録の再生に、運転記録データ内のプロジェクトデータを使用していた場合、編集モードで編集したプロジェクトデータの保存操作実行時に、ユーザープログラム作成支援プログラムは、保存制御部で上書き保存禁止メッセージを出して、保存をブロックしてもよい。あるいは、新しいプロジェクトデータとして、PCのハードディスク等に保存してもよい。
(「上書き保存禁止」の手順)
このような保存制御部50Cによる「上書き保存禁止」処理の一例を、図19のフローチャートに基づいて説明する。まずステップS1901において、保存操作を開始をすると、ステップS1902において、運転記録データに保存されたプロジェクトデータを編集中か否かを判定する。編集中の場合は、ステップS1903において、ユーザに対して、保存できない旨のメッセージを表示し、保存処理をキャンセルする。一方、編集中でない場合は、ステップS1904に進んで保存処理を実行する。
(「新しいプロジェクトデータとして保存」の手順)
また保存制御部50Cによる「新しいプロジェクトデータとして保存」処理の一例を、図20のフローチャートに基づいて説明する。まずステップS2001において、保存操作を開始をすると、ステップS2002において、運転記録データに保存されたプロジェクトデータを編集中か否かを判定する。編集中の場合は、ステップS2003において、ユーザに対して、新しいプロジェクトとして保存するため、PC2上のファイル保存パスの入力を要求する。そしてステップS2004において、入力された保存パスに、プロジェクトの保存を実行する。一方、ステップS2002において編集中でない場合は、ステップS2005に進み、保存処理を実行する。
(保存したプロジェクトの照合機能)
編集後のプロジェクトデータは、通常のプロジェクトデータと同様に、ユーザープログラム作成支援プログラム1300が提供する照合機能によって、現在ユーザープログラム作成支援プログラムで表示しているプロジェクトと、PC2上に保存した編集後のプロジェクトデータの間の差分を確認することができる。例えば図21のユーザープログラム作成支援プログラム1300の画面において、ファイルメニュー1330から「プロジェクト−プロジェクトの照合」1336を選択すると、指定されたプロジェクトデータの差分を自動で抽出して、ユーザープログラム作成支援プログラム1300の画面上に表示させる。例えば、照合先のプロジェクトデータに対して追加された部分や変更された部分をハイライトさせつつ、削除された部分をグレーアウトさせる。また、差分を一覧表示させてハイライトさせてもよい。一例として、図13〜図15で編集したラダープログラムに対して、照合機能を実行した結果を図22に示す。図22はユーザープログラム作成支援プログラム1300でプロジェクトデータの比較表示を行う比較表示画面1350の一例を示している。この図に示す例では、ラダープログラム中で編集された項目について、ステップ番号と、照合元の値及び照合先の値を、赤文字で示している。このようにしてユーザは、参照先のプロジェクトデータ、例えばトラブル発生時のユーザープログラムに対して、編集した箇所を視覚的に把握することが容易となる。
●ロギングの設定(自動抽出と加除)
図23は、PC2のPC側CPU21が、PC側記憶装置22に記憶されているプロジェクトデータ編集プログラムを実行することで実現される機能を示している。これらの機能の一部又はすべては、ASICやFPGA等のハードウエア回路により実現されてもよい。ASICは特定用途集積回路の略称である。FPGAはフィールドプログラマブルゲートアレイの略称である。
図23のPC側CPU21は、プロジェクト作成部50と、ログ設定部51と、ログ表示制御部61の機能を実現する。なお本実施形態では、図23に示す機能をPC2上で実現することとしたが、本発明はこれに限られず、PLC1上で実現しても構わない。
(プロジェクト作成部50)
プロジェクト作成部50は、プログラム作成部63と、機能設定部62の機能を実現する。このプロジェクト作成部50は、表示部7にプロジェクトデータ71を作成するためのUIを表示し、PC側操作部8から入力されたユーザ指示に従ってプロジェクトデータ71を作成し、PC側記憶装置22に記憶する。UIはユーザーインターフェースの略称である。プロジェクトデータ71には、ユーザープログラムと、PLC1のユニット構成情報等が含まれている。
プログラム作成部63は、UIを介したユーザ操作に基づいて、ユーザープログラムを構成する複数のプログラム部品(各モジュール)を作成する。機能設定部62は、CPUユニット3の機能や拡張ユニット4の機能に関する設定を実行する。例えば、機能設定部62は、CPUユニット3に設けられた機能に対していずれかのデバイスを割り付けたり、拡張ユニット4に設けられた機能に対していずれかのデバイスを割り付けたりし、機能とデバイスとの関係を示す割付情報をユニット構成情報に書き込む。なおプロジェクト作成部50は、ユーザープログラムがどのようなプログラム部品から構成されているかを示すプログラム構成情報も、プロジェクトデータ71として記憶させる。PLC1全体がどのようなユニットから構成されるかを示すユニット構成情報も、プロジェクトデータ71として記憶させる。
(ログ設定部51)
ログ設定部51は、部品指定部52と、機能指定部60と、デバイス抽出部53と、手動設定部58と、推定部59の機能を実現する。このログ設定部51は、プロジェクトデータ71を解析することで、このプロジェクトデータ71に記述されているデバイスを抽出し、抽出されたデバイスをロギング対象として設定するためのログ設定データ72を作成する。ログ設定部51は各種の機能を有している。部品指定部52は、PC側操作部8から入力されるユーザ指示に従って、デバイスの抽出対象となるプログラム部品を指定する。また部品指定部52は、PC側操作部8から入力されるユーザ指示に従って、デバイスの抽出対象から除外されるプログラム部品を指定する。
デバイス抽出部53は、追加部54と、削除部55と、マージ部56と、特定部57の機能を実現する。このデバイス抽出部53は、プロジェクトデータ71を解析することでプロジェクトデータ71に記述されているデバイスを抽出し、ログ設定データ72を作成する。追加部54は、部品指定部52により抽出対象として指定されたプログラム部品を解析し、プログラム部品に記述されているデバイスを抽出し、抽出リストに追加する。 削除部55は、部品指定部52により除外対象として指定されたプログラム部品を解析し、プログラム部品に記述されているデバイスを抽出し、抽出されたデバイスを抽出リストから削除する。あるいは、削除部55は、抽出されたデバイスを除外リストに追加する。マージ部56は、複数のプログラム部品からそれぞれ抽出されたデバイスの内、重複して抽出されたデバイスを抽出リストから削除する。特定部57は、プロジェクトデータ71においてメモリカードに対する命令語を検知し、当該命令語の対象となっているデバイスを特定し、特定されたデバイスを抽出リストに追加する。
本実施形態では、部品指定部52がプログラム部品を指定した後、追加部54が、その指定されたプログラム部品を解析することにより、ロギング対象となるデバイスを抽出・追加することとしたが、本発明はこれに限られない。例えば、追加部54は、プロジェクトデータ71に含まれる一又は複数のプログラム部品を先に解析することでデバイスを抽出し、抽出されたデバイスを抽出リストに追加した後で、部品指定部52によって指定されたプログラム部品に記述されたデバイスを抽出し、これを抽出リストへ追加するようにしてもよい。
同様にして、削除部55は、プロジェクトデータ71に含まれる一又は複数のプログラム部品を先に解析することで抽出リストを作成した後で、部品指定部52によって指定されたプログラム部品に記述されたデバイスを抽出し、これを抽出リストから削除するようにしてもよい。
なお、本実施形態では、説明の便宜上、追加部54と削除部55を分けているが、一つの機能ブロックであってもよいことは言うまでもない。
手動設定部58は、PC側操作部8を通じて入力されるユーザ指示に従って一つのデバイスや、関連した一連のデバイスを抽出リストに追加する。推定部59は、デバイス抽出部53により記録対象として抽出されたデバイスの数に基づきPLC1によるデバイス値の記録がユーザープログラムの実行に与える影響を推定する。ロギングによってデバイス値の数に相関した遅延時間がスキャンタイムに加算される。よって、推定部59は、デバイス値の数に所定係数を乗算することで遅延時間を求め、遅延時間を推定結果として表示部7に表示してもよい。この遅延時間はスキャンタイムの伸びと呼ばれてもよい。
機能指定部60は、PC側操作部8から入力されるユーザ指示に従って、デバイスの抽出対象となるCPUユニット3の機能や拡張ユニット4の機能を指定する。また、機能指定部60は、PC側操作部8から入力されるユーザ指示に従って、デバイスの抽出対象から除外されるCPUユニット3の機能や拡張ユニット4の機能を指定する。追加部54は、機能指定部60により抽出対象として指定された機能のユニット構成情報を解析し、ユニット構成情報により当該機能に割り付けられたデバイスを抽出し、抽出リストに追加する。削除部55は、機能指定部60により除外対象として指定された機能のユニット構成情報を解析し、ユニット構成情報により当該機能に割り付けられているデバイスを抽出し、抽出されたデバイスを抽出リストから削除する。マージ部56は、複数の機能のそれぞれについて抽出されたデバイスの内、重複して抽出されたデバイスを抽出リストから削除する。特定部57は、プロジェクトデータ71においてメモリカードに対する命令語を検知し、当該命令語の対象となっているデバイスを特定し、特定されたデバイスを抽出リストに追加する。
ログ表示制御部61は、PLC1において生成されたログデータ73を、ログデータ保存部74に保存する。ログデータ保存部74は、メモリカード36A等が利用できる。ログデータ保存部74に保存されたログデータ73を、メモリカード36Aを介して読み出し、表示部7にログデータ73を表示する。例えば、ログ表示制御部61は、ログデータ73に記録されているデバイス値と、プロジェクトデータ71のプログラム部品とを関連付けて表示部7に表示してもよい。ログ表示制御部61は、プログラマブルロジックコントローラ用のエンジニアリングツールの中核をなす。またログデータ73は、デバイス値の他、カメラ部で撮像した画像データ等を含めてもよい(詳細は後述)。これらプロジェクトデータとログデータを含めて運転記録データとしてパッケージ化して保存する。あるいはプロジェクトデータとログデータとを関連付けて別々のファイルで保存し、プロジェクトデータ又はログデータの一方を開くと、他方のファイルも関連付け情報を参照して読み出し可能としてもよい(詳細は後述)。
●ロギングの実行
図24はCPUユニット3のPLC側CPU31の機能を示している。これらの機能の一部又はすべてはASICやFPGA等のハードウエア回路により実現されてもよい。ASICは特定用途集積回路の略称である。FPGAはフィールドプログラマブルゲートアレイの略称である。
PLC側CPU31は、PC2から受信したプロジェクトデータ71とログ設定データ72をPLC側記憶装置32に記憶しているものとする。実行部80は、ユーザープログラムを繰り返し実行するラダー実行エンジン80aと、このラダー実行エンジン80aを制御したり、拡張ユニット4との入出力リフレッシュを実行したりするユニット制御部80bと、を有している。実行部80のラダー実行エンジン80aは、プロジェクトデータ71に含まれるユーザープログラムを繰り返し実行し、ユーザープログラムに従って拡張ユニット4を制御する。なお、実行部80のラダー実行エンジン80aは、ユーザープログラムに従って、デバイス部34のCPUユニットデバイス部34aに保持されている出力系のデバイスにデバイス値を書き込んだり、CPUユニットデバイス部34aに保持されている入力系のデバイスからデバイス値を読み込んだりする。
一方で、実行部80のユニット制御部80bは、入出力リフレッシュにより取得した拡張ユニット4に関するデバイス値を、拡張ユニットデバイス部34bに読み書きする。また、CPUユニット3と拡張ユニット4は、ユニット間バス90によって電気的に接続されており、ユニット制御部80bは、このユニット間バス90における通信制御を行う機能、いわゆるバスマスタとしての機能を有している。ユニット制御部80bがバスマスタとして機能する場合には、図23を用いて説明したユニット構成情報、すなわち、PLC1全体がどのようなユニットから構成されるかを示す情報に基づいて、各拡張ユニット4とリフレッシュ通信を行う。
記録部81は、ログ設定データ72に従ってデバイス部34(CPUユニットデバイス部34a又は拡張ユニットデバイス部34b)からデバイス値を取得したり、拡張ユニット4のバッファメモリからデバイス値を取得したりして、ログデータ73としてメモリ(例えばリングバッファ)に書き込む。上述されたように、記録部81は、END処理の際等に、ロギング処理を実行する。
END処理におけるロギング処理について、更に詳細に説明する。ログ設定データ72には、部品指定部52によって指定されたプログラム部品に記述されたデバイスや、機能指定部60によって指定された機能(例えばユニットモニタによる監視の対象)に割り付けられたデバイスが、ロギング対象として含まれている。前者のデバイスについては、END処理の際に、ログデータ73に書き込む一方で、後者のデバイスについては、END処理の際に、拡張ユニット4から対象となるデバイス(UG)のデバイス値を読み出して、ログデータ73に書き込む。
ここで、モータの現在座標や指令座標の更新周期(いわゆる制御周期)は、ラダープログラムのスキャン周期と比べて格段に短い。したがって、本実施形態では、スキャン周期と同期してUGのデバイス値を読み出すようにしているので、全ての現在座標や指令座標がログデータ73に書き込まれるわけではない。しかし、本発明はこれに限られず、例えば、拡張ユニット4のメモリに、制御周期ごとに現在座標や指令座標を格納していき、スキャン周期のタイミングで、それまで格納した複数の現在座標や指令座標等を読み出すように構成することも可能である。
また、記録部81は、時刻管理部83により保持されている時刻情報をログデータ73の各レコードに付与する。これによりログデータ73には時系列にデバイス値が並べられる。
ロギング対象となるデバイスは、基本的に、ログ設定データ72のロギング対象リストによって指定されるが、検知部82によって追加のデバイスが指定されてもよい。検知部82は、例えば、デバイス部34に含まれているいずれかのデバイスに対する外部機器からのデバイス値の書き換えを検知してもよい。一般にデバイス値はユーザープログラムに従って書き換えられる場合と、外部機器によって書き換えられることがある。このような書き換えはユーザープログラムを解析するだけでは事前に把握することができない。記録部81は、検知部82によりデバイス値の書き換えが検知されたデバイスをロギング対象に追加してもよい。一般に外部機器からのデバイス値の書き換えは、ユーザにとって想定外の事象の原因となりやすい。よって、記録部81は、外部機器により書き換えられたデバイス値をロギングすることで、ユーザによるプログラムの改良に役立つであろう。
ところで、END処理において、ユーザープログラムとは無関係に発行されるUG読み出し命令が発行されることがある。UGはバッファメモリを示すデバイス種別である。検知部82は、ユーザープログラムとは無関係に発行されるUG読み出し命令を検知してもよい。記録部81は、検知部82により検知されたUG読み出し命令の対象となっているバッファメモリを特定し、特定したバッファメモリを記録対象として追加してもよい。この拡張ユニット4がモーションユニットである場合、このようなバッファメモリには、トルク値や現在座標位置等が記憶されている。
検知部82はFPGA等により実現されてもよい。実行部80はASICにより実現されてもよい。この場合、実行部80はPLC側記憶装置32に対してアドレス線を用いて読み出し/書き込み対象となっているデバイスのアドレスを指定する。よって、検知部82はこのアドレス線を監視することで、動的に、デバイス値を更新されたデバイスを検知してもよい。これはユーザープログラムに記述されていないデバイスを記録対象として追加する際に有用であろう。
検知部82は実行部80に設けられてもよい。この場合、実行部80は、デバイス部34の特定のデバイスに対してデバイス値を書き込むと共に、このデバイス値とデバイス名(デバイス番号)をログデータ73に書き込んでもよい。この手法は、ユーザープログラムに記述されていないデバイスであって、動的に割り付け割れるデバイスを記録対象として追加する際に有用であろう。
このように記録部81はログ設定データ72に含まれているデバイスリストとは無関係にデバイスを記録してもよい。極端な場合、ユーザはログ設定データ72を作成せずに、ログデータ73を取得可能となる。例えば、実行部80が起動すると、実行部80は、デバイス部34におけるすべてのデバイスからデバイス値を取得する。検知部82は、デバイスを監視しているため、実行部80がデバイス値を読み出したことを検知し、記録部81にデバイス値を読み出されたデバイスの情報(アドレス情報)を伝達する。記録部81は、検知部82により伝達されたアドレス情報に基づきデバイス部34に含まれているすべてのデバイスからデバイス値を読み出してログデータ73に書き込む。それ以降もデバイス部34へのアクセスを検知部82が検知するたびに、記録部81はデバイス値をロギングする。
ところで、記録部81はスキャン周期ごと、又は所定の収集周期ごとにデバイス値をログデータ73に書き込んでもよい。例えば、一周期内で検知部82が複数回にわたるデバイスへのアクセスを検知したとしても、記録部81は、最後のアクセスが検知されたときのデバイス値だけでログデータ73に書き込んでもよい。これにより、ログデータ73のデータサイズを削減することが可能となる。
実行部80はデバイスを保持するキャッシュを有していてもよい。この場合、検知部82はキャッシュを監視することで、デバイスの書き込みを検知してもよい。
ログ設定データ72には記録対象となるデバイスを示すデバイスリストが含まれているが、記録の除外対象となるデバイスを示すデバイスリストが含まれていてもよい。この場合、記録部81は、除外対象となるデバイスへのアクセスを検知部82が検知すると、そのデバイスについてのデバイス値の記録をスキップする。
検知部82は実行部80による拡張ユニット4のバッファメモリへのアクセスを検知してもよい。この場合、実行部80は、拡張ユニット4のバッファメモリから読み出したデバイス値をPLC側記憶装置32内に確保されたバッファ等に書き込む。記録部81はバッファからデバイス値を読み出してログデータ73に書き込む。
実行部80はユーザープログラムを繰り返し実行し、ユーザープログラムに従ってデバイス値を書き換える。検知部82が実行部80に実装されている場合、実行部80はデバイス値を書き換える命令語を検知すると、その命令語と共にデバイス値を記録部81に出力する。記録部81は、命令語、デバイス値及びタイムスタンプ(デバイス値を取得した時刻)をログデータ73に書き込んでもよい。
ところで、ログ設定データ72には、ログデータ73のデータ形式(例:バイナリー形式やテキスト形式)が含まれてもよい。データ形式としては、10進数16ビット、10進数32ビット、±10進数16ビット、±10進数32ビット、16進数16ビット、16進数32ビット、文字列、Float、DoubleFloat等が、デバイスごとに設定されてもよい。このようなデータ形式はプログラム部品における命令語を解析することで判別可能である。
出力部84は、ユーザープログラムの実行が終了したとき、或いは、メモリカードへの保存トリガリレーがONした場合等、所定の出力条件が満たされると、プロジェクトデータ71、ログデータ73、画像データをメモリカード36Aに書き込む。所定の出力条件が満たされるまでは、ログデータ73がメモリ(例えばリングバッファ)に記録されていき、容量が一杯になると、一番古いログデータ73が消去され、新しいログデータ73が追加記録されていく(いわゆるFIFO形式で記録する)。このメモリカード36AはCPUユニット3から取り外されて、PC2の装着部に装着される。これにより、PC2の表示部7にログデータ73が表示されるようになる。なお、出力部84は、PLC側通信部33を介してPC2やクラウド等にログデータ73を送信してもよい。
なお、本実施形態では、所定の出力条件が満たされたときに、ログデータ73等をメモリカード36Aに書き込むこととしたが、本発明はこれに限られず、例えば、内部メモリ(フラッシュメモリやハードディスク等の不揮発性メモリ)に保存しても構わない。また、少なくともログデータ73については、所定の出力条件が満たされたときにメモリカード36A又は内部メモリ37に保存される必要がある一方、プロジェクトデータ71については、所定の出力条件が満たされたときに限られない。例えば、PLC1が設定モード(PROGRAMモード)から運転モード(RUNモード)になったタイミングで、予めメモリカード36Aや内部メモリ37に保存しておいてもよい。
●ユニット構成情報の作成
図25は機能設定部62が実行するユニット構成情報の作成処理(ユニット設定)を説明する図である。機能設定部62はユニットエディタと呼ばれてもよい。機能設定部62はユニットエディタの起動を支持されると、ユニット設定UI150を表示部7に表示する。名称欄151は各ユニットの名称(例:型番等)を表示する欄である。なお、各ユニットには自動的にユニット番号が付与される。この例では、CPUユニット3にユニット番号として“0”が付与されている。入力領域欄152は入力系のデバイスを割り付けるための欄である。この例では、CPUユニット3に入力系のデバイスとしてR000からR015までのデバイスが割り付けられている。出力領域欄153は出力系のデバイスを割り付けるための欄である。この例では、CPUユニット3に出力系のデバイスとしてR500からR507までのデバイスが割り付けられている。占有領域欄154は、入出力混合系のデバイスを割り付けるための欄である。エンドユニットは、いわゆる終端ユニットである。ユーザはPC側操作部8を通じて拡張ユニット4の種類、接続順番、割り付けられるデバイスを設定する。機能設定部62は、拡張ユニット4の種類、接続順番(ユニット番号)、CPUユニット3と拡張ユニット4とのそれぞれに割り付けられるデバイスを示す情報をユニット構成情報に格納する。ユニット構成情報はユニット設定情報と呼ばれてもよい。ここでは、ユニットごとにデバイスが割り付けられているが、各ユニットの機能ごとにデバイスが割り付けられてもよい。機能設定部62はユニット構成情報をプロジェクトデータ71の一部として管理している。
このようにユニット構成情報には各ユニットに割り付けられているデバイスを示す情報や各機能に割り付けられているデバイスを示す情報が含まれている。そのため、デバイス抽出部53はユニット構成情報を参照することで、各ユニットに割り付けられているデバイスや各機能に割り付けられているデバイスを抽出することができる。
<デバッグ>
図26はユーザにより実行されるユーザープログラムのデバッグ処理の概要を示すフローチャートである。
ステップS2601でユーザはPC2を操作し、複数のプログラム部品から構成されるユーザープログラムを作成し、ユーザープログラムを含むプロジェクトデータ71を作成する。プログラム作成部63はユーザ入力に従ってユーザープログラムを作成し、PC側記憶装置22に格納する。プロジェクト作成部50はユーザ入力に従ってプロジェクトデータ71を作成し、PC側記憶装置22に格納する。プロジェクトデータ71は、プロジェクトデータ71又はユーザープログラムを識別するための識別情報を含む。プロジェクト作成部50は、プロジェクトデータ71又はユーザープログラムに対して演算を実行してハッシュ値又は誤り検出符号等を求め、これらを識別情報としてプロジェクトデータ71に付加してもよい。なお、識別情報はGUID(グローバル一意識別子)等であってもよい。
ステップS2602でユーザはPC2を操作し、プロジェクトデータ71をPLC1に転送する。プロジェクト作成部50はプロジェクトデータ71をPC側記憶装置22から読み出し、PC側通信部23を介してPLC1へ送信する。PLC1のCPUユニット3はプロジェクトデータ71を受信すると、PLC側記憶装置32に書き込む。
ステップS2603でユーザはCPUユニット3のPLC側操作部6を操作し(例えば、PROGRAMモードからRUNモードに切り替えるモード切替スイッチを操作することにより)、プロジェクトの実行を指示する。実行部80はプロジェクトデータ71に含まれているユーザープログラムを実行する。記録部81はデバイス値等をロギングし、ロギングしたデバイス値を一時記録部91aに格納(記録)する。出力部84の内の保存部93は、所定の出力条件が満たされると、一時記録部91aに記録されているデバイス値や、上述した画像データを、メモリカード36A又は内部メモリ37に保存することで、ログデータ73を作成する。
また、保存部93は、ログデータ73に加えて、プロジェクトデータ71をメモリに保存する。これにより、PC2において、トラブル発生時のプロジェクトデータ71を使って、トラブル発生時の動きをモニタ上で再現できるようになる。詳細については後述する。
また、保存部93は、プロジェクトデータ71に加えて、プロジェクトデータ71の識別情報(ハッシュ値等)をメモリに保存する。これにより、PC2は、その識別情報を使って、現在の(リプレイ対象にしようとしている)プロジェクトデータが、実際のトラブル発生時のプロジェクトデータ71と一致するか否かを検証できるようになる。詳細については後述する。
なお、本実施形態では、所定の出力条件が満たされたタイミングで、ログデータ73に加えて、プロジェクトデータ71及びその識別情報をメモリに保存することとしたが、本発明はこれに限られない。例えば、PLC1の運転開始前、運転開始時、又は運転中に、プロジェクトデータ71及びその識別情報をメモリに保存しておき、所定の出力条件が満たされたタイミングで、ログデータ73のみをメモリに保存するようにしてもよい。要するに、所定の出力条件が満たされた時点で、ログデータ73と、プロジェクトデータ71と、その識別情報とが対応付けられた状態で、メモリに保存されていればよい。
また、本実施形態では、プロジェクトデータ71をメモリに保存しているが、本発明はこれに限られず、例えば、プロジェクトデータ71に代えて、プロジェクトデータ71の識別情報のみをメモリに保存するようにしてもよい。この場合、PC2における現在のプロジェクトデータは、実際のトラブル発生時のプロジェクトデータ71と一致することを前提としている。すなわち、プロジェクトデータをPLC1に転送した後、現在のプロジェクトデータは編集・改変されていないことを前提としている。仮に、両データが不一致と判定された場合には、ユーザは、現在のプロジェクトデータが、実際のトラブル発生時のプロジェクトデータ71とは異なることを認識した上でリプレイを行えばよいので、ユーザがこれを認識しない状態でリプレイ(不正確なトラブルシューティング)が行われるのを防ぐことができる。
ステップS2604でユーザはCPUユニット3のPLC側操作部6を操作し、プロジェクトデータ71とログデータ73をPC2へ転送するよう指示する。或いは、PC2のPC側操作部8を操作して、メモリカード36Aに書き込まれたプロジェクトデータ71、プロジェクトデータ71の識別情報、及びログデータ73を読み出してもよい。出力部84はプロジェクトデータ71とログデータ73をPC2へ送信する。なお、出力部84はプロジェクトデータ71の転送が禁止されていると判定した場合に、プロジェクトデータ71の識別情報をログデータ73に付加する構成を採用してもよい。プロジェクトデータ71の識別情報とログデータ73とは別々に送信されてもよい。出力部84は、メモリカード36Aに書き込むための所定の条件が成立したタイミングで、プロジェクトデータ71又はユーザープログラムに対して(例えばハッシュ関数を用いた)演算を実行してハッシュ値又は誤り検出符号等を求め、これらを識別情報としてログデータ73に付加してもよい。なお、PC2が実行する識別情報の作成ルールと、CPUユニット3が実行する識別情報の作成ルールとが一致していれば、どのようなルールが採用されてもよい。
ステップS2605でユーザはPC2を操作し、ログデータ73を再生(リプレイ)しつつトラブルの原因究明を行って、プロジェクトデータ71を構成するユーザープログラムのデバッグを実行する。ログデータ73の再生は、ログデータ73に含まれている時系列のデバイス値を波形として表示部7に表示することや、デバイス値をユーザープログラムに関連付けて表示することや、ログデータ73に含まれている時系列の画像データを表示部7に表示することを含む。ログ表示制御部61は、仮想的な時刻を計時する内部時計を有しており、内部時計に同期してログデータ73からデバイス値を取得して表示部7に表示する。プロジェクトデータ71がPLC1から送信されないこともある。この場合、ログ表示制御部61は、PC側記憶装置22に保持されているプロジェクトデータ71(マスタデータ)のユーザープログラムを使用して、デバイス値をユーザープログラムに関連付けて表示してもよい。ログデータ73を再生することによるトラブルの原因究明の詳細については、後述する。
ここで注意すべき点としては、ログデータ73を取得するために使用されたプロジェクトデータ71のバージョンと、PC2に保持されているプロジェクトデータ71のバージョンとが異なることがある。この場合、デバイス値をユーザープログラムに関連付けて表示することが不可能となるか、又はユーザープログラムとデバイス値との関連付が誤ってしまうことも考えられる。この場合、ログ表示制御部61は、プロジェクトデータの識別情報を使って、ログデータ73を取得するために使用されたプロジェクトデータ71のバージョンと、PC2に保持されているプロジェクトデータ71のバージョンとが異なることを示す警告を表示部7に表示してもよい。なお、ログ表示制御部61は、第一のバージョンのプロジェクトデータ71を使用して取得されたログデータ73を、PC2に保持されている第2のバージョンのプロジェクトデータ71に関連付けて表示するかどうかをユーザに問い合わせもよい。ユーザがこのような表示を希望する場合、ログ表示制御部61は、第一のバージョンのプロジェクトデータ71を使用して取得されたログデータ73を、PC2に保持されている第2のバージョンのプロジェクトデータ71に関連付けて表示部7に表示する。なお、バージョンは識別情報によって管理される。ユーザがログデータ73に問題がないことを確認すると、デバッグは不要であり、後続のステップS2606やステップS2607も不要である。ユーザはログデータ73を分析し、ユーザープログラムのバグ等を発見し、ユーザープログラムを修正する。プロジェクト作成部50はユーザ入力に従ってプロジェクトデータ71を修正(更新)し、PC側記憶装置22に格納する。
ステップS2606でユーザはPC2を操作し、プロジェクトデータ71をPLC1に転送する。なお、プロジェクトデータ71内のユーザープログラムが変更されると、識別情報が更新される。これにより、修正前のプロジェクトデータ71と修正後のプロジェクトデータ71とが区別可能となる。
ステップS2607でユーザはCPUユニット3を操作し、プロジェクトデータ71に含まれるユーザープログラムの実行を指示することで、プロジェクトデータ71を検証する。実行部80はプロジェクトデータ71に含まれているユーザープログラムを実行する。PLC1がユーザの想定通りに稼働していれば、ユーザはプロジェクトデータ71のデバッグに成功したと判断する。なお、PLC1がユーザの想定通りに稼働していなければ、記録部81によって再びデバイス値等をロギングし、保存部93によってログデータ73を作成する。そして、ユーザはステップS2604ないしステップS2607を再び実行する。
このようにユーザはログデータ73を参照しながらプロジェクトデータ71をデバッグできる。そのため、デバッグの効率が向上すると考えられる。
なお、プロジェクトデータ71の転送はメモリカード36Aを介して実行されてもよい。つまり、PC2はメモリカード36Aに書き込む。ユーザはメモリカード36AをPC2から取り外し、CPUユニット3にメモリカード36Aを取り付ける。CPUユニット3はメモリカード36Aからプロジェクトデータ71を読み出してPLC側記憶装置32に書き込む。同様に、ログデータ73の転送もメモリカード36Aを介して実行されてもよい。
<プロジェクト作成部50>
図27はプロジェクト作成部50の詳細を示している。機能設定部62はPC側操作部8から入力される情報に基づき拡張ユニット4のユニット構成情報、CPUユニット3の機能及び拡張ユニット4の機能を設定し、設定内容を示すユニット構成情報を作成する。CPUユニット3の機能の設定としては、IPアドレスの設定、FTPクライアントに関する設定、プロジェクトデータ71のアクセス権限の設定等がある。拡張ユニット4の機能の設定としては、入力チャネルの設定やPLC同士の通信に関する設定等がある。ユニット構成情報はプロジェクトデータ71の一部である。編集部311(図23に示すプログラム作成部63を兼ねてもよい)は、表示部7にユーザープログラムの編集UIを表示し、PC側操作部8から入力される情報に基づきユーザープログラムを編集する。デバッグ部314はプロジェクトデータ71を使用してユーザープログラムをデバッグする。付加部312はプロジェクトデータ71に識別情報を付加する。演算部313は識別情報(例:ハッシュ値や誤り検出符号)を演算により求める。なお、この演算部313による識別情報の演算(算出)機能については、出力部84が、同機能を発揮するようにしてもよい。
<ログ表示制御部61>
図28はログ表示制御部61の詳細を示している。プログラム表示モジュール321はプロジェクトデータ71に含まれるユーザープログラムと共に、ログデータ73に含まれるデバイス値を表示部7に表示するモジュールである。また、プログラム表示モジュール321は、ユーザープログラムのみならず、プロジェクトデータ71に含まれるプログラム構成情報、複数のプログラム部品、ユニット構成、ユニット毎の機能設定等、ユーザがプロジェクトデータ71の設定内容を視認するための各種情報を表示可能となっている。画像表示モジュール323は、ログデータ73に含まれる時系列の画像データを表示部7に表示する。波形表示モジュール322は、ログデータ73に含まれる時系列のデバイス値を波形化して表示部7に表示するモジュールである。再生制御モジュール324は、プログラム表示モジュール321によって表示される情報と波形表示モジュール322によって表示される情報とを時間的に同期させる。これらのモジュールはエンジニアリングソフトウエアと呼ばれてもよい。なお、画像表示モジュール323は、プログラム表示モジュール321の一機能(画像表示部)として具現化されてもよいし、波形表示モジュール322の一機能(画像表示部)として具現化されてもよい。
●プログラム表示モジュール
図29はプログラム表示モジュール321の詳細を示している。時刻UI330aは、ユーザープログラムと共に表示されるデバイスの取得時刻(表示時刻)を操作するためのUI(例:スライドバーやカーソル等)を提供する。表示時刻制御部331aは時刻UI330aにより指定された表示時刻を再生制御モジュール324に送出したり、再生制御モジュール324から通知された表示時刻を時刻UI330aに設定したりする。プログラム表示部332は、プロジェクトデータ71を表示部7に表示したり、識別情報に対応したプロジェクトデータ71をPC側記憶装置22から読み出して表示部7に表示したりする。また、プログラム表示部332はデバイス値取得部333aにより取得されたデバイス値を、ユーザープログラムに使用又は記述されているデバイスと関連付けて表示する。デバイス値取得部333aは、リアルタイム再生モードと履歴再生モード(ログ再生モード)とを有している。デバイス値取得部333aは、リアルタイム再生モードにおいて、PLC1のリアルタイム送信部にアクセスし、デバイス値を取得し、プログラム表示部332に渡す。デバイス値取得部333aは、ログ再生モードにおいて、図28の再生制御モジュール324にアクセスし、表示時刻とデバイス値を取得し、プログラム表示部332に渡す。
図9は、プログラム表示部332等によって表示部7に表示されるGUIの一例を示す模式図である。図9において、左欄のプロジェクト表示領域420には、プロジェクトデータ71を構成する様々な情報が表示されている。上から順に、ユニット構成(CPUユニット、モーションユニット、アナログ入力ユニット、カメラ入力拡張ユニット)、プログラム構成(毎スキャンモジュール、定周期モジュール、ユニット間同期モジュール、ファンクションブロック、マクロ)が表示されている。モーションユニットについては、機能設定として軸構成や軸制御の設定パラメータが表示されている。ユーザは、図9に示すGUI上において、軸構成や軸制御をダブルクリックすることで、これらの設定パラメータについて、どのような設定内容になっているかを確認することができる。また、プロジェクト表示領域420において、毎スキャンモジュールに対してMainとSubが表示されているところ、ユーザがMainをクリックすると、中央のラダーモニタ450のプログラム表示領域410に、Mainプログラムが表示される。このように、図28に示すプログラム表示モジュール321は、メモリカード36Aからプロジェクトデータ71を読み出して、プロジェクト表示領域420に各種情報を表示したり、プログラム表示領域410に所望プログラムを表示したりする。
ここで、プログラム表示領域410は、いわゆるラダーモニタ450の一部であり、リアルタイム再生モードにおいて単独で動作させることができるものである。×印をクリックすることで、ラダーモニタ450のみを非表示にすることも可能である。一方で、ログ再生モードでは、プログラム表示部332によって、運転記録を保存した際のプロジェクトに含まれるラダープログラムを再現することができるようになっている。また、プログラム表示部332は、ログ再生モードにおいて、デバイス値取得部333aを介してログデータ73に含まれるデバイス値を、Mainプログラムに記述されているデバイスと関連付けて表示する。表示対象となるデバイス値は、時刻指定カーソル404によって指定された時刻に対応するデバイス値となる(より詳細は、後述する図32を用いて説明する)。
図9でいえば、時刻表示領域409に表示されている20XX/10/01の18:52:54と対応付けられたデバイス値が、Mainプログラムに記述されているデバイスと関連付けて表示される。この日付の右側に表示された[35000/74286]は、全スキャン回数74286に対する現在のスキャン回数35000を示している。ユーザは、時刻指定カーソル404をドラッグして移動させることで、表示時刻及びスキャン回数の更新と共に、デバイス値の表示も更新される。例えば、更新後の表示時刻において、ONしているリレーデバイスの箇所にはON表示(例えば色で塗潰す等)がなされ、OFFしているリレーデバイスの箇所にはOFF表示(例えば色抜き等)がなされる。再生ボタン406の機能等の詳細については、図32を用いて後述する。
図9において、右上欄には、カメラモニタ430の画像表示領域が設けられている。画像表示モジュール323は、プログラム表示モジュール321によってラダーモニタ450に表示された表示時刻と同期して、ログデータ73から画像データを読み出してカメラモニタ430の画像表示領域に表示する。図9では、表示時刻である20XX/10/01の18:52:54と対応付けられた画像データが、カメラモニタ430に表示されている。また、この表示時刻の右側には、282/601と表示されているが、これは、全撮像枚数601に対する現在の画像データの順番(282枚目)を表している。ユーザは、カメラモニタ430において、時刻指定カーソル404aをドラッグして移動させることで、表示時刻及び現在の画像データの順番を更新させることができる。
このとき、時刻指定カーソル404aの移動に伴って、上述したラダーモニタ450における時刻指定カーソル404も連動して移動する。例えば、時刻指定カーソル404aを、表示時刻20XX/10/01の19:00:00に合わせた場合には、ラダーモニタ450における時刻指定カーソル404も、表示時刻20XX/10/01の19:00:00の位置に追従して移動する。そして、時刻指定カーソル404の移動に伴って、ラダーモニタ450におけるデバイス値も更新される。ここでは時刻指定カーソル404aを移動させたが、逆も同様である。例えば、ラダーモニタ450における時刻指定カーソル404を移動させると、それに応じて、カメラモニタ430における時刻指定カーソル404aも移動する。このような処理動作が可能になるのは、プログラム表示モジュール321と、画像表示モジュール323とが、再生制御モジュール324を介して表示時刻に関する同期制御を実行しているからである。
また、図9において、右下欄には、ユニットモニタ440が表示されている。例えば、ユニットモニタ440は、モーションユニットにおけるバッファメモリ(UG)のデバイス値を表示する。より具体的には、ログ表示制御部61のユニット表示モジュール325は、再生制御モジュール324から現在再生すべき表示時刻を受け取ると、その時刻と対応付けられたデバイス値をメモリカード36Aから読み出して、ユニットモニタ440に表示させる。したがって、例えば図9でいえば、表示時刻20XX/10/01の18:52:54と対応付けられたデバイス値の一覧が、ユニットモニタ440に表示される。
図30は、ログ再生モードにおけるGUIを表示するためのデータソースを模式化した図である。図30に示すように、プロジェクト表示領域420は、プロジェクトデータ71に含まれるユニット構成、機能設定、プログラム構成、プログラム部品をメモリから読み出して、これらをツリー形式で表示する。ラダーモニタ450は、プログラム構成(どのようなプログラム部品からなるか)、プログラム部品をメモリから読み出して、ユーザによって指定されたプログラム部品を表示すると共に、ログデータ73から表示時刻に対応するデバイス値を読み出して表示する。カメラモニタ430は、ユニット構成(カメラモニタがあるか否か)と機能設定(カメラモニタの機能。例えば複数ポートある場合にはポート番号、撮像周期やゲイン設定等)等の情報に基づいて、ログデータ73から表示時刻に対応する画像データを読み出して表示する。ユニットモニタ440は、ユニット構成(どのようなユニットがあるか)と機能設定(モーションユニットであれば軸構成や軸制御等)等の情報に基づいて、ログデータ73から表示時刻に対応するデバイス値を読み出して表示する。
図9や図30から分かるように、再生制御モジュール324の機能によって、プログラム表示モジュール321、画像表示モジュール323、ユニット表示モジュール325を同期制御して、連携させることができる。なお、波形表示モジュール322の連携の詳細については後述する。
ここで、本実施形態では、現在のプロジェクトデータが、実際のトラブル発生時のプロジェクトデータ71と一致するか否かを検証できるようにしている。より具体的には、図29に示すプログラム表示モジュール321の内の照合部334は、PLC1から出力されるプロジェクトデータ71(ユーザープログラム)の識別情報と、PC側記憶装置22に記憶されているプロジェクトデータ71(ユーザープログラム)の識別情報とを照合し、照合結果を警告部335に出力する。警告部335は、PLC1から出力される、運転記録を保存した時のプロジェクトデータ71(ユーザープログラム)の識別情報と、PC側記憶装置22に記憶されているプロジェクトデータ(ユーザープログラム)の識別情報とが不一致である場合に、警告を表示部7に表示させる。
なお、本実施形態では、2つのプロジェクトデータの識別情報を比較して、一致・不一致を検証することとした。より詳細には、プロジェクトデータに含まれるプログラム構成、複数のプログラム部品、ユニット構成、ユニット毎に機能設定に対し、それぞれ識別情報が付加されており、それら全てが一致するか否かにより検証することとした。しかし、本発明はこれに限られず、少なくとも、複数のプログラム部品から構成されるユーザープログラムの識別情報を比較して、一致・不一致を検証すればよい。
●再生制御モジュール324
図31は再生制御モジュール324の詳細を示している。デバイス値提供部341は、ログデータ取得部344によりログデータ73から取得されたデバイス値をプログラム表示モジュール321と波形表示モジュール322とに提供する。また、デバイス値提供部341は、ユニット表示モジュール325にも、ログデータ73から取得されたデバイス値を提供する。なお、ログデータ73から取得されたデバイス値は一時的にログデバイス345に格納されてもよい。プログラム表示モジュール321と波形表示モジュール322のデバイス値取得部333aはデバイス値提供部341にデバイス値を要求する。デバイス値取得部333aはログデバイス345からデバイス値を取得し、デバイス値取得部333aに送信する。時刻デバイス342は再生制御部343により設定された表示時刻を保持するデバイスである。時刻デバイス342に保持されているデバイス値(時刻情報)もデバイス値提供部341がデバイス値取得部333aへ送信してもよい。あるいは、再生制御部343がプログラム表示モジュール321の表示時刻制御部331aや波形表示モジュール322の表示時刻制御部に時刻情報を提供してもよい。再生制御部343は、表示時刻を計時するための仮想的な内部時計を有し、この内部時計に従って時刻デバイス342に保持されている時刻情報を更新する。再生制御部343は、表示時刻制御部331a、波形表示モジュール322の表示時刻制御部に時刻デバイス342に保持されている時刻情報を送信する。再生制御部343は、表示時刻制御部331a、波形表示モジュール322の表示時刻制御部から表示時刻の指定を受信すると、受信した表示時刻を内部時計に設定する(時刻合わせ)。よって、プログラム表示モジュール321の表示時刻制御部331aから表示時刻が指定されると、この表示時刻は再生制御部343を介して波形表示モジュール322の表示時刻制御部に伝達される。同様に、波形表示モジュール322の表示時刻制御部から表示時刻が指定されると、この表示時刻は再生制御部343を介して表示時刻制御部331aに伝達される。これによりプログラム表示モジュール321の表示時刻と波形表示モジュール322の表示時刻とが同期する。スロー再生、早送り再生、巻き戻し再生等を実現するために、再生制御部343は、PC側操作部8からのユーザ入力に従って内部時計の更新速度を変更する。再生制御部343は、ログデータ73に含まれている最も古いレコードの時刻情報を内部時計の初期値に設定してもよい。ログデータ取得部344は時刻デバイス342に保持されている表示時刻に関連付けられているデバイス値をログデータ73から取得して、デバイス値提供部341に渡す。
同様にして、再生制御部343は、プログラム表示モジュール321の表示時刻と波形表示モジュール322の表示時刻に加えて、画像表示モジュール323やユニット表示モジュール325の時刻を同期させるようにしてもよい。
なお、本実施形態では、ログ再生モードにおいて、プログラム表示モジュール321、波形表示モジュール322、画像表示モジュール323、ユニット表示モジュール325の各表示時刻を常に同期させることとしたが、本発明はこれに限られず、例えば、同期させるか否かをユーザが選択できるようにしてもよい。例えば、各モニタ画面上に同期有無のチェックボックスを設け、デフォルトでチェック有の状態にしてもよい。そして、ユーザは、同期したくないモジュールについて、チェックを外すことにより、そのモジュールについてだけ同期させないことも可能である。このように、ログ表示制御部61は、再生制御モジュールによって同期制御(追従制御)されるモジュールを選択する、選択機能を有していてもよい。
<プログラムの表示UI>
図32はプログラム表示モジュール321によって提供される表示UI400を示している。図9等で説明した表示UI400を別の観点から、更に詳述する。プログラム表示領域410は、プロジェクトデータ71のユーザープログラムを表示する領域である。この例ではプログラム表示領域410はラダープログラム(ラダー図)を表示している。プログラム表示部332は、ユーザープログラムに使用又は記述されているデバイスのデバイス値をデバイス値取得部333aにより取得し、ユーザープログラムと共に表示する。例えば、プログラム表示部332は、リレーデバイスがONであればONを示すアイコン401aをユーザープログラム上に重ねて表示してもよい。プログラム表示部332は、リレーデバイスがOFFであればOFFを示すアイコン401bをユーザープログラム上に重ねて表示してもよい。プログラム表示部332は、出力系のデバイスであるDM100のデバイス値をデバイス値取得部333aにより取得し、ユーザープログラムにおけるDM100の記述と重ねて表示してもよい。この例では、DM100の記述の下にデバイス値の表示領域403が設けられている。プログラム表示部332は表示領域403にデバイス値を表示する。なお、再生制御モジュール324は表示時刻の更新と共にデバイス値も更新するため、プログラム表示部332は、ユーザープログラムと共に表示されているデバイス値を更新する。
(再生制御欄402)
プログラム表示領域410の下段には、保存されたデバイス値等のログデータの再生を操作するための再生制御欄402を設けている。具体的には、時刻UI330aは時刻デバイス342から取得した表示時刻に応じて時刻指定カーソル404を右から左へ移動させる。時刻指定カーソル404はポインタ101によりドラッグ可能である。時刻指定カーソル404がポインタ101によりドラッグされたことを時刻UI330aが検知すると、表示時刻制御部331aは再生制御部343に表示時刻の更新を停止させ、時刻指定カーソル404のドラッグ量を再生制御部343に通知する。再生制御部343は、ドラッグ量に応じて内部時計のカウント値(表示時刻)を調整する。時刻UI330aは、表示時刻の更新速度(例:・・・、2.0倍、1.0倍、0.5倍、0.1倍、・・・)を速度指定部405に表示してもよい。なお、速度指定部405は、複数の更新速度のリストを表示し、その内の一つの更新速度を選択可能なプルダウメニューによって実現されてもよい。時刻UI330aは、速度指定部405に対するポインタ101によるクリックを検知すると、このようなプルダウメニューを表示し、更新速度の選択を受け付けてもよい。
再生ボタン406はデバイス値の時系列的な表示を指示するためのボタンである。時刻UI330aは再生ボタン406がポインタ101によりクリックされたことを検知すると、表示時刻制御部331aに表示時刻の更新を開始するよう再生制御部343に指示する。この指示はデバイス値の表示の開始の指示又は表示の再開の指示に相当する。ワンステップ逆再生ボタン407は、表示時刻をワンステップずつ更新(巻き戻し)しながらデバイス値を時系列的に表示することを指示するためのボタンである。時刻UI330aはワンステップ逆再生ボタン407がポインタ101によりクリックされたことを検知すると、表示時刻制御部331aに表示時刻を一ステップ戻すように指示する。ワンステップ再生ボタン408は、表示時刻をワンステップずつ更新しながらデバイス値を時系列的に表示することを指示するためのボタンである。時刻UI330aはワンステップ再生ボタン408がポインタ101によりクリックされたことを検知すると、表示時刻制御部331aに表示時刻を一ステップ進めるように指示する。なお、ワンステップ再生が実行されているときは、ワンステップ逆再生ボタン407又はワンステップ再生ボタン408が操作されない限り、再生制御部343は表示時刻を更新しない。ワンステップ再生が実行されているときに、再生ボタン406が操作されると、再生制御部343は速度指定部405により指定された更新速度で表示時刻の更新を再開する。時刻表示領域409は時刻デバイス342に保持されている表示時刻を表示する領域である。表示時刻制御部331aは、時刻デバイス342から取得された表示時刻を時刻表示領域409に表示する。
<表示部HMIのエミュレータ>
PLC1は外付けの表示装置である表示器HMIを接続可能である。表示器HMIはタッチパネル式の入力装置を有していてもよい。表示器HMIはPLC1のデバイス部34に保持されているデバイス値を読み出して表示装置に表示する。プロジェクト作成部50は表示器HMIに表示されるUIと、UIに表示されるデバイス値を設定し、プロジェクトデータ71に保存する。デバッグ部314は、表示器HMIのエミュータを有しており、プロジェクトデータ71に従ってエミュータを動作させることで、表示器HMIの動作を確認する。ログ表示制御部61は、表示器HMIのエミュレータに対してログデータ73のデバイス値を供給する。表示器HMIのエミュレータは、時系列的に提供されたデバイス値をUIに表示する。
<ログ表示に関するフローチャート>
●プログラム表示モジュール
図33はプログラム表示モジュール321によって実行される表示処理を示している。なお、ステップS3301、ステップS3302及びステップS3309はPLC1からプロジェクトデータ71を取得できない場合にのみ実行されてもよい。PLC1からプロジェクトデータ71を取得できる場合、PLC1からプロジェクトデータ71が使用される。PLC1からプロジェクトデータ71を取得できない場合、PC2に保持されているプロジェクトデータ71が使用される。
ステップS3301でPC側CPU21(照合部334)はPLC1に保持されているプロジェクトデータ71の識別情報と、PC2に保持されているプロジェクトデータ71の識別情報とを取得する。
ステップS3302でPC側CPU21(照合部334)はPLC1に保持されているプロジェクトデータ71の識別情報と、PC2に保持されているプロジェクトデータ71の識別情報とが一致するかどうかを判定する。両者が一致しなければ、PC側CPU21はステップS3309に進む。ステップS3309でPC側CPU21(警告部335)はPLC1に保持されているプロジェクトデータ71の識別情報と、PC2に保持されているプロジェクトデータ71の識別情報とが一致しないことを示す警告を表示部7に表示する。両者が一致する場合、PC側CPU21はステップS3303に進む。
ステップS3303でPC側CPU21(プログラム表示部332)はPLC1又はPC側記憶装置22からプロジェクトデータ71を取得する。
ステップS3304でPC側CPU21(プログラム表示部332)はPC側操作部8から入力された情報に基づきログ再生モードが選択されているのか、それともリアルタイム再生モードが選択されているのかを判定する。リアルタイム再生モードが選択されていれば、PC側CPU21はステップS3310に進む。ステップS3310でPC側CPU21(デバイス値取得部333a)は再生制御モジュール324を介さずにPLC1のリアルタイム送信部からデバイス値を取得する。ステップS3311でPC側CPU21(プログラム表示部332)はプロジェクトデータ71に含まれるユーザープログラムと共にデバイス値を表示部7に表示する。ログ再生モードが選択されていれば、PC側CPU21はステップS3305に進む。
ステップS3305でPC側CPU21(デバイス値取得部333a)は再生制御モジュール324を起動し、再生制御モジュール324から表示時刻とログデータ73のデバイス値と取得する。
ステップS3306でPC側CPU21(プログラム表示部332)はプロジェクトデータ71に含まれるユーザープログラムと共にデバイス値と表示時刻を表示部7に表示する。
ステップS3307でPC側CPU21(表示時刻制御部331a)は時刻UI330aにより時刻指定が検知されたかどうかを判定する。上述したように時刻指定は時刻指定カーソル404の操作によって実行される。時刻指定が検知されていなければ、PC側CPU21はステップS3305に戻る。時刻指定が検知されていれば、PC側CPU21はステップS3308に進む。
ステップS3308でPC側CPU21(表示時刻制御部331a)は再生制御モジュール324の再生制御部343に、時刻指定カーソル404により入力された指定時刻を通知する。PC側CPU21はステップS3305に戻る。
●波形表示モジュール
図34は波形表示モジュール322によって実行される表示処理を示している。
ステップS3401でPC側CPU21(波形表示部336)はPC側操作部8から入力された情報に基づきログ再生モードが選択されているのか、それともリアルタイム再生モードが選択されているのかを判定する。リアルタイム再生モードが選択されていれば、PC側CPU21はステップS3406に進む。ステップS3406でPC側CPU21(波形表示モジュール322のデバイス値取得部)は再生制御モジュール324を介さずにPLC1のリアルタイム送信部からデバイス値を取得する。ステップS3407でPC側CPU21(波形表示部336)はデバイス値を表示部7に表示する。ログ再生モードが選択されていれば、PC側CPU21はステップS3402に進む。
ステップS3402でPC側CPU21(波形表示モジュール322のデバイス値取得部)は再生制御モジュール324を起動し、再生制御モジュール324からデバイス値と表示時刻を取得する。
ステップS3403でPC側CPU21(波形表示部336)はデバイス値と表示時刻を表示部7に表示する。
ステップS3404でPC側CPU21(波形表示モジュール322の表示時刻制御部)は時刻UI330bにより時刻指定が検知されたかどうかを判定する。上述したように時刻指定はバー103によって実行される。時刻指定が検知されていなければ、PC側CPU21はステップS3402に戻る。時刻指定が検知されていれば、PC側CPU21はステップS3405に進む。
ステップS3405でPC側CPU21(波形表示モジュール322の表示時刻制御部)は再生制御モジュール324の再生制御部343に、バー103により入力された指定時刻を通知する。PC側CPU21はステップS3402に戻る。
●再生制御モジュール
図35は再生制御モジュール324によって実行される再生制御を示している。
ステップS3501でPC側CPU21(ログデータ取得部344)はPLC1からログデータ73を取得し、PC側記憶装置22に格納する。
ステップS3502でPC側CPU21(再生制御部343)は内部時計の時刻を初期化する。
ステップS3503でPC側CPU21(再生制御部343)は内部時計の時刻を取得し、時刻を時刻デバイス342に格納する。
ステップS3504でPC側CPU21(再生制御部343)は時刻デバイス342に保持されている表示時刻に対応するデバイス値をログデータ73から取得し、ログデバイス345に格納する。これにより、デバイス値提供部341はプログラム表示モジュール321や波形表示モジュール322に対してデバイス値と表示時刻とを提供可能となる。
ステップS3505でPC側CPU21(再生制御部343)は表示時刻制御部331aから時刻指定を受信したかどうかを判定する。時刻指定を受信していれば、PC側CPU21はステップS3506に進む。時刻指定を受信していなければ、PC側CPU21はステップS3507に進む。
ステップS3506でPC側CPU21(再生制御部343)は表示時刻制御部331aからの時刻指定に従って内部時計の時刻を変更する。
ステップS3507でPC側CPU21(再生制御部343)は表示時刻制御部331aから更新速度の変更指示を受信したかどうかを判定する。変更指示を受信していれば、PC側CPU21はステップS3508に進む。変更指示を受信していなければ、PC側CPU21はステップS3503に進む。
ステップS3508でPC側CPU21(再生制御部343)は表示時刻制御部331aから指定された更新速度に従って内部時計の更新速度を変更する。その後、PC側CPU21はステップS3503に進む。
(イベント履歴表示機能)
また本実施形態に係るPLC用エンジニアリングツールは、トラブル解決につながるイベントログを厳選して記録し、表示させることができる。PLCやその拡張ユニット4には、発生した各種イベントを記録するイベントログ機能が存在している。また、デバイスの値を、制御周期毎、任意周期、書き換え毎等のタイミングで記録するロギング機能も存在している。ユーザはトラブルが発生した時に、それらの機能を組み合わせることにより、事後的に原因を探ることができる。しかしながら、各種のログ機能は、PLC上の不揮発性記憶領域に主に記録されることが多く、このようなPLCの不揮発性記憶領域は、サイズに制約があることが多い。また、ログの件数が増えて記憶領域が上限に達すると、新しいログを残すため古いログから順次消去していくことが一般的である。このため、発生しているログが数千件や数万件のオーダーになると、トラブル解決に繋がる原因のログが消去されている可能性が高くなり、トラブルの原因追跡が難しくなるという問題があった。これに対して、記録時間を延ばすためユーザが保存対象となるイベントを絞り込むと、今度はトラブル解決に役立つイベントを保存し損なうおそれが出てくる。また一方で、記録が消去されず残っていたとしても、表示される件数が多いとトラブル解決に繋がるイベントが他のイベントに埋もれてしまい、見つけ難くなる。
そこで本実施形態に係るPLC用エンジニアリングツールでは、トラブル解決に繋がるイベントを厳選して記録する。またその厳選して記録されたイベントを表示する際には、フィルタして表示したり、関連するログ情報を表示したりすることができ、これによってユーザのトラブル解決を容易にすることが可能となる。このようなPLC用エンジニアリングツールの一例を、図36のブロック図に示す。
PLC用エンジニアリングツールは、PLC1の動作を規定するユーザープログラムを評価するためのツールである。図36は、PLC用エンジニアリングツールである専用のプログラムをインストールしたPC2に、PLC1を接続したプログラマブルロジックコントローラシステムを示している。このPLC用エンジニアリングツールは、専用プログラムをインストールしたPC2で実現しているが、本発明はPLC用エンジニアリングツールを専用プログラムをインストールしたPCに限定するものでなく、専用のハードウェアでPLC用エンジニアリングツールを実現してもよい。また図36の例では、PC2とPLC1が別体で構成されているが、これらを統合してもよい。
図36に示すPLC1も、上述したPLCと同様の構成を備える。すなわち、ユーザープログラムを繰り返し実行するプログラム実行部514、このプログラム実行部514によって参照される記憶領域であるデバイスを有するデバイス部34、このデバイス部34に記憶されているデバイス値を現在時刻と共にログデータとして時系列に記録すると共に、PLC1又はこのPLC1により制御される被制御装置にて発生した複数のイベントを発生時刻と共にイベントデータとして時系列に記録する一時記録部91a、及び運転時において所定の保存条件が満たされるとこの一時記録部91aに記録されているログデータ及びイベントデータを保存する保存メモリ36を備える。そしてPLC用エンジニアリングツールは、このPLC1において実行される、グラフィカルプログラミング言語で記述されるユーザープログラムの作成を支援するためのプログラム作成支援装置である。
図36に示すPLC用エンジニアリングツールは、表示部7と、PC側CPU21と、PC側記憶装置22と、PC側メモリ部11と、PC側操作部8と、PC側通信部23とを備えている。表示部7は、ラダー図などのユーザープログラムを表示させる。また表示部7は、PC2に接続したモニタとする他、表示器HMIを利用してもよい。
PC側記憶装置22は、運転記録データ保持部22bの機能を実現する。運転記録データ保持部22bは、PLC1の運転時に保存メモリ36に保存されたログデータ及びイベントデータを、運転記録データとして記憶する。
PC側CPU21は、記録設定部12と、デバイス表示制御部13と、イベント表示制御部14と、選択受付部16の機能を実現する。イベント表示制御部14は、運転記録データ保持部22bから読み出したイベントデータに含まれる複数のイベント及びこの複数のイベントの各々の発生時刻を、表示部7に一覧表示する。選択受付部16は、イベント表示制御部14により一覧表示された複数のイベントの中から一つの選択を受け付ける。デバイス表示制御部13は、運転記録データ保持部22bから読み出したログデータに含まれ、かつ、選択受付部16により選択されたイベントの発生時刻に対応する時刻に記録されたデバイス値を、ユーザープログラム上に重ねて表示する。イベント表示制御部14は、PLC1の動作状態又はこのPLC1により制御される被制御装置の動作状態を変更する特定イベントを、表示部7上に選択的に一覧表示するよう構成している。
また記録設定部12は、PLC1の一時記録部91aに対し、複数のイベントのうち特定イベントのみを記録するよう設定する。
ここで特定イベントは、プログラム実行部514によるユーザープログラムの実行と独立してユーザが行った操作に関するイベントを含む。ユーザ操作に関するイベントとしては、例えばユーザープログラム及びPLC1の構成情報を含むプロジェクトデータの書き換え、PLC1の設定を行う設定モードと、PLC1上でユーザープログラムを実行させる運転モードとのモード切替、PLC1に接続可能なケーブルの挿抜、PLC1に取り付け可能な記憶媒体の挿抜、被制御装置の電源のON/OFF等が挙げられる。
一方でイベント表示制御部14は、プログラム実行部514によるユーザープログラムの実行に従って、PLC1内で自動的に実行される処理に応じたイベントを非表示とする。このような自動実行される処理に応じたイベントとしては、例えばPLC1と接続された外部装置とTCP接続又はFTP接続するときの通信開始又は通信切断や、PLC1内に用意されたフォルダ又はファイルへの書き込み等が挙げられる。このように、イベント表示制御部14でもって、ユーザが介在したユーザ操作に応じたイベントは、トラブル解決に役立つので表示させる。その一方で、ユーザが介在しなくても自動的に実行される処理に応じたイベントについては非表示としている。非表示とする理由は、自動実行される処理は頻度が多すぎるのでログとして残すと膨大になる上、内部処理であるためイベントログを参照したところで、これに基づいてどのようにすればトラブル解決につながるのかが判り難いため、これらがトラブル解決に有用な場面は少ないと思われないからである。このように、イベントの表示内容を、トラブル解決に有用と思われるものと、そうでないものに分類して、選択的に表示部7に表示させることで、ユーザによるトラブルシューティングを支援することが期待できる。
以下、図36に基づき各部材の詳細を説明する。記録設定部12は、運転記録データ等各種のデータをPLC側記憶装置32に保存させるよう設定する。PLC側記憶装置32に保存されるデータとしては、PLC1の運用時に、PLC1で記録された時系列の複数のデバイス値、各デバイス値の記録時刻に応じた第一時刻データ、PLC1又はPLC1により制御される被制御装置にて発生した複数のイベント、各イベントの発生時刻に応じた第二時刻データ等が挙げられる。PLC側記憶装置32は、PLC1内部の書き換え可能な不揮発性メモリや、挿抜可能なSDカード(商品名)等が利用できる。特にSDカードは、データの移行が簡単なため、好ましい。例えばPC2をPLC1に接続していなくとも、PLC側記憶装置32に保存されたデータにアクセスすることが可能となる。
デバイス表示制御部13は、表示部7で表示させたラダー図上に、デバイス値を表示する。イベント表示制御部14は、表示部7上に複数のイベントを一覧表示する。この際イベント表示制御部14は、PLC1の動作状態又はPLC1により制御されるモータ等の被制御装置の動作状況を変更する特定イベントを、選択的に表示させることができる。
図36に示すPLC用エンジニアリングツールでPLC用の設定を行った後、プロジェクトデータをPLC側に転送する。具体的には、PC側通信部23から、PLC1のPLC側通信部33に、記録すべきイベントやその優先順位を規定したプロジェクトデータを転送する。またプロジェクトデータには、運転記録データに関する設定や、ユーザープログラム、各機能の設定などを含めてもよい。
(表示部7)
表示部7は、ラダー図等を表示させる。具体的には表示部7は、イベントを一覧表示させるイベント表示欄1400と、ラダー図を表示させるラダーモニタ欄1500を備えることができる。そしてイベント表示欄1400で、ユーザが選択受付部16を用いて、ここではPC側操作部8を操作してGUI上から任意のイベントを選択すると、この選択されたイベントの時刻と対応するラダー図がラダーモニタ欄1500で選択されて表示される。
また表示部7は、さらにカメラモニタ欄1600を備えてもよい。カメラモニタ欄1600は、プログラマブルロジックコントローラシステムに接続されたカメラ部98で時系列に撮像された複数の画像データを表示させる。そしてイベント表示欄1400で、任意のイベントを選択すると、この選択されたイベントの時刻と対応するラダー図がラダーモニタ欄1500で選択されると共に、選択されたイベントの時刻と対応する画像データがカメラモニタ欄1600に表示される。
PLC1は、PLC側CPUと、PLC側記憶装置32と、PLC側通信部33を備える。PLC側記憶装置32には、上述の通り記録設定部12での設定に従い、PLC1にて記録された時系列の複数のデバイス値、各デバイス値の記録時刻に応じた第一時刻データ、PLC1又はPLC1により制御される被制御装置にて発生した複数のイベント、各イベントの発生時刻に応じた第二時刻データ等が保存される。
複数のデバイス値とイベントとは、PLC側記憶装置32に分けて記録される。デバイス値もイベントも、ある程度収集した後は、古いデータを削除していくが、好ましくはイベントをデバイス値よりも長い時間残す。トラブルの原因が、直近のイベントのみならず、過去の変更に起因することが起こり得ることに対応させたものである。また、これらデバイス値の第一時刻データと特定イベントの第二時刻データも保存することで、これらを同期させることが可能となる(詳細は後述)。
ここでイベント表示制御部14は、PLC1の動作状態又はPLC1により制御される被制御装置の動作状態を変更する特定イベントを、選択的に表示部7上に表示させる。例えばプログラマブルロジックコントローラ用エンジニアリングツールは、トラブル解決に繋がる厳選されたイベントをPLC側記憶装置32に記録すると共に、これを表示させる際には、それらのイベントのみをフィルタ表示させてもよい。これにより、多種多様なイベントの内から、トラブル解決に有用なイベントを選択的に表示させて、トラブルの原因究明に役立てることができる。またこのイベント表示制御部14は、デバイス値を時系列波形として表示部7に表示させることができる。
またPLC用エンジニアリングツールは、同期ソフトウエアモジュール15を備えてもよい。同期ソフトウエアモジュール15は、デバイス表示制御部13における表示対象時刻である第一時刻データと、イベント表示制御部14における表示対象時刻である第二時刻データとを同期させて、表示部7において連動させて表示させることができる。
あるいは、すべてのイベントを記録する他、イベントの内から選別した特定イベントのみをPLC側記憶装置32に記録するよう構成してもよい。例えば記録設定部12で、特定イベントのみをPLC側記憶装置32に記録させるように設定できる。これにより、トラブルシューティングに有用な特定イベントのみを記憶装置に記憶させて、これを表示部7に表示させることで、検索や絞り込みなどを行わずともトラブルシューティングに無関係なイベントに埋もれてしまう事態を回避できる。この場合、デバイス値については運転記録データとしてすべて記録しつつ、イベントについては、PLC1の動作状態又はPLC1により制御されるモータ等の被制御装置の動作状態を変更する特定イベントのみを記録している。これにより、選別した特定イベントのみをイベント表示欄1400に選択的に表示させることが可能となる。また特定イベントを、別途記録されたデバイス値と同期させることで、トラブル解析に有益となる。さらに選択的に表示される特定イベントは、優先順位付けしてもよい。
(特定イベント)
表示部7に表示させる特定イベントには、PLC1のユーザープログラム及び各ユニットのユニット構成情報を含むプロジェクトデータの書き換え、被制御装置の電源のON/OFF、プログラマブルロジックコントローラの設定を行う設定モード又はプログラマブルロジックコントローラを実行させる運転モードのモード切替、各種履歴のクリア、記憶装置の挿抜、他の機器と通信を行うイーサネットケーブルの挿抜、PLCシステムに接続される表示器HMIから要求されるデバイス書換信号、あるいはPLCシステムに接続されるモーションユニットのモーションエラー等が挙げられる。例えばモード切替は、PLC1の設定時の動作モードであるPROGRAMモードと、実運用時のRUNモードの切り替えを行ったタイミングを示している。また表示器HMIからのデバイス書換信号は、トラブル発生時に、予め定められた復旧手順に沿って操作したか否かを確認したい場合に、有用となる。
(イベントログの記録動作)
ここで、イベントログの記録動作を、プログラマブルロジックコントローラシステムの機能ブロック図である図37に基づいて説明する。この図に示すプログラマブルロジックコントローラシステムは、CPUユニット3と拡張ユニット4を備える。
(CPUユニット3)
CPUユニット3は、PLC側CPU31と、PLC側時刻管理部83と、イベント管理部76と、イベントログメモリ部75と、ログメモリ部73Bと、デバイスメモリ部34Bを備える。PLC側CPU31は、ユーザープログラムの実行や拡張ユニット4とのデータ交換、データ収集処理等を行う。
(PLC側時刻管理部83)
PLC側時刻管理部83は、イベントやログデータの記録時の時刻を管理するための部材である。
(デバイスメモリ部34B)
デバイスメモリ部34Bは、プログラムや各機能で使用する値が格納されているデバイスが配置されているメモリである。デバイスメモリ部34Bは、通信からのデバイス書換に関してもイベントとして記録可能である。検知はPLC側CPU31で行う。
(イベント管理部76)
イベント管理部76は、発生したイベントをイベントログメモリ部75に記録する。このイベント管理部76は、PLC1のスキャン動作とは非同期に、PLC側CPU31から発行されたイベントを受け取り、イベントログに保存する。すなわちPLC1のEND処理の繰り返し周期とは独立して、任意のタイミングでイベントログの記録を行うことができる。またイベント管理部76は、複数のイベントが同時に発生した場合の調停や、イベントログメモリ部75のメモリ容量がフルになった場合に古いデータから順次消去する制御等も行う。
(イベントログメモリ部75)
イベントログメモリ部75は、発生したイベントを格納するメモリである。イベントログメモリ部75には、第二時刻データと共にイベントが格納されている。
(ログメモリ部73B)
ログメモリ部73Bは、収集したデータを格納するメモリである。これらイベントログメモリ部75やログメモリ部73Bは、共通のμsオーダの時刻データを有しており、表示時にスキャンレベルで連動させることが可能である。このためログメモリ部73Bは、スキャン動作と同期して、スキャン動作の一部として収集したデータを記録する。またログデータの記録時には、第一時刻データと共に記録する。
(拡張ユニット4)
拡張ユニット4は、カメラ部98やモーションユニットなどの被制御装置を接続する、一以上のユニットである。各拡張ユニット4は、バッファメモリ部77と、機能実行部96を備える。バッファメモリ部77は、拡張ユニット4の機能を制御するための値やモニタ値が格納されているメモリである。機能実行部96は、拡張ユニット4の機能を実行している。また機能実行部96は、拡張バス−CPUユニット制御部と情報を伝達する。例えばPLC側CPU31からの要求を受けて、又は自動的に動作して、状態や結果をバッファメモリ部77に格納する。一例として、モーション系の拡張ユニットの場合は、ワークが装置のリミットに達した等モーション系のエラーが発生した場合、それを機能実行部96が検出する。また、拡張ユニット4側からイベントを発行することも可能である。
(イベントログ記録動作のフローチャート(CPUユニット3で発生するイベントの場合))
図37のプログラマブルロジックコントローラシステムにおいて、イベントログを記録する動作は、CPUユニット3側で発生するイベントに対して行うことも、拡張ユニット4側で発生するイベントに対して行うこともできる。
次に、CPUユニット3で発生するイベントを記録する動作を、図38のフローチャートに基づいて説明する。まずステップS3801において、CPUユニット3のPLC側CPU31がイベントを検出する。次にステップS3802において、イベント管理部76が、CPUユニット3のPLC側CPU31からイベントを受け取る。そしてステップS3803において、イベントログメモリ部75の残容量を確認する。残容量がない場合は、ステップS3804に進み、古いイベントをイベントログメモリ部75から削除する。一方、残容量がある場合はステップS3805に進み、μsオーダの時刻データを取得して、イベントログメモリ部75にイベントを格納する。
次に、拡張ユニット4で発生するイベントを記録する動作を、図39のフローチャートに基づいて説明する。まずステップS3901において、拡張ユニット4の機能実行部96がイベントを検出する。次にステップS3902において、拡張ユニット4の機能実行部96が、イベントを入れたメッセージ通信を、拡張バスに送信する。さらにステップS3903において、CPUユニット3のPLC側CPU31が割り込み処理を用いて、イベントを入れたメッセージ通信を、拡張バスから受信する。次いでステップS3904において、CPUユニット3のPLC側CPU31が、メッセージ通信からイベントを取り出す。さらにステップS3905において、イベント管理部76が、CPUユニット3のPLC側CPU31からイベントを受け取る。そしてステップS3906において、イベントログメモリ部75の残容量を確認する。ここで残容量がない場合はステップS3907において、古いイベントをイベントログメモリ部75から削除した上で、ステップS3908に進む。一方、ステップS3906において残容量がある場合は、ステップS3908に進んで、μsオーダの時刻データを取得して、イベントログにイベントを格納する。
次に、イベントログ表示時のフィルタ動作を、図40のフローチャートに基づいて説明する。まずステップS4001において、イベントログ全件をメモリに読み込む。次にステップS4002において、イベント表示時にフィルタしたい、イベントのグループをUIで選択する。さらにステップS4003において、イベントログから1件、イベントを取り出す。そしてステップS4004において、取り出したイベントが、UIで選択したイベントに該当している場合、表示用イベントログに格納する。さらにステップS4005において、イベントログメモリ部75にイベントが残っているか否かを判定し、残っている場合はステップS4003に戻って処理を繰り返す。一方、残っていない場合はステップS4006に進み、表示用イベントログをGUIに全件表示する。
(選択的に表示するイベントの例)
選択的に表示するイベントの例を、以下に示す。まず重度エラーは、PLC1が運転を継続できない重篤なエラーである。重度エラーの検出主体は、CPUユニット3(制御部・周辺制御)である。
また軽度エラーは、PLC1が運転を継続できる軽微なエラーである。ただし軽度エラーは、トラブルの解決に繋がらない可能性もある。経度エラーの検出主体は、CPUユニット3(制御部・周辺制御)や拡張ユニット4である。
電源ON/OFFは、電源の投入と遮断についてのイベントである。トラブルの周辺で発生することがある。電源ON/OFFの検出主体は、CPUユニット3(周辺制御)である。
アラームリレーは、ユーザが指定したアラーム履歴である。アラームリレーの検出主体は、CPUユニット3(PLC側CPU31)である。
デバイス値変更は、通信によるデバイス値の書き換えである。装置によってはトラブルに関係なく発生するが、トラブルの起点となることもある。このデバイス値変更の検出主体は、CPUユニット3(PLC側CPU31)である。
運転記録保存は、運転記録データの保存トリガのタイミングや記録に関する。この運転記録データも、トラブル解析の起点となり得る。運転記録保存の検出主体は、CPUユニット3(PLC側CPU31)である。
RUN/PROGRAMの切換は、PLC1の運転モードの切り替えに関する情報である。モード切換の際にトラブルが起きることもあるが、通常運用時にも普通に発生する。RUN/PROGRAMの切換の検出主体は、CPUユニット3(PLC側CPU31)である。
プロジェクト変更は、例えばPLC1のプログラム変更がきっかけとなり、トラブルが発生することが多いため、トラブル解析に有益と考えられる。プロジェクト変更の検出主体は、CPUユニット3(PLC側CPU31)である。
履歴クリアも、トラブルを解決するための判断材料になる。特に、これがいつ消去されたかは重要な要素となり得る。履歴クリアの検出主体も、CPUユニット3(イベント管理部76)である。
メモリカードは、その挿抜等がトラブル解決の鍵となることがある。その反面、装置の運用方法によってはトラブルが発生していなくても日々イベントが発生することもある。メモリカードの検出主体は、CPUユニット3(周辺制御)である。
カレンダタイマは、履歴データを元にトラブル解決の解析をするため、このカレンダタイマ値の変更を記録することが重要な場合があるため、候補に挙げられる。反面、時刻の自動調整をするような運営をしている場合は、定期的にイベントが発生する。カレンダタイマの検出主体は、CPUユニット3(周辺制御)である。
イーサネット通信は、イーサネットのハードウェアレベルの接続イベントは、接触不良等の障害の予兆として発生することがあるため、候補に挙げられる。ただ、電源ON/OFFのタイミングでも日々発生する。イーサネット通信の検出主体は、CPUユニット3(周辺制御)や拡張ユニット4である。
シリアル通信は、シリアルのハードウェアレベルの接続が、接触不良等の障害の予兆として発生することがあるため、有益と考えられる。シリアル通信の検出主体は、拡張ユニット4である。
イベントエラーは、イベントが大量に発生した場合のエラーである。イベントエラーの検出主体は、CPUユニット3(イベント管理部76)である。
このようなトラブルに対する考察に記述している通り、イベントの種類によってはマスクしたくなる場合もあるし、マスクせず表示したい場合もある。つまり、ユーザの装置の運用方法次第でマスクの必要性が変化する。そこで、ユーザにグループ毎に表示を選択させることを可能とした。
イベントの選定に際しては、例えば図41に示すエラーイベント履歴フィルタ設定部1370で、グループ毎に個別に表示のフィルタリング設定を行うことができる。ここでは、表示される候補となるエラーやイベント中から、非表示とするエラーやイベントを選択する。この例では、画面左側に表示対象のイベントを表示一覧1371に、右側に非表示とするイベントを非表示一覧1372に、それぞれ列挙しており、イベント毎に自由に移動させることで表示か非表示かを選択できる。
(イベントとして記録しているが、敢えて表示しないイベントの例)
次に、イベントとして記録しているが、敢えて表示していないイベントの例を説明する。これらは、ユーザに公開しても、ユーザでのトラブルの公開に直結しないイベントである。
まず、PLC1上でのプログラムのコンパイルエラー発生時の詳細情報は、ユーザに公開しても、対処方法を示すことが難しいため表示しない。
ファームウェアアップデート情報は、ファームウェアの更新により記録フォーマットが変化する可能性があり、継続して記録を残せない可能性があるため、表示しない。
自己テストの実施履歴は、ユーザに公開しても、対処方法を示すことが難しいため表示していない。
(敢えて記録していないイベントのリスト(優先度高))
次に、敢えて記録していないイベントの内で、優先度の高いものの例を以下に示す。まずユーザープログラムの組み方によっては、件数が多すぎて簡単にログが溢れるため、記録から除外しているものとして、TCP接続の交信開始/終了がある。これは通信毎に交信を切断するシステムの場合、1秒に複数回のオーダーでイベントが発生する可能性がある。
またFTP接続開始/切断は、データを1件収集する毎に、上位にファイルをアップデートするような使い方の場合、イベント件数が増加する。
さらにフォルダ/ファイルの書込みは、データを1件収集する毎に、メモリカードに記録するような使い方の場合、イベント件数が増加する。
次に、システムの運用時には発生する可能性が低く、トラブル解決に繋がらない可能性があるため、記録から除外するイベントの例を説明する。まず、リモート操作要求受付は、運用時ではなく、装置のプログラミング時や立ち上げ時やデバッグ時に使用する可能性が高い機能であるのため、記録から除外する。また、強制値リフレッシュのセット、強制値リフレッシュのリセット、強制値リフレッシュの全解除、強制値リフレッシュの解除等は、いずれも運用時ではなく、装置のデバッグ時やトラブル発生後の解析に使用する可能性が高い機能のため、記録から除外する。
(敢えて記録していないイベントの例(優先度低))
さらに敢えて記録していないイベントの内、優先度の低いものの例を、説明する。まず、レシピ実行操作は、システムの組み方次第では、ワーク1件毎にイベントが発生して簡単にログ容量が溢れる可能性がある。
またDB接続サービス開始、DB接続サービス停止、DB接続サービス終了は、いずれも運用時に頻繁に発生するイベントになり、簡単にログ容量が溢れる可能性がある。
またユーザ認証有効/無効、ログオン成功、ログオン失敗、CPUユニットのバックアップ成功、CPUユニットのバックアップ失敗、CPUユニットのリストア成功、CPUユニットのリストア失敗等は、いずれも運用時ではなく、装置のプログラミング時や立ち上げ時やデバッグ時に使用する可能性が高い機能である。
ここで、デバイス表示制御部13とイベント表示制御部14で特定イベントを選択的に表示部7上に表示させる様子を、図42のPLC用エンジニアリングツール1380のGUI画面に基づいて説明する。この図に示すPLC用エンジニアリングツール1380は、プロジェクトデータ編集プログラム、あるいはプログラム表示モジュール321によって提供される表示UIを示している。このプロジェクトデータ編集プログラムは、モード選択部50Dでログ再生モード(リプレイモード)が選択されており、編集が禁止されたプロジェクトデータ再生プログラムとして機能する。なお、編集機能を有しないプロジェクトデータの再生のみを行うプロジェクトデータ再生プログラムも、PLC用エンジニアリングツールの一種に包含される。
このプロジェクトデータ編集プログラムは、左側にプロジェクト表示領域420、中央にプログラム表示領域410、右側にイベント表示欄1400を、それぞれ設けている。またプログラム表示領域410は、上段にラダーモニタ欄1500を、下段に再生制御欄402を、それぞれ設けている。ラダーモニタ欄1500ではラダープログラム(ラダー図)を表示している。
(再生制御欄402)
再生制御欄402では、イベント表示欄1400等で選択されたイベントを再生するための再生制御を行う。具体的には、図31の再生制御モジュール324の機能によって、選択されたイベントと対応する、記録済みのデバイス値と画像データを含む運転記録データをPLC側記憶装置32から読み込んで、再生させる。再生制御欄402は、図32等で説明したのと同様、時間軸を表すスライダ状の操作バー404dと、この操作バー404d上を移動可能な時刻指定カーソル404、速度指定部405、再生ボタン406、ワンステップ逆再生ボタン407、ワンステップ再生ボタン408等を備えている。
再生ボタン408を押下することで、過去のイベントの状態を再生できる。また操作バー404d上の時刻指定カーソル404を操作することにより、どの時刻の状態を再生するのかを選択できる。さらに、デバイス表示制御部13とイベント表示制御部14は連動しており、いずれかで選択した項目に対応して、各部の表示が連動される。例えば再生制御欄402で操作バー404d上をクリックする等して再生時刻を指示すると、指定した再生時刻のデバイス値が、ラダーモニタ欄1500のラダー図上に表示される。同様にイベント表示欄1400において、操作バー404d上で指定された再生時刻に発生したイベントが反転表示される。一方で、イベント表示欄1400において、一覧表示されたイベントのいずれかをクリックすることにより、操作バー404d上の再生時間が連動して移動する。このように、ESM同士の連動を行うことにより、トラブルの解析が容易になる。
なおイベント表示欄1400に表示されるイベントが、収集された運転記録データ内で発生したイベントか否かを、判別できるようにしてもよい。例えば運転記録データ内に発生したイベントを着色して表示させることで、ユーザは視覚的に判別できる。
特定イベントをイベント表示欄1400に表示させる例を図43に示す。ここでは、イベント表示欄1400において、イーサネットリンクアップとイーサネットリンクダウンが一覧表示されている。イーサネットリンクアップは、イーサネットの接続が開始したことを表す。このイーサネットリンクアップは、例えばイーサネットケーブルが接続された場合、ハブの電源がONされた場合等に発生する。またイーサネットリンクダウンは、イーサネットの接続が終了したことを表す。例えばイーサネットケーブルが切断された場合や、ハブの電源がOFFになった場合等に発生する。図43の例では、短期間にイーサネットリンクアップとイーサネットリンクダウンが繰り返されており、イーサネットの接続が不安定になり、その結果としてトラブルが発生して保存トリガがONになったものと想定される。
なお図43において、イベント表示欄1400において表示されるイベントの内、着色される等ハイライトされたイベント1402は、デバイス表示制御部13の記録時間に発生したイベントであることを示す。またイベント表示欄1400において反転表示されたイベント1401は、現在選択中の再生表示に係るイベントである。イベント表示欄1400において選択された再生時刻に対応して、再生制御欄402における時刻指定カーソル404の位置が移動される。同様に、ラダーモニタ欄1500において対応するラダー図にデバイス値が表示される。また、再生制御欄402における時刻指定カーソル404を移動させると、これに応じてイベント表示欄1400やラダーモニタ欄1500の表示も連動して、対応する再生時刻の表示に更新される。
また再生制御欄402における操作バー404dは、保存トリガを発生させるイベント(保存トリガ発生イベント)の発生した時刻に保存トリガバー404eを表示させてもよい。保存トリガバー404eは、赤色等で示すことで視認し易くしている。なお図43の例では、イベント表示欄1400においてトリガ発生イベントが選択されているので、操作バー404dにおいて、灰色の時刻指定カーソル404と赤色のトリガ発生イベントが重なって表示されている。このため時刻指定カーソル404の指定する再生時刻を示す時刻表示領域409においては、イベント表示欄1400で選択され反転表示されている第二時刻データと同じ2018/11/20 11:20:46が表示されている。
さらに再生制御欄402において、時刻表示領域409と並べて、総スキャン回数及び表示中のスキャン回数を示すスキャン回数表示領域409bを設けてもよい。図43の例では、全部で360629スキャン分のデバイス値セットが運転記録データとして記憶されていることが判る。また時刻表示領域409には、現在時刻指定カーソル404で現在指定されている再生時刻(11:20:46)が表示されているところ、この再生時刻では、193526スキャン目のデバイス値セットがラダーモニタ表示欄に表示されていることが、スキャン回数表示領域409bに示されている。
図43の状態から、時刻指定カーソル404を、右側、すなわち図43より時間を進めた時刻に移動させた状態を、図44に示す。ここでは、操作バー404dの保存トリガバー404eよりも時間的に遅い位置に、時刻指定カーソル404を位置させている。すなわち、時刻指定カーソル404を右に移動させるほど時刻が進み、左に行くほど時刻が戻る。
また操作バー404dは、PLC側記憶装置32に保存された運転記録データの記録時間に対応させている。すなわち、操作バー404dの左端が、運転記録データの記録開始時、右端が運転記録データの記録終了時となる。そして上述の通り、運転記録データの記録を行う保存トリガ発生イベントの発生した時刻に保存トリガバー404eが操作バー404d上に表示されている。すなわち操作バー404dにおいて、保存トリガバー404eの左側が、保存トリガより前の収集時間Ta、保存トリガバー404eの右側が、保存トリガよりも後の収集時間Tbを示している。
図44の例では、イベント表示欄1400で選択されているイベントである「イーサネットリンクダウン」のイベントの第二時刻データは、2018/11/20の11:20:49であるため、これに連動して再生制御欄402の時刻表示領域409に表示される時刻も、この時刻と一致されて表示されている。なお、図44のラダーモニタ欄では、一部の入力接点及び一部の出力要素において、色塗り表示がなされている。これは、時刻指定カーソル404が図44に示す位置にあるときの時刻において、それらの入力接点及び出力要素がONになっていることを示している。
さらに、イベント表示欄1400において、ハイライトされたイベント1402以外のイベントを選択した例を、図45に示す。イベント表示欄1400においてハイライトされていないイベントは、デバイス値などの運転記録データが保存されていないため、保存期間外となり、対応する運転記録データが存在しない。この例では、イベント表示欄1400において2018/11/20 10:38:08が選択されているが、この時刻の運転記録データが保存されていないため、再生制御欄402においては、時刻指定カーソル404は、操作バー404dの下限である左端に貼り付いた状態となる。すなわち操作バー404dでは保存期間よりも以前や以後の時刻を表現できないため、保存期間外の時間がイベント表示欄1400で選択された場合は、連動表示ができないため、操作バー404dで対応する最も近い値に移動される。具体的には、保存期間よりも古い時刻の場合は操作バー404dの左端に、保存期間よりも新しい時刻の場合は操作バー404dの右端に、時刻指定カーソル404が位置される。
また時刻表示領域409には、操作バー404dの右端に対応する時刻2018/11/20 11:20:20が表示されており、保存トリガバー404eが示す保存トリガによって保存された運転記録データは、2018/11/20 11:20:20以降となる。またスキャン回数表示領域409bは、最も古いスキャン回数である1回目を指している。
なお、イベント表示欄1400においては、2018/11/20 11:20:38以降のイベントがハイライト表示されている。これは、保存期間の内、2018/11/20 11:20:20〜11:20:37までは特に何のイベントもなかったためであり、この間に記録されたイベントが存在しない以上、イベント表示欄1400でも表示がない状態となっている。また、図45では、図44と比較して、色塗り表示された入力接点及び出力要素が増加している。これは、時刻指定カーソル404が図45に示す位置にあるときの時刻では、図44よりもONになった入力接点及び出力要素が増えていることを示している。
(カメラモニタ欄1600)
以上の例では、イベント表示欄1400と再生制御欄402とラダーモニタ欄1500の表示を同期させる例を説明したが、これに加えて、カメラ部98で撮像した画像データも同様に、同期させて表示させることができる。このような例を図46のGUIに示す。この例では、画面右上に、画像データを表示するカメラモニタ欄1600を設けている。この例でも同様に、イベント表示欄1400で任意のイベントを選択すると、この選択されたイベントの時刻と対応する時刻に撮像された画像データが表示され、再生制御欄402における時刻指定カーソル404も、対応する再生時刻に移動される。また、再生ボタン406を押下すると、カメラモニタ欄1600において動画が再生されると共に、時間の経過に応じて対応するイベントにイベント表示欄1400の選択が切り替わり、またラダーモニタ欄1500におけるラダー図のデバイス値も更新されていく。これによって、トラブル発生時の動作を動的に再現できるので、トラブルの原因究明に有効となり得る。