(57)【要約】【課題】  一度プログラマブルコントローラに書込まれた制御プログラムの変更をすることなく、トレースの実行/未実行を切替え可能なプログラマブルコントローラを得る。【解決手段】  コンパイルされた制御プログラムを記憶する記憶手段と、前記制御プログラムを実行する制御プログラム実行手段と、前記制御プログラムを構成する各命令の実行時に、当該命令のトレースを、命令コード内に設けられたフラグに基づいて実行するトレース実行手段と、外部からの指示に基づいて、前記フラグを差し替える差替手段と、を備える。【選択図】  図１
2011216056.tif 000002
【特許請求の範囲】
【請求項１】
プログラマブルコントローラにより実行される制御プログラムであって、当該制御プログラムを構成する各命令のトレースを当該命令の命令コード内に設けられたフラグに基づいて前記プログラマブルコントローラが実行する制御プログラムを作成する作成手段と、
前記制御プログラムをコンパイルする際に、外部からの指示に基づいて、前記フラグを変更可能なコンパイル手段と、
を備えたプラグラマブルコントローラの周辺装置。
【請求項２】
コンパイルされた制御プログラムを記憶する記憶手段と、
前記制御プログラムを実行する制御プログラム実行手段と、
前記制御プログラムを構成する各命令の実行時に、当該命令のトレースを、命令コード内に設けられたフラグに基づいて実行するトレース実行手段と、
外部からの指示に基づいて、前記フラグを差し替える差替手段と、
を備えたプラグラマブルコントローラ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラマブルコントローラ及びその周辺装置に係り、特に、ラダー・ロジック(LD)やインストラクション・リスト(IL)などのプログラミング言語でプログラミングされた制御プログラムを実行して機械制御を実現するプログラマブルコントローラと、そのプログラマブルコントローラと通信可能なプログラマブルコントローラの周辺装置とを用いて、前記制御プログラムの実行経路のトレースを実現する方法に関するものである。
【背景技術】
【０００２】
従来のプログラマブルコントローラにおける制御プログラムのトレース機能は、主に制御プログラムのデバッグのために用いられる機能であり、従来のプログラマブルコントローラシステムでのトレース機能の実現方法として以下が開示されている。
【０００３】
従来の制御プログラムのトレース方法では、制御プログラムを構成する命令コードのビットフィールド内もしくは外にトレースフラグを設け、上記命令コードを実行する際にトレースフラグが「０」の場合はトレースなしとし、トレースフラグが「１」の場合はトレースルーチンへ処理を遷しトレース処理を実施することにより、制御プログラムのトレースを実現している(例えば、特許文献１参照)。
【０００４】
その他にも、ユーザに制御プログラム中へ命令自身を識別するための番号をオペランドとして格納した命令を挿入させて、上記命令が実行された場合だけ、その命令の上記識別番号をメモリに時系列的に記憶させ、周辺装置に上記メモリに格納された上記識別番号を表示することでプログラムのトレースを実現している(例えば、特許文献２参照)。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開昭６１−１０３２５０号公報
【特許文献２】特開平４−２１６１０３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、特許文献１に開示されているような制御プログラムのトレース方法によれば、命令コードの実行時にトレースフラグが「１」の場合は、トレースルーチンに処理を遷してトレース処理を行う必要があるため、トレースを実行すると制御プログラムの実行性能が遅くなってしまう問題がある。
【０００７】
また、制御プログラムの実効性能が遅くなるため、デバッグが完了してから制御プログラムのトレースを実行から未実行に変更しようとした場合、一度デバッグした制御プログラムの命令コードのトレースフラグを落とすように再コンパイルし、プログラマブルコントローラに制御プログラムを書込む必要があり、容易にトレース実行/未実行を切替えられず効率が悪い。
【０００８】
また、特許文献２に開示されているような制御プログラムのトレース方式よれば、制御プログラムのトレースを実現するためにトレース用の専用命令を制御プログラムに追加する必要があり、挿入位置をユーザ自身が考えて制御プログラムを構築、デバッグする必要があり手間が掛かる問題がある。
【０００９】
また、前記トレース用命令を制御プログラムに追加する必要があるため、制御プログラムのサイズ増加や実効性能が劣化する問題がある。また、トレース結果として前記トレース用命令のオペランドを表示するしかできないため、どのような経路を通ったのか把握しにくい問題がある。
【００１０】
本発明は、前記問題点を鑑みてなされたもので、制御プログラムを実行する際に命令コードが格納されているアドレスを命令の実行と共に内部バッファに格納することで、トレースルーチンに処理を遷さなくても高速に制御プログラムのトレースを実現でき、さらに、「分岐トレース」、「全トレース」、「未実施」の情報を元に命令コードのビットフィールド内の制御プログラムのトレース有効/無効フラグを操作してコンパイル可能なプログラマブルコントローラの周辺装置を提供することを目的とする。
【００１１】
また、一度プログラマブルコントローラに書込まれた制御プログラムの変更をすることなく、トレースの実行/未実行を切替え可能なプログラマブルコントローラを提供することを目的とする。
【課題を解決するための手段】
【００１２】
この発明に係るプログラマブルコントローラの周辺装置は、プログラマブルコントローラにより実行される制御プログラムであって、当該制御プログラムを構成する各命令のトレースを当該命令の命令コード内に設けられたフラグに基づいて前記プログラマブルコントローラが実行する制御プログラムを作成する作成手段と、前記制御プログラムをコンパイルする際に、外部からの指示に基づいて、前記フラグを変更可能なコンパイル手段と、を備えたものである。
【００１３】
又、この発明に係るプログラマブルコントローラは、コンパイルされた制御プログラムを記憶する記憶手段と、前記制御プログラムを実行する制御プログラム実行手段と、前記制御プログラムを構成する各命令の実行時に、当該命令のトレースを、命令コード内に設けられたフラグに基づいて実行するトレース実行手段と、外部からの指示に基づいて、前記フラグを差し替える差替手段と、を備えたものである。
【発明の効果】
【００１４】
本発明に係るプログラマブルコントローラの周辺装置によれば、ユーザがコンパイル時に実施したいトレース種別(分岐トレース、全トレース)を指定すれば良いため、制御プログラムにトレース用の専用命令を挿入する煩わしさが省かれる。また、トレース用の専用命令を挿入する必要がなくなるため、制御プログラムサイズの増加や実効性能の低下を軽減することができる。
【００１５】
また、本発明に係るプログラマブルコントローラによれば、実行した命令コードの格納アドレスをメモリに時系列で格納する機能の実施/未実施を、命令コードとは独立に設定できるため、デバッグ後にトレースを未実行にしたい場合にも、制御プログラムを変更し再コンパイルする手間を省くことができる。
【図面の簡単な説明】
【００１６】
【図１】本発明におけるプログラマブルコントローラとプログラマブルコントローラの周辺装置の概略構成を示すブロック図である。
【図２】ラダー・ロジック(LD)のプログラム例である。
【図３】命令と実行コードの関係を示した図である。
【図４】制御プログラムのコンパイル時の動作を示すフローチャートである。
【図５】制御プログラム実行機能部を示す説明図である。
【図６】内部格納バッファの構成図である。
【図７】トレース結果の例を示した図である。
【発明を実施するための形態】
【００１７】
実施の形態．
本機能を実施するための最良の形態は図１に示す通り、プログラマブルコントローラ１０とプログラマブルコントローラと通信可能なプログラマブルコントローラの周辺装置１１と制御プログラム作成やコンパイルなどユーザの指示をプログラマブルコントローラに伝える入力装置２０と制御プログラムやトレースの結果などを表示する出力装置２１で構成される。
【００１８】
プログラマブルコントローラの周辺装置１１には、ユーザが作成した制御プログラムを格納する制御プログラム格納メモリ３０、ユーザが作成した制御プログラムをコンパイルした後の命令コードを格納する命令コード格納メモリ３１、ユーザからの入力に従ってプログラム作成やユーザに対して制御プログラムの表示を実施する制御プログラム作成機能部３３、ユーザが作成した制御プログラムを命令コードにコンパイルする制御プログラムコンパイル機能部３４、コンパイルした命令コードをプログラマブルコントローラ１０にローディングする制御プログラムローディング機能部３５、ユーザが指定したトレース設定をプログラマブルロジックコントローラ１０にローディングするトレース設定機能部３６、トレース結果を取得し出力装置２１に表示するトレース結果表示機能部３７から構成される。
【００１９】
プログラマブルコントローラ１０は、コンパイルされた制御プログラムを格納するための制御プログラム命令コード格納メモリ４０、トレースした制御プログラムの命令コードのアドレスを格納するための内部格納バッファ４１、制御プログラムのトレース結果の表示に必要な他情報を付加したデータを格納するトレース結果格納メモリ４２、制御プログラムの命令コードを解析、実行し、実行する際に命令コードの格納先アドレスを内部格納バッファ４１に格納する制御プログラム実行機能部４３、内部格納バッファ４１に格納されている命令コードの格納先アドレスからトレース結果表示に必要な情報を作成するトレース情報作成部４４、プログラマブルコントローラの周辺装置１１からのトレース開始/終了要求を受け付けるトレース開始/停止機能部４５、トレース完了のトリガ設定に従って制御プログラムを強制的に停止するブレーク機能部４６、トレース機能の実行/未実行を一括で制御するトレース一括設定レジスタ４７から構成される。
【００２０】
先ず、図１を参照して制御プログラムの作成方法について説明する。
ユーザがプログラマブルコントローラの周辺装置１１に接続されているキーボードやマウスなどの入力装置２０を使用して、制御プログラム作成機能部３３に対し制御プログラム(ラダー・ロジックやイントラクション・リストなど)を入力すると、制御プログラム作成機能部３３は入力された制御プログラムを制御プログラム格納メモリ３０に書込む。また、制御プログラム作成機能部３３は、出力装置２１(ディスプレイなど)に、作成している制御プログラムを表示することができ、ユーザはその表示を見ながら制御プログラムを作成する。
【００２１】
次に、図１を参照して制御プログラムのコンパイル方法について説明する。
制御プログラムの作成が完了すると、ユーザは制御プログラムをプログラマブルコントローラ１０で実行できる命令コードにコンパイルするよう入力装置２０を介して制御プログラムコンパイル機能部３４に指示する。
【００２２】
この時、本実施の形態では、ユーザが制御プログラムのトレース種別について、「未実行」、「分岐トレース」、「全トレース」などのコンパイルオプションを指定してコンパイルを指示することを可能とする。指示を受けた制御プログラムコンパイル機能部３４は、制御プログラム格納メモリ３０からユーザが作成した制御プログラムを読出し、命令コードにコンパイルする。コンパイルした結果は命令コード格納メモリ３１に格納する。この時、制御プログラムコンパイル機能部３４は、ユーザが指定したコンパイルオプションに従って制御プログラムをコンパイルする。
【００２３】
ここで、図２、図３、図４を参照して、トレース種別を指定した場合のコンパイルの詳細を示す。
図２はラダー・ロジック(LD)で記載された制御プログラム例である。MAINプログラム５０と、SUBプログラム５１の２つの制御プログラムから構成されており、LD命令５２のような命令の集まりとして構成されている。各命令はステップNo.５４が割付けられている。
【００２４】
また、命令の中にはCALL命令５３のような他プログラムのステップに分岐する命令も存在する。CALL命令５３を実行した場合、SUBプログラム５１のポインタ５５から制御プログラムを実行し、RET命令５６を実行するとCALL命令５３の次ステップNo.から制御プログラムを実行する。
また、制御プログラムには定周期で動作可能な割込みプログラム５７も記載することができる。ユーザが割込みポインタI５８の制御プログラムを実行する定周期間隔を設定することができ、設定した間隔の時間になると割込みポインタ５８から制御プログラムを実行し、IRET命令５９を実行すると割込みプログラム５７の処理を終了する。
【００２５】
図３は各命令の命令コード例を示した図である。図２のLD命令５２は、命令コード「0xA050B400」６０で表されている。同様に、図２の前記MAINプログラム５０、およびSUBプログラム５１内の全ての命令はそれぞれ命令コード６１として表される。
また、さらに各命令コードは命令コードフォーマット６２が決まっており、命令コード内のビットフィールド中に制御プログラムのトレース有効/無効フラグ６３の１bitの情報を設け、トレースの有効/無効指定を可能とする。
【００２６】
図４にコンパイル時の詳細フローを示す。
先ず、制御プログラムコンパイル機能部３４は、制御プログラム格納メモリ３０に格納されている制御プログラムを読出す（ステップ１００）。
次に、ユーザが作成した制御プログラムを命令コードに変換する。すなわち、実行コードにコンパイルする（ステップ１０１）。この際にコンパイル処理を簡略化するため、各命令コードのトレース有効/無効フラグ６３の値を全て「０」に設定する。
【００２７】
次に、制御プログラムコンパイル機能部３４は、全ての制御プログラムを実行コードに変換した後、コンパイルオプションを確認し（ステップ１０２）、コンパイルオプションが「分岐トレース」の場合は、コンパイルした命令コード６１を読出し（ステップ１０３）、CALL命令５３やRET命令５６など分岐処理を必要とする命令とLD命令５２のように分岐処理を必要としない命令を判断し（ステップ１０４）、分岐処理を必要とする命令に関してはトレース有効/無効フラグ６３の値を「１」に設定し（ステップ１０５）、分岐処理を必要としない命令に関してはトレース有効/無効フラグ６３の値を「０」のままとする。そして命令コードを全て変換するまで前記処理を実施し（ステップ１０６）、コンパイルした命令コードを命令コードメモリ３１に格納する（ステップ１０７）。
【００２８】
又、ステップ１０２において、コンパイルオプションが「分岐トレース」以外の場合は、コンパイルオプションが「全トレース」か「未実行」を判断する（ステップ１０８）。コンパイルオプションが「全トレース」の場合は、命令コードのトレース有効/無効フラグ６３の値を「１」に設定し（ステップ１０９）、コンパイルした命令コードを命令コードメモリ３１に格納する（ステップ１０７）。
【００２９】
上記のように、本実施の形態においては、コンパイルする際にユーザのコンパイル種別の指示に従いコンパイルを実施することにより、ユーザ自身が制御プログラムにトレース用の専用命令を挿入する煩わしさが省かれ、制御プログラムサイズの増加や実効性能の低下を軽減することができる。
【００３０】
図１に戻り、制御プログラムのローディング方法について説明する。
制御プログラムのコンパイルが完了すると、ユーザが制御プログラムをプログラマブルコントローラ１０にローディングするように、入力装置２０より制御プログラムローディング機能部３５に対して指示する。指示を受けた制御プログラムローディング機能部３５は、命令コード格納メモリ３４からコンパイルした命令コードを読出し、プログラマブルコントローラ１０内の制御プログラム命令コード格納メモリ４０に書込む。
【００３１】
次に、図１を参照して制御プログラムの実行方法について説明する。
プログラマブルコントローラ１０の制御プログラム実行機能部４３は、制御プログラム命令コード格納メモリ４０に格納された命令コードを実行し、トレースの要求がある場合は内部格納バッファ４１に実行した命令コードの格納先アドレスを格納する。
【００３２】
ここで、図５を参照して、制御プログラム実行機能部４３の構成について説明する。
制御プログラム実行機能部４３は、命令コードを制御プログラム命令コード格納メモリ４０からフェッチするフェッチ部７１、命令コードを解析およびレジスタフェッチを行うデコード部７２、命令を実行する実行部７３、各メモリへのアクセスを行うメモリアクセス部７４、レジスタへのアクセスを行うライトバック部７５の複数段の命令パイプラインから構成されており、トレース実施/未実施一括設定レジスタ４７の値を基にトレース実行有無を判断し命令コードフォーマットのトレース有効/無効フラグ６３を操作するトレース実行判別部７７、実行した命令コードの格納位置を内部格納バッファメモリ４１に格納するトレース実行部７８、実行部に存在する命令コードの格納先アドレスを格納する実行中命令コードアドレス格納レジスタ７９から構成される。
【００３３】
又、図５を参照して、制御プログラム実行機能部４３の動作について説明する。
制御プログラム実行機能部４３のフェッチ部７１は、制御プログラム命令コード格納メモリ４０から命令コードをフェッチする。フェッチ後、デコード部７２で命令コードをデコードする際に、トレース実行判別部７７がトレース実施/未実施一括設定レジスタ４７の値を読出し、「0：トレース未実施」の場合は命令コードのトレース有効/無効フラグ６３を「0：トレース無効」に差し替える。一方、トレース実施/未実施一括設定レジスタ４７の値が「1：トレース実施」の場合は何もしない。デコード後、実行部７３で命令を実行する。命令実行時に、トレース実行部７８が命令コードのトレース有効/無効フラグ６３をチェックし、「1：トレース有効」の場合は、実行した命令コードの格納先アドレスを実行中命令コードアドレス格納レジスタ７９から内部バッファメモリ４１に書込む。
【００３４】
ここで、図６に内部格納バッファメモリ４１の構成を示す。図５のトレース実行部７８は、図６の最新格納先ポインタ９０を参照し、最新の命令コードの格納先アドレスを格納する位置を把握し、実行した命令コードを格納する。最新格納先ポインタ９０のポインタは内部バッファメモリ４１のサイズ値でループし、内部バッファメモリ４１はリングバッファのような構成を持つ。
【００３５】
上記のように、本実施の形態においては、トレース実施/未実施一括設定レジスタ４７の値を変更することでトレースの実施/未実施を制御する事により、一度プログラマブルコントローラに書込まれた制御プログラムを変更することなく、高速にトレースの実行/未実行を切替えることを可能とする。また、上記のように、制御プログラムの命令コード実行時に、実行した命令コードの格納先アドレスを内部格納バッファメモリ４１に時系列で格納するため、トレースルーチンに処理を遷さず高速に制御プログラムのトレースを実施することが可能となる。
【００３６】
次に、図１を参照して制御プログラムのトレース開始/停止方法について説明する。
ユーザはプログラマブルコントローラの周辺装置１１に接続されている入力装置２０からトレース設定機能部３６に対して、トレース完了のトリガとなる設定とトレース開始を入力する。トレース設定機能部３６は、入力されたトレース完了のトリガ設定をプログラマブルコントローラ１０のトレース開始/停止機能部４５に通知する。
【００３７】
そして、トレース開始/停止機能部４５は、トレース完了となるトリガをブレーク機能部４６に設定し、トレース開始要求として、トレース一括設定レジスタ４７に「1：トレース実施」を設定する。トレース完了となるトリガが成立すると、ブレーク機能部４６からトレース開始/停止機能部４５にトリガが成立したことを通知する。通知を受けたトレース制御機能部４６は、トレース一括設定レジスタ４７に対して、トレース停止の要求として、「0：トレース未実施」を書き込む。尚、トレース完了のトリガは、制御プログラムで使用するデバイスの値が指定した値と一致した場合や、制御プログラムのステップを指定し、その指定したステップを実行した場合などを設定することが可能である。
【００３８】
又、図１を参照して制御プログラムのトレース表示方法について説明する。
ユーザはプログラマブルコントローラの周辺装置１１に接続されている入力装置２０からトレース結果表示機能部３７に対して、トレース結果読出しを要求する。トレース結果表示機能部３７は、プログラマブルロジックコントローラ１０のトレース情報作成部４４に対してトレース情報の読出しを要求する。トレース情報作成部４４は、内部格納バッファ４１から図６の最新格納ポインタ９０の値を読出し、最新のトレース結果である命令コード格納アドレスを取得し、命令コードが格納されているアドレスからプログラム名、ステップNo.、命令名を取得し、トレース結果格納メモリ４２に格納する。全ての命令コードのトレース結果を作成するとトレース情報作成部４４は、トレース結果表示機能部３７に通知を行う。
【００３９】
トレース結果表示機能部３７は、トレース結果格納メモリ４２に格納されているトレース結果を読出し、出力装置２１を介して図７のようにトレース結果を表示する。図７に示すとおり、トレースNo.やプログラム名、ステップNo.、命令名を出力装置２１に転送することにより、ユーザが制御プログラムトレースの結果をタイムチャートなどのグラフィカルな画面で確認することができ、ユーザの制御プログラムのデバッグの効率を向上する事ができる。
【産業上の利用可能性】
【００４０】
以上のように、この発明に係る制御プログラムのトレース機能は、ラダー・ロジック(LD)やインストラクション・リスト(IL)などのプログラミング言語でプログラミングされた制御プログラムを実行して機械制御を実現するプログラマブルコントローラ、およびそのプログラマブルコントローラに接続可能なプログラマブルコントローラ用の周辺装置を用いて、制御プログラムを設計する際のデバッグを実施するのに適している。
【符号の説明】
【００４１】
１０  プログラマブルコントローラ
１１  周辺装置
２０  入力装置
２１  出力装置
３０  制御プログラム格納メモリ
３１  命令コード格納メモリ
３３  制御プログラム作成機能部
３４  制御プログラムコンパイル機能部
３５  制御プログラムローディング機能部
３６  トレース設定機能
３７  トレース結果表示機能部
４０  制御プログラム命令コード格納メモリ
４１  内部格納バッファ
４２  トレース結果格納メモリ
４３  制御プログラム実行機能部
４４  トレース情報作成部
４５  トレース開始/停止機能部
４６  ブレーク機能部
４７  トレース一括設定レジスタ
５０  MAINプログラム
５１  SUBプログラム
５２  LD命令
５３  CALL命令
５４  ステップNo.
５５  ポインタ
５６  RET命令
５７  割込みプログラム
５８  割込みポインタ
５９  IRET命令
６１  命令コード
６２  命令コードフォーマット
６３  トレース有効/無効フラグ
７１  フェッチ部
７２  デコード部
７３  実行部
７４  メモリアクセス部
７５  ライトバック部
７７  トレース実行判別部
７８  トレース実行部
７９  実行中命令コードアドレス格納レジスタ
８０  最新格納先ポインタ
【図１】
2011216056.tif 000003
【図２】
2011216056.tif 000004
【図３】
2011216056.tif 000005
【図４】
2011216056.tif 000006
【図５】
2011216056.tif 000007
【図６】
2011216056.tif 000008
【図７】
2011216056.tif 000009