(57)【特許請求の範囲】
【請求項１】
機器を制御するためのプログラムを繰り返し実行する第１ユニットと、第２ユニットと、を備える制御装置であって、
前記第１ユニットは、
前記プログラムを実行するためのデータを記憶する第１記憶手段と、
前記プログラムを実行し、前記プログラムの実行処理が終了する度に実行するエンド処理において、ユーザから履歴を残すことが指定された前記第１記憶手段の記憶領域から前記データを読み出して出力する第１プロセッサと、を有し、
前記第２ユニットは、
前記第１プロセッサによって出力された前記データが予め定められた順に格納される複数のバッファと、
前記複数のバッファのうちの２つの前記バッファに格納された前記データから前記データの差分を算出する第２プロセッサを有する処理手段と、
前記第２プロセッサによって算出された前記差分を蓄積して記憶する第２記憶手段と、を有し、
前記第１プロセッサは、前記データの出力が完了したことを前記処理手段に通知し、
前記第２プロセッサは、前記第１プロセッサからの通知に基づいて、前記第１プロセッサによる前記プログラムの次の実行処理と並列して、前記データの前記差分を算出する、
制御装置。
【請求項２】
前記第１プロセッサは、前記エンド処理において、前記データの比較又は演算を実行することなく、前記第１記憶手段から前記データを読み出して出力する、
請求項１に記載の制御装置。
【請求項３】
前記第１プロセッサにより出力された前記データを記憶する第３記憶手段、をさらに備え、
前記処理手段は、前記第１プロセッサにより前記データが出力される毎に、前記第３記憶手段から前記データを読み出して、前記複数のバッファに予め定められた順に格納する、
請求項１又は２に記載の制御装置。
【請求項４】
前記処理手段は、前記第２プロセッサと、前記第３記憶手段から前記データを読み出して、前記複数のバッファに予め定められた順に格納する第３プロセッサと、を有する、
請求項３に記載の制御装置。
【請求項５】
前記第１プロセッサは、前記エンド処理が完了したことを前記処理手段に通知し、
前記処理手段は、前記エンド処理が完了したことの通知に基づいて、前記第２プロセッサにおける前記算出、及び、前記第３プロセッサにおける前記格納を行って、前記算出及び前記格納が完了したことを前記第１プロセッサに通知し、
前記第１プロセッサは、前記エンド処理が開始すると、前記算出及び前記格納が完了したことが通知されたと判定した場合に、前記第１記憶手段から前記データを読み出して出力する、
請求項４に記載の制御装置。
【請求項６】
前記第１ユニットと前記第２ユニットとが互いに信号を伝送するためのバス、を備える、
請求項１から５のいずれか一項に記載の制御装置。
【請求項７】
前記複数のバッファは、３つ以上の前記バッファを有し、
前記第２プロセッサは、前記データが書き込まれている前記バッファとは異なる２つの前記バッファ、又は、前記データが次に書き込まれる前記バッファとは異なる２つの前記バッファに格納された前記データから前記データの前記差分を算出する、
請求項１から６のいずれか一項に記載の制御装置。
【請求項８】
機器を制御するためのプログラムを繰り返し実行する制御装置によって実行されるロギング方法であって、
前記プログラムを実行する第１プロセッサが、前記プログラムを実行するためのデータを、前記プログラムの実行処理が終了する度に実行するエンド処理において、ユーザから履歴を残すことが指定された第１記憶手段の記憶領域から読み出して出力する出力ステップと、
第２プロセッサが、前記第１プロセッサによって出力された前記データが予め定められた順に格納される複数のバッファのうちの２つの前記バッファに格納された前記データから前記データの差分を算出する算出ステップと、
前記差分を第２記憶手段に蓄積する蓄積ステップと、
を含み、
前記第１プロセッサは、前記データの出力が完了したことを、前記第２プロセッサを有する処理手段に通知し、
前記第２プロセッサは、前記第１プロセッサからの通知に基づいて、前記第１プロセッサによる前記プログラムの次の実行処理と並列して、前記データの前記差分を算出する、
ロギング方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、制御装置及びロギング方法に関する。
【背景技術】
【０００２】
ＦＡ（Factory Automation）の現場では、制御装置が、産業用機械に代表される種々の機器を制御することで、生産工程、加工工程、検査工程、その他の工程が実現される。通常、制御装置は、ユーザから提供されるプログラムを実行することで、ユーザによって任意に規定された手順に従って制御処理を実行する。例えば、制御装置であるＰＬＣ（Programmable Logic Controller）は、被制御機器に関するデータが一時的に格納されるメモリを有し、ユーザから提供されたシーケンスプログラムに従って当該メモリ内のデータをリード又はライトすることにより被制御機器を制御する。【０００３】
制御装置による機器の制御において異常が発生した場合には、その異常の原因を特定することが望ましい。また、異常に限られず、機器の制御に関する情報を記録しておいて、その後に当該情報を検証したいという要望がある。そこで、ユーザが、データの履歴を残すための条件を予め制御装置に設定し、制御装置が、この条件に基づいて機器及び制御装置自体の動作状態を示すデータをロギングする技術が知られている（例えば、特許文献１を参照）。【０００４】
特許文献１には、トレース設定情報に設定された対象データについてデータメモリをトレースし、トレース結果が前回のトレース実行時から変化しているときに、トレース結果をトレースバッファに格納する演算ＡＳＩＣと、トレースバッファに格納されたトレース結果をローダに返信してユーザに提示する制御マイコンと、を備えるプログラマブルコントローラについて記載されている。このプログラマブルコントローラによれば、任意のデータの演算途中における変化をトレースすることができる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１０−２１１５５５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
近年、多数のデータをロギングしておいて、その後における工程管理及び品質改善のための大規模な分析を行いたいという要求が増している。特許文献１の技術では、制御対象装置の制御を行うプログラムを実行する演算ＡＳＩＣにおいて、プログラムに含まれる任意の命令をトレース条件として、プログラムの演算途中にトレース条件である命令を実行するときにトレース処理を行っている。特許文献１の技術において多数のデータをトレースする場合には、制御対象装置の制御を行うプログラムを実行する演算ＡＳＩＣにおいて、プログラムの実行途中にトレースを行うため、トレースを行うデータの数が増加すると演算ＡＳＩＣの演算負荷が大幅に増加してしまう。このため、演算ＡＳＩＣにおける制御対象装置の制御を行うプログラムの実行が中断するような事態が生じ、演算ＡＳＩＣによる制御対象装置の制御に影響が及ぶおそれがある。このため、ロギング対象のデータを多数にしたときに機器の制御に及ぶ影響を軽減する余地があった。また、ロギング対象のデータを多数にすると、記憶手段の記憶領域が不足してしまい、十分な量のロギング対象のデータを確保できない恐れがあった。【０００７】
本開示は、ロギング対象のデータを多数にしたときに機器の制御に及ぶ影響を軽減し、多数のデータをロギングすることを目的とする。
【課題を解決するための手段】
【０００８】
上記目的を達成するため、本開示の制御装置は、機器を制御するためのプログラムを繰り返し実行する第１ユニットと、第２ユニットと、を備える制御装置であって、第１ユニットは、プログラムを実行するためのデータを記憶する第１記憶手段と、プログラムを実行し、プログラムの実行処理が終了する度に実行するエンド処理において、ユーザから履歴を残すことが指定された第１記憶手段の記憶領域からデータを読み出して出力する第１プロセッサと、を有し、第２ユニットは、第１プロセッサによって出力されたデータが予め定められた順に格納される複数のバッファと、複数のバッファのうちの２つのバッファに格納されたデータからデータの差分を算出する第２プロセッサを有する処理手段と、第２プロセッサによって算出された差分を蓄積して記憶する第２記憶手段と、を有し、第１プロセッサは、データの出力が完了したことを処理手段に通知し、第２プロセッサは、第１プロセッサからの通知に基づいて、第１プロセッサによるプログラムの次の実行処理と並列して、データの差分を算出する。
【発明の効果】
【０００９】
本開示によれば、機器を制御するためのプログラムを実行する第１プロセッサが、プログラムの実行処理が終了する度に実行するエンド処理において、第１記憶手段からデータを読み出して出力し、第２プロセッサが、複数のバッファのうちの２つのバッファに格納されたデータからデータの差分を算出する。データの差分が第２プロセッサによって算出されるため、この差分の算出を第１プロセッサが実行する必要はない。また、第２記憶手段が、データの差分を蓄積して記憶する。このため、第２記憶手段は、データをそのまま記憶する場合よりも多くのデータに関する情報を蓄積することができる。したがって、ロギング対象のデータを多数にしたときに機器の制御に及ぶ影響を軽減し、多数のデータをロギングすることができる。
【図面の簡単な説明】
【００１０】
【図１】実施の形態に係る制御システムの構成を示す図
【図２】実施の形態に係る制御装置の構成を示す図
【図３】実施の形態に係るデータメモリの構成を示す図
【図４】実施の形態に係るデータバッファへのアクセスについて説明するための第１の図
【図５】実施の形態に係るデータバッファへのアクセスについて説明するための第２の図
【図６】実施の形態に係るデータのロギングについて説明するための第１の図
【図７】実施の形態に係るデータのロギングについて説明するための第２の図
【図８】実施の形態に係る制御処理を示すフローチャート
【図９】実施の形態に係るトレース処理を示すフローチャート
【図１０】実施の形態に係るデータの伝送について説明するための図
【図１１】実施の形態に係る履歴出力処理を示すフローチャート
【図１２】実施の形態に係るスキャンタイムと比較例に係るスキャンタイムとを示す図
【図１３】変形例に係る制御装置の構成を示す第１の図
【図１４】変形例に係る制御装置の構成を示す第２の図
【発明を実施するための形態】
【００１１】
以下、本開示の実施の形態に係る制御装置１０について、図面を参照しつつ詳細に説明する。
【００１２】
実施の形態
図１には、本実施の形態に係る制御装置１０により形成される制御システム１００の構成が示されている。制御システム１００は、製造ラインを稼働させるために工場に構築されるシステムである。制御システム１００は、産業用ネットワーク５０を介して機器６１，６２を制御する制御装置１０と、製造ラインに設置された機器６１，６２と、を有する。なお、図１には、２つの機器６１，６２が代表的に示されているが、制御装置１０とともに制御システム１００を構成する機器の数は、１つであってもよいし、２つより多くてもよい。
【００１３】
機器６１，６２は、例えば、製造ラインに設置されるセンサ、アクチュエータ、ロボット、その他のＦＡ機器である。機器６１，６２は、制御装置１０からの指示に従って動作する。例えば、センサである機器６１は、制御装置１０から指定された周期で、センシング結果を制御装置１０に通知する。また、アクチュエータである機器６２は、制御装置１０から指定されたタイミング及び速度でワークを移動させる。
【００１４】
制御装置１０は、工場内の機器６１，６２を統括的に制御することで連動させて、一連の製造ラインを実現させるＰＬＣ（Programmable Logic Controller）である。制御装置１０は、ユーザにより提供されたプログラムを受け付けて、当該プログラムにより規定される制御処理を実行することで機器６１，６２を制御する。
【００１５】
制御装置１０は、プログラムを繰り返し実行するＣＰＵ（Central Processing Unit）ユニット２０と、プログラムを実行するために利用されるデータの履歴を記憶するトレースユニット３０と、機器６１，６２と通信するＩ／Ｏ（Input/Output）ユニット４０と、を有する。ＣＰＵユニット２０、トレースユニット３０及びＩ／Ｏユニット４０は、システムバス１０１を介して互いに信号を伝送する。システムバス１０１は、制御装置１０において、第１ユニットとしてのＣＰＵユニット２０と第２ユニットとしてのトレースユニット３０とが互いに信号を伝送するためのバスの一例に相当する。
【００１６】
図２には、ＣＰＵユニット２０及びトレースユニット３０の構成が示されている。ＣＰＵユニット２０は、システムバス１０１を有する不図示のベースユニットに脱着可能なモジュールである。制御装置１０の用途に応じて必要な性能を有するＣＰＵユニット２０が、ユーザによってベースユニットに取り付けられることで制御装置１０が構成される。ＣＰＵユニット２０は、ユーザプログラム２２１を実行するためのデータを記憶するデータメモリ２１と、機器６１，６２を制御するためのユーザプログラム２２１を記憶するプログラムメモリ２２と、ユーザプログラム２２１を実行する処理部２３と、を有する。
【００１７】
データメモリ２１は、ＲＡＭ（Random Access Memory）及びＥＥＰＲＯＭ（Electrically Erasable Programmable Read-Only Memory）に代表される記憶装置を含む。データメモリ２１は、図３に示されるように、一又は複数の領域２１１を有する。領域２１１はそれぞれ、ユーザによって履歴を残すことが指定されたデータ２１２が格納される記憶領域である。領域２１１は、例えば、「Ｄ１０」というアドレスにより示される１ワードの記憶領域であって、データ２１２は、この記憶領域に格納された「５０」という値を示す。データ２１２は、機器６１によるセンシング結果を示す値であってもよいし、機器６２に対する動作指令を示す値であってもよい。データ２１２は、デバイスデータとも呼称される。
【００１８】
制御装置１０が機器６１，６２とのサイクリック通信を行う場合には、データメモリ２１の特定の領域に格納されるデータが、Ｉ／Ｏユニット４０を介して機器６１，６２のデータと同期される。このようなサイクリック通信により領域２１１のデータ２１２が同期される場合には、処理部２３は、データ２１２を読み出すことにより機器６１から送信されたデータを取得し、データ２１２を書き込むことにより機器６２に対して動作内容を指示する。
【００１９】
また、データ２１２は、制御装置１０の外部で扱われることなく制御処理において利用される値であってもよい。制御処理において利用される値としては、例えば、制御処理を分岐させるためのフラグ値、及び、制御処理の実行に際して発生したエラーを示すエラーコードがある。以下では、１つのデータ２１２が変化する場合において、データ２１２の履歴が記録される例を中心に説明する。データメモリ２１は、制御装置１０において、プログラムを実行するためのデータを記憶する第１記憶手段の一例に相当する。
【００２０】
図２に戻り、プログラムメモリ２２は、ＲＡＭ及びＥＥＰＲＯＭに代表される記憶装置を含む。プログラムメモリ２２には、ユーザから提供されたユーザプログラム２２１が格納される。ユーザプログラム２２１は、例えば、制御処理の内容がラダー言語で記述されたラダープログラムから、ユーザの端末においてコンパイルされた実行形式のオブジェクトプログラムである。
【００２１】
処理部２３は、ＡＳＩＣ（Application Specific Integrated Circuit）を含む。処理部２３は、ユーザプログラム２２１を実行する制御プロセッサ２３１と、制御プロセッサ２３１がデータ２１２を一時的に退避させるための外部ターゲットメモリ２３２と、を有する。
【００２２】
制御プロセッサ２３１は、制御装置１０においてユーザプログラム２２１を実行するＣＰＵに相当する。制御プロセッサ２３１は、ユーザプログラム２２１を繰り返し実行する。また、制御プロセッサ２３１は、ユーザプログラム２２１を実行する毎に、データメモリ２１の各領域２１１に記憶されているデータ２１２をデータメモリ２１から読み出して外部ターゲットメモリ２３２に書き込むことにより出力する。より詳細には、制御プロセッサ２３１は、ユーザプログラム２２１にて定義されている制御を１回実行完了すると、データ２１２の出力を実行する。そして、制御プロセッサ２３１は、データ２１２の出力が完了したら、ユーザプログラム２２１の次の実行を開始する。制御プロセッサ２３１は、制御装置１０において、プログラムを実行し、プログラムを実行する毎に第１記憶手段からデータを読み出して出力する第１プロセッサの一例に相当する。
【００２３】
外部ターゲットメモリ２３２は、ＡＳＩＣである処理部２３のレジスタに相当し、外部ターゲットメモリ２３２には、ＣＰＵユニット２０の外部をターゲットとして出力される情報が格納される。外部ターゲットメモリ２３２に記憶されたデータ２１２は、システムバス１０１を介してトレースユニット３０によって読み出される。外部ターゲットメモリ２３２は、制御装置１０において、第１プロセッサにより出力されたデータを記憶する第３記憶手段の第１の例に相当する。
【００２４】
トレースユニット３０は、ベースユニットに脱着可能なモジュールであって、ＣＰＵユニット２０から取得したデータ２１２をトレースする。ここで、トレースユニット３０によるデータ２１２のトレースは、データ２１２のログを蓄積することを意味する。ロギングに関するユーザの要望に応じて必要な性能を有するトレースユニット３０がベースユニットに取り付けられることで、制御装置１０が構成される。トレースユニット３０によって蓄積されたログは、将来においてユーザがデータ２１２の推移を追跡して分析するために利用される。トレースユニット３０は、データ２１２のロギングのための処理を実行する処理部３１と、データ２１２の履歴を示す情報が格納される大容量メモリ３２と、を有する。
【００２５】
処理部３１は、一又は複数のＡＳＩＣを含む。処理部３１は、ＣＰＵユニット２０から読み出されたデータ２１２が一時的に格納される内部ターゲットメモリ３１０と、内部ターゲットメモリ３１０に格納されたデータ２１２を大容量メモリ３２のデータバッファ３３１，３３２，３３３のいずれかに書き込む第１トレースプロセッサ３１１と、データバッファ３３１〜３３３のうちの２つのバッファに格納されたデータ２１２を用いてデータ２１２の差分を算出する第２トレースプロセッサ３１２と、を有する。以下では、データバッファ３３１〜３３３を総称してデータバッファ３３と表記する。処理部３１は、制御装置１０において、第２プロセッサとしての第２トレースプロセッサ３１２を有する処理手段の一例に相当する。
【００２６】
内部ターゲットメモリ３１０は、第１トレースプロセッサ３１１とともにＡＳＩＣを構成し、当該ＡＳＩＣのレジスタに相当する。内部ターゲットメモリ３１０には、トレースユニット３０の内部をターゲットとして出力される情報が格納される。詳細には、第１トレースプロセッサ３１１によってＣＰＵユニット２０の外部ターゲットメモリ２３２から読み出されたデータ２１２が、内部ターゲットメモリ３１０に一時的に格納されて、第１トレースプロセッサ３１１によって利用される。内部ターゲットメモリ３１０は、制御装置１０において、第１プロセッサにより出力されたデータを記憶する第３記憶手段の第２の例に相当する。
【００２７】
第１トレースプロセッサ３１１は、ＣＰＵユニット２０の制御プロセッサ２３１によってデータ２１２が出力される毎に当該データ２１２を取得して、取得した全てのデータ２１２をデータバッファ３３のいずれか１つに書き込む。詳細には、第１トレースプロセッサ３１１は、データ２１２を直前に書き込んだデータバッファ３３とは異なる別のデータバッファ３３にデータ２１２を書き込む。より詳細には、第１トレースプロセッサ３１１は、データバッファ３３１，３３２，３３３にこの順で循環させてデータを書き込む。すなわち、第１トレースプロセッサ３１１は、ｎ回目に取得した全てのデータ２１２をデータバッファ３３１に書き込み、ｎ＋１回目に取得した全てのデータ２１２をデータバッファ３３２に書込み、ｎ＋２回目に取得した全てのデータ２１２をデータバッファ３３３に書き込む。データバッファ３３３の次には、第１トレースプロセッサ３１１は、データバッファ３３１に戻って取得した全てのデータ２１２を書き込む。第１トレースプロセッサ３１１は、データ２１２を取得してデータバッファ３３に書き込む処理を、上述の制御プロセッサ２３１におけるユーザプログラム２２１の実行中に開始することができる。
【００２８】
図２には、第１トレースプロセッサ３１１がデータバッファ３３１にデータ２１２を書き込むことが破線の矢印で示されている。そして、第１トレースプロセッサ３１１は、データバッファ３３１に書き込んだデータ２１２の取得の次に取得したデータ２１２を、図４に示されるように、データバッファ３３２に書き込む。さらに、第１トレースプロセッサ３１１は、データバッファ３３２に書き込んだデータ２１２の取得の次に取得したデータ２１２を、図５に示されるように、データバッファ３３３に書き込む。そして、第１トレースプロセッサ３１１は、データバッファ３３３に書き込んだデータ２１２の取得の次に取得したデータ２１２を図２に示されるように、データバッファ３３１に書き込む。以降、第１トレースプロセッサ３１１は、図２，４，５に示されるデータ２１２の書き込みを繰り返す。
【００２９】
なお、第１トレースプロセッサ３１１が、最新の３回分の制御プロセッサ２３１から出力されたデータ２１２をデータバッファ３３それぞれに格納していれば、データ２１２がデータバッファ３３に書き込まれる順番を変更してもよい。第１トレースプロセッサ３１１は、制御装置１０において、第１プロセッサによりデータが出力される毎に、第３記憶手段からデータを読み出して、複数のバッファに予め定められた順に格納する第３プロセッサの一例に相当する。
【００３０】
第２トレースプロセッサ３１２は、第１トレースプロセッサ３１１として機能するＡＳＩＣによって発揮される他の機能として実現されてもよいし、第１トレースプロセッサ３１１とは異なるハードウェアによって実現されてもよい。第２トレースプロセッサ３１２は、２つのデータバッファ３３に格納されているデータ２１２からデータ２１２の差分を算出して、算出した差分を大容量メモリ３２の差分記憶部３４に格納する。詳細には、第２トレースプロセッサ３１２は、第１トレースプロセッサ３１１によってアクセスされるデータバッファ３３とは異なる２つのデータバッファ３３それぞれに格納されているデータ２１２を読み出して、これらのデータ２１２のうち新しいデータ２１２から古いデータ２１２を減じて得る差分を示す情報を、差分記憶部３４に追加する。つまり、データ２１２の差分とは、新しいデータ２１２において古いデータ２１２に比べて変更がされている箇所を示す情報である。
【００３１】
図２の例では、第２トレースプロセッサ３１２が、データバッファ３３２，３３３からデータを読み出すことが破線の矢印で示されている。第２トレースプロセッサ３１２は、この例においては、データバッファ３３３から読み出したデータ２１２から、データバッファ３３２から読み出したデータ２１２を減算し、減算結果を示す差分データを差分記憶部３４に書き込む。次に、第２トレースプロセッサ３１２は、図４に示されるように、データバッファ３３１から読み出したデータ２１２から、データバッファ３３３から読み出したデータ２１２を減算し、減算結果を示す差分データを差分記憶部３４に書き込む。次に、第２トレースプロセッサ３１２は、図５に示されるように、データバッファ３３２から読み出したデータ２１２から、データバッファ３３１から読み出したデータ２１２を減算し、減算結果を示す差分データを差分記憶部３４に書き込む。その後、第２トレースプロセッサ３１２は、図２の例に示されるように、データバッファ３３２，３３３から得た減算結果を差分記憶部３４に書き込む。以降、第２トレースプロセッサ３１２は、図２，４，５に示されるデータ２１２の読み出し及び差分の算出を繰り返す。
【００３２】
第２トレースプロセッサ３１２は、第１トレースプロセッサ３１１によってデータバッファ３３に書き込まれている最中の、又は書き込まれるべき最新のデータ２１２に対して、その前回及び前々回にデータバッファ３３に格納されたデータ２１２の差分を順次算出することとなる。第２トレースプロセッサ３１２は、制御装置１０において、複数のバッファのうちの２つのバッファに格納されたデータからデータの差分を算出する第２プロセッサの一例に相当する。この第２プロセッサは、データが書き込まれているバッファとは異なる２つのバッファ、又は、データが次に書き込まれるバッファとは異なる２つのバッファに格納されたデータからデータの差分を算出する。なお、第２トレースプロセッサ３１２は、データ２１２の差分を算出する処理を、上述の制御プロセッサ２３１によるユーザプログラム２２１の実行中に開始することができる。
【００３３】
大容量メモリ３２は、ＥＥＰＲＯＭ及びフラッシュメモリに代表される不揮発性の記憶装置を含む。大容量メモリ３２は、少なくともデータメモリ２１の領域２１１より大きな記憶容量を有する。大容量メモリ３２は、制御プロセッサ２３１から出力された最新の３回分の制御プロセッサ２３１から出力されたデータ２１２が格納されるデータバッファ３３と、第２トレースプロセッサ３１２によって算出された差分を順次蓄積する差分記憶部３４と、を有する。
【００３４】
データバッファ３３はそれぞれ、大容量メモリ３２が有する記憶領域の一部に相当する。データバッファ３３として利用される記憶領域は、予め定められてもよいし、ユーザによって指定されたロギング対象のデータ２１２の個数に応じて割り当てられてもよい。データバッファ３３には、第１トレースプロセッサ３１１によって図２，４，５に示されるように循環的に最新のデータ２１２が格納されて、他の２つのデータバッファ３３からは、第２トレースプロセッサ３１２によって前回及び前々回のデータ２１２が読み出される。データバッファ３３は、制御装置１０において、第１プロセッサによって出力されたデータが予め定められた順に格納される複数のバッファの一例に相当する。
【００３５】
差分記憶部３４は、大容量メモリ３２が有する記憶領域の一部に相当する。差分記憶部３４として利用される記憶領域は、予め定められてもよいし、ロギングすべき一又は複数のデータ２１２それぞれについて残すべき履歴の数に応じて割り当てられてもよい。差分記憶部３４には、第２トレースプロセッサ３１２によって差分データが書き込まれて蓄積される。ただし、差分記憶部３４は、いわゆるリングバッファと同様に、その容量の上限まで差分データを記憶した後は、最も古い差分データを消去して最新の差分データを新たに記憶する。差分記憶部３４は、制御装置１０において、第２プロセッサによって算出された差分を蓄積して記憶する第２記憶手段の一例に相当する。
【００３６】
続いて、データバッファ３３及び差分記憶部３４に格納される情報がデータ２１２の履歴に等しいことについて、図６，７を参照して説明する。図６には、ユーザプログラム２２１の実行処理７１と、実行処理７１が終了する度に実行されるエンド処理７２と、を含むスキャン７０が、制御プロセッサ２３１によって繰り返し実行されることが示されている。初回のエンド処理７２においては、データ２１２として「データ［１］」が出力されて、このデータ２１２がデータバッファ３３１に格納される。なお、図６においては、データバッファ３３を識別するためにデータバッファ３３それぞれの符号に等しい「３３１」、「３３２」及び「３３３」というＩＤが示されている。また、「データ［ｎ］」に付されている番号「ｎ」は、ｎ番目に出力されたことを示している。
【００３７】
スキャン７０が繰り返される度に、データバッファ３３２に「データ［２］」が書き込まれ、データバッファ３３３に「データ［３］」が書き込まれる。そして、次のスキャン７０では、データバッファ３３１に「データ［４］」が上書きされて、「データ［１］」が削除される。
【００３８】
ただし、差分記憶部３４には、「データ［１］」と「データ［２］」の差分である「差分＜１＞」、及び、「データ［２］」と「データ［３］」の差分である「差分＜２＞」が格納される。なお、「差分＜ｎ＞」に付されている番号「ｎ」は、差分記憶部３４にｎ番目に格納されたことを示している。ここで、「データ［２］」と「差分＜１＞」から「データ［１］」が復元されるため、「データ［２］」及び「差分＜１＞」は、「データ［１］」に等しい情報といえる。詳細には、「データ［２］」から「差分＜１＞」を減じることで「データ［１］」が復元される。
【００３９】
さらに古いデータ２１２が復元されることについて、図７の数値例を用いて説明する。図７の例では、データバッファ３３に、「データ［Ｎ］」としての２５４１という値と、「データ［Ｎ＋１］」としての２５４５という値と、「データ［Ｎ＋２］」としての２５４２という値が格納されている。また、差分記憶部３４には、最新の差分データである「差分＜Ｎ＞」としての＋４という値から、最も古い「差分＜Ｎ−９９＞」としての−２まで、１００個の差分データが格納されている。この例において、図６と同様にして、「データ［Ｎ］」から「差分＜Ｎ−１＞」を減じることで、データバッファ３３には格納されていない「データ［Ｎ−１］」として２５３８が復元される。また、このようにして得た「データ［Ｎ−１］」から「差分＜Ｎ−２＞」を減じることで、「データ［Ｎ−２］」が復元される。以降、同様にして「データ［Ｎ−３］」から「データ［Ｎ−９９］」までのデータ２１２が復元される。すなわち、図７に示されるデータバッファ３３及び差分記憶部３４が保持する情報は、最新の「データ［Ｎ＋２］」から「データ［Ｎ−９９］」までのデータ２１２の履歴に等しいといえる。
【００４０】
続いて、制御装置１０によって実行される処理について、図８〜１１を参照して説明する。図８には、ＣＰＵユニット２０の制御プロセッサ２３１によって実行される制御処理の流れが示されている。制御処理は、ユーザの操作によって制御処理の開始指示が入力されることで開始する。
【００４１】
制御処理では、制御プロセッサ２３１は、ユーザプログラム２２１を実行する（ステップＳ１１）。このステップＳ１１は、図６に示された実行処理７１に対応する。この実行処理により、制御装置１０は、機器６１，６２を制御して、製造ラインを稼働させる。
【００４２】
次に、制御プロセッサ２３１は、実行処理が終了すると、エンド処理を開始する（ステップＳ１２）。エンド処理は、ユーザプログラム２２１の１回の実行につき制御プロセッサ２３１が実行すべき処理であって、例えば、後述するステップＳ１３〜Ｓ１６の他に、エラーの有無の確認を含む。
【００４３】
エンド処理が開始すると、制御プロセッサ２３１は、第１トレースプロセッサ３１１及び第２トレースプロセッサ３１２が、後述するトレース処理を実行可能か否かを判定する（ステップＳ１３）。具体的には、制御プロセッサ２３１は、第１トレースプロセッサ３１１及び第２トレースプロセッサ３１２がトレース処理を実行中か否かを確認し、又は、後述のトレース処理におけるステップＳ２３とステップＳ２５とで第１トレースプロセッサ３１１及び第２トレースプロセッサ３１２から通知される完了通知を受け取っているか否かを確認する。
【００４４】
第１トレースプロセッサ３１１及び第２トレースプロセッサ３１２がトレース処理を実行可能でないと判定した場合（ステップＳ１３；Ｎｏ）、制御プロセッサ２３１は、ステップＳ１３の判定を繰り返して、第１トレースプロセッサ３１１及び第２トレースプロセッサ３１２が後述のトレース処理を実行可能となるまで待機する。そして、制御プロセッサ２３１は、第１トレースプロセッサ３１１及び第２トレースプロセッサ３１２がトレース処理を実行できると判定した場合（ステップＳ１３；Ｙｅｓ）、制御プロセッサ２３１は、データメモリ２１から予め指定された領域２１１のデータ２１２を読み出して外部ターゲットメモリ２３２に出力する（ステップＳ１４）。
【００４５】
ステップＳ１１の実行処理においては、データ２１２が変化してしまうため、データ２１２が一時的に固定されて変化しないエンド処理において、データ２１２がロギングのために読み出される。ステップＳ１４は、制御装置１０によって実行されるロギング方法において、プログラムを実行する第１プロセッサが、プログラムを実行するためのデータを、プログラムを実行する毎に第１記憶手段から読み出して出力する出力ステップの一例に相当する。
【００４６】
次に、制御プロセッサ２３１は、外部ターゲットメモリ２３２へのデータ２１２の書き込みが完了したか否かを判定する（ステップＳ１５）。書き込みが完了していないと判定した場合（ステップＳ１５；Ｎｏ）、制御プロセッサ２３１は、ステップＳ１５の判定を繰り返して、書き込みが完了するまで待機する。
【００４７】
一方、書き込みが完了したと判定した場合（ステップＳ１５；Ｙｅｓ）、制御プロセッサ２３１は、エンド処理の終了をトレースユニット３０の処理部３１に通知して、エンド処理を終了する（ステップＳ１６）。エンド処理の終了の通知は、トレースユニット３０によるロギングのための処理のトリガーとなる。これにより、制御プロセッサ２３１からデータ２１２が出力される毎に、トレースユニット３０がロギングのための処理を実行する。その後、制御プロセッサ２３１は、ステップＳ１１以降の処理を繰り返す。
【００４８】
図９には、トレースユニット３０によって実行されるトレース処理の流れが示されている。トレース処理は、トレースユニット３０の電源が投入されることで開始する。
【００４９】
トレース処理では、第１トレースプロセッサ３１１が、ＣＰＵユニット２０からの通知があるか否かを判定する（ステップＳ２１）。この通知は、エンド処理が終了した旨の通知であって、図８中のステップＳ１６に対応する。通知がないと判定した場合（ステップＳ２１；Ｎｏ）、第１トレースプロセッサ３１１は、ステップＳ２１の判定を繰り返して、通知を受けるまで待機する。
【００５０】
一方、通知があると判定した場合（ステップＳ２１；Ｙｅｓ）、第１トレースプロセッサ３１１は、外部ターゲットメモリ２３２からデータ２１２を読み出して内部ターゲットメモリ３１０に書き込むことによりデータ２１２を取得する（ステップＳ２２）。そして、第１トレースプロセッサ３１１は、ステップＳ２２で取得したデータを複数のデータバッファ３３のいずれかに書き込み、書き込みが完了したことを制御プロセッサ２３１へ通知する（ステップＳ２３）。具体的には、第１トレースプロセッサ３１１は、図２，４，５に示されたように、循環する順番でデータバッファ３３にデータ２１２を格納する。ここで、第１トレースプロセッサ３１１は、データバッファ３３にデータ２１２の格納する度に制御プロセッサ２３１へ書き込みの完了を通知する。
【００５１】
次に、第２トレースプロセッサ３１２は、前回と前々回に書き込まれたデータ２１２をデータバッファ３３から読み出して差分を算出する（ステップＳ２４）。そして、第２トレースプロセッサ３１２は、算出した差分を差分記憶部３４に書き込み、書き込みが完了したことを第１トレースプロセッサ３１１へ通知する（ステップＳ２５）。これにより、差分記憶部３４には、前々回のデータ２１２を復元するための差分データが追加される。その後、トレースユニット３０は、ステップＳ２１以降の処理を繰り返す。ステップＳ２４は、第２プロセッサが、第１プロセッサによって出力されたデータが予め定められた順に格納される複数のバッファのうちの２つのバッファに格納されたデータからデータの差分を算出する算出ステップの一例に相当し、ステップＳ２５は、差分を第２記憶手段に蓄積する蓄積ステップの一例に相当する。
【００５２】
図１０には、図８の制御処理及び図９のトレース処理を実行する制御装置１０における情報の伝送について示されている。図１０に示されるように、制御プロセッサ２３１は、実行処理（ステップＳ７１）の後のエンド処理において（ステップＳ７２）、データメモリ２１からデータ２１２を読み出して出力する（ステップＳ８１）。これにより、外部ターゲットメモリ２３２には、データ２１２が入力されて格納される（ステップＳ８２）。外部ターゲットメモリ２３２へのデータ２１２の書き込みが完了すると、外部ターゲットメモリ２３２から制御プロセッサ２３１に、書き込みが完了した旨が通知される（ステップＳ８３）。次に、制御プロセッサ２３１は、第１トレースプロセッサ３１１にエンド通知をする（ステップＳ８４）。エンド通知は、エンド処理が終了した旨の通知である。
【００５３】
エンド通知を受けて、第１トレースプロセッサ３１１は、転送処理を実行する（ステップＳ８５）。転送処理において、第１トレースプロセッサ３１１は、外部ターゲットメモリ２３２からデータ２１２を読み出す（ステップＳ８６）。これにより外部ターゲットメモリ２３２は、格納しているデータ２１２を出力する（ステップＳ８７）。データ２１２の読み出しが完了すると（ステップＳ８８）、第１トレースプロセッサ３１１は、ステップＳ８８で読み出しが完了したデータ２１２を、大容量メモリ３２のデータバッファ３３に書き込む（ステップＳ８９）。これにより、大容量メモリ３２には、データ２１２が入力される（ステップＳ９０）。データの書き込みが完了すると（ステップＳ９１）、第１トレースプロセッサ３１１は、完了通知を制御プロセッサ２３１へ送って（ステップＳ９２）、転送処理を終了する。なお、ステップＳ９２の完了通知は、図９に示されるステップＳ２３の通知に対応する。
【００５４】
第２トレースプロセッサ３１２は、ステップＳ８４のエンド通知を、第１トレースプロセッサ３１１を介して受けて（ステップＳ９３）、差分の算出処理を実行する（ステップＳ９４）。算出処理では、第２トレースプロセッサ３１２が、２つのデータバッファ３３からデータ２１２を読み出す（ステップＳ９５）。これにより、データバッファ３３から過去の２つのデータ２１２が出力される（ステップＳ９６）。２つのデータ２１２の読み出しが完了すると（ステップＳ９７）、第２トレースプロセッサ３１２は、ステップＳ９７で読み出しが完了した２つのデータ２１２の差分を大容量メモリ３２の差分記憶部３４に書き込む（ステップＳ９８）。これにより、差分記憶部３４には、差分データが入力されて追加される（ステップＳ９９）。差分の書き込みが完了すると（ステップＳ１００）、第２トレースプロセッサ３１２は、完了通知を第１トレースプロセッサ３１１へ送って（ステップＳ１０１）、算出処理を終了する。なお、第１トレースプロセッサ３１１は、第２トレースプロセッサ３１２の算出処理における完了通知を受け取ると、完了通知を制御プロセッサ２３１へ送信する（ステップＳ１０２）。ステップＳ１０２の完了通知は、図９に示されるステップＳ２５の通知に対応する。
【００５５】
なお、図１０では、第１トレースプロセッサ３１１による転送処理と、第２トレースプロセッサ３１２による算出処理と、が並列に実行されている。このため、第１トレースプロセッサ３１１によるデータ２１２の入出力と、第２トレースプロセッサ３１２による情報の入出力と、の順序が、図９に示されたトレース処理とは異なっている。第１トレースプロセッサ３１１と第２トレースプロセッサ３１２とは、並列処理が可能であるため、これらのプロセッサによって実行される処理の手順は、さらに任意に変更してもよい。
【００５６】
例えば、制御プロセッサ２３１からの処理部３１への通知は、データ２１２の出力が完了したことを示す通知であれば、エンド処理の完了の通知とは異なる通知であってもよい。制御プロセッサ２３１は、エンド処理が完了する前に、データ２１２の出力が完了した時点で、出力完了の旨を通知してもよい。また、処理部３１は、制御プロセッサ２３１からの通知に基づいて、第１トレースプロセッサ３１１によるデータ２１２の格納と、第２トレースプロセッサによる差分データの算出と、の双方を並列に実行してもよいし、これら格納及び算出のうちの一方を実行してから他方を実行してもよい。
【００５７】
図１１には、トレースユニット３０が、ロギングされたデータ２１２の履歴を出力する履歴出力処理の一例が示されている。この履歴出力処理は、例えば、ＣＰＵユニット２０からの要求に応答して第１トレースプロセッサ３１１によって実行される。
【００５８】
履歴出力処理では、第１トレースプロセッサ３１１が、データバッファ３３から最新のデータ２１２を読み出して出力し（ステップＳ３１）、データバッファ３３から２番目に新しいデータ２１２を読み出して出力する（ステップＳ３２）。これにより、図７の例では、「データ［Ｎ＋２］」及び「データ［Ｎ＋１］」が出力される。
【００５９】
次に、第１トレースプロセッサ３１１は、変数Ｋに初期値として１を代入して（ステップＳ３３）、前回出力したデータ２１２と、差分記憶部３４から読み出したＫ番目に新しい差分と、から（Ｋ＋２）番目に新しいデータ２１２を逆算して出力する（ステップＳ３４）。履歴出力処理においてステップＳ３４が初めて実行される場合には、ステップＳ３２で出力したデータ２１２と、最新の差分と、から３番目に新しいデータ２１２が復元されて出力される。
【００６０】
次に、第１トレースプロセッサ３１１は、差分記憶部３４からすべての差分を読み出したか否かを判定する（ステップＳ３５）。すべての差分を読み出してはいないと判定した場合（ステップＳ３５；Ｎｏ）、第１トレースプロセッサ３１１は、変数Ｋに１を加算して（ステップＳ３６）、ステップＳ３４以降の処理を繰り返す。これにより、履歴出力処理における２回目以降のステップＳ３４では、前回のステップＳ３４で出力したデータ２１２に基づいて、１つ前のデータ２１２が復元されて出力される。
【００６１】
ステップＳ３５にて、すべての差分を読み出したと判定した場合（ステップＳ３５；Ｙｅｓ）、第１トレースプロセッサ３１１は、履歴出力処理を終了する。
【００６２】
なお、履歴出力処理は、図１１を用いて説明した例に限定されない。例えば、第２トレースプロセッサ３１２が履歴出力処理を実行してもよい。また、処理部３１が、過去のデータ２１２を復元することなく、データバッファ３３及び差分記憶部３４に記憶されている情報をそのままデータ２１２の履歴として出力してもよい。また、履歴が残っているすべてのデータ２１２を出力することなく、外部から指定された一部のデータ２１２を出力してもよい。
【００６３】
以上、説明したように、ユーザプログラム２２１を実行する制御プロセッサ２３１が、ユーザプログラム２２１を実行する毎にデータメモリ２１からデータ２１２を読み出して出力し、第２トレースプロセッサ３１２が、２つのデータバッファ３３に格納されたデータ２１２の差分を算出する。ロギング対象であるデータ２１２の差分が第２トレースプロセッサ３１２によって算出されるため、この差分の算出を制御プロセッサ２３１が実行する必要はない。また、差分記憶部３４が、データ２１２の差分を蓄積して記憶する。このため、制御プロセッサ２３１は、データ２１２の出力を完了した後、ユーザプログラム２２１を実行することが可能となる。さらに、差分記憶部３４は、データ２１２をそのまま記憶する場合よりも多くのデータ２１２に関する情報を蓄積することができる。したがって、ロギング対象のデータ２１２を多数にしたときに機器６１，６２の制御に及ぶ影響を軽減し、多数のデータ２１２をロギングすることができる。
【００６４】
図１２には、本実施の形態に係る制御プロセッサ２３１が制御処理を実行するスキャンタイムと、比較例に係るスキャンタイムと、が比較されている。スキャンタイムは、ユーザプログラム２２１を実行してから再度ユーザプログラム２２１を実行するまでの１スキャンにかかる時間である。
【００６５】
図１２に示される比較例では、ユーザプログラム２２１の一部に相当するユーザプログラムＸ，Ｙ，Ｚ，Ｗを実行するＣＰＵユニットのプロセッサが、ユーザプログラムＸ，Ｙ，Ｚ，Ｗそれぞれを実行する度に、データ２１２を参照して前回の値からの変化を確認し、必要に応じてデータ２１２を退避している。このため、比較例に係るプロセッサが担う演算負荷は大きく、スキャンタイムの時間長８０は、比較的長い。
【００６６】
一方、本実施の形態に係る制御プロセッサ２３１は、ユーザプログラムＸ，Ｙ，Ｚ，Ｗを実行した後に、データの参照、比較、又は演算を実行することなく、エンド処理において単にデータ２１２を出力する。そして、第１トレースプロセッサ３１１がデータ２１２を取得してデータバッファ３３に書き込むとともに、第２トレースプロセッサ３１２が差分を算出して差分記憶部３４に書き込む。このため、制御プロセッサ２３１、第１トレースプロセッサ３１１及び第２トレースプロセッサ３１２がロギングに必要な処理を分担することとなる。したがって、制御プロセッサ２３１によるスキャンタイムの時間長８１は、比較例に係る時間長８０より短い。ひいては、ロギング対象のデータ２１２の個数が多くなった場合において、スキャンタイムが比較例のように大幅に増加することがない。
【００６７】
また、制御プロセッサ２３１がデータ２１２を外部に出力する時間、第１トレースプロセッサ３１１がデータ２１２を取得する時間、及び、第１トレースプロセッサ３１１がデータ２１２をデータバッファ３３に書き込む時間は、ユーザプログラム２２１の実行処理にかかる時間より大幅に短いケースが多い。このため、ユーザプログラム２２１の実行処理と、トレースユニット３０によるトレース処理と、を並列に実行して、スキャンタイムの大幅な増加を避けることができる。
【００６８】
また、制御装置１０は、制御プロセッサ２３１から出力されたデータ２１２が格納される外部ターゲットメモリ２３２を備え、処理部３１が、この外部ターゲットメモリ２３２からデータ２１２を読み出した。通常、大容量メモリ３２のように記憶容量が大きいメモリは、アクセス速度が低いことが多い。一方、最新のデータ２１２が格納される外部ターゲットメモリ２３２に必要な記憶容量は小さく、アクセス速度の速い記憶装置を外部ターゲットメモリ２３２とすることができる。このため、制御プロセッサ２３１によるデータの出力にかかる時間を短くすることができる。
【００６９】
また、処理部３１は、第１トレースプロセッサ３１１と、第２トレースプロセッサ３１２と、を有する。これにより、処理部３１が実行すべきトレース処理を２つのプロセッサで分担して、トレース処理を高速に実行することができる。つまり、上述したように、第１トレースプロセッサ３１１で転送処理を実行させ、第２トレースプロセッサ３１２で差分の算出処理を実行させることで、転送処理と差分の算出処理とを並行して実行することができるため、トレース処理を高速に実行することができる。
【００７０】
また、大容量メモリ３２は、３つ以上のデータバッファ３３を有し、第２トレースプロセッサ３１２は、最新のデータ２１２が書き込まれているデータバッファ３３とは異なる２つのデータバッファ３３、又は、最新のデータが次に書き込まれるデータバッファ３３とは異なる２つのデータバッファ３３に格納されたデータ２１２から、データ２１２の差分を算出する。これにより、最新のデータ２１２のデータバッファ３３への書き込みと、差分を算出するためのデータバッファ３３からのデータ２１２の読み出しと、が競合することがない。
【００７１】
また、制御プロセッサ２３１は、データ２１２の出力が完了したことを処理部３１に通知し、処理部３１は、制御プロセッサ２３１からの通知に基づいて、第１トレースプロセッサ３１１によるデータ２１２のデータバッファ３３への格納と、第２トレースプロセッサ３１２による差分データの算出と、の少なくとも一方を行う。これにより、制御プロセッサ２３１による処理と、処理部３１による処理と、を効率よく並列に実行することができる。
【００７２】
また、制御装置１０は、ＣＰＵユニット２０と、トレースユニット３０と、を備える。これにより、制御装置１０を構成するユニットが大型化してしまうことを抑制するとともに、ユニットの配置の自由度を確保することができる。
【００７３】
以上、本開示の実施の形態について説明したが、本開示は上記実施の形態によって限定されるものではない。
【００７４】
例えば、上記実施の形態では、制御装置１０が、ＣＰＵユニット２０及びトレースユニット３０を含む例について説明したが、これには限定されない。例えば、図１３に示されるように、制御装置１０は、上記実施の形態に係るＣＰＵユニット２０及びトレースユニット３０双方の機能を備える一体型の装置であってもよい。図１３の例では、外部ターゲットメモリ２３２を省略して処理部２３が構成され、内部ターゲットメモリ３１０を省略して処理部３１が構成される。この例において、処理部２３の制御プロセッサ２３１は、処理部２３，３１によって共有される共有メモリ２３３にデータ２１２を出力し、処理部３１は、共有メモリ２３３から読み出したデータ２１２を大容量メモリのデータバッファ３３に転送すればよい。共有メモリ２３３は、制御装置１０において、第１プロセッサにより出力されたデータを記憶する第３記憶手段の第３の例に相当する。
【００７５】
また、図１３に示されるように、処理部３１は、上記実施の形態に係る第１トレースプロセッサ３１１及び第２トレースプロセッサ３１２双方の機能を有する１つのトレースプロセッサ３１３を有してもよい。
【００７６】
また、上記実施の形態では、制御プロセッサ２３１と第１トレースプロセッサ３１１との間にデータ２１２を伝送するための記憶装置が介在したが、これには限定されない。例えば、図１４に示されるように、第１トレースプロセッサ３１１を省略して制御装置１０を構成し、制御プロセッサ２３１は、データバッファ３３に直接データを書き込んでもよい。図１４に示される例では、データバッファ３３を有するメモリ３５が、ある程度高速に書き込み可能な装置であることが好ましい。
【００７７】
また、図１４に示されるようにデータバッファ３３の数は３つより多くてもよい。制御装置１０は、複数のデータバッファ３３を有していればよい。
【００７８】
また、上記実施の形態では、制御システム１００が、工場で製造ラインを稼働させる製造システムである例について説明したが、これには限定されない。制御システム１００は、加工システム、検査システム、その他の処理システムであってもよいし、プラントにおけるプロセス制御を実行するシステムであってもよい。
【００７９】
本開示は、本開示の広義の精神と範囲を逸脱することなく、様々な実施の形態及び変形が可能とされるものである。また、上述した実施の形態は、本開示を説明するためのものであり、本開示の範囲を限定するものではない。つまり、本開示の範囲は、実施の形態ではなく、請求の範囲によって示される。そして、請求の範囲内及びそれと同等の開示の意義の範囲内で施される様々な変形が、本開示の範囲内とみなされる。
【産業上の利用可能性】
【００８０】
本開示は、データのロギングに適している。
【符号の説明】
【００８１】
１００  制御システム、  １０  制御装置、  １０１  システムバス、  ２０  ＣＰＵユニット、  ２１  データメモリ、  ２１１  領域、  ２１２  データ、  ２２  プログラムメモリ、  ２２１  ユーザプログラム、  ２３  処理部、  ２３１  制御プロセッサ、  ２３２  外部ターゲットメモリ、  ２３３  共有メモリ、  ３０  トレースユニット、  ３１  処理部、  ３１０  内部ターゲットメモリ、  ３１１  第１トレースプロセッサ、  ３１２  第２トレースプロセッサ、  ３１３  トレースプロセッサ、  ３２  大容量メモリ、  ３３，３３１〜３３３  データバッファ、  ３４  差分記憶部、  ３５  メモリ、  ４０  Ｉ／Ｏユニット、  ５０  産業用ネットワーク、  ６１，６２  機器、  ７０  スキャン、  ７１  実行処理、  ７２  エンド処理。
【要約】
制御装置（１０）は、機器を制御するためのユーザプログラム（２２１）を繰り返し実行する。制御装置（１０）は、ユーザプログラム（２２１）を実行するためのデータを記憶するデータメモリ（２１）と、ユーザプログラム（２２１）を実行し、ユーザプログラム（２２１）を実行する毎にデータメモリ（２１）からデータを読み出して出力する制御プロセッサ（２３１）と、制御プロセッサ（２３１）によって出力されたデータが予め定められた順に格納される複数のデータバッファ（３３）と、複数のデータバッファ（３３）のうちの２つのデータバッファ（３３）に格納されたデータからデータの差分を算出する第２トレースプロセッサ（３１２）を有する処理部（３１）と、第２トレースプロセッサ（３１２）によって算出された差分を蓄積して記憶する差分記憶部（３４）と、を備える。【図１】
0006921342.tif 000002
【図２】
0006921342.tif 000003
【図３】
0006921342.tif 000004
【図４】
0006921342.tif 000005
【図５】
0006921342.tif 000006
【図６】
0006921342.tif 000007
【図７】
0006921342.tif 000008
【図８】
0006921342.tif 000009
【図９】
0006921342.tif 000010
【図１０】
0006921342.tif 000011
【図１１】
0006921342.tif 000012
【図１２】
0006921342.tif 000013
【図１３】
0006921342.tif 000014
【図１４】
0006921342.tif 000015