(57)【特許請求の範囲】
【請求項１】
指定された周期でトレースデータを収集するサンプリングトレース機能および互いに同期したタイミングでの割り込み処理を行う同期割り込み機能を有する複数のコントローラを備えたマルチコントローラシステムであって、
前記複数のコントローラは、
１つの第１のコントローラおよび１つ以上の第２のコントローラを含み、
第１および第２のコントローラの各々は、
所定の共通カウント値を保持する共通カウント値保持部と、
前記共通カウント値を制御する共通カウント値制御部とを備え、
前記第２のコントローラは、
前記サンプリングトレースの実行開始時に、前記第１のコントローラの前記共通カウント値を取得して自己の前記共通カウント値保持部に保持させ、
第１および第２のコントローラ各々の前記共通カウント値制御部は、
前記サンプリングトレースが実行される期間、前記共通カウント値を前記同期割り込み処理毎にカウントアップし、
第１および第２のコントローラの各々は、
取得したトレースデータにその取得時の前記共通カウント値を含む時刻情報を付する
ことを特徴とするマルチコントローラシステム。
【請求項２】
請求項１記載のマルチコントローラシステムであって、
第１および第２のコントローラの各々は、
同期割り込み処理の消滅の有無を監視する同期割り込み監視部をさらに備え、
第１および第２のコントローラ各々の前記共通カウント値制御部は、
前記同期割り込み処理の消滅が生じた場合に、前記共通カウント値のカウントアップを停止する
ことを特徴とするマルチコントローラシステム。
【請求項３】
指定された周期でトレースデータを収集するサンプリングトレース機能および互いに同期したタイミングでの割り込み処理を行う同期割り込み機能を有する複数のコントローラを備えたマルチコントローラシステムであって、
前記複数のコントローラは、
１つの第１のコントローラおよび１つ以上の第２のコントローラを含み、
第１および第２のコントローラの各々は、
所定の共通カウント値を保持する共通カウント値保持部と、
前記共通カウント値を制御する共通カウント値制御部とを備え、
前記共通カウント値制御部は、
前記共通カウント値が同期割り込み処理の周期毎に増加した如き値をとるように、当該共通カウント値を再計算することが可能であり、
前記第２のコントローラは、
前記サンプリングトレースの実行開始時に、前記第１のコントローラの前記共通カウント値を取得して自己の前記共通カウント値保持部に保持させ、
第１および第２のコントローラの各々は、
取得したトレースデータにその取得時に再計算した前記共通カウント値を含む時刻情報を付する
ことを特徴とするマルチコントローラシステム。
【請求項４】
請求項３記載のマルチコントローラシステムであって、
前記第１のコントローラは、
同期割り込み処理の消滅の有無を監視する同期割り込み監視部をさらに備え、
前記第１のコントローラの前記共通カウント値制御部は、
前記サンプリングトレースの実行開始時における所定期間、前記共通カウント値を前記同期割り込み処理毎にカウントアップし、
前記第２のコントローラは、
前記第１のコントローラの前記共通カウント値の取得を前記所定期間に行い、
前記第１のコントローラは、
前記所定期間に同期割り込み処理の消滅が生じた場合、前記第２のコントローラに対し、当該第１のコントローラの前記共通カウント値の取得をやり直しさせる
ことを特徴とするマルチコントローラシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラマブルコントローラやモーションコントローラなどの産業用コントローラに関し、特に、複数のコントローラを含むマルチコントローラシステムにおけるサンプリングトレース機能に関するものである。
【背景技術】
【０００２】
生産設備の制御を行う装置として、プログラマブルコントローラ（Programmable Controller；ＰＣ）が知られている。プログラマブルコントローラは、ベースユニットに装着され、当該ベースユニットに装着された他の各種ユニットの入出力信号を制御する。
【０００３】
多数の信号を制御する場合には、ベースユニットに複数のプログラマブルコントローラを装着させ、信号の制御に係る負荷をそれら複数のプログラマブルコントローラに分散させることが可能である。そのように協調して動作する複数のコントローラを含むマルチコントローラシステムは「マルチＣＰＵシステム」とも呼ばれる。
【０００４】
モーションコントローラ（Motion Controller；ＭＣ）は特にサーボモータを制御するコントローラである。モーションコントローラもベースユニットに装着されて、プログラマブルコントローラと共にマルチＣＰＵシステムを構成することができる。
【０００５】
これらプログラマブルコントローラやモーションコントローラ（以下、「コントローラ」と総称する）を動作させるためには、所定のエンジニアリングツールが用いられる。一般に、エンジニアリングツールはパーソナルコンピュータ等の汎用コンピュータ上で動作し、コントローラの動作を規定するプログラムの作成・編集を支援する他、エンジニアリングツールが動作するコンピュータとコントローラと接続させた状態で、編集したプログラムをコントローラへ転送したり、コントローラの動作状態（プログラムの進行状況）を監視する機能を有している。
【０００６】
なお、エンジニアリングツールは、表示器（Graphic Operation Terminal；ＧＯＴ）上に搭載させることもできる。コントローラに常時接続される表示器にエンジニアリングツールを搭載させれば、コントローラのプログラム編集や動作状態の監視を常時行うことができる。
【０００７】
マルチＣＰＵシステムにおいて、各コントローラは、シーケンスプログラムの一通りの実行を終えると、自己のメモリに格納した値（データ）の反映・更新の処理を実施する。このとき各コントローラは、ベースユニットのバックプレーンバスを介して、他のコントローラやユニットとの間でメモリの値の反映・更新に係る信号のやり取りを行う。
【０００８】
シーケンスプログラムの一通りの実行を「スキャン」と呼び、その後のメモリの値の反映・更新等を「ＥＮＤ処理」と呼ぶ。コントローラは、メモリの値の反映・更新（ＥＮＤ処理）を終えると、再びシーケンスプログラムの実行（スキャン）を行う。各コントローラがこのスキャンとＥＮＤ処理とを繰り返し行うことで所定の制御動作が成される。
【０００９】
コントローラが正しく動作しているかをデバッグするための機能として、サンプリングトレース機能が知られている。サンプリングトレース機能とは、指定されたタイミングで指定されたデバイスの状態を示すデータ（トレースデータ）を一定の周期（サンプリング周期）で取得（サンプリング）し、取得したトレースデータを所定のメモリ（サンプリングトレースメモリ）に格納するものである。例えばサンプリング周期が１スキャン毎の場合、トレースデータのサンプリングは各スキャンの実行後、即ちＥＮＤ処理の一部として実行される。従来のマルチＣＰＵシステムにおけるサンプリングトレースの詳細については、下記の非特許文献１〜４に記載されている。
【００１０】
トレースデータには、指定されたメモリの値の他、当該トレースデータのサンプリングのタイミングを示す時刻情報を付属情報として付すことができる。従来のシステムでは、時刻情報として、前回のサンプリングから今回のサンプリングまでの時間間隔を表すものが与えられていた。エンジニアリングツールを搭載した周辺機器（汎用コンピュータや表示器）は、各コントローラが蓄積したトレースデータを読み出し、その時刻情報を参照することにより、当該トレースデータの内容をタイミングチャートとして表示することができる。
【００１１】
１スキャンの所要時間はその処理内容により毎回異なるので、たとえサンプリング周期が１スキャン毎と決められていても、トレースデータのサンプリング間隔は一定にはならない。しかしトレースデータが時刻情報を含んでいれば、正しい時間軸でのタイミングチャートの表示が可能となる。
【００１２】
なお、マルチＣＰＵシステムにおけるサンプリングトレースは、複数のコントローラで個別に実行される。つまり、サンプリングトレースに係る設定（サンプリングの周期や回数の設定やデバイスの指定等）は、それぞれのコントローラごとに異なるものを設定することもできる。よって通常は、複数のコントローラがトレースデータを取得するタイミングは、個々のコントローラで一致するわけではない。
【００１３】
ところで、マルチＣＰＵシステムに用いられるコントローラとして、他のコントローラと同期したタイミングで、スキャンに対する割り込み処理を行う機能を有するものが知られている。この機能は「マルチＣＰＵ間同期割り込み機能」（以下「同期割り込み機能」）と呼ばれ、これにより複数のコントローラが互いに同期した割り込み処理を行うことが可能になる。
【００１４】
同期割り込み機能を持つコントローラは、複数のコントローラで同期して制御されるマルチＣＰＵ同期カウンタ（以下「同期カウンタ」）を備えている。各コントローラが同期カウンタの値に基づいて割り込み処理を行うことにより、複数のコントローラが同期した割り込み処理を行うことができる。
【００１５】
同期カウンタは、各コントローラが生成する所定のクロックに応じてカウントアップするものであるが、複数のコントローラのうち特定のコントローラ（マスタ）からバックプレーンバスに一定周期で送信される同期信号に応じてゼロリセットされるものである。このように各コントローラの同期カウンタは、共通の同期信号に応じてゼロリセットされるため、互いに同期したカウント値をとることができる。
【００１６】
同期割り込み機能を有するマルチＣＰＵシステムでは、各コントローラが、自己の同期カウンタがゼロリセットされたときに、スキャンに割り込んで同期割り込み用のシーケンスプログラム（同期割り込みプログラム）を実行する。つまり同期割り込みは、マスタのコントローラから送信される同期信号の周期で実行されることとなる。
【００１７】
同期割り込み機能を持つコントローラでは、サンプリングトレースのサンプリング周期を同期割り込みの周期に設定することも可能である。この場合、トレースデータのサンプリングは同期割り込み処理の一部として、同期割り込みプログラムの実行に続いて行われる。
【００１８】
サンプリング周期が同期割り込み周期に設定された場合、トレースデータのサンプリングは複数のコントローラでほぼ同時に行われる。但し、トレースデータのサンプリングは同期割り込みプログラムの実行に続いて行われ、また同期割り込みプログラム実行の所要時間はそのプログラムごとに異なるので、厳密にはサンプリングのタイミングが同時になるとは限らない。
【００１９】
もちろん、同期割り込み機能を有するコントローラでもトレースデータのサンプリング周期をスキャンの周期に設定することは可能である。その場合には、同期割り込み機能を持たないコントローラと同様に、トレースデータのサンプリングはＥＮＤ処理の一部として行われる。
【００２０】
各コントローラにサンプリングトレースの開始を要求する信号（サンプリングトレース開始要求）や、サンプリングトレースに係る設定の情報（トレース設定情報）は、エンジニアリングツールを搭載した周辺機器から、各コントローラに送信されるが、それらに対する処理は各コントローラのＥＮＤ処理の中で行われる。先に述べたように、ＥＮＤ処理のタイミングはコントローラごとに異なるため、エンジニアツールが全コントローラに同時にサンプリングトレース開始要求を送信しても、実際にトレースデータのサンプリングが開始されるタイミングは、コントローラごとに異なることになる。
【００２１】
従って、トレースデータに前回のサンプリングからの間隔を示す時刻情報が付与されていたとしても、それのみでは、異なるコントローラ間でのサンプリングタイミングの前後関係、即ち異なるコントローラが取得したトレースデータ同士の時間的な前後関係を特定することはできない。
【００２２】
また、トレースデータのサンプリング周期が同期割り込み周期に設定されている場合、トレースデータの取得を複数のコントローラが同期して行うものの、異なるコントローラ間でどのトレースデータ同士が同じタイミングでサンプリングされたものかを特定することはできなかった。
【００２３】
このようにマルチＣＰＵシステムでは、サンプリングトレースをコントローラごとに個別に実行させることができるが、異なるコントローラが取得したトレースデータのタイミングチャートの時間軸同士を正しく揃えることができなかった。例えば、複数のコントローラが取得したトレースデータを１つのタイミングチャート上で表示する場合に、各コントローラのタイミングチャートの時間的な関係を正しく表示できなかった。
【００２４】
マルチＣＰＵシステムは、複数のコントローラで１つの装置を制御するものであるため、そのデバッグには各コントローラが取得したトレースデータを総合しての解析が重要である。従来のマルチＣＰＵシステムでは、複数のコントローラにおける事象の前後関係をトレースデータから正しく把握できず、デバッグに時間を要するという問題があった。
【００２５】
なおトレースデータに時刻情報を付する技術としては、例えば以下の特許文献１〜４などがある。
【００２６】
【特許文献１】特開昭６２−２３２０５５号公報
【特許文献２】特許第２５８３６０２号公報
【特許文献３】特開平１０−２６０８６４号公報
【特許文献４】特開２０００−３４８００７号公報
【非特許文献１】「ＱＣＰＵユーザーズマニュアル（機能解説・プログラム基礎編）」三菱電機株式会社、マニュアル番号SH-080473、2008/01 改訂
【非特許文献２】「ＱＣＰＵユーザーズマニュアル（マルチＣＰＵシステム編） 」三菱電機株式会社、マニュアル番号SH-080475、2008/01 改訂
【非特許文献３】「GX Developer Version8 オペレーティングマニュアル」三菱電機株式会社、マニュアル番号SH-080356、2008/03 改訂
【非特許文献４】「プログラミングマニュアル（共通編）［Ｑ１７３Ｄ／Ｑ１７２Ｄ対応］」三菱電機株式会社、マニュアル番号IB-0300126、2007/10 改訂
【発明の開示】
【発明が解決しようとする課題】
【００２７】
特許文献１は、ホストＣＰＵを制御するコントローラ（入出力制御装置）におけるイベントトレースの時刻を取得するための技術が開示されている。特許文献１のシステムでは、各コントローラが、サンプリングトレースの実行状態（イベントトレース状態）へ移行する際、ホストＣＰＵの時計が示す時刻を記憶すると共に自己のタイマのカウント値をリセットし、その後に取得した各トレースデータ（イベントデータ）にそのカウント値を付して記憶する。それにより、ホストの時計に同期した時刻情報をイベントデータに付する機能を、コントローラの構成の複雑化を抑えつつ可能にしている。
【００２８】
特許文献１のコントローラを用いれば、各トレースデータに、特定の時刻を基準にしたカウント値が付されるため、それらの時間的な前後関係を特定することができる。しかし、各コントローラのタイマは、イベントトレース状態に移行する時にリセットされるだけなので、イベントトレース状態が長くなると各コントローラでタイマの誤差が累積して時刻情報にずれが生じ、それにより複数のコントローラのトレースデータの時間的な関係が正しく把握できなくなることが考えられる。
【００２９】
また特許文献２には、トレースデータを互いにやり取りする複数のＣＰＵを有するシステムにおいて、特定のＣＰＵから他のＣＰＵへ割り込み信号を送信する専用の送受信手段を設け、各ＣＰＵが、割り込み信号の受信時にトレースデータとして時刻情報（同期信号マーク）を格納する技術が開示されている。このシステムによれば、各ＣＰＵに割り込み信号が同時に受信されるため、各ＣＰＵは互いに時間ずれの無い時刻情報（同期信号マーク）を格納することができる。
【００３０】
しかし各コントローラが個別にトレースデータのサンプリングと行うマルチＣＰＵシステムでは、サンプリングのタイミングと割り込み信号の発生周期との関係によっては、どの同期信号マーク同士が一致したものであるかを判別できない場合がある。また、各ＣＰＵは、割り込み信号を受信するごとに同期信号マークをメモリに格納するため、例えばサンプリング周期がスキャン毎である場合には、取得したトレースデータの数に比して格納した同期信号マークの数が膨大となる。その結果、メモリに格納したデータに占める同期マークの割合が相対的に多くなり、実質的に意味のあるトレース点数が減ってしまう。
【００３１】
また、通常のデータのやり取りを行うバスとの送受信手段とは別に、割り込み信号専用の送受信手段が設けられるため、コントローラにそれ専用のインターフェイスが必要になると共に、ベースユニットにもそれ専用の信号線が必要となるため、コストの上昇および構成の複雑化も懸念される。
【００３２】
特許文献３は、複数のプロセッサを含むマイクロプロセッサシステムにおいて、サンプリングトレースの開始時に各プロセッサのカウンタを同時にリセットする技術が開示されている。各プロセッサのカウンタが同時にリセットされるため、トレースデータに特定の時刻を基準にしたカウント値（時刻情報）が付される。それにより、異なるプロセッサのトレースデータ同士の時間的な前後関係を特定することができるが、特許文献１と同様に、サンプリングトレースを行う期間が長くなると各プロセッサのカウンタの誤差が累積し、時刻情報の精度が低下することが考えられる。
【００３３】
特許文献４には、複数のプロセッサに共通の時刻情報を提供する同期制御ボードを設けたシステムが開示されている。当該システムによれば、各プロセッサは、トレースデータと共に全プロセッサ間で共通の時刻情報を取得できるので、各トレースデータの時間関係を特定できる。
【００３４】
しかし、同期制御ボードから時刻を取得するためのインターフェイスをコントローラに設ける必要が生じるため、コントローラのコスト上昇を伴う。また同期制御ボードが別途必要になることから、システム構築にかかる費用の上昇も招く。
【００３５】
本発明は以上のような課題を解決するためになされたものであり、複数のコントローラを含むマルチＣＰＵシステムにおいて、各コントローラが取得したトレースデータの時間的な相互関係を正しく把握できる時刻情報を得ることが可能なコントローラを得ることを第１の目的とし、当該コントローラを簡易な構成により実現することを第２の目的とする。
【課題を解決するための手段】
【００３６】
本発明の第１の局面に係るマルチコントローラシステムは、指定された周期でトレースデータを収集するサンプリングトレース機能および互いに同期したタイミングでの割り込み処理を行う同期割り込み機能を有する複数のコントローラを備えたマルチコントローラシステムであって、前記複数のコントローラは、１つの第１のコントローラおよび１つ以上の第２のコントローラを含み、第１および第２のコントローラの各々は、所定の共通カウント値を保持する共通カウント値保持部と、前記共通カウント値を制御する共通カウント値制御部とを備え、前記第２のコントローラは、前記サンプリングトレースの実行開始時に、前記第１のコントローラの前記共通カウント値を取得して自己の前記共通カウント値保持部に保持させ、第１および第２のコントローラ各々の前記共通カウント値制御部は、前記サンプリングトレースが実行される期間、前記共通カウント値を前記同期割り込み処理毎にカウントアップし、第１および第２のコントローラの各々は、取得したトレースデータにその取得時の前記共通カウント値を含む時刻情報を付するものである。
【００３７】
本発明の第２の局面に係るマルチコントローラシステムは、指定された周期でトレースデータを収集するサンプリングトレース機能および互いに同期したタイミングでの割り込み処理を行う同期割り込み機能を有する複数のコントローラを備えたマルチコントローラシステムであって、前記複数のコントローラは、１つの第１のコントローラおよび１つ以上の第２のコントローラを含み、第１および第２のコントローラの各々は、所定の共通カウント値を保持する共通カウント値保持部と、前記共通カウント値を制御する共通カウント値制御部とを備え、前記共通カウント値制御部は、前記共通カウント値が同期割り込み処理の周期毎に増加した如き値をとるように、当該共通カウント値を再計算することが可能であり、前記第２のコントローラは、前記サンプリングトレースの実行開始時に、前記第１のコントローラの前記共通カウント値を取得して自己の前記共通カウント値保持部に保持させ、第１および第２のコントローラの各々は、取得したトレースデータにその取得時に再計算した前記共通カウント値を含む時刻情報を付するものである。
【発明の効果】
【００３８】
本発明によれば、トレースデータの時刻情報として、複数のコントローラ間で共通した値をとる共通カウント値が付与されるため、異なるコントローラが取得したトレースデータ同士でもそれらの時間的な前後関係を正しく把握することができる。よってトレースデータを用いてタイミングチャートを作成した際、複数のコントローラのタイミングチャートの時間軸を正しく揃えて表示することが可能になり、デバッグ作業の効率化に寄与することができる。
【００３９】
特に第２の局面においては、特定のコントローラで同期割り込み処理の消滅が生じても、共通カウント値のずれが生じないため、同期割り込み処理が消滅した後もトレースデータに正しい時刻場合が付される。その結果、トレースデータを解析して、本来あってはならない同期割り込み処理の消滅を引き起こしている原因を特定することが格段に容易となる。
【００４０】
また本発明は、特別なハードウェア（例えば特許文献４の同期制御ボード）を用いることなく、例えば複数のコントローラで共有される共有メモリの機能を利用して簡易な構成により実現可能である。そのためコントローラの大幅な設計変更や、システムへの新たなハードウェアの導入の必要がない。従って、コントローラ自体の製造コスト並びにシステムの構築にかかるコストの上昇が抑えられるという利点もある。
【発明を実施するための最良の形態】
【００４１】
＜実施の形態１＞
図１は、マルチＣＰＵシステムの構成例を示す図である。当該システムは、バックプレーンバス１８を含むベースユニット１７に装着された第１のプログラマブルコントローラ（以下「第１のＰＣ」）１、第２のプログラマブルコントローラ（以下「第２のＰＣ」）１９、入出力ユニット２０から構成されている。入出力ユニット２０は、第１および第２のＰＣ１，１９と制御対象の装置（不図示）との間で、信号のやり取りを行うための配線機器等である。以下の各実施の形態では、マルチＣＰＵシステムが図１の構成を有していると仮定して説明する。
【００４２】
第１のＰＣ１および第２のＰＣ１９には、周辺機器２１（例えば汎用コンピュータや表示器）が、通信ケーブル２２を介して接続している。周辺機器２１上では、第１および第２のＰＣ１，１９に所定の動作を行わせるためのシーケンスプログラムの作成・編集を支援するエンジニアリングツールが動作している。
【００４３】
よって使用者は、周辺機器２１を用いることで、シーケンスプログラムの作成・編集の他、当該シーケンスプログラムの第１および第２のＰＣ１，１９への転送や、第１および第２のＰＣ１，１９の動作状態（シーケンスプログラムの進行状況）の監視等を行うことができる。また周辺機器２１は、第１および第２のＰＣ１，１９が取得したトレースデータを読み出し、当該トレースデータおよびそれに付された時刻情報を用いて、タイミングチャート作成することもできる。
【００４４】
図２は、実施の形態１に係るプログラマブルコントローラの構成を示す図である。本実施の形態において、第１および第２のＰＣ１，１９は、共に図２の構成を有している。
【００４５】
図２の如く、本実施の形態のプログラマブルコントローラ（以下「ＰＣ」）は、ＣＰＵ２、通信インターフェイス（Ｉ／Ｆ）６、デバイスメモリ７、シーケンスプログラムメモリ８、サンプリングトレースメモリ９、ＣＰＵクロック生成部１１、内部カウンタ１２およびバックプレーンバスＩ／Ｆ１３から構成されており、それらは内部バス１０を介して接続されている。
【００４６】
ＣＰＵ２は、各種プログラムの実行や、各メモリ（デバイスメモリ７、シーケンスプログラムメモリ８およびサンプリングトレースメモリ９）に対する書き込み／読み出し、通信Ｉ／Ｆ６およびバックプレーンバスＩ／Ｆ１３を用いた通信などの制御を行う演算回路である。ＣＰＵ２は、ＣＰＵクロック生成部１１が生成する内部クロックに基づいて動作する。内部カウンタ１２は、当該内部クロックに応じてカウントアップするものである。
【００４７】
内部カウンタ１２のカウントアップは、内部クロックの１周期毎にカウントアップするものでもよいし、複数周期毎にカウントアップするものでもよい。一般に、内部カウンタ１２は、１［μｓｅｃ］あるいはそれよりも高精度な値をＣＰＵ２に提供する。また、内部カウンタ１２はフリーランカウンタであり、例えば１６ｂｉｔカウンタであれば、カウンタ値が６５５３５になると次のカウントアップで０に戻る、という動作を繰り返す。
【００４８】
従来のＰＣでは、この内部カウンタ１２のカウント値がトレースデータの時刻情報として付され、その時刻情報からサンプリング間隔が算出されていた。しかし上述のように、その手法では異なるＰＣが取得したトレースデータの時間的な前後関係を特定することはできない。
【００４９】
通信Ｉ／Ｆ６は、通信ケーブル２２を介して周辺機器２１との通信を行うための接続回路であり、またバックプレーンバスＩ／Ｆ１３は、ベースユニット１７のバックプレーンバス１８を介して、当該ベースユニット１７に装着された他のユニット（他のＰＣや入出力ユニット２０）との通信を行うための接続回路である。バックプレーンバスＩ／Ｆ１３が備える共有メモリ１４には、ベースユニット１７に接続された他のＰＣと共有するデータが保存される。
【００５０】
シーケンスプログラムメモリ８は、ＣＰＵ２が実行する各シーケンスプログラムを格納するためのものである。シーケンスプログラムは、周辺機器２１から通信ケーブル２２を経て当該ＰＣに送られてくる。デバイスメモリ７はシーケンスプログラムの実行に必要なパラメータや、当該シーケンスプログラムによる演算結果等のデータを保持することができる。またそれらのデータは、必要に応じてバックプレーンバスＩ／Ｆ１３の共有メモリ１４にも記録することができる。
【００５１】
ここで、当該ＰＣの基本的な動作について説明する。ＰＣの主要な動作はシーケンスプログラムの実行（スキャン）とＥＮＤ処理の繰り返しである。ＣＰＵ２のシーケンスプログラム実行部３は、シーケンスプログラムメモリ８に格納されているシーケンスプログラムを読み出してそれを実行する。そして当該シーケンスプログラムに基づいて、デバイスメモリ７や共有メモリ１４に保持されている値を読み出して演算し、またその演算結果を再びデバイスメモリ７や共有メモリ１４に書き込む。
【００５２】
ＣＰＵ２は、シーケンスプログラムの一通りの実行（スキャン）を終えると、バックプレーンバス１８を介したメモリの値の反映・更新、すなわちＥＮＤ処理を行う。ＥＮＤ処理では、例えばＣＰＵ２がバックプレーンバスＩ／Ｆ１３を制御して入出力ユニット２０の入力信号および出力信号の状態を読み出し、それらをデバイスメモリ７の入力（Ｘ）デバイスの値および出力（Ｙ）デバイスの値に反映させる。またマルチＣＰＵシステムでは、他のＰＣとの信号（データ）のやり取りもＥＮＤ処理の中で行われ、それにより複数のＰＣ間でのデータの共有が成される。
【００５３】
他のＰＣと共有するデータは、バックプレーンバスＩ／Ｆ１３の共有メモリ１４に格納されている。共有メモリ１４は他のＰＣからもアクセス可能となっており、図１の如くベースユニット１７に第１および第２のＰＣ１，１９が装着されて成るシステムでは、第１および第２のＰＣ１，１９それぞれの共有メモリ１４に、第１のＰＣ１のデータを書き込むためのエリア（以下「第１のＰＣ用エリア」）と、第２のＰＣ１９のデータを書き込むためのエリア（以下「第２のＰＣ用エリア」）とが確保される。
【００５４】
第１のＰＣ１が自己の共有メモリ１４の第１のＰＣ用エリアに書き込んだ値は、第２のＰＣ１９のＥＮＤ処理において第２のＰＣ１９に読み取られ、当該第２のＰＣ１９の共有メモリ１４の第１のＰＣ用エリアに反映される。また第２のＰＣ１９が自己の共有メモリ１４の第２のＰＣ用エリアに書き込んだ値は、第１のＰＣ１のＥＮＤ処理において第１のＰＣ１に読み取られ、当該第１のＰＣ１の共有メモリ１４の第２のＰＣ用エリアに反映される。このように第１および第２のＰＣ１，１９が互いのデータを読み取り、それを自己の共有メモリ１４に反映させることにより、第１および第２のＰＣ１，１９間でデータが共有化される。
【００５５】
ＰＣは、ＥＮＤ処理を終えると再びシーケンスプログラムの実行（スキャン）を行う。ＰＣがこのようにスキャンとＥＮＤ処理とを繰り返し行うことよって、当該ＰＣによる所定の制御動作が成される。このようなシーケンスプログラムの実行形式は「スキャン実行タイプ」と呼ばれる。
【００５６】
また本実施の形態に係るＰＣは、他のコントローラと同期したタイミングで、スキャンに対する割り込み処理を行う同期割り込み機能を備えている。同期割り込み機能を有するＰＣにおいては、図２の如くバックプレーンバスＩ／Ｆ１３に、バスＩ／Ｆクロック生成部１５および同期カウンタ１６が設けられる。バスＩ／Ｆクロック生成部１５は、所定周波数のバスＩ／Ｆクロックを生成する。
【００５７】
同期カウンタ１６は、当該バスＩ／Ｆクロックに応じてカウントアップし、且つバックプレーンバス１８に周期的に現れる同期信号に応じてゼロリセットするものである。同期信号は、ベースユニット１７に装着される何れかのユニットが出力すればよいが、通常は複数のＰＣのうちの一つ（例えばベースユニットの第０番スロットに装着されるＰＣ）が出力する。
【００５８】
図１のシステムでは、ベースユニット１７の第０番スロットに第１のＰＣ１が装着されていると仮定し、当該第１のＰＣ１が同期信号を出力するものとする。つまり第１および第２のＰＣ１，１９それぞれの同期カウンタ１６は、第１のＰＣ１が出力する同期信号に応じてゼロリセットされる。以下、同期信号を生成するＰＣ（ここでは第１のＰＣ１）を「マスタＰＣ」（第１のコントローラ）、それ以外のＰＣ（ここでは第２のＰＣ１９）を「スレーブＰＣ」（第２のコントローラ）と称する。
【００５９】
マスタＰＣである第１のＰＣ１は、同期カウンタ１６のカウント値が特定の値になると、バックプレーンバスＩ／Ｆ１３を介してバックプレーンバス１８へ同期信号を送出する。それによりスレーブＰＣである第２のＰＣ１９の同期カウンタ１６がゼロリセットされるが、このとき第１のＰＣ１自身の同期カウンタ１６もゼロリセットされる。よって第１および第２のＰＣ１，１９の同期カウンタ１６は、特定の同期周期（例えば０．８８８［ｍｓｅｃ］）で、同時にゼロリセットされることになる。それにより第１および第２のＰＣ１，１９の同期カウンタ１６は、互いに同期したカウント値をとることができる。
【００６０】
各ＰＣの同期カウンタ１６は、各自のバスＩ／Ｆクロック生成部１５が生成するバスＩ／Ｆクロックに基づいてカウントアップするが、それらがゼロリセットするタイミングはいずれもマスタＰＣが出力する同期信号により規定されるので、いつも同時にゼロリセットされる。よって、同期カウンタ１６のカウント値（バスＩ／Ｆクロックの周波数）に、各ＰＣの個体差による誤差が生じていたとしても、同期カウンタ１６がゼロリセットされる毎にその誤差もゼロにされる。従って、同期カウンタ１６のカウント値は、精度良く互いに同期したカウント値をとることができる。
【００６１】
なお、スレーブＰＣの同期カウンタ１６は、マスタＰＣからの同期信号に応じてゼロリセットされるだけでなく、自身のカウント値が上記「特定の値」（マスタＰＣが同期信号を出力するときの値）に達した場合にもゼロリセットするように動作してもよい。それにより、例えばノイズの影響により一時的にマスタＰＣからの同期信号を受信できなかった場合でも、第１および第２のＰＣ１，１９の同期カウンタ１６は、互いにほぼ同期したカウント値をとることができる。つまりノイズの影響による同期カウンタ１６の誤動作を防止することができる。
【００６２】
各ＰＣは、自己の同期カウンタ１６がゼロリセットされたときにスキャンに対する割り込み処理を行う。それにより複数のＰＣは、互いに同期したタイミングでの割り込み処理（同期割り込み処理）を行うことができる。なお、同期割り込み処理で実行されるシーケンスプログラム（同期割り込みプログラム）も、周辺機器２１から送信されて、シーケンスプログラムメモリ８に格納されており、その実行はＣＰＵ２のシーケンスプログラム実行部３により行われる。
【００６３】
さらに本実施の形態に係るＰＣは、サンプリングトレース機能を備えている。つまり各ＰＣは、指定デバイス（デバイスメモリ７や共有メモリ１４）の指定アドレスに保持されている値（トレースデータ）を、指定されたサンプリング周期で収集することができる。
【００６４】
各ＰＣのサンプリングトレースの各種設定（デバイスの指定、サンプリング周期、サンプリング回数の指定等）は、周辺機器２１上で行われる。周辺機器２１は、サンプリングトレースの実行に先立って、その設定の情報（トレース設定情報）を通信ケーブル２２を介してＰＣへ転送する。トレース設定情報を受信したＰＣは、それをサンプリングトレースメモリ９に格納する。
【００６５】
サンプリングトレースを実行する場合、周辺機器２１からサンプリングトレース開始要求が各ＰＣに送信される。ＰＣはサンプリングトレース開始要求を受信するとサンプリング機能がオン状態になり、ＣＰＵ２のサンプリングトレース実行部４が、サンプリングトレースメモリ９からトレース設定情報を読み出し、それに基づいてトレースデータを取得する。
【００６６】
本実施の形態に係るＰＣは、サンプリングトレースのサンプリング周期として、スキャン周期および同期割り込みの周期のいずれかを設定することができる。サンプリング周期がスキャン周期に設定された場合、ＰＣはスキャン実行後のＥＮＤ処理の中でサンプリングトレース処理（トレースデータの取得および格納）を実行する。またサンプリング周期が同期割り込み周期に設定された場合には、ＰＣはスキャン実行中に一定周期で生じる同期割り込み処理の中でサンプリングトレース処理を実行する。
【００６７】
サンプリングトレース実行部４の時刻情報付与部５は、トレースデータをサンプリングトレースメモリ９に書き込む際に、各トレースデータに時刻情報を付す。従来のマルチＣＰＵシステムにおいてトレースデータに付される時刻情報はサンプリング間隔を示すのみであったため、異なるＰＣ間でのトレースデータの時間的な関係を正確に知ることができなかったが、当該時刻情報付与部５はそれを可能にする時刻情報を付すことができる。以下、そのための構成を説明する。
【００６８】
図２に示すように、本実施の形態のＰＣでは、共有メモリ１４内に共通カウント値保持部２４並びに状態指示値保持部２５が設けられており、ＣＰＵ２はそれらに保持させる値を制御する共通カウント値制御部２３を備えている。共通カウント値制御部２３が、共通カウント値保持部２４に保持させる値を「共通カウント値」、状態指示値保持部２５に保持させる値を「状態保持値」とそれぞれ称する。
【００６９】
共通カウント値保持部２４が保持する共通カウント値は、複数のＰＣで共通の値をとり、且つ、同期カウンタ１６がゼロリセットされる毎にカウントアップするものである。詳細は後述するが、本実施の形態ではこの共通カウント値を用いることによって、各ＰＣのトレースデータの時間的な関係を正確に知ることが可能な時刻情報を得ている。
【００７０】
また状態指示値保持部２５が保持する状態指示値は、共通カウント値保持部２４の動作状態を示すものであり、共通カウント値保持部２４が未稼働状態なら０を、稼働状態なら１を、またエラー停止状態なら２をとるように制御される。
【００７１】
以下、本実施の形態に係るマルチＣＰＵシステム（図１）の動作を説明する。図３はその動作を説明するための図であり、同図の横方向は時間軸に対応している。第１および第２のＰＣ１，１９は、共に図２に示した構成を有しているが、図３ではそのうちの主要な要素のみを示している。
【００７２】
まず図３を参照し、本システムの全体的な動作について説明する。図３に示すように、第１および第２のＰＣ１，１９それぞれのＣＰＵ２（シーケンスプログラム実行部３）は、スキャン（ＳＣＡＮ）の実行とその後のＥＮＤ処理（ＥＮＤ）を繰り返し行うが、一定期間ごとにスキャン（ＳＣＡＮ）に対する同期割り込み処理（ＩＮＴ）を実行する。ＥＮＤ処理の実行タイミングは、スキャン（ＳＣＡＮ）におけるシーケンスプログラムによって異なるため、基本的に第１および第２のＰＣ１，１９で異なるタイミングになる。それに対し、同期割り込み処理（ＩＮＴ）は、第１および第２のＰＣ１，１９で同期して実行される。
【００７３】
具体的には、同期割り込み処理（ＩＮＴ）は、第１および第２のＰＣ１，１９の各々で同期カウンタ１６がゼロリセットされるタイミングで実行される。マスタＰＣである第１のＰＣ１は、自己の同期カウンタ１６のカウント値が所定の値に達する毎に同期信号（ＳＹＮ）をベースユニット１７へ送出し、それと共に当該同期カウンタ１６をゼロリセットする。第２のＰＣ１９はその同期信号（ＳＹＮ）に応じて自己の同期カウンタ１６をゼロリセットする。つまり第１および第２のＰＣ１，１９の同期カウンタ１６は、同期してゼロリセットされる。その結果、第１および第２のＰＣ１，１９間で、同期割り込み処理（ＩＮＴ）の実行開始タイミングが揃うことになる。
【００７４】
図３の如く、第１および第２のＰＣ１，１９の共通カウント値保持部２４の値（共通カウント値）は、ＰＣがサンプリングトレース状態（サンプリングトレース機能のオン状態）になるとカウントアップを開始する。状態指示値保持部２５の値（状態指示値）は、共通カウント値のカウントアップが開始されると１に設定される（言い換えれば、状態指示値が１のとき、そのＰＣはサンプリングトレース状態である）。
【００７５】
共通カウント値は、同期カウンタ１６がゼロリセットされる毎にカウントアップされ、且つ、第１および第２のＰＣ１，１９で互いに同じ値をとるように制御される。図３の例では、第１のＰＣ１の共通カウント値は、第２のＰＣ１９よりも先にカウントアップを始めており、第２のＰＣ１９が共通カウント値のカウントアップを開始する時点で既に「３」になっている。この場合、第２のＰＣ１９は、自己の共通カウント値を「３」からカウントアップする。これにより、第１および第２のＰＣ１，１９の共通カウント値は互いに同じ値になる。
【００７６】
ここで、本実施の形態のマルチＣＰＵシステムでは、サンプリングトレースを行う場合、まずマスタＰＣである第１のＰＣ１がサンプリングトレース状態になり、それに続いてスレーブＰＣである第２のＰＣ１９がサンプリングトレース状態になるように制御されている。また、第１および第２のＰＣ１，１９において、サンプリングトレースを開始するための処理は、それぞれのＥＮＤ処理の中で行うように規定されている。
【００７７】
図３に示されているように、第１のＰＣ１（マスタＰＣ）は、サンプリングトレース開始要求を受けた直後のＥＮＤ処理からサンプリングトレース状態になるが、第２のＰＣ１９（スレーブＰＣ）はサンプリングトレース開始要求を受けてもすぐにはサンプリングトレース状態にならず、第１のＰＣ１（マスタＰＣ）が先にサンプリングトレース状態になるのを待ち、その直後のＥＮＤ処理からサンプリングトレース状態になる。
【００７８】
以下、スレーブＰＣが、サンプリングトレース開始要求を受けてからマスタＰＣがサンプリングトレース状態になるのを待っている間の状態を「サンプリングトレース開始待ち状態」と称す。スレーブＰＣは、サンプリングトレース開始要求を受けるとサンプリングトレース待ち状態に移行し、その後のＥＮＤ処理の際にマスタＰＣがサンプリングトレース状態になっていれば自己もサンプリングトレース状態に移行する。
【００７９】
共通カウント値保持部２４の値（共通カウント値）は、そのＰＣがサンプリングトレース状態になってからカウントアップされるので、カウントアップが開始されるタイミングは第１のＰＣ１の方が第２のＰＣ１９よりも早いこととなる。しかし第２のＰＣ１９の共通カウント値は、そのカウントアップの際、必ず第１のＰＣ１の共通カウント値と同じ値をとるように制御される。
【００８０】
例えば図３のように、第１のＰＣ１が先にサンプリングトレース状態になって共通カウント値のカウントアップをはじめ、その後第２のＰＣ１９がサンプリングトレース状態になった時点で既に「３」になっていれば、第２のＰＣ１９の共通カウント値は「３」からカウントアップを開始する。その後は、第１および第２のＰＣ１，１９が同期して共通カウント値をカウントアップするので、それ以降は両者の共通カウント値は互いに同じ値をとりつつカウントアップされることになる。
【００８１】
このように本実施の形態のマルチＣＰＵシステムでは、第１および第２のＰＣ１，１９は、サンプリングトレース状態であるとき互いに同じ値をとる共通カウント値を保持する。よってその共有カウント値をトレースデータに付する時刻情報に含ませれば、各トレースデータの時間的な前後関係を正しく把握することができる。
【００８２】
また上記のように、第１および第２のＰＣ１，１９の同期カウンタも基本的に互いに同じ値をとる。そのカウントアップの速度はバスＩ／Ｆクロックの周波数に相当し、共通カウント値のカウントアップ速度よりも高いので、時刻情報に同期カウンタ１６のカウント値（同期カウンタ値）も含ませれば、より分解能の高い時刻情報を得ることができる。しかも同期カウンタ１６は、共通カウント値がカウントアップされるときにゼロリセットされるので、同期カウンタ値に各ＰＣの個体差による誤差が蓄積されることは防止される。従って、サンプリングトレース状態の長期間にわたる場合であっても、時刻情報の精度を高く維持できる。
【００８３】
図４〜図８は、本実施の形態に係るＰＣの動作を示すフローチャートである。図４は、スキャン実行後に行われるＥＮＤ処理（ＥＮＤ）における全体的な流れを示している。同図の如く、ＥＮＤ処理では、サンプリングトレース処理（Ｍ１）と、各メモリに格納された値の反映・更新処理（Ｍ２）と、周辺機器２１との通信並びにその通信内容に応じた処理を行う通信処理（Ｍ３）とが、この順に実行される。図５、図６および図７は、それらサンプリングトレース処理（Ｍ１）、メモリ値の反映・更新処理（Ｍ２）および通信処理（Ｍ３）それぞれの詳細を示している。
【００８４】
サンプリングトレース処理（Ｍ１）では、図５の如く、まずＰＣ自身がサンプリングトレース状態か否かの確認が行われる（Ｓ１０１）。ＰＣがサンプリングトレース状態であれば、そのサンプリング周期の設定が確認される（Ｓ１０２）。サンプリング周期がスキャン周期に設定されていれば、それに続けてトレースデータのサンプリング（Ｓ１０３）が行われる。取得されたトレースデータは、そのときの共通カウント値が時刻情報として付与され（Ｓ１０４）、サンプリングトレースメモリ９に格納される。
【００８５】
このようにサンプリングトレース処理（Ｍ１）では、ＰＣがサンプリングトレース状態であり、且つ、そのサンプリング周期がスキャン周期の場合にトレースデータの取得および時刻情報の付与が行われ、それ以外の場合には何も行われない。
【００８６】
メモリ値の反映・更新処理（Ｍ２）では、図６の如く、ＰＣはデバイスメモリ７の値の反映および更新（Ｓ２０１）を行い、さらに他のＰＣ（第１のＰＣ１）共有メモリ１４の値を読み出してそれを自己の共有メモリ１４の値に反映させる（Ｓ２０２）。そしてＰＣ自身がサンプリングトレース開始待ち状態か否かが確認される（Ｓ２０３）。サンプリングトレース開始待ち状態であれば、当該ＰＣはマスタＰＣの状態指示値保持部２５の値（状態指示値）を確認する（Ｓ２０４）。
【００８７】
このときマスタＰＣの状態指示値が１（即ち、マスタＰＣがサンプリングトレース状態）であれば、マスタＰＣの共通カウント値保持部２４の値（共通カウント値）を取得してそれを自己の共通カウント値保持部２４に上書きすると共に、自己の状態指示値を１にする（Ｓ２０５）。そして当該ＰＣはサンプリングトレース状態に移行する（自己のサンプリングトレース機能をオンにする）。
【００８８】
このように各ＰＣは、メモリ値の反映・更新処理（Ｍ２）において、自身がサンプリングトレース開始待ち状態であり、且つ、マスタＰＣがサンプリングトレース状態になっていれば、自身をサンプリングトレース状態に移行させる。
【００８９】
通信処理（Ｍ３）では、図７の如く、ＰＣは周辺機器２１から送信されてきた信号にトレース設定情報が含まれているかを確認し（Ｓ３０１）、含まれていればそれをサンプリングトレースメモリ９に保存する（Ｓ３０２）。さらに同信号に、サンプリングトレース開始要求が含まれているか確認する（Ｓ３０３）。サンプリングトレース開始要求が含まれていれば、ＰＣ自身がマスタＰＣであるかを確認する（Ｓ３０４）。当該ＰＣがマスタＰＣであれば、自己の共通カウント値保持部２４を稼働させるべく共通カウント値に１を付与すると共に状態指示値を１に設定し（Ｓ３０６）、当該ＰＣはサンプリングトレース状態に移行する（Ｓ３０７）。一方、当該ＰＣがスレーブＰＣであれば、サンプリングトレース開始待ち状態に移行する（Ｓ３０５）。
【００９０】
このようにマスタＰＣは、サンプリングトレース開始要求を受けると直後の通信処理（Ｍ３）ですぐにサンプリングトレース状態に移行するが、スレーブＰＣは、サンプリングトレース開始要求を受けると一旦サンプリングトレース待ち状態に移行する。なお、スレーブＰＣがサンプリングトレース状態に移行するのは、その後のＥＮＤ処理におけるメモリ値の反映・更新処理（Ｍ２）のステップＳ２０６においてである。
【００９１】
また図８は、マスタＰＣ（ここでは第１のＰＣ１）が出力する同期信号（ＳＹＮ）の周期で、スキャン（ＳＣＡＮ）に割り込んで実行される同期割り込み処理（ＩＮＴ）におけるＰＣの動作を示している。同図の如く、同期割り込み処理においては、共通カウント値のカウントアップ処理（Ｍ４）、同期割り込みプログラム実行処理（Ｍ５）および同期サンプリングトレース処理（Ｍ６）がこの順に実行される。
【００９２】
図８の如く、共通カウント値のカウントアップ処理（Ｍ４）では、自己の状態指示値を確認し（Ｓ４０１）、それが１であれば共通カウント値をカウントアップする（Ｓ４０２）。同期割り込みプログラム実行処理（Ｍ５）では、実行すべき同期割り込みプログラムがサンプリングトレースメモリ９に存在するかを確認し（Ｓ５０１）、存在すればそれを読み出して実行する（Ｓ５０２）。
【００９３】
同期サンプリングトレース処理（Ｍ６）では、まずＰＣ自身がサンプリングトレース状態か否か確認され（Ｓ６０１）、サンプリングトレース状態であれば、そのサンプリング周期の設定が確認される（Ｓ６０２）。そしてサンプリング周期が同期割り込み周期に設定されていれば、当該ＰＣはトレースデータのサンプリング（Ｓ６０３）を行い、取得したトレースデータに時刻情報として共通カウント値を付与して（Ｓ６０４）、サンプリングトレースメモリ９に格納する。このように同期サンプリングトレース処理（Ｍ６）では、ＰＣがサンプリングトレース状態であり、且つ、そのサンプリング周期が同期割り込み周期の場合に、トレースデータの取得および時刻情報の付与が行われ、それ以外の場合には何も行われない。
【００９４】
以下、図３〜図８を参照して、本実施の形態のマルチＣＰＵシステムにおけるサンプリングトレースに係る動作を説明する。
【００９５】
サンプリングトレースの実行に先立ち、周辺機器２１上で第１および第２のＰＣ１，１９各々に対するトレース設定情報（サンプリングトレースの対象とするデバイス及びそのアドレスの指定、サンプリング周期の指定等を含む）が作成される。作成されたトレース設定情報は通信ケーブル２２を通して周辺機器２１から第１および第２のＰＣ１，１９に送信される。以下では説明の簡単のため、トレース設定情報はサンプリングトレース開始要求と共に周辺機器２１から送信されるものとする。もちろん実際の周辺機器２１は、サンプリングトレース開始要求とは独立にトレース設定情報だけを第１および第２のＰＣ１，１９に送信することも可能である。
【００９６】
まず、サンプリングトレースのサンプリング周期がスキャン周期に設定された場合の動作を説明する。この場合、第１および第２のＰＣ１，１９は、トレースデータのサンプリングをＥＮＤ処理毎に行うことになる。
【００９７】
図３に示すように、サンプリングトレースを実行する前、第１および第２のＰＣ１，１９の両方において、共通カウント値保持部２４の値（共通カウント値）は０であり（共通カウント値保持部２４は未稼働状態）、状態指示値保持部２５の値（状態指示値）は０に設定されている。
【００９８】
サンプリングトレースを実行させる場合、周辺機器２１から第１および第２のＰＣ１，１９へと、サンプリングトレース開始要求およびトレース設定情報が送信される。当該トレース設定情報には、サンプリング周期がスキャン周期である旨の指定が含まれている。
【００９９】
ここでは図３の如く、サンプリングトレース開始要求が周辺機器２１から送信された後、マスタＰＣである第１のＰＣ１よりも先に、スレーブＰＣである第２のＰＣ１９がＥＮＤ処理（ＥＮＤ）が行われたとする。
【０１００】
当該ＥＮＤ処理では、第２のＰＣ１９において、図４〜図７で説明したサンプリングトレース処理（Ｍ１）、メモリ値の反映・更新処理（Ｍ２）、通信処理（Ｍ３）が順次行われる。この時点では、第２のＰＣ１９はサンプリングトレース状態ではないため、サンプリングトレース処理（Ｍ１）では何も行われない。また第２のＰＣ１９はサンプリングトレース開始待ち状態でもないため、メモリ値の反映・更新処理（Ｍ２）では、デバイスメモリ７の反映・更新（Ｓ２０１）と、自己の共有メモリ１４の値の反映・更新（Ｓ２０１，Ｓ２０１）だけが行われる。なお、図３における参照符号「ＲＯ」の矢印は、第１および第２のＰＣ１，１９間におけるデータの読み出し信号を示している。
【０１０１】
但し、第２のＰＣ１９はサンプリングトレース開始要求およびトレース設定情報を受信しているので、図７に示す通信処理（Ｍ３）では、当該第２のＰＣ１９はトレース設定情報をサンプリングトレースメモリ９に保存する（Ｓ３０２）。また第２のＰＣ１９はスレーブＰＣであるので、サンプリングトレース開始待ち状態へと移行する（Ｓ３０５）。第２のＰＣ１９は、通信処理（Ｍ３）を終えるとスキャン実行処理（ＳＣＡＮ）に戻る。
【０１０２】
スキャン実行処理（ＳＣＡＮ）の間に、第１のＰＣ１（マスタＰＣ）の同期カウンタ１６の値が所定の値に達すると、第１のＰＣ１はバックプレーンバス１８に同期信号（ＳＹＮ）を出力する。それに応じて、第１および第２のＰＣ１，１９は、各々の同期カウンタ１６をゼロリセットすると共に、図８に示す同期割り込み処理（ＩＮＴ）を実行する。
【０１０３】
この時点では、第１および第２のＰＣ１，１９は両方とも、その状態指示値は０であり、またサンプリングトレース状態ではない。よってこのときの同期割り込み処理（ＩＮＴ）では、第１および第２のＰＣ１，１９は、プログラム実行処理（Ｍ５）で必要に応じて同期割り込みプログラムを実行するのみであり（Ｓ５０１，Ｓ５０２）、共通カウント値のカウントアップ処理（Ｍ４）および同期割り込みプログラム実行処理（Ｍ５）では何も行わない。第１および第２のＰＣ１，１９は、同期割り込み処理を終えると、それぞれスキャン実行処理（ＳＣＡＮ）に戻る。
【０１０４】
続いて、第１のＰＣ１のＥＮＤ処理（ＥＮＤ）が行われたとする。今度は第１のＰＣ１において、図４〜図７に示したサンプリングトレース処理（Ｍ１）、メモリ値の反映・更新処理（Ｍ２）、通信処理（Ｍ３）が順次行われる。この時点では、第１のＰＣ１もサンプリングトレース状態ではないため、サンプリングトレース処理（Ｍ１）では何も行われない。また第１のＰＣ１はサンプリングトレース開始待ち状態でもないため（マスタＰＣは最も早くサンプリングトレース状態になるので、サンプリングトレース開始待ち状態になることは無い）、メモリ値の反映・更新処理（Ｍ２）では、デバイスメモリ７の反映・更新（Ｓ２０１）と、共有メモリ１４の値の反映・更新（Ｓ２０１）だけが行われる。
【０１０５】
但し、第１のＰＣ１も、サンプリングトレース開始要求およびトレース設定情報を受信しているので、図７に示す通信処理（Ｍ３）ではトレース設定情報をサンプリングトレースメモリ９に保存する（Ｓ３０２）。また第１のＰＣ１はマスタＰＣなので、自己の共通カウント値を１に、状態指示値を１にそれぞれ設定し（Ｓ３０６）、サンプリングトレース状態へと移行する（Ｓ３０７）。第１のＰＣ１は、通信処理（Ｍ３）を終えると、スキャン実行処理（ＳＣＡＮ）に戻る。
【０１０６】
その後、第１および第２のＰＣ１，１９はスキャン実行処理（ＳＣＡＮ）を行いつつ、一定周期で同期割り込み処理（ＩＮＴ）を繰り返し行う。このとき第１のＰＣ１の状態指示値は１になっているので、第１のＰＣ１が保持する共通カウント値は、同期割り込み処理（ＩＮＴ）の度にカウントアップされる（図８のＳ４０１，Ｓ４０２）。また第１のＰＣ１はサンプリングトレース状態になっており、且つサンプリング周期は同期割り込み周期に設定されているので、同期割り込み処理（ＩＮＴ）の度にトレースデータのサンプリングが行われる（Ｓ６０１，Ｓ６０２，Ｓ６０３）。取得したトレースデータには共通カウント値を含む時刻情報（ｔ２［２］，ｔ２［３］，…）が付与される（Ｓ６０４）。
【０１０７】
一方、第２のＰＣ１９は、その状態指示値は０であり、またサンプリングトレース状態ではないので、同期割り込み処理（ＩＮＴ）のサンプリングトレース処理（Ｍ１）および通信処理（Ｍ３）では何も行われず、メモリ値の反映・更新処理（Ｍ２）において所定の同期割り込みプログラムが実行されるのみである。
【０１０８】
その後、第２のＰＣ１９においてＥＮＤ処理が実行される。このときも第２のＰＣ１９はサンプリングトレース状態ではないので、サンプリングトレース処理（Ｍ１）では何も実行されない。メモリ値の反映・更新処理（Ｍ２）では、デバイスメモリ７および共有メモリ１４の反映・更新（Ｓ２０１，Ｓ２０２）が行われる。さらに、第２のＰＣ１９はサンプリングトレース開始待ち状態になっているので、次の処理が行われる（Ｓ２０３）。
【０１０９】
即ち、第２のＰＣ１９はマスタＰＣの状態指示値が１か否か（第１のＰＣ１がサンプリングトレース状態か否か）を確認する（Ｓ２０４）。ここではそれが１であるので、第２のＰＣ１９は、第１のＰＣ１の共通カウント値を取得してそれを自己の共通カウント値に上書きする（Ｓ２０５）。これにより、第１および第２のＰＣ１，１９の共通カウント値は、互いに同じ値になる。さらに第２のＰＣ１９は、状態指示値を１に設定し、自身もサンプリングトレース状態に移行する（Ｓ２０６）。
【０１１０】
その結果、第１および第２のＰＣ１，１９の両方がサンプリングトレース状態（状態指示値が１）になる。よってこれ以降、第１および第２のＰＣ１，１９の共通カウント値は同期割り込み処理（ＩＮＴ）毎にカウントアップされる（Ｓ４０２）。第１および第２のＰＣ１，１９は、同期割り込み処理（ＩＮＴ）を互い同期して実行するので、両者の共通カウント値は互いに同じ値をとりつつカウントアップされることになる。
【０１１１】
また第２のＰＣ１９がサンプリングトレース状態になったことにより、第２のＰＣ１９でも以降の同期割り込み処理（ＩＮＴ）の度にトレースデータのサンプリングが行われる（Ｓ６０１，Ｓ６０２，Ｓ６０３）。そして取得したトレースデータには共通カウント値を含む時刻情報（ｔ２［４］，ｔ２［５］，…）が付与される（Ｓ６０４）。
【０１１２】
上記のように、サンプリングトレースが実行されている間、第１および第２のＰＣ１，１９の共通カウント値は互いに同じ値をとりつつカウントアップされ、トレースデータの取得の際、それが時刻情報として付される。よって第１および第２のＰＣ１，１９が蓄積したトレースデータを解析する際、時刻情報に含まれる共通カウント値を参照すれば、各トレースデータの時間的な前後関係を正しく知ることができる。
【０１１３】
また先に述べたように、時刻情報には共通カウント値のみならず、同期カウンタのカウント値（同期カウンタ値）を含ませてもよい。それにより、時刻情報は詳細な時刻を表すことができるようになる。同期割り込み処理は第１および第２のＰＣ１，１９で同期して行われるため、基本的に共通カウント値だけでも各トレースデータの取得時刻は把握できる。しかし、同期割り込みプログラム実行の所要時間によっては、トレースデータの取得タイミングが幾分ずれる場合もある。同期カウンタ値をも含む時刻情報は、そのような僅かなずれまで把握したい場合に有効である。
【０１１４】
以上では、サンプリング周期が同期割り込み周期に設定された場合の動作を説明したが、サンプリング周期がスキャン周期に設定されている場合、トレースデータのサンプリングを行うタイミングが異なるが、それ以外の動作は上記とほぼ同じである。
【０１１５】
即ち、サンプリング周期がスキャン周期に設定されているケースでは、トレースデータの取得および時刻情報の付与は、第１および第２のＰＣ１，１９の各々がサンプリングトレース状態になった後、ＥＮＤ処理の中で実行される（図５のサンプリングトレース処理（Ｍ１）におけるステップのＳ１０３）。この場合も、トレースデータには共通カウント値を含む時刻情報（ｔ１［５］，ｔ１［６］，…）が付与される（Ｓ１０４）。よって、第１および第２のＰＣ１，１９が取得したトレースデータの解析の際、それらの時刻情報に含まれる共通カウント値を参照すれば、各トレースデータの時間的な前後関係を正しく知ることができる。
【０１１６】
この場合も、時刻情報に同期カウンタ値も含ませることで、より詳細な時刻を知ることができる。図３の例のように第１および第２のＰＣ１，１９のＥＮＤ処理のタイミングすなわちトレースデータの取得タイミングが大きく異なっていれば、そのときの共通カウント値を参照するだけで各トレースデータの時間的な前後関係は把握できる。しかしＥＮＤ処理のタイミングはスキャン実行処理の所要時間によって変化するため、第１および第２のＰＣ１，１９のＥＮＤ処理がほぼ同時になることもある。そのような場合には、共通カウント値だけで時間的な前後関係を把握できないことも考えられるので、時刻情報に同期カウンタ値を含ませ、時刻情報の分解能を高めることが有効である。
【０１１７】
また以上の説明では、第１および第２のＰＣ１，１９はサンプリングトレース状態になると、サンプリング周期毎に必ずトレースデータを取得するように説明したが、特定の条件（トリガ条件）を満たした場合にのみ取得するよう構成してもよい。トリガ条件は、メモリ（デバイスメモリ７、シーケンスプログラムメモリ８、共有メモリ１４）の値やそれらの組み合わせ（論理演算）が条件として定められる。トリガ条件が設定された場合、サンプリングトレース状態になった第１および第２のＰＣ１，１９は、サンプリング周期毎にトリガ条件が成立した否かを判定し、成立したときにのみトレースデータの取得を行うように動作する。
【０１１８】
またトリガ条件の応用として、第１および第２のＰＣ１，１９が、トリガ条件を満たす前後の所定期間においてトレースデータを取得するように構成してもよい。そのようなトリガ条件が設定された場合、サンプリングトレース状態になった第１および第２のＰＣ１，１９は、サンプリング周期毎にトリガ条件が成立したか否かを監視しつつ、トレースデータを取得してそれをリングバッファ形式でサンプリングトレースメモリ９に格納する。そしてトリガ条件が成立すると、その直前の特定個数のトレースデータを残しつつ、その後はサンプリング周期毎にトレースデータを取得して蓄積するように動作する。
【０１１９】
以上のように本実施の形態によれば、トレースデータの時刻情報として、複数のＰＣ間で共通した値をとる共通カウント値が付与されるため、異なるＰＣが取得したトレースデータ同士でもそれらの時間的な前後関係を正しく把握することができる。よってトレースデータを用いてタイミングチャートを作成した際、複数のＰＣのタイミングチャートの時間軸を正しく揃えて表示することが可能になり、デバッグ作業の効率化に寄与することができる。
【０１２０】
当該時刻情報には、さらに同期カウンタ値を含ませてもよい。同期カウンタ値は、共通カウント値よりもカウントアップ速度が高いため、より分解能の高い時刻情報を得ることができる。共通カウント値がカウントアップされる毎にゼロリセットされるので、ＰＣごとの誤差が累積されることが防止されており、サンプリングトレースを長期間行う場合でも、時刻情報の精度の低下が防止されている。
【０１２１】
また本実施の形態では、特別なハードウェア（例えば特許文献４の同期制御ボード）を用いることなく、複数のＰＣで共有される共有メモリ１４の機能を利用した簡易な構成により、複数のＰＣで同じ値をとる共通カウント値を得ている。つまりＰＣの大幅な設計変更や、システムへの新たなハードウェアの導入の必要がない。従って、ＰＣ自体の製造コスト並びにシステムの構築にかかるコストの上昇が抑えられるという利点もある。
【０１２２】
なお図１においては、複数のＰＣが同一のベースユニット１７に装着され、各ＰＣ同士がそのベースユニット１７が備えるバックプレーンバス１８を介して相互接続される形態を示したが、バックプレーンバス１８の機能はネットワークケーブルによっても実現可能である。その場合には、相互接続させる複数のＰＣを同一のベースユニット１７に装着させる必要は無い。
【０１２３】
また図１では２つのＰＣを備える構成について説明したが、本実施の形態は３つ以上のＰＣを備えるシステムに対しても適用可能である。その場合には、特定の１つのＰＣをマスタＰＣとし、それ以外の１以上のＰＣをスレーブＰＣにすればよい。
【０１２４】
以上では、マルチＣＰＵシステムを構成するコントローラとして、プログラマブルコントローラ（ＰＣ）を用いた例を示したが、サンプリングトレース機能および同期割り込み機能を備えるモーションコントローラ（ＭＣ）を含むシステムに対しても適用可能である。
【０１２５】
＜実施の形態２＞
同期割り込み処理においては、シーケンスプログラム（同期割り込みプログラム）も実行され、その同期割り込みプログラムは、ＰＣの使用者（エンジニア）が周辺機器２１を用いて作成する。よって同期割り込みプログラム実行の所要時間がどの程度になるかは、その作成者によって異なる。
【０１２６】
同期割り込みプログラムの所要時間が長くなり、その終了時刻が次の同期割り込み処理の開始タイミングをさらに超えるような場合には、当該次の同期割り込み処理が消滅する。実施の形態１では、各ＰＣの共通カウント値のカウントアップが、同期割り込み処理の中で実施される構成であったので、特定のＰＣに同期割り込み処理の消滅があると、そのＰＣの共通カウント値はカウントアップされず、共通カウント値にずれが生じることになる。
【０１２７】
特定のＰＣに共通カウント値にずれが生じると、当該ＰＣにおいてはトレースデータに不正な時刻情報が付与されることになる。特に、使用者がそのことが認識できなければ、かえってトレースデータの解析に混乱を来し、デバッグ作業に悪影響を与える結果となる。
【０１２８】
そこで実施の形態２では、同期割り込み処理の消滅を検出でき、それが生じた場合に不正な時刻情報を有するトレースデータが蓄積されるのを防止できる構成を提案する。
【０１２９】
図９は、実施の形態２に係るプログラマブルコントローラ（ＰＣ）の構成を示す図である。同図においては、図２に示したものと同様の機能を有する要素には同一符号を付してあるので、それらのここでの説明は省略する。
【０１３０】
図９の如く本実施の形態のＰＣは、図２の構成に対し、ＣＰＵ２の共通カウント値制御部２３にさらに同期割り込み監視部２６を設け、デバイスメモリ７にさらに内部カウンタ値保持部２７を設けた構成を有している。内部カウンタ値保持部２７は、内部カウンタ１２の同期割り込み処理が実行されたときの内部カウンタ１２の値（内部カウンタ値）が記録されるものであり、同期割り込み監視部２６は、その内部カウンタ値保持部２７に記録された値に基づいて、同期割り込み処理の消滅の発生を検出するものである。
【０１３１】
以下、本実施の形態に係るＰＣ（図９）を用いたマルチＣＰＵシステム（図１）の動作を説明する。図１０はその動作を説明するための図であり、代表的に第１のＰＣ１の動作を示している。また同図の横方向は時間軸に対応している。本実施の形態では、第１および第２のＰＣ１，１９は共に図９の構成を有しているが、図１０ではそのうちの主要な要素のみを示している。
【０１３２】
実施の形態２のマルチＣＰＵシステムにおいて、その通常時の動作は実施の形態１と同様であるが、先に述べたように第１および第２のＰＣ１，１９は、同期割り込み処理の消滅を検出する機能を有している。第１および第２のＰＣ１，１９は、同期割り込み処理の実行状況を監視し、その消滅が発生した場合は共通カウント値保持部２４の機能（共通カウント値の付与）を停止することで、トレースデータに不正な共通カウント値を含む時刻情報が付与されることを防止する。
【０１３３】
図１０に示すように、内部カウンタ１２のカウント値は、ＣＰＵクロック生成部１１が生成する内部クロックに応じて一定の傾きで直線的に上昇する。ＣＰＵ２の同期割り込み監視部２６はそのことを利用して、各同期割り込み処理の所要時間を判定し、それによって同期割り込み処理の消滅を検出する。
【０１３４】
例えば図１０のように、共通カウント値（共通カウント値保持部２４の値）がｎ＋３のときの同期割り込み処理（ＩＮＴ）が長くなり、次の同期割り込み処理が消滅すると、当該共通カウント値はカウントアップされないので、その値が第１および第２のＰＣ１，１９間でずれる。同期割り込み監視部２６は、その同期割り込み処理の消滅を検出する。すると共通カウント値制御部２３は、共通カウント値を０（非稼働状態）にすると共に、状態指示値（状態指示値保持部２５の値）をエラー停止状態を示す２に設定する。
【０１３５】
これにより、同期割り込み処理の消滅に起因する不正な時刻情報（不正な共通カウント値）がトレースデータに付与されることが防止される。またそれまでに取得されたトレースデータの時刻情報を参照すれば、どの時点で同期割り込み処理の消滅が生じたのかも割り出すことができる。
【０１３６】
以上の処理は第１および第２のＰＣ１，１９の各々において、同期割り込み処理中の共通カウント値のカウントアップ処理（Ｍ４）にて行われる。図１１は、本実施の形態に係る共通カウント値のカウントアップ処理（Ｍ４）のフローチャートである。同図を用いて、本実施の形態の第１および第２のＰＣ１，１９の動作をより具体的に説明する。なお同期割り込み処理中の同期割り込みプログラム実行処理（Ｍ５）、同期サンプリングトレース処理（Ｍ６）については、実施の形態１と同様であるので説明は省略する。
【０１３７】
図１１の如く、同期割り込み処理が開始されると、第１および第２のＰＣ１，１９は自己の状態指示値を確認する（Ｓ４１１）。状態指示値が１すなわち自己がサンプリングトレース状態であれば、その時点の内部カウンタ１２の値（内部カウンタ値）を読み出す（Ｓ４１２）。
【０１３８】
ここで、今回の共通カウント値のカウントアップ処理が、サンプリングトレース状態になってからの初回か否か確認される（Ｓ４１３）。初回であれば、それまでの同期割り込み処理の消滅は共通カウント値に影響しないためその消滅の判定を行わずに、内部カウンタ値をデバイスメモリ７の内部カウンタ値保持部２７に保存し（Ｓ４１６）、共通カウント値をカウントアップする（Ｓ４１７）。
【０１３９】
共通カウント値のカウントアップ処理が２回目以降であれば、以下のように、同期割り込み処理の消滅の有無の判定が行われる（Ｓ４１４）。
【０１４０】
まず、前回の同期割り込み処理の際に記録した内部カウンタ値を、内部カウンタ値保持部２７から読み出し、今回の内部カウンタ値との差分を求める。この内部カウンタ値の差分は、前回の同期割り込み処理の先頭から、今回の同期割り込み処理の先頭までの所要時間を示している。例えば同期割り込み周期を０．８８８［ｍｓｅｃ］と仮定すると、同期割り込み処理の消滅が無かった場合には、内部カウンタ値の差分は約０．８８８［ｍｓｅｃ］を示すはずであるが、同期割り込み処理が１回消滅した場合には約１．７７６［ｍｓｅｃ］前後つまり０．８８８［ｍｓｅｃ］の２倍程度となるので、その値に基づいて同期割り込み処理の消滅の有無を判定できる。
【０１４１】
但し、各ＰＣにおける同期割り込み処理は、マスタＰＣが出力した同期信号を、バックプレーンバスＩ／Ｆ１３を通して受信してから開始されるものなので、同期信号の送受信処理に要した時間に応じてその開始タイミングがばらつくことが考えられる。よって同期割り込み処理の消滅が無かったとしても、内部カウンタ値の差分は正確に０．８８８［ｍｓｅｃ］になるとは限らない。同様に、同期割り込み処理が１回消滅した場合でも、正確に１．７７６［ｍｓｅｃ］になるとは限らない。
【０１４２】
そこで、同期割り込み処理の消滅の有無の判定には、そのような内部カウンタ値の差分のばらつきが考慮される。例えば、前回の内部カウンタ値をｔ０［ｍｓｅｃ］、今回のカウンタ値とｔ１［ｍｓｅｃ］、同期割り込み周期をＴ［ｍｓｅｃ］としたとき、同期割り込み処理の消滅は次の判定式（１）を用いて判定される。
【０１４３】
ｔ１−ｔ０＜１．５Ｔなら消滅なし、ｔ１−ｔ０≧１．５Ｔなら消滅あり  …（１）
【０１４４】
上記の数式（１）によれば、内部カウンタ値の差分（ｔ１−ｔ０）ばらつきが、同期割り込み周期の半分（Ｔ／２）より小さければ、同期割り込み処理の消滅の有無を正しく判定できる。通常は、内部カウンタ値がそれほど大きな誤差を持つことは考え難く、数式（１）であれば充分正確な判定が可能である。
【０１４５】
判定の結果、同期割り込み処理の消滅が無かったと判定された場合、今回のカウンタ値をデバイスメモリ７の内部カウンタ値保持部２７に書き込み（Ｓ４１６）、共通カウント値をカウントアップする（Ｓ４１７）。
【０１４６】
逆に、同期割り込み処理の消滅があったと判定された場合には、共通カウント値の値を０にすると共に、状態指示値を２に設定して共通カウント値保持部２４のエラー停止状態にする（Ｓ４１８）。
【０１４７】
なお、同期割り込み処理の消滅が発生した以降の同期割り込み処理では、状態指示値が２になっているので共通カウント値のカウントアップは成されない（Ｓ４１１）。但し、トレースデータの取得は、その後もサンプリング周期に従って引き続き行わせてよい。そのときのトレースデータには、共通カウント値０の時刻情報が付与される。これにより、不正な時刻情報が付与されることが防止され、そのトレースデータが同期割り込み処理の消滅が生じた後のものであることが分かる。また同期割り込み処理の消滅が発生するまでは、正しい時刻情報が付与されているので、それを参照すれば同期割り込み処理の消滅があったタイミングの特定が可能である。
【０１４８】
＜実施の形態３＞
実施の形態３では、同期割り込み処理が消滅した場合でも、複数のＰＣで同じ値をとる共通カウント値を提供可能な構成を示す。図１２は、本実施の形態に係るプログラマブルコントローラ（ＰＣ）の構成を示す図である。同図の如く、当該ＰＣは、実施の形態２のＰＣ（図９）に対し、ＣＰＵ２の共通カウント値制御部２３がさらに共通カウント値算出部２８を備え、デバイスメモリ７がさらに同期カウンタ値保持部２９を備えるものである。
【０１４９】
本実施の形態では、共通カウント値保持部２４に保持させる共通カウント値を、同期割り込み処理毎にカウントアップするのではなく、必要なときに共通カウント値制御部２３が算出する方式をとる。なお本実施の形態でも、共通カウント値は、同期カウンタ１６がゼロリセットされるタイミングで（つまり同期割り込み処理の周期）でカウントアップする如く再計算されるものとする。
【０１５０】
共通カウント値の算出方法を、図１３を用いて説明する。図１３は、共通カウント値の算出をＥＮＤ処理ごとに行ったときの例である。
【０１５１】
ＣＰＵ２は、共通カウント値制御部２３が共通カウント値を算出する度に、そのときの内部カウンタ１２の値（内部カウンタ値）および同期カウンタ１６の値（同期カウンタ値）を、それぞれ内部カウンタ値保持部２７および同期カウンタ値保持部２９にラッチする。それらの値は、その次に共通カウント値を算出するのに用いられる。
【０１５２】
例えば、前回のＥＮＤ処理で算出された共通カウント値がｎ１であったとする。ＣＰＵ２はそのＥＮＤ処理の際、その共通カウント値ｎ１を共通カウント値保持部２４に保持させると共に、その時の内部カウンタ値ｋ１［ｍｓｅｃ］および同期カウンタ値ｃ１［ｍｓｅｃ］を、それぞれ内部カウンタ値保持部２７および同期カウンタ値保持部２９にラッチする。同期割り込み処理では共通カウント値のカウントアップは行われず、今回のＥＮＤ処理までは共通カウント値はｎ１のままである。
【０１５３】
今回のＥＮＤ処理になると、共通カウント値算出部２８は以下の手順で共通カウント値を算出する。まず共通カウント値算出部２８は、そのときの内部カウンタ値ｋ２［ｍｓｅｃ］と同期カウンタ値ｃ２［ｍｓｅｃ］とを取得する。そしてそれらの値と、前回のＥＮＤ処理時の共通カウント値ｎ１、内部カウンタ値ｋ１および同期カウンタ値ｃ１とを用い、次の数式（２）〜（４）から共通カウント値ｎ２を算出する。なお、数式（４）の関数floor（ｘ）は、引数ｘの小数部を切り捨てた整数値（整数部）を返すものである（例えばfloor(2.8)の返り値は２となる）。
【０１５４】
ｋａ＝ｋ１−ｃ１  …（２）
ｋｂ＝ｋ２−ｃ２  …（３）
ｎ２＝ｎ１＋floor（（ｋｂ−ｋａ＋Ｔ／２）／Ｔ）  …（４）
【０１５５】
数式（２）から得られるｋａ［ｍｓｅｃ］は、前回のＥＮＤ処理（共通カウント値ｎ１を算出したタイミング）の直前に同期カウンタ１６がゼロリセットしたときの内部カウンタ値を示している。同期カウンタ値ｃ１は、同期カウンタ１６のゼロリセットからの経過時間を示しているため、ｋ１からｃ１を引けばｋａが得られる。
【０１５６】
同様に、数式（３）で算出されるｋｂ［ｍｓｅｃ］は、今回のＥＮＤ処理（共通カウント値ｎ２を算出するタイミング）の直前に同期カウンタ１６がゼロリセットしたときの内部カウンタ値を示している。
【０１５７】
ここで、ｋａとｋｂとの間の経過時間ｋｂ−ｋａ［ｍｓｅｃ］は、ほぼ同期割り込み周期Ｔ［ｍｓｅｃ］の整数倍の値となるため、経過時間ｋｂ−ｋａと同期割り込み周期Ｔとの比（（ｋｂ−ｋａ）／Ｔ）は、前回のＥＮＤ処理から今回のＥＮＤ処理までの間に同期カウンタ１６のゼロリセット回数（すなわち共通カウント値がカウントアップされるべき回数）を表すことになる。
【０１５８】
数式（４）では、計算結果の丸め誤差を考慮し、前回のＥＮＤ処理から今回のＥＮＤ処理までの間の同期割り込み回数を、floor（（ｋｂ−ｋａ＋Ｔ／２）／Ｔ）として計算している（右辺の第２項）。つまり数式（４）では、丸め誤差がＴ／２より小さければ同期割り込み回数を正しく算出することができる。通常、丸め誤差がそれほど大きくなることはないので、数式（４）によれば同期割り込み回数を正しく得ることができる。図１３の例では、ｎ２＝ｎ１＋３が得られる。
【０１５９】
なお、ＥＮＤ処理間における同期カウンタ１６のゼロリセット回数は、前回のＥＮＤ処理と今回のＥＮＤ処理との間の経過時間ｋ２−ｋ１［ｓｅｃ］と、同期割り込み周期Ｔとの比の整数部、即ちfloor（（ｋ２−ｋ１）／Ｔ）の値にもほぼ対応する。しかし、ＥＮＤ処理は同期カウンタ１６のゼロリセットのタイミングと関係なく実行されるので、その計算式では丸め誤差がＴ／２を超えることがあり、確実に正しい値が得られるとは限らない。数式（４）において、経過時間ｋ２−ｋ１ではなく、経過時間ｋｂ−ｋａが用いられるのはこのためである。
【０１６０】
またここでは、ＥＮＤ処理時にそのときの共通カウント値を算出した場合について説明したが、前回算出した共通カウント値ｎ１と、その算出時の内部カウンタ値ｋ１および同期カウンタ値ｃ１とが分かれば、上記の数式（２）〜（４）を用いて任意のタイミングの共通カウント値を算出可能できる。例えば、各同期割り込み処理時における共通カウント値も、いわゆる“カウントアップ”を行わずに、数式（２）〜（４）を用いて算出可能である。なお、同期割り込み処理は同期カウンタ１６のゼロリセット時に行われるので、その場合の同期カウンタ値ｃ１，ｃ２はほぼ０になる。
【０１６１】
共通カウント値算出部２８による共通カウント値の算出は、必要に応じて行われる。図１３の例では、次回のＥＮＤ処理時でも、そのときの共通カウント値ｎ３を共通カウント値算出部２８によって算出しており、ｎ３＝ｎ２＋４となる。
【０１６２】
図１３の例においては、共通カウント値ｎ２のときのＥＮＤ処理と、共通カウント値ｎ３のときのＥＮＤ処理との間に、同期カウンタ１６のゼロリセットが４回発生しているが、同期割り込み処理は１回消滅しており、３回しか行われていない。例えば実施の形態１のように同期割り込み処理ごとに共通カウント値をカウントアップさせたならば、当該ＰＣでは共通カウント値が３しか増加せず、他のＰＣとのずれが生じる。しかし本実施の形態では、共通カウント値算出部２８が算出する共通カウント値は、同期カウンタ１６のゼロリセット回数だけ確実にカウントアップされるので、図１３の例においても共通カウント値は４だけ増加する。つまり、同期割り込み処理の消滅が発生しても、各ＰＣ間で共通カウント値のずれは生じない。
【０１６３】
このように本実施の形態では、各時点の共通カウント値は、その前回の共通カウント値、内部カウンタ値および同期カウンタ値を用いて算出される。つまり、各ＰＣにおいて前回のそれら各値さえ分かっていれば、その後の各時点の共通カウント値の正しい値を導き出すことができる。
【０１６４】
逆に言えば、正しい値を算出できるかどうかは、各ＰＣに最初に付与される共通カウント値、内部カウンタ値および同期カウンタ値の初期値に全てがかかっている。従って、本実施の形態では、サンプリングトレースを開始するときに、各ＰＣにそれらの初期値が適切に設定されるようにすることが重要である。
【０１６５】
以下、本実施の形態に係るＰＣのサンプリングトレース開始時の動作を図１４を用いて説明する。本実施の形態では、第１および第２のＰＣ１，１９が互いに同期した共通カウント値を算出できるように、サンプリングトレース開始時に、各ＰＣの共通カウント値、内部カウンタ値および同期カウンタ値の適切な初期値を付与する処理が行われる。以下、その処理を「同期確立処理」と称する。また、状態指示値保持部２５が保持する状態指示値は、共通カウント値保持部２４が未稼働状態なら０を、稼働状態なら１を、エラー停止状態なら２を、同期確立処理状態であれば３をとるように制御されるものとする。
【０１６６】
本実施の形態でも、第１および第２のＰＣ１，１９のＣＰＵ２は、スキャン実行処理（ＳＣＡＮ）とＥＮＤ処理（ＥＮＤ）とを繰り返し行いつつ、同期カウンタ１６がゼロリセットされる各タイミングで同期割り込み処理（ＩＮＴ）を実行する。ＥＮＤ処理の全体的な流れは、実施の形態１で示した図５と同様である。即ち、各ＥＮＤ処理では、サンプリングトレース処理（Ｍ１）と、各メモリに格納された値の反映・更新処理（Ｍ２）と、周辺機器２１との通信並びにその通信内容に応じた処理を行う通信処理（Ｍ３）とが、この順に実行される。但し、以下に説明するように、各処理の内容は実施の形態１とは異なっている。
【０１６７】
図１５、図１６および図１７は、本実施の形態におけるサンプリングトレース処理（Ｍ１）、メモリ値の反映・更新処理（Ｍ２）および通信処理（Ｍ３）それぞれの詳細を示している。
【０１６８】
サンプリングトレース処理（Ｍ１）では、図１５の如く、まずＰＣ自身がサンプリングトレース状態か否かの確認が行われる（Ｓ１２１）。ＰＣがサンプリングトレース状態であれば、そのサンプリング周期の設定が確認される（Ｓ１２２）。サンプリング周期がスキャン周期に設定されていれば、それに続けてトレースデータのサンプリング（Ｓ１２３）が行われる。取得されたトレースデータは、共通カウント値算出部２８が数式（４）を用いて算出した共通カウント値が時刻情報として付与され（Ｓ１２４）、サンプリングトレースメモリ９に格納される。
【０１６９】
このように本実施の形態のサンプリングトレース処理（Ｍ１）は、トレースデータに付与する時刻情報が共通カウント値算出部２８によって算出されることを除いて、実施の形態１（図５）と同様である。
【０１７０】
メモリ値の反映・更新処理（Ｍ２）では、図１６の如く、ＰＣはデバイスメモリ７の値の反映および更新（Ｓ２２１）を行い、さらに他のＰＣ（第１のＰＣ１）共有メモリ１４の値を読み出してそれを自己の共有メモリ１４の値に反映させる（Ｓ２２２）。そしてＰＣ自身がサンプリングトレース開始待ち状態か否かが確認される（Ｓ２２３）。サンプリングトレース開始待ち状態であれば、当該ＰＣはマスタＰＣの状態指示値保持部２５の値（状態指示値）を確認する（Ｓ２２４）。
【０１７１】
このときマスタＰＣの状態指示値が３（同期確立処理状態）であれば、マスタＰＣの共通カウント値保持部２４の値（共通カウント値）を取得してそれを自己の共通カウント値保持部２４に上書きすると共に、自己の状態指示値を３にする（Ｓ２２５）。またこのときの内部カウンタ値および同期カウンタ値が、それぞれ内部カウンタ値保持部２７および同期カウンタ値保持部２９にラッチされる。そして当該ＰＣは同期確立処理状態に移行する（Ｓ２２６）。
【０１７２】
上記ステップＳ２２３にて、当該ＰＣがサンプリングトレース開始待ち状態でない場合、自身が同期確立処理状態か否かが確認される（Ｓ２２７）。同期確立処理状態であれば、さらに自身がマスタＰＣか否かが確認される（Ｓ２２８）。
【０１７３】
自身がマスタＰＣの場合はスレーブＰＣの状態指示値を確認し（Ｓ２２９）、それが３であれば内部カウンタ値および同期カウンタ値をラッチし（Ｓ２３０）、状態指示値を１に設定した上で（Ｓ２３１）、サンプリングトレース状態に移行する（Ｓ２３２）。
【０１７４】
また自身がスレーブＰＣの場合はマスタＰＣの状態指示値を確認し（Ｓ２３３）、それが１（サンプリングトレース状態）であれば、数式（４）から共通カウント値を算出して共通カウント値保持部２４に保持し（Ｓ２３４）、またその時の内部カウンタ１２の値（内部カウンタ値）および同期カウンタ１６の値（同期カウンタ値）を、それぞれ内部カウンタ値保持部２７および同期カウンタ値保持部２９にラッチする。さらに状態指示値を１に設定した上で（Ｓ２３５）、サンプリングトレース状態に移行する（Ｓ２３６）。
【０１７５】
このようにメモリ値の反映・更新処理（Ｍ２）において、各ＰＣは、自身がサンプリングトレース開始待ち状態であるとき、マスタＰＣが同期確立処理状態であれば、自身も同期確立処理状態に移行する。またマスタＰＣは、自身のみならずスレーブＰＣも同期確立処理状態になっていれば、内部カウンタ値および同期カウンタ値をラッチして、サンプリングトレース状態に移行する。またスレーブＰＣは、マスタＰＣがサンプリングトレース状態に移行していれば、自身もサンプリングトレース状態に移行する（Ｓ２３７）。
【０１７６】
通信処理（Ｍ３）では、図１７の如く、ＰＣは周辺機器２１から送信されてきた信号にトレース設定情報が含まれているかを確認し（Ｓ３２１）、含まれていればそれをサンプリングトレースメモリ９に保存する（Ｓ３２２）。さらに同信号に、サンプリングトレース開始要求が含まれているか確認する（Ｓ３２３）。サンプリングトレース開始要求が含まれていれば、ＰＣ自身がマスタＰＣであるかを確認する（Ｓ３２４）。当該ＰＣがマスタＰＣであれば、共通カウント値を１に設定すると共に状態指示値を３に設定し（Ｓ３２６）、当該ＰＣは同期確立処理状態に移行する（Ｓ３２７）。一方、当該ＰＣがスレーブＰＣであれば、サンプリングトレース開始待ち状態に移行する（Ｓ３２５）。
【０１７７】
このようにマスタＰＣは、サンプリングトレース開始要求を受けると直後の通信処理（Ｍ３）で同期確立処理状態に移行する。スレーブＰＣは、サンプリングトレース開始要求を受けると一旦サンプリングトレース待ち状態に移行する。なお、スレーブＰＣが同期確立処理状態に移行するのは、その後のＥＮＤ処理におけるメモリ値の反映・更新処理（Ｍ２）のステップＳ２２６においてである。
【０１７８】
また本実施の形態でも、同期割り込み処理（ＩＮＴ）においては、共通カウント値のカウントアップ処理（Ｍ４）、同期割り込みプログラム実行処理（Ｍ５）および同期サンプリングトレース処理（Ｍ６）がこの順に実行される。図１８および図１９は、本実施の形態の共通カウント値のカウントアップ処理（Ｍ４）および同期サンプリングトレース処理（Ｍ６）を示している。同期割り込みプログラム実行処理（Ｍ５）については、実施の形態１と同様である（図示は省略する）。
【０１７９】
図１８の如く共通カウント値のカウントアップ処理（Ｍ４）では、自己の状態指示値を確認し（Ｓ４２１）、それが３（同期確立処理状態）であれば、内部カウンタ値が読み出され（Ｓ４２２）、実施の形態２で示した判定式（１）に基づいて同期割り込み処理の消滅の有無が判定される（Ｓ４２４，Ｓ４２５）。同期割り込み処理の消滅が発生していなければ、次回の同期割り込み処理の判定のために内部カウンタ値をデバイスメモリ７に記録して（Ｓ４２６）、共通カウント値をカウントアップする（Ｓ４２７）。また同期割り込み処理の消滅が発生していなければ、共通カウント値を０にすると共に、状態指示値を２に設定して共通カウント値保持部２４のエラー停止状態にする（Ｓ４２８）。
【０１８０】
但し、状態指示値が３であっても（Ｓ４２１）、共通カウントアップのカウントアップが初回であれば同期割り込み処理の判定は行われず（Ｓ４２３）、内部カウンタ値の記録と（Ｓ４２６）、共通カウント値のカウントアップ（Ｓ４２７）のみが行われる。
【０１８１】
図１３を図１１と比較して分かるように、本実施の形態の共通カウント値のカウントアップ処理（Ｍ４）では、ＰＣが同期確立処理状態のとき、実施の形態２と同様の処理が行われ、同期割り込み処理の消滅が検出されると共通カウント値の機能が停止する。上記のように本実施の形態のＰＣは、サンプリングトレースを実行している間に同期割り込み処理の消滅が生じても共通カウント値を正しく算出できるものである。しかし、同期確立処理状態の間は、同期割り込み処理の消滅の発生は許されない。この規制により、各ＰＣに共通カウント値、内部カウンタ値および同期カウンタ値に、不適切な初期値が付与されることを防止している。
【０１８２】
また図１９のように、同期サンプリングトレース処理（Ｍ６）では、まずＰＣ自身がサンプリングトレース状態か否か確認され（Ｓ６２１）、サンプリングトレース状態であれば、そのサンプリング周期の設定が確認される（Ｓ６２２）。そしてサンプリング周期が同期割り込み周期に設定されていれば、当該ＰＣはトレースデータのサンプリング（Ｓ６２３）を行い、取得したトレースデータに時刻情報として数式（４）による計算値を付与して（Ｓ６２４）、サンプリングトレースメモリ９に格納する。即ち、図１９の同期サンプリングトレース処理（Ｍ６）は、時刻情報が数式（４）で与えられることを除いて、実施の形態１（図８）と同様である。
【０１８３】
以下、図１４〜図１９を参照して、本実施の形態のマルチＣＰＵシステムにおけるサンプリングトレースの開始時の動作を説明する。
【０１８４】
サンプリングトレースを実行する前、第１および第２のＰＣ１，１９の両方において、共通カウント値保持部２４の値（共通カウント値）は０であり（共通カウント値保持部２４は未稼働状態）、状態指示値保持部２５の値（状態指示値）は０に設定されている。
【０１８５】
周辺機器２１は、第１および第２のＰＣ１，１９にサンプリングトレースを実行させるため、それらにサンプリングトレース開始要求を送信する。ここでも簡単のため、当該サンプリングトレース開始要求と共にトレース設定情報が送信されているものとする。
【０１８６】
サンプリングトレース開始要求およびトレース設定情報が周辺機器２１から送信された後、図１４の如く第１のＰＣ１（マスタＰＣ）よりも先に、第２のＰＣ１９（スレーブＰＣ）のＥＮＤ処理が行われたとする。この第２のＰＣ１９のＥＮＤ処理では、デバイスメモリ７および共有メモリ１４の反映・更新（Ｓ２２１，Ｓ２２２）、トレース設定情報の保存（Ｓ３２２）が行われた後、当該第２のＰＣ１９はサンプリングトレース開始待ち状態になる。
【０１８７】
その後、第１のＰＣ１のＥＮＤ処理が行われると、当該ＥＮＤ処理において第１のＰＣ１は、デバイスメモリ７および共有メモリ１４の反映・更新（Ｓ２２１，Ｓ２２２）、トレース設定情報の保存（Ｓ３２２）行った後、共通カウント値を１、状態指示値を３に設定して（Ｓ３２６）、同期確立処理状態に移行する（Ｓ３２７）。
【０１８８】
第１および第２のＰＣ１，１９のそれぞれは、ＥＮＤ処理の後スキャン実行処理（ＳＣＡＮ）を行いつつ、一定周期で同期割り込み処理（ＩＮＴ）を繰り返し行う。このとき第１のＰＣ１の状態指示値は３になっているので、第１のＰＣ１の同期割り込み処理（ＩＮＴ）では、同期割り込み処理の消滅の有無が監視されつつ（図１８のＳ４２４，Ｓ４２５）、共通カウント値がカウントアップされる（Ｓ４２７）。一方、第２のＰＣ１９は、サンプリングトレース状態ではないので、同期割り込み処理（ＩＮＴ）では、所定の同期割り込みプログラムが実行されるのみである。
【０１８９】
その後、第２のＰＣ１９においてＥＮＤ処理が実行される。このとき第２のＰＣ１９は、サンプリングトレース開始待ち状態であるので、デバイスメモリ７および共有メモリ１４の反映・更新（Ｓ２２１，Ｓ２２２）を行った後、第１のＰＣ１（マスタＰＣ）の共通カウント値（“３”）を取得して（Ｓ２２５）、同期確立処理状態に移行する。また第２のＰＣ１９は、このときの内部カウンタ値（ｋｋ０）および同期カウンタ値（ｃｃ０）を、それぞれ内部カウンタ値保持部２７および同期カウンタ値保持部２９にラッチする。これにより、第１および第２のＰＣ１，１９の共通カウント値は、互いに同じ値になる。但し、同期確立処理状態の第１のＰＣ１では、同期割り込み処理ごとに共通カウント値のカウントアップが行われているため（図１８のＳ４２６）、第１のＰＣ１において同期割り込み処理の消滅が生じていれば、その共通カウント値は不正な値である可能性がある。しかしこの時点では第２のＰＣ１９はそれを判断できない。
【０１９０】
その後、再び第１のＰＣ１のＥＮＤ処理が行われる。このとき第１および第２のＰＣ１，１９は共に同期確立処理状態（状態指示値が３）である。よって第１のＰＣ１は、デバイスメモリ７および共有メモリ１４の反映・更新（Ｓ２２１，Ｓ２２２）を行った後、そのときの内部カウンタ値（ｋ４）および同期カウンタ値（ｃ４）をそれぞれ内部カウンタ値保持部２７および同期カウンタ値保持部２９にラッチする（Ｓ２３０）。さらに第１のＰＣ１は、状態指示値を１にして（Ｓ２３１）、サンプリングトレース状態に移行する（Ｓ２３２）。
【０１９１】
ここで、同期確立処理状態の第１のＰＣ１で、同期割り込み処理の消滅が生じていればエラー停止状態（状態指示値が２）になっているはずである。つまり、第１のＰＣ１がサンプリングトレース状態に至ったということは、同期確立処理状態の第１のＰＣ１では同期割り込み処理の消滅が無かったことを示している。
【０１９２】
その後、再び第２のＰＣ１９のＥＮＤ処理が行われる。このとき当該第２のＰＣ１９は同期確立処理状態であり、第１のＰＣ１はサンプリングトレース状態である。よって第２のＰＣ１９は、デバイスメモリ７および共有メモリ１４の反映・更新（Ｓ２２１，Ｓ２２２）を行った後、数式（４）を用いて、先に取得した共通カウント値（“３”）、そのときの内部カウンタ値（ｋｋ０）および同期カウンタ値（ｃｃ０）から現時点の共通カウント値（“６”）を算出し、それを内部カウンタ値保持部２７に保持する（Ｓ２３４）。そして第２のＰＣ１９は、このときの内部カウンタ値（ｋｋ１）および同期カウンタ値（ｃｃ１）をラッチし（Ｓ２３５）、状態指示値を１にして（Ｓ２３６）、サンプリングトレース状態に移行する（Ｓ２３７）。
【０１９３】
このように第２のＰＣ１９は、第１のＰＣ１がサンプリングトレース状態になった後で、共通カウント値を算出し、自らもサンプリングトレース状態に移行する。上記のように、第１のＰＣ１がサンプリングトレース状態に至ったことは、同期確立処理状態の第１のＰＣ１では同期割り込み処理の消滅が無かった、即ち同期確立処理状態の第２のＰＣ１９が第１のＰＣ１から取得した共通カウント値は正しい値であったことを示している。よって、このとき第２のＰＣ１９が算出した現時点の同期カウンタ値もまた正しい値であると言える。
【０１９４】
サンプリングトレース状態になった第１および第２のＰＣ１，１９は、指定されたサンプリング周期でトレースデータのサンプリングを行う。そのサンプリングトレース状態での第１および第２のＰＣ１，１９の動作は、実施の形態１とほぼ同様である。例えばサンプリング周期がスキャン周期であれば、各ＥＮＤ処理のサンプリングトレース処理（Ｍ１）でトレースデータが取得され（図１５のステップＳ１２３）、あるいはサンプリング周期が同期割り込み周期であれば、各同期割り込み処理における同期サンプリングトレース処理（Ｍ６）でトレースデータが取得される（図１９のステップＳ６２３）。
【０１９５】
但し、取得したトレースデータには、時刻情報として、共通カウント値算出部２８が数式（４）を用いて算出した共通カウント値が付される（図１５のステップＳ１２４、図１９のステップＳ６２４）。またその際、次回の共通カウント値の算出のために、その時点の内部カウンタ値および同期カウンタ値が、それぞれ内部カウンタ値保持部２７および同期カウンタ値保持部２９にラッチされる。
【０１９６】
以上では、同期確立処理状態の第１のＰＣ１で同期割り込み処理の消滅が発生しなかった場合について説明したが、それが発生した場合（状態指示値が２になった場合）には、第１および第２のＰＣ１，１９の両方において、共通カウント値および状態指示値を共に０に設定しなおして、もう一度同期確立処理をやり直しさせればよい。
【０１９７】
なお、同期割り込み処理の消滅は、本来あってはならないものであり、マスタＰＣ（第１のＰＣ１）が同期確立処理状態になっている期間という非常に短い期間に、それが生じる確率は極めて低い。よって、仮に同期確立処理状態のマスタＰＣに同期割り込み処理の消滅が発生したとしても、一度上記の処理のやり直しを行えば、ほぼ確実に正しい共通カウント値を取得することができる。
【０１９８】
以上のように本実施の形態によれば、同期割り込み処理の消滅が生じた場合であっても、各ＰＣで共通カウント値のずれが生じない。従って、トレースデータに不正な時刻情報が付されることを防止できる。
【０１９９】
実施の形態２では、同期割り込み処理の消滅が発生した以降のトレースデータには、正しい時刻場合が付されないが、本実施の形態では、同期割り込み処理が消滅した後もトレースデータに正しい時刻場合が付される。その結果、トレースデータを解析して、本来あってはならない同期割り込み処理の消滅を引き起こしている原因を特定することが格段に容易となる。
【図面の簡単な説明】
【０２００】
【図１】マルチＣＰＵシステムの構成例を示す図である。
【図２】実施の形態１に係るＰＣの構成を示す図である。
【図３】実施の形態１に係るマルチＣＰＵシステムの動作を示す図である。
【図４】実施の形態１のＥＮＤ処理におけるサンプリングトレース処理のフローチャートである。
【図５】実施の形態１に係るＰＣのＥＮＤ処理のサンプリングトレース処理のフローチャートである。
【図６】実施の形態１に係るＰＣのＥＮＤ処理のメモリ値の反映・更新処理のフローチャートである。
【図７】実施の形態１に係るＰＣのＥＮＤ処理の通信処理のフローチャートである。
【図８】実施の形態１に係るＰＣの同期割り込み処理のフローチャートである。
【図９】実施の形態２に係るＰＣの構成を示す図である。
【図１０】実施の形態２に係るＰＣの動作を示す図である。
【図１１】実施の形態２に係るＰＣの同期割り込み処理の共通カウント値のカウントアップ処理のフローチャートである。
【図１２】実施の形態３に係るＰＣの構成を示す図である。
【図１３】実施の形態３に係るＰＣの動作を示す図である。
【図１４】実施の形態３に係るマルチＣＰＵシステムの動作を示す図である。
【図１５】実施の形態３に係るＰＣのＥＮＤ処理のサンプリングトレース処理のフローチャートである。
【図１６】実施の形態３に係るＰＣのＥＮＤ処理のメモリ値の反映・更新処理のフローチャートである。
【図１７】実施の形態３に係るＰＣのＥＮＤ処理の通信処理のフローチャートである。
【図１８】実施の形態３に係るＰＣの同期割り込み処理の共通カウント値のカウントアップ処理のフローチャートである。
【図１９】実施の形態３に係るＰＣの同期割り込み処理の同期サンプリングトレース処理のフローチャートである。
【符号の説明】
【０２０１】
１，１９  ＰＣ、２  ＣＰＵ、３  シーケンスプログラム実行部、４  サンプリングトレース実行部、５  時刻情報付与部、６  通信Ｉ／Ｆ、７  デバイスメモリ、８  シーケンスプログラムメモリ、９  サンプリングトレースメモリ、１０  内部バス、１１  ＣＰＵクロック生成部、１２  内部カウンタ、１３  バックプレーンバスＩ／Ｆ、１４  共有メモリ、１５  バスＩ／Ｆクロック生成部、１６  同期カウンタ、１７  ベースユニット、１８  バックプレーンバス、１９  第２のＰＣ、２０  入出力ユニット、２１  周辺機器、２２  通信ケーブル、２３  共通カウント値制御部、２４  共通カウント値保持部、２５  状態指示値保持部、２６  同期割り込み監視部、２７  内部カウンタ値保持部、２８  共通カウント値算出部、２９  同期カウンタ値保持部。
【図１】
0004901813.tif 000002
【図２】
0004901813.tif 000003
【図３】
0004901813.tif 000004
【図４】
0004901813.tif 000005
【図５】
0004901813.tif 000006
【図６】
0004901813.tif 000007
【図７】
0004901813.tif 000008
【図８】
0004901813.tif 000009
【図９】
0004901813.tif 000010
【図１０】
0004901813.tif 000011
【図１１】
0004901813.tif 000012
【図１２】
0004901813.tif 000013
【図１３】
0004901813.tif 000014
【図１４】
0004901813.tif 000015
【図１５】
0004901813.tif 000016
【図１６】
0004901813.tif 000017
【図１７】
0004901813.tif 000018
【図１８】
0004901813.tif 000019
【図１９】
0004901813.tif 000020