特開2019-207475(P2019-207475A)IP Force 特許公報掲載プロジェクト 2015.5.11 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ オムロン株式会社の特許一覧
<>
  • 特開2019207475-制御装置およびその制御方法 図000003
  • 特開2019207475-制御装置およびその制御方法 図000004
  • 特開2019207475-制御装置およびその制御方法 図000005
  • 特開2019207475-制御装置およびその制御方法 図000006
  • 特開2019207475-制御装置およびその制御方法 図000007
  • 特開2019207475-制御装置およびその制御方法 図000008
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】特開2019-207475(P2019-207475A)
(43)【公開日】2019年12月5日
(54)【発明の名称】制御装置およびその制御方法
(51)【国際特許分類】
   G05B 19/05 20060101AFI20191108BHJP
【FI】
   G05B19/05 D
【審査請求】未請求
【請求項の数】5
【出願形態】OL
【全頁数】30
(21)【出願番号】特願2018-101551(P2018-101551)
(22)【出願日】2018年5月28日
(71)【出願人】
【識別番号】000002945
【氏名又は名称】オムロン株式会社
(74)【代理人】
【識別番号】100155712
【弁理士】
【氏名又は名称】村上 尚
(72)【発明者】
【氏名】中谷 好博
【テーマコード(参考)】
5H220
【Fターム(参考)】
5H220AA10
5H220BB15
5H220CC07
5H220CX01
5H220CX04
5H220FF03
5H220JJ12
5H220JJ16
5H220JJ22
5H220JJ26
5H220MM07
(57)【要約】      (修正有)
【課題】イベント発生までの経緯が分かるようにイベントログを保存する。
【解決手段】自装置において発生したイベントについての情報であるイベント情報を取得する取得部と、前記イベントの発生順序を示す情報と共に、前記取得部によって取得された前記イベント情報を、イベントログとして記憶部に上書き保存する格納部と、所定の条件を満たすイベントが発生すると、当該所定の条件を満たすイベントよりも後に発生するイベントについての、前記格納部による前記イベントログの上書き保存を停止させる停止部と、を備えることを特徴とする制御装置。
【選択図】図1
【特許請求の範囲】
【請求項1】
自装置において発生したイベントについての情報であるイベント情報を取得する取得部と、
前記イベントの発生順序を示す情報と共に、前記取得部によって取得された前記イベント情報を、イベントログとして記憶部に上書き保存する格納部と、
所定の条件を満たすイベントが発生すると、当該所定の条件を満たすイベントよりも後に発生するイベントについての、前記格納部による前記イベントログの上書き保存を停止させる停止部と、を備えることを特徴とする制御装置。
【請求項2】
前記取得部と、前記格納部と、前記停止部とは、FPGA(Field-programmable gate array)を用いて実現され、
前記記憶部は、前記FPGA内に設けられた内部RAM(Random Access Memory)である
ことを特徴とする請求項1に記載の制御装置。
【請求項3】
(1)対象イベントとして予め設定しておいたイベントの少なくとも1つが発生したこと、(2)開始対象イベントとして予め設定しておいたイベントの発生から、予め設定された最大期間が経過するまでに、終了対象イベントとして予め設定しておいたイベントが発生しないこと、および、(3)開始対象イベントとして予め設定しておいたイベントの発生から、予め設定された最小期間が経過する前に、終了対象イベントとして予め設定しておいたイベントが発生したこと、の少なくとも1つを検知すると、前記所定の条件を満たすイベントが発生したと判定する判定部をさらに備え、
前記停止部は、前記判定部により前記所定の条件を満たすイベントが発生したと判定されると、前記判定部により前記所定の条件を満たすイベントが発生したと判定された後に発生するイベントについての、前記格納部による前記イベントログの上書き保存を停止させる
ことを特徴とする請求項1または2に記載の制御装置。
【請求項4】
前記発生順序を示す情報と共に前記記憶部に保存されている前記イベント情報を、自装置の外部に出力する出力部をさらに備える
ことを特徴とする請求項1から3のいずれか1項に記載の制御装置。
【請求項5】
制御装置において発生したイベントについての情報であるイベント情報を取得する取得ステップと、
前記イベントの発生順序を示す情報と共に、前記取得ステップにおいて取得された前記イベント情報を、イベントログとして記憶部に上書き保存する格納ステップと、
所定の条件を満たすイベントが発生すると、当該所定の条件を満たすイベントよりも後に発生するイベントについての、前記格納ステップにおける前記イベントログの上書き保存を停止させる停止ステップと、を含むことを特徴とする前記制御装置の制御方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、プログラマブルコントローラ(Programmable Logic Controller;以下、PLCとも称す)などの制御装置等に関する。
【背景技術】
【0002】
従来、外部機器に接続される装置が、自装置において発生する種々のイベントについて、各イベントの発生順序が分かるようにして各イベントのログを記録しておく構成が知られている。例えば、下掲の特許文献1には、自端末において発生したイベントとその発生時を示す内部時間とを記録したイベントログを生成、記憶し、外部からの指示に従って出力する無線通信端末が開示されている。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開2009−81764号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
しかしながら、上述のような従来技術には、PLCなどの制御装置において、或るイベント、および、その或るイベントよりも前に発生したイベントのログが、その或るイベントよりも後に発生したイベントのログの上書き保存によって失われるという問題がある。例えば、或るイベントの発生原因、発生経緯、および発生に見られる傾向などを分析しようとする場合、その或るイベントよりも前に発生したイベントを把握するのが有効である。しかしながら、上述のような従来技術は、或るイベントよりも前に発生したイベントのログが、その或るイベントよりも後に発生したイベントのログの上書き保存によって失われ、その或るイベントについての分析が困難になるという事態が発生し得る。
【0005】
本開示の一態様は、前記課題を解決するためになされたものであり、その目的は、PLCなどの制御装置において発生する種々のイベントについて、発生までの経緯を把握することができるように、イベントログを保存する制御装置等を実現することにある。
【課題を解決するための手段】
【0006】
前記の課題を解決するために、本開示の一態様に係る制御装置は、自装置において発生したイベントについての情報であるイベント情報を取得する取得部と、前記イベントの発生順序を示す情報と共に、前記取得部によって取得された前記イベント情報を、イベントログとして記憶部に上書き保存する格納部と、所定の条件を満たすイベントが発生すると、当該所定の条件を満たすイベントよりも後に発生するイベントについての、前記格納部による前記イベントログの上書き保存を停止させる停止部と、を備えることを特徴としている。
【0007】
前記の構成によれば、前記制御装置は、自装置において発生したイベントについての情報であるイベント情報を、前記イベントの発生順序を示す情報と共に、イベントログとして記憶部に上書き保存する。ここで、前記イベントログを前記記憶部に格納していく際、前記記憶部の記憶容量の上限に達した場合、前記制御装置は、例えば、前記記憶部から古いイベントログを順に削除し、新しいイベントログを前記記憶部に格納していく。つまり、前記制御装置は、古いイベントログに対して順次新しいイベントログを上書き保存していく(言い換えれば、古いイベントログから順に、新しいイベントログで上書きする)。そして、前記制御装置は、所定の条件を満たすイベントが発生すると、当該所定の条件を満たすイベントよりも後に発生するイベントについてのイベントログの上書き保存を停止する。
【0008】
したがって、前記制御装置は、前記所定の条件を満たすイベントより前に発生したイベントのイベントログが、前記所定の条件を満たすイベントより後に発生するイベントのイベントログに上書きされて失われるという事態を防ぐことができる。つまり、前記制御装置は、前記所定の条件を満たすイベントについて、前記所定の条件を満たすイベントが発生するまでの経緯を把握することができるように、前記イベントログを保存することができるという効果を奏する。
【0009】
本発明の一態様に係る制御装置において、前記取得部と、前記格納部と、前記停止部とは、FPGA(Field-programmable gate array)を用いて実現され、前記記憶部は、前記FPGA内に設けられた内部RAM(Random Access Memory)であってもよい。
【0010】
前記の構成によれば、前記制御装置において、自装置において発生したイベントのイベントログの上書き保存、および、前記所定の条件を満たすイベントの発生に伴うイベントログの上書き保存の停止は、前記制御装置の備えるFPGAにより実行される。また、前記制御装置において、前記FPGAは、前記FPGA内に設けられた内部RAMに、前記イベントログを上書き保存する。
【0011】
ここで、前記FPGAは、例えば、外部機器等へのデータ送信および外部機器等からのデータ受信などの通信処理を含む種々の処理を実行し、実行した処理についての情報を、実行した処理の実行順序と共に、前記イベントログとして、内部RAMに保存する。したがって、前記FPGAは、前記FPGAに対する指示がなされた順序ではなく、前記FPGA内で実際にイベントが発生した順序を、イベントログとして保存することができるという効果を奏する。
【0012】
また、前記FPGAは種々の処理を次々と実行するため、前記FPGAが、前記FPGAの内部で発生したイベントについてのイベントログを保存するためには、広帯域のメモリが必要となる。前記FPGAは、前記内部RAMに前記イベントログを保存することにより、所望の広帯域性を備えた格納先に、前記イベントログ保存することができるという効果を奏する。
【0013】
さらに、前記FPGAは、前記内部RAMに前記イベントログを上書き保存し、つまり、前記イベントログのデータ量が前記内部RAMの記憶容量の上限に達した場合には、古いイベントログから順に削除していく。したがって、前記FPGAは、前記イベントログの保存に必要な広帯域性を確保しつつ、前記イベントログの格納先の記憶容量を抑制することができるという効果を奏する。
【0014】
前記FPGAは、前記所定の条件を満たすイベントが発生したと判定すると、前記所定の条件を満たすイベントよりも後に発生するイベントについてのイベントログの上書き保存を停止する。したがって、前記FPGAは、前記所定の条件を満たすイベントの発生経緯を示すイベントログを保存し、さらに、前記発生経緯を示すイベントログが、前記所定の条件を満たすイベントより後に発生するイベントのイベントログに上書きされて失われるのを回避することができるという効果を奏する。
【0015】
本発明の一態様に係る制御装置は、(1)対象イベントとして予め設定しておいたイベントの少なくとも1つが発生したこと、(2)開始対象イベントとして予め設定しておいたイベントの発生から、予め設定された最大期間が経過するまでに、終了対象イベントとして予め設定しておいたイベントが発生しないこと、および、(3)開始対象イベントとして予め設定しておいたイベントの発生から、予め設定された最小期間が経過する前に、終了対象イベントとして予め設定しておいたイベントが発生したこと、の少なくとも1つを検知すると、前記所定の条件を満たすイベントが発生したと判定する判定部をさらに備え、前記停止部は、前記判定部により前記所定の条件を満たすイベントが発生したと判定されると、前記判定部により前記所定の条件を満たすイベントが発生したと判定された後に発生するイベントについての、前記格納部による前記イベントログの上書き保存を停止させてもよい。
【0016】
前記の構成によれば、前記制御装置は、(1)対象イベントとして予め設定しておいたイベントの少なくとも1つが発生したことを検知すると、発生を検知した前記対象イベントよりも後に発生するイベントについての、前記イベントログの上書き保存を停止する。したがって、前記制御装置は、前記対象イベントより前に発生したイベントのイベントログが、前記対象イベントより後に発生するイベントのイベントログに上書きされて失われるという事態を防ぐことができる。つまり、前記制御装置は、前記対象イベントについて、前記対象イベントが発生するまでの経緯を把握することができるように、前記イベントログを保存することができるという効果を奏する。
【0017】
また、前記制御装置は、(2)開始対象イベントとして予め設定しておいたイベントの発生から、予め設定された最大期間が経過するまでに、終了対象イベントとして予め設定しておいたイベントが発生しないことを検知すると、検知後に発生するイベントについての、前記イベントログの上書き保存を停止する。
【0018】
例えば、前記制御装置は、前記開始対象イベントの発生から、前記最大期間が経過するまでに、前記終了対象イベントが発生しないことを検知すると、前記最大期間の経過後に発生するイベントについての、前記イベントログの上書き保存を停止する。
【0019】
したがって、前記制御装置は、前記最大期間の経過時点までに発生したイベントのイベントログが、前記最大期間の経過時点後に発生したイベントのイベントログに上書きされて失われるという事態を防ぐことができる。つまり、前記制御装置は、前記開始対象イベントの発生から前記最大期間の経過までに発生すべき前記終了対象イベントが発生しなかった経緯を把握することができるように、前記イベントログを保存することができるという効果を奏する。
【0020】
また、前記制御装置は、前記開始対象イベントが発生してから前記終了対象イベントが発生するまでの時間間隔が前記最大期間以上であることを検知すると、前記終了対象イベントよりも後に発生するイベントについてのイベントログの上書き保存を停止してもよい。
【0021】
したがって、前記制御装置は、前記終了対象イベントより前に発生したイベントのイベントログが、前記終了対象イベントより後に発生するイベントのイベントログに上書きされて失われるという事態を防ぐことができる。つまり、前記制御装置は、前記終了対象イベントについて、前記終了対象イベントが発生するまでの経緯を把握することができるように、前記イベントログを保存することができるという効果を奏する。
【0022】
さらに、前記制御装置は、(3)開始対象イベントとして予め設定しておいたイベントの発生から、予め設定された最小期間が経過する前に、終了対象イベントとして予め設定しておいたイベントが発生したことを検知すると、検知後に発生するイベントについての、前記イベントログの上書き保存を停止する。
【0023】
例えば、前記制御装置は、前記開始対象イベントの発生から、前記最小期間が経過する前に、前記終了対象イベントが発生したことを検知すると、前記終了対象イベントよりも後に発生するイベントについての、前記イベントログの上書き保存を停止する。
【0024】
したがって、前記制御装置は、前記終了対象イベントより前に発生したイベントのイベントログが、前記終了対象イベントより後に発生するイベントのイベントログに上書きされて失われるという事態を防ぐことができる。つまり、前記制御装置は、前記開始対象イベントの発生から前記最小期間の経過後に発生すべき前記終了対象イベントが、前記最小期間の経過前に発生した経緯を把握することができるように、前記イベントログを保存することができるという効果を奏する。言い換えれば、前記制御装置は、前記終了対象イベントについて、前記終了対象イベントが発生するまでの経緯を把握することができるように、前記イベントログを保存することができるという効果を奏する。
【0025】
本発明の一態様に係る制御装置は、前記発生順序を示す情報と共に前記記憶部に保存されている前記イベント情報を、自装置の外部に出力する出力部をさらに備えてもよい。
【0026】
前記の構成によれば、前記制御装置は、前記発生順序を示す情報と共に前記記憶部に保存されている前記イベント情報を、つまり、前記イベントログを、自装置の外部に出力する。そして、前記制御装置から前記イベントログを取得した外部装置は、例えば、前記所定の条件を満たすイベントの発生経緯を示すイベントログを表示する。つまり、前記外部装置は、前記制御装置において発生した前記イベントを発生順序と共に可視化し、つまり、前記イベントが発生するまでの前記制御装置の状態(内部状態)の推移を、ユーザに示す。したがって、前記制御装置は、前記所定の条件を満たすイベントの発生経緯を示すイベントログを、外部装置等において解析可能なように出力することができるという効果を奏する。
【0027】
前記の課題を解決するために、本開示の一態様に係る制御方法は、制御装置において発生したイベントについての情報であるイベント情報を取得する取得ステップと、前記イベントの発生順序を示す情報と共に、前記取得ステップにおいて取得された前記イベント情報を、イベントログとして記憶部に上書き保存する格納ステップと、所定の条件を満たすイベントが発生すると、当該所定の条件を満たすイベントよりも後に発生するイベントについての、前記格納ステップにおける前記イベントログの上書き保存を停止させる停止ステップと、を含むことを特徴としている。
【0028】
前記の方法によれば、前記制御方法は、制御装置において発生したイベントについての情報であるイベント情報を、前記イベントの発生順序を示す情報と共に、イベントログとして記憶部に上書き保存する。ここで、前記イベントログを前記記憶部に格納していく際、前記記憶部の記憶容量の上限に達した場合、前記制御方法は、例えば、前記記憶部から古いイベントログを順に削除し、新しいイベントログを前記記憶部に格納していく。つまり、前記制御方法は、古いイベントログに対して順次新しいイベントログを上書き保存していく(言い換えれば、古いイベントログから順に、新しいイベントログで上書きする)。そして、前記制御方法は、制御装置において所定の条件を満たすイベントが発生すると、当該所定の条件を満たすイベントよりも後に発生するイベントについてのイベントログの上書き保存を停止する。
【0029】
したがって、前記制御方法は、前記所定の条件を満たすイベントより前に発生したイベントのイベントログが、前記所定の条件を満たすイベントより後に発生するイベントのイベントログに上書きされて失われるという事態を防ぐことができる。つまり、前記制御方法は、前記制御装置において発生した前記所定の条件を満たすイベントについて、前記所定の条件を満たすイベントが発生するまでの経緯を把握することができるように、前記イベントログを保存することができるという効果を奏する。
【発明の効果】
【0030】
本開示の一態様によれば、PLCなどの制御装置において発生する種々のイベントについて、発生までの経緯を把握することができるように、イベントログを保存することができるという効果を奏する。
【図面の簡単な説明】
【0031】
図1】本発明の一実施形態に係るPLCのCPUユニットの構成例を示す図である。
図2】本発明の一実施形態に係るPLCを含む制御システムの概要を示す図である。
図3図1のCPUユニットが実行するイベントログの上書き保存処理および上書き保存停止処理の概要を示すフロー図である。
図4図1のCPUユニットが所定のイベントの発生を検知した場合に実行する処理の一例を示すフロー図である。
図5】所定の2つのイベントの発生時間間隔が最大期間以上である場合に図1のCPUユニットが実行する処理の一例を示すフロー図である。
図6】所定の2つのイベントの発生時間間隔が最小期間以下である場合に図1のCPUユニットが実行する処理の一例を示すフロー図である。
【発明を実施するための形態】
【0032】
〔実施形態1〕
以下、本発明の一側面に係る実施の形態(以下、「本実施形態」とも表記する)を、図面に基づいて説明し、先ず、本発明の実施形態1について、図1から図6に基づいて詳細に説明する。なお、図中同一または相当部分には同一符号を付してその説明は繰返さない。本実施の形態においては、機械および設備等の制御対象を制御するPLC(プログラマブル・ロジック・コントローラ、Programmable Logic Controller)10を、特に、PLC10のCPUユニット100を、制御装置の典型例として説明を行う。なお、「CPU」は「Central Processing Unit」の略である。また、以下の説明においては、記載を簡略にするため、「秒」を「s(second)」と略記することがある。
【0033】
§1.適用例
本発明の一態様に係るPLC10についての理解を容易にするため、先ず、本発明が適用される場面の一例について、具体的には、PLC10を含む制御システム1の概要について、図2を用いて説明する。
【0034】
図2は、制御システム1の全体概要を示す図である。図1に例示する制御システム1において、生産設備内の入力機器および出力機器の制御を司る、1つ以上のPLC10と、PLC10により動作が制御される機器とは、フィールドネットワーク20等の制御系のネットワークに接続されている。PLC10と機器とは、フィールドネットワーク20を介してサイクリックに通信を行なうことで、INデータおよびOUTデータ(以下、「IOデータ」という)の送受信を行ない、生産設備を制御する。
【0035】
PLC10は、制御システム1において、機械および設備などの制御対象を制御する制御装置であり、制御システム1における、フィールドネットワーク20を介したデータ伝送を管理するマスタ装置である。PLC10は、例えばユーザプログラムとも称される制御プログラムを実行して、制御システム1全体の動作を統括的に制御する。PLC10は、主たる演算処理を実行するCPUユニット100と、電源ユニット200と、1つ以上のIO(Input/ Output)ユニット(図2の例では、IOユニット301〜303)と、特殊ユニット304と、を含む。IOユニット301〜303、および、特殊ユニット304は、機能ユニットと呼ばれることもある。CPUユニット100と、IOユニット301〜303の各々と、特殊ユニット304とは、PLCシステムバス400を介して、互いにデータを遣り取りできるように構成される。
【0036】
CPUユニット100は、制御対象の状態等に係る種々の処理を実行し、例えば、「出力データの送信と、入力データの受信と、入力データを使用して出力データを生成する制御プログラムの実行とを繰り返すことによって制御対象を制御する」処理を実行する。CPUユニット100の詳細については、図1を参照して後述する。
【0037】
電源ユニット200は、CPUユニット100、IOユニット301〜303、および、特殊ユニット304に、適切な電圧の電源を供給する。
【0038】
IOユニット301〜303は、各々、一般的な入出力処理に関するユニットであり、オン/オフといったデータ(つまり、2値化されたデータ)の入出力を司る。具体的には、IOユニット301〜303の各々は、センサなどの入力機器であるデバイス31が何らかの対象物を検出している状態(オン)、および、何らの対象物も検出していない状態(オフ)のいずれであるかという情報を収集する。また、IOユニット301〜303の各々は、リレー、アクチュエータといった出力機器であるデバイス32に対して、活性化するための指令(オン)、および、不活性化するための指令(オフ)のいずれかを出力する。
【0039】
特殊ユニット304は、IOユニット301〜303が処理するデータとは異なるデータ(例えば、アナログデータ)の入出力、温度制御、特定の通信方式による通信といった、IOユニット301〜303ではサポートしない機能を有する。
【0040】
フィールドネットワーク20は、CPUユニット100とフィールド機器(サーボドライバ33、サーボドライバ34、および、リモートIOターミナル35等)との間で遣り取りされる各種データを伝送する。フィールドネットワーク20としては、典型的には、各種の産業用イーサネット(登録商標)を用いることができる。産業用イーサネットとしては、例えば、EtherCAT(登録商標)、Profinet IRT、MECHATROLINK(登録商標)−III、Powerlink、SERCOS(登録商標)−III、CIP Motionなどが知られている。なお、フィールドネットワーク20として、産業用イーサネット以外のフィールドネットワークを用いてもよい。例えば、モーション制御を行わない場合であれば、DeviceNet、CompoNet/IP(登録商標)などを用いてもよい。
【0041】
なおPLC10は、CPUユニット100にIOユニット301〜303の各々の機能およびサーボドライバ33および34の機能を持たせることにより、そのような内蔵機能でまかなえる範囲については、CPUユニット100が直接制御対象を制御してもよい。
【0042】
サーボドライバ33および34の各々は、フィールドネットワーク20を介してCPUユニット100と接続されるとともに、CPUユニット100からの指令値に従ってサーボモータ41および42の各々を駆動する。なお、図2には、サーボモータ41および42の各々とサーボドライバ33および34の各々とを組み合わせたシステム例を示したが、その他の構成、たとえば、パルスモータとパルスモータドライバとを組み合わせたシステムを採用することもできる。
【0043】
リモートIOターミナル35は、基本的には、IOユニット301〜303と同様に、一般的な入出力処理に関する処理を行う。より具体的には、リモートIOターミナル35は、フィールドネットワーク20でのデータ伝送に係る処理を行うための通信カプラ36と、1つ以上のIOユニット(図2の例では、IOユニット37および38)とを含む。通信カプラ36と、IOユニット37および38の各々とは、リモートIOターミナルバス39を介して、データを互いに遣り取りできるように構成される。
【0044】
PLC10には、任意の通信ケーブル40によって、解析用デバイス50が接続されており、例えば、Ether IP(登録商標)により通信接続されていてもよい。制御システム1において、ユーザは、PLC10に異常等の診断すべきイベントが発生した場合に、各種データを解析用デバイス50によって解析することにより、そのイベントを分析してPLC10についての診断を実行する。例えば、PLC10は、「自装置において発生したイベント(つまり、自装置が実行した処理)を発生順序と共に示す」イベントログを解析用デバイス50に出力し、解析用デバイス50は受け付けたイベントログの解析、表示等を実行する。この診断の例としては、或るイベントの発生原因および発生経緯の特定、発生に見られる傾向の把握、発生確率の分析などが挙げられる。
【0045】
解析用デバイス50は、PLC10から、PLC10において(特に、図1を用いて説明するFPGA(Field-Programmable gate array)101において)発生したイベントのイベントログを取得し、取得したイベントログを解析して、PLC10の診断を行う。イベントログは、PLC10において発生したイベントを特定する情報(例えば、イベントコード)と、そのイベントの発生順序を示す情報(例えば、イベントの発生時刻(内部時刻)等を示す情報)と、を含む。解析用デバイス50は、通常のPC(Personal Computer)によって構成され、タッチパネル、ディスプレイなどの入出力デバイスを備える。
【0046】
(CPUユニットの概要)
これまで図2を用いてPLC10を含む制御システム1の全体概要を説明してきたが、次に、PLC10におけるCPUユニット100、特にCPUユニット100の備えるFPGA101について、その概要を説明しておく。PLC10についての理解を容易にするため、従来までの産業用コントローラについて先ず説明しておく。
【0047】
(従来までの産業用コントローラ)
PLCなどの産業用コントローラ一般において故障などの特定のイベントが発生した場合、その特定のイベントのイベントログのみでは、その特定のイベントが発生した原因、経緯等を解析することは困難である。そのため、特定のイベントが発生した時には、その特定のイベントが発生するまでの経緯を把握することができるように、その特定のイベントが発生するまでに事前に発生した、他のイベントのイベントログを保存しておくのが望ましい。つまり、特定のイベントの発生に至るまでの経緯を示すイベントログが、不具合等を示す特定のイベントの解析にとって重要である。
【0048】
しかしながら、イベントログの格納先の記憶容量が上限に達している状態で新たなイベントが発生した場合、或る特定のイベントの発生に至るまでの経緯を示すイベントログが、その新たなイベントのイベントログに上書きされ、削除されてしまうことがある。特定のイベントについて解析するためにイベントログを読み出す時点では既に、その特定のイベントの発生に至るまでの経緯を示すイベントログが削除されている可能性があり、その特定のイベントが発生するに至った原因を分析できないといった事態が想定される。
【0049】
従来の産業用コントローラは、特定のイベントが発生した時に、その特定のイベントよりも後に発生するイベントについてのイベントログの上書き保存を停止することはしない。そのため、その特定のイベントについて解析するためにイベントログを読み出す時点では既に、その特定のイベントの発生に至るまでの経緯を示すイベントログ(その特定のイベントが発生した時点までのイベントログ)は消去されてしまっていることがあった。そのため、従来の産業用コントローラのユーザは、その特定のイベントが発生するに至った経緯を、イベントログを解析することによって把握することができなかった。
【0050】
また、従来の産業用コントローラは、通信インターフェイスICとしてのFPGAの内部状態を把握する手段を備えていないため、異常発生時に原因を特定するのに時間を要した。
【0051】
(本実施形態に係るFPGA)
FPGA101は、FPGA101において発生するイベントのイベントログを保存し、具体的には、FPGA101内部でのイベント発生時刻(時刻情報)とイベント(各々の処理を特定するイベントコード)とを対応付けて、イベントログとして保存する。FPGA101は、マイクロプロセッサ103からの指示順ではなく、FPGA101内部で実際にイベントが発生した順序を、イベントログとして保存する。したがって、ユーザは、FPGA101が保存したイベントログを用いて、通信インターフェイスICとしての処理も実行するFPGA101の内部状態を把握することができ、異常などの特定のイベントの発生経緯を把握するのが容易になる。
【0052】
ここで、FPGA101の内部で発生したイベントについてのイベントログを保存するためには、広帯域のメモリが必要となり、FPGA101の内部RAM(Random Access Memory)160が好適である。例えば、複数のイベントログの各々が時刻情報とイベントコードとを含み、各々のイベントログが64bitのデータであるとする。そして、FPGA101の内部クロックが125MHzであるとし、8個まで同時にイベントログを保存するとした場合、「64bit×125MHz×8個=64Gbit/sec」の帯域が必要である。FPGA101は、イベントログの格納先に求められる広帯域性を満たすため、内部RAM160のイベントログテーブル161に、イベントログを保存する。
【0053】
FPGA101は、PLC10(特に、FPGA101)において発生したイベントを特定する情報(=イベントコード)を、例えばFree Run Counter等の計時部130によって計測した内部時刻と共に、イベントログとして、内部RAM160に上書き保存する。FPGA101は、PLC10(特に、FPGA101)において発生した種々のイベントの各々について、時系列にイベントログを取得して保存し、つまり、FPGA101内部で実際にイベントが発生した順序が分かるようにイベントログを保存する。
【0054】
ここで、PLC10(特に、FPGA101)において発生した全てのイベントログを保存しようとした場合、FPGA101は、大量のイベントログを格納するための大規模な記憶容量のイベントログ格納先を必要とする。
【0055】
ただし、FPGA101の内部RAM160の容量(記憶容量)は限界がある。そこで、FPGA101は、内部RAM160にイベントログを上書き保存し、つまり、イベントログのデータ量が記憶容量の上限に達した場合には古いイベントログから順に削除していく。これにより、FPGA101は、イベントログの保存に必要な広帯域性を確保しつつ、イベントログ格納先の記憶容量を抑制することができる。FPGA101は、内部RAM160の記憶容量を、例えば最大容量で13.59Mbitに抑制することができる。
【0056】
イベントログをイベントログ格納先に上書き保存する場合、特定のイベントの発生時点よりも前に発生したイベントに係るイベントログは、特定のイベントの発生時点よりも後に発生するイベントのイベントログに上書きされて削除されてしまう可能性がある。
【0057】
これを防ぐため、FPGA101は、所定の条件を満たすイベントが発生したと判定すると、その所定の条件を満たすイベントが発生した時点よりも後に発生するイベントについてのイベントログの上書き保存を停止する。すなわち、FPGA101は、所定の条件を満たすイベントが発生する前に発生したイベントのイベントログを保存し、さらに、このイベントログが、その所定の条件を満たすイベントより後に発生するイベントのイベントログによって上書きされ失われるのを防ぐ。これによって、ユーザは、特定のイベントが発生した時に、どのような経緯でその特定のイベントが発生したのかを把握することができ、つまり、その特定のイベントの発生に至るまでの経緯を検証することができるようになる。FPGA101は、例えば以下の3つの少なくとも1つを検知すると、「所定のイベントが発生した」と判定し、以降のイベントログの上書き保存を停止する。
【0058】
第1に、FPGA101は、「対象イベント」として予め設定しておいたイベントの少なくとも1つが発生したことを検知すると、「所定のイベントが発生した」と判定し、以降のイベントログの上書き保存を停止する。例えば、予め1つ以上のイベントが、「対象イベント」として設定されている。そして、FPGA101は、その「対象イベント」の少なくとも1つが発生したことを検知すると、発生した「対象イベント」のイベントログを上書き保存し、また、以降のイベントログの上書き保存を停止する。すなわち、FPGA101は、「対象イベント」が発生した時点よりも後に発生するイベントについてのイベントログの上書き保存を停止し、その「対象イベント」の発生経緯を示すイベントログが消えるのを回避する。これより、ユーザは、その「対象イベント」が発生するに至るまでの経緯を示すイベントログを確実に取得することができ、例えば、異常などの「対象イベント」の原因を特定するまでに要する時間を短縮することができる。
【0059】
第2に、FPGA101は、開始対象イベントとして予め設定しておいたイベントの発生から、予め設定された最大期間Tmaxが経過するまでに、終了対象イベントとして予め設定しておいたイベントが発生しないことを検知すると、以降のイベントログの上書き保存を停止する。FPGA101は、2つの特定のイベント間の発生時間間隔が最大期間Tmax以上であることを検知すると、以降のイベントログの上書き保存を停止してもよい。
【0060】
例えば、第1イベントおよび第2イベントが、各々、「開始対象イベント」および「終了対象イベント」として予め設定されている。また、第1イベントと第2イベントとの発生時刻の時間間隔の許容最大値(最大期間Tmax)が予め設定されている。FPGA101は、第1イベントが発生してから最大期間Tmaxが経過するまでに第2イベントが発生しないことを検知すると、最大期間Tmaxの経過後に発生するイベントについてのイベントログの上書き保存を停止する。また、FPGA101は、第1イベントが発生してから第2イベントが発生するまでの時間間隔が最大期間Tmax以上であることを検知すると、第2イベントの発生時点よりも後に発生するイベントについてのイベントログの上書き保存を停止してもよい。
【0061】
第3に、FPGA101は、開始対象イベントとして予め設定しておいたイベントの発生から、予め設定された最小期間Tminが経過する前に、終了対象イベントとして予め設定しておいたイベントが発生したことを検知すると、以降のイベントログの上書き保存を停止する。つまり、FPGA101は、例えば2つの特定のイベント間の発生時刻が最小期間Tmin以下の場合にログ取得を停止する。
【0062】
例えば、第3イベントおよび第4イベントが、各々、「開始対象イベント」および「終了対象イベント」として予め設定されている。また、第3イベントと第4イベントとの発生時刻の時間間隔の許容最小値(最小期間Tmin)が予め設定されている。FPGA101は、第3イベントが発生してから第4イベントが発生するまでの時間間隔が最小期間Tmin以下であることを検知すると、第4イベントの発生時点よりも後に発生するイベントについてのイベントログの上書き保存を停止する。
【0063】
なお、上述の「対象イベント」、「開始対象イベント」、および「終了対象イベント」は、例えば、図1の内部RAM160またはFPGA101内の不図示のレジスタに設定される。ユーザは、任意のイベントを、「対象イベント」、「開始対象イベント」、および「終了対象イベント」として、設定することができる。同様に、上述の最大期間Tmaxおよび最小期間Tminは、例えば、図1の内部RAM160またはFPGA101内の不図示のレジスタに設定される。ユーザは、任意の時間間隔を、最大期間Tmaxおよび最小期間Tminとして設定することができる。
【0064】
FPGA101は、複数の特定のイベントの発生時間間隔が最大期間Tmax以上または最小期間Tmin以下である場合、その特定のイベントが発生する前に発生したイベントのログを保存する。また、FPGA101は、このイベントログが、その特定のイベントが発生した後の発生するイベントのイベントログによって上書きされて失われるのを回避する。これによって、ユーザは、互いに最大期間Tmax以上の時間間隔または最小期間Tmin以下の時間間隔で発生した複数の特定のイベントについて、それらのイベントの発生経緯を検証することができるようになる。
【0065】
FPGA101は、ユーザが、PLC10(特に、FPGA101)において発生したイベントの発生順序、および、複数の特定のイベントの発生時刻の時間間隔を把握することができるように、イベントログを保存する。そして、FPGA101は、例えば、マイクロプロセッサ103が実行するプログラムを用いて、イベントログテーブル161に保存したイベントログを読み出し、外部の解析用デバイス50などのツールへと出力する。解析用デバイス50は、PLC10(特に、FPGA101)において発生した特定のイベントについて、その特定イベントが発生するまでに至る経緯を示すイベントログをFPGA101から取得し、取得したイベントログを表示する。解析用デバイス50は、PLC10において発生したイベントを発生順序と共に可視化し、つまり、そのイベントが発生するまでのPLC10(特に、FPGA101)の内部状態の推移を、ユーザに示す。
【0066】
したがって、ユーザは、イベントログを解析して、例えば、PLC10(特に、FPGA101)の通信性能を測定し、また、迅速にデバッグを行なうことが可能となる。FPGA101は、PLC10(特に、FPGA101)のデバッグ性を向上させる。
【0067】
以上に概要を説明したCPUユニット100について、次に、図1を参照して、CPUユニット100のハードウェア構成例、および、(特に、FPGA101が備える)機能ブロックについて説明する。
【0068】
§2.構成例
(CPUユニットのハードウェア構成)
図1は、PLC10のCPUユニット100の構成例を示す図である。図1に例示する通り、CPUユニット100は、ハードウェア構成として、FPGA101と、チップセット102と、マイクロプロセッサ103と、メインメモリ104と、不揮発性メモリ105と、を含む。CPUユニット100は、さらに、不図示のUSBコネクタを含んでもよい。チップセット102と他のコンポーネントとの間は、各種のバス(内部バス)を介してそれぞれ結合されている。なお、マイクロプロセッサ103とチップセット102とは、一体に形成されていてもよい。
【0069】
マイクロプロセッサ103およびチップセット102は、典型的には、汎用的なコンピュータアーキテクチャに準じて構成される。すなわち、マイクロプロセッサ103は、チップセット102から内部クロックに従って順次供給される命令コードを解釈して実行する。チップセット102は、接続されている各種コンポーネントとの間で内部的なデータを遣り取りするとともに、マイクロプロセッサ103に必要な命令コードを生成する。さらに、チップセット102は、マイクロプロセッサ103での演算処理の実行の結果得られたデータなどをキャッシュする機能を有する。
【0070】
CPUユニット100は、記憶手段として、メインメモリ104および不揮発性メモリ105を備えている。メインメモリ104は、揮発性の記憶領域(RAM)であり、CPUユニット100へ電源投入後にマイクロプロセッサ103で実行されるべき各種プログラムを保持する。また、メインメモリ104は、マイクロプロセッサ103による各種プログラムの実行時の作業用メモリとしても使用される。このようなメインメモリ104として、例えば、DRAM(Dynamic Random Access Memory)、SRAM(Static Random Access Memory)等を用いることができる。
【0071】
一方、不揮発性メモリ105は、各種のプログラムおよびパラメータなどのデータを不揮発的に保持する。これらのデータは、必要に応じて、マイクロプロセッサ103がアクセスできるようにメインメモリ104にコピーされる。このような不揮発性メモリ105は、フラッシュメモリのような半導体メモリを用いることができる。あるいは、ハードディスクドライブのような磁気記録媒体、DVD−RAM(Digital Versatile Disk Random Access Memory)のような光学記録媒体などを用いることもできる。
【0072】
FPGA101は、製造後にユーザが回路構成を設定することのできるプログラマブル論理回路であって、例えば出力データの送信および入力データの受信などの通信処理を含む種々の処理を実行する。FPGA101は、通信処理として、CPUユニット100以外のユニットおよびPLC10以外の装置へ出力データの送信と、CPUユニット100以外のユニットおよびPLC10以外の装置からの入力データの受信とを実行する。さらに、FPGA101は、通信処理として、メインメモリ104との間でデータの送受信を実行する。ただし、FPGA101が実行する処理は通信処理に限られるものではなく、後述する種々の処理を実行する。
【0073】
なお本実施形態において、CPUユニット100からCPUユニット100以外のユニットに出力されるデータ、および、PLC10からPLC10以外の装置に出力されるデータを、「出力データ」とも称す。また、CPUユニット100以外のユニットからCPUユニット100に入力されるデータ、および、PLC10以外の装置からPLC10に入力されるデータを、「入力データ」とも称す。
【0074】
(FPGAの備える機能ブロック)
FPGA101は、機能ブロックとして、イベント生成部110、コード生成部120、計時部130、取得部140、格納部150、判定部170、停止部180、および読出部190を備えている。FPGA101は、また、内部RAM160を含んでいる。
【0075】
コード生成部120は、イベント生成部110から、イベント生成部110において発生したイベントを通知されると、発生したイベントに対応するイベントコードを生成し、生成したイベントコードを取得部140に通知する。すなわち、コード生成部120は、イベント生成部110から通知される種々のイベントの各々について、各々のイベントを特定するイベントコードに対応付け、対応付けたイベントコードを、取得部140に通知する。また、コード生成部120は、FPGA101の外部から通知されたイベント(つまり、FPGA101の外部で発生したイベント)についても、そのイベントに対応するイベントコードを生成し、生成したイベントコードを取得部140に通知する。
【0076】
計時部130は、例えばFree Run Counterであり、一定の時間間隔(周期)ごとにカウンタ値を更新して内部時刻を計測し、マイクロプロセッサ103およびFPGA101の取得部140に、内部時刻についての情報を提供する。計時部130は設定された時間間隔で割り込み信号を発生することができ、典型的には、ハードウェアの仕様によって、複数の異なる時間間隔でそれぞれ割り込み信号を発生するように構成されるが、OS(Operating System)、BIOS(Basic Input Output System)などによって、任意の時間間隔で割り込み信号を発生するように設定することもできる。計時部130が発生する割り込み信号を利用して、例えば、PLC10による実行周期ごとの制御動作が実現される。
【0077】
取得部140は、コード生成部120からイベントコードを取得し、また、計時部130から現在時刻(内部時刻)を取得し、取得したイベントコードと現在時刻とを、格納部150および判定部170の各々に、通知する。
【0078】
格納部150は、停止部180から「イベントログの上書き保存の停止」が指示されていないと、取得部140から通知されたイベントコードと現在時刻とを、イベントログとして、内部RAM160のイベントログテーブル161に上書き保存する。格納部150は、停止部180から「イベントログの上書き保存の停止」が指示されていると、取得部140から通知されたイベントコードと現在時刻との、イベントログテーブル161への上書き保存を実行しない。格納部150がイベントコードと現在時刻とを組み合わせてイベントログとしてイベントログテーブル161に格納することにより、ユーザは、イベントログテーブル161に格納されたイベントログを解析して、複数のイベントの各々の発生順序を把握できる。
【0079】
判定部170は、取得部140から通知されたイベントコードおよび現在時刻を用いて、「所定の条件」を満たすイベントが発生したかを判定し、判定結果を停止部180に通知する。例えば、「所定の条件」が内部RAM160に格納されている場合、判定部170は、内部RAM160に格納されている「所定の条件」を参照して、「所定の条件」を満たすイベントが発生したかを判定する。「所定の条件」は、例えば、「対象イベント」、「開始対象イベント」、「終了対象イベント」、「最大期間Tmax」、および「最小期間Tmin」である。
【0080】
判定部170は、以下の3つのうちの少なくとも1つを検知すると、「所定の条件を満たすイベントが発生した」と判定する。すなわち、第1に、「対象イベント」として予め設定しておいたイベントの少なくとも1つが発生したことを検知すると、判定部170は、「所定の条件を満たすイベントが発生した」と判定する。つまり、判定部170は、予め単体として設定しておいたイベントの発生を検知すると、「所定の条件を満たすイベントが発生した」と判定する。
【0081】
第2に、「開始対象イベント」として設定されたイベントの発生から「最大期間Tmax」として設定された時間が経過するまでに「終了対象イベント」として設定されたイベントが発生しないことを検知すると、判定部170は「所定の条件を満たすイベントが発生した」と判定する。例えば、2つの特定のイベント間の発生時間間隔が最大期間Tmax以上であることを検知すると、判定部170は、「所定の条件を満たすイベントが発生した」と判定する。判定部170は、例えば、予め設定しておいた2つのイベント(具体的には、開始対象イベントおよび終了対象イベント)の発生時間間隔が予め設定された最大期間Tmax以上であることを検知すると、「所定の条件を満たすイベントが発生した」と判定する。また、判定部170は、開始対象イベントの発生から、最大期間Tmaxが経過するまでに、終了対象イベントが発生しないことを検知すると、「所定の条件を満たすイベントが発生した」と判定してもよい。
【0082】
第3に、2つの特定のイベント間の発生時間間隔が最小期間Tminとして設定された時間間隔以下であることを検知すると、判定部170は、「所定の条件を満たすイベントが発生した」と判定する。判定部170は、例えば、予め設定しておいた2つのイベント(具体的には、開始対象イベントおよび終了対象イベント)の発生時間間隔が予め設定された最小期間Tmin以下であることを検知すると、「所定の条件を満たすイベントが発生した」と判定する。
【0083】
停止部180は、判定部170から「所定の条件を満たすイベントが発生した」との判定結果を通知されると、格納部150によるイベントログの上書き保存を停止させる。例えば、停止部180は、「イベントログの上書き保存の停止」を指示する信号を格納部150に送信し、格納部150によるイベントログの上書き保存を停止させる。
【0084】
読出部190は、イベントログテーブル161に格納されているイベントログを読み出して、FPGA101の外部に出力する。例えば、読出部190は、「イベントログの読み出し」を指示する信号をマイクロプロセッサ103から受け付けると、イベントログテーブル161に格納されているイベントログを読み出して、マイクロプロセッサ103へと出力する。
【0085】
イベント生成部110は、PLC10(特に、FPGA101)が実行する種々の処理を制御し、PLC10が実行する種々の処理を、イベントとして、コード生成部120に通知する。つまり、イベント生成部110は、出力データの送信および入力データの受信などの通信処理を含む種々の処理を実行し、実行する処理を、イベントとして、コード生成部120に通知する。図1に例示するイベント生成部110は、例えば、フィールドバスコントローラ111、高速不揮発性メモリコントローラ112、WDT(Watch Dog Timer)113、内部バスコントローラ114、システムバスコントローラ115、電源コントローラ116を含む。
【0086】
フィールドバスコントローラ111は、フィールドネットワーク20を介したデータの遣り取りを制御し、典型的には、フィールドネットワーク20における物理層およびデータリンク層の機能を提供する。すなわち、フィールドバスコントローラ111は、用いられるフィールドネットワーク20の規格に従い、出力データの送信および入力データの受信を制御する。具体的には、フィールドバスコントローラ111は、フィールドネットワーク20に接続される他の装置との間で、不図示のバッファメモリの出力データを送信する処理、および、入力データを受信して前記バッファメモリに格納する処理を行う。フィールドバスコントローラ111は、実行するデータの送受信処理を、イベントとして、コード生成部120に通知する。例えば、フィールドバスコントローラ111は、フィールド機器とのフィールドネットワーク20を介したデータの送信および受信を、イベントとして、コード生成部120に通知する。
【0087】
例えばEtherCAT規格に従うフィールドネットワーク20を採用した場合、通常のイーサネット通信を行うためのハードウェアを含む、フィールドバスコントローラ111が用いられる。EtherCAT規格では、通常のイーサネット規格に従う通信プロトコルを実現する一般的なイーサネットコントローラを利用できる。ただし、フィールドネットワーク20として採用される産業用イーサネットの種類によっては、通常の通信プロトコルとは異なる専用仕様の通信プロトコルに対応した特別仕様のイーサネットコントローラが用いられる。また、産業用イーサネット以外のフィールドネットワークを採用した場合には、当該規格に応じた専用のフィールドネットワークコントローラが用いられる。EtherCAT規格に従うフィールドネットワーク20を採用した場合、フィールドバスコントローラ111は、フィールドネットワーク20を介したデータの送信を、「ECAT送信」とのイベントとして、コード生成部120に通知する。同様に、フィールドバスコントローラ111は、EtherCAT規格に従うフィールドネットワーク20を介したデータの受信を、「ECAT受信」とのイベントとして、コード生成部120に通知する。
【0088】
高速不揮発性メモリコントローラ112は、BIOM(Backup Input Output Memory)とも称され、不図示の高速不揮発性メモリへのデータ格納、前記高速不揮発性メモリからのデータ読出等の処理を実行する。高速不揮発性メモリコントローラ112は、実行する処理を、イベントとして、コード生成部120に通知する。例えば、高速不揮発性メモリコントローラ112は、前記高速不揮発性メモリからの所定のデータの読出を開始すると、その所定のデータの読出開始を、イベントとして、コード生成部120に通知する。
【0089】
WDT(WatchDog Timer)113は、マイクロプロセッサ103等の動作を監視し、異常発生などを検知すると、異常発生を、イベントとして、コード生成部120に通知する。例えば、WDT113は、マイクロプロセッサ103から定期的に送信される信号(WDTクリア信号)を受信している。そして、WDT113は、所定期間を経過してもWDTクリア信号を受信しないと、マイクロプロセッサ103に何らかの異常(WDT、Watch Dog Timeout)が発生していることを検知する。WDT113は、WDT発生を検知すると、検知したWDT発生を、イベントとして、コード生成部120に通知する。
【0090】
内部バスコントローラ114は、チップセット102と他のコンポーネントとの間を接続する内部バスを介した信号の送受信(例えば、マイクロプロセッサ103とFPGA101との間の信号の送受信)を制御する。チップセット102とFPGA101とは、例えばPCIe(Peripheral Component Interconnect Express)に準拠して通信してもよい。内部バスコントローラ114は、実行する処理を、イベントとして、コード生成部120に通知し、例えば、チップセット102からFPGA101への所定の信号の送信を制御する処理を実行すると、その処理を、イベントとして、コード生成部120に通知する。また、内部バスコントローラ114は、例えば、内部バスのメモリトランザクションとして配送されるMSI(Message Signaled Interrupt)の発生を、イベントとして、コード生成部120に通知する。
【0091】
システムバスコントローラ115は、CPUユニット100と、IOユニット301〜303の各々と、特殊ユニット304とを接続するPLCシステムバス400を介したデータの遣り取りを制御する。システムバスコントローラ115は、典型的には、PLCシステムバス400における物理層およびデータリンク層の機能を提供する。すなわち、システムバスコントローラ115は、PLCシステムバス400に接続されるCPUユニット100以外のユニットと、CPUユニット100との間の送受信を制御する。例えば、システムバスコントローラ115は、不図示のバッファメモリに格納されているデータ(出力データ)を、IOユニット301〜303および特殊ユニット304にPLCシステムバス400を介して送信する処理を行なう。また、システムバスコントローラ115は、PLCシステムバス400を介してIOユニット301〜303および特殊ユニット304から入力されるデータ(入力データ)を受信して前記バッファメモリに格納する処理を行う。
【0092】
そして、システムバスコントローラ115は、実行する処理を、イベントとして、コード生成部120に通知する。システムバスコントローラ115は、例えば、PLCシステムバス400を介して受信したIOユニット301〜303からの入力データを前記バッファメモリに格納する処理を、イベントとして、コード生成部120に通知する。
【0093】
なお、CPUユニット100自体にIOユニット301〜303およびサーボドライバ33、34の機能を持たせる場合は、システムバスコントローラ115による出力データの送信および入力データの受信は、それらの機能を担う部分を通信の相手方としてCPUユニット100の内部で行われる送信および受信となる。
【0094】
電源コントローラ116は、電源ユニット200から、CPUユニット100、IOユニット301〜303、および、特殊ユニット304の各々への電源供給を制御する。また、電源コントローラ116は、制御システム1の各種機器(例えば、PLC10およびフィールド機器など)およびネットワーク(例えば、フィールドネットワーク20およびPLCシステムバス400など)のリセットを制御してもよい。電源コントローラ116は、実行する処理を、イベントとして、コード生成部120に通知し、例えば、電源ユニット200からCPUユニット100等への電源供給の遮断が発生すると、その電源供給の遮断を、イベントとして、コード生成部120に通知する。
【0095】
なお、イベント生成部110が含んでいる機能ブロックとして説明した上述の機能ブロックは、イベント生成部110が含んでいる機能ブロックの一例にすぎず、イベント生成部110は、上述の機能ブロック以外の機能ブロックを必要に応じて含んでいてもよい。つまり、PLC10が実行する種々の処理に対応する機能ブロックを、イベント生成部110は含んでいてもよい。イベント生成部110は、PLC10が実行する種々の処理を、イベントとして、コード生成部120に通知できればよく、イベント生成部110が、イベントとしてコード生成部120に通知する処理は、上述のものに限られない。
【0096】
なお前述の通り、CPUユニット100は、解析用デバイス50などの各種の外部装置と接続するためのインターフェイスとしてUSBコネクタ(通信ポート)を備えていてもよい。USBコネクタは、例えば、解析用デバイス50等の外部のツールとCPUユニット100とを接続するためのインターフェイスとして利用可能であり、接続ケーブルが接続される。例えば、CPUユニット100から出力されたイベントログ等は、接続ケーブルを介して、解析用デバイス50に取込まれる。
【0097】
(FPGAの備える記憶部)
図1に例示するFPGA101は、内部RAM160を備えている。内部RAM160は、FPGA101が使用する各種データを格納する記憶装置である。内部RAM160は、FPGA101が実行する各種処理の制御プログラム、および、その制御プログラムを実行するときに読み出す各種データを非一時的に記憶している。内部RAM160は、例えば、「対象イベント」、「開始対象イベント」、「終了対象イベント」、「最大期間Tmax」、および「最小期間Tmin」を記憶している。内部RAM160はさらに、イベントログテーブル161を格納している。
【0098】
イベントログテーブル161には、PLC10(特に、FPGA101のイベント生成部110)が実行する種々の処理の各々を特定するイベントコードと、それら各々の処理が実行された順序を示す情報(例えば、時刻情報)とが対応付けられて格納される。イベントコードと、イベントコードによって特定されるイベントの発生順序(つまり、イベントに対応する処理の実行順序)を示す情報とは、イベントログとして、イベントログテーブル161に格納される。
【0099】
(制御装置についての整理)
これまで図1を用いて、PLC10(特に、CPUユニット100)のハードウェア構成等を説明してきた。CPUユニット100(特に、FPGA101)について、その概要は、以下のように整理することができる。
【0100】
すなわち、PLC10(制御装置)は、自装置において発生したイベントについての情報であるイベント情報(例えば、イベントコード)を取得する取得部140と、前記イベントの発生順序(例えば、前記イベントが発生した内部時刻)を示す情報と共に、取得部140によって取得された前記イベント情報を、イベントログとして内部RAM160(記憶部)に上書き保存する格納部150と、所定の条件を満たすイベントが発生すると、当該所定の条件を満たすイベントよりも後に発生するイベントについての、格納部150による前記イベントログの上書き保存を停止させる停止部180と、を備えている。
【0101】
前記の構成によれば、PLC10は、自装置において発生したイベントについての情報であるイベント情報を、前記イベントの発生順序を示す情報と共に、イベントログとして内部RAM160(具体的には、イベントログテーブル161)に上書き保存する。ここで、前記イベントログを内部RAM160に格納していく際、内部RAM160の記憶容量の上限に達した場合、PLC10は、例えば、内部RAM160から古いイベントログを順に削除し、新しいイベントログを内部RAM160に格納していく。つまり、PLC10は、古いイベントログに対して順次新しいイベントログを上書き保存していく(言い換えれば、古いイベントログから順に、新しいイベントログで上書きする)。そして、PLC10は、所定の条件を満たすイベントが発生すると、当該所定の条件を満たすイベントよりも後に発生するイベントについてのイベントログの上書き保存を停止する。
【0102】
したがって、PLC10は、前記所定の条件を満たすイベントより前に発生したイベントのイベントログが、前記所定の条件を満たすイベントより後に発生するイベントのイベントログに上書きされて失われるという事態を防ぐことができる。つまり、PLC10は、前記所定の条件を満たすイベントについて、前記所定の条件を満たすイベントが発生するまでの経緯を把握することができるように、前記イベントログを保存することができるという効果を奏する。
【0103】
PLC10において、取得部140と、格納部150と、停止部180とは、FPGAを用いて実現されている。前記の構成によれば、PLC10において、自装置において発生したイベントのイベントログの上書き保存、および、前記所定の条件を満たすイベントの発生に伴うイベントログの上書き保存の停止は、PLC10の備えるFPGA101により実行される。また、PLC10において、FPGA101は、FPGA101内に設けられた内部RAM160に、前記イベントログを上書き保存する。
【0104】
ここで、FPGA101は、例えば、出力データの送信および入力データの受信などの通信処理を含む種々の処理を実行し、実行した処理についての情報を、実行した処理の実行順序と共に、前記イベントログとして、内部RAM160に保存する。したがって、FPGA101は、FPGA101に対する指示がなされた順序ではなく、FPGA101内で実際にイベントが発生した順序を、イベントログとして保存することができるという効果を奏する。
【0105】
また、FPGA101は種々の処理を次々と実行するため、FPGA101が、FPGA101の内部で発生したイベントについてのイベントログを保存するためには、広帯域のメモリが必要となる。FPGA101は、内部RAM160に前記イベントログを保存することにより、所望の広帯域性を備えた格納先に、前記イベントログ保存することができるという効果を奏する。
【0106】
さらに、FPGA101は、内部RAM160に前記イベントログを上書き保存し、つまり、前記イベントログのデータ量が内部RAM160の記憶容量の上限に達した場合には、古いイベントログから順に削除していく。したがって、FPGA101は、前記イベントログの保存に必要な広帯域性を確保しつつ、前記イベントログの格納先の記憶容量を抑制することができるという効果を奏する。
【0107】
FPGA101は、前記所定の条件を満たすイベントが発生したと判定すると、前記所定の条件を満たすイベントよりも後に発生するイベントについてのイベントログの上書き保存を停止する。したがって、FPGA101は、前記所定の条件を満たすイベントの発生経緯を示すイベントログを保存し、さらに、前記発生経緯を示すイベントログが、前記所定の条件を満たすイベントより後に発生するイベントのイベントログに上書きされて失われるのを回避することができるという効果を奏する。
【0108】
PLC10は判定部170を備えている。判定部170は、(1)対象イベントとして予め設定しておいたイベントの少なくとも1つが発生したこと、(2)開始対象イベントとして予め設定しておいたイベントの発生から、予め設定された最大期間Tmaxが経過するまでに、終了対象イベントとして予め設定しておいたイベントが発生しないこと、および、(3)開始対象イベントとして予め設定しておいたイベントの発生から、予め設定された最小期間Tminが経過する前に、終了対象イベントとして予め設定しておいたイベントが発生したこと、の少なくとも1つを検知すると、前記所定の条件を満たすイベントが発生したと判定する。そして、停止部180は、判定部170により前記所定の条件を満たすイベントが発生したと判定されると、判定部170により前記所定の条件を満たすイベントが発生したと判定された後に発生するイベントについての、格納部150による前記イベントログの上書き保存を停止させる。
【0109】
前記の構成によれば、PLC10は、(1)対象イベントとして予め設定しておいたイベントの少なくとも1つが発生したことを検知すると、発生を検知した前記対象イベントよりも後に発生するイベントについての、前記イベントログの上書き保存を停止する。したがって、PLC10は、前記対象イベントより前に発生したイベントのイベントログが、前記対象イベントより後に発生するイベントのイベントログに上書きされて失われるという事態を防ぐことができる。つまり、PLC10は、前記対象イベントについて、前記対象イベントが発生するまでの経緯を把握することができるように、前記イベントログを保存することができるという効果を奏する。
【0110】
また、PLC10は、(2)開始対象イベントとして予め設定しておいたイベントの発生から、予め設定された最大期間Tmaxが経過するまでに、終了対象イベントとして予め設定しておいたイベントが発生しないことを検知すると、検知後に発生するイベントについての、前記イベントログの上書き保存を停止する。
【0111】
例えば、PLC10は、前記開始対象イベントの発生から、最大期間Tmaxが経過するまでに、前記終了対象イベントが発生しないことを検知すると、最大期間Tmaxの経過後に発生するイベントについての、前記イベントログの上書き保存を停止する。
【0112】
したがって、PLC10は、最大期間Tmaxの経過時点までに発生したイベントのイベントログが、最大期間Tmaxの経過時点後に発生したイベントのイベントログに上書きされて失われるという事態を防ぐことができる。つまり、PLC10は、前記開始対象イベントの発生から最大期間Tmaxの経過までに発生すべき前記終了対象イベントが発生しなかった経緯を把握することができるように、前記イベントログを保存することができるという効果を奏する。
【0113】
また、PLC10は、前記開始対象イベントが発生してから前記終了対象イベントが発生するまでの時間間隔が最大期間Tmax以上であることを検知すると、前記終了対象イベントよりも後に発生するイベントについてのイベントログの上書き保存を停止してもよい。
【0114】
したがって、PLC10は、前記終了対象イベントより前に発生したイベントのイベントログが、前記終了対象イベントより後に発生するイベントのイベントログに上書きされて失われるという事態を防ぐことができる。つまり、PLC10は、前記終了対象イベントについて、前記終了対象イベントが発生するまでの経緯を把握することができるように、前記イベントログを保存することができるという効果を奏する。
【0115】
さらに、PLC10は、(3)開始対象イベントとして予め設定しておいたイベントの発生から、予め設定された最小期間Tminが経過する前に、終了対象イベントとして予め設定しておいたイベントが発生したことを検知すると、検知後に発生するイベントについての、前記イベントログの上書き保存を停止する。
【0116】
例えば、PLC10は、前記開始対象イベントの発生から、最小期間Tminが経過する前に、前記終了対象イベントが発生したことを検知すると、前記終了対象イベントよりも後に発生するイベントについての、前記イベントログの上書き保存を停止する。
【0117】
したがって、PLC10は、前記終了対象イベントより前に発生したイベントのイベントログが、前記終了対象イベントより後に発生するイベントのイベントログに上書きされて失われるという事態を防ぐことができる。つまり、PLC10は、前記開始対象イベントの発生から最小期間Tminの経過後に発生すべき前記終了対象イベントが、最小期間Tminの経過前に発生した経緯を把握することができるように、前記イベントログを保存することができるという効果を奏する。言い換えれば、PLC10は、前記終了対象イベントについて、前記終了対象イベントが発生するまでの経緯を把握することができるように、前記イベントログを保存することができるという効果を奏する。
【0118】
PLC10は、前記発生順序を示す情報(時刻情報)と共に内部RAM160に保存されている前記イベント情報(イベントコード)を、つまり、前記イベントログを、自装置の外部に出力する読出部190(出力部)を備えている。PLC10から前記イベントログを取得した解析用デバイス50等の外部装置は、例えば、前記所定の条件を満たすイベントの発生経緯を示すイベントログを表示する。つまり、解析用デバイス50は、PLC10において発生した前記イベントを発生順序と共に可視化し、つまり、前記イベントが発生するまでのPLC10の状態(内部状態)の推移を、ユーザに示す。したがって、PLC10は、前記所定の条件を満たすイベントの発生経緯を示すイベントログを、解析用デバイス50等の外部装置において解析可能なように出力することができるという効果を奏する。
【0119】
これまでに概要を説明してきたCPUユニット100(特に、FPGA101)について、次に、図3等を用いて、CPUユニット100(特に、FPGA101)の実行する処理について、その概要を説明していく。
【0120】
§3.動作例
図3は、CPUユニット100(特に、FPGA101)が実行するイベントログの上書き保存処理および上書き保存停止処理の概要を示すフロー図である。図3に例示するように、取得部140は、コード生成部120から、イベント生成部110において発生したイベントに対応するイベントコードを取得する(S110)。また、取得部140は、計時部130から現在時刻(現在の内部時刻)を取得する(S120)。ここで、取得部140が計時部130から取得する現在時刻は、イベント生成部110において発生したイベントの発生時刻を示すものとして、FPGA101等により用いられる。
【0121】
格納部150は、停止部180によってイベントログの上書き保存が禁止されているかを判定し、つまり、イベントログの上書き保存を停止するようにとの指示を停止部180から受けていないかを確認する(S130)。イベントログの上書き保存が禁止されていない場合(S130でNo)、格納部150は、取得部140から通知されたイベントコードと現在時刻とを、イベントログとして、内部RAM160のイベントログテーブル161に上書き保存する(S140)。また、イベントログの上書き保存が禁止されている場合(S130でYes)、格納部150は、イベントログの、イベントログテーブル161への上書き保存を実行しない。
【0122】
判定部170は、取得部140から通知されたイベントコードおよび現在時刻を用いて、「所定の条件を満たすイベントが発生したか」を判定する(S150)。判定部170は、「所定の条件を満たすイベントが発生した」と判定すると(S150でYes)、「所定の条件を満たすイベントが発生した」との判定結果を停止部180に通知する。停止部180は、判定部170から「所定の条件を満たすイベントが発生した」との判定結果を通知されると、格納部150によるイベントログの上書き保存を禁止し、つまり、イベントログのイベントログテーブル161への上書き保存を停止させる(S160)。判定部170が「所定の条件を満たすイベントが発生していない」と判定すると(S150でNo)、格納部150によるイベントログの上書き保存は停止されず、次のイベントが発生すると再びS110およびS120の処理が実行される。
【0123】
図3に例示した処理フローは、以下のように整理することができる。すなわち、PLC10(特に、FPGA101)が実行する制御方法は、PLC10(特に、FPGA101)において発生したイベントについての情報であるイベント情報(例えば、イベントコード)を取得する取得ステップ(S110)と、前記イベントの発生順序(例えば、前記イベントが発生した内部時刻)を示す情報と共に、前記取得ステップにおいて取得された前記イベント情報を、イベントログとして内部RAM160(記憶部)に上書き保存する格納ステップ(S140)と、所定の条件を満たすイベントが発生すると、当該所定の条件を満たすイベントよりも後に発生するイベントについての、前記格納ステップにおける前記イベントログの上書き保存を停止させる停止ステップ(S160)と、を含んでいる。
【0124】
前記の方法によれば、前記制御方法は、PLC10(特に、FPGA101)において発生したイベントについての情報であるイベント情報を、前記イベントの発生順序を示す情報と共に、イベントログとして内部RAM160(具体的には、イベントログテーブル161)に上書き保存する。ここで、前記イベントログを内部RAM160に格納していく際、内部RAM160の記憶容量の上限に達した場合、前記制御方法は、例えば、内部RAM160から古いイベントログを順に削除し、新しいイベントログを内部RAM160に格納していく。つまり、前記制御方法は、古いイベントログに対して順次新しいイベントログを上書き保存していく(言い換えれば、古いイベントログから順に、新しいイベントログで上書きする)。そして、前記制御方法は、PLC10において所定の条件を満たすイベントが発生すると、当該所定の条件を満たすイベントよりも後に発生するイベントについてのイベントログの上書き保存を停止する。
【0125】
したがって、前記制御方法は、前記所定の条件を満たすイベントより前に発生したイベントのイベントログが、前記所定の条件を満たすイベントより後に発生するイベントのイベントログに上書きされて失われるという事態を防ぐことができる。つまり、前記制御方法は、PLC10において発生した前記所定の条件を満たすイベントについて、前記所定の条件を満たすイベントが発生するまでの経緯を把握することができるように、前記イベントログを保存することができるという効果を奏する。
【0126】
ここで、前述の通り、FPGA101は、以下の3つのうちの少なくとも1つを検知すると、「所定の条件を満たすイベントが発生した」と判定して、格納部150によるイベントログの上書き保存を停止する。すなわち、(1)予め単体として設定しておいた所定のイベントの発生を検知すると、FPGA101は、格納部150によるイベントログの上書き保存を停止する。また、(2)複数の所定のイベントの発生時間間隔が予め設定された最大期間Tmax以上であることを検知すると、FPGA101は、格納部150によるイベントログの上書き保存を停止する。さらに、(3)複数の所定のイベントの発生時間間隔が予め設定された最小期間Tmin以下である状況であることを検知すると、FPGA101は、格納部150によるイベントログの上書き保存を停止する。以下、図4から図6を用いて、上述の(1)から(3)の各々について、FPGA101が実行する具体的な処理を説明していく。
【0127】
(処理例1−予め単体として設定しているイベントが発生した)
図4は、CPUユニット100(特に、FPGA101)が所定のイベントの発生を検知した場合に実行する処理の一例を示すフロー図である。FPGA101のコンフィグが終了すると、つまり、FPGA101の設定が完了すると、計時部130は、1クロック毎に繰り返し8ns分カウントアップし(S210)、カウントアップした値(つまり、現在の内部時刻を示す時刻情報)を、取得部140に通知する。
【0128】
コード生成部120は、イベント生成部110におけるイベント発生まで待機しておき(S220)、イベント生成部110においてイベントが発生すると、イベント生成部110において発生したイベントに対応するイベントコードを生成する(S230)。つまり、コード生成部120は、イベント生成部110において発生したイベントを、対応するイベントコードに変換し、変換した(つまり、生成した)イベントコードを、取得部140に通知する。取得部140は、コード生成部120からイベントコードを取得すると、取得したイベントコードを、計時部130から取得した時刻情報と組み合わせて、格納部150および判定部170に通知する。
【0129】
格納部150は、停止部180によってイベントログの上書き保存が停止されているかを判定し、つまり、イベントログの上書き保存を停止するようにとの指示を停止部180から受けていないかを確認する(S240)。イベントログの上書き保存が停止されていない場合(S240でNo)、格納部150は、取得部140から通知されたイベントコードと時刻情報とを、イベントログとして、内部RAM160のイベントログテーブル161に上書き保存する(S250)。また、イベントログの上書き保存が禁止されている場合(S240でYes)、格納部150は、イベントログの、イベントログテーブル161への上書き保存を実行しない。
【0130】
判定部170は、「格納部150がイベントログテーブル161に上書き保存したイベントコードが、予め設定されたイベントコードであるか」を判定する(S260)。つまり、判定部170は、「取得部140から通知されたイベントコードが、予め設定されたイベントコードであるか」を判定する。
【0131】
判定部170は、「格納部150が保存したイベントコードが、予め設定されたイベントコードである」と判定すると(S260でYes)、この判定結果を停止部180に通知する。停止部180は、判定部170から「格納部150が保存したイベントコードが、予め設定されたイベントコードである」との判定結果を通知されると、格納部150によるイベントログの上書き保存を禁止する。格納部150は、停止部180からの禁止指示(つまり、停止指示)を受け付けると、イベントログのイベントログテーブル161への上書き保存を停止する(S270)。判定部170が「格納部150が保存したイベントコードが、予め設定されたイベントコードでない」と判定すると(S260でNo)、格納部150によるイベントログの上書き保存は停止されず、S220の処理へと戻る。
【0132】
(具体例)
例えば、時刻情報の各々は56bitであり、イベントコードの各々は8bitであって、イベントログの各々は「56+8=64」bitのデータであるとする。そして、「イベントログの上書き保存の停止」の契機となるイベントコードとして、「WDT(Watch Dog Timer)のタイムアップ(WDTup)の発生」とのイベントを示す「0X0A」が予め設定されているものとする。
【0133】
取得部140から通知されたイベントコードが「0X0A」であることを判定部170が検知するまで、格納部150は、イベント生成部110において順次発生するイベントの各々についてのイベントログを、イベントログテーブル161に上書き保存していく。
【0134】
そして、判定部170は、取得部140から通知されたイベントコードが「0X0A」であることを検知すると、「所定の条件を満たすイベントが発生した」との判定結果を、停止部180に通知する。停止部180は、判定部170から「所定の条件を満たすイベントが発生した」との判定結果を通知されると、格納部150によるイベントログの上書き保存を禁止する。
【0135】
したがって、FPGA101は、WDTupが発生するよりも前に順次発生していたイベントのイベントログが、WDTupが発生した時点よりも後に発生するイベントのイベントログによって上書きされて削除されるのを防ぐことができる。つまり、イベントログテーブル161には、「WDTupの発生と、その発生時刻とを示すイベントログ」、および、「WDTupが発生するよりも前に順次発生していたイベントのイベントログ」が保存されている。ユーザは、イベントログテーブル161に保存されている、「WDTupが発生するよりも前に順次発生していたイベントのイベントログ」を解析して、WDTupが発生した原因および経緯を把握することができる。
【0136】
(処理例2−予め設定しておいた2つのイベントの発生時間間隔が、予め設定された最大期間以上である)
図5は、予め設定しておいた2つのイベントの発生時間間隔が、予め設定された最大期間Tmax以上である場合に、CPUユニット100(特に、FPGA101)が実行する処理の一例を示すフロー図である。図5におけるS310からS340までの処理は、図4におけるS210からS240までの処理と同様である。
【0137】
すなわち、FPGA101のコンフィグが終了すると、計時部130は、1クロック毎に繰り返し8ns分カウントアップし(S310)、カウントアップした値を、取得部140に通知する。コード生成部120は、イベント生成部110におけるイベント発生まで待機しておき(S320)、イベント生成部110においてイベントが発生すると、イベント生成部110において発生したイベントをイベントコードに変換する(S330)。そして、コード生成部120は、変換した(つまり、生成した)イベントコードを、取得部140に通知する。取得部140は、コード生成部120からイベントコードを取得すると、取得したイベントコードを、計時部130から取得した時刻情報と組み合わせて、格納部150および判定部170に通知する。格納部150は、停止部180によってイベントログの上書き保存が停止されているかを判定し、つまり、イベントログの上書き保存を停止するようにとの指示を停止部180から受けていないかを確認する(S340)。
【0138】
イベントログの上書き保存が禁止されている場合(S340でYes)、格納部150は、取得部140から通知されたイベントコードと時刻情報とをイベントログテーブル161に上書き保存することは行わない。次のイベントが発生すると再びS320の処理が実行される。
【0139】
イベントログの上書き保存が禁止されていない場合(S340でNo)、判定部170は、「取得部140から通知されたイベントコードが、『スタート(つまり、開始対象イベント)』として予め設定されたイベントコードであるか」を判定する(S350)。判定部170は、「取得部140から通知されたイベントコードが、『スタート』として予め設定されたイベントコードである」と判定すると(S350でYes)、計測用カウンタのカウントアップを開始して(S360)、次にS370の処理の処理が実行される。また、判定部170は、「取得部140から通知されたイベントコードが、『スタート』として予め設定されたイベントコードではない」と判定すると(S350でNo)、何も処理を実行せずに、次にS370の処理の処理が実行される。
【0140】
判定部170は、「取得部140から通知されたイベントコードが、『エンド(つまり、終了対象イベント)』として予め設定されたイベントコードであるか」を判定する(S370)。判定部170は、「取得部140から通知されたイベントコードが、『エンド』として予め設定されたイベントコードである」と判定すると(S370でYes)、計測用カウンタのカウントアップを停止して(S380)、次にS390の処理の処理が実行される。また、判定部170は、「取得部140から通知されたイベントコードが、『エンド』として予め設定されたイベントコードではない」と判定すると(S370でNo)、何も処理を実行せずに、次にS390の処理の処理が実行される。
【0141】
格納部150は、取得部140から通知されたイベントコードと時刻情報とを、イベントログとして、内部RAM160のイベントログテーブル161に上書き保存する(S390)。S390におけるイベントログの上書き保存後、判定部170は、「計測用カウンタが設定値(つまり、最大期間Tmax)以上であるか」を判定する(S400)。
【0142】
判定部170は、「計測用カウンタが最大期間Tmax以上である」と判定すると(S400でYes)、この判定結果を停止部180に通知する。停止部180は、判定部170から「計測用カウンタが最大期間Tmax以上である」との判定結果を通知されると、格納部150によるイベントログの上書き保存を禁止する。格納部150は、停止部180からの禁止指示(つまり、停止指示)を受け付けると、イベントログのイベントログテーブル161への上書き保存を停止する(S410)。判定部170が「計測用カウンタが最大期間Tmax未満である」と判定すると(S400でNo)、格納部150によるイベントログの上書き保存は停止されず、S320の処理へと戻る。
【0143】
(具体例)
例えば、時刻情報の各々は56bitであり、イベントコードの各々は8bitであって、イベントログの各々は「56+8=64」bitのデータであるとする。「スタート(つまり、開始対象イベント)」のイベントコードとして、「ユニット電源断の発生(つまり、電源供給を遮断した)」とのイベントを示す「0X20」が予め設定されているものとする。また、「エンド(つまり、終了対象イベント)」のイベントコードとして、「システムリセット発行(つまり、PLC10のリセット)」とのイベントを示す「0X21」が予め設定されているものとする。さらに、PLC10において、電断シーケンスの「開始(つまり、ユニット電源断の発生)」から「完了(つまり、システムリセット発行)」までの期間は、数百msとなるよう設計されているものとする。これに合わせて、PLC10において、「ユニット電源断の発生」から「システムリセット発行」までの「設定値(つまり、最大期間Tmax)」として、「1s」が設定されているものとする。
【0144】
停止部180によってイベントログの上書き保存が禁止されるまで、格納部150は、イベント生成部110において順次発生するイベントの各々についてのイベントログを、イベントログテーブル161に上書き保存していく。
【0145】
判定部170は、取得部140から通知されたイベントコードが「0X20」だと計測用カウンタのカウントアップを開始し、その後、「0X21」のイベントコードを通知されるまで、計測用カウンタのカウントアップを継続する。判定部170は、取得部140から通知されたイベントコードが「0X21」だと計測用カウンタのカウントアップを停止する。
【0146】
そして、計測用カウンタのカウント(値)が、「1s」以上であることを検知すると、判定部170は、「所定の条件を満たすイベントが発生した」と判定し、この判定結果を、停止部180に通知する。停止部180は、判定部170から「所定の条件を満たすイベントが発生した」との判定結果を通知されると、格納部150によるイベントログの上書き保存を禁止する。つまり、FPGA101は、「ユニット電源断の発生」から1s以上経過した後に「システムリセット発行」が発生すると、この「システムリセット発行」よりも後に発生するイベントについて、イベントログの上書き保存を行なわない。
【0147】
したがって、FPGA101は、この「システムリセット発行」よりも前に順次発生していたイベントのイベントログが、この「システムリセット発行」よりも後に発生するイベントのイベントログによって上書きされて削除されるのを防ぐことができる。特に、FPGA101は、「ユニット電源断の発生」から「システムリセット発行」までの間に発生するイベントのイベントログが、「システムリセット発行」よりも後に発生するイベントのイベントログによって上書きされて削除されるのを防ぐことができる。イベントログテーブル161には、この「システムリセット発行」よりも前に順次発生していたイベントのイベントログが、特に、「ユニット電源断の発生」から「システムリセット発行」までの間に発生するイベントのイベントログが、格納されている。
【0148】
ここで、前述の通り、PLC10は、「ユニット電源断の発生」から「電断シーケンスの完了」までの期間が数百msとなるよう設計されている。そのため、「電断シーケンス」の開始を示す「ユニット電源断の発生」から1s以上経過して、「電断シーケンス」の完了を示す「システムリセット発行」が発生した場合、電断シーケンスの途中で何らかの異常が発生したものと考えられる。
【0149】
ユーザは、イベントログテーブル161に保存されている、この「システムリセット発行」よりも前に順次発生していたイベントのイベントログを解析して、電断シーケンスの完了が遅延した原因および経緯を把握することができる。
【0150】
(処理例3−予め設定しておいた2つのイベントの発生時間間隔が、予め設定された最小期間以下である)
図6は、予め設定しておいた2つのイベントの発生時間間隔が、予め設定された最小期間Tmin以下である場合に、CPUユニット100(特に、FPGA101)が実行する処理の一例を示すフロー図である。図6におけるS510からS540までの処理は、図4におけるS310からS340までの処理と同様である。
【0151】
すなわち、FPGA101のコンフィグが終了すると、計時部130は、1クロック毎に繰り返し8ns分カウントアップし(S510)、カウントアップした値を、取得部140に通知する。コード生成部120は、イベント生成部110におけるイベント発生まで待機しておき(S520)、イベント生成部110においてイベントが発生すると、イベント生成部110において発生したイベントをイベントコードに変換する(S530)。そして、コード生成部120は、変換した(つまり、生成した)イベントコードを、取得部140に通知する。取得部140は、コード生成部120からイベントコードを取得すると、取得したイベントコードを、計時部130から取得した時刻情報と組み合わせて、格納部150および判定部170に通知する。格納部150は、停止部180によってイベントログの上書き保存が停止されているかを判定し、つまり、イベントログの上書き保存を停止するようにとの指示を停止部180から受けていないかを確認する(S540)。
【0152】
イベントログの上書き保存が禁止されている場合(S540でYes)、格納部150は、取得部140から通知されたイベントコードと時刻情報とをイベントログテーブル161に上書き保存することは行わない。次のイベントが発生すると再びS520の処理が実行される。
【0153】
イベントログの上書き保存が禁止されていない場合(S540でNo)、判定部170は、「取得部140から通知されたイベントコードが、『スタート(つまり、開始対象イベント)』として予め設定されたイベントコードであるか」を判定する(S550)。判定部170は、「取得部140から通知されたイベントコードが、『スタート』として予め設定されたイベントコードである」と判定すると(S550でYes)、計測用カウンタのカウントアップを開始して(S560)、次にS570の処理の処理が実行される。また、判定部170は、「取得部140から通知されたイベントコードが、『スタート』として予め設定されたイベントコードではない」と判定すると(S550でNo)、何も処理を実行せずに、次にS570の処理の処理が実行される。
【0154】
判定部170は、「取得部140から通知されたイベントコードが、『エンド(つまり、終了対象イベント)』として予め設定されたイベントコードであるか」を判定する(S570)。判定部170は、「取得部140から通知されたイベントコードが、『エンド』として予め設定されたイベントコードである」と判定すると(S570でYes)、計測用カウンタのカウントアップを停止して(S580)、次にS590の処理の処理が実行される。また、判定部170は、「取得部140から通知されたイベントコードが、『エンド』として予め設定されたイベントコードではない」と判定すると(S570でNo)、何も処理を実行せずに、次にS590の処理の処理が実行される。
【0155】
格納部150は、取得部140から通知されたイベントコードと時刻情報とを、イベントログとして、内部RAM160のイベントログテーブル161に上書き保存する(S590)。S590におけるイベントログの上書き保存後、判定部170は、「計測用カウンタが設定値(つまり、最小期間Tmin)以下であるか」を判定する(S600)。
【0156】
判定部170は、「計測用カウンタが最小期間Tmin以下である」と判定すると(S600でYes)、この判定結果を停止部180に通知する。停止部180は、判定部170から「計測用カウンタが最小期間Tmin以下である」との判定結果を通知されると、格納部150によるイベントログの上書き保存を禁止する。格納部150は、停止部180からの禁止指示(つまり、停止指示)を受け付けると、イベントログのイベントログテーブル161への上書き保存を停止する(S610)。判定部170が「計測用カウンタが最小期間Tminより大きい」と判定すると(S600でNo)、格納部150によるイベントログの上書き保存は停止されず、S520の処理へと戻る。
【0157】
(具体例)
例えば、制御システム1は、EtherCAT規格に従うフィールドネットワーク20を採用しているものとする。ここで、EtherCAT規格に従うフィールドネットワーク20を採用した場合、フィールドネットワーク20を介したデータの送信から受信までの時間は、通常、数十μsである。
【0158】
また、時刻情報の各々は56bitであり、イベントコードの各々は8bitであって、イベントログの各々は「56+8=64」bitのデータであるとする。「スタート(つまり、開始対象イベント)」のイベントコードとして、「ECAT送信」とのイベントを示す「0X10」が予め設定されているものとする。また、「エンド(つまり、終了対象イベント)」のイベントコードとして、「ECAT受信」とのイベントを示す「0X11」が予め設定されているものとする。さらに、PLC10において、「ECAT送信」から「ECAT受信」までの「設定値(つまり、最小期間Tmin)」として、「1μs」が設定されているものとする。
【0159】
停止部180によってイベントログの上書き保存が禁止されるまで、格納部150は、イベント生成部110において順次発生するイベントの各々についてのイベントログを、イベントログテーブル161に上書き保存していく。
【0160】
判定部170は、取得部140から通知されたイベントコードが「0X10」だと計測用カウンタのカウントアップを開始し、その後、「0X11」のイベントコードを通知されるまで、計測用カウンタのカウントアップを継続する。判定部170は、取得部140から通知されたイベントコードが「0X11」だと計測用カウンタのカウントアップを停止する。
【0161】
そして、計測用カウンタのカウント(値)が、「1μs」以下であることを検知すると、判定部170は、「所定の条件を満たすイベントが発生した」と判定し、この判定結果を、停止部180に通知する。停止部180は、判定部170から「所定の条件を満たすイベントが発生した」との判定結果を通知されると、格納部150によるイベントログの上書き保存を禁止する。つまり、FPGA101は、「ECAT送信」から1μs以下の時間間隔で「ECAT受信」が発生すると、この「ECAT受信」よりも後に発生するイベントについて、イベントログの上書き保存を行なわない。
【0162】
したがって、FPGA101は、この「ECAT受信」よりも前に順次発生していたイベントのイベントログが、この「ECAT受信」よりも後に発生するイベントのイベントログによって上書きされて削除されるのを防ぐことができる。特に、FPGA101は、「ECAT送信」から「ECAT受信」までの間に発生するイベントのイベントログが、「ECAT受信」よりも後に発生するイベントのイベントログによって上書きされて削除されるのを防ぐことができる。イベントログテーブル161には、この「ECAT受信」よりも前に順次発生していたイベントのイベントログが、特に、「ECAT送信」から「ECAT受信」までの間に発生するイベントのイベントログが、格納されている。
【0163】
ここで、前述の通り、PLC10は、「ECAT送信」から「ECAT受信」までの期間が数十μsとなるよう設計されている。そのため、「ECAT送信」から1μs以下の時間間隔で「ECAT受信」が発生した場合、フィールドネットワーク20を介したデータの送受信に何らかの異常が発生したものと考えられる。
【0164】
ユーザは、イベントログテーブル161に保存されている、この「ECAT受信」よりも前に順次発生していたイベントのイベントログを解析して、フィールドネットワーク20における想定外の送受信などの異常について、原因および経緯を把握することができる。
【0165】
図5および図6を用いて説明してきた通り、判定部170は、2つの特定のイベント間の時間間隔が設定値(最大期間Tmax)以上となったことを検知すると、「所定の条件を満たすイベントが発生した」と判定する。また、判定部170は、2つの特定のイベント間の時間間隔が設定値(最小期間Tmin)以下となったことを検知すると、「所定の条件を満たすイベントが発生した」と判定する。判定部170によって「所定の条件を満たすイベントが発生した」と判定されると、停止部180は、格納部150によるイベントログの上書き保存を禁止する。
【0166】
したがって、イベントログテーブル161に保存された「特定のイベントが発生するに至った経緯を示すイベントログ」は、「特定のイベントよりも後に発生するイベントのイベントログ」に上書きされて失われることがない。ユーザは、イベントログテーブル161に保存された「特定のイベントが発生するに至った経緯を示すイベントログ」を解析して、特定のイベントが発生するに至った経緯を、時系列に追うことができる。
【0167】
(イベントログの出力等に係る処理)
例えば、マイクロプロセッサ103は、チップセット102を介して、FPGA101の読出部190に、イベントログテーブル161に格納されているイベントログを読み出すよう指示し、つまり、読み出し命令/読み出しアドレスの指示を入力する。この指示を受け付けた読出部190は、イベントログテーブル161に格納されているイベントログ(イベントコード、および、そのイベントコードに対応するイベントの発生時刻)を読み出し、チップセット102を介して、マイクロプロセッサ103に出力する。マイクロプロセッサ103は、CPUユニット100に接続されている解析用デバイス50へ、読出部190が読み出したイベントログを出力する。解析用デバイス50は、CPUユニット100からイベントログを受信すると、受信したイベントログを、ユーザに表示する。
【0168】
§4.変形例
これまで、イベント生成部110、コード生成部120、計時部130、取得部140、格納部150、内部RAM160、判定部170、停止部180、および読出部190が、FPGA(Field-Programmable gate array)を用いて実現される例を説明してきた。しかしながら、これらの機能ブロックがFPGAを用いて実現されることは必須ではなく、例えば、ASIC(Application Specific Integrated Circuit)を用いて実現されてもよい。つまり、イベント生成部110、コード生成部120、計時部130、取得部140、格納部150、内部RAM160、判定部170、停止部180、および読出部190は、ASICを用いて実現されてもよい。
【0169】
これまで、格納部150が内部RAM160のイベントログテーブル161にイベントログを上書き保存する例を説明してきたが、イベントログの格納先が内部RAM160であることは必須ではない。格納部150は、イベントコードと現在時刻とを含むイベントログをFPGA101の外部に出力してもよく、例えば、所望の広帯域性を満たすFPGA101の外部のメモリに、イベントログを上書き保存してもよい。
【0170】
イベント生成部110、コード生成部120、計時部130、取得部140、格納部150、判定部170、停止部180、および読出部190は、ASICを用いて実現した場合、格納部150は、ASICの外部のメモリに、イベントログを保存してもよい。
【0171】
格納部150は、イベントコードと現在時刻とを含むイベントログを、FPGA101(または、格納部150を実現するASIC)の外部に出力し、外部の別FPGAまたは別ASICが、外部のメモリに、出力されたイベントログを上書き保存してもよい。
【0172】
FPGA101が計時部130を備えることは必須ではなく、取得部140は、FPGA101の外部から時刻情報を取得してもよい。また、取得部140は、現在時刻(内部時刻)を示す時刻情報を取得する代わりに、各イベントの発生順序を示す情報(例えば、カウンタ)を取得してもよい。
【0173】
本発明は上述した各実施形態に限定されるものではなく、請求項に示した範囲で種々の変更が可能であり、異なる実施形態にそれぞれ開示された技術的手段を適宜組み合わせて得られる実施形態についても本発明の技術的範囲に含まれる。
【符号の説明】
【0174】
10 PLC(制御装置)
101 FPGA
140 取得部
150 格納部
160 内部RAM(記憶部、内部RAM)
170 判定部
180 停止部
190 読出部(出力部)
Tmax 最大期間
Tmin 最小期間
S110 取得ステップ
S140 格納ステップ
S160 停止ステップ
図1
図2
図3
図4
図5
図6