(57)【要約】【課題】  命令エラーが発生しても動作を停止することなく継続して演算実行するコントローラにおいて、命令エラーの発生及びその内容を簡単に知ることができるようにする。【解決手段】  ユーザプログラムは、ＭＰＵ１１ａとＡＳＩＣ１１ｂとで実行する。ＡＳＩＣのレジスタ１１ｂ′には、実行対象の命令の命令アドレスとそのときの入力パラメータ値が格納される。命令エラーが発生すると、ＡＳＩＣが停止し、ＭＰＵがレジスタから停止している命令の命令アドレスと入力パラメータ値を取得すると共に、バックアップメモリ１１ｇ等の記憶メモリに格納する。その後、ＭＰＵはＡＳＩＣを再起動する。これにより、ＡＳＩＣは、命令エラーを発生した命令の次の命令から継続して演算実行する。記憶メモリに格納された情報は、ツール装置２で読み出して表示することでユーザが容易に認識できる。【選択図】        図１
2010238232.tif 000002
【特許請求の範囲】
【請求項１】
ユーザプログラムを格納するユーザプログラム記憶手段と、
そのユーザプログラム記憶手段に格納されたユーザプログラムを演算実行する演算手段と、
その演算手段で前記ユーザプログラムを実行するに際し、そのユーザプログラム中の実行対象の出力系の命令が正常な演算実行のできない命令エラーか否か判断する判断手段と、
その判断手段で命令エラーと判断された命令の位置と、そのときの入力パラメータ値とを記憶する命令エラー情報記憶手段と、
を有し、
前記演算手段は、前記命令エラーと判断された命令の次の命令から演算実行を継続して行うものであることを特徴とする産業用コントローラ。
【請求項２】
前記演算手段は、予め決められた命令を実行するＡＳＩＣと、そのＡＳＩＣが実行できない命令を実行するＭＰＵと、を備え、
前記ＡＳＩＣは、演算実行対象の命令の位置と、そのときの入力パラメータ値を一時的に記憶するレジスタを有し、
前記ＡＳＩＣは、前記命令エラーと判断された場合に停止し、前記ＭＰＵは、前記ＡＳＩＣが命令エラーを理由に停止した場合に前記レジスタに格納された命令の位置と入力パラメータ値を取得すると共に前記命令エラー情報記憶手段に格納し、その後、前記ＡＳＩＣを再起動させるように構成したことを特徴とする請求項１に記載の産業用コントローラ。
【請求項３】
前記演算手段は、予め決められた命令を実行するＡＳＩＣと、そのＡＳＩＣが実行できない命令を実行するＭＰＵと、を備え、
前記ＡＳＩＣは、演算実行対象の命令の位置と、そのときの入力パラメータ値を一時的に記憶するレジスタを有し、
前記ＡＳＩＣは、前記命令エラーと判断された場合に一時停止するとともに、前記レジスタに格納された命令の位置と入力パラメータ値を前記命令エラー情報記憶手段に格納し、その命令エラーと判断された命令の次の命令から演算実行を継続して行うことを特徴とする請求項１に記載の産業用コントローラ。
【請求項４】
前記命令エラーが発生したことを外部に報知する手段を備えたことを特徴とする請求項１〜３のいずれか１項に記載の産業用コントローラ。
【請求項５】
前記命令エラーと判断された命令に対する入力条件を取得し、前記命令エラー情報記憶手段に格納する手段を備えたことを特徴とする請求項１〜４のいずれか１項に記載の産業用コントローラ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、産業用コントローラに関し、ユーザプログラムの命令エラー発生時の処理機能の改良に関する。
【背景技術】
【０００２】
ＦＡ（Factory Automation）におけるネットワークシステムは、生産工場内に配備された産業ロボットその他の生産設備の入力機器及び出力機器の制御を司る１または複数のＰＬＣ（Programmable Logic Controller）と、そのＰＬＣにより動作が制御される機器とが、制御系のネットワークに接続される。それらＰＬＣと機器は、その制御系のネットワークを介してサイクリックに通信を行うことで、ＩＮデータ及びＯＵＴデータ（以下Ｉ／Ｏデータという）の送受を行い、生産設備を制御する。
【０００３】
より具体的には、ＰＬＣのＣＰＵユニットにおける制御は、ＩＮデータである入力機器のＯＮ信号またはＯＦＦ信号を入力し、入力したＯＮ／ＯＦＦ情報をユーザプログラムによって論理演算し、演算結果であるＯＵＴデータを出力機器へ出力する。その出力が出力機器に対する動作指示となって出力機器が動作することにより、生産設備を制御する。
【０００４】
ところで、ＣＰＵユニットは、上記の論理演算を実行する際に、実行対象の命令の実行条件をチェックし、実行条件（例えば、命令のオペランドの値）が許容範囲外のときは、命令エラーフラグをＯＮし、その命令処理を行わない。このように命令エラーフラグがＯＮした場合でも、通常は演算対象を次の命令に移し、サイクリックな演算処理を継続する（例えば、特許文献１参照）。また、オプション設定として、命令エラーフラグがＯＮしたときには、処理を停止するモードを備えたＰＬＣもある。
【０００５】
これは、実際に生産設備を稼働させている場合、制御の途中で生産設備の動作が停止すると、たとえば、ワークを加熱・加工中で停止することになり、問題があるためである。また、このように実際の生産設備の動作中は、命令エラーがあってもＰＬＣを停止するのは好ましくないが、実際の生産設備による運転開始前のチェック時等においては、係る問題がないので、上記のオプションを利用して命令エラーの発生に伴い動作を停止し、不具合の原因を確認し、修正をすることができる。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平０７−１９１８６６
【発明の概要】
【発明が解決しようとする課題】
【０００７】
上述したように、命令エラーが発生したときにＰＬＣの運転を停止させる機能はあるが、運転停止による外部環境への影響が大きいため、実稼動中に本機能が使用されることはない。そのため、ＰＬＣは、命令エラーが発生した場合、その命令エラーを生じている命令を実行せずに次の命令を実行するため、当該次の命令が正常とすると、命令フラグはＯＦＦになる。よって、実稼動中においては、後で命令エラーを生じた箇所はもちろんのこと、稼動中のシステムが意図しない動作をしたときに、命令エラーが発生したか否かを確認することもできないという課題があった。
【課題を解決するための手段】
【０００８】
上記の課題を解決するために、本発明は、（１）ユーザプログラムを格納するユーザプログラム記憶手段と、そのユーザプログラム記憶手段に格納されたユーザプログラムを演算実行する演算手段と、その演算手段で前記ユーザプログラムを実行するに際し、そのユーザプログラム中の実行対象の出力系の命令が正常な演算実行のできない命令エラーか否か判断する判断手段と、その判断手段で命令エラーと判断された命令の位置と、そのときの入力パラメータ値とを記憶する命令エラー情報記憶手段と、を有し、演算手段は、命令エラーと判断された命令の次の命令から演算実行を継続して行う産業用コントローラである。産業用コントローラは、実施形態では、プログラマブルコントローラ（ＰＬＣ）としたが、ＰＡＣ（Programmable Automation Controller）と称されるパーソナルコンピュータが持つ高速性や高機能や機能拡張性に加え、ＰＬＣが持つ高精度や耐久性を備えたコントローラ等の他、各種のコントローラがある。命令エラー情報記憶手段は、実施形態では、記憶メモリやＡＳＩＣ内の特定エリアに対応する。出力系の命令には、算術演算に関する命令が含まれ、一例として“／命令”（除算命令）がある。正常な演算実行のできない命令エラーとは、０で割り算処理をするように演算として実行不可なものはもちろんのこと、入力パラメータ値として取り得る範囲以外の値が入力されるなど、各種のものがある、そして、命令エラーか否かの判断は、たとえば、命令ごとに命令エラーとなる要因（エラー条件）を設定しておき、判断手段は、演算対象の命令と入力パラメータ値が上記の要因に該当するか否かにより簡単に判断することができる。もちろんこれ以外の方法により実現することを妨げない。命令の位置は、実施形態では命令アドレスに対応し、入力パラメータ値はオペランドの値に対応する。
【０００９】
本発明は、実稼働時において、命令エラーが発生しても運転を続けることが重要な産業用コントローラにおいて、命令エラーが発生しても運転を続けることができるとともに、命令エラー発生時の状況はツール装置等を用いて命令エラー情報記憶手段に格納された命令エラーに関する情報（命令の位置と入力パラメータ値等）を読み出すことで知ることができる。
【００１０】
（２）演算手段は、予め決められた命令を実行するＡＳＩＣと、そのＡＳＩＣが実行できない命令を実行するＭＰＵと、を備え、ＡＳＩＣは、演算実行対象の命令の位置と、そのときの入力パラメータ値を一時的に記憶するレジスタを有し、ＡＳＩＣは、命令エラーと判断された場合に停止し、ＭＰＵは、ＡＳＩＣが命令エラーを理由に停止した場合にレジスタに格納された命令の位置と入力パラメータ値を取得すると共に前記命令エラー情報記憶手段に格納し、その後、ＡＳＩＣを再起動させるように構成するとよい。これは、図３に示すフローチャートを実行する実施形態により実現されている。
【００１１】
（３）また、演算手段は、予め決められた命令を実行するＡＳＩＣと、そのＡＳＩＣが実行できない命令を実行するＭＰＵと、を備え、前記ＡＳＩＣは、演算実行対象の命令の位置と、そのときの入力パラメータ値を一時的に記憶するレジスタを有し、ＡＳＩＣは、命令エラーと判断された場合に一時停止するとともに、レジスタに格納された命令の位置と入力パラメータ値を命令エラー情報記憶手段に格納し、その命令エラーと判断された命令の次の命令から演算実行を継続して行うようにしてもよい。これは、図１０に示すフローチャートを実行する実施形態により実現されている。このようにすると、命令エラーが発生しても、ＡＳＩＣ内で処理できるので、ＭＰＵの負荷が軽減される。
【００１２】
（４）命令エラーが発生したことを外部に報知する手段を備えるとよい。外部への報知は、実施形態に示すように、直接または間接的に接続されたツール装置に通知したり、ランプの点灯やブザー等の警報を発し、周囲にいる作業員等に通知したりすることなどがある。
【００１３】
（５）命令エラーと判断された命令に対する入力条件を取得し、命令エラー情報記憶手段に格納する手段を備えるとよい。これは、図１１以降に示す実施形態に対応する。このようにすると、命令エラーを発生させるようなプログラムミスや動作条件の不具合などを検証するのに必要な情報が容易かつ迅速に得ることができ、推察並びそれに対する対策の検討が容易に行える。入力条件は、命令実行条件とも称することができる。
【発明の効果】
【００１４】
本発明は、命令エラーが発生した場合、その命令エラーに関する情報を記憶保持すると共に、後で確認することができるので、命令エラーの発生の事実を並びにその内容を確実に知ることができる。そして、命令エラー発生時に停止させなくても上記の命令エラーを記憶保持することができるので、生産工場等のＦＡシステムのように、命令エラーを生じても運転を停止することが好ましくない産業用コントローラにおける命令エラーの解析・検証を行うことができる。
【図面の簡単な説明】
【００１５】
【図１】本発明に係るプログラマブルコントローラの好適な一実施形態を示す図である。
【図２】ＡＳＩＣの機能を示すフローチャートである。
【図３】主にＭＰＵの機能を示すフローチャートである。
【図４】命令エラーに関する情報の記憶メモリへの格納処理機能を示すフローチャートである。
【図５】ユーザプログラムの一例を示す図である。
【図６】ユーザプログラムの一例を示す図である。
【図７】ＡＳＩＣのレジスタのデータ構造の一例を示す図である。
【図８】命令エラーに関する情報の記憶メモリへの格納する機能を説明する図である。
【図９】ツール装置の機能を説明する図である。
【図１０】ＭＰＵとＡＳＩＣの機能を示すフローチャートである。
【図１１】命令エラーに関する情報の記憶メモリへの格納処理機能を示すフローチャートである。
【図１２】ツール装置の機能を説明する図である。
【図１３】ツール装置の機能を説明する図である。
【図１４】ツール装置の機能を説明する図である。
【発明を実施するための形態】
【００１６】
図１は、本発明に係るプログラマブルコントローラ（ＰＬＣ）１の好適な一実施形態を示している。このＰＬＣ１は、ビルディングブロックタイプであり、図１では、通信ユニット１０と、ＣＰＵユニット１１と、Ｉ／Ｏユニット１２と、を連結した構成を示しているが、他の各種のユニットが連結されることを妨げない。また、各ユニットの設置個数も任意である。各ユニットは内部バス（ＰＬＣバス）を介して接続され、ＣＰＵユニット１１との間でバス通信をし、データをやり取りする。
【００１７】
通信ユニット１０は、フィールドバス３に接続され、フィールドバス３に接続された外部機器・装置と通信する。本発明との関係でいうと、フィールドバス３に接続されたツール装置２と通信する機能を有する。Ｉ／Ｏユニット１２は、ＣＰＵユニット１２と、接続される入力機器や出力機器であるＩ／Ｏ機器との間でＩ／Ｏデータの送受を行う。
【００１８】
ＣＰＵユニット１１は、ＰＬＣ１全体の制御を司る。図１（ｂ）は、ＣＰＵユニットの内部構成の一例を示している。ＣＰＵユニット１１は、ＭＰＵ１１ａと、ＡＳＩＣ１１ｂと、ユーザプログラムを格納するユーザメモリ１１ｃと、Ｉ／Ｏデータとパラメータを格納するＩ／Ｏメモリ１１ｄと、ＭＰＵ１１ａが演算実行する際に使用するワークメモリ１１ｅと、システムソフトウェアを格納するシステムＲＯＭ１１ｆと、ユーザプログラムをバックアップするためのバックアップメモリ１１ｇと、内部バス（ＰＬＣバス）と接続してデータの送受を行うバスインタフェース１１ｈと、外部装置とデータの送受を行う外部インタフェース１１ｉと、を備える。
【００１９】
バックアップメモリ１１ｇは、フラッシュメモリで構成されるため、電源ＯＦＦ時もその内容を保持する。このバックアップメモリ１１ｇにユーザプログラムその他の設定パラメータが格納される。ユーザメモリ１１ｃは、ＳＲＡＭで構成され、電源ＯＦＦ時は内容を保持することができないので、電源ＯＮ時にバックアップメモリ１１ｇからデータを転送することでユーザプログラムを記憶保持する。Ｉ／Ｏメモリ１１ｄは、ＳＲＡＭで構成されるが、電源ＯＦＦ時はバッテリにより内容が保持される。外部インタフェース１１ｉは、本実施形態では、ＵＳＢやイーサネット（登録商標）等のプロトコルに準拠し、ツール装置２を直接接続し、データの送受を行うためのものである。
【００２０】
ＭＰＵ１１ａとＡＳＩＣ１１ｂは、ユーザプログラムをサイクリックに演算実行し、ネットワークシステムを構成する各機器の制御等を司る。また、ＭＰＵ１１ａは、ツール装置２からの要求（割り込み通知）に従い、各メモリに対してデータの読み書き等をする。ＡＳＩＣ１１ｂは、ユーザプログラムを実行するためのハードウェアであり、ユーザメモリ１１ｃに記載されているデータ（命令オブジェクトコード）を解析し、実行するものである。
【００２１】
ユーザプログラムの命令は、オブジェクトコードと呼ばれるバイナリデータに展開され、ＡＳＩＣ１１ｂはオブジェクトコードを解釈して命令実行を行う。つまり、ＡＳＩＣ１１ｂは、先頭から順に命令を読み出し、自己が実行可能な命令が続く間は、順次その命令を実行し、処理できない命令が出現すると、処理を停止してＭＰＵ１１ａがその命令を実行するのを待ち、実行後は、ＡＳＩＣ１１ｂの実行に復帰する。通常、ユーザプログラムのうち、９５％以上はＡＳＩＣで処理する命令で組まれており、これにより、ＰＬＣは高速な処理を行うことができるようになっている。
【００２２】
図２は、ユーザプログラムの実行を行うＡＳＩＣ１１ｂの処理機能、すなわち、ＡＳＩＣ１１ｂの基本的な命令実行時処理を示している。ＡＳＩＣ１１ｂには実行開始アドレスが予め設定されているので（Ｓ１）、ＡＳＩＣ１１ｂは、その開始アドレスの命令のオブジェクトコードを読み出す（Ｓ２）。ＡＳＩＣ１１ｂは、読み出した命令の種類が自己が実行可能か否かを判断し（Ｓ３）、ＡＳＩＣ処理命令の場合には、処理ステップＳ６に飛び、その呼び出した命令をＡＳＩＣ１１ｂが実行する（Ｓ６）。そして、処理ステップＳ２に戻り次の命令を読み出す。また、ＡＳＩＣ１１ｂは、ユーザメモリ１１ｃに格納された命令を順次実行していき、自己が処理できない命令に至ると、停止するとともに、その停止要因を「ＭＰＵ命令発見」とする（Ｓ４）。
【００２３】
後述するように、ＭＰＵ１１ａは、ＡＳＩＣ１１ｂの停止を検出し、その停止した原因が、ＡＳＩＣ１１ｂの実行できない「ＭＰＵ命令発見」であることを認識すると、ＭＰＵ１１ａは当該命令を実行した後、ＡＳＩＣの再起動を指示するので、当該指示を受けたＡＳＩＣ１１ｂは再起動する（Ｓ５）。これに伴い、ＡＳＩＣ１１ｂは、停止した命令の次の命令を読み出し（Ｓ２）、読み出した命令の種類が自己で実行可能か否かを判断する（Ｓ３）。
【００２４】
また、ＡＳＩＣ１１ｂは、処理ステップＳ６の命令実行するに際し、命令エラーが発生しているか否かを判断する機能を備えている。そして、通常モード（基本モード）で実行されている場合には、命令エラーが検出された場合には、その命令を実行せず、次に命令の読み出しを行う。そして、後述するように、命令エラー記録モードで実行している場合、ＡＳＩＣは、命令エラー発生時に一時停止するとともに、命令エラーに関する情報をＡＳＩＣ１１ｂのレジスタ１１ｂ′に保持する機能を備える。なお、この命令エラーか否かの判断は、従来公知のアルゴリズムを利用できる。一例を示すと、命令毎にエラー要因（除算命令の場合０で割ること，取り得る範囲を超えた値の入力等）を関連づけたテーブルを持ち、ＡＳＩＣ１１ｂは、命令実行に先立ち関連づけられたエラー要因の有無を判断する。
【００２５】
図３は、命令実行中のＭＰＵ１１ａの機能を主に示している。なお、点線で示す処理ステップは、ＡＳＩＣ１１ｂの内部処理を示している。まず、ＭＰＵ１１ａは、ＡＳＩＣ１１ｂに対して実行開始アドレスをセットする（Ｓ１１）。このセットは、たとえばＡＳＩＣ１１ｂのレジスタ１１ｂ′の所定位置に開始アドレスを格納することで行う。
【００２６】
次いで、ＭＰＵ１１ａは、ＡＳＩＣ１１ｂに起動命令を発する（Ｓ１２）。ＡＳＩＣ１１ｂは、起動すると図２に示すフローチャートを実行する（Ｓ１３）。よって、ＡＳＩＣ１１ｂは、自己が処理可能な命令が続く限り（Ｓ１４でＮｏ）、順次その命令を実行する。そして、ＭＰＵ命令を発見したり、命令エラーが発生したりした場合（Ｓ１４でＹｅｓ）、ＡＳＩＣ１１ｂは停止する（Ｓ１５）。また、レジスタ１１ｂ′には、停止した要因（ＭＰＵ命令発見／命令エラー）を特定する情報（アドレスやオペランドの値等の命令エラーに関係する情報）が格納される。
【００２７】
ＭＰＵ１１ａは、ＡＳＩＣ１１ｂが停止したのを検出すると、その停止要因を確認し、停止要因が「ＭＰＵ命令発見」の場合（Ｓ１６でＹｅｓ）、その命令を実行する（Ｓ１７）。また、停止要因が「命令エラー発生」の場合（Ｓ１８でＹｅｓ）、その命令エラーを記録する（Ｓ２０）。この実施例では、ＡＳＩＣ１１ｂにおけるＡＳＩＣ命令実行エラーならびにＭＰＵ１１ａにおけるＭＰＵ命令実行エラーはステップ２０で記録される。
【００２８】
そして、現在の設定が、「命令エラー発生時に運転を停止させる」モードか否かを判断し（Ｓ２１）、当該モードでない通常動作時であれば、処理ステップＳ１９に戻り、ＡＳＩＣ１１ｂを再起動する。一方、当該モードの場合、運転を停止する（Ｓ２２）。
【００２９】
この実施形態でのＡＳＩＣ命令実行時の命令エラーの記録処理は、具体的には、図４に示すフローチャートを実行する。すなわち、ＭＰＵ１１ａは、ＰＬＣ１が内蔵する時計から現在時刻を取得し、記憶メモリにセットする（Ｓ２０−ａ）。この記憶メモリは、たとえばワークメモリ１１ｅを用いることができるし、不揮発性のバックアップメモリ１１ｇを利用することもできる。
【００３０】
ＭＰＵ１１ａは、ＡＳＩＣ１１ｂのレジスタ１１ｂ′を参照し、命令エラーを発生している命令を特定する命令アドレスと、その命令エラーのオペランドの値をそれぞれ取得するとともに、記憶メモリにセットする（Ｓ２０−ｂ，Ｓ２０−ｃ）。これにより、今回の命令エラーを発生している命令に対する情報の記録処理が完了する。
【００３１】
また、処理ステップＳ１７のＭＰＵ命令の実行中に命令エラーが発生した場合、ＭＰＵ１１ａは、一旦処理を停止し、Ｓ１８の分岐判断でＹｅｓとなり、Ｓ２０の処理ステップでそのときの命令エラーに関する情報を取得すると共に、時刻情報と関連づけて所定のメモリ領域に格納する処理をする機能を付加すると良い。例えば、ステップＳ１４でＡＳＩＣ１１ｂがＭＰＵ命令を発見した場合に当該命令のアドレスやオペランドの値をレジスタ１１ｂ′に残しておくように構成した場合は、図４に示すフローチャートの処理で良い。
【００３２】
その後、図３に示したように、「命令エラー発生時に運転を停止させる」モードでない場合には、ＭＰＵ１１ａは、再度ＡＳＩＣ１１ｂに命令実行を継続して依頼することでＰＬＣの運転を停止させずに命令エラーの発生有無並びに発生条件を記録することができる。なお、当該モードか否かの設定は、ツール装置を用いてＣＰＵユニットが持つパラメータのフラグを書き込んだり、ＣＰＵユニット１１に設けたモード設定スイッチを切り替えたりすることにより行える。
【００３３】
次に、具体例を示しつつ、命令エラーの記録処理を説明する。まず、実際のユーザプログラムがたとえば図５に示すようになっているとする。この場合に、例えば、命令アドレスｎの第２オペランドＤ１００の値が想定していた値と異なる場合、その原因の検証は、以下のように行われる。まず、命令アドレスｎの第１オペランドＤ２０の値をＤ１００にコピーする“ＭＯＶ命令”が実行されているので、Ｄ２０に値を書き込む命令を探す。すると、命令アドレス１０で、“／命令”（除算命令）が実行され、Ｄ２０に値をセットしていることがわかり、この命令アドレス１０でＤ２０の値を決定するものはＤ０とＤ１０の値であると考え、これらの命令が何らかの理由で正しく動作しなかった（命令エラー（０での割り算処理）が発生した）、や、意図しないタイミングで命令が動作して値を書き換えたことが推察できる。
【００３４】
また、図６（ａ）に示すラダー図で作成されたユーザプログラムは、ツール装置２によって一旦ニモニックに変換され（図６（ｂ）参照）、その後ニモニックが「命令オブジェクト」と呼ばれるバイナリデータに変換されてＰＬＣ１（ＣＰＵユニット１１）に転送され、ＣＰＵユニット１１のバックアップメモリ１１ｇに格納される。このバックアップメモリ１１ｇに格納されたユーザプログラムが、起動時にユーザメモリ１１ｃに格納される。
【００３５】
上述したように、ＡＳＩＣ１１ｂは、ユーザプログラムエリアに格納された命令オブジェクトを逐次実行する。そして、読み出した命令オブジェクトをＭＰＵで処理する命令（ＭＰＵ命令）ならばＡＳＩＣは命令実行を停止し、ＭＰＵ命令を発見したことをＭＰＵに通知するし、ＡＳＩＣ命令による命令エラー発生を検知すると、命令実行を停止し、「命令エラーが発生した」ことをＭＰＵに通知する。
【００３６】
さらにＡＳＩＣ１１ｂは、現在実行している命令のアドレスや、命令で指定したオペランドの値をＡＳＩＣ１１ｂのレジスタ１１ｂ′に格納している。従って、命令エラー発生時に命令実行を停止した場合、レジスタ１１ｂ′には、命令エラーを発生している命令についての情報、つまり、Ａｄｄｒｅｓｓレジスタには、命令エラー発生を生じている命令のアドレスが格納され、Ｏｐｅｒａｎｄレジスタにはその命令を実行するための入力パラメータたる各オペランドの値が格納されることになる（図７参照）。
【００３７】
そこで、ＡＳＩＣ１１ｂが命令エラー発生により停止していると、ＭＰＵ１１ａは、そのときのＡＳＩＣ１１ｂのレジスタ１１ｂ′のＡｄｄｒｅｓｓレジスタとＯｐｅｒａｎｄレジスタに格納されたデータを読み出すことで、命令エラーを生じている命令アドレスと、そのときのオペランドの値を取得できる。一例としては、たとえば図８（ａ）に示すように、命令アドレス１０についての各オペランドの値が、Ｄ０＝＋１００，Ｄ１０＝＋０，Ｄ２０＝＋５０とすると、その命令アドレス１０の命令を読み出したＡＳＩＣ１１ｂのレジスタ１１ｂ′の値は、図８に示すようになっている。
【００３８】
この命令は、０（Ｄ１０）での割り算処理であるので、命令エラーとなり、ＡＳＩＣ１１ａは処理を停止する。このときのＡＳＩＣ１１ｂのレジスタ１１ｂ′に格納されているデータは、図８（ｂ）に示すようになる。
【００３９】
従って、ＭＰＵ１１ａは、処理ステップＳ２０−ａを実行することで、図８（ｃ）に示すように、現在時刻、つまり、命令エラーが発生した時刻をＣＰＵユニットの記憶メモリの所定位置にセットする。次いで、ＭＰＵ１１ａは、処理ステップＳ２０−ｂを実行することで、Ａｄｄｒｅｓｓレジスタのデータ（１０）を読み出し、上記の時刻の次のメモリエリアにセットする。その後、ＭＰＵ１１ａは、処理ステップＳ２０−ｃを実行することで、各Ｏｐｅｒａｎｄレジスタのデータを読み出し、それぞれ対応するメモリエリアにセットする。なお、図８（ｃ）から明らかなように、命令エラーに関する情報を格納する領域は、複数分用意され、命令エラーが発生する順に、各領域にセットする。図８（ｃ）では、命令アドレス１０の命令に関する情報が１番目の領域にセットされており、さらに、この後、命令の実行が進み、新たに命令エラーが発生した場合には、それについての情報は２番目の領域にセットされる。これにより、ユーザプログラムの実行により、複数箇所で命令エラーが発生したとしても、それら複数の命令エラーについての情報がすべて記録される。また、このように命令エラーに関する情報が記録されるので、その後に正常な命令が実行されて命令エラーフラグがＯＦＦになったとしても、後で命令エラーが発生した事実とその内容を知ることができる。
【００４０】
次に、命令エラーに関する情報の報知について説明する。まず、本実施形態では、ＣＰＵユニット１１は、ＣＰＵユニット１１に対してネットワーク経由或いは直接接続されたツール装置２に対して命令エラーが発生したことを通知する機能を備える。
【００４１】
具体的には、ＣＰＵユニット１１は、ツール装置２から通信コマンドを介してアクセス可能なメモリ領域（リレーエリアやカウンタエリアなど）を用いて命令エラーを通知することができる。つまり、ＣＰＵユニット１１は、命令エラーを検知して記憶メモリにデータを格納している場合、ＣＰＵユニット１１（ＭＰＵ１１ａ）は、予め設定した特定のリレーエリアのあるｂｉｔをＯＮする。ツール装置２は、ＰＬＣ１（ＣＰＵユニット１１）と接続している間、常に通信コマンドを発行している。従って、ツール装置２が上記の命令エラー発生を示す該当するリレーエリアのｂｉｔを定期的に参照することでＰＬＣの命令エラー発生の有無を知ることができる。
【００４２】
また、このようにリレーエリアを用いるのではなく、カウンタエリアを用いる方式としては、ＰＬＣが命令エラーを検知して記憶メモリにデータを格納している場合、「現時点で幾つの履歴を格納しているか」を示す数値を格納する特定のカウンタエリアを持つようにする。命令エラーが発生していない初期値は、“０”とする。上述したように、ツール装置２は、ＰＬＣと接続している間、常に通信コマンドを発行しているので、ツール装置２が該当するカウンタエリアの数値を定期的に参照することでＰＬＣの命令エラー発生の有無、さらには、その発生数を知ることができる。
【００４３】
そして、上記の各種の方法により、ツール装置２が命令エラーの発生を検出すると、ＣＰＵユニット１１の記憶メモリの該当するメモリ領域を読み出し、取得した情報を表形式で表示する（図９参照）。また、取得した命令アドレスとユーザプログラムから「命令エラーが発生した命令」を特定する。これにより、図９に（ｂ）の「命令」の項目に示すように、具体的な“／命令”を表示する。このように、命令とオペランドの値を表示することで、ユーザは、命令エラーの原因（図示の場合は、０で割っていること）を容易に理解することができる。さらに、命令アドレスから、具体的なプログラムの場所を検証し、命令エラーが生じた原因の究明が迅速に行える。
【００４４】
また、ＰＬＣは、上記の特定のリレーエリアに連動し、ＰＬＣに接続したランプ等の警報報知する出力装置を動作させ、ユーザに知らせる機能を備えると良い。さらに、上記の特定のカウンタエリアを利用し、命令エラーの発生数を報知する機能を備えても良い。このようにすると、ツール装置２が未接続の場合でも、ユーザは命令エラーが発生したことを知ることができる。よって、ユーザは、その後に、ツール装置２をＰＬＣ１に接続し、具体的な命令エラーの内容を知ることができる。
【００４５】
また、上述した実施形態では、ＭＰＵ１１ａが命令エラーに関する情報を記録するようにしたが、ＡＳＩＣ１１ｂに係る記録機能を持たせることもできる。つまり、ＡＳＩＣ自身に、命令エラー発生時の命令アドレスや、命令で指定したオペランドの値を特定エリアに書き込む機能を設ける。すると、ＡＳＩＣが命令エラーを検知すると、一旦処理を停止し、レジスタ１１ｂ′に格納されている上記のデータを特定エリアに記録する。ＡＳＩＣ１１ｂは、その後、次の命令を継続実行する。これによりＰＬＣの運転を停止させずに命令エラーの発生有無並びに発生条件を記録することができる。この場合、ＡＳＩＣ命令に関しては全てＡＳＩＣ内で処理可能であるため、ＭＰＵに処理が渡らず、高速に処理ができる。
【００４６】
ユーザプログラム内にはわずかではあるがＭＰＵ命令も存在するため、ＭＰＵ命令の実行中に命令エラーが発生した場合、ＭＰＵ１１ａは、一旦処理を停止し、そのときの命令エラーに関する情報を取得すると共に、時刻情報と関連づけて所定のメモリ領域に格納する処理をする機能を付加すると良い。
【００４７】
図１０は、ＡＳＩＣ１１ｂ側で命令エラーに関する情報を記録する機能を備えた場合のＭＰＵ１１ａ，ＡＳＩＣ１１ｂの機能を示すフローチャートである。図において、点線で囲む処理ステップがＡＳＩＣの処理機能である。
【００４８】
ＭＰＵ１１ａは、ＡＳＩＣ１１ｂに対して実行開始アドレスをセットする（Ｓ３１）。このセットは、たとえばＡＳＩＣ１１ｂのレジスタ１１ｂ′の所定位置に開始アドレスを格納することで行う。
【００４９】
次いで、ＭＰＵ１１ａは、ＡＳＩＣ１１ｂに起動命令を発する（Ｓ３２）。ＡＳＩＣ１１ｂは、起動すると自己が実行できる命令が続く限り、連続して順次命令を実行する（Ｓ３３）。つまり、命令エラー並びにＭＰＵ命令を発見しない場合、Ｓ３４とＳ３５の分岐判断はいずれもＮｏとなるので、Ｓ３３に戻りＡＳＩＣ命令を実行する。
【００５０】
そして、ＡＳＩＣ命令で命令エラーが発生した場合（Ｓ３４でＹｅｓ）、ＡＳＩＣ１１ｂは、命令エラーを記録する（Ｓ４１）。つまり、ＡＳＩＣ１１ｂは、レジスタに格納されている命令エラー発生時の命令アドレスとオペランドの値を特定エリアに書き込む。
【００５１】
その後、現在の設定が、「命令エラー発生時に運転を停止させる」モードか否かを判断し（Ｓ４２）、当該モードでない通常動作時であれば、処理ステップＳ３３に戻り、ＡＳＩＣ１１ｂは、次の命令に対する処理を実行する。一方、当該モードの場合、処理ステップＳ４５に飛び、ＭＰＵ１１ａは、運転を停止する（Ｓ４５）。
【００５２】
一方、ＡＳＩＣ１１ｂは、ＭＰＵ命令を発見すると、Ｓ３５でＹｅｓとなり、処理を停止する（Ｓ３６）。また、レジスタ１１ｂ′には、停止した要因（ＭＰＵ命令発見）を特定する情報が格納される。
【００５３】
ＭＰＵ１１ａは、ＡＳＩＣ１１ｂが停止したのを検出すると、その停止要因を確認し、停止要因が「ＭＰＵ命令発見」の場合（Ｓ３７でＹｅｓ）、その命令を実行する（Ｓ３８）。また、ＭＰＵ命令エラーが発生した場合（Ｓ３９でＹｅｓ）、その命令エラーに関する情報を記憶メモリに記録する（Ｓ４３）。
【００５４】
そして、現在の設定が、「命令エラー発生時に運転を停止させる」モードか否かを判断し（Ｓ４４）、当該モードでない通常動作時であれば、処理ステップＳ４０に戻り、ＡＳＩＣ１１ｂを再起動する。一方、当該モードの場合、運転を停止する（Ｓ４５）。もちろん、ＭＰＵ命令を正常に実行した場合、Ｓ３９はＮｏとなるので、処理ステップＳ４０に進みＡＳＩＣ１１ｂを再起動する。
【００５５】
図１１以降は、別の実施形態を示している。この実施形態では、命令エラーに関する情報として、上述した命令とオペランドの値に加えて、その命令エラーが発生した命令に対する入力条件も記録し、表示できるようにしている。
【００５６】
まず命令エラーの記録処理は、図１１に示すフローチャートを実行する。すなわち、ＭＰＵ１１ａは、ＰＬＣ１が内蔵する時計から現在時刻を取得し、記憶メモリにセットする（Ｓ２０−ａ）。この記憶メモリは、たとえばワークメモリ１１ｅを用いることができるし、不揮発性のバックアップメモリ１１ｇを利用することもできる。
【００５７】
ＭＰＵ１１ａは、ＡＳＩＣ１１ｂのレジスタ１１ｂ′を参照し、命令エラーを発生している命令を特定する命令アドレスを取得するとともに、記憶メモリにセットする（Ｓ２０−ｂ）。さらに、ＡＳＩＣ１１ｂは、ＡＳＩＣ１１ｂのＡｄｄｒｅｓｓレジスタから、命令エラーを生じている回路の先頭を検索する（Ｓ２０−ｄ）。そして、ＡＳＩＣ１１ｂは、回路の先頭からエラーを発生された命令まで、命令オブジェクトを指定するアドレスを特定し（Ｓ２０−ｅ）、特定したアドレスのデータ値を特定し（Ｓ２０−ｆ）、その特定したデータ値を記憶メモリにセットする（Ｓ２０−ｇ）。これにより、今回の命令エラーを発生している命令に対する情報の記録処理が完了する。
【００５８】
上記の処理を、具体例を挙げて説明する。まず、図１２（ａ）に示すように、３つの入力条件が、図示のように、Ｗ５．０＝ＯＮ，Ｗ５．１＝ＯＦＦ，Ｗ５．２＝ＯＮであるとする。このラダー図の回路は、ニモニックで記載すると、図１２（ｂ）のようになっている。また、ＡＳＩＣのレジスタは、図１２（ｃ）に示すようになる。そこで、ＭＰＵ１１ａは、処理ステップＳ２０−ａを実行することで、図１２（ｄ）に示すように、現在時刻、つまり、命令エラーが発生した時刻をＣＰＵユニットの記憶メモリの所定位置にセットする。次いで、ＭＰＵ１１ａは、処理ステップＳ２０−ｂを実行することで、Ａｄｄｒｅｓｓレジスタのデータ（１０）を読み出し、上記の時刻の次のメモリエリアにセットする。その後、ＭＰＵ１１ａは、処理ステップＳ２０−ｄ以降を実行することで、回路に含まれるアドレスのデータ値を先頭から順に全て記憶メモリに書き込む。これにより、入力条件やオペランドの値がセットされる。なお、図１２（ｄ）から明らかなように、この例でも命令エラーに関する情報を格納する領域は、複数分用意され、命令エラーが発生する順に、各領域にセットする。また、回路は、左母線に接続された入力接点読出命令（ＬＤ命令）から繋がるひとかたまりである。
【００５９】
次に、命令エラーに関する情報の報知について説明する。この実施形態でも、上記と同様に、ＣＰＵユニット１１は、リレー方式やカウンタ方式などにより、ツール装置２に対して命令エラーが発生したことを通知する機能を備える。そこで、ツール装置２は、命令エラーの発生を検出すると、ＣＰＵユニット１１の記憶メモリの該当するメモリ領域を読み出し、取得した情報を表形式で表示する（図１３（ａ）参照）。この図１３（ａ）に示す表示形式は、上述した図９（ｂ）に示すものと同様である。そして、本実施形態では、詳細ボタンを用意し、この詳細ボタンがクリック等されて選択されると、図１３（ｂ）に示すように、命令エラーが発生している命令アドレスから、回路を特定し該当回路のプログラム（ラダー図）と、データを表示する。データの表示は、命令エラーについてのＣＰＵユニット１１の記憶メモリを参照し、回路線等からデータ値を読み出すと共に、プログラムを構成する回路線等からデータ値を割り振ることで行う（図１４参照）。これは、記憶メモリへのデータの格納が、該回路に含まれるアドレスの値を先頭から順に行ったので、表示の際も先頭から順に呼び出して各回路に割り振ることで対応できる。
【００６０】
図１３（ｂ）に示す詳細モードを見たユーザは、Ｄ１０に値をセットするＭＯＶ命令が動作せずに命令が動作したため、結果的にゼロ割が発生して命令が命令エラーとなり、Ｄ２０にあるべき値がセットできなかったことが分かる。よって、命令エラー発生時の解析がより迅速かつ簡単に行うことができる。
【符号の説明】
【００６１】
１  ＰＬＣ
２  ツール装置
１１  ＣＰＵユニット
１１ａ  ＭＰＵ（演算手段）
１１ｂ  ＡＳＩＣ（演算手段）
１１ｂ′  レジスタ
【図１】
2010238232.tif 000003
【図２】
2010238232.tif 000004
【図３】
2010238232.tif 000005
【図４】
2010238232.tif 000006
【図５】
2010238232.tif 000007
【図６】
2010238232.tif 000008
【図７】
2010238232.tif 000009
【図８】
2010238232.tif 000010
【図９】
2010238232.tif 000011
【図１０】
2010238232.tif 000012
【図１１】
2010238232.tif 000013
【図１２】
2010238232.tif 000014
【図１３】
2010238232.tif 000015
【図１４】
2010238232.tif 000016