以下、本発明の実施形態を図面に基づいて説明する。ただし、以下に示す実施形態は、本発明の技術思想を具体化するための例示であって、本発明は以下のものに特定されない。また、本明細書は特許請求の範囲に示される部材を、実施形態の部材に特定するものでは決してない。特に実施形態に記載されている構成部品の寸法、材質、形状、その相対的配置等は特に特定的な記載がない限りは、本発明の範囲をそれのみに限定する趣旨ではなく、単なる説明例にすぎない。なお、各図面が示す部材の大きさや位置関係等は、説明を明確にするため誇張していることがある。さらに以下の説明において、同一の名称、符号については同一若しくは同質の部材を示しており、詳細説明を適宜省略する。さらに、本発明を構成する各要素は、複数の要素を同一の部材で構成して一の部材で複数の要素を兼用する態様としてもよいし、逆に一の部材の機能を複数の部材で分担して実現することもできる。
図1に、プログラマブルロジックコントローラシステムの概要図を示す。この図に示すプログラマブルロジックコントローラシステム1000は、ラインを流れる対象物WKをカメラ部98で撮像して検査するシステムを例示している。このプログラマブルロジックコントローラシステム1000は、PC2と接続されて、プロジェクトデータ編集プログラムを編集する。
プログラマブルロジックコントローラ1は、複数のユニットを接続して構成される。複数のユニット間は、ユニット間バス90を介して通信可能に接続されている。ユニットは、CPUユニット3と拡張ユニット4に大別される。CPUユニット3はメインユニットやCPUユニットとも呼ばれ、プログラマブルロジックコントローラの基本動作を行う。また拡張ユニット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はハードディスクや半導体メモリ、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に転送する。
プロジェクトデータ編集プログラムは、編集モードとモニタモードと履歴再生モードを備える。編集モードはエディットモード等とも呼ばれ、プロジェクトデータを編集することができる。またモニタモードはユーザープログラムのデバッグ等を行うためのシミュレーション動作を行うことができる。さらに履歴再生モードはリプレイモードやタイムマシン再生等とも呼ばれ、再生表示を行うことができる。これらの編集モード、モニタモード、履歴再生モードの切り替えは、モード選択部で行われる。
<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は、不揮発性メモリとして、内部メモリや着脱可能なメモリカード36A等で構成される。
このようにPLC側記憶装置32は複数の記憶領域を有している。このPLC側記憶装置32はRAMやROM、メモリカード等を含んでもよい。例えば図5の例では、保存メモリ36は着脱可能なメモリカード36Aで構成されている。
(PLC側CPU31)
PLC側CPU31は、プログラム実行部514と、保存条件設定部45と、記録制御部39と、保存制御部50Cを備えている。プログラム実行部514は、ユーザープログラムを繰り返し実行するラダー実行エンジン80aとして機能する。ユーザープログラムに従い、プログラム実行部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は、PC2のPC側CPU21が、PC側記憶装置22に記憶されているプロジェクトデータ編集プログラムを実行することで実現される機能を示している。これらの機能の一部又はすべては、ASICやFPGA等のハードウエア回路により実現されてもよい。ASICは特定用途集積回路の略称である。FPGAはフィールドプログラマブルゲートアレイの略称である。
図7のPC側CPU21は、プロジェクト作成部50と、ログ設定部51と、ログ表示制御部61の機能を実現する。なお本実施形態では、図7に示す機能を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は、デバイス値の他、カメラ部で撮像した画像データ等を含めてもよい(詳細は後述)。これらプロジェクトデータとログデータを含めて運転記録データとしてパッケージ化して保存する。あるいはプロジェクトデータとログデータとを関連付けて別々のファイルで保存し、プロジェクトデータ又はログデータの一方を開くと、他方のファイルも関連付け情報を参照して読み出し可能としてもよい(詳細は後述)。
●ロギングの実行
図8は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がバスマスタとして機能する場合には、図7を用いて説明したユニット構成情報、すなわち、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に書き込むこととしたが、本発明はこれに限られず、例えば、内部メモリ37(フラッシュメモリやハードディスク等の不揮発性メモリ)に保存しても構わない。また、少なくともログデータ73については、所定の出力条件が満たされたときにメモリカード36A又は内部メモリ37に保存される必要がある一方、プロジェクトデータ71については、所定の出力条件が満たされたときに限られない。例えば、PLC1が設定モード(PROGRAMモード)から運転モード(RUNモード)になったタイミングで、予めメモリカード36Aや内部メモリ37に保存しておいてもよい。
<大容量データのロギング>
フィールドデバイス10としてカメラ部98が存在する。ユーザはワークや制御対象の状態をカメラ部98により取得し、画像とデバイス値とを対比しながら、ユーザープログラムを改良することを望むことがある。したがって、相互に関連した画像とデバイス値とをどのように管理するかが問題となる。なぜなら、画像は拡張ユニット4により取得され、デバイス値はCPUユニット3によって取得されることが一般的だからである。さらに、画像の取得周期と、デバイス値の取得周期とは異なることが一般的である。このような事情から画像等の大容量データと、デバイス値のような比較的に小容量のデータとをどのように紐付けて管理するかが問題となる。
図9はCPUユニット3のPLC側CPU31の機能を示している。すでに説明された箇所には同一の参照符号が付与されている。この例では記録部81は収集部92aを有している。収集部92aは、所定の収集開始条件が満たされると、デバイス部34に保持されているデバイス値の内、ログ設定データ72により指定されたデバイス値をデバイス部から読み出すと共に、時刻管理部83aから時刻情報を取得する。収集部92aはデバイス値と時刻情報とを関連付けて一時記録部91aに格納する。なお、収集部92aは、ログ設定データ72により指定された収集周期(例:スキャン周期)毎にデバイス値と時刻情報とを取得して一時記録部91aに格納する。一時記録部91aには、リングバッファが好適に採用される。リングバッファが採用されている理由は、リングバッファに記憶されているすべてのデータがログデータ73としてメモリカード36Aに保存されるわけではないからである。例えば、保存部93は、所定の保存条件が満たされたときに、リングバッファの一時記録部91aからデバイス値と時刻情報とを読み出し、ログデータ73を作成してメモリカード36Aに保存してもよい。同様に、保存部93は、所定の保存条件が満たされたときに、拡張ユニット4から大容量データと時刻情報とを読み出し、ログデータ73を作成してメモリカード36Aに保存してもよい。保存部93は、上述したデバイス値及び時刻情報と、上述した大容量データ及び時刻情報とを、対応付けて保存する。ここで、「対応付けて」保存とは、PC2にて再生しやすい形で保存されていればよく、例えば、複数のファイルを対応付けたファイル管理がなされていてもよい。具体的に説明すると、メモリカード36Aにおいて、特定のフォルダの下に、デバイス値及び時刻情報が格納された第1サブフォルダと、大容量データ及び時刻情報が格納された第2サブフォルダとが置かれている場合には、特定のフォルダまでのパス(ディレクトリパス)が共通フラグとなり、この共通フラグを使って、第1サブフォルダ内のファイルと第2サブフォルダ内のファイルを「対応付けて」保存することが可能になる。また、上述した特定のフォルダと同じレベル(ディレクトリ)に置かれた別フォルダがある場合、その別フォルダは、他のタイミングで保存されたデータパッケージを意味する。もちろん、この別フォルダの下にも上述同様のサブフォルダが置かれている。このように、保存部93は、上述したデバイス値及び時刻情報と、上述したデータ(大容量データ)及び時刻情報とを、共通フラグ(所定のディレクトリパス)により識別される複数のファイルに格納し、それら複数のファイルを保存してもよい。その他、例えば、共通フラグとしてファイル名を採用し、同一又は対応するファイル名をもつファイルを生成することで、「対応付けて」保存することも可能である。他にも例えば、時刻情報をキーとして、デバイス値とデータ(大容量データ)を対応付けてリスト化し、これを1つのファイルに纏めることによっても、「対応付けて」保存することが可能である。なお、本実施形態では、監視機器からのデータの一例として大容量データを考えたが、他にも例えば、モーションデータや通信データ、音声データ等の連続データであってもよいことは言うまでもない。送信部94は、PC2やクラウド等にログデータ73を送信してもよい。リングバッファの一時記録部91aが満杯になると、収集部92aは、リングバッファに保持されている最も古い情報に対して、最も新しい情報を上書きする。
ここでは一時記録部91aに、バッファの一例としてリングバッファが採用されているが、これは一例にすぎない。バッファとしては、FIFO形式のバッファが採用されれば十分であろう。
<ログデータ収集期間の設定>
図7のログ設定部51は、ログデータ73の収集期間の設定を受け付けてもよい。プログラムや装置が意図と違う動作をした場合に、その動作を解析する目的等でデバイス値を定期的にロギングしておき、トラブル発生時にはその前後のデバイス値を保存することが行われている。具体的には、トラブルが発生したときにONとなるリレーデバイスを用意しておき、このリレーデバイスから保存トリガが入ったタイミングの前後の一定期間のデータを保存する方法が知られている。この方法では、図10に示すようにバッファ期間と保存期間は一致している。
しかしながらこの方法では、データを取得し始めてから実際に保存するかを判断できるまでの時間が長い場合には、全てを保存できなくなる。また保存するメモリを大容量にする必要があった。一例として、ユーザ設備の制御周期(プレス加工で20秒間など)の内、最初から5秒後にトラブルが頻発する場合に、1秒~5秒の間のデータを保存したい要求があるとする。この場合において、保存期間が保存トリガの前後3秒間(6秒間)であれば、2秒~8秒の間のデータしか保存されず、発生後1秒~2秒のデータを保存し損なうことになる。この場合において保存期間を長くすることも考えられるものの、その分、容量の大きなメモリが必要となってしまう。このように、保存期間が十分長くない場合には、所望のデータを保存し損なうおそれがあった。
そこで本実施形態においては、保存トリガとは別に、一時記録部91aへの記録を指示するための記録トリガを新たに設け、バッファ期間と保存期間を分離させている。ここでは記録トリガとして、記録開始トリガ(開始リレー)を用いる。この様子を、図9のブロック図及び図11のユーザの制御周期、記録開始トリガ、保存トリガの関係を示すタイムチャートに基づいて説明する。図11において、第1制御周期と第2制御周期は、それぞれユーザの制御周期の1回目と2回目を示す。また図11の時間軸に示す目盛りは、ログデータの生成を行うタイミングである記録トリガを示している。すなわち周期的に記録トリガが発行されて、各記録トリガのタイミングでログデータが生成されている。
(一時記録部91a)
ログデータは、図9に示す一時記録部91aに一時的に記録される。一時記録部91aは、一定のバッファ容量を有する。この一時記録部91aは、好適にはリングバッファが利用できる。好ましくは、PLC1が備えるバッファメモリ(UG)を、一時記録部91aとして利用する。この場合は、単一のバッファメモリを複数のメモリ空間に分割して使用する。これにより、バッファメモリを共用でき、構成を簡素化できる。ただ一時記録部は、PLCが備えるバッファメモリとは別途用意してもよい。この場合は、一時記録部への書き込みをプログラマブルロジックコントローラシステムの通常の処理とは別個に運用できる。
また記録されるログデータは、複数のデバイスの少なくともデバイス値を含む。デバイス値は、ラダープログラムの実行周期毎に記録する他、特定のタイミングで記録することも可能である。なお図11で示した一時記録部91aに記録するログデータは、カメラ部98で撮像した画像データ等を含めてもよい。ただ、保存処理や保存速度、データ量等の関係から、ログデータに画像データを含まないことが好ましい。
(記録開始トリガ)
記録開始トリガは、ログデータを一時記録部91aに一時記録する記録バッファリングを開始するトリガである。この記録開始トリガは、記録バッファ設定部で設定される。記録開始トリガは、リレーデバイスで生成してもよい。また、記録開始トリガを、所定の手順で発される命令語としてもよい。
記録開始トリガを設定する記録バッファ設定部は、例えば図7に示すプログラム設定支援装置において、ログ設定部51の一機能として含めることができる。図7の例では、ログ設定部51が、ログデータの記録に関する条件を設定する保存条件設定部45を有している。この保存条件設定部45が、記録バッファの設定を行う記録バッファ設定部46や、保存トリガの設定を行う保存トリガ設定部47として機能する。
(保存トリガ)
一方で保存トリガは、一時記録部91aに記録したログデータを、ログデータ保存部74に保存するタイミングを規定するトリガである。ログデータ保存部74は、図7に示すメモリカード36A等が利用できる。
(記録バッファ設定部46)
記録開始トリガや、一時記録部91aへの一時的な記録を行う期間であるバッファ記録期間の設定は、記録バッファ設定部46で行う。記録バッファ設定部46は、一時記録部91aへの一時的な記録に関する設定を行うための部材である。例えば、一時記録部91aへの記録を行う期間であるバッファ記録期間を、記録バッファ設定部46から設定するように構成してもよい。この場合は、一時記録部91aへのログデータの一時記録が、記録バッファ設定部46で設定されたバッファ記録期間が経過すると停止され、次の記録開始トリガの入力を待機する状態となる。これにより、記録開始トリガでもって一時記録部91aへのログデータの一時記録動作を規定できる。また、一時記録部91aへのログデータの記録の終了を指示する記録停止トリガを、記録バッファ設定部46から設定するように構成してもよい。この場合は、一時記録部91aへのログデータの一時記録が、記録バッファ設定部46で設定された記録停止トリガが入力されると停止され、次の記録開始トリガの入力を待機する状態となる。このようにすることで、記録停止トリガでもって一時記録部91aへのログデータの一時記録動作を規定できる。あるいはバッファ記録期間として、予め定められた一連の処理を繰り返すスキャン回数を記録バッファ設定部46で設定可能としてもよい。スキャン回数とは、END処理までの処理を1スキャンとして、このEND処理を繰り返す何回を示している。そして一時記録部91aへのログデータの一時記録が、記録バッファ設定部46で設定されたスキャン回数を経ると終了するよう構成する。あるいはまた、保存トリガに従い一時記録部91aに保持されたログデータの内、ログデータ保存部74に保存する期間であるバッファ保存期間を保存トリガ設定部47で指定可能に構成してもよい。これにより、保存期間をバッファ期間と異ならせて、一時記録部91aに保持されたログデータの内、保存すべき期間を設定できる。以上のような記録バッファ設定部46は、例えば図16に示すGUIで実現できる(詳細は後述)。
(記録停止トリガ)
以上の例では、一時記録部91aへの記録を指示する記録トリガとして、一時記録部91aへの記録開始を指示する記録開始トリガを用いる場合を説明した。ただ本発明は、記録トリガを記録開始トリガに限定するものでなく、他のトリガを用いてもよい。例えば、一時記録部91aへの記録停止を指示する記録停止トリガを用いることでも、同様に保存したいログデータ73等のデータの収集期間を、保存トリガとは別に指定することが可能となる。記録停止トリガを用いてログデータを収集するタイミングチャートを、図21に示す。この図に示すログデータ収集方法によれば、記録停止トリガが入力されると、この記録停止トリガが入力されたタイミングから時間的に遡って、指定されたバッファ記録期間分のログデータが保存メモリ36に保存される。
また、このような記録停止トリガを用いたログデータの収集に際して、一時記録部91aにリングバッファ等のバッファメモリを用いる場合、バッファメモリの排他処理を確保するために複数のバッファメモリを利用することが好ましい。ここでは2つのリングバッファA、Bを利用する場合を考える。この場合において、図21に示すように記録停止トリガ1が入力され、一方のリングバッファAにおいて記録されたログデータを遡って保存を行いながら、他方のリングバッファBでログデータの記録を開始する。いいかえると、この記録停止トリガ1は、リングバッファAに対してはログデータの記録を停止し、これまでに記録したログデータを時間的に遡って保存するよう指示する一方で、リングバッファBに対しては、これまで停止していたログデータの記録を再開するように指示する。そしてリングバッファBでログデータを記録中に次の記録停止トリガ2が入力されると、今度はリングバッファBにおいて記録されたログデータを遡って保存を行いながら、リングバッファAでログデータの記録を再開する。さらにリングバッファAでログデータを記録中に次の記録停止トリガ3が入力されると、リングバッファAにおいて記録されたログデータを遡って保存を行いながら、リングバッファBでログデータの記録を再開する。このように記録停止トリガは、一方のリングバッファに対してはログデータの記録を停止し、これまでに記録したログデータを時間的に遡って保存するよう指示する一方で、他方のリングバッファに対しては、停止していたログデータの記録を再開するように指示する役目を果たす。
なお、複数のリングバッファを準備するには、物理的に独立した2つのリングバッファを用意する他、共通のリングバッファを用いつつ、2つの独立したメモリ空間に分割することでも実現できる。
(保存トリガ設定部47)
一方、保存トリガは保存トリガ設定部47で設定される。保存トリガ設定部47は、例えば図7に示す保存条件設定部45や、図17に示すGUI等で構成できる(詳細は後述)。
記録バッファ設定部46で設定された記録開始トリガに従い、図11に示すように、一時記録部91aにログデータを一時的に記録していく。一時記録部91aに一時的に記録されるログデータのデータ量が、一時記録部91aのバッファ容量を上回ると、古いデータから順次上書きされる。この状態で、保存トリガ設定部47で設定された保存トリガに従い、記録開始トリガからバッファ記録期間の間、一時記録部91aに保持されたログデータがログデータ保存部74に保存される。例えば、最新のバッファ記録期間分のログデータがログデータ保存部74に保存される。
また、一時記録部91aにログデータを逐次記録していく構成において、古いデータから順次上書きする方法に限らず、例えば記録開始トリガが発生したタイミングで、現状で一時記録部91aに記録されている前回のログデータを消去し、今回のデバイス値を新規に書き込む方法としてもよい。
ログデータの保存処理を実行するタイミングは、一時記録部91aへのログデータの記録が行われている期間か否かによって変化させてもよい。例えば、バッファ記録期間外に保存トリガが入力された場合は、その時点で一時記録部91aに一時記録されたログデータをログデータ保存部74に保存する。これにより、図12に示すように非バッファリング期間中に保存トリガが入力された場合には、その時点で最新の一定時間分のログデータを保存することができる。
一方で、バッファ記録期間内に保存トリガが入力されたときは、このバッファ記録期間が経過して一時記録部91aへの一時記録が終了するまで待機し、一時記録が終了すると、ログデータをログデータ記録部に保存する。これにより、図13に示すようにバッファリング中に保存トリガが入力されても直ちに保存処理を行わず、進行中のバッファリング処理の完了を待った後、最新のバッファ期間のデータを保存することで、適切なファイル保存処理を完了できる。また、保存するログデータは必ずしも保存トリガから直近のデータに限らず、直近から数世代前のバッファ期間のデータを保存してもよいし、また複数のバッファ期間のデータをまとめて保存してもよい。さらに、例えばバッファ記録期間が終了する直前に保存トリガが入力された場合、バッファ記録期間が経過した後も、所定期間、一時記録部91aへの一時記録を継続する構成にしてもよい。すなわち、ユーザのGUI操作に基づいて、保存トリガから一定期間、必ず一時記録されるよう追加記録期間を予め設定しておく。保存トリガの入力後、バッファ記録期間が経過しても追加記録期間が未経過の場合には、一時記録部91aへの一時記録が継続される。そして、保存トリガを基準として追加記録期間が経過した後に、一時記録が終了する。このような構成により、保存トリガの入力後、追加記録期間分のログデータが必ず保存されることになり、トラブル発生時の原因究明に役立てることができる。
またログデータは、一時記録部91aに一時的に記録される際は非ファイル形式、すなわち未だファイル形式に変換されていない生データとすることが好ましい。一方でログデータは、ログデータ保存部74に保存される際には、所定のファイル形式に変換される。これにより、バッファリングに際しては生データのままとして逐次記録に要求される書き込み速度を達成しやすくしつつ、データとして保存する際には所定のファイル形式として変換することで、再利用時の汎用性を高めることが可能となる。またファイル形式は、プログラムの専用フォーマットの他、規格化されたファイル形式としてもよい。さらにファイル保存時には、必要に応じて圧縮や暗号化などの処理を加えてもよい。
なお、ログデータは単独で保存する他、プロジェクトデータと関連付けて保存することもできる。例えば、デバイス値や、カメラ部98で撮像した画像データ等のログデータと、ユーザープログラム等を含むプロジェクトデータを、一の運転記録データのファイルに統合して保存してもよい。あるいはログデータとプロジェクトデータを別個のファイルとして保存しつつ、これらを関連付けておき、一方のファイルを開くと、他のファイルを参照して読み込み可能としてもよい。
このように保存トリガとは別個に、記録開始トリガを用意することで、バッファリングされるバッファ期間と、バッファされたログデータを保存する保存期間を、個別に設定できる。この結果、ユーザは実際にログデータを保存する保存期間を、バッファ期間の制約を受けることなく、トラブルの原因解析などに適した期間に設定することができ、より柔軟な設定が可能となる。
例えば、図14に示すようにワークWKをプレス機PMで加工した後、ワーク測定用センサWSで検査を行い、検査NGの場合にはプレス機PMで加工した際の記録データを保存する場合を考える。また、この検査処理のフローを、図15のフローチャートに示す。この図に示すように、まずステップS1501で、プレス機PMでワークを加工する。次にステップS1502で、搬送されたワークWKが所定位置に達したことをワーク検知用センサWDで検知すると共に、ワーク測定用センサWSでワークWKを検査する。そしてステップS1503で、ワーク測定用センサWSの検査結果がOKかNGかを判定し、OKの場合はステップS1501に戻って次のワークWKをプレス機PMで加工する処理を繰り返す。一方、NGの場合はステップS1504に進み、プレス機PMで加工した際の記録データを保存する。
以上の検査処理において、プレス機PMでは温度により精度が変わったり、トルク値の変化等により製品の精度が変わる等して、品質に影響することが考えられる。そのため、加工時のプレス機PMのトルク値や座標データの変化、温度データ等を記録しておき、後工程の検査でNGとなった際には記録データを保存して、調査したいことが多い。このような場合において、従来の方法では検査NGとなったときにプレス機で加工した時の記録データを保存しようとすると、プレス機で加工している時から検査NGになったタイミングまでのデータを保存する必要があった。このため、プレス機で加工したタイミングのデータが消えていたり、大量のメモリ量が必要になる等の問題があった。
これに対して本実施形態に係る方法では、プレス機で加工し始めるタイミングで記録開始トリガを入力し、加工に要する時間分だけ記録バッファを行うように設定すれば、加工したタイミングのデータを、必要最小限のメモリ量で確実に収集することができる。
(開始リレー)
記録バッファ設定部46の一例として、GUIで構成した例を図16に示す。この図16は開始リレーに基づいてログデータの収集期間を設定するためのUI160を示している。この例ではポインタ101によってプルダウンメニュー161から収集方法として開始リレーが選択されている。収集方法とはログデータ73の収集方法である。この例では、保存トリガ前後と呼ばれる収集方法と、開始リレーと呼ばれる収集方法とが説明される。ログ設定部51は、ユーザにより選択された収集方法に従ってUI160を変更する。テキストボックス166は開始リレーとして使用されるリレーデバイスのデバイス名を受け付ける。ガイダンス部165が示すように、開始リレーと呼ばれる収集方法では、開始リレーがONになったタイミングが収集時間の起点(開始点)となる。例えば、製造ラインを流れてくる1個のワークをプレス処理するのに30秒かかると仮定する。また、トラブルが発生しうる時間は、30秒間の処理時間の内最初の20秒間であると仮定する。リレーデバイスR000はプレス処理を開始するタイミングを規定するリレーである。収集部92aは、リレーデバイスR000がONになると、20秒間にわたりデバイス値や画像データをリングバッファに格納する。次のワークが到着することで、リレーデバイスR000が再びONになると、収集部92aは、20秒間にわたりデバイス値や画像データをリングバッファに格納する。保存トリガであるリレーデバイスR200がONになると、保存部93は、リングバッファに格納されている最新の20秒間にわたるデバイス値や画像データを取得してログデータ73を作成する。保存トリガであるリレーデバイスR200は、トラブルが発生したときにONとなるリレーデバイスである。
ログ設定部51はUI160を通じて設定された情報をログ設定データ72に格納し、プロジェクトデータ71と共にCPUユニット3に転送する。
(保存トリガ前後)
保存トリガ設定部47の一例として、GUIで構成した例を図17に示す。この図17はログデータの収集期間を設定するためのUI160を示している。UI160は収集方法を指定するためのプルダウンメニュー161を有している。保存トリガ前後とは、保存トリガがONになったタイミングよりも前の収集時間Taと保存トリガがONになったタイミングよりも後の収集時間Tbとにおいてログデータ73を収集する方法である。テキストボックス162は収集時間Tの入力を受け付ける。収集時間Tは、収集時間Taと収集時間Tbとの合計値である。テキストボックス163はトリガー後の収集時間Tbの入力を受け付ける。保存トリガの設定部164は、保存トリガとして利用されるリレーデバイスのデバイス名と、条件(例:OFFからONに切り替わったこと)との設定を受け付ける。上矢印は、保存トリガとして指定されたリレーデバイスがOFFからONに切り替わったことを意味する。ガイダンス部165は、収集期間を説明するためのUIである。この例では、保存トリガを境として、ログデータ73が収集されることが示されている。ログ設定部51は、デバイスサイズやスキャンタイムの伸びに関する情報を、UI160の表示欄140に表示してもよい。
保存トリガ前後と呼ばれる収集方法では、リングバッファにはログデータとして、デバイス値や画像データが常時格納される。保存部93は、保存トリガであるリレーデバイスR200がONになると、収集時間として指定された20秒のログデータ73を作成する。保存部93は、リレーデバイスR200がONになったタイミングから18秒前に記録されたデータから、当該タイミングから2秒後までに記録されたデータをリングバッファから読み出してログデータ73を作成する。
(ログデータ収集の手順の詳細)
次に、記録開始トリガに従いログデータを一時記録し、保存する手順の詳細を、図18のフローチャートに基づいて説明する。まずステップS1801において、END処理で記録開始トリガを確認する。ここで記録開始トリガがOFFの場合は、ステップS1801に戻って処理を繰り返す。すなわち記録開始トリガの検出を待機する。例えば、記録開始トリガとして指定したデバイスを監視する。
そして記録開始トリガがONしたタイミングで、ステップS1802に進み、記録時間分だけ記録バッファを実施する。ここでは、記録バッファ設定部46で設定されたバッファ記録期間だけ、一時記録部91aにログデータを一時的に記録していく。一時記録部91aの実施形態は、図8のログデータ73や図9の一時記録部91aが該当する。このタイミングでは、一時的に記録されるのみで、ファイル形式とはなっていない。
次にステップS1803において、END処理で記録開始トリガ又は保存トリガがONするまで待機する。ここで記録開始トリガがONとなった場合は、ステップS1802に戻って処理を繰り返す。一方、保存トリガがONとなった場合は、ステップS1804に進み、他の記録IDの保存処理を実行中か否かを判定する。実行中の場合は、ステップS1805に進み、当該他の記録IDの保存処理が完了するまで待機し、他の記録IDの保存が完了すると、ステップS1806に進む。この例では、記録開始トリガによる記録バッファ動作は、従来の保存トリガと並行して実施可能である。その一方で、保存処理を1IDずつのみ実施可能としている場合は、他の記録IDが保存実行中であればステップS1805に進み、他の記録IDが保存実行中でなければステップS1806に遷移する。
そしてステップS1806において、記録データの保存を行う。ここでは、一時記録部91aに保持されたログデータを、ログデータ保存部74に保存する。ここでは記録したログデータをファイル形式に変換して、図8のメモリカード36Aや内部メモリ37に保存する。ログデータの保存が完了すると、ステップS1801に戻る。このようにして、所望のタイミングでログデータを収集して保存していくことが可能となる。
なお以上の例では、ステップS1801及びステップS1803の記録開始トリガや保存トリガの確認を、END処理のタイミングで実施し、それ以外の記録バッファや保存処理は、ラダープログラムの実行と並行して実施している。ただ本発明はこのような動作に限定されるものでなく、ハードウェアや処理能力の許す範囲で、並列処理を任意のタイミングで行わせてもよい。
また以上の例では、保存トリガで指定した固定のタイミングで、ログデータを保存する構成について説明した。ただ本発明はこの構成に限らず、保存トリガに従って記録するタイミングを動的に指定することもできる。このような例を変形例として、図19に示す。この図に示す例では、保存トリガが入力されると、この保存トリガを基準として、保存するべきログデータの開始時刻と保存期間とが決定される。これらの、保存トリガを基準とした遡及時間や、保存期間は、予め保存トリガ設定部47などにより設定される。この方法であれば、記録開始トリガに従うことなくログデータを保存対象にするタイミングを指定でき、結果としてログデータの記録タイミングと保存タイミングを分離できる。またこのタイミングは、ラダープログラムの実行中に指定することも可能である。
(実施形態2)
なお、以上の例では保存トリガを一のみ設定する例を説明した。ただ本発明は、別の保存トリガを設定することもできる。例えば、バッファ期間を収集期間とする第二保存トリガを用意し、さらに第二保存トリガにより保存されるログデータを、ログデータ保存部74とは別に用意した第二ログデータ保存部74に保存することができる。これにより、従来型のログデータの収集と、上述した実施形態で説明した、バッファ期間を収集期間と別個に設定したログデータの収集とを並列的に行うことが可能となる。このような例を実施形態2に係るプログラマブルロジックコントローラとして、図20に示す。なお、上述した図6等と同じ部材については、同じ符号を付して詳細説明を適宜省略する。この図に示すプログラマブルロジックコントローラは、PC側CPU21Bが、ログ設定部51Bを備えている。ログ設定部51Bは、保存トリガ設定部47に加えて、第二保存トリガ設定部47Bを備えている。第二保存トリガ設定部47Bは、保存トリガ設定部47で設定された保存トリガとは別個に、一時記録部91aに一時的に記録されたログデータの保存を指示する第二保存トリガを設定する。また保存部の機能を奏するメモリカード36Aは、ログデータ73を保存するログデータ保存部74に加えて、第二保存トリガ設定部47Bで設定された第二保存トリガに従い、一時記録部91aに保持されたログデータを、一時記録部91aにおける保存期間と等しい期間分保存する第二ログデータ保存部74Bを備えている。この構成により、従来の保存トリガと同様、ログデータのバッファリング期間と保存期間が等しい記録も併存利用することが可能となる。