(57)【特許請求の範囲】
【請求項１】
プログラマブルロジックコントローラ用のプログラミング言語であるシーケンシャル・ファンクション・チャートを用いて作成され、前記プログラマブルロジックコントローラが実行する処理を記述したステップを有する複数のブロックを含み、前記ステップが前記ブロックをまたがって並行して実行されるプログラムを繰り返し実行する実行手段と、
前記実行手段が前記プログラムを実行するのに先立って、前記プログラム内において前記ステップを一意に特定する情報であるステップ情報を生成し、生成した前記ステップ情報を、各前記ステップに割り当てる割当手段と、
前記実行手段が前記プログラムを実行している間に、前記ステップの実行経路を示すトレースログとして、実行された前記ステップを特定する前記ステップ情報を前記プログラムの実行が繰り返された回数である実行サイクル数と対応付けて記憶部に蓄積するログ記録手段と、を備え、
前記プログラムの作成時に、各前記ブロックには前記ブロックを識別するブロック識別情報が、各前記ステップには前記ブロック内において前記ステップを識別するブロック内ステップ識別情報がそれぞれ割り当てられており、各前記ステップに割り当てられた前記ステップ情報は、そのステップに割り当てられているブロック内ステップ識別情報とは異なる情報であり、
同一のステップ情報が前記割当手段により割り当てられ、前記ブロックをまたがって並行して実行されるステップには、属する前記ブロック毎に固有のブロック内ステップ識別情報が割り当てられている、
プログラマブルロジックコントローラ。
【請求項２】
前記ステップ情報を記憶するステップ情報記憶手段をさらに備え、
前記割当手段は、前記ステップそれぞれに、前記プログラム内において前記ステップを一意に特定することができる一意な値を割り当て、前記一意な値と、前記ブロック識別情報と、前記ブロック内ステップ識別情報と、を含むステップ情報を生成し、生成した前記ステップ情報を前記ステップ情報記憶手段に格納する、
請求項１に記載のプログラマブルロジックコントローラ。
【請求項３】
前記割当手段は、前記実行手段が前記プログラムを実行するのに先立って、生成した前記ステップ情報を前記ステップ情報記憶手段に格納する、
請求項２に記載のプログラマブルロジックコントローラ。
【請求項４】
前記割当手段は、前記プログラマブルロジックコントローラに電源が投入され、前記プログラマブルロジックコントローラがイニシャル処理を実行するときに、前記ステップ情報を生成する、
請求項１または３に記載のプログラマブルロジックコントローラ。
【請求項５】
請求項２から４のいずれか１項に記載のプログラマブルロジックコントローラの前記記憶部から前記トレースログを読み出し、前記ステップ情報記憶手段から前記ステップ情報を読み出す読出手段と、
前記トレースログに含まれる前記ステップ情報から特定される前記ステップと、前記トレースログに含まれる前記実行サイクル数とを対応付けて表示する表示手段と、
を備えるコンピュータ。
【請求項６】
前記表示手段は、
前記ステップを表すステップ番号に対応付けて、前記ステップが実行された実行サイクル数を表示した画像を表示する、
請求項５に記載のコンピュータ。
【請求項７】
プログラマブルロジックコントローラ用のプログラミング言語であるシーケンシャル・ファンクション・チャートを用いて作成され、前記プログラマブルロジックコントローラが実行する処理を記述したステップを有する複数のブロックを含み、前記ステップが前記ブロックをまたがって並行して実行されるプログラムを繰り返し実行するプログラマブルロジックコントローラが、前記プログラムを実行するのに先立って、前記ステップを一意に特定する情報であるステップ情報を、各前記ステップに割り当てる段階と、
前記プログラマブルロジックコントローラが前記プログラムを実行している間に、実行された前記ステップを特定する前記ステップ情報を前記プログラムの実行が繰り返された回数である実行サイクル数と対応付けて蓄積する段階と、を含み、
前記プログラムの作成時に、各前記ブロックには前記ブロックを識別するブロック識別情報が、各前記ステップには前記ブロック内において前記ステップを識別するブロック内ステップ識別情報がそれぞれ割り当てられており、各前記ステップに割り当てられた前記ステップ情報は、そのステップに割り当てられているブロック内ステップ識別情報とは異なる情報であり、
同一のステップ情報が割り当てられ、前記ブロックをまたがって並行して実行されるステップには、属する前記ブロック毎に固有のブロック内ステップ識別情報が割り当てられている、
方法。
【請求項８】
プログラマブルロジックコントローラ用のプログラミング言語であるシーケンシャル・ファンクション・チャートを用いて作成され、前記プログラマブルロジックコントローラが実行する処理を記述したステップを有する複数のブロックを含み、前記ステップが前記ブロックをまたがって並行して実行されるプログラムを繰り返し実行するプログラマブルロジックコントローラに、
前記プログラムを実行するのに先立って、前記ステップを一意に特定する情報であるステップ情報を、各前記ステップに割り当てさせ、
前記プログラムを実行している間に、実行された前記ステップを特定する前記ステップ情報を前記プログラムの実行が繰り返された回数である実行サイクル数と対応付けて蓄積させ、
前記プログラムの作成時に、各前記ブロックには前記ブロックを識別するブロック識別情報が、各前記ステップには前記ブロック内において前記ステップを識別するブロック内ステップ識別情報がそれぞれ割り当てられており、各前記ステップに割り当てられた前記ステップ情報は、そのステップに割り当てられているブロック内ステップ識別情報とは異なる情報であり、
同一のステップ情報が割り当てられ、前記ブロックをまたがって並行して実行されるステップには、属する前記ブロック毎に固有のブロック内ステップ識別情報が割り当てられている、
プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラマブルロジックコントローラ、コンピュータ、方法、及びプログラムに関する。
【背景技術】
【０００２】
プログラマブルロジックコントローラは、実行周期毎に制御プログラムの各命令を実行することにより、制御対象の機器を制御する。プログラマブルロジックコントローラが実行する制御プログラムを記載するプログラミング言語のひとつにＳＦＣ（Sequential Function Chart）がある。ＳＦＣで記載された制御プログラムには、プログラマブルロジックコントローラが実行する処理を記述したステップと、そのステップに移行するための移行条件とが記載されている。例えば、図１１に示す例では、ステップ０を実行した後、移行条件１が成立する場合にはステップ１が実行され、移行条件２が成立する場合にはステップ２が実行される。ステップ１が実行された後は、移行条件３が成立するとステップ３が実行される。ステップ２が実行された後は、移行条件４が成立するとステップ３が実行される。【０００３】
ＳＦＣで記載された制御プログラムのデバッグのため、ステップの実行順序、各ステップの実行回数等をトレースする必要がある。【０００４】
特許文献１には、ＳＦＣで記載された制御プログラムのトレースを行うため、プログラマブルロジックコントローラが、プログラム内のステップを実行するたびに、そのステップの番号を含むデータをトレースデータ蓄積部に蓄積し、周辺装置が、トレースデータ蓄積部から読み出し、実行経路及びトランジション・ステップの実行順序のタイムチャートを表示器に表示することが記載されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００１−５５０４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
特許文献１に記載された構成では、ステップの番号を含むデータを順次蓄積し、蓄積されたデータに基づいて、実行経路及びトランジション・ステップの実行順序のタイムチャートを表示器に表示するので、蓄積したデータから、例えば、トレースを開始してから終了するまでの間において、ステップの実行順序をトレースすることは可能である。しかし、特許文献１に記載された構成では、制御プログラムの実行回数とステップの番号とを紐付けて蓄積しておらず、実行されたステップがタイムチャート表示されるだけである。しかし、工場内で実際に使用される制御プログラムは、多くのトランジション、ステップを含む複雑な制御プログラムであり、特許文献１に記載された技術では、制御プログラムの実行周期単位で、その実行周期内に実行されたステップの実行順序及び実行回数を把握することは、制御プログラムのデバッグを行うユーザにとって非常に困難であった。【０００７】
本発明は上記実情に鑑みてなされたものであり、ＳＦＣで記載されたプログラムのステップの実行経路及び実行回数を実行周期単位でトレースすることを目的とする。
【課題を解決するための手段】
【０００８】
上記目的を達成するため、本発明のプログラマブルロジックコントローラが備える実行手段は、プログラマブルロジックコントローラ用のプログラミング言語であるシーケンシャル・ファンクション・チャートを用いて作成され、プログラマブルロジックコントローラが実行する処理を記述したステップを有する複数のブロックを含み、ステップがブロックをまたがって並行して実行されるプログラムを繰り返し実行する。割当手段は、実行手段がプログラムを実行するのに先立って、プログラム内においてステップを一意に特定する情報であるステップ情報を生成し、生成したステップ情報を、各ステップに割り当てる。ログ記録手段は、実行手段がプログラムを実行している間に、ステップの実行経路を示すトレースログとして、実行されたステップを特定するステップ情報をプログラムの実行が繰り返された回数である実行サイクル数と対応付けて記憶部に蓄積する。プログラムの作成時に、各ブロックにはブロックを識別するブロック識別情報が、各ステップにはブロック内においてステップを識別するブロック内ステップ識別情報がそれぞれ割り当てられており、各ステップに割り当てられたステップ情報は、そのステップに割り当てられているブロック内ステップ識別情報とは異なる情報である。同一のステップ情報が割当手段により割り当てられ、ブロックをまたがって並行して実行されるステップには、属するブロック毎に固有のブロック内ステップ識別情報が割り当てられている。
【発明の効果】
【０００９】
本発明のプログラマブルロジックコントローラは、ステップの実行経路を示すトレースログとして、実行されたステップを特定するステップ情報をプログラムの実行が繰り返された回数である実行サイクル数と対応付けて記憶部に蓄積する。このような構成を備えることで、ＳＦＣで記載されたプログラムのステップの実行経路及び実行回数を実行周期単位でトレースすることができる。
【図面の簡単な説明】
【００１０】
【図１】本発明の実施の形態に係るプログラマブルロジックコントローラと開発ツールの機能構成を示すブロック図
【図２】実施の形態に係るプログラマブルロジックコントローラと開発ツールのハードウェア構成を示すブロック図
【図３】実施の形態に係る制御プログラムの一例を示す図
【図４】実施の形態に係るインデックステーブルに格納されるデータの一例を示す図
【図５】実施の形態に係るトレースログの一例を示す図
【図６】実施の形態に係るインデックス割り当て処理のフローチャート
【図７】実施の形態に係るトレース処理のフローチャート
【図８Ａ】実施の形態に係るトレースログの表示画面の例を示す図（その１）
【図８Ｂ】実施の形態に係るトレースログの表示画面の例を示す図（その２）
【図８Ｃ】実施の形態に係るトレースログの表示画面の例を示す図（その３）
【図８Ｄ】実施の形態に係るトレースログの表示画面の例を示す図（その４）
【図８Ｅ】実施の形態に係るトレースログの表示画面の例を示す図（その５）
【図９Ａ】実施の形態に係るトレースログの表示画面の他の例を示す図
【図９Ｂ】実施の形態に係るトレースログのタイミングチャートを表示する画面の例を示す図
【図１０】インデックステーブルに格納されるデータの他の例を示す図
【図１１】ＳＦＣで記述されたプログラムの一例を示す図
【発明を実施するための形態】
【００１１】
以下、本発明の実施の形態に係るプログラマブルロジックコントローラ１００について、図面を参照しつつ詳細に説明する。
【００１２】
（実施の形態）
図１に示す、プログラマブルロジックコントローラ１００は、制御システム、生産システム等において、検出器から供給された入力信号に従って、制御プログラムの命令を実行し、出力信号を被制御機器に供給し、被制御機器を制御する。検出器は、例えば、センサ、スイッチである。被制御機器は、例えば、アクチュエータ、電磁弁、表示灯である。
【００１３】
プログラマブルロジックコントローラ１００（以下、ＰＬＣ１００）は、制御プログラムの最初の命令から最後の命令まで、命令を順次実行し、最後の命令を実行すると、再び、最初の命令から、命令を順次実行する。ＰＬＣ１００が、制御プログラムの最初の命令から最後の命令までを実行することをスキャンということがある。ＰＬＣ１００が制御プログラムの命令の実行を一巡する時間をスキャンタイムということがある。
【００１４】
実施の形態においては、ＰＬＣ１００は、シーケンシャル・ファンクション・チャート（以下、ＳＦＣ）で記載された制御プログラムを実行する。ＰＬＣ１００は、制御プログラムの実行中に、ステップの実行経路をトレースする機能を備える。
【００１５】
開発ツール５００は、プログラムの作成機能を備える専用のアプリケーションプログラムをインストールしたパーソナルコンピュータである。開発ツール５００は、プログラムの作成機能に加え、ＰＬＣ１００が記録したトレースログに基づき、ステップの実行経路を示す情報を表示する機能を有する。
【００１６】
図２に示すように、ＰＬＣ１００はハードウェア構成として、各種のプログラム及びデータを記憶する不揮発性メモリ１１と、トレースログを記憶する揮発性メモリ１２と、検出器８０１及び被制御機器８０２とデータを授受する入出力インタフェース１３と、開発ツール５００と通信する接続インタフェース１４と、ＰＬＣ１００全体を制御するＭＰＵ（Micro Processing Unit）１５とを有する。不揮発性メモリ１１と揮発性メモリ１２と入出力インタフェース１３と接続インタフェース１４とはバス１９を介してＭＰＵ１５に接続されており、ＭＰＵ１５と通信する。
【００１７】
不揮発性メモリ１１は、ＰＬＣ１００の各種機能を実現するためのプログラムと、プログラムの実行時に使用されるデータとを記憶する。例えば、不揮発性メモリ１１は、ＭＰＵ１５を制御するファームウェアを記憶する。実施の形態においては、ＰＬＣ１００のファームウェアの機能として、トレースの実行に必要な前処理を実行する機能と、ユーザプログラム１１１のステップの実行をトレースする機能とが含まれている。さらに、不揮発性メモリ１１は、アプリケーションプログラムを記憶する。実施の形態においては、不揮発性メモリ１１には、ユーザプログラム１１１が格納されている。不揮発性メモリ１１は、例えば、ＥＥＰＲＯＭ（Electrically Erasable Programmable Read-Only Memory）、フラッシュメモリ、ハードディスクドライブを含む。
【００１８】
ユーザプログラム１１１は、ユーザがＳＦＣを使用して開発したプログラムであって、被制御機器を制御する機能をＭＰＵ１５に実現させる制御プログラムである。ユーザは、例えば、ＰＬＣ１００の管理者である。
【００１９】
揮発性メモリ１２は、トレースログを格納するメモリとして用いられる。さらに、揮発性メモリ１２は、ＭＰＵ１５のワークメモリとして用いられる。揮発性メモリ１２は、例えば、ＲＡＭ（Random Access Memory）を含む。
【００２０】
入出力インタフェース１３は、ＰＬＣ１００が検出器８０１及び被制御機器８０２と通信するための接続インタフェースである。入出力インタフェース１３は、ＭＰＵ１５から供給されたデータを電気信号に変換し、接続ケーブル７０１を介して変換した信号を被制御機器８０２に送信する。また、入出力インタフェース１３は、接続ケーブル７０１を介して検出器８０１から受信した電気信号をデータに復元してＭＰＵ１５に出力する。
【００２１】
接続インタフェース１４は、例えば、ＵＳＢコントローラを含み、ＭＰＵ１５から供給されたデータを電気信号に変換し、接続ケーブル７０２を介して変換した信号を開発ツール５００に送信する。また、接続インタフェース１４は、接続ケーブル７０２を介して、開発ツール５００が出力した電気信号を受信し、受信した電気信号をデータに復元してＭＰＵ１５に出力する。接続ケーブル７０２は、例えば、ＵＳＢケーブルである。
【００２２】
ＭＰＵ１５は、不揮発性メモリ１１に記憶されている各種プログラムを実行して、ＰＬＣ１００の各種機能を実現する。例えば、ＭＰＵ１５は、不揮発性メモリ１１に格納されているユーザプログラム１１１を実行することにより、検出器８０１から供給された入力信号が示す値を使用した演算を行い、演算結果を示す値に基づく出力信号を被制御機器８０２に供給する。
【００２３】
開発ツール５００は、ハードウェア構成として、各種のプログラム及びデータを記憶するメモリ５１と、ユーザの入力操作を検出する入力装置５２と、画像を表示する表示装置５３と、ＰＬＣ１００と通信する接続インタフェース５４と、開発ツール５００全体を制御するＣＰＵ（Central Processing Unit）５５とを有する。メモリ５１と入力装置５２と表示装置５３と接続インタフェース５４とは、バス５９を介してＣＰＵ５５に接続されており、ＣＰＵ５５と通信する。
【００２４】
メモリ５１は、揮発性メモリと不揮発性メモリとを含む。メモリ５１は、開発ツール５００の各種機能を実現するためのプログラムと、プログラムの実行時に使用されるデータとを記憶する。実施の形態においては、メモリ５１は、ログ表示プログラム５１１を記憶する。ログ表示プログラム５１１は、トレースログを表示する機能をＣＰＵ５５に実現させるプログラムである。さらに、メモリ５１は、ＣＰＵ５５のワークメモリとして用いられる。
【００２５】
入力装置５２は、キーボード、マウス等の入力装置を含み、ユーザの入力操作を検出し、検出したユーザの入力操作を示す信号をＣＰＵ５５に供給する。表示装置５３は、ディスプレイを含み、ＣＰＵ５５から供給された信号に基づいた画像をディスプレイに表示する。
【００２６】
接続インタフェース５４は、例えば、ＵＳＢコントローラを含み、ＣＰＵ５５から供給されたデータを電気信号に変換し、変換した信号を接続ケーブル７０２を介してＰＬＣ１００に送信する。また、接続インタフェース５４は、接続ケーブル７０２を介して、ＰＬＣ１００が出力した電気信号を受信し、受信した電気信号をデータに復元してＣＰＵ５５に出力する。
【００２７】
ＣＰＵ５５は、不揮発性メモリ１１に記憶された各種プログラムを実行して、開発ツール５００の各種機能を実現する。実施の形態においては、ＣＰＵ５５は、ログ表示プログラム５１１を実行して、ＰＬＣ１００が記録したトレースログを表示装置５３に表示する。
【００２８】
続いて、図１を参照しながら、ＰＬＣ１００の機能的な構成を説明する。ＰＬＣ１００は、機能的には、制御プログラムを記憶するプログラム記憶部１１０と、制御プログラムを実行するプログラム実行部１２０と、制御プログラムの各ステップにインデックスを割り当てるトレース前処理部１３０と、インデックスに関するデータを記憶するインデックス情報記憶部１４０と、ステップの実行をトレースするトレース実行部１５０と、トレースログを記憶するトレースログ記憶部１６０とを含む。
【００２９】
プログラム記憶部１１０は、ＰＬＣ１００が被制御機器を制御するため実行する制御プログラムを記憶する。制御プログラムは、図２に示すユーザプログラム１１１に相当するものである。プログラム記憶部１１０の機能は、図２に示す不揮発性メモリ１１により実現される。
【００３０】
図３に、ユーザプログラム１１１の一例を示す。図３に示す例では、ユーザプログラム１１１は、複数のブロックを含む。ブロックは、例えば、ＰＬＣ１００が実行する処理を機能単位に分けたものである。
【００３１】
ＳＦＣで記載されたユーザプログラム１１１は、次のように実行される。ユーザプログラム１１１は、複数のブロックを含むため、ブロック番号の小さいブロックからブロック番号の大きいブロックの順に処理される。なお、そのスキャンにおいて非活性のブロックのステップは処理されない。活性状態のブロックの活性しているステップが順に処理される。
【００３２】
図３を参照しながら、ステップの処理の例を説明する。例えば、Ｎ（Ｎは正の整数）スキャン目にブロック０が活性状態であり、ブロック０のステップ０が活性しているとする。この場合、ブロック０のステップ０が実行される。ブロック０のステップ０が実行されたときに、ブロック０のステップ０とブロック０のステップ２との間の移行条件Ｔ０２が成立しているとき、ブロック０のステップ０は非活性になり、ブロック０のステップ２が活性する。一方、移行条件Ｔ０２が成立していないとき、ブロック０のステップ２は非活性状態のままであり、ブロック０のステップ０は活性状態のままである。例えば、ブロック０のステップ０とブロック０のステップ２との間の移行条件Ｔ０２が成立しているとする。この場合、ブロック０のステップ０は非活性になり、ブロック０のステップ２が活性する。
【００３３】
続いて、ブロック１が活性状態であれば、ブロック１の活性しているステップが実行され、ブロック１が非活性状態であれば、ブロック１のいずれのステップも実行されない。例えば、ブロック１が活性状態であり、ブロック１のステップ１が活性しているとする。この場合、ブロック１のステップ１が実行される。ブロック１のステップ１が実行されたときに、ブロック１のステップ１とブロック１のステップ３との間の移行条件Ｔ１２が成立しているとき、ブロック１のステップ１は非活性になり、ブロック１のステップ３が活性する。一方、移行条件Ｔ１２が成立していないとき、ブロック１のステップ１は活性状態のままである。
【００３４】
続いて、ブロック２が活性状態であれば、ブロック２の活性しているステップが実行され、ブロック２が非活性状態であれば、ブロック２のいずれのステップも実行されない。
【００３５】
Ｎ＋１スキャン目では、ブロック０が活性状態である場合、ブロック０の活性状態のステップが実行される。例えば、ブロック０が活性状態であり、ブロック０のステップ２が活性しているとする。この場合、ブロック０のステップ２が実行される。ブロック０のステップ２が実行されたときに、例えば、ブロック０のステップ２とブロック０のステップ０との間の移行条件Ｔ０４が成立しているとき、ブロック０のステップ２は非活性になり、ブロック０のステップ０が活性する。
【００３６】
続いて、ブロック１が活性状態であれば、ブロック１の活性しているステップが実行され、ブロック１が非活性状態であれば、ブロック１のいずれのステップも実行されない。さらに、ブロック２が活性状態であれば、ブロック１の活性しているステップが実行され、ブロック２が非活性状態であれば、ブロック１のいずれのステップも実行されない。
【００３７】
Ｎ＋２スキャン目では、ブロック０が活性状態である場合、ブロック０の活性状態のステップが実行される。例えば、ブロック０が活性状態であり、ブロック０のステップ０が活性しているとする。この場合、ブロック０のステップ０が実行される。ブロック０のステップ０が実行されたときに、例えば、ブロック０のステップ０とブロック０のステップ２との間の移行条件Ｔ０２が成立しているとき、ブロック０のステップ０は非活性になり、ブロック０のステップ２が活性する。
【００３８】
図１に示すプログラム実行部１２０は、実行周期毎に制御プログラムを実行する。プログラム実行部１２０の機能は、図２に示すＭＰＵ１５により実現される。プログラム実行部１２０は、本発明の実行手段の一例である。
【００３９】
図１に示すトレース前処理部１３０は、プログラム記憶部１１０が記憶する制御プログラム中のステップに一意な番号を振り、ステップと番号との対応を示すデータをインデックス情報記憶部１４０に格納する。具体的には、トレース前処理部１３０は、図３に示すようなユーザプログラム１１１の各ステップに、ユーザプログラム１１１内において一意となるシリアル番号を割り当てる。このシリアル番号をインデックスと称する。ステップにインデックスを割り当てる処理をインデックス割り当て処理と称することがある。トレース前処理部１３０は、インデックス割り当て処理を、例えば、電源が投入後のイニシャル処理の一部として実行する。トレース前処理部１３０の機能は、図２に示すＭＰＵ１５より実現される。トレース前処理部１３０は、本発明の割当手段の一例である。
【００４０】
トレース前処理部１３０が、ステップにインデックスを割り当てるのは次のような理由による。上述のように、ユーザプログラム１１１の複数のブロックのステップは、同一スキャンにおいて並行して実行される。ステップは、ブロックをまたがって実行されるため、ユーザプログラム１１１の作成時に採番されたステップ番号だけを記録するのでは、ステップの実行経路と、ステップ毎の実行回数と、を特定することができない。
【００４１】
さらに、ユーザプログラム１１１内には、例えば、機能毎に処理をひとまとめにしたブロックが複数存在する場合がある。ステップを示すステップ番号は、ブロック内において採番されているため、異なるブロックにおいて、同一のステップ番号を有するステップが存在することがある。この場合、トレース時に、ユーザプログラム１１１の作成時に採番されたステップ番号だけを記録するのでは、そのステップがどのブロックに属するものかを特定することができないからである。
【００４２】
インデックス情報記憶部１４０は、トレース前処理部１３０により割り当てられたインデックスのデータを記憶する。具体的には、インデックス情報記憶部１４０は、図４に示すようなインデックステーブル１４０１を有する。インデックステーブル１４０１には、ブロック番号とステップ番号とで特定されるステップに振られたインデックスが格納される。インデックス情報記憶部１４０の機能は、図２に示す不揮発性メモリ１１により実現される。制御プログラム中のステップは、本発明のステップの一例である。インデックス情報記憶部１４０は、本発明のステップ情報記憶手段の一例である。インデックステーブル１４０１に格納されるデータは、本発明のステップ情報の一例である。ブロック番号は、本発明のブロックを識別する識別情報の一例である。ステップ番号は、本発明のブロック内においてステップを識別する識別情報の一例である。
【００４３】
図１に示すトレース実行部１５０は、プログラム実行部１２０が実行するステップの実行をトレースし、トレースログをトレースログ記憶部１６０に格納する。トレース実行部１５０の機能は、図２に示すＭＰＵ１５により実現される。トレース実行部１５０は、本発明のログ記録手段の一例である。
【００４４】
具体的には、トレース実行部１５０は、開発ツール５００からトレースの実行の開始指示を受け付けると、トレースを開始する。トレース実行部１５０は、プログラム実行部１２０が制御プログラムをスキャンした回数をカウントするカウンタ（以下、スキャンカウンタ）を有しているものとする。以下、プログラム実行部１２０が制御プログラムをスキャンした回数をスキャン数ということがある。スキャンカウンタの初期値は、例えば“１”である。トレース実行部１５０は、トレースしたステップが最後のステップであると、スキャンカウンタの値を、例えば、１加算する。
【００４５】
トレース実行部１５０は、プログラム実行部１２０がステップを実行すると、図４に示すインデックステーブル１４０１から、そのステップに割り当てられたインデックスを読み出し、スキャンカウンタの値が示すスキャンにおいて、インデックスの値が示すステップが実行されたことを示すログを、トレースログ記憶部１６０に格納する。トレース実行部１５０は、プログラム実行部１２０がステップを実行するたびに、ログをトレースログ記憶部１６０に格納する。また、トレース実行部１５０は、プログラム実行部１２０が、制御プログラムの最後のステップを実行すると、スキャンカウンタの値を加算する。プログラム実行部１２０が制御プログラムの１回のスキャンを終えたからである。
【００４６】
トレースログ記憶部１６０は、トレース実行部１５０が記録したトレースログを示すデータを記憶する。図５に、トレースログ記憶部１６０に格納されているトレースログの一例を示す。図示する例では、スキャン回数ごとに、実行されたステップのインデックスが順次記録されている。一番左に記載されているインデックスがそのスキャンで最初に実行されたステップを示し、一番右に記載されているインデックスがそのスキャンで最後に実行されたステップを示すものとする。トレースログ記憶部１６０の機能は、図２に示す揮発性メモリ１２により実現される。トレースログに含まれるスキャン回数は、本発明の実行サイクル数を特定する情報の一例である。
【００４７】
図１に示すように、開発ツール５００は、機能的には、トレースの実行をＰＬＣ１００に指示するトレース実行指示部５１０と、ＰＬＣ１００からトレースログを含むデータを読み出すトレースログ読出部５２０と、トレースログに基づいてトレースの結果を表示する表示部５３０とを含む。
【００４８】
トレース実行指示部５１０は、ユーザからトレースの実行開始の指示を受け付けると、ＰＬＣ１００にプログラムのトレースの実行の開始指示を出力する。また、トレース実行指示部５１０は、ユーザからの指示を受け付け、ＰＬＣ１００にトレースの実行を停止するよう指示を出す。トレース実行指示部５１０の機能は、図２に示す入力装置５２と、接続インタフェース５４と、ＣＰＵ５５とにより実現される。
【００４９】
トレースログ読出部５２０は、ユーザからトレースログの読み出しの指示を受け付けると、トレースログ及びログの表示に必要なデータをＰＬＣ１００から読み出す。具体的には、トレースログ読出部５２０は、ＰＬＣ１００のトレースログ記憶部１６０に格納されているトレースログと、インデックス情報記憶部１４０に格納されているインデックステーブル１４０１のデータと、プログラム記憶部１１０に格納されている制御プログラムを読み出し、読み出した制御プログラムを表示部５３０に出力する。トレースログ読出部５２０の機能は、図２に示す入力装置５２と、接続インタフェース５４と、ＣＰＵ５５とにより実現される。トレースログ読出部５２０は、本発明の読出手段の一例である。
【００５０】
表示部５３０は、トレースログ読出部５２０から、トレースログと、インデックステーブル１４０１のデータと、制御プログラムとが供給されると、トレースの結果を示す画像を生成し、生成した画像を表示装置５３に表示する。表示部５３０の機能は、図２に示す表示装置５３と、ＣＰＵ５５とにより実現される。表示部５３０は、本発明の表示手段の一例である。
【００５１】
次に、トレース前処理部１３０が、トレースに先立って制御プログラムのステップそれぞれにインデックスを割り当てる処理を説明する。トレース前処理部１３０は、ＰＬＣ１００のイニシャル処理の一部として、下記のインデックス割り当て処理を実行する。
【００５２】
図６に示すように、トレース前処理部１３０は、制御プログラム内の全てのステップにインデックスを割り当てるまで（ステップＳ１１；Ｎｏ）、次のステップにインデックスを割り当て、インデックスと、ステップの属するブロック番号と、ステップのステップ番号とを、図４に示すインデックステーブル１４０１に格納する（ステップＳ１２）。トレース前処理部１３０は、制御プログラム内の全てのステップにインデックスを割り当てると（ステップＳ１１；Ｙｅｓ）、インデックス割り当て処理を終了する。以上がインデックス割り当て処理である。
【００５３】
続いて、トレース実行部１５０が、制御プログラムのステップの実行をトレースする処理を説明する。
【００５４】
トレース実行部１５０は、ユーザの指示に従って、開発ツール５００のトレース実行指示部５１０がトレースの実行指示を出力すると、トレース処理を開始する。例えば、ユーザは、開発ツール５００からトレースの開始を指示した後、ＰＬＣ１００の動作モードを制御プログラムの実行モードに切り替える。よって、プログラム実行部１２０は、制御プログラムの実行を開始する。
【００５５】
図７に示すように、トレース実行部１５０は、プログラム実行部１２０がステップを実行したと判別すると（ステップＳ２１；Ｙｅｓ）、トレース実行部１５０は、インデックステーブル１４０１から、実行されたステップのインデックスを読み出す（ステップＳ２２）。続いてトレース実行部１５０は、現在のスキャンカウンタの値を読み出して、現在のスキャン数を取得する（ステップＳ２３）。トレース実行部１５０は、ステップＳ２２で読み出したインデックスの値を、現在のスキャン数が示すスキャンで実行されたステップとして、ステップのログをトレースログ記憶部１６０に記録する（ステップＳ２４）。
【００５６】
トレース実行部１５０は、対象のステップが制御プログラムの最後のステップであるか否かを判別する（ステップＳ２５）。そのステップが制御プログラムの最後のステップである場合（ステップＳ２５；Ｙｅｓ）、トレース実行部１５０は、スキャンカウンタの値を加算し（ステップＳ２６）、最後のステップでない場合（ステップＳ２５；Ｎｏ）、ステップＳ２７を実行する。
【００５７】
ステップＳ２７で、トレース実行部１５０は、開発ツール５００からトレースの停止指示を受けたか否かを判別する（ステップＳ２７）。トレースの停止指示を受けていない場合（ステップＳ２７；Ｎｏ）、再び、トレース実行部１５０は、ステップＳ２１の処理を実行する。一方、トレースの停止指示を受けた場合は（ステップＳ２７；Ｙｅｓ）、トレース実行部１５０は、トレース処理を終了する。以上がトレース処理である。上記のように、トレース実行部１５０がトレース処理を実行することにより、図５に示すようなログがＰＬＣ１００のトレースログ記憶部１６０に格納されることになる。
【００５８】
ユーザがトレースの停止指示を出した後、トレースログを表示することを指示したとする。これに応答して、トレースログ読出部５２０は、ＰＬＣ１００から、トレースログと、インデックステーブル１４０１のデータと、制御プログラムを読み出す。トレースログ読出部５２０は、読み出したデータを表示部５３０に出力する。
【００５９】
例えば、表示部５３０は、図５に示すようなトレースログが供給されたとする。図示する例では、１スキャン目にブロック０のステップ０とブロック１のステップ０とが実行され、２スキャン目にブロック０のステップ２とブロック１のステップ２とが実行されている。３スキャン目にブロック０のステップ０とブロック１のステップ２とが実行されている。表示部５３０は、スキャン１のトレースログから、図８Ａに示すような画面を表示する。
【００６０】
ここでは、１回目のスキャンのログから、まずインデックス１が示すブロック０のステップ０が実行されたことをユーザが視認できるよう、表示部５３０は、図８Ａに示すように、ユーザプログラム１１１を表示し、ブロック０のステップ０を網掛けで表示している。さらに、表示部５３０は、ブロック０のステップ０がこれまでに実行された回数を併せて表示する。図示する例では、１回目のスキャンより以前にはブロック０のステップ０は実行されていないため、ブロック０のステップ０には実行回数として“１”が表示されている。このように、表示部５３０は、ステップ番号の近傍に、ステップの実行回数を表示する。よって、ユーザは、ステップが何回実行されたかを視認することができる。さらに、表示部５３０はスキャン数を表示する。
【００６１】
ここで、ユーザが「次のステップ」のボタンを押したとする。これに応答して、表示部５３０は、図８Ｂに示すような画面を表示する。図示する例では、表示部５３０は、次に実行されたステップであるブロック１のステップ０を網掛けで表示する。さらに、ユーザが「次のステップ」のボタンを押したとする。これに応答して、表示部５３０は、図８Ｃに示すような画面を表示する。図示する例では、表示部５３０は、ブロック０のステップ２を網掛けで表示する。
【００６２】
ここで、ユーザが「次のステップ」のボタンを押したとする。これに応答して、表示部５３０は、図８Ｄに示すような画面を表示する。図示する例では、表示部５３０は、次に実行されたステップであるブロック１のステップ２を網掛けで表示する。ここで、ユーザが「次のステップ」のボタンを押したとする。これに応答して、表示部５３０は、図８Ｅに示すような画面を表示する。図示する例では、表示部５３０は、次に実行されたステップであるブロック０のステップ０を網掛けで表示する。２回目のスキャンの時点で、ブロック０のステップ０は２回実行されているため、ブロック０のステップ０には実行回数として“２”が表示されている。
【００６３】
また、例えば、図８Ｅを表示している状態で、ユーザが「前のステップ」のボタンを押した場合、表示部５３０は、図８Ｄに示すような、前に実行されたステップを示す画面を表示する。
【００６４】
開発ツール５００が、このような態様で、トレースログを表示することで、ユーザはステップの実行経路を逐次確認することが可能となる。さらに、開発ツール５００は、ステップ番号に対応付けて、ステップの実行回数を表示する。よって、ユーザは、ステップが何回実行されたかを視認することができる。
【００６５】
また、表示部５３０は、図９Ａに示すように、各スキャンに実行されたステップを１つの画面上に表示するようにしてもよい。表示部５３０は、１スキャンで、ブロック０のステップ０、ブロック１のステップ１が実行されたことが視認可能なように、ブロック０のステップ０、ブロック１のステップ１を網掛けで表示する。さらに、表示部５３０は、各ステップが実行された順序を示す番号を表示する。図示する例は、１スキャンのトレースログを示す画面を表示しているが、例えば、ユーザがプルダウンを操作すると、表示部５３０は、指定されたスキャンのトレースログを示す画面を表示する。
【００６６】
また、表示部５３０は、図９Ｂに示すようなタイミングチャートを表示することもできる。図示する例では、１回目から４回目のスキャンが表示されているが、ユーザは、スクロールバーＢ１を動かすことで、５回目以降のスキャンでのタイミングチャートを表示することができる。また、図示する例では、ブロック０のステップ０から、ブロック２のステップ０までが表示されているが、ユーザは、スクロールバーＢ２を動かすことで、以降のステップのタイミングチャートを表示することができる。
【００６７】
開発ツール５００が、このような態様で、トレースログを表示することで、ユーザはステップの実行の経過を確認することが可能となる。
【００６８】
以上説明したように、実施の形態に係るＰＬＣ１００は、トレースログとして、スキャン数と、ステップを特定するインデックスとを対応づけて記録する。よって、ユーザは、プログラムのステップの実行経路及び実行回数を実行周期単位で確認することができる。
【００６９】
ＰＬＣ１００は、各ステップに制御プログラム内で一意な番号を振っているので、プログラムが、機能単位で複数のブロックに分けられており、異なるブロックにおいて、同じ番号が振られているステップが存在する場合であっても、ステップの実行経路及び実行回数のトレースが可能である。
【００７０】
また、トレースログに記録するステップを特定するステップ情報として、インデックスを使用することにより、例えば、ブロック番号とステップ番号とをトレースログに記録するよりも、トレースログを格納するのに要するメモリ容量を抑えることができる。
【００７１】
上記の実施の形態では、インデックスとして数値を使用する例を説明したが、これに限られない。例えば、図１０に示すように、インデックスは、数値と文字とを含んでいてもよい。図示する例では、インデックスは、ブロック番号とステップ番号とを含み、例えば“Ｂ０２Ｓ００”は、ブロック２のステップ０であることを示す。
【００７２】
実施の形態では、ＰＬＣ１００が、インデックスを命令それぞれに割り当てる例を説明したが、例えば、開発ツール５００が、命令それぞれにインデックスに割り当て、例えば、図４に示すようなインデックステーブル１４０１のデータを作成し、作成したデータをＰＬＣ１００に送信するようにしてもよい。
【００７３】
実施の形態では、トレースログ記憶部１６０の機能は、揮発性メモリ１２により実現される例を説明したが、これに限られない。トレースログ記憶部１６０の機能は、不揮発性メモリにより実現されてもよい。不揮発性メモリとして、例えば、ＵＳＢ（Universal Serial Bus）メモリ、ＳＤ（Secure Digital）メモリカードといったフラッシュメモリを使用することができる。
【００７４】
実施の形態では、ファームウェアが、トレースの実行に必要な前処理を実行する機能と、制御プログラムのステップの実行をトレースする機能を備える例を説明したが、これに限られない。例えば、ＯＳ（Operating System）がこれらの機能を備えていてもよい。あるいは、ＰＬＣ１００の不揮発性メモリ１１には、トレースの実行に必要な前処理を実行する機能をＭＰＵ１５に実現させるプログラムと、制御プログラムのステップの実行をトレースする機能をＭＰＵ１５に実現させるプログラムとが格納されていてもよい。この場合、ＭＰＵ１５が、これらのプログラムを実行することにより、トレースの実行に必要な前処理を実行する機能と、制御プログラムのステップの実行をトレースする機能とが実現される。あるいは、ＭＰＵ１５は、ネットワークを介して接続された他のコンピュータに格納されているプログラムを実行することによりこれらの機能を実現してもよい。
【００７５】
上記のＰＬＣ１００の機能を実現するプログラムを記録する記録媒体としては、磁気ディスク、光ディスク、光磁気ディスク、フラッシュメモリ、半導体メモリ、磁気テープを含むコンピュータ読取可能な記録媒体を使用することができる。
【００７６】
また、ＰＬＣ１００の機能を実現する手段は、ソフトウェアに限られず、その一部又は全部を、専用のハードウェアによって実現してもよい。例えば、専用のハードウェアとして、ＦＰＧＡ（Field Programmable Gate Array）又はＡＳＩＣ（Application Specific Integrated Circuit）に代表される回路を使用してもよい。
【００７７】
本発明は、広義の精神と範囲を逸脱することなく、様々な実施形態及び変形が可能とされるものである。また、上述した実施形態は、本発明を説明するためのものであり、本発明の範囲を限定するものではない。つまり、本発明の範囲は、実施形態ではなく、請求の範囲によって示される。そして、請求の範囲内及びそれと同等の発明の意義の範囲内で施される様々な変形が、本発明の範囲内とみなされる。
【符号の説明】
【００７８】
Ｂ１，Ｂ２  スクロールバー、１１  不揮発性メモリ、１２  揮発性メモリ、１３  入出力インタフェース、１４，５４  接続インタフェース、１５，１４０  ＭＰＵ、１９，５９  バス、５１  メモリ、５２  入力装置、５３  表示装置、５５  ＣＰＵ、１００  プログラマブルロジックコントローラ（ＰＬＣ）、１１０  プログラム記憶部、１１１  ユーザプログラム、１２０  プログラム実行部、１３０  トレース前処理部、１４０  インデックス情報記憶部、１５０  トレース実行部、１６０  トレースログ記憶部、５００  開発ツール、５１０  トレース実行指示部、５１１  ログ表示プログラム、５２０  トレースログ読出部、５３０  表示部、７０１，７０２  接続ケーブル、８０１  検出器、８０２  被制御機器、１４０１，１４０２  インデックステーブル
【要約】
プログラマブルロジックコントローラ（１００）が備えるプログラム実行部（１２０）は、プログラマブルロジックコントローラ（１００）用のプログラミング言語であるシーケンシャル・ファンクション・チャートを用いて作成されたプログラムを繰り返し実行する。インデックス情報記憶部（１４０）は、プログラムに含まれており、プログラマブルロジックコントローラ（１００）が実行する処理を記述したステップを一意に特定するステップ情報を記憶する。トレース実行部（１５０）は、プログラム実行部（１２０）がステップを実行するたびに、ステップ情報と、プログラムの実行が繰り返された回数である実行サイクル数を特定する情報と、を含むログを記録する。【図１】
0006783034.tif 000002
【図２】
0006783034.tif 000003
【図３】
0006783034.tif 000004
【図４】
0006783034.tif 000005
【図５】
0006783034.tif 000006
【図６】
0006783034.tif 000007
【図７】
0006783034.tif 000008
【図８Ａ】
0006783034.tif 000009
【図８Ｂ】
0006783034.tif 000010
【図８Ｃ】
0006783034.tif 000011
【図８Ｄ】
0006783034.tif 000012
【図８Ｅ】
0006783034.tif 000013
【図９Ａ】
0006783034.tif 000014
【図９Ｂ】
0006783034.tif 000015
【図１０】
0006783034.tif 000016
【図１１】
0006783034.tif 000017