| 【発明の名称】 |
プログラマブルコントローラ |
| 【発明者】 |
【氏名】城井 努 【住所又は居所】大阪府門真市大字門真1048番地松下電工株式会社内
【氏名】中井 大 【住所又は居所】大阪府門真市大字門真1048番地松下電工株式会社内
|
| 【要約】 |
【課題】演算処理の遅延が、システムの異常にあるか又は演算渋滞の発生にあるかを区別することのできるプログラマブルコントローラを提供する。
【解決手段】CPU1は、ROM2に記憶されたラダープログラムを実行する。ラダープログラムには複数のステップを複数回繰り返すループが設けられている。演算渋滞検知部4は、ループの繰り返し回数を計数し、繰り返し回数が予め設定されたユーザー設定回数以上になると、CPU1に割込み信号を出力して、演算処理を強制的に終了させると共に、強制終了時のステップのアドレスをRAM3に記憶させる。 |
【特許請求の範囲】
【請求項1】複数のステップからなるラダープログラムを記憶する記憶手段と、前記ラダープログラムを実行する演算手段と、前記演算手段による演算処理の渋滞度合いを示す実績値が閾値を超えると、演算渋滞の発生を示す演算渋滞検知信号を発生する演算渋滞検知手段と、前記演算渋滞検知信号が入力されると前記演算手段による演算処理を強制終了させるとともに、演算渋滞検知時のステップが書き込まれたアドレスを前記記憶手段に記憶させる演算渋滞処理手段とを備えて成ることを特徴とするプログラマブルコントローラ。 【請求項2】前記閾値を、ユーザの作成したプログラムによって書換不能な前記記憶手段のアドレスに格納したこと特徴とする請求項1記載のプログラマブルコントローラ。 【請求項3】前記ラダープログラムに、複数のステップを所定回数だけ繰り返すループを設け、前記演算渋滞検出手段は、前記ループの演算処理の渋滞度合いを示す実績値が前記閾値を超えると演算渋滞検知信号を発生することを特徴とする請求項1又は2記載のプログラマブルコントローラ。 【請求項4】前記実績値は、前記ループの繰り返し回数であることを特徴とする請求項3記載のプログラマブルコントローラ。 【請求項5】前記実績値は、前記ループの処理を実行するのに要する時間であることを特徴とする請求項3記載のプログラマブルコントローラ。 【請求項6】前記ラダープログラムをマシン語にコンパイルして実行プログラムを作成する際に、実行プログラムの途中に複数の計測ポイントを設け、前記演算渋滞検知手段は、各計測ポイントで演算処理の渋滞度合いを示す実績値を検出して、前記実績値が前記閾値を超えると演算渋滞検知信号を発生することを特徴とする請求項1又は2記載のプログラマブルコントローラ。 【請求項7】前記実績値は、前記実行プログラムを1回実行する間に前記各計測ポイントをそれぞれ通過する回数であることを特徴とする請求項6記載のプログラマブルコントローラ。 【請求項8】前記実績値は、前記実行プログラムの先頭から前記各計測ポイントまでの処理を実行するのに要する時間であることを特徴とする請求項6記載のプログラマブルコントローラ。 【請求項9】前記演算渋滞検知手段は、前記ラダープログラムの処理を開始するとともにタイマ時間の限時動作を開始し、前記ラダープログラムの処理が終了するまでの間にタイムアップすると演算渋滞検知信号を発生する演算渋滞検知タイマからなることを特徴とする請求項1記載のプログラマブルコントローラ。 【請求項10】前記演算手段により前記ラダープログラムを実行させるとともに、前記ラダープログラムを1回実行するのに要する演算時間を検出する処理を複数回実行し、前記演算時間の検出結果の最大値を前記タイマ時間に設定するタイマ時間設定手段を設けたことを特徴とする請求項9記載のプログラマブルコントローラ。
|
【発明の詳細な説明】【0001】 【発明の属する技術分野】本発明は、プログラマブルコントローラに関するものである。 【0002】 【従来の技術】この種のプログラマブルコントローラとしては、ユーザプログラムの問題によって発生する演算処理の遅延(演算渋滞)を検知するための演算渋滞検知タイマを備えたものが従来より提供されている。演算渋滞検知タイマはプログラムの処理開始と同時に限時動作を開始しており、限時動作が終了するまでにプログラムの処理が終了していない場合は演算渋滞が発生したと判断している。 【0003】 【発明が解決しようとする課題】上述したプログラマブルコントローラでは、プログラマブルコントローラのシステム自体に異常が発生し、そのシステムが予想不可能な異常な動作を行った場合でも演算処理が遅延して、演算渋滞検知タイマがタイムアップするため、タイムアップの原因(すなわち演算処理の遅延の原因)がシステムの異常によるものか、或いは、演算渋滞によるものかを判断することができなかった。 【0004】本発明は上記問題点に鑑みて為されたものであり、その目的とするところは、演算処理の遅延が、システムの異常にあるか又は演算渋滞の発生にあるかを区別することのできるプログラマブルコントローラを提供することにある。 【0005】 【課題を解決するための手段】上記目的を達成するために、請求項1の発明では、複数のステップからなるラダープログラムを記憶する記憶手段と、ラダープログラムを実行する演算手段と、演算手段による演算処理の渋滞度合いを示す実績値が閾値を超えると、演算渋滞の発生を示す演算渋滞検知信号を発生する演算渋滞検知手段と、演算渋滞検知信号が入力されると演算手段による演算処理を強制終了させるとともに、演算渋滞検知時のステップが書き込まれたアドレスを記憶手段に記憶させる演算渋滞処理手段とを備えて成ることを特徴としている。演算渋滞が発生した場合はラダープログラムの同じステップで演算渋滞検知信号が発生するのに対して、演算手段などにハード的な異常が発生した場合は予測不可能な動作を行うために異なるステップで演算渋滞検知信号が発生するので、演算渋滞検知信号による強制終了処理が複数回行われた際に、演算渋滞検知時のステップのアドレスが同一であれば演算渋滞によるものと判断でき、また演算渋滞検知時のステップのアドレスが異なっていれば演算渋滞以外の原因によるものと判断できる。 【0006】請求項2の発明では、請求項1の発明において、閾値を、ユーザの作成したプログラムによって書換不能な記憶手段のアドレスに格納したこと特徴とし、請求項1の発明の作用に加えて、閾値がユーザーの作成したプログラムで書き換えられるのを防止できる。 【0007】請求項3の発明では、請求項1又は2の発明において、ラダープログラムに、複数のステップを所定回数だけ繰り返すループを設け、演算渋滞検出手段は、ループの演算処理の渋滞度合いを示す実績値が閾値を超えると演算渋滞検知信号を発生することを特徴とし、請求項1又は2の発明と同様の作用を奏する。 【0008】請求項4の発明では、請求項3の発明において、実績値は、ループの繰り返し回数であることを特徴とし、ループの繰り返し回数が閾値を超えることから演算渋滞の発生を検知できる。 【0009】請求項5の発明では、請求項3の発明において、実績値は、ループの処理を実行するのに要する時間であることを特徴とし、ループの処理を実行するのに要する時間が閾値を超えることから演算渋滞の発生を検知できる。 【0010】請求項6の発明では、請求項1又は2の発明において、ラダープログラムをマシン語にコンパイルして実行プログラムを作成する際に、実行プログラムの途中に複数の計測ポイントを設け、演算渋滞検知手段は、各計測ポイントで演算処理の渋滞度合いを示す実績値を検出して、実績値が閾値を超えると演算渋滞検知信号を発生することを特徴とし、請求項1又は2の発明と同様の作用を奏する。 【0011】請求項7の発明では、請求項6の発明において、実績値は、実行プログラムを1回実行する間に各計測ポイントをそれぞれ通過する回数であることを特徴とし、実行プログラムを1回実行する間に各計測ポイントをそれぞれ通過する回数が閾値を超えることから演算渋滞の発生を検知できる。 【0012】請求項8の発明では、請求項6の発明において、実績値は、実行プログラムの先頭から各計測ポイントまでの処理を実行するのに要する時間であることを特徴とし、実行プログラムの先頭から各計測ポイントまでの処理に要する時間が閾値を超えることから演算渋滞の発生を検知できる。 【0013】請求項9の発明では、請求項1の発明において、演算渋滞検知手段は、ラダープログラムの処理を開始するとともにタイマ時間の限時動作を開始し、ラダープログラムの処理が終了するまでの間にタイムアップすると演算渋滞検知信号を発生する演算渋滞検知タイマからなることを特徴とし、請求項1の発明と同様の作用を奏する。 【0014】請求項10の発明では、請求項9の発明において、演算手段によりラダープログラムを実行させるとともに、ラダープログラムを1回実行するのに要する演算時間を検出する処理を複数回実行し、演算時間の検出結果の最大値をタイマ時間に設定するタイマ時間設定手段を設けたことを特徴とし、ユーザがタイマ時間を見積もって設定する手間を無くすことができる。 【0015】 【発明の実施の形態】本発明の実施の形態を図面を参照して説明する。 【0016】(実施形態1)図1は本発明の一実施形態であるプログラマブルコントローラの基本的な構成を示すブロック図であり、図示するプログラマブルコントローラは、演算手段たるCPU1と、固定的なプログラムやデータを書き込んだROM2およびユーザプログラムの書き込みやワークエリアの確保、或いはデータの一時的な格納などに用いるRAM3からなるメモリ部(記憶手段)と、演算渋滞の発生を検知して演算渋滞検知信号を発生する演算渋滞検知部4(演算渋滞検知手段)と、外部機器との間で入出力データの授受を行うためのI/Oインターフェース5とで構成される。 【0017】図19は従来のプログラマブルコントローラの動作を説明するフローチャートであり、S102で分岐条件が成立すると前方へ分岐して、S101の前方分岐命令処理を実行するようなプログラムを組み、分岐条件として分岐回数が予め設定された設定回数に達するか否かという条件を設定した場合は、S102で前方に分岐して、S101の前方分岐命令処理を予め設定された回数だけ繰り返し実行する。ここで、上記設定回数をRAM3に格納する際に、ユーザが誤って意図しないような大きな値を格納すると、前方分岐命令処理の実行に時間がかかって、演算渋滞検知タイマがタイムアップするが、演算渋滞検知タイマはシステムの異常によってもタイムアップするため、タイムアップの原因がシステムの異常によるものか演算渋滞によるものかを区別できないという問題がある。ここで、システムの異常によって演算処理が遅延して、演算渋滞検知部4が演算渋滞エラーを検知した場合は、システムの動作が予想不可能で再現性がないために、ラダープログラムが複数回実行された場合、ラダープログラムの同じステップで演算渋滞エラーが発生するとは限らない。それに対して、ユーザのプログラムの問題によって演算渋滞が発生した場合は、ラダープログラムを何度実行しても必ず同じステップで演算渋滞が発生する。 【0018】而して、演算渋滞が発生する場合は、CPU1によりラダープログラムを何回か実行させるとともに、演算渋滞が発生するステップのアドレスをRAM3に記憶させており、RAM3に記憶されたステップのアドレスが同一であれば演算渋滞と判断し、アドレスが同一でなければシステムの異常であると判断することができる。 【0019】そこで、本実施形態では演算渋滞検知部4が、前方へ分岐するステップで前方分岐命令処理への分岐回数を計数し、分岐回数が予め設定されたユーザー設定回数以上になると、CPU1に割込み信号を出力して、前方分岐命令処理を強制的に終了させると共に、演算渋滞検知時のステップのアドレスをRAM3に記憶させている。 【0020】図2は本実施形態のプログラマブルコントローラの動作を説明するフローチャートであり、ラダープログラムを開始して、前方分岐命令処理を実行すると(S1)、分岐条件が成立しているか否かを判断し(S2)、分岐条件が成立していれば、分岐回数(ループ回数)がユーザ設定回数(閾値)以上か否かを判定する(S3)。ここで、分岐回数がユーザ設定回数未満であれば、S1に戻って前方分岐命令処理を実行する。一方、分岐回数がユーザ設定回数以上であれば、演算渋滞検知部4は演算渋滞エラーの発生を検出して、演算渋滞検知信号をCPU1に出力する(S5)。この時、演算渋滞処理手段たるCPU1は、演算渋滞検知部4から入力された演算渋滞検知信号に基づいて、演算渋滞検出時のアドレス(すなわち前方へ分岐させるステップのアドレス)をRAM3に記憶させた後(S6)、ループ回数を0にリセットし(S7)、命令処理を強制終了する(S8)。また、S2の判別を行った結果、分岐条件が不成立になると、CPU1はループ処理を終了して、ループ回数を0にリセットした後(S7)、命令処理を終了する(S8)。尚、上述のユーザ設定回数はユーザが作成したプログラムの命令によって指定することのできないメモリ部のアドレスに格納されており、一旦設定した値が誤って書き換えられるのを防止している。 【0021】以上説明したように本実施形態では、演算渋滞検知部4が、前方への分岐回数、すなわちループ処理の繰り返し回数を実績値としてカウントしており、この分岐回数が予め設定されたユーザ設定回数以上になると、演算渋滞エラーを検知して演算渋滞検知信号を発生し、CPU1が上記演算渋滞検知信号に基づいて前方分岐処理命令を強制的に停止させるとともに、演算渋滞エラーが発生した際のステップのアドレスをRAM3に記憶させている。このように、CPU1が演算渋滞発生時のステップのアドレスをRAM3に記憶させているので、ラダープログラムを複数回実行させた際に、演算渋滞エラーの発生したステップが同じになるか否かを判断することによって、演算渋滞エラーの原因がシステムの異常によるものか、或いは、演算渋滞によるものかを確実に判別することができる。すなわち、演算渋滞エラーが発生する際のステップが同一であれば演算渋滞によるものと判断し、異なっていればシステムの異常によるものと判断できる。 【0022】次に本実施形態の具体例を図3のフローチャートにより説明する。このラダープログラムは、複数のステップの処理を複数回繰り返すループAと、別の複数のステップを複数回繰り返すステップBとで構成され、ループBの分岐回数が10回、ループA,Bの繰り返し回数の上限値を示すユーザ設定回数が100回に設定されている。また、ループAの分岐回数には、誤って異常に大きな値(6000回)が設定されている。 【0023】ここで、CPU1がループAの処理を実行する場合、CPU1はループAの処理を6000回繰り返そうとするが、ユーザ設定回数が100回に設定されているので、ループ回数が100回に達した時点で、演算渋滞検知部4が演算渋滞エラーを検知し(S5)、CPU1が前方へ分岐させるステップのアドレスをRAM3に記憶させた後(S6)、ループ回数を0にリセットして(S7)、ループAの処理を強制的に終了させる。 【0024】一方、CPU1がループBの処理を実行する場合は、ループBの分岐回数が10回に設定されているので、ループBの処理を10回繰り返した時点で、ループ回数を0にリセットして(S7’)、ラダープログラムを終了する。なお、ループBの分岐回数は10回に設定されており、ユーザ設定回数(=100回)よりも少ない回数に設定されているので、ループBの処理が途中で強制終了されることはない。 【0025】(実施形態2)本発明の実施形態2を図4及び図5を参照して説明する。尚、プログラマブルコントローラの構成は実施形態1と同様であるので、図示および説明は省略する。 【0026】実施形態1では演算渋滞検知部4が、前方に分岐して前方分岐命令処理を実行するループの繰り返し回数を計数し、この計数値がユーザ設定回数を超えると、演算渋滞が発生したと判断しているのに対して、本実施形態では前方に分岐して前方分岐命令処理を繰り返すループの実行に要する時間(この時間をループ時間と言う。)を実績値として計時し、この計時結果が予め設定されたユーザ設定時間(閾値)を超えると、演算渋滞が発生したと判断している。尚、上述のユーザ設定時間はラダープログラムの命令によって指定することのできないメモリ部のアドレスに格納されており、一旦設定した値が誤って書き換えられるのを防止している。 【0027】図4は本実施形態の動作を説明するフローチャートであり、ラダープログラムを開始し、前方分岐命令処理を実行して(S11)、分岐条件が成立しているか否かを判断する(S12)。ここで、ラダープログラムの処理を開始してから前方へ分岐させるステップが初めて現れると、CPU1はループ時間の計時動作を開始する。そして、S12の判定の結果、分岐条件が成立していれば、前回のループ時間に1回のループにかかる時間を加算して現在のループ時間を求める(S13)。尚、説明を簡単にするために、ループ処理以外の処理(S12,S13)にかかる時間が略零であると仮定して以下の説明を行う。 【0028】次に、S13で求めた現在のループ時間がユーザ設定時間以上か否かを判定すし(S14)、ループ時間がユーザ設定時間未満であれば、S11に戻って前方分岐命令処理を繰り返し実行する。一方、S14の判定の結果、ループ時間がユーザ設定時間以上であれば、演算渋滞検知部4は演算渋滞エラーの発生を検出して(S15)、演算渋滞エラーを検出した際のステップのアドレス(すなわち前方へ分岐させるステップに対応したアドレス)をRAM3に記憶させた後(S16)、ループ時間を0にリセットして(S17)、命令処理を強制終了する(S18)。また、S12の判定の結果、分岐条件が成立しなくなると、CPU1はループ時間の計時結果を0にリセットし(S17)、命令処理を終了する(S18)。 【0029】以上説明したように本実施形態では、ラダープログラム中に前方へ分岐して複数のステップを複数回繰り返すようなループが存在する場合、演算渋滞検知部4が上記ループの実行時間(ループ時間)を計時し、その計時結果が予め設定されたユーザ設定時間以上になると、演算渋滞エラーを検知して演算渋滞検知信号を発生する。この時、CPU1は、演算渋滞検知部4の演算渋滞検知信号に基づいて前方分岐処理命令を強制的に停止させるとともに、演算渋滞の発生したステップのアドレスをRAM3に記憶させる。このように、演算渋滞が発生した場合には演算渋滞が発生したステップのアドレスをRAM3に記憶させているので、ラダープログラムを複数回実行させた際に、演算渋滞エラーの発生したステップのアドレスが同じになるか否かを判断することによって、演算渋滞エラーの原因がシステムの異常によるものか、或いは、演算渋滞によるものかを確実に判別することができる。すなわち、演算渋滞エラーが発生した際のステップのアドレスが同一であれば演算渋滞によるものと判断し、演算渋滞エラーが発生した際のステップのアドレスが異なっていればシステムの異常によるものと判断できる。 【0030】次に本実施形態の具体例を図5のフローチャートにより説明する。このラダープログラムは、S14で前方に分岐して前方分岐命令処理を複数回繰り返すループAと、S14’で前方に分岐して前方分岐命令処理を複数回繰り返すループBとで構成され、ループAの処理を1回実行するのに要する時間は200(mS)、ループBの処理を1回実行するのに要する時間は100(mS)である。ここで、ループBの繰り返し回数は10回、ループ時間の上限値を示すユーザ設定時間は1500(mS)に設定されている。また、ループAの繰り返し回数には、誤って大きな値(10回)が設定されている。 【0031】ここで、CPU1がループAの処理を実行する場合、ループAの分岐回数は10回に設定されているので、ループAの処理を10回繰り返そうとするが、ループAの処理を1回実行するのには200(mS)かかり、ユーザ設定時間は1500(mS)に設定されているので、8回ループした時点でループ時間がユーザ設定時間を超えてしまう。この時、演算渋滞検知部4は、ループ時間がユーザ設定時間を超えることから演算渋滞エラーの発生を検知し(S15)、CPU1が前方へ分岐させるステップのアドレスをRAM3に記憶させた後(S16)、ループ時間を0にリセットして(S17)、ループAの処理を強制的に終了させる。 【0032】また、CPU1がループBの処理を実行する場合、ループBの分岐回数は10回に設定されているので、ループBの処理を10回繰り返した時点で、ループ時間を0にリセットして(S17’)、ラダープログラムを終了する。なお、ループBの処理を1回実行するのに必要な時間は100(mS)であるから、ループBの処理を10回実行するのに必要な時間は1000(mS)となり、ユーザ設定時間(=1500(mS))よりも短いので、ループBの処理が途中で強制終了されることはない。 【0033】(実施形態3)本発明の実施形態3を図6乃至図9を参照して説明する。尚、プログラマブルコントローラの構成は実施形態1と同様であるので、図示および説明は省略する。 【0034】本実施形態のプログラマブルコントローラは、ラダープログラムを高速で演算するために、ユーザが組み込んだラダープログラムをマシン語にコンパイルして演算する機能を有している。そして、CPU1では、ラダープログラムP1をマシン語の実行プログラムP2にコンパイルする際に、実行プログラムP2に所定のステップ数ごとに複数個(本実施形態では例えば6個)の計測ポイントPT1〜PT6を設けている(図6参照)。演算渋滞検知部4は、CPU1が実行プログラムP2を1回実行する間に各計測ポイントPT1…をそれぞれ通過する回数を計数し、その計数結果が予め設定されたユーザ設定回数以上になると、演算渋滞エラーと判断して、演算渋滞検知信号を発生する。この時、CPU1は、演算渋滞検知部4の演算渋滞検知信号に基づいて実行プログラムP2の演算処理を強制的に終了させると共に、演算渋滞検知時の実行プログラムP2のステップ(すなわちメモリ上のアドレス)をRAM3に記憶させている。尚、CPU1が実行プログラムP2の最終ステップを実行すると、演算渋滞検知部4は各計測ポイントPT1〜PT6の通過回数の計数値を0にリセットするようになっている。また、上述のユーザ設定回数はユーザが作成したプログラムの命令によって指定することのできないメモリ部のアドレスに格納されており、一旦設定した値が誤って書き換えられるのを防止している。 【0035】図7は本実施形態の動作を説明するフローチャートであり、実行プログラムP2の実行中に各計測ポイントPT1…を通ると、割込みがかかって通過回数計数処理が実行され、各計測ポイントPT1…の通過回数をインクリメントして(S21)、通過回数がユーザ設定回数以上か否かを判定する(S22)。ここで、何れかの計測ポイントPT1…の通過回数がユーザ設定回数以上になると、演算渋滞エラーを検出して、演算渋滞検知信号を発生する(S23)。この時、CPU1は、演算渋滞検知部4の演算渋滞検知信号に基づいて、演算渋滞エラーを検出した計測ポイントPT1…のアドレスをRAM3に記憶させるとともに(S24)、プログラムの最終番地(最終ステップ)へ分岐させて、演算処理を強制終了させる。一方、S22の判定の結果、各計測ポイントPT1…の通過回数がユーザ設定回数未満であれば、通過回数計数処理を終了して、次のアドレスのプログラムを実行する。 【0036】以上説明したように本実施形態では、ユーザの組んだラダープログラムP1をコンパイルしてマシン語の実行プログラムP2に変換する際に、所定のステップ数毎に計測ポイントPT1…を設けており、プログラムを1回実行する間に各計測ポイントPT1…を通過する通過回数がユーザ設定回数以上になると、演算渋滞エラーを検知して、演算渋滞の発生した計測ポイントPT1…のアドレスをRAM3に記憶させている。このように、演算渋滞が発生した場合には演算渋滞が発生した計測ポイントPT1…のアドレスをRAM3に記憶させているので、マシン語の実行プログラムP2を複数回実行させた際に、演算渋滞エラーの発生したアドレスが同じになるか否かを判定することによって、演算渋滞エラーの原因がシステムの異常によるものか、或いは、演算渋滞によるものかを確実に判別することができる。すなわち、演算渋滞エラーが発生する際の計測ポイントPT1…のアドレスが同一であれば演算渋滞によるものと判断し、演算渋滞エラーが発生する際の計測ポイントPT1…のアドレスが異なっていればシステムの異常によるものと判断できる。また、演算渋滞エラーの発生を特定の命令(前方分岐命令)だけに限らず検出することができる。 【0037】次に本実施形態の具体例を図8及び図9のフローチャートにより説明する。このプログラムでは、S25で前方に分岐して所定の前方分岐命令処理を複数回繰り返すよう分岐条件が設定されており、ループの前段に計測ポイントPT1を、ループの途中に計測ポイントPT2,PT3を、ループの後段に計測ポイントPT4をそれぞれ設けている。各計測ポイントPT1〜PT4の通過回数A〜Dの初期値は0に設定されており、通過回数の上限値を示すユーザ設定回数は100回に設定されている。また、上記ループの分岐回数として、ユーザが誤って異常に大きな値(=200)を設定してある。 【0038】ここで、CPU1がプログラムの演算処理を開始すると、先ず計測ポイントPT1を通過するので、計測ポイントPT1での処理が実行され、計測ポイントPT1の通過回数Aが1になる(S21a)。次に、ループ内の処理に移行すると、計測ポイントPT2,PT3を通過するので、各計測ポイントPT2,PT3での処理が実行され、各計測ポイントPT2,PT3の通過回数B,Cがそれぞれ1になる(S21b,S21c)。その後、S25でこのループの分岐回数が200回に達したか否かを判定し、分岐回数が200回になるまで、前方に分岐して所定の前方分岐命令処理を実行しようとする。この間、前方に分岐して1回ループする毎に、ループ内に設けた計測ポイントPT2,PT3をそれぞれ通過し、各計測ポイントPT2,PT3の通過回数B,Cが1ずつインクリメントされていく。ここで、ユーザ設定回数は100回に設定してあるので、計測ポイントPT2の通過回数Bが100回に達した時点で(S22b)、演算渋滞検知部4が演算渋滞エラーを検知して、演算渋滞検知信号を発生する(S23b)。この時、CPU1が、演算渋滞検知信号に基づいて演算渋滞検知時の計測ポイントPT2のアドレスをRAM3に記憶させており(S24b)、全ての計測ポイントPT1〜PT4の通過回数A〜Dを0にリセットして(S26)、プログラムを強制終了する。 【0039】(実施形態4)本発明の実施形態4を図6及び図10〜図12を参照して説明する。尚、プログラマブルコントローラの構成は実施形態1と同様であるので、図示および説明は省略する。 【0040】本実施形態のプログラマブルコントローラは、実施形態3と同様、ラダープログラムを高速で演算するために、ユーザが組み込んだラダープログラムをマシン語にコンパイルして演算する機能を有している。そして、CPU1では、ラダープログラムP1をマシン語の実行プログラムP2にコンパイルする際に、実行プログラムP2中に所定のステップ数ごとに複数個(本実施形態では例えば6個)の計測ポイントPT1〜PT6を設けており(図6参照)、演算渋滞検知部4は、プログラムの先頭からの経過時間をそれぞれの計測ポイントPT1…で計測し、その計測値がユーザーの設定したユーザ設定時間以上になると、演算渋滞エラーと判断して、演算渋滞検知信号を発生する。この時、CPU1は、演算渋滞検知部4の演算渋滞検知信号に基づいて、実行プログラムP2の演算処理を強制的に終了させると共に、演算渋滞検知時の実行プログラムP2のステップ(すなわちメモリ上のアドレス)をRAM3に記憶させている。尚、CPU1が、実行プログラムP2の最終ステップを実行すると、演算渋滞検知部4は各計測ポイントPT1〜PT6までの経過時間の実測値を0にリセットするようになっている。また、上述のユーザ設定時間はプログラムの命令によって指定することのできないメモリ部のアドレスに格納されており、一旦設定した値が誤って書き換えられるのを防止している。 【0041】図10は本実施形態の動作を説明するフローチャートであり、実行プログラムP2の実行中に各計測ポイントPT1…を通ると、割込みがかかって通過時間計測処理が実行され、プログラムの先頭からの経過時間を各計測ポイントPT1…の通過時間とし(S31)、通過時間が予め設定されたユーザ設定時間以上か否かを判定する(S32)。ここで、何れかの計測ポイントPT1…の通過時間がユーザ設定時間以上になると、演算渋滞エラーを検出して(S33)、演算渋滞エラーを検出した計測ポイントPT1…のアドレスをRAM3に記憶させた後(S34)、プログラムの最終番地(最終ステップ)へ分岐させて、演算処理を強制終了する。一方、S32の判定の結果、各計測ポイントPT1…の通過時間がユーザ設定時間未満であれば、通過時間計測処理を終了して、次のアドレスのプログラムを実行する。 【0042】以上説明したように本実施形態では、ユーザの組んだラダープログラムP1をコンパイルしてマシン語の実行プログラムP2に変換する際に、所定のステップ数毎に計測ポイントPT1…を設けており、プログラムの先頭から各計測ポイントPT1…までの処理を実行するのに要する時間(経過時間)がユーザ設定時間以上になると、演算渋滞エラーを検知して、演算渋滞検知信号を発生する。この時、CPU1は、演算渋滞検知部4の演算渋滞検知信号に基づいて、演算渋滞の発生した計測ポイントPT1…のアドレスをRAM3に記憶させるとともに、演算処理を強制終了させている。このように、演算渋滞が発生した場合には演算渋滞が発生した計測ポイントPT1…のアドレスをRAM3に記憶させているので、マシン語の実行プログラムP2を複数回実行させた際に、演算渋滞エラーの発生したアドレスが同じになるか否かを判定することによって、演算渋滞エラーの原因がシステムの異常によるものか、或いは、演算渋滞によるものかを確実に判別することができる。すなわち、演算渋滞エラーが発生する際の計測ポイントPT1…のアドレスが同一であれば演算渋滞によるものと判断し、演算渋滞エラーが発生する際の計測ポイントPT1…のアドレスが異なっていればシステムの異常によるものと判断できる。また演算渋滞エラーの発生を特定の命令(前方分岐命令)だけに限らず検出することができる。また、各計測ポイントPT1…は自動的に設定されているので、各計測ポイントPT1…の通過回数を予測するのは難しく、通過回数の上限値であるユーザ設定回数の見積もりが難しいが、本実施形態ではユーザ設定時間として各計測ポイントPT1…の経過時間の上限値を設定しており、スキャンタイムの最大値を考慮することによって比較的容易にユーザ設定時間を設定できる。 【0043】次に本実施形態の具体例を図11及び図12のフローチャートにより説明する。このプログラムでは、S35で前方に分岐して所定の前方分岐命令処理を10回繰り返すよう分岐条件が設定されており、ループの前段に計測ポイントPT1を、ループの途中に計測ポイントPT2,PT3を、ループの後段に計測ポイントPT4をそれぞれ設けている。ここで、プログラムの先頭から各計測ポイントPT1,PT2,PT3までの経過時間は、それぞれ、10(mS)、20(mS)、30(mS)であり、ループ開始地点から計測ポイントPT2までの経過時間は5(mS)、計測ポイントPT3からループ終了地点までの経過時間は5(mS)、プログラムの先頭から計測ポイントDまでの経過時間は245(mS)である。そして、上述のユーザ設定時間は100(mS)に設定してある。また、各計測ポイントPT1〜PT4の通過時間Ta〜Tdの初期値は0に設定されている。 【0044】ここで、CPU1がラダープログラムの演算処理を開始すると、先ず計測ポイントPT1を通過するので、計測ポイントPT1での処理が実行され、計測ポイントPT1の通過時間Taが10(mS)となる(S31a)。次に、ループ内の処理に移行すると、計測ポイントPT2,PT3を通過するので、各計測ポイントPT2,PT3での処理が実行され、各計測ポイントPT2,PT3の通過時間Tb,Tcがそれぞれ20(mS)、30(mS)となる(S31b,S31c)。その後、S35でこのループの分岐回数が10回に達したか否かを判定し、分岐回数が10回になるまで、前方に分岐して所定の前方分岐命令処理を実行しようとする。この間、前方に分岐して1回ループする毎に、ループ内に設けた計測ポイントPT2,PT3を通過して、各計測ポイントPT2,PT3の通過時間Tb,Tcが更新される。ここで、1回のループには、5+10+5=20(mS)の時間がかかり、4回ループしたところで計測ポイントPT2の通過時間が100(mS)になるため、演算渋滞エラーを検知して、演算渋滞検知信号を発生する(S33b)。この時、CPU1は、演算渋滞エラーを検出した際の計測ポイントPT2のアドレスをRAM3に記憶させた後(S34b)、全ての計測ポイントPT1〜PT4の通過時間Ta〜Tdを0にリセットして(S36)、プログラムを終了する。 【0045】(実施形態5)本実施形態のプログラマブルコントローラのブロック図を図13に示す。本実施形態では、実施形態1で説明したプログラマブルコントローラにおいて、演算渋滞検知部4の代わりに、毎スキャン毎にタイマカウント値がプリセットされ、演算の時間がかかりすぎて演算が遅延するとタイムアップして、演算渋滞をCPU1に知らせるためにCPU1に割り込みをかける演算渋滞検知タイマ6を設けている。そして、演算渋滞検知タイマ6がタイムアップすると、CPU1は演算渋滞検知タイマ6がタイムアップした時(すなわち演算渋滞を検出した時)のステップのアドレスをメモリ部に記憶させるとともに、演算処理を強制的に終了させている。ここで、演算渋滞検知タイマ6のタイマ時間は通常の演算速度では次のプリセットまでにタイムアップしないような値に設定してある。尚、演算渋滞検知タイマ6以外の構成は実施形態1と同様であるので、同一の構成要素には同一の符号を付して、その説明は省略する。 【0046】図14は本実施形態の動作を説明するフローチャートであり、CPU1がラダープログラムP3の演算処理を開始するとともに、演算渋滞検知タイマ6が起動して限時動作を開始する。なお、演算渋滞検知タイマ6のタイマ時間は100(mS)に設定されている。 【0047】ここで、演算途中に演算渋滞検知タイマ6がタイムアップすると(演算開始から100(mS)が経過すると)、演算渋滞検知タイマ6が演算渋滞エラーを検出して(S41)、CPU1に割り込みをかける。この時、CPU1は演算渋滞検知タイマ6がタイムアップしたときのステップのアドレス(PT10)をメモリ部に記憶させるとともに(S42)、プログラムの演算処理を停止させた後(S43)、プログラムの最終番地にジャンプさせる(S44)。 【0048】このように本実施形態では、演算途中に演算渋滞検知タイマ6がタイムアップすると、CPU1が演算渋滞発生時のステップのアドレスをメモリ部に記憶させるとともに、演算処理を強制的に停止させているので、ラダープログラムを複数回実行させた際に、演算渋滞エラーの発生したステップが同じになるか否かを判断することによって、演算渋滞エラーの原因がシステムの異常によるものか、或いは、演算渋滞によるものかを確実に判別することができる。すなわち、演算渋滞エラーが発生した時のステップが同一であれば演算渋滞によるものと判断し、演算渋滞エラーが発生した時のステップが異なっていればシステムの異常によるものと判断できる。 【0049】(実施形態6)ところで、上述した実施形態5のプログラマブルコントローラでは、演算渋滞検知タイマ6がタイムアップすると、CPU1が演算渋滞発生時のステップのアドレスをメモリ部に記憶させるとともに、演算処理を強制的に停止させているが、演算渋滞検知タイマ6のタイマ時間は、ユーザがプログラムの演算時間を見積もって予め設定する必要がある。しかしながら、ユーザプログラムで複数の工程を制御している場合には、1回毎にプログラムの演算時間が変動する場合があり、タイマ時間の最適値を見積もるのに手間がかかるという問題があった。 【0050】そこで、本実施形態では、実施形態5のプログラマブルコントローラに演算渋滞検知タイマ6のタイマ時間を自動的に設定する機能を付加している。尚、プログラマブルコントローラの基本的な構成は実施形態5と同様であるので、図示及び説明は省略する。また、本実施形態のプログラマブルコントローラは、ラダープログラムを1回演算するのに必要な時間(この時間をスキャンタイムと言う。)の最大値を計測可能なスキャンタイム測定機能を備えている。 【0051】図15は本実施形態の動作を説明するフローチャートであり、図15中のEがタイマ時間を自動的に設定する機能を示している。初期動作時にCPU1は自動設定モードか否かを判別し(S51)、自動設定モードが指定されている場合は、起動時から現在までの経過時間とユーザが予め指定した設定完了時間とを比較する(S53)。ここで、設定完了時間とは、タイマ時間の自動設定にかける時間のことを言い、本実施形態では例えば1000(mS)に設定してある。尚、設定完了時間は、ラダープログラムを複数回実行することができる程度の時間に設定されている。 【0052】初期動作時には経過時間が略0であり、設定完了時間よりも短いので、演算渋滞検知タイマ6を停止させた後(S56)、ラダープログラムP3を実行する。ここで、ラダープログラムP3を1回実行するのに要する時間(スキャンタイム)は100(mS)であるから、この時点で経過時間が100(mS)となる。 【0053】次にプログラムの先頭に戻って自動設定モードか否かを判別した後(S51)、経過時間と設定完了時間とを比較する(S52)。この時、経過時間は100(mS)であり、やはり設定完了時間よりも短いので、CPU1は演算渋滞検知タイマ6を停止させた後(S56)、ラダープログラムP3を実行する。そして、上記の動作を計10回繰り返すと、経過時間が1000(mS)となって設定完了時間に等しくなるので、S53で経過時間と設定完了時間との大小を比較したときに、比較条件が成立し、演算渋滞検知タイマ6のタイマ時間としてスキャンタイムの最大値(=100(mS))を設定する(S54)。その後、CPU1は自動設定モードを解除して(S55)、ラダープログラムP3を実行した後、プログラムの先頭に戻って自動設定モードか否かを判別する(S51)。この時、自動設定モードが解除されているため、CPU1は演算渋滞検知タイマ6を起動して(S52)、ラダープログラムP3を実行する。これ以降は自動設定モードが解除された状態で動作し、CPU1はラダープログラムP3を繰り返し実行する。 【0054】このように本実施形態では初期動作時に設定完了時間が経過するまでの間、ラダープログラムP3を複数回実行してスキャンタイムを測定し、設定完了時間が経過した時点でスキャンタイムの測定結果の内、最大のスキャンタイムを演算渋滞検知タイマ6のタイマ時間として設定しているので、タイマ時間として最適な値を自動的に設定することができる。 【0055】(実施形態7)本実施形態のプログラマブルコントローラのブロック図を図16に示す。本実施形態では、上述した実施形態5のプログラマブルコントローラにおいて、CPU1が正常に動作しているか否かを監視し、異常動作を検出すると異常の発生をCPU1に知らせるためにCPU1に割り込みをかけるウォッチドッグタイマ(以下、WDTと略す。)7を設けている。そして、演算渋滞検知タイマ6またはWDT7がタイムアップすると、CPU1はタイムアップした時のステップのアドレスをメモリ部に記憶させるとともに、その時点での内部情報(例えばタイムアップした時刻、その時のスタックポインタ、内部レジスタ、プログラムカウンタのデータなど)をメモリ部に記憶させた後、演算処理を終了させている。尚、WDT7以外の構成は実施形態5と同様であるので、同一の構成要素には同一の符号を付して、その説明は省略する。 【0056】図17は本実施形態の動作を説明するフローチャートであり、CPU1がラダープログラムP3の演算処理を開始すると、演算渋滞検知タイマ6が起動して限時動作を開始するとともに、WDT7が起動してCPU1の動作を監視する。尚、演算渋滞検知タイマ6のタイマ時間は100(mS)に設定してある。 【0057】ここで、演算途中に演算渋滞検知タイマ6がタイムアップすると(演算開始から100(mS)が経過すると)、演算渋滞エラーを検出してCPU1に割り込みをかけ(S61)、CPU1が演算渋滞検知時のステップのアドレス(PT11)をメモリ部に記憶させるとともに(S62)、タイムアップした時刻やその時のスタックポインタ、内部レジスタ、プログラムカウンタのデータなどの内部情報をメモリ部に記憶させた後(S64)、プログラムの演算処理を停止させて(S64)、プログラムの最終番地にジャンプさせる(S65)。 【0058】このように本実施形態では、演算途中に演算渋滞検知タイマ6がタイムアップして、演算渋滞エラーを検知すると、CPU1が演算渋滞検知時のステップのアドレスやその時の内部情報をメモリ部に記憶させた後、演算処理を強制的に停止させているので、ラダープログラムを複数回実行させた際に、演算渋滞エラーの発生したステップが同じになるか否かを判断することによって、演算渋滞エラーの原因がシステムの異常によるものか、或いは、演算渋滞によるものかを確実に判別することができる。また、演算渋滞エラーが発生したときの内部情報から、演算渋滞エラーが発生した原因を追及することも可能になる。 【0059】尚、WDT7がタイムアップしたときにも、CPU1は、タイムアップ時のステップのアドレスやその時の内部情報をメモリ部に記憶させた後、演算処理を強制的に停止させており、上述と同様にタイムアップ時の内部情報から、演算渋滞エラーが発生した原因を追及することができる。 【0060】ところで、本実施形態では演算渋滞検知タイマ6又はWDT7がタイムアップした時の内部情報を1回分しか記憶させていないが、タイムアップ時の内部情報を複数回分記憶させるようにしても良い。 【0061】図18はタイムアップ時の内部情報を複数回分記憶させるようにした場合のフローチャートであり、CPU1がラダープログラムP3の演算処理を開始すると、演算渋滞検知タイマ6が起動して限時動作を開始するとともに、WDT7が起動してCPU1の動作を監視する。尚、演算渋滞検知タイマ6のタイマ時間は100(mS)に設定してある。 【0062】ここで、演算途中に演算渋滞検知タイマ6がタイムアップすると(演算開始から100(mS)が経過すると)、演算渋滞エラーを検出してCPU1に割り込みをかけ(S71)、CPU1がタイムアップ時のステップのアドレス(PT12)をメモリ部に記憶させる(S72)。次に、CPU1は、内部情報の記憶個数をインクリメントして(S73)、現在の記憶個数から内部情報を格納するアドレスを算出した後(S74)、算出されたアドレスにタイムアップ時の内部情報を記憶させ(S75)、プログラムの演算処理を強制的に停止させて(S76)、プログラムの最終番地にジャンプさせる(S77)。 【0063】このように、演算渋滞エラーが発生した時の内部情報を複数回分記憶させているので、複数回分の内部情報を比較検討することによって、演算渋滞エラーが発生した原因をより詳細に追求することができる。 【0064】 【発明の効果】上述のように、請求項1の発明は、複数のステップからなるラダープログラムを記憶する記憶手段と、ラダープログラムを実行する演算手段と、演算手段による演算処理の渋滞度合いを示す実績値が閾値を超えると、演算渋滞の発生を示す演算渋滞検知信号を発生する演算渋滞検知手段と、演算渋滞検知信号が入力されると演算手段による演算処理を強制終了させるとともに、演算渋滞検知時のステップが書き込まれたアドレスを記憶手段に記憶させる演算渋滞処理手段とを備えて成ることを特徴としている。演算渋滞が発生した場合はラダープログラムの同じステップで演算渋滞検知信号が発生するのに対して、演算手段などにハード的な異常が発生した場合は予測不可能な動作を行うために異なるステップで演算渋滞検知信号が発生するので、演算渋滞検知信号による強制終了処理が複数回行われた際に、演算渋滞検知時のステップのアドレスが同一であれば演算渋滞によるものと判断でき、また演算渋滞検知時のステップのアドレスが異なっていれば演算渋滞以外の原因によるものと判断できるという効果があ、また演算渋滞の発生した場所を特定できるという効果もある。 【0065】請求項2の発明は、請求項1の発明において、閾値を、ユーザの作成したプログラムによって書換不能な記憶手段のアドレスに格納したこと特徴とし、請求項1の発明の作用に加えて、閾値がユーザーの作成したプログラムで書き換えられるのを防止できるという効果がある。 【0066】請求項3の発明は、請求項1又は2の発明において、ラダープログラムに、複数のステップを所定回数だけ繰り返すループを設け、演算渋滞検出手段は、ループの演算処理の渋滞度合いを示す実績値が閾値を超えると演算渋滞検知信号を発生することを特徴とし、請求項1又は2の発明と同様の効果を奏する。 【0067】請求項4の発明は、請求項3の発明において、実績値は、ループの繰り返し回数であることを特徴とし、ループの繰り返し回数が閾値を超えることから演算渋滞の発生を検知できるという効果がある。 【0068】請求項5の発明は、請求項3の発明において、実績値は、ループの処理を実行するのに要する時間であることを特徴とし、ループの処理を実行するのに要する時間が閾値を超えることから演算渋滞の発生を検知できるという効果がある。 【0069】請求項6の発明は、請求項1又は2の発明において、ラダープログラムをマシン語にコンパイルして実行プログラムを作成する際に、実行プログラムの途中に複数の計測ポイントを設け、演算渋滞検知手段は、各計測ポイントで演算処理の渋滞度合いを示す実績値を検出して、実績値が閾値を超えると演算渋滞検知信号を発生することを特徴とし、請求項1又は2の発明と同様の効果を奏する。 【0070】請求項7の発明は、請求項6の発明において、実績値は、実行プログラムを1回実行する間に各計測ポイントをそれぞれ通過する回数であることを特徴とし、実行プログラムを1回実行する間に各計測ポイントをそれぞれ通過する回数が閾値を超えることから演算渋滞の発生を検知でき、且つ、特定の命令に関わらず演算渋滞を検出できるという効果がある。 【0071】請求項8の発明は、請求項6の発明において、実績値は、実行プログラムの先頭から各計測ポイントまでの処理を実行するのに要する時間であることを特徴とし、実行プログラムの先頭から各計測ポイントまでの処理に要する時間が閾値を超えることから演算渋滞の発生を検知でき、且つ、特定の命令に関わらず演算渋滞を検出できるという効果がある。 【0072】請求項9の発明は、請求項1の発明において、演算渋滞検知手段は、ラダープログラムの処理を開始するとともにタイマ時間の限時動作を開始し、ラダープログラムの処理が終了するまでの間にタイムアップすると演算渋滞検知信号を発生する演算渋滞検知タイマからなることを特徴とし、請求項1の発明と同様の効果を奏する。 【0073】請求項10の発明は、請求項9の発明において、演算手段によりラダープログラムを実行させるとともに、ラダープログラムを1回実行するのに要する演算時間を検出する処理を複数回実行し、演算時間の検出結果の最大値をタイマ時間に設定するタイマ時間設定手段を設けたことを特徴とし、ユーザがタイマ時間を見積もって設定する手間を無くすことができるという効果がある。
|
| 【出願人】 |
【識別番号】000005832 【氏名又は名称】松下電工株式会社 【住所又は居所】大阪府門真市大字門真1048番地
|
| 【出願日】 |
平成13年8月28日(2001.8.28) |
| 【代理人】 |
【識別番号】100087767 【弁理士】 【氏名又は名称】西川 惠清 (外1名)
|
| 【公開番号】 |
特開2003−67008(P2003−67008A) |
| 【公開日】 |
平成15年3月7日(2003.3.7) |
| 【出願番号】 |
特願2001−258737(P2001−258737) |
|