(57)【要約】      （修正有）【課題】イベント発生までの経緯が分かるようにイベントログを保存する。【解決手段】自装置において発生したイベントについての情報であるイベント情報を取得する取得部と、前記イベントの発生順序を示す情報と共に、前記取得部によって取得された前記イベント情報を、イベントログとして記憶部に上書き保存する格納部と、所定の条件を満たすイベントが発生すると、当該所定の条件を満たすイベントよりも後に発生するイベントについての、前記格納部による前記イベントログの上書き保存を停止させる停止部と、を備えることを特徴とする制御装置。【選択図】図１
2019207475.tif 000002
【特許請求の範囲】
【請求項１】
自装置において発生したイベントについての情報であるイベント情報を取得する取得部と、
前記イベントの発生順序を示す情報と共に、前記取得部によって取得された前記イベント情報を、イベントログとして記憶部に上書き保存する格納部と、
所定の条件を満たすイベントが発生すると、当該所定の条件を満たすイベントよりも後に発生するイベントについての、前記格納部による前記イベントログの上書き保存を停止させる停止部と、を備えることを特徴とする制御装置。
【請求項２】
前記取得部と、前記格納部と、前記停止部とは、ＦＰＧＡ（Field-programmable gate array）を用いて実現され、
前記記憶部は、前記ＦＰＧＡ内に設けられた内部ＲＡＭ（Random Access Memory）である
ことを特徴とする請求項１に記載の制御装置。
【請求項３】
（１）対象イベントとして予め設定しておいたイベントの少なくとも１つが発生したこと、（２）開始対象イベントとして予め設定しておいたイベントの発生から、予め設定された最大期間が経過するまでに、終了対象イベントとして予め設定しておいたイベントが発生しないこと、および、（３）開始対象イベントとして予め設定しておいたイベントの発生から、予め設定された最小期間が経過する前に、終了対象イベントとして予め設定しておいたイベントが発生したこと、の少なくとも１つを検知すると、前記所定の条件を満たすイベントが発生したと判定する判定部をさらに備え、
前記停止部は、前記判定部により前記所定の条件を満たすイベントが発生したと判定されると、前記判定部により前記所定の条件を満たすイベントが発生したと判定された後に発生するイベントについての、前記格納部による前記イベントログの上書き保存を停止させる
ことを特徴とする請求項１または２に記載の制御装置。
【請求項４】
前記発生順序を示す情報と共に前記記憶部に保存されている前記イベント情報を、自装置の外部に出力する出力部をさらに備える
ことを特徴とする請求項１から３のいずれか１項に記載の制御装置。
【請求項５】
制御装置において発生したイベントについての情報であるイベント情報を取得する取得ステップと、
前記イベントの発生順序を示す情報と共に、前記取得ステップにおいて取得された前記イベント情報を、イベントログとして記憶部に上書き保存する格納ステップと、
所定の条件を満たすイベントが発生すると、当該所定の条件を満たすイベントよりも後に発生するイベントについての、前記格納ステップにおける前記イベントログの上書き保存を停止させる停止ステップと、を含むことを特徴とする前記制御装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラマブルコントローラ（Programmable Logic Controller；以下、ＰＬＣとも称す）などの制御装置等に関する。
【背景技術】
【０００２】
従来、外部機器に接続される装置が、自装置において発生する種々のイベントについて、各イベントの発生順序が分かるようにして各イベントのログを記録しておく構成が知られている。例えば、下掲の特許文献１には、自端末において発生したイベントとその発生時を示す内部時間とを記録したイベントログを生成、記憶し、外部からの指示に従って出力する無線通信端末が開示されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００９−８１７６４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、上述のような従来技術には、ＰＬＣなどの制御装置において、或るイベント、および、その或るイベントよりも前に発生したイベントのログが、その或るイベントよりも後に発生したイベントのログの上書き保存によって失われるという問題がある。例えば、或るイベントの発生原因、発生経緯、および発生に見られる傾向などを分析しようとする場合、その或るイベントよりも前に発生したイベントを把握するのが有効である。しかしながら、上述のような従来技術は、或るイベントよりも前に発生したイベントのログが、その或るイベントよりも後に発生したイベントのログの上書き保存によって失われ、その或るイベントについての分析が困難になるという事態が発生し得る。
【０００５】
本開示の一態様は、前記課題を解決するためになされたものであり、その目的は、ＰＬＣなどの制御装置において発生する種々のイベントについて、発生までの経緯を把握することができるように、イベントログを保存する制御装置等を実現することにある。
【課題を解決するための手段】
【０００６】
前記の課題を解決するために、本開示の一態様に係る制御装置は、自装置において発生したイベントについての情報であるイベント情報を取得する取得部と、前記イベントの発生順序を示す情報と共に、前記取得部によって取得された前記イベント情報を、イベントログとして記憶部に上書き保存する格納部と、所定の条件を満たすイベントが発生すると、当該所定の条件を満たすイベントよりも後に発生するイベントについての、前記格納部による前記イベントログの上書き保存を停止させる停止部と、を備えることを特徴としている。
【０００７】
前記の構成によれば、前記制御装置は、自装置において発生したイベントについての情報であるイベント情報を、前記イベントの発生順序を示す情報と共に、イベントログとして記憶部に上書き保存する。ここで、前記イベントログを前記記憶部に格納していく際、前記記憶部の記憶容量の上限に達した場合、前記制御装置は、例えば、前記記憶部から古いイベントログを順に削除し、新しいイベントログを前記記憶部に格納していく。つまり、前記制御装置は、古いイベントログに対して順次新しいイベントログを上書き保存していく（言い換えれば、古いイベントログから順に、新しいイベントログで上書きする）。そして、前記制御装置は、所定の条件を満たすイベントが発生すると、当該所定の条件を満たすイベントよりも後に発生するイベントについてのイベントログの上書き保存を停止する。
【０００８】
したがって、前記制御装置は、前記所定の条件を満たすイベントより前に発生したイベントのイベントログが、前記所定の条件を満たすイベントより後に発生するイベントのイベントログに上書きされて失われるという事態を防ぐことができる。つまり、前記制御装置は、前記所定の条件を満たすイベントについて、前記所定の条件を満たすイベントが発生するまでの経緯を把握することができるように、前記イベントログを保存することができるという効果を奏する。
【０００９】
本発明の一態様に係る制御装置において、前記取得部と、前記格納部と、前記停止部とは、ＦＰＧＡ（Field-programmable gate array）を用いて実現され、前記記憶部は、前記ＦＰＧＡ内に設けられた内部ＲＡＭ（Random Access Memory）であってもよい。
【００１０】
前記の構成によれば、前記制御装置において、自装置において発生したイベントのイベントログの上書き保存、および、前記所定の条件を満たすイベントの発生に伴うイベントログの上書き保存の停止は、前記制御装置の備えるＦＰＧＡにより実行される。また、前記制御装置において、前記ＦＰＧＡは、前記ＦＰＧＡ内に設けられた内部ＲＡＭに、前記イベントログを上書き保存する。
【００１１】
ここで、前記ＦＰＧＡは、例えば、外部機器等へのデータ送信および外部機器等からのデータ受信などの通信処理を含む種々の処理を実行し、実行した処理についての情報を、実行した処理の実行順序と共に、前記イベントログとして、内部ＲＡＭに保存する。したがって、前記ＦＰＧＡは、前記ＦＰＧＡに対する指示がなされた順序ではなく、前記ＦＰＧＡ内で実際にイベントが発生した順序を、イベントログとして保存することができるという効果を奏する。
【００１２】
また、前記ＦＰＧＡは種々の処理を次々と実行するため、前記ＦＰＧＡが、前記ＦＰＧＡの内部で発生したイベントについてのイベントログを保存するためには、広帯域のメモリが必要となる。前記ＦＰＧＡは、前記内部ＲＡＭに前記イベントログを保存することにより、所望の広帯域性を備えた格納先に、前記イベントログ保存することができるという効果を奏する。
【００１３】
さらに、前記ＦＰＧＡは、前記内部ＲＡＭに前記イベントログを上書き保存し、つまり、前記イベントログのデータ量が前記内部ＲＡＭの記憶容量の上限に達した場合には、古いイベントログから順に削除していく。したがって、前記ＦＰＧＡは、前記イベントログの保存に必要な広帯域性を確保しつつ、前記イベントログの格納先の記憶容量を抑制することができるという効果を奏する。
【００１４】
前記ＦＰＧＡは、前記所定の条件を満たすイベントが発生したと判定すると、前記所定の条件を満たすイベントよりも後に発生するイベントについてのイベントログの上書き保存を停止する。したがって、前記ＦＰＧＡは、前記所定の条件を満たすイベントの発生経緯を示すイベントログを保存し、さらに、前記発生経緯を示すイベントログが、前記所定の条件を満たすイベントより後に発生するイベントのイベントログに上書きされて失われるのを回避することができるという効果を奏する。
【００１５】
本発明の一態様に係る制御装置は、（１）対象イベントとして予め設定しておいたイベントの少なくとも１つが発生したこと、（２）開始対象イベントとして予め設定しておいたイベントの発生から、予め設定された最大期間が経過するまでに、終了対象イベントとして予め設定しておいたイベントが発生しないこと、および、（３）開始対象イベントとして予め設定しておいたイベントの発生から、予め設定された最小期間が経過する前に、終了対象イベントとして予め設定しておいたイベントが発生したこと、の少なくとも１つを検知すると、前記所定の条件を満たすイベントが発生したと判定する判定部をさらに備え、前記停止部は、前記判定部により前記所定の条件を満たすイベントが発生したと判定されると、前記判定部により前記所定の条件を満たすイベントが発生したと判定された後に発生するイベントについての、前記格納部による前記イベントログの上書き保存を停止させてもよい。
【００１６】
前記の構成によれば、前記制御装置は、（１）対象イベントとして予め設定しておいたイベントの少なくとも１つが発生したことを検知すると、発生を検知した前記対象イベントよりも後に発生するイベントについての、前記イベントログの上書き保存を停止する。したがって、前記制御装置は、前記対象イベントより前に発生したイベントのイベントログが、前記対象イベントより後に発生するイベントのイベントログに上書きされて失われるという事態を防ぐことができる。つまり、前記制御装置は、前記対象イベントについて、前記対象イベントが発生するまでの経緯を把握することができるように、前記イベントログを保存することができるという効果を奏する。
【００１７】
また、前記制御装置は、（２）開始対象イベントとして予め設定しておいたイベントの発生から、予め設定された最大期間が経過するまでに、終了対象イベントとして予め設定しておいたイベントが発生しないことを検知すると、検知後に発生するイベントについての、前記イベントログの上書き保存を停止する。
【００１８】
例えば、前記制御装置は、前記開始対象イベントの発生から、前記最大期間が経過するまでに、前記終了対象イベントが発生しないことを検知すると、前記最大期間の経過後に発生するイベントについての、前記イベントログの上書き保存を停止する。
【００１９】
したがって、前記制御装置は、前記最大期間の経過時点までに発生したイベントのイベントログが、前記最大期間の経過時点後に発生したイベントのイベントログに上書きされて失われるという事態を防ぐことができる。つまり、前記制御装置は、前記開始対象イベントの発生から前記最大期間の経過までに発生すべき前記終了対象イベントが発生しなかった経緯を把握することができるように、前記イベントログを保存することができるという効果を奏する。
【００２０】
また、前記制御装置は、前記開始対象イベントが発生してから前記終了対象イベントが発生するまでの時間間隔が前記最大期間以上であることを検知すると、前記終了対象イベントよりも後に発生するイベントについてのイベントログの上書き保存を停止してもよい。
【００２１】
したがって、前記制御装置は、前記終了対象イベントより前に発生したイベントのイベントログが、前記終了対象イベントより後に発生するイベントのイベントログに上書きされて失われるという事態を防ぐことができる。つまり、前記制御装置は、前記終了対象イベントについて、前記終了対象イベントが発生するまでの経緯を把握することができるように、前記イベントログを保存することができるという効果を奏する。
【００２２】
さらに、前記制御装置は、（３）開始対象イベントとして予め設定しておいたイベントの発生から、予め設定された最小期間が経過する前に、終了対象イベントとして予め設定しておいたイベントが発生したことを検知すると、検知後に発生するイベントについての、前記イベントログの上書き保存を停止する。
【００２３】
例えば、前記制御装置は、前記開始対象イベントの発生から、前記最小期間が経過する前に、前記終了対象イベントが発生したことを検知すると、前記終了対象イベントよりも後に発生するイベントについての、前記イベントログの上書き保存を停止する。
【００２４】
したがって、前記制御装置は、前記終了対象イベントより前に発生したイベントのイベントログが、前記終了対象イベントより後に発生するイベントのイベントログに上書きされて失われるという事態を防ぐことができる。つまり、前記制御装置は、前記開始対象イベントの発生から前記最小期間の経過後に発生すべき前記終了対象イベントが、前記最小期間の経過前に発生した経緯を把握することができるように、前記イベントログを保存することができるという効果を奏する。言い換えれば、前記制御装置は、前記終了対象イベントについて、前記終了対象イベントが発生するまでの経緯を把握することができるように、前記イベントログを保存することができるという効果を奏する。
【００２５】
本発明の一態様に係る制御装置は、前記発生順序を示す情報と共に前記記憶部に保存されている前記イベント情報を、自装置の外部に出力する出力部をさらに備えてもよい。
【００２６】
前記の構成によれば、前記制御装置は、前記発生順序を示す情報と共に前記記憶部に保存されている前記イベント情報を、つまり、前記イベントログを、自装置の外部に出力する。そして、前記制御装置から前記イベントログを取得した外部装置は、例えば、前記所定の条件を満たすイベントの発生経緯を示すイベントログを表示する。つまり、前記外部装置は、前記制御装置において発生した前記イベントを発生順序と共に可視化し、つまり、前記イベントが発生するまでの前記制御装置の状態（内部状態）の推移を、ユーザに示す。したがって、前記制御装置は、前記所定の条件を満たすイベントの発生経緯を示すイベントログを、外部装置等において解析可能なように出力することができるという効果を奏する。
【００２７】
前記の課題を解決するために、本開示の一態様に係る制御方法は、制御装置において発生したイベントについての情報であるイベント情報を取得する取得ステップと、前記イベントの発生順序を示す情報と共に、前記取得ステップにおいて取得された前記イベント情報を、イベントログとして記憶部に上書き保存する格納ステップと、所定の条件を満たすイベントが発生すると、当該所定の条件を満たすイベントよりも後に発生するイベントについての、前記格納ステップにおける前記イベントログの上書き保存を停止させる停止ステップと、を含むことを特徴としている。
【００２８】
前記の方法によれば、前記制御方法は、制御装置において発生したイベントについての情報であるイベント情報を、前記イベントの発生順序を示す情報と共に、イベントログとして記憶部に上書き保存する。ここで、前記イベントログを前記記憶部に格納していく際、前記記憶部の記憶容量の上限に達した場合、前記制御方法は、例えば、前記記憶部から古いイベントログを順に削除し、新しいイベントログを前記記憶部に格納していく。つまり、前記制御方法は、古いイベントログに対して順次新しいイベントログを上書き保存していく（言い換えれば、古いイベントログから順に、新しいイベントログで上書きする）。そして、前記制御方法は、制御装置において所定の条件を満たすイベントが発生すると、当該所定の条件を満たすイベントよりも後に発生するイベントについてのイベントログの上書き保存を停止する。
【００２９】
したがって、前記制御方法は、前記所定の条件を満たすイベントより前に発生したイベントのイベントログが、前記所定の条件を満たすイベントより後に発生するイベントのイベントログに上書きされて失われるという事態を防ぐことができる。つまり、前記制御方法は、前記制御装置において発生した前記所定の条件を満たすイベントについて、前記所定の条件を満たすイベントが発生するまでの経緯を把握することができるように、前記イベントログを保存することができるという効果を奏する。
【発明の効果】
【００３０】
本開示の一態様によれば、ＰＬＣなどの制御装置において発生する種々のイベントについて、発生までの経緯を把握することができるように、イベントログを保存することができるという効果を奏する。
【図面の簡単な説明】
【００３１】
【図１】本発明の一実施形態に係るＰＬＣのＣＰＵユニットの構成例を示す図である。
【図２】本発明の一実施形態に係るＰＬＣを含む制御システムの概要を示す図である。
【図３】図１のＣＰＵユニットが実行するイベントログの上書き保存処理および上書き保存停止処理の概要を示すフロー図である。
【図４】図１のＣＰＵユニットが所定のイベントの発生を検知した場合に実行する処理の一例を示すフロー図である。
【図５】所定の２つのイベントの発生時間間隔が最大期間以上である場合に図１のＣＰＵユニットが実行する処理の一例を示すフロー図である。
【図６】所定の２つのイベントの発生時間間隔が最小期間以下である場合に図１のＣＰＵユニットが実行する処理の一例を示すフロー図である。
【発明を実施するための形態】
【００３２】
〔実施形態１〕
以下、本発明の一側面に係る実施の形態（以下、「本実施形態」とも表記する）を、図面に基づいて説明し、先ず、本発明の実施形態１について、図１から図６に基づいて詳細に説明する。なお、図中同一または相当部分には同一符号を付してその説明は繰返さない。本実施の形態においては、機械および設備等の制御対象を制御するＰＬＣ（プログラマブル・ロジック・コントローラ、Programmable Logic Controller）１０を、特に、ＰＬＣ１０のＣＰＵユニット１００を、制御装置の典型例として説明を行う。なお、「ＣＰＵ」は「Central Processing Unit」の略である。また、以下の説明においては、記載を簡略にするため、「秒」を「ｓ（second）」と略記することがある。
【００３３】
§１．適用例
本発明の一態様に係るＰＬＣ１０についての理解を容易にするため、先ず、本発明が適用される場面の一例について、具体的には、ＰＬＣ１０を含む制御システム１の概要について、図２を用いて説明する。
【００３４】
図２は、制御システム１の全体概要を示す図である。図１に例示する制御システム１において、生産設備内の入力機器および出力機器の制御を司る、１つ以上のＰＬＣ１０と、ＰＬＣ１０により動作が制御される機器とは、フィールドネットワーク２０等の制御系のネットワークに接続されている。ＰＬＣ１０と機器とは、フィールドネットワーク２０を介してサイクリックに通信を行なうことで、ＩＮデータおよびＯＵＴデータ（以下、「ＩＯデータ」という）の送受信を行ない、生産設備を制御する。
【００３５】
ＰＬＣ１０は、制御システム１において、機械および設備などの制御対象を制御する制御装置であり、制御システム１における、フィールドネットワーク２０を介したデータ伝送を管理するマスタ装置である。ＰＬＣ１０は、例えばユーザプログラムとも称される制御プログラムを実行して、制御システム１全体の動作を統括的に制御する。ＰＬＣ１０は、主たる演算処理を実行するＣＰＵユニット１００と、電源ユニット２００と、１つ以上のＩＯ（Input/ Output）ユニット（図２の例では、ＩＯユニット３０１〜３０３）と、特殊ユニット３０４と、を含む。ＩＯユニット３０１〜３０３、および、特殊ユニット３０４は、機能ユニットと呼ばれることもある。ＣＰＵユニット１００と、ＩＯユニット３０１〜３０３の各々と、特殊ユニット３０４とは、ＰＬＣシステムバス４００を介して、互いにデータを遣り取りできるように構成される。
【００３６】
ＣＰＵユニット１００は、制御対象の状態等に係る種々の処理を実行し、例えば、「出力データの送信と、入力データの受信と、入力データを使用して出力データを生成する制御プログラムの実行とを繰り返すことによって制御対象を制御する」処理を実行する。ＣＰＵユニット１００の詳細については、図１を参照して後述する。
【００３７】
電源ユニット２００は、ＣＰＵユニット１００、ＩＯユニット３０１〜３０３、および、特殊ユニット３０４に、適切な電圧の電源を供給する。
【００３８】
ＩＯユニット３０１〜３０３は、各々、一般的な入出力処理に関するユニットであり、オン／オフといったデータ（つまり、２値化されたデータ）の入出力を司る。具体的には、ＩＯユニット３０１〜３０３の各々は、センサなどの入力機器であるデバイス３１が何らかの対象物を検出している状態（オン）、および、何らの対象物も検出していない状態（オフ）のいずれであるかという情報を収集する。また、ＩＯユニット３０１〜３０３の各々は、リレー、アクチュエータといった出力機器であるデバイス３２に対して、活性化するための指令（オン）、および、不活性化するための指令（オフ）のいずれかを出力する。
【００３９】
特殊ユニット３０４は、ＩＯユニット３０１〜３０３が処理するデータとは異なるデータ（例えば、アナログデータ）の入出力、温度制御、特定の通信方式による通信といった、ＩＯユニット３０１〜３０３ではサポートしない機能を有する。
【００４０】
フィールドネットワーク２０は、ＣＰＵユニット１００とフィールド機器（サーボドライバ３３、サーボドライバ３４、および、リモートＩＯターミナル３５等）との間で遣り取りされる各種データを伝送する。フィールドネットワーク２０としては、典型的には、各種の産業用イーサネット（登録商標）を用いることができる。産業用イーサネットとしては、例えば、ＥｔｈｅｒＣＡＴ（登録商標）、Ｐｒｏｆｉｎｅｔ  ＩＲＴ、ＭＥＣＨＡＴＲＯＬＩＮＫ（登録商標）−ＩＩＩ、Ｐｏｗｅｒｌｉｎｋ、ＳＥＲＣＯＳ（登録商標）−ＩＩＩ、ＣＩＰ  Ｍｏｔｉｏｎなどが知られている。なお、フィールドネットワーク２０として、産業用イーサネット以外のフィールドネットワークを用いてもよい。例えば、モーション制御を行わない場合であれば、ＤｅｖｉｃｅＮｅｔ、ＣｏｍｐｏＮｅｔ／ＩＰ（登録商標）などを用いてもよい。
【００４１】
なおＰＬＣ１０は、ＣＰＵユニット１００にＩＯユニット３０１〜３０３の各々の機能およびサーボドライバ３３および３４の機能を持たせることにより、そのような内蔵機能でまかなえる範囲については、ＣＰＵユニット１００が直接制御対象を制御してもよい。
【００４２】
サーボドライバ３３および３４の各々は、フィールドネットワーク２０を介してＣＰＵユニット１００と接続されるとともに、ＣＰＵユニット１００からの指令値に従ってサーボモータ４１および４２の各々を駆動する。なお、図２には、サーボモータ４１および４２の各々とサーボドライバ３３および３４の各々とを組み合わせたシステム例を示したが、その他の構成、たとえば、パルスモータとパルスモータドライバとを組み合わせたシステムを採用することもできる。
【００４３】
リモートＩＯターミナル３５は、基本的には、ＩＯユニット３０１〜３０３と同様に、一般的な入出力処理に関する処理を行う。より具体的には、リモートＩＯターミナル３５は、フィールドネットワーク２０でのデータ伝送に係る処理を行うための通信カプラ３６と、１つ以上のＩＯユニット（図２の例では、ＩＯユニット３７および３８）とを含む。通信カプラ３６と、ＩＯユニット３７および３８の各々とは、リモートＩＯターミナルバス３９を介して、データを互いに遣り取りできるように構成される。
【００４４】
ＰＬＣ１０には、任意の通信ケーブル４０によって、解析用デバイス５０が接続されており、例えば、Ether IP（登録商標）により通信接続されていてもよい。制御システム１において、ユーザは、ＰＬＣ１０に異常等の診断すべきイベントが発生した場合に、各種データを解析用デバイス５０によって解析することにより、そのイベントを分析してＰＬＣ１０についての診断を実行する。例えば、ＰＬＣ１０は、「自装置において発生したイベント（つまり、自装置が実行した処理）を発生順序と共に示す」イベントログを解析用デバイス５０に出力し、解析用デバイス５０は受け付けたイベントログの解析、表示等を実行する。この診断の例としては、或るイベントの発生原因および発生経緯の特定、発生に見られる傾向の把握、発生確率の分析などが挙げられる。
【００４５】
解析用デバイス５０は、ＰＬＣ１０から、ＰＬＣ１０において（特に、図１を用いて説明するＦＰＧＡ（Field-Programmable gate array）１０１において）発生したイベントのイベントログを取得し、取得したイベントログを解析して、ＰＬＣ１０の診断を行う。イベントログは、ＰＬＣ１０において発生したイベントを特定する情報（例えば、イベントコード）と、そのイベントの発生順序を示す情報（例えば、イベントの発生時刻（内部時刻）等を示す情報）と、を含む。解析用デバイス５０は、通常のＰＣ（Personal Computer）によって構成され、タッチパネル、ディスプレイなどの入出力デバイスを備える。
【００４６】
（ＣＰＵユニットの概要）
これまで図２を用いてＰＬＣ１０を含む制御システム１の全体概要を説明してきたが、次に、ＰＬＣ１０におけるＣＰＵユニット１００、特にＣＰＵユニット１００の備えるＦＰＧＡ１０１について、その概要を説明しておく。ＰＬＣ１０についての理解を容易にするため、従来までの産業用コントローラについて先ず説明しておく。
【００４７】
（従来までの産業用コントローラ）
ＰＬＣなどの産業用コントローラ一般において故障などの特定のイベントが発生した場合、その特定のイベントのイベントログのみでは、その特定のイベントが発生した原因、経緯等を解析することは困難である。そのため、特定のイベントが発生した時には、その特定のイベントが発生するまでの経緯を把握することができるように、その特定のイベントが発生するまでに事前に発生した、他のイベントのイベントログを保存しておくのが望ましい。つまり、特定のイベントの発生に至るまでの経緯を示すイベントログが、不具合等を示す特定のイベントの解析にとって重要である。
【００４８】
しかしながら、イベントログの格納先の記憶容量が上限に達している状態で新たなイベントが発生した場合、或る特定のイベントの発生に至るまでの経緯を示すイベントログが、その新たなイベントのイベントログに上書きされ、削除されてしまうことがある。特定のイベントについて解析するためにイベントログを読み出す時点では既に、その特定のイベントの発生に至るまでの経緯を示すイベントログが削除されている可能性があり、その特定のイベントが発生するに至った原因を分析できないといった事態が想定される。
【００４９】
従来の産業用コントローラは、特定のイベントが発生した時に、その特定のイベントよりも後に発生するイベントについてのイベントログの上書き保存を停止することはしない。そのため、その特定のイベントについて解析するためにイベントログを読み出す時点では既に、その特定のイベントの発生に至るまでの経緯を示すイベントログ（その特定のイベントが発生した時点までのイベントログ）は消去されてしまっていることがあった。そのため、従来の産業用コントローラのユーザは、その特定のイベントが発生するに至った経緯を、イベントログを解析することによって把握することができなかった。
【００５０】
また、従来の産業用コントローラは、通信インターフェイスＩＣとしてのＦＰＧＡの内部状態を把握する手段を備えていないため、異常発生時に原因を特定するのに時間を要した。
【００５１】
（本実施形態に係るＦＰＧＡ）
ＦＰＧＡ１０１は、ＦＰＧＡ１０１において発生するイベントのイベントログを保存し、具体的には、ＦＰＧＡ１０１内部でのイベント発生時刻（時刻情報）とイベント（各々の処理を特定するイベントコード）とを対応付けて、イベントログとして保存する。ＦＰＧＡ１０１は、マイクロプロセッサ１０３からの指示順ではなく、ＦＰＧＡ１０１内部で実際にイベントが発生した順序を、イベントログとして保存する。したがって、ユーザは、ＦＰＧＡ１０１が保存したイベントログを用いて、通信インターフェイスＩＣとしての処理も実行するＦＰＧＡ１０１の内部状態を把握することができ、異常などの特定のイベントの発生経緯を把握するのが容易になる。
【００５２】
ここで、ＦＰＧＡ１０１の内部で発生したイベントについてのイベントログを保存するためには、広帯域のメモリが必要となり、ＦＰＧＡ１０１の内部ＲＡＭ（Random Access Memory）１６０が好適である。例えば、複数のイベントログの各々が時刻情報とイベントコードとを含み、各々のイベントログが６４ｂｉｔのデータであるとする。そして、ＦＰＧＡ１０１の内部クロックが１２５ＭＨｚであるとし、８個まで同時にイベントログを保存するとした場合、「６４ｂｉｔ×１２５ＭＨｚ×８個＝６４Ｇｂｉｔ／ｓｅｃ」の帯域が必要である。ＦＰＧＡ１０１は、イベントログの格納先に求められる広帯域性を満たすため、内部ＲＡＭ１６０のイベントログテーブル１６１に、イベントログを保存する。
【００５３】
ＦＰＧＡ１０１は、ＰＬＣ１０（特に、ＦＰＧＡ１０１）において発生したイベントを特定する情報（＝イベントコード）を、例えばFree Run Counter等の計時部１３０によって計測した内部時刻と共に、イベントログとして、内部ＲＡＭ１６０に上書き保存する。ＦＰＧＡ１０１は、ＰＬＣ１０（特に、ＦＰＧＡ１０１）において発生した種々のイベントの各々について、時系列にイベントログを取得して保存し、つまり、ＦＰＧＡ１０１内部で実際にイベントが発生した順序が分かるようにイベントログを保存する。
【００５４】
ここで、ＰＬＣ１０（特に、ＦＰＧＡ１０１）において発生した全てのイベントログを保存しようとした場合、ＦＰＧＡ１０１は、大量のイベントログを格納するための大規模な記憶容量のイベントログ格納先を必要とする。
【００５５】
ただし、ＦＰＧＡ１０１の内部ＲＡＭ１６０の容量（記憶容量）は限界がある。そこで、ＦＰＧＡ１０１は、内部ＲＡＭ１６０にイベントログを上書き保存し、つまり、イベントログのデータ量が記憶容量の上限に達した場合には古いイベントログから順に削除していく。これにより、ＦＰＧＡ１０１は、イベントログの保存に必要な広帯域性を確保しつつ、イベントログ格納先の記憶容量を抑制することができる。ＦＰＧＡ１０１は、内部ＲＡＭ１６０の記憶容量を、例えば最大容量で１３．５９Ｍｂｉｔに抑制することができる。
【００５６】
イベントログをイベントログ格納先に上書き保存する場合、特定のイベントの発生時点よりも前に発生したイベントに係るイベントログは、特定のイベントの発生時点よりも後に発生するイベントのイベントログに上書きされて削除されてしまう可能性がある。
【００５７】
これを防ぐため、ＦＰＧＡ１０１は、所定の条件を満たすイベントが発生したと判定すると、その所定の条件を満たすイベントが発生した時点よりも後に発生するイベントについてのイベントログの上書き保存を停止する。すなわち、ＦＰＧＡ１０１は、所定の条件を満たすイベントが発生する前に発生したイベントのイベントログを保存し、さらに、このイベントログが、その所定の条件を満たすイベントより後に発生するイベントのイベントログによって上書きされ失われるのを防ぐ。これによって、ユーザは、特定のイベントが発生した時に、どのような経緯でその特定のイベントが発生したのかを把握することができ、つまり、その特定のイベントの発生に至るまでの経緯を検証することができるようになる。ＦＰＧＡ１０１は、例えば以下の３つの少なくとも１つを検知すると、「所定のイベントが発生した」と判定し、以降のイベントログの上書き保存を停止する。
【００５８】
第１に、ＦＰＧＡ１０１は、「対象イベント」として予め設定しておいたイベントの少なくとも１つが発生したことを検知すると、「所定のイベントが発生した」と判定し、以降のイベントログの上書き保存を停止する。例えば、予め１つ以上のイベントが、「対象イベント」として設定されている。そして、ＦＰＧＡ１０１は、その「対象イベント」の少なくとも１つが発生したことを検知すると、発生した「対象イベント」のイベントログを上書き保存し、また、以降のイベントログの上書き保存を停止する。すなわち、ＦＰＧＡ１０１は、「対象イベント」が発生した時点よりも後に発生するイベントについてのイベントログの上書き保存を停止し、その「対象イベント」の発生経緯を示すイベントログが消えるのを回避する。これより、ユーザは、その「対象イベント」が発生するに至るまでの経緯を示すイベントログを確実に取得することができ、例えば、異常などの「対象イベント」の原因を特定するまでに要する時間を短縮することができる。
【００５９】
第２に、ＦＰＧＡ１０１は、開始対象イベントとして予め設定しておいたイベントの発生から、予め設定された最大期間Ｔｍａｘが経過するまでに、終了対象イベントとして予め設定しておいたイベントが発生しないことを検知すると、以降のイベントログの上書き保存を停止する。ＦＰＧＡ１０１は、２つの特定のイベント間の発生時間間隔が最大期間Ｔｍａｘ以上であることを検知すると、以降のイベントログの上書き保存を停止してもよい。
【００６０】
例えば、第１イベントおよび第２イベントが、各々、「開始対象イベント」および「終了対象イベント」として予め設定されている。また、第１イベントと第２イベントとの発生時刻の時間間隔の許容最大値（最大期間Ｔｍａｘ）が予め設定されている。ＦＰＧＡ１０１は、第１イベントが発生してから最大期間Ｔｍａｘが経過するまでに第２イベントが発生しないことを検知すると、最大期間Ｔｍａｘの経過後に発生するイベントについてのイベントログの上書き保存を停止する。また、ＦＰＧＡ１０１は、第１イベントが発生してから第２イベントが発生するまでの時間間隔が最大期間Ｔｍａｘ以上であることを検知すると、第２イベントの発生時点よりも後に発生するイベントについてのイベントログの上書き保存を停止してもよい。
【００６１】
第３に、ＦＰＧＡ１０１は、開始対象イベントとして予め設定しておいたイベントの発生から、予め設定された最小期間Ｔｍｉｎが経過する前に、終了対象イベントとして予め設定しておいたイベントが発生したことを検知すると、以降のイベントログの上書き保存を停止する。つまり、ＦＰＧＡ１０１は、例えば２つの特定のイベント間の発生時刻が最小期間Ｔｍｉｎ以下の場合にログ取得を停止する。
【００６２】
例えば、第３イベントおよび第４イベントが、各々、「開始対象イベント」および「終了対象イベント」として予め設定されている。また、第３イベントと第４イベントとの発生時刻の時間間隔の許容最小値（最小期間Ｔｍｉｎ）が予め設定されている。ＦＰＧＡ１０１は、第３イベントが発生してから第４イベントが発生するまでの時間間隔が最小期間Ｔｍｉｎ以下であることを検知すると、第４イベントの発生時点よりも後に発生するイベントについてのイベントログの上書き保存を停止する。
【００６３】
なお、上述の「対象イベント」、「開始対象イベント」、および「終了対象イベント」は、例えば、図１の内部ＲＡＭ１６０またはＦＰＧＡ１０１内の不図示のレジスタに設定される。ユーザは、任意のイベントを、「対象イベント」、「開始対象イベント」、および「終了対象イベント」として、設定することができる。同様に、上述の最大期間Ｔｍａｘおよび最小期間Ｔｍｉｎは、例えば、図１の内部ＲＡＭ１６０またはＦＰＧＡ１０１内の不図示のレジスタに設定される。ユーザは、任意の時間間隔を、最大期間Ｔｍａｘおよび最小期間Ｔｍｉｎとして設定することができる。
【００６４】
ＦＰＧＡ１０１は、複数の特定のイベントの発生時間間隔が最大期間Ｔｍａｘ以上または最小期間Ｔｍｉｎ以下である場合、その特定のイベントが発生する前に発生したイベントのログを保存する。また、ＦＰＧＡ１０１は、このイベントログが、その特定のイベントが発生した後の発生するイベントのイベントログによって上書きされて失われるのを回避する。これによって、ユーザは、互いに最大期間Ｔｍａｘ以上の時間間隔または最小期間Ｔｍｉｎ以下の時間間隔で発生した複数の特定のイベントについて、それらのイベントの発生経緯を検証することができるようになる。
【００６５】
ＦＰＧＡ１０１は、ユーザが、ＰＬＣ１０（特に、ＦＰＧＡ１０１）において発生したイベントの発生順序、および、複数の特定のイベントの発生時刻の時間間隔を把握することができるように、イベントログを保存する。そして、ＦＰＧＡ１０１は、例えば、マイクロプロセッサ１０３が実行するプログラムを用いて、イベントログテーブル１６１に保存したイベントログを読み出し、外部の解析用デバイス５０などのツールへと出力する。解析用デバイス５０は、ＰＬＣ１０（特に、ＦＰＧＡ１０１）において発生した特定のイベントについて、その特定イベントが発生するまでに至る経緯を示すイベントログをＦＰＧＡ１０１から取得し、取得したイベントログを表示する。解析用デバイス５０は、ＰＬＣ１０において発生したイベントを発生順序と共に可視化し、つまり、そのイベントが発生するまでのＰＬＣ１０（特に、ＦＰＧＡ１０１）の内部状態の推移を、ユーザに示す。
【００６６】
したがって、ユーザは、イベントログを解析して、例えば、ＰＬＣ１０（特に、ＦＰＧＡ１０１）の通信性能を測定し、また、迅速にデバッグを行なうことが可能となる。ＦＰＧＡ１０１は、ＰＬＣ１０（特に、ＦＰＧＡ１０１）のデバッグ性を向上させる。
【００６７】
以上に概要を説明したＣＰＵユニット１００について、次に、図１を参照して、ＣＰＵユニット１００のハードウェア構成例、および、（特に、ＦＰＧＡ１０１が備える）機能ブロックについて説明する。
【００６８】
§２．構成例
（ＣＰＵユニットのハードウェア構成）
図１は、ＰＬＣ１０のＣＰＵユニット１００の構成例を示す図である。図１に例示する通り、ＣＰＵユニット１００は、ハードウェア構成として、ＦＰＧＡ１０１と、チップセット１０２と、マイクロプロセッサ１０３と、メインメモリ１０４と、不揮発性メモリ１０５と、を含む。ＣＰＵユニット１００は、さらに、不図示のＵＳＢコネクタを含んでもよい。チップセット１０２と他のコンポーネントとの間は、各種のバス（内部バス）を介してそれぞれ結合されている。なお、マイクロプロセッサ１０３とチップセット１０２とは、一体に形成されていてもよい。
【００６９】
マイクロプロセッサ１０３およびチップセット１０２は、典型的には、汎用的なコンピュータアーキテクチャに準じて構成される。すなわち、マイクロプロセッサ１０３は、チップセット１０２から内部クロックに従って順次供給される命令コードを解釈して実行する。チップセット１０２は、接続されている各種コンポーネントとの間で内部的なデータを遣り取りするとともに、マイクロプロセッサ１０３に必要な命令コードを生成する。さらに、チップセット１０２は、マイクロプロセッサ１０３での演算処理の実行の結果得られたデータなどをキャッシュする機能を有する。
【００７０】
ＣＰＵユニット１００は、記憶手段として、メインメモリ１０４および不揮発性メモリ１０５を備えている。メインメモリ１０４は、揮発性の記憶領域（ＲＡＭ）であり、ＣＰＵユニット１００へ電源投入後にマイクロプロセッサ１０３で実行されるべき各種プログラムを保持する。また、メインメモリ１０４は、マイクロプロセッサ１０３による各種プログラムの実行時の作業用メモリとしても使用される。このようなメインメモリ１０４として、例えば、ＤＲＡＭ（Dynamic Random Access Memory）、ＳＲＡＭ（Static Random Access Memory）等を用いることができる。
【００７１】
一方、不揮発性メモリ１０５は、各種のプログラムおよびパラメータなどのデータを不揮発的に保持する。これらのデータは、必要に応じて、マイクロプロセッサ１０３がアクセスできるようにメインメモリ１０４にコピーされる。このような不揮発性メモリ１０５は、フラッシュメモリのような半導体メモリを用いることができる。あるいは、ハードディスクドライブのような磁気記録媒体、ＤＶＤ−ＲＡＭ（Digital Versatile Disk Random Access Memory）のような光学記録媒体などを用いることもできる。
【００７２】
ＦＰＧＡ１０１は、製造後にユーザが回路構成を設定することのできるプログラマブル論理回路であって、例えば出力データの送信および入力データの受信などの通信処理を含む種々の処理を実行する。ＦＰＧＡ１０１は、通信処理として、ＣＰＵユニット１００以外のユニットおよびＰＬＣ１０以外の装置へ出力データの送信と、ＣＰＵユニット１００以外のユニットおよびＰＬＣ１０以外の装置からの入力データの受信とを実行する。さらに、ＦＰＧＡ１０１は、通信処理として、メインメモリ１０４との間でデータの送受信を実行する。ただし、ＦＰＧＡ１０１が実行する処理は通信処理に限られるものではなく、後述する種々の処理を実行する。
【００７３】
なお本実施形態において、ＣＰＵユニット１００からＣＰＵユニット１００以外のユニットに出力されるデータ、および、ＰＬＣ１０からＰＬＣ１０以外の装置に出力されるデータを、「出力データ」とも称す。また、ＣＰＵユニット１００以外のユニットからＣＰＵユニット１００に入力されるデータ、および、ＰＬＣ１０以外の装置からＰＬＣ１０に入力されるデータを、「入力データ」とも称す。
【００７４】
（ＦＰＧＡの備える機能ブロック）
ＦＰＧＡ１０１は、機能ブロックとして、イベント生成部１１０、コード生成部１２０、計時部１３０、取得部１４０、格納部１５０、判定部１７０、停止部１８０、および読出部１９０を備えている。ＦＰＧＡ１０１は、また、内部ＲＡＭ１６０を含んでいる。
【００７５】
コード生成部１２０は、イベント生成部１１０から、イベント生成部１１０において発生したイベントを通知されると、発生したイベントに対応するイベントコードを生成し、生成したイベントコードを取得部１４０に通知する。すなわち、コード生成部１２０は、イベント生成部１１０から通知される種々のイベントの各々について、各々のイベントを特定するイベントコードに対応付け、対応付けたイベントコードを、取得部１４０に通知する。また、コード生成部１２０は、ＦＰＧＡ１０１の外部から通知されたイベント（つまり、ＦＰＧＡ１０１の外部で発生したイベント）についても、そのイベントに対応するイベントコードを生成し、生成したイベントコードを取得部１４０に通知する。
【００７６】
計時部１３０は、例えばFree Run Counterであり、一定の時間間隔（周期）ごとにカウンタ値を更新して内部時刻を計測し、マイクロプロセッサ１０３およびＦＰＧＡ１０１の取得部１４０に、内部時刻についての情報を提供する。計時部１３０は設定された時間間隔で割り込み信号を発生することができ、典型的には、ハードウェアの仕様によって、複数の異なる時間間隔でそれぞれ割り込み信号を発生するように構成されるが、ＯＳ（Operating System）、ＢＩＯＳ（Basic Input Output System）などによって、任意の時間間隔で割り込み信号を発生するように設定することもできる。計時部１３０が発生する割り込み信号を利用して、例えば、ＰＬＣ１０による実行周期ごとの制御動作が実現される。
【００７７】
取得部１４０は、コード生成部１２０からイベントコードを取得し、また、計時部１３０から現在時刻（内部時刻）を取得し、取得したイベントコードと現在時刻とを、格納部１５０および判定部１７０の各々に、通知する。
【００７８】
格納部１５０は、停止部１８０から「イベントログの上書き保存の停止」が指示されていないと、取得部１４０から通知されたイベントコードと現在時刻とを、イベントログとして、内部ＲＡＭ１６０のイベントログテーブル１６１に上書き保存する。格納部１５０は、停止部１８０から「イベントログの上書き保存の停止」が指示されていると、取得部１４０から通知されたイベントコードと現在時刻との、イベントログテーブル１６１への上書き保存を実行しない。格納部１５０がイベントコードと現在時刻とを組み合わせてイベントログとしてイベントログテーブル１６１に格納することにより、ユーザは、イベントログテーブル１６１に格納されたイベントログを解析して、複数のイベントの各々の発生順序を把握できる。
【００７９】
判定部１７０は、取得部１４０から通知されたイベントコードおよび現在時刻を用いて、「所定の条件」を満たすイベントが発生したかを判定し、判定結果を停止部１８０に通知する。例えば、「所定の条件」が内部ＲＡＭ１６０に格納されている場合、判定部１７０は、内部ＲＡＭ１６０に格納されている「所定の条件」を参照して、「所定の条件」を満たすイベントが発生したかを判定する。「所定の条件」は、例えば、「対象イベント」、「開始対象イベント」、「終了対象イベント」、「最大期間Ｔｍａｘ」、および「最小期間Ｔｍｉｎ」である。
【００８０】
判定部１７０は、以下の３つのうちの少なくとも１つを検知すると、「所定の条件を満たすイベントが発生した」と判定する。すなわち、第１に、「対象イベント」として予め設定しておいたイベントの少なくとも１つが発生したことを検知すると、判定部１７０は、「所定の条件を満たすイベントが発生した」と判定する。つまり、判定部１７０は、予め単体として設定しておいたイベントの発生を検知すると、「所定の条件を満たすイベントが発生した」と判定する。
【００８１】
第２に、「開始対象イベント」として設定されたイベントの発生から「最大期間Ｔｍａｘ」として設定された時間が経過するまでに「終了対象イベント」として設定されたイベントが発生しないことを検知すると、判定部１７０は「所定の条件を満たすイベントが発生した」と判定する。例えば、２つの特定のイベント間の発生時間間隔が最大期間Ｔｍａｘ以上であることを検知すると、判定部１７０は、「所定の条件を満たすイベントが発生した」と判定する。判定部１７０は、例えば、予め設定しておいた２つのイベント（具体的には、開始対象イベントおよび終了対象イベント）の発生時間間隔が予め設定された最大期間Ｔｍａｘ以上であることを検知すると、「所定の条件を満たすイベントが発生した」と判定する。また、判定部１７０は、開始対象イベントの発生から、最大期間Ｔｍａｘが経過するまでに、終了対象イベントが発生しないことを検知すると、「所定の条件を満たすイベントが発生した」と判定してもよい。
【００８２】
第３に、２つの特定のイベント間の発生時間間隔が最小期間Ｔｍｉｎとして設定された時間間隔以下であることを検知すると、判定部１７０は、「所定の条件を満たすイベントが発生した」と判定する。判定部１７０は、例えば、予め設定しておいた２つのイベント（具体的には、開始対象イベントおよび終了対象イベント）の発生時間間隔が予め設定された最小期間Ｔｍｉｎ以下であることを検知すると、「所定の条件を満たすイベントが発生した」と判定する。
【００８３】
停止部１８０は、判定部１７０から「所定の条件を満たすイベントが発生した」との判定結果を通知されると、格納部１５０によるイベントログの上書き保存を停止させる。例えば、停止部１８０は、「イベントログの上書き保存の停止」を指示する信号を格納部１５０に送信し、格納部１５０によるイベントログの上書き保存を停止させる。
【００８４】
読出部１９０は、イベントログテーブル１６１に格納されているイベントログを読み出して、ＦＰＧＡ１０１の外部に出力する。例えば、読出部１９０は、「イベントログの読み出し」を指示する信号をマイクロプロセッサ１０３から受け付けると、イベントログテーブル１６１に格納されているイベントログを読み出して、マイクロプロセッサ１０３へと出力する。
【００８５】
イベント生成部１１０は、ＰＬＣ１０（特に、ＦＰＧＡ１０１）が実行する種々の処理を制御し、ＰＬＣ１０が実行する種々の処理を、イベントとして、コード生成部１２０に通知する。つまり、イベント生成部１１０は、出力データの送信および入力データの受信などの通信処理を含む種々の処理を実行し、実行する処理を、イベントとして、コード生成部１２０に通知する。図１に例示するイベント生成部１１０は、例えば、フィールドバスコントローラ１１１、高速不揮発性メモリコントローラ１１２、ＷＤＴ（Watch Dog Timer）１１３、内部バスコントローラ１１４、システムバスコントローラ１１５、電源コントローラ１１６を含む。
【００８６】
フィールドバスコントローラ１１１は、フィールドネットワーク２０を介したデータの遣り取りを制御し、典型的には、フィールドネットワーク２０における物理層およびデータリンク層の機能を提供する。すなわち、フィールドバスコントローラ１１１は、用いられるフィールドネットワーク２０の規格に従い、出力データの送信および入力データの受信を制御する。具体的には、フィールドバスコントローラ１１１は、フィールドネットワーク２０に接続される他の装置との間で、不図示のバッファメモリの出力データを送信する処理、および、入力データを受信して前記バッファメモリに格納する処理を行う。フィールドバスコントローラ１１１は、実行するデータの送受信処理を、イベントとして、コード生成部１２０に通知する。例えば、フィールドバスコントローラ１１１は、フィールド機器とのフィールドネットワーク２０を介したデータの送信および受信を、イベントとして、コード生成部１２０に通知する。
【００８７】
例えばＥｔｈｅｒＣＡＴ規格に従うフィールドネットワーク２０を採用した場合、通常のイーサネット通信を行うためのハードウェアを含む、フィールドバスコントローラ１１１が用いられる。ＥｔｈｅｒＣＡＴ規格では、通常のイーサネット規格に従う通信プロトコルを実現する一般的なイーサネットコントローラを利用できる。ただし、フィールドネットワーク２０として採用される産業用イーサネットの種類によっては、通常の通信プロトコルとは異なる専用仕様の通信プロトコルに対応した特別仕様のイーサネットコントローラが用いられる。また、産業用イーサネット以外のフィールドネットワークを採用した場合には、当該規格に応じた専用のフィールドネットワークコントローラが用いられる。ＥｔｈｅｒＣＡＴ規格に従うフィールドネットワーク２０を採用した場合、フィールドバスコントローラ１１１は、フィールドネットワーク２０を介したデータの送信を、「ＥＣＡＴ送信」とのイベントとして、コード生成部１２０に通知する。同様に、フィールドバスコントローラ１１１は、ＥｔｈｅｒＣＡＴ規格に従うフィールドネットワーク２０を介したデータの受信を、「ＥＣＡＴ受信」とのイベントとして、コード生成部１２０に通知する。
【００８８】
高速不揮発性メモリコントローラ１１２は、ＢＩＯＭ（Backup Input Output Memory）とも称され、不図示の高速不揮発性メモリへのデータ格納、前記高速不揮発性メモリからのデータ読出等の処理を実行する。高速不揮発性メモリコントローラ１１２は、実行する処理を、イベントとして、コード生成部１２０に通知する。例えば、高速不揮発性メモリコントローラ１１２は、前記高速不揮発性メモリからの所定のデータの読出を開始すると、その所定のデータの読出開始を、イベントとして、コード生成部１２０に通知する。
【００８９】
ＷＤＴ（WatchDog Timer）１１３は、マイクロプロセッサ１０３等の動作を監視し、異常発生などを検知すると、異常発生を、イベントとして、コード生成部１２０に通知する。例えば、ＷＤＴ１１３は、マイクロプロセッサ１０３から定期的に送信される信号（ＷＤＴクリア信号）を受信している。そして、ＷＤＴ１１３は、所定期間を経過してもＷＤＴクリア信号を受信しないと、マイクロプロセッサ１０３に何らかの異常（ＷＤＴ、Watch Dog Timeout）が発生していることを検知する。ＷＤＴ１１３は、ＷＤＴ発生を検知すると、検知したＷＤＴ発生を、イベントとして、コード生成部１２０に通知する。
【００９０】
内部バスコントローラ１１４は、チップセット１０２と他のコンポーネントとの間を接続する内部バスを介した信号の送受信（例えば、マイクロプロセッサ１０３とＦＰＧＡ１０１との間の信号の送受信）を制御する。チップセット１０２とＦＰＧＡ１０１とは、例えばＰＣＩｅ（Peripheral Component Interconnect Express）に準拠して通信してもよい。内部バスコントローラ１１４は、実行する処理を、イベントとして、コード生成部１２０に通知し、例えば、チップセット１０２からＦＰＧＡ１０１への所定の信号の送信を制御する処理を実行すると、その処理を、イベントとして、コード生成部１２０に通知する。また、内部バスコントローラ１１４は、例えば、内部バスのメモリトランザクションとして配送されるＭＳＩ（Message Signaled Interrupt）の発生を、イベントとして、コード生成部１２０に通知する。
【００９１】
システムバスコントローラ１１５は、ＣＰＵユニット１００と、ＩＯユニット３０１〜３０３の各々と、特殊ユニット３０４とを接続するＰＬＣシステムバス４００を介したデータの遣り取りを制御する。システムバスコントローラ１１５は、典型的には、ＰＬＣシステムバス４００における物理層およびデータリンク層の機能を提供する。すなわち、システムバスコントローラ１１５は、ＰＬＣシステムバス４００に接続されるＣＰＵユニット１００以外のユニットと、ＣＰＵユニット１００との間の送受信を制御する。例えば、システムバスコントローラ１１５は、不図示のバッファメモリに格納されているデータ（出力データ）を、ＩＯユニット３０１〜３０３および特殊ユニット３０４にＰＬＣシステムバス４００を介して送信する処理を行なう。また、システムバスコントローラ１１５は、ＰＬＣシステムバス４００を介してＩＯユニット３０１〜３０３および特殊ユニット３０４から入力されるデータ（入力データ）を受信して前記バッファメモリに格納する処理を行う。
【００９２】
そして、システムバスコントローラ１１５は、実行する処理を、イベントとして、コード生成部１２０に通知する。システムバスコントローラ１１５は、例えば、ＰＬＣシステムバス４００を介して受信したＩＯユニット３０１〜３０３からの入力データを前記バッファメモリに格納する処理を、イベントとして、コード生成部１２０に通知する。
【００９３】
なお、ＣＰＵユニット１００自体にＩＯユニット３０１〜３０３およびサーボドライバ３３、３４の機能を持たせる場合は、システムバスコントローラ１１５による出力データの送信および入力データの受信は、それらの機能を担う部分を通信の相手方としてＣＰＵユニット１００の内部で行われる送信および受信となる。
【００９４】
電源コントローラ１１６は、電源ユニット２００から、ＣＰＵユニット１００、ＩＯユニット３０１〜３０３、および、特殊ユニット３０４の各々への電源供給を制御する。また、電源コントローラ１１６は、制御システム１の各種機器（例えば、ＰＬＣ１０およびフィールド機器など）およびネットワーク（例えば、フィールドネットワーク２０およびＰＬＣシステムバス４００など）のリセットを制御してもよい。電源コントローラ１１６は、実行する処理を、イベントとして、コード生成部１２０に通知し、例えば、電源ユニット２００からＣＰＵユニット１００等への電源供給の遮断が発生すると、その電源供給の遮断を、イベントとして、コード生成部１２０に通知する。
【００９５】
なお、イベント生成部１１０が含んでいる機能ブロックとして説明した上述の機能ブロックは、イベント生成部１１０が含んでいる機能ブロックの一例にすぎず、イベント生成部１１０は、上述の機能ブロック以外の機能ブロックを必要に応じて含んでいてもよい。つまり、ＰＬＣ１０が実行する種々の処理に対応する機能ブロックを、イベント生成部１１０は含んでいてもよい。イベント生成部１１０は、ＰＬＣ１０が実行する種々の処理を、イベントとして、コード生成部１２０に通知できればよく、イベント生成部１１０が、イベントとしてコード生成部１２０に通知する処理は、上述のものに限られない。
【００９６】
なお前述の通り、ＣＰＵユニット１００は、解析用デバイス５０などの各種の外部装置と接続するためのインターフェイスとしてＵＳＢコネクタ（通信ポート）を備えていてもよい。ＵＳＢコネクタは、例えば、解析用デバイス５０等の外部のツールとＣＰＵユニット１００とを接続するためのインターフェイスとして利用可能であり、接続ケーブルが接続される。例えば、ＣＰＵユニット１００から出力されたイベントログ等は、接続ケーブルを介して、解析用デバイス５０に取込まれる。
【００９７】
（ＦＰＧＡの備える記憶部）
図１に例示するＦＰＧＡ１０１は、内部ＲＡＭ１６０を備えている。内部ＲＡＭ１６０は、ＦＰＧＡ１０１が使用する各種データを格納する記憶装置である。内部ＲＡＭ１６０は、ＦＰＧＡ１０１が実行する各種処理の制御プログラム、および、その制御プログラムを実行するときに読み出す各種データを非一時的に記憶している。内部ＲＡＭ１６０は、例えば、「対象イベント」、「開始対象イベント」、「終了対象イベント」、「最大期間Ｔｍａｘ」、および「最小期間Ｔｍｉｎ」を記憶している。内部ＲＡＭ１６０はさらに、イベントログテーブル１６１を格納している。
【００９８】
イベントログテーブル１６１には、ＰＬＣ１０（特に、ＦＰＧＡ１０１のイベント生成部１１０）が実行する種々の処理の各々を特定するイベントコードと、それら各々の処理が実行された順序を示す情報（例えば、時刻情報）とが対応付けられて格納される。イベントコードと、イベントコードによって特定されるイベントの発生順序（つまり、イベントに対応する処理の実行順序）を示す情報とは、イベントログとして、イベントログテーブル１６１に格納される。
【００９９】
（制御装置についての整理）
これまで図１を用いて、ＰＬＣ１０（特に、ＣＰＵユニット１００）のハードウェア構成等を説明してきた。ＣＰＵユニット１００（特に、ＦＰＧＡ１０１）について、その概要は、以下のように整理することができる。
【０１００】
すなわち、ＰＬＣ１０（制御装置）は、自装置において発生したイベントについての情報であるイベント情報（例えば、イベントコード）を取得する取得部１４０と、前記イベントの発生順序（例えば、前記イベントが発生した内部時刻）を示す情報と共に、取得部１４０によって取得された前記イベント情報を、イベントログとして内部ＲＡＭ１６０（記憶部）に上書き保存する格納部１５０と、所定の条件を満たすイベントが発生すると、当該所定の条件を満たすイベントよりも後に発生するイベントについての、格納部１５０による前記イベントログの上書き保存を停止させる停止部１８０と、を備えている。
【０１０１】
前記の構成によれば、ＰＬＣ１０は、自装置において発生したイベントについての情報であるイベント情報を、前記イベントの発生順序を示す情報と共に、イベントログとして内部ＲＡＭ１６０（具体的には、イベントログテーブル１６１）に上書き保存する。ここで、前記イベントログを内部ＲＡＭ１６０に格納していく際、内部ＲＡＭ１６０の記憶容量の上限に達した場合、ＰＬＣ１０は、例えば、内部ＲＡＭ１６０から古いイベントログを順に削除し、新しいイベントログを内部ＲＡＭ１６０に格納していく。つまり、ＰＬＣ１０は、古いイベントログに対して順次新しいイベントログを上書き保存していく（言い換えれば、古いイベントログから順に、新しいイベントログで上書きする）。そして、ＰＬＣ１０は、所定の条件を満たすイベントが発生すると、当該所定の条件を満たすイベントよりも後に発生するイベントについてのイベントログの上書き保存を停止する。
【０１０２】
したがって、ＰＬＣ１０は、前記所定の条件を満たすイベントより前に発生したイベントのイベントログが、前記所定の条件を満たすイベントより後に発生するイベントのイベントログに上書きされて失われるという事態を防ぐことができる。つまり、ＰＬＣ１０は、前記所定の条件を満たすイベントについて、前記所定の条件を満たすイベントが発生するまでの経緯を把握することができるように、前記イベントログを保存することができるという効果を奏する。
【０１０３】
ＰＬＣ１０において、取得部１４０と、格納部１５０と、停止部１８０とは、ＦＰＧＡを用いて実現されている。前記の構成によれば、ＰＬＣ１０において、自装置において発生したイベントのイベントログの上書き保存、および、前記所定の条件を満たすイベントの発生に伴うイベントログの上書き保存の停止は、ＰＬＣ１０の備えるＦＰＧＡ１０１により実行される。また、ＰＬＣ１０において、ＦＰＧＡ１０１は、ＦＰＧＡ１０１内に設けられた内部ＲＡＭ１６０に、前記イベントログを上書き保存する。
【０１０４】
ここで、ＦＰＧＡ１０１は、例えば、出力データの送信および入力データの受信などの通信処理を含む種々の処理を実行し、実行した処理についての情報を、実行した処理の実行順序と共に、前記イベントログとして、内部ＲＡＭ１６０に保存する。したがって、ＦＰＧＡ１０１は、ＦＰＧＡ１０１に対する指示がなされた順序ではなく、ＦＰＧＡ１０１内で実際にイベントが発生した順序を、イベントログとして保存することができるという効果を奏する。
【０１０５】
また、ＦＰＧＡ１０１は種々の処理を次々と実行するため、ＦＰＧＡ１０１が、ＦＰＧＡ１０１の内部で発生したイベントについてのイベントログを保存するためには、広帯域のメモリが必要となる。ＦＰＧＡ１０１は、内部ＲＡＭ１６０に前記イベントログを保存することにより、所望の広帯域性を備えた格納先に、前記イベントログ保存することができるという効果を奏する。
【０１０６】
さらに、ＦＰＧＡ１０１は、内部ＲＡＭ１６０に前記イベントログを上書き保存し、つまり、前記イベントログのデータ量が内部ＲＡＭ１６０の記憶容量の上限に達した場合には、古いイベントログから順に削除していく。したがって、ＦＰＧＡ１０１は、前記イベントログの保存に必要な広帯域性を確保しつつ、前記イベントログの格納先の記憶容量を抑制することができるという効果を奏する。
【０１０７】
ＦＰＧＡ１０１は、前記所定の条件を満たすイベントが発生したと判定すると、前記所定の条件を満たすイベントよりも後に発生するイベントについてのイベントログの上書き保存を停止する。したがって、ＦＰＧＡ１０１は、前記所定の条件を満たすイベントの発生経緯を示すイベントログを保存し、さらに、前記発生経緯を示すイベントログが、前記所定の条件を満たすイベントより後に発生するイベントのイベントログに上書きされて失われるのを回避することができるという効果を奏する。
【０１０８】
ＰＬＣ１０は判定部１７０を備えている。判定部１７０は、（１）対象イベントとして予め設定しておいたイベントの少なくとも１つが発生したこと、（２）開始対象イベントとして予め設定しておいたイベントの発生から、予め設定された最大期間Ｔｍａｘが経過するまでに、終了対象イベントとして予め設定しておいたイベントが発生しないこと、および、（３）開始対象イベントとして予め設定しておいたイベントの発生から、予め設定された最小期間Ｔｍｉｎが経過する前に、終了対象イベントとして予め設定しておいたイベントが発生したこと、の少なくとも１つを検知すると、前記所定の条件を満たすイベントが発生したと判定する。そして、停止部１８０は、判定部１７０により前記所定の条件を満たすイベントが発生したと判定されると、判定部１７０により前記所定の条件を満たすイベントが発生したと判定された後に発生するイベントについての、格納部１５０による前記イベントログの上書き保存を停止させる。
【０１０９】
前記の構成によれば、ＰＬＣ１０は、（１）対象イベントとして予め設定しておいたイベントの少なくとも１つが発生したことを検知すると、発生を検知した前記対象イベントよりも後に発生するイベントについての、前記イベントログの上書き保存を停止する。したがって、ＰＬＣ１０は、前記対象イベントより前に発生したイベントのイベントログが、前記対象イベントより後に発生するイベントのイベントログに上書きされて失われるという事態を防ぐことができる。つまり、ＰＬＣ１０は、前記対象イベントについて、前記対象イベントが発生するまでの経緯を把握することができるように、前記イベントログを保存することができるという効果を奏する。
【０１１０】
また、ＰＬＣ１０は、（２）開始対象イベントとして予め設定しておいたイベントの発生から、予め設定された最大期間Ｔｍａｘが経過するまでに、終了対象イベントとして予め設定しておいたイベントが発生しないことを検知すると、検知後に発生するイベントについての、前記イベントログの上書き保存を停止する。
【０１１１】
例えば、ＰＬＣ１０は、前記開始対象イベントの発生から、最大期間Ｔｍａｘが経過するまでに、前記終了対象イベントが発生しないことを検知すると、最大期間Ｔｍａｘの経過後に発生するイベントについての、前記イベントログの上書き保存を停止する。
【０１１２】
したがって、ＰＬＣ１０は、最大期間Ｔｍａｘの経過時点までに発生したイベントのイベントログが、最大期間Ｔｍａｘの経過時点後に発生したイベントのイベントログに上書きされて失われるという事態を防ぐことができる。つまり、ＰＬＣ１０は、前記開始対象イベントの発生から最大期間Ｔｍａｘの経過までに発生すべき前記終了対象イベントが発生しなかった経緯を把握することができるように、前記イベントログを保存することができるという効果を奏する。
【０１１３】
また、ＰＬＣ１０は、前記開始対象イベントが発生してから前記終了対象イベントが発生するまでの時間間隔が最大期間Ｔｍａｘ以上であることを検知すると、前記終了対象イベントよりも後に発生するイベントについてのイベントログの上書き保存を停止してもよい。
【０１１４】
したがって、ＰＬＣ１０は、前記終了対象イベントより前に発生したイベントのイベントログが、前記終了対象イベントより後に発生するイベントのイベントログに上書きされて失われるという事態を防ぐことができる。つまり、ＰＬＣ１０は、前記終了対象イベントについて、前記終了対象イベントが発生するまでの経緯を把握することができるように、前記イベントログを保存することができるという効果を奏する。
【０１１５】
さらに、ＰＬＣ１０は、（３）開始対象イベントとして予め設定しておいたイベントの発生から、予め設定された最小期間Ｔｍｉｎが経過する前に、終了対象イベントとして予め設定しておいたイベントが発生したことを検知すると、検知後に発生するイベントについての、前記イベントログの上書き保存を停止する。
【０１１６】
例えば、ＰＬＣ１０は、前記開始対象イベントの発生から、最小期間Ｔｍｉｎが経過する前に、前記終了対象イベントが発生したことを検知すると、前記終了対象イベントよりも後に発生するイベントについての、前記イベントログの上書き保存を停止する。
【０１１７】
したがって、ＰＬＣ１０は、前記終了対象イベントより前に発生したイベントのイベントログが、前記終了対象イベントより後に発生するイベントのイベントログに上書きされて失われるという事態を防ぐことができる。つまり、ＰＬＣ１０は、前記開始対象イベントの発生から最小期間Ｔｍｉｎの経過後に発生すべき前記終了対象イベントが、最小期間Ｔｍｉｎの経過前に発生した経緯を把握することができるように、前記イベントログを保存することができるという効果を奏する。言い換えれば、ＰＬＣ１０は、前記終了対象イベントについて、前記終了対象イベントが発生するまでの経緯を把握することができるように、前記イベントログを保存することができるという効果を奏する。
【０１１８】
ＰＬＣ１０は、前記発生順序を示す情報（時刻情報）と共に内部ＲＡＭ１６０に保存されている前記イベント情報（イベントコード）を、つまり、前記イベントログを、自装置の外部に出力する読出部１９０（出力部）を備えている。ＰＬＣ１０から前記イベントログを取得した解析用デバイス５０等の外部装置は、例えば、前記所定の条件を満たすイベントの発生経緯を示すイベントログを表示する。つまり、解析用デバイス５０は、ＰＬＣ１０において発生した前記イベントを発生順序と共に可視化し、つまり、前記イベントが発生するまでのＰＬＣ１０の状態（内部状態）の推移を、ユーザに示す。したがって、ＰＬＣ１０は、前記所定の条件を満たすイベントの発生経緯を示すイベントログを、解析用デバイス５０等の外部装置において解析可能なように出力することができるという効果を奏する。
【０１１９】
これまでに概要を説明してきたＣＰＵユニット１００（特に、ＦＰＧＡ１０１）について、次に、図３等を用いて、ＣＰＵユニット１００（特に、ＦＰＧＡ１０１）の実行する処理について、その概要を説明していく。
【０１２０】
§３．動作例
図３は、ＣＰＵユニット１００（特に、ＦＰＧＡ１０１）が実行するイベントログの上書き保存処理および上書き保存停止処理の概要を示すフロー図である。図３に例示するように、取得部１４０は、コード生成部１２０から、イベント生成部１１０において発生したイベントに対応するイベントコードを取得する（Ｓ１１０）。また、取得部１４０は、計時部１３０から現在時刻（現在の内部時刻）を取得する（Ｓ１２０）。ここで、取得部１４０が計時部１３０から取得する現在時刻は、イベント生成部１１０において発生したイベントの発生時刻を示すものとして、ＦＰＧＡ１０１等により用いられる。
【０１２１】
格納部１５０は、停止部１８０によってイベントログの上書き保存が禁止されているかを判定し、つまり、イベントログの上書き保存を停止するようにとの指示を停止部１８０から受けていないかを確認する（Ｓ１３０）。イベントログの上書き保存が禁止されていない場合（Ｓ１３０でＮｏ）、格納部１５０は、取得部１４０から通知されたイベントコードと現在時刻とを、イベントログとして、内部ＲＡＭ１６０のイベントログテーブル１６１に上書き保存する（Ｓ１４０）。また、イベントログの上書き保存が禁止されている場合（Ｓ１３０でＹｅｓ）、格納部１５０は、イベントログの、イベントログテーブル１６１への上書き保存を実行しない。
【０１２２】
判定部１７０は、取得部１４０から通知されたイベントコードおよび現在時刻を用いて、「所定の条件を満たすイベントが発生したか」を判定する（Ｓ１５０）。判定部１７０は、「所定の条件を満たすイベントが発生した」と判定すると（Ｓ１５０でＹｅｓ）、「所定の条件を満たすイベントが発生した」との判定結果を停止部１８０に通知する。停止部１８０は、判定部１７０から「所定の条件を満たすイベントが発生した」との判定結果を通知されると、格納部１５０によるイベントログの上書き保存を禁止し、つまり、イベントログのイベントログテーブル１６１への上書き保存を停止させる（Ｓ１６０）。判定部１７０が「所定の条件を満たすイベントが発生していない」と判定すると（Ｓ１５０でＮｏ）、格納部１５０によるイベントログの上書き保存は停止されず、次のイベントが発生すると再びＳ１１０およびＳ１２０の処理が実行される。
【０１２３】
図３に例示した処理フローは、以下のように整理することができる。すなわち、ＰＬＣ１０（特に、ＦＰＧＡ１０１）が実行する制御方法は、ＰＬＣ１０（特に、ＦＰＧＡ１０１）において発生したイベントについての情報であるイベント情報（例えば、イベントコード）を取得する取得ステップ（Ｓ１１０）と、前記イベントの発生順序（例えば、前記イベントが発生した内部時刻）を示す情報と共に、前記取得ステップにおいて取得された前記イベント情報を、イベントログとして内部ＲＡＭ１６０（記憶部）に上書き保存する格納ステップ（Ｓ１４０）と、所定の条件を満たすイベントが発生すると、当該所定の条件を満たすイベントよりも後に発生するイベントについての、前記格納ステップにおける前記イベントログの上書き保存を停止させる停止ステップ（Ｓ１６０）と、を含んでいる。
【０１２４】
前記の方法によれば、前記制御方法は、ＰＬＣ１０（特に、ＦＰＧＡ１０１）において発生したイベントについての情報であるイベント情報を、前記イベントの発生順序を示す情報と共に、イベントログとして内部ＲＡＭ１６０（具体的には、イベントログテーブル１６１）に上書き保存する。ここで、前記イベントログを内部ＲＡＭ１６０に格納していく際、内部ＲＡＭ１６０の記憶容量の上限に達した場合、前記制御方法は、例えば、内部ＲＡＭ１６０から古いイベントログを順に削除し、新しいイベントログを内部ＲＡＭ１６０に格納していく。つまり、前記制御方法は、古いイベントログに対して順次新しいイベントログを上書き保存していく（言い換えれば、古いイベントログから順に、新しいイベントログで上書きする）。そして、前記制御方法は、ＰＬＣ１０において所定の条件を満たすイベントが発生すると、当該所定の条件を満たすイベントよりも後に発生するイベントについてのイベントログの上書き保存を停止する。
【０１２５】
したがって、前記制御方法は、前記所定の条件を満たすイベントより前に発生したイベントのイベントログが、前記所定の条件を満たすイベントより後に発生するイベントのイベントログに上書きされて失われるという事態を防ぐことができる。つまり、前記制御方法は、ＰＬＣ１０において発生した前記所定の条件を満たすイベントについて、前記所定の条件を満たすイベントが発生するまでの経緯を把握することができるように、前記イベントログを保存することができるという効果を奏する。
【０１２６】
ここで、前述の通り、ＦＰＧＡ１０１は、以下の３つのうちの少なくとも１つを検知すると、「所定の条件を満たすイベントが発生した」と判定して、格納部１５０によるイベントログの上書き保存を停止する。すなわち、（１）予め単体として設定しておいた所定のイベントの発生を検知すると、ＦＰＧＡ１０１は、格納部１５０によるイベントログの上書き保存を停止する。また、（２）複数の所定のイベントの発生時間間隔が予め設定された最大期間Ｔｍａｘ以上であることを検知すると、ＦＰＧＡ１０１は、格納部１５０によるイベントログの上書き保存を停止する。さらに、（３）複数の所定のイベントの発生時間間隔が予め設定された最小期間Ｔｍｉｎ以下である状況であることを検知すると、ＦＰＧＡ１０１は、格納部１５０によるイベントログの上書き保存を停止する。以下、図４から図６を用いて、上述の（１）から（３）の各々について、ＦＰＧＡ１０１が実行する具体的な処理を説明していく。
【０１２７】
（処理例１−予め単体として設定しているイベントが発生した）
図４は、ＣＰＵユニット１００（特に、ＦＰＧＡ１０１）が所定のイベントの発生を検知した場合に実行する処理の一例を示すフロー図である。ＦＰＧＡ１０１のコンフィグが終了すると、つまり、ＦＰＧＡ１０１の設定が完了すると、計時部１３０は、１クロック毎に繰り返し８ｎｓ分カウントアップし（Ｓ２１０）、カウントアップした値（つまり、現在の内部時刻を示す時刻情報）を、取得部１４０に通知する。
【０１２８】
コード生成部１２０は、イベント生成部１１０におけるイベント発生まで待機しておき（Ｓ２２０）、イベント生成部１１０においてイベントが発生すると、イベント生成部１１０において発生したイベントに対応するイベントコードを生成する（Ｓ２３０）。つまり、コード生成部１２０は、イベント生成部１１０において発生したイベントを、対応するイベントコードに変換し、変換した（つまり、生成した）イベントコードを、取得部１４０に通知する。取得部１４０は、コード生成部１２０からイベントコードを取得すると、取得したイベントコードを、計時部１３０から取得した時刻情報と組み合わせて、格納部１５０および判定部１７０に通知する。
【０１２９】
格納部１５０は、停止部１８０によってイベントログの上書き保存が停止されているかを判定し、つまり、イベントログの上書き保存を停止するようにとの指示を停止部１８０から受けていないかを確認する（Ｓ２４０）。イベントログの上書き保存が停止されていない場合（Ｓ２４０でＮｏ）、格納部１５０は、取得部１４０から通知されたイベントコードと時刻情報とを、イベントログとして、内部ＲＡＭ１６０のイベントログテーブル１６１に上書き保存する（Ｓ２５０）。また、イベントログの上書き保存が禁止されている場合（Ｓ２４０でＹｅｓ）、格納部１５０は、イベントログの、イベントログテーブル１６１への上書き保存を実行しない。
【０１３０】
判定部１７０は、「格納部１５０がイベントログテーブル１６１に上書き保存したイベントコードが、予め設定されたイベントコードであるか」を判定する（Ｓ２６０）。つまり、判定部１７０は、「取得部１４０から通知されたイベントコードが、予め設定されたイベントコードであるか」を判定する。
【０１３１】
判定部１７０は、「格納部１５０が保存したイベントコードが、予め設定されたイベントコードである」と判定すると（Ｓ２６０でＹｅｓ）、この判定結果を停止部１８０に通知する。停止部１８０は、判定部１７０から「格納部１５０が保存したイベントコードが、予め設定されたイベントコードである」との判定結果を通知されると、格納部１５０によるイベントログの上書き保存を禁止する。格納部１５０は、停止部１８０からの禁止指示（つまり、停止指示）を受け付けると、イベントログのイベントログテーブル１６１への上書き保存を停止する（Ｓ２７０）。判定部１７０が「格納部１５０が保存したイベントコードが、予め設定されたイベントコードでない」と判定すると（Ｓ２６０でＮｏ）、格納部１５０によるイベントログの上書き保存は停止されず、Ｓ２２０の処理へと戻る。
【０１３２】
（具体例）
例えば、時刻情報の各々は５６ｂｉｔであり、イベントコードの各々は８ｂｉｔであって、イベントログの各々は「５６＋８＝６４」ｂｉｔのデータであるとする。そして、「イベントログの上書き保存の停止」の契機となるイベントコードとして、「ＷＤＴ（Watch Dog Timer）のタイムアップ（ＷＤＴｕｐ）の発生」とのイベントを示す「０Ｘ０Ａ」が予め設定されているものとする。
【０１３３】
取得部１４０から通知されたイベントコードが「０Ｘ０Ａ」であることを判定部１７０が検知するまで、格納部１５０は、イベント生成部１１０において順次発生するイベントの各々についてのイベントログを、イベントログテーブル１６１に上書き保存していく。
【０１３４】
そして、判定部１７０は、取得部１４０から通知されたイベントコードが「０Ｘ０Ａ」であることを検知すると、「所定の条件を満たすイベントが発生した」との判定結果を、停止部１８０に通知する。停止部１８０は、判定部１７０から「所定の条件を満たすイベントが発生した」との判定結果を通知されると、格納部１５０によるイベントログの上書き保存を禁止する。
【０１３５】
したがって、ＦＰＧＡ１０１は、ＷＤＴｕｐが発生するよりも前に順次発生していたイベントのイベントログが、ＷＤＴｕｐが発生した時点よりも後に発生するイベントのイベントログによって上書きされて削除されるのを防ぐことができる。つまり、イベントログテーブル１６１には、「ＷＤＴｕｐの発生と、その発生時刻とを示すイベントログ」、および、「ＷＤＴｕｐが発生するよりも前に順次発生していたイベントのイベントログ」が保存されている。ユーザは、イベントログテーブル１６１に保存されている、「ＷＤＴｕｐが発生するよりも前に順次発生していたイベントのイベントログ」を解析して、ＷＤＴｕｐが発生した原因および経緯を把握することができる。
【０１３６】
（処理例２−予め設定しておいた２つのイベントの発生時間間隔が、予め設定された最大期間以上である）
図５は、予め設定しておいた２つのイベントの発生時間間隔が、予め設定された最大期間Ｔｍａｘ以上である場合に、ＣＰＵユニット１００（特に、ＦＰＧＡ１０１）が実行する処理の一例を示すフロー図である。図５におけるＳ３１０からＳ３４０までの処理は、図４におけるＳ２１０からＳ２４０までの処理と同様である。
【０１３７】
すなわち、ＦＰＧＡ１０１のコンフィグが終了すると、計時部１３０は、１クロック毎に繰り返し８ｎｓ分カウントアップし（Ｓ３１０）、カウントアップした値を、取得部１４０に通知する。コード生成部１２０は、イベント生成部１１０におけるイベント発生まで待機しておき（Ｓ３２０）、イベント生成部１１０においてイベントが発生すると、イベント生成部１１０において発生したイベントをイベントコードに変換する（Ｓ３３０）。そして、コード生成部１２０は、変換した（つまり、生成した）イベントコードを、取得部１４０に通知する。取得部１４０は、コード生成部１２０からイベントコードを取得すると、取得したイベントコードを、計時部１３０から取得した時刻情報と組み合わせて、格納部１５０および判定部１７０に通知する。格納部１５０は、停止部１８０によってイベントログの上書き保存が停止されているかを判定し、つまり、イベントログの上書き保存を停止するようにとの指示を停止部１８０から受けていないかを確認する（Ｓ３４０）。
【０１３８】
イベントログの上書き保存が禁止されている場合（Ｓ３４０でＹｅｓ）、格納部１５０は、取得部１４０から通知されたイベントコードと時刻情報とをイベントログテーブル１６１に上書き保存することは行わない。次のイベントが発生すると再びＳ３２０の処理が実行される。
【０１３９】
イベントログの上書き保存が禁止されていない場合（Ｓ３４０でＮｏ）、判定部１７０は、「取得部１４０から通知されたイベントコードが、『スタート（つまり、開始対象イベント）』として予め設定されたイベントコードであるか」を判定する（Ｓ３５０）。判定部１７０は、「取得部１４０から通知されたイベントコードが、『スタート』として予め設定されたイベントコードである」と判定すると（Ｓ３５０でＹｅｓ）、計測用カウンタのカウントアップを開始して（Ｓ３６０）、次にＳ３７０の処理の処理が実行される。また、判定部１７０は、「取得部１４０から通知されたイベントコードが、『スタート』として予め設定されたイベントコードではない」と判定すると（Ｓ３５０でＮｏ）、何も処理を実行せずに、次にＳ３７０の処理の処理が実行される。
【０１４０】
判定部１７０は、「取得部１４０から通知されたイベントコードが、『エンド（つまり、終了対象イベント）』として予め設定されたイベントコードであるか」を判定する（Ｓ３７０）。判定部１７０は、「取得部１４０から通知されたイベントコードが、『エンド』として予め設定されたイベントコードである」と判定すると（Ｓ３７０でＹｅｓ）、計測用カウンタのカウントアップを停止して（Ｓ３８０）、次にＳ３９０の処理の処理が実行される。また、判定部１７０は、「取得部１４０から通知されたイベントコードが、『エンド』として予め設定されたイベントコードではない」と判定すると（Ｓ３７０でＮｏ）、何も処理を実行せずに、次にＳ３９０の処理の処理が実行される。
【０１４１】
格納部１５０は、取得部１４０から通知されたイベントコードと時刻情報とを、イベントログとして、内部ＲＡＭ１６０のイベントログテーブル１６１に上書き保存する（Ｓ３９０）。Ｓ３９０におけるイベントログの上書き保存後、判定部１７０は、「計測用カウンタが設定値（つまり、最大期間Ｔｍａｘ）以上であるか」を判定する（Ｓ４００）。
【０１４２】
判定部１７０は、「計測用カウンタが最大期間Ｔｍａｘ以上である」と判定すると（Ｓ４００でＹｅｓ）、この判定結果を停止部１８０に通知する。停止部１８０は、判定部１７０から「計測用カウンタが最大期間Ｔｍａｘ以上である」との判定結果を通知されると、格納部１５０によるイベントログの上書き保存を禁止する。格納部１５０は、停止部１８０からの禁止指示（つまり、停止指示）を受け付けると、イベントログのイベントログテーブル１６１への上書き保存を停止する（Ｓ４１０）。判定部１７０が「計測用カウンタが最大期間Ｔｍａｘ未満である」と判定すると（Ｓ４００でＮｏ）、格納部１５０によるイベントログの上書き保存は停止されず、Ｓ３２０の処理へと戻る。
【０１４３】
（具体例）
例えば、時刻情報の各々は５６ｂｉｔであり、イベントコードの各々は８ｂｉｔであって、イベントログの各々は「５６＋８＝６４」ｂｉｔのデータであるとする。「スタート（つまり、開始対象イベント）」のイベントコードとして、「ユニット電源断の発生（つまり、電源供給を遮断した）」とのイベントを示す「０Ｘ２０」が予め設定されているものとする。また、「エンド（つまり、終了対象イベント）」のイベントコードとして、「システムリセット発行（つまり、ＰＬＣ１０のリセット）」とのイベントを示す「０Ｘ２１」が予め設定されているものとする。さらに、ＰＬＣ１０において、電断シーケンスの「開始（つまり、ユニット電源断の発生）」から「完了（つまり、システムリセット発行）」までの期間は、数百ｍｓとなるよう設計されているものとする。これに合わせて、ＰＬＣ１０において、「ユニット電源断の発生」から「システムリセット発行」までの「設定値（つまり、最大期間Ｔｍａｘ）」として、「１ｓ」が設定されているものとする。
【０１４４】
停止部１８０によってイベントログの上書き保存が禁止されるまで、格納部１５０は、イベント生成部１１０において順次発生するイベントの各々についてのイベントログを、イベントログテーブル１６１に上書き保存していく。
【０１４５】
判定部１７０は、取得部１４０から通知されたイベントコードが「０Ｘ２０」だと計測用カウンタのカウントアップを開始し、その後、「０Ｘ２１」のイベントコードを通知されるまで、計測用カウンタのカウントアップを継続する。判定部１７０は、取得部１４０から通知されたイベントコードが「０Ｘ２１」だと計測用カウンタのカウントアップを停止する。
【０１４６】
そして、計測用カウンタのカウント（値）が、「１ｓ」以上であることを検知すると、判定部１７０は、「所定の条件を満たすイベントが発生した」と判定し、この判定結果を、停止部１８０に通知する。停止部１８０は、判定部１７０から「所定の条件を満たすイベントが発生した」との判定結果を通知されると、格納部１５０によるイベントログの上書き保存を禁止する。つまり、ＦＰＧＡ１０１は、「ユニット電源断の発生」から１ｓ以上経過した後に「システムリセット発行」が発生すると、この「システムリセット発行」よりも後に発生するイベントについて、イベントログの上書き保存を行なわない。
【０１４７】
したがって、ＦＰＧＡ１０１は、この「システムリセット発行」よりも前に順次発生していたイベントのイベントログが、この「システムリセット発行」よりも後に発生するイベントのイベントログによって上書きされて削除されるのを防ぐことができる。特に、ＦＰＧＡ１０１は、「ユニット電源断の発生」から「システムリセット発行」までの間に発生するイベントのイベントログが、「システムリセット発行」よりも後に発生するイベントのイベントログによって上書きされて削除されるのを防ぐことができる。イベントログテーブル１６１には、この「システムリセット発行」よりも前に順次発生していたイベントのイベントログが、特に、「ユニット電源断の発生」から「システムリセット発行」までの間に発生するイベントのイベントログが、格納されている。
【０１４８】
ここで、前述の通り、ＰＬＣ１０は、「ユニット電源断の発生」から「電断シーケンスの完了」までの期間が数百ｍｓとなるよう設計されている。そのため、「電断シーケンス」の開始を示す「ユニット電源断の発生」から１ｓ以上経過して、「電断シーケンス」の完了を示す「システムリセット発行」が発生した場合、電断シーケンスの途中で何らかの異常が発生したものと考えられる。
【０１４９】
ユーザは、イベントログテーブル１６１に保存されている、この「システムリセット発行」よりも前に順次発生していたイベントのイベントログを解析して、電断シーケンスの完了が遅延した原因および経緯を把握することができる。
【０１５０】
（処理例３−予め設定しておいた２つのイベントの発生時間間隔が、予め設定された最小期間以下である）
図６は、予め設定しておいた２つのイベントの発生時間間隔が、予め設定された最小期間Ｔｍｉｎ以下である場合に、ＣＰＵユニット１００（特に、ＦＰＧＡ１０１）が実行する処理の一例を示すフロー図である。図６におけるＳ５１０からＳ５４０までの処理は、図４におけるＳ３１０からＳ３４０までの処理と同様である。
【０１５１】
すなわち、ＦＰＧＡ１０１のコンフィグが終了すると、計時部１３０は、１クロック毎に繰り返し８ｎｓ分カウントアップし（Ｓ５１０）、カウントアップした値を、取得部１４０に通知する。コード生成部１２０は、イベント生成部１１０におけるイベント発生まで待機しておき（Ｓ５２０）、イベント生成部１１０においてイベントが発生すると、イベント生成部１１０において発生したイベントをイベントコードに変換する（Ｓ５３０）。そして、コード生成部１２０は、変換した（つまり、生成した）イベントコードを、取得部１４０に通知する。取得部１４０は、コード生成部１２０からイベントコードを取得すると、取得したイベントコードを、計時部１３０から取得した時刻情報と組み合わせて、格納部１５０および判定部１７０に通知する。格納部１５０は、停止部１８０によってイベントログの上書き保存が停止されているかを判定し、つまり、イベントログの上書き保存を停止するようにとの指示を停止部１８０から受けていないかを確認する（Ｓ５４０）。
【０１５２】
イベントログの上書き保存が禁止されている場合（Ｓ５４０でＹｅｓ）、格納部１５０は、取得部１４０から通知されたイベントコードと時刻情報とをイベントログテーブル１６１に上書き保存することは行わない。次のイベントが発生すると再びＳ５２０の処理が実行される。
【０１５３】
イベントログの上書き保存が禁止されていない場合（Ｓ５４０でＮｏ）、判定部１７０は、「取得部１４０から通知されたイベントコードが、『スタート（つまり、開始対象イベント）』として予め設定されたイベントコードであるか」を判定する（Ｓ５５０）。判定部１７０は、「取得部１４０から通知されたイベントコードが、『スタート』として予め設定されたイベントコードである」と判定すると（Ｓ５５０でＹｅｓ）、計測用カウンタのカウントアップを開始して（Ｓ５６０）、次にＳ５７０の処理の処理が実行される。また、判定部１７０は、「取得部１４０から通知されたイベントコードが、『スタート』として予め設定されたイベントコードではない」と判定すると（Ｓ５５０でＮｏ）、何も処理を実行せずに、次にＳ５７０の処理の処理が実行される。
【０１５４】
判定部１７０は、「取得部１４０から通知されたイベントコードが、『エンド（つまり、終了対象イベント）』として予め設定されたイベントコードであるか」を判定する（Ｓ５７０）。判定部１７０は、「取得部１４０から通知されたイベントコードが、『エンド』として予め設定されたイベントコードである」と判定すると（Ｓ５７０でＹｅｓ）、計測用カウンタのカウントアップを停止して（Ｓ５８０）、次にＳ５９０の処理の処理が実行される。また、判定部１７０は、「取得部１４０から通知されたイベントコードが、『エンド』として予め設定されたイベントコードではない」と判定すると（Ｓ５７０でＮｏ）、何も処理を実行せずに、次にＳ５９０の処理の処理が実行される。
【０１５５】
格納部１５０は、取得部１４０から通知されたイベントコードと時刻情報とを、イベントログとして、内部ＲＡＭ１６０のイベントログテーブル１６１に上書き保存する（Ｓ５９０）。Ｓ５９０におけるイベントログの上書き保存後、判定部１７０は、「計測用カウンタが設定値（つまり、最小期間Ｔｍｉｎ）以下であるか」を判定する（Ｓ６００）。
【０１５６】
判定部１７０は、「計測用カウンタが最小期間Ｔｍｉｎ以下である」と判定すると（Ｓ６００でＹｅｓ）、この判定結果を停止部１８０に通知する。停止部１８０は、判定部１７０から「計測用カウンタが最小期間Ｔｍｉｎ以下である」との判定結果を通知されると、格納部１５０によるイベントログの上書き保存を禁止する。格納部１５０は、停止部１８０からの禁止指示（つまり、停止指示）を受け付けると、イベントログのイベントログテーブル１６１への上書き保存を停止する（Ｓ６１０）。判定部１７０が「計測用カウンタが最小期間Ｔｍｉｎより大きい」と判定すると（Ｓ６００でＮｏ）、格納部１５０によるイベントログの上書き保存は停止されず、Ｓ５２０の処理へと戻る。
【０１５７】
（具体例）
例えば、制御システム１は、ＥｔｈｅｒＣＡＴ規格に従うフィールドネットワーク２０を採用しているものとする。ここで、ＥｔｈｅｒＣＡＴ規格に従うフィールドネットワーク２０を採用した場合、フィールドネットワーク２０を介したデータの送信から受信までの時間は、通常、数十μｓである。
【０１５８】
また、時刻情報の各々は５６ｂｉｔであり、イベントコードの各々は８ｂｉｔであって、イベントログの各々は「５６＋８＝６４」ｂｉｔのデータであるとする。「スタート（つまり、開始対象イベント）」のイベントコードとして、「ＥＣＡＴ送信」とのイベントを示す「０Ｘ１０」が予め設定されているものとする。また、「エンド（つまり、終了対象イベント）」のイベントコードとして、「ＥＣＡＴ受信」とのイベントを示す「０Ｘ１１」が予め設定されているものとする。さらに、ＰＬＣ１０において、「ＥＣＡＴ送信」から「ＥＣＡＴ受信」までの「設定値（つまり、最小期間Ｔｍｉｎ）」として、「１μｓ」が設定されているものとする。
【０１５９】
停止部１８０によってイベントログの上書き保存が禁止されるまで、格納部１５０は、イベント生成部１１０において順次発生するイベントの各々についてのイベントログを、イベントログテーブル１６１に上書き保存していく。
【０１６０】
判定部１７０は、取得部１４０から通知されたイベントコードが「０Ｘ１０」だと計測用カウンタのカウントアップを開始し、その後、「０Ｘ１１」のイベントコードを通知されるまで、計測用カウンタのカウントアップを継続する。判定部１７０は、取得部１４０から通知されたイベントコードが「０Ｘ１１」だと計測用カウンタのカウントアップを停止する。
【０１６１】
そして、計測用カウンタのカウント（値）が、「１μｓ」以下であることを検知すると、判定部１７０は、「所定の条件を満たすイベントが発生した」と判定し、この判定結果を、停止部１８０に通知する。停止部１８０は、判定部１７０から「所定の条件を満たすイベントが発生した」との判定結果を通知されると、格納部１５０によるイベントログの上書き保存を禁止する。つまり、ＦＰＧＡ１０１は、「ＥＣＡＴ送信」から１μｓ以下の時間間隔で「ＥＣＡＴ受信」が発生すると、この「ＥＣＡＴ受信」よりも後に発生するイベントについて、イベントログの上書き保存を行なわない。
【０１６２】
したがって、ＦＰＧＡ１０１は、この「ＥＣＡＴ受信」よりも前に順次発生していたイベントのイベントログが、この「ＥＣＡＴ受信」よりも後に発生するイベントのイベントログによって上書きされて削除されるのを防ぐことができる。特に、ＦＰＧＡ１０１は、「ＥＣＡＴ送信」から「ＥＣＡＴ受信」までの間に発生するイベントのイベントログが、「ＥＣＡＴ受信」よりも後に発生するイベントのイベントログによって上書きされて削除されるのを防ぐことができる。イベントログテーブル１６１には、この「ＥＣＡＴ受信」よりも前に順次発生していたイベントのイベントログが、特に、「ＥＣＡＴ送信」から「ＥＣＡＴ受信」までの間に発生するイベントのイベントログが、格納されている。
【０１６３】
ここで、前述の通り、ＰＬＣ１０は、「ＥＣＡＴ送信」から「ＥＣＡＴ受信」までの期間が数十μｓとなるよう設計されている。そのため、「ＥＣＡＴ送信」から１μｓ以下の時間間隔で「ＥＣＡＴ受信」が発生した場合、フィールドネットワーク２０を介したデータの送受信に何らかの異常が発生したものと考えられる。
【０１６４】
ユーザは、イベントログテーブル１６１に保存されている、この「ＥＣＡＴ受信」よりも前に順次発生していたイベントのイベントログを解析して、フィールドネットワーク２０における想定外の送受信などの異常について、原因および経緯を把握することができる。
【０１６５】
図５および図６を用いて説明してきた通り、判定部１７０は、２つの特定のイベント間の時間間隔が設定値（最大期間Ｔｍａｘ）以上となったことを検知すると、「所定の条件を満たすイベントが発生した」と判定する。また、判定部１７０は、２つの特定のイベント間の時間間隔が設定値（最小期間Ｔｍｉｎ）以下となったことを検知すると、「所定の条件を満たすイベントが発生した」と判定する。判定部１７０によって「所定の条件を満たすイベントが発生した」と判定されると、停止部１８０は、格納部１５０によるイベントログの上書き保存を禁止する。
【０１６６】
したがって、イベントログテーブル１６１に保存された「特定のイベントが発生するに至った経緯を示すイベントログ」は、「特定のイベントよりも後に発生するイベントのイベントログ」に上書きされて失われることがない。ユーザは、イベントログテーブル１６１に保存された「特定のイベントが発生するに至った経緯を示すイベントログ」を解析して、特定のイベントが発生するに至った経緯を、時系列に追うことができる。
【０１６７】
（イベントログの出力等に係る処理）
例えば、マイクロプロセッサ１０３は、チップセット１０２を介して、ＦＰＧＡ１０１の読出部１９０に、イベントログテーブル１６１に格納されているイベントログを読み出すよう指示し、つまり、読み出し命令/読み出しアドレスの指示を入力する。この指示を受け付けた読出部１９０は、イベントログテーブル１６１に格納されているイベントログ（イベントコード、および、そのイベントコードに対応するイベントの発生時刻）を読み出し、チップセット１０２を介して、マイクロプロセッサ１０３に出力する。マイクロプロセッサ１０３は、ＣＰＵユニット１００に接続されている解析用デバイス５０へ、読出部１９０が読み出したイベントログを出力する。解析用デバイス５０は、ＣＰＵユニット１００からイベントログを受信すると、受信したイベントログを、ユーザに表示する。
【０１６８】
§４．変形例
これまで、イベント生成部１１０、コード生成部１２０、計時部１３０、取得部１４０、格納部１５０、内部ＲＡＭ１６０、判定部１７０、停止部１８０、および読出部１９０が、ＦＰＧＡ（Field-Programmable gate array）を用いて実現される例を説明してきた。しかしながら、これらの機能ブロックがＦＰＧＡを用いて実現されることは必須ではなく、例えば、ＡＳＩＣ（Application Specific Integrated Circuit）を用いて実現されてもよい。つまり、イベント生成部１１０、コード生成部１２０、計時部１３０、取得部１４０、格納部１５０、内部ＲＡＭ１６０、判定部１７０、停止部１８０、および読出部１９０は、ＡＳＩＣを用いて実現されてもよい。
【０１６９】
これまで、格納部１５０が内部ＲＡＭ１６０のイベントログテーブル１６１にイベントログを上書き保存する例を説明してきたが、イベントログの格納先が内部ＲＡＭ１６０であることは必須ではない。格納部１５０は、イベントコードと現在時刻とを含むイベントログをＦＰＧＡ１０１の外部に出力してもよく、例えば、所望の広帯域性を満たすＦＰＧＡ１０１の外部のメモリに、イベントログを上書き保存してもよい。
【０１７０】
イベント生成部１１０、コード生成部１２０、計時部１３０、取得部１４０、格納部１５０、判定部１７０、停止部１８０、および読出部１９０は、ＡＳＩＣを用いて実現した場合、格納部１５０は、ＡＳＩＣの外部のメモリに、イベントログを保存してもよい。
【０１７１】
格納部１５０は、イベントコードと現在時刻とを含むイベントログを、ＦＰＧＡ１０１（または、格納部１５０を実現するＡＳＩＣ）の外部に出力し、外部の別ＦＰＧＡまたは別ＡＳＩＣが、外部のメモリに、出力されたイベントログを上書き保存してもよい。
【０１７２】
ＦＰＧＡ１０１が計時部１３０を備えることは必須ではなく、取得部１４０は、ＦＰＧＡ１０１の外部から時刻情報を取得してもよい。また、取得部１４０は、現在時刻（内部時刻）を示す時刻情報を取得する代わりに、各イベントの発生順序を示す情報（例えば、カウンタ）を取得してもよい。
【０１７３】
本発明は上述した各実施形態に限定されるものではなく、請求項に示した範囲で種々の変更が可能であり、異なる実施形態にそれぞれ開示された技術的手段を適宜組み合わせて得られる実施形態についても本発明の技術的範囲に含まれる。
【符号の説明】
【０１７４】
１０  ＰＬＣ（制御装置）
１０１  ＦＰＧＡ
１４０  取得部
１５０  格納部
１６０  内部ＲＡＭ（記憶部、内部ＲＡＭ）
１７０  判定部
１８０  停止部
１９０  読出部（出力部）
Ｔｍａｘ  最大期間
Ｔｍｉｎ  最小期間
Ｓ１１０  取得ステップ
Ｓ１４０  格納ステップ
Ｓ１６０  停止ステップ
【図１】
2019207475.tif 000003
【図２】
2019207475.tif 000004
【図３】
2019207475.tif 000005
【図４】
2019207475.tif 000006
【図５】
2019207475.tif 000007
【図６】
2019207475.tif 000008