(57)【要約】【課題】ラダープログラムにおける無限ループを脱出することが可能な制御装置及び編集装置を提供する。【解決手段】ラダープログラムの実行中に、ループ処理が無限ループに陥ったことを検出することが可能な制御装置１は無限ループの発生時に、ループ処理を構成するジャンプ命令の起動条件を強制的に不成立とすることにより、無限ループから脱出する無限ループ脱出手段１０２を有することを特徴とする。【選択図】図１
2019185361.tif 000002
【特許請求の範囲】
【請求項１】
ラダープログラムの実行中に、ループ処理が無限ループに陥ったことを検出することが可能な制御装置であって、
前記無限ループの発生時に、前記ループ処理を構成するジャンプ命令の起動条件を強制的に不成立とすることにより、前記無限ループから脱出する無限ループ脱出手段を有することを特徴とする
制御装置。
【請求項２】
前記無限ループ脱出手段は、前記ループ処理の正常終了時の起動条件信号の状態を少なくとも記録した無限ループ発生条件情報テーブルを参照し、現在の前記起動条件信号を、前記正常終了時の起動条件信号に強制的に書き換えることにより、前記無限ループから脱出することを特徴とする
請求項１記載の制御装置。
【請求項３】
前記無限ループ脱出手段は、前記ジャンプ命令内に設けられた閉接点の信号状態を強制的に書き換えることにより、前記無限ループから脱出することを特徴とする
請求項１記載の制御装置。
【請求項４】
前記無限ループの原因となりうる前記ループ処理の前記起動条件信号を前記無限ループ発生条件情報テーブルに記録する無限ループ検出手段を有する
請求項２記載の制御装置。
【請求項５】
前記ラダープログラムの実行中に、前記ループ処理の正常終了時の起動条件信号の状態を前記無限ループ発生条件情報テーブルに記録する無限ループ検出手段を有する
請求項２記載の制御装置。
【請求項６】
ラダープログラムを編集するための編集装置であって、
無限ループの原因となりうるループ処理の起動条件信号を無限ループ発生条件情報テーブルに記録する無限ループ検出手段を有する
編集装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、制御装置及び編集装置に関し、特にラダープログラムにおける無限ループを脱出することが可能な制御装置及び編集装置に関する。
【背景技術】
【０００２】
ラダープログラムにおいて特定の処理を繰り返し実行させる手法として、ジャンプ命令を使用して、ジャンプ命令の起動条件が不成立となるまで、特定の処理を繰り返す手法がある。このような処理手法を一般にループ処理という。
【０００３】
図５にループ処理を行うラダープログラムの一例を示す。ループ処理が行われる区間はネット番号０１００から０１１０までである。ネット０１００にはラベル１が設けられ、ネット０１１０にはラベル１へのジャンプ命令が設けられる。ネット０１１０のジャンプ命令まで実行が進むと、ラベル１に戻って実行が再開される。ネット０１１０のジャンプ命令の直前には起動条件（破線囲み部）が設けられており、起動条件が不成立となるとジャンプ命令が実行されず、ループから脱出する。図５の例では、
【０００４】
【数１】
2019185361.tif 000003
が成立すればジャンプ命令が実行され、不成立となればジャンプ命令は実行されない。
【０００５】
ループ処理の設計に誤りがあると、ループから脱出することができずに無限ループに陥ることがある。無限ループはラダープログラムを実行するまでは事前検出が困難である。
【０００６】
特許文献１には、ラダープログラムの実行時に無限ループに陥ったことを検出し、無限ループの発生箇所を推定して画面表示するシステムが開示されている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開平０７−１０４８２９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
特許文献１は、無限ループを検出する方法を示しているが、無限ループから脱出する方法は開示していない。ラダープログラムの実行中に無限ループに陥ると、ループから脱出することができず機械を正常に制御できない恐れがある。
【０００９】
本発明はこのような課題を解決するためのものであり、ラダープログラムにおける無限ループを脱出することが可能な制御装置及び編集装置を提供することを目的とする。
【課題を解決するための手段】
【００１０】
本発明の一実施形態にかかる制御装置は、ラダープログラムの実行中に、ループ処理が無限ループに陥ったことを検出することが可能な制御装置であって、前記無限ループの発生時に、前記ループ処理を構成するジャンプ命令の起動条件を強制的に不成立とすることにより、前記無限ループから脱出する無限ループ脱出手段を有することを特徴とする。
本発明の一実施形態にかかる制御装置において、前記無限ループ脱出手段は、前記ループ処理の正常終了時の起動条件信号の状態を少なくとも記録した無限ループ発生条件情報テーブルを参照し、現在の前記起動条件信号を、前記正常終了時の起動条件信号に強制的に書き換えることにより、前記無限ループから脱出することを特徴とする。
本発明の一実施形態にかかる制御装置において、前記無限ループ脱出手段は、前記ジャンプ命令内に設けられた閉接点の信号状態を強制的に書き換えることにより、前記無限ループから脱出することを特徴とする。
本発明の一実施形態にかかる制御装置において、前記無限ループの原因となりうる前記ループ処理の前記起動条件信号を前記無限ループ発生条件情報テーブルに記録する無限ループ検出手段を有する。
本発明の一実施形態にかかる制御装置において、前記ラダープログラムの実行中に、前記ループ処理の正常終了時の起動条件信号の状態を前記無限ループ発生条件情報テーブルに記録する無限ループ検出手段を有する。
本発明の一実施形態にかかる編集装置は、ラダープログラムを編集するための編集装置であって、無限ループの原因となりうるループ処理の起動条件信号を無限ループ発生条件情報テーブルに記録する無限ループ検出手段を有する。
【発明の効果】
【００１１】
本発明により、ラダープログラムにおける無限ループを脱出することが可能な制御装置及び編集装置を提供することができる。
【図面の簡単な説明】
【００１２】
【図１】制御装置１のハードウェア構成図である。
【図２】編集装置２のハードウェア構成図である。
【図３】制御装置１及び編集装置２の機能ブロック図である。
【図４】編集装置２においてラダープログラムのコンパイル時に実行される処理を示すフローチャートである。
【図５】ループ処理及びジャンプ命令の検出処理を示す図である。
【図６】無限ループ条件検出処理を示すフローチャートである。
【図７】無限ループ条件検出処理を示す図である。
【図８】無限ループ発生条件情報テーブル３０１の一例を示す図である。
【図９】制御装置１においてラダープログラムの実行中に行われる処理を示すフローチャートである。
【図１０】無限ループ発生条件情報テーブル３０１の一例を示す図である。
【図１１】脱出処理を示す図である。
【図１２】脱出処理を示す図である。
【発明を実施するための形態】
【００１３】
図１及び図２は、本発明の第１の実施形態による制御装置１と、編集装置２と、の要部とを示す概略的なハードウェア構成図である。制御装置１は、例えばラダープログラムを読み込んで産業用機械やロボット等（以下、単に機械という）の制御を行う装置であり、例えばＰＬＣ（ｐｒｏｇｒａｍｍａｂｌｅ  ｌｏｇｉｃ  ｃｏｎｔｒｏｌｌｅｒ）、ＰＬＣ機能を備える数値制御装置等である。制御装置１は、ＣＰＵ１１、ＲＯＭ１２、ＲＡＭ１３、不揮発性メモリ１４、インタフェース１８、インタフェース１９、バス１０、軸制御回路１６、サーボアンプ１７を有する。制御装置１には、サーボモータ５０、操作盤６０、編集装置２が接続される。
【００１４】
ＣＰＵ１１は、制御装置１を全体的に制御するプロセッサである。ＣＰＵ１１は、ＲＯＭ１２に格納されたシステム・プログラムをバス１０を介して読み出し、システム・プログラムに従って制御装置１全体を制御する。
【００１５】
ＲＯＭ１２は、機械の各種制御等を実行するためのシステム・プログラムを予め格納している。
【００１６】
ＲＡＭ１３は、一時的な計算データや表示データ、後述する操作盤６０を介してオペレータが入力したデータ等を一時的に格納する。
【００１７】
不揮発性メモリ１４は、例えば図示しないバッテリでバックアップされており、制御装置１の電源が遮断されても記憶状態を保持する。不揮発性メモリ１４は、操作盤６０から入力されるデータや、インタフェース１９を介して編集装置２から入力されたラダープログラム等を格納する。不揮発性メモリ１４に記憶されたプログラムやデータは、実行時及び利用時にはＲＡＭ１３に展開されても良い。
【００１８】
軸制御回路１６は、機械の動作軸を制御する。軸制御回路１６は、ＣＰＵ１１が出力する軸の移動指令量を受けて、軸の移動指令をサーボアンプ１７に出力する。
【００１９】
サーボアンプ１７は、軸制御回路１６が出力する軸の移動指令を受けて、サーボモータ５０を駆動する。
【００２０】
サーボモータ５０は、サーボアンプ１７により駆動されて機械の動作軸を動かす。サーボモータ５０は、典型的には位置・速度検出器を内蔵する。位置・速度検出器は位置・速度フィードバック信号を出力し、この信号が軸制御回路１６にフィードバックされることで、位置・速度のフィードバック制御が行われる。
【００２１】
なお、図１では軸制御回路１６、サーボアンプ１７、サーボモータ５０は１つずつしか示されていないが、実際には制御対象となる機械に備えられた軸の数だけ用意される。例えば、６軸を備えたロボットを制御する場合、それぞれの軸に対応する軸制御回路１６、サーボアンプ１７、サーボモータ５０が合計６セット用意される。
【００２２】
操作盤６０は、ディスプレイやハードウェアキー等を備えたデータ入出力装置である。操作盤６０は、インタフェース１８を介してＣＰＵ１１から受けた情報をディスプレイに表示する。操作盤６０は、ハードウェアキー等から入力された指令やデータ等をインタフェース１８を介してＣＰＵ１１に渡す。
【００２３】
インタフェース１９は、制御装置１と編集装置２とを接続するための通信インタフェースである。
【００２４】
編集装置２は、ラダープログラムの作成及び編集機能を有する情報処理装置であり、例えばＰＣ（ｐｅｒｓｏｎａｌ  ｃｏｍｐｕｔｅｒ）である。編集装置２は、ＣＰＵ２１、ＲＯＭ２２、ＲＡＭ２３、不揮発性メモリ２４、インタフェース２８、インタフェース２９、バス２０を有する。編集装置２には、入出力装置７０、制御装置１が接続される。
【００２５】
ＣＰＵ２１は、編集装置２を全体的に制御するプロセッサである。ＣＰＵ２１は、ＲＯＭ２２に格納されたシステム・プログラムをバス２０を介して読み出し、システム・プログラムに従って編集装置２全体を制御する。
【００２６】
ＲＯＭ２２は、編集装置２の各種機能を実行するためのシステム・プログラムを予め格納している。
【００２７】
ＲＡＭ２３は、一時的な計算データや表示データ、後述する入出力装置７０を介してオペレータが入力したデータ等を一時的に格納する。
【００２８】
不揮発性メモリ２４は、例えば図示しないバッテリでバックアップされており、編集装置２の電源が遮断されても記憶状態を保持する。不揮発性メモリ２４は、ラダープログラムの編集ツール（プログラム）や、編集ツールを利用して作成又は編集されたラダープログラム等を格納する。不揮発性メモリ２４に記憶されたプログラムやデータは、実行時及び利用時にはＲＡＭ２３に展開されても良い。
【００２９】
入出力装置７０は、ディスプレイやキーボード等のデータ入出力装置である。入出力装置７０は、インタフェース２８を介してＣＰＵ２１から受けた情報をディスプレイに表示する。入出力装置７０は、キーボード等から入力されたデータ等をインタフェース２８を介してＣＰＵ２１に渡す。
【００３０】
インタフェース２９は、編集装置２と制御装置１とを接続するための通信インタフェースである。
【００３１】
図３は、第１の実施形態における制御装置１及び編集装置２の概略的な機能ブロック図である。制御装置１は、ラダープログラム実行部１０１、無限ループ脱出手段１０２を有する。編集装置２は、無限ループ検出手段２０１を有する。ラダープログラム実行部１０１、無限ループ脱出手段１０２、無限ループ検出手段２０１は、例えばＣＰＵ１１又はＣＰＵ２１の一機能として実現されても良く、例えばＲＯＭ１２、ＲＯＭ２２、ＲＡＭ１３、ＲＡＭ２３、不揮発性メモリ１４又は不揮発性メモリ２４に格納されたプログラムをＣＰＵ１１又はＣＰＵ２１が実行することにより実現されても良い。
【００３２】
無限ループ検出手段２０１は、典型的には、編集装置２のラダープログラムのコンパイラの一機能として実装される。無限ループ検出手段２０１は、例えばラダープログラム（ソースコード）のコンパイル時に、ジャンプ命令の起動条件と、起動条件に含まれる各種信号（以下、起動条件信号）と、各種信号の制御箇所と、を特定する。無限ループ検出手段２０１は、これらの情報を無限ループ発生条件情報テーブル３０１に記録する。
【００３３】
本実施の形態の無限ループ検出手段２０１は、無限ループ発生条件情報テーブル３０１をラダープログラムのオブジェクトコードに埋め込む。例えばオブジェクトコードの末尾等に無限ループ発生条件情報テーブル３０１を付加する。無限ループ検出手段２０１は、オブジェクトコードを制御装置１の例えば不揮発性メモリ１４に転送する。
【００３４】
なお無限ループ検出手段２０１は、無限ループ発生条件情報テーブル３０１をオブジェクトコードに対応付けられた別のファイル内に格納し、当該ファイルをオブジェクトコードとともに制御装置１に転送しても良い。又は、無限ループ検出手段２０１は、制御装置１からアクセス可能な任意の記憶領域（制御装置１、編集装置２、又は他の装置内のいずれに存在しても良い）にオブジェクトコード又は無限ループ発生条件情報テーブル３０１を格納しても良い。また本実施の形態では無限ループ発生条件情報テーブル３０１をテーブル構造を有するデータとして示しているが、他の任意のデータ構造（例えばツリー構造等）により情報を格納しても差し支えない。
【００３５】
ラダープログラム実行部１０１は、例えば不揮発性メモリ１４に転送されたラダープログラムのオブジェクトコードを読み出し、実行する。
【００３６】
無限ループ脱出手段１０２は、ラダープログラム実行部１０１がラダープログラムを実行しているあいだ、ジャンプ命令の起動条件信号の状態を監視する。無限ループ脱出手段１０２は、無限ループに陥ったか否かを判定し（従来技術。特許文献１参照）、無限ループに陥っていればそのことを外部に通知する。無限ループ脱出手段１０２は、無限ループからの脱出処理を実行する。
【００３７】
図４のフローチャートを用いて、編集装置２においてラダープログラムのコンパイル時に実行される処理について説明する。
【００３８】
＜無限ループの原因となりうるジャンプ命令の検出＞
図４のフローチャート及び図５のチャートを用いて、無限ループの原因となりうるジャンプ命令の検出処理について説明する。
Ｓ１０１：ラダープログラム（ソースコード）内の全てのネットについて、それぞれ、以下のＳ１０２乃至Ｓ１０４の処理を実行する。すなわち先頭ネットから順に最後のネットに至るまで、以下のＳ１０２乃至Ｓ１０４の処理を繰り返し実行する。
【００３９】
Ｓ１０２：  無限ループ検出手段２０１は、ネット内にジャンプ命令が含まれるか否かを判定する。含まれる場合、Ｓ１０３に遷移する。含まれない場合は次のネットの処理に移行する。
図５の例では、ネット番号０１１０にジャンプ命令が存在する。
【００４０】
Ｓ１０３：無限ループ検出手段２０１は、ジャンプ命令のネット番号と、ジャンプ命令に含まれるラベル（ジャンプ先）が存在するネット番号と、を比較する。ジャンプ命令のネット番号＞ラベルのネット番号であれば、このジャンプ命令はループ処理を定義しているもの、換言すれば無限ループの原因となりうるものであると判断し、Ｓ１０４に遷移する。その他の場合は次のネットの処理に移行する。
図５の例では、ジャンプ命令が存在するネット番号０１１０と、このジャンプ命令のジャンプ先であるラベル１が存在するネット番号０１００と、を比較する。０１１０＞０１００であるから、このジャンプ命令はループ処理を定義している、すなわち無限ループの原因ともなりうるものと判断される。一般化すれば、ラダーの処理方向とは逆方向（ネット番号が小さくなる方向）へジャンプしている場合、ループ処理が存在するものと判断できる。図５の例では、ジャンプ命令の直前には起動条件が定義されており（破線囲み部）、起動条件が不成立となるまでループ処理が継続する。
【００４１】
Ｓ１０４：無限ループ検出手段２０１は、無限ループ条件検出処理（図６、後述）を実行する。
【００４２】
＜無限ループ条件検出処理＞
Ｓ１０４における無限ループ条件検出処理について、図６のフローチャート、図５及び図７のチャートを用いて詳細に説明する。
Ｓ２０１：  無限ループ検出手段２０１は、ジャンプ命令のネット番号と、ジャンプ命令の起動条件と、を記録する。例えば、起動条件に含まれる１以上の起動条件信号と、起動条件信号が複数である場合はそれらの関係を示す論理式等と、を起動条件として記録できる。典型的にはＲＡＭ２３にこれらの情報を一時的に格納する。
図５の例では、破線で囲んだ回路が起動条件である。この起動条件には、起動条件信号としてＲ０００１．０，Ｆ００００．５，Ｘ００００．０が含まれる。これらの起動条件信号間の関係は数１（上述）のとおりである。
【００４３】
Ｓ２０２：無限ループ検出手段２０１は、Ｓ２０１で記録した全ての起動条件信号について、それぞれＳ２０３乃至Ｓ２０５の処理を実行する。
【００４４】
Ｓ２０３：無限ループ検出手段２０１は、ラダープログラムを探索し、起動条件信号がループ内で制御されているか否かを判定する。制御されている場合、Ｓ２０４に遷移する。制御されていない場合、Ｓ２０５に遷移する。
図７の例では、ネット番号０１１０で評価されている起動条件信号Ｒ０００１．０（破線囲み部）は、ループ内のネット番号０１０１で値が制御されている。ネット番号０１０１では、Ｄ００００＞１００であればＲ０００１．０がＯＮとなる制御が行われている。
【００４５】
Ｓ２０４：無限ループ検出手段２０１は、起動条件信号を制御しているネットの番号を記録する。
図７の例では、起動条件信号Ｒ０００１．０を制御しているネット番号０１０１が記録される。
【００４６】
Ｓ２０５：無限ループ検出手段２０１は、起動条件信号はループ内で制御されていないことを示す情報を記録する。
図７の例において、Ｆ００００．５は自動運転起動中のステータスを示す信号（制御装置１がラダープログラム外から取得できる）、Ｘ００００．０は操作盤６０からの入力信号であるものとする。この場合、Ｆ００００．５，Ｘ００００．０はいずれもループ内で制御されていないことが記録される。
【００４７】
＜無限ループ発生条件情報テーブル３０１の生成＞
図４のフローチャートに戻り、ラダープログラム（ソースコード）内の全てのネットについてそれぞれＳ１０２乃至Ｓ１０４の処理を実行した後に行われる処理について説明する。
【００４８】
Ｓ１０５：無限ループ検出手段２０１は、これまでの処理において無限ループ条件検出処理（図６、Ｓ１０４）を一度でも実行したか否かを判定する。実行していれば、Ｓ１０６に遷移する。実行していなければ、Ｓ１０９に遷移する。
【００４９】
Ｓ１０６：無限ループ検出手段２０１は、Ｓ１０４においてＲＡＭ２３等に記録した情報に基づいて、無限ループ発生条件情報テーブル３０１を生成する。
図８に、無限ループ発生条件情報テーブル３０１の一例を示す。図８の例では、無限ループの発生原因となりうるジャンプ命令それぞれについて、ジャンプ命令のネット番号、１以上の起動条件信号、無限ループの発生原因（すなわち起動条件。本例では起動条件信号間の関係を示す論理式が記録される）、１以上の起動条件それぞれを制御しているネット番号（ループ内に制御箇所がない場合は「ループ内での書き換えなし」と記載される）が対応付けられている。
【００５０】
Ｓ１０７：無限ループ検出手段２０１は、ラダープログラムのコンパイル結果とともに、無限ループ発生条件情報テーブル３０１の内容の一部又は全部を、例えば入出力装置７０のディスプレイに表示することによりオペレータに提示する。
【００５１】
Ｓ１０８：無限ループ検出手段２０１は、ラダープログラムのオブジェクトコードに無限ループ発生条件情報テーブル３０１を埋め込む。例えば、オブジェクトコードの末尾に無限ループ発生条件情報テーブル３０１のバイナリデータ等を付加する。無限ループ検出手段２０１は、無限ループ発生条件情報テーブル３０１を埋め込んだオブジェクトコードを、インタフェース２９を介して制御装置１に送信する。
制御装置１は、無限ループ発生条件情報テーブル３０１が埋め込まれたオブジェクトコードをインタフェース１９を介して受信し、不揮発性メモリ１４に格納する。
【００５２】
Ｓ１０９：  無限ループ検出手段２０１は、ラダープログラムのオブジェクトコードを、インタフェース２９を介して制御装置１に送信する。
制御装置１は、オブジェクトコードをインタフェース１９を介して受信し、不揮発性メモリ１４に格納する。
【００５３】
図９のフローチャートを用いて、制御装置１においてラダープログラムの実行中に行われる処理について説明する。
＜無限ループの判定＞
図９のフローチャート及び図７のチャートを用いて、無限ループの検出処理について説明する。
ラダープログラム実行部１０１が、Ｓ１０８で編集装置２から受信した、無限ループ発生条件情報テーブル３０１が埋め込まれたオブジェクトコードを、不揮発性メモリ１４から読み出して実行する。無限ループ脱出手段１０２は、オブジェクトコードの実行状態を監視し、命令が実行される度にＳ３０１以下の処理を実行する。
【００５４】
Ｓ３０１：ループ処理の開始時の処理である。無限ループ脱出手段１０２は、無限ループ発生条件情報テーブル３０１に記録されているジャンプ命令が実行されたか否かを判定する。実行された場合は、Ｓ３０２に遷移する。
【００５５】
Ｓ３０２：無限ループ脱出手段１０２は、無限ループ発生条件情報テーブル３０１に記録されているジャンプ命令のネットに処理が移ったなら、ジャンプ命令の起動条件が成立したか否かを判定する。成立した場合、Ｓ３０４に遷移する。成立しなかった場合、Ｓ３０３に遷移する。
【００５６】
Ｓ３０３：ループ処理が正常終了した場合の処理である。無限ループ脱出手段１０２は、現在（Ｓ３０２でジャンプ命令の起動条件が成立しなかったとき）の起動条件信号の状態を無限ループ発生条件情報テーブル３０１に記録する。
図１０に、起動条件信号の状態を記録した無限ループ発生条件情報テーブル３０１の例を示す。「正常終了時の信号状態」として起動条件信号の状態が記録される。
【００５７】
Ｓ３０４：ループ処理を継続する場合の処理である。無限ループ脱出手段１０２は、従来技術（特許文献１参照）を利用してループ処理が無限ループに陥っているか否かを判定する。特許文献１記載の手法により、無限ループ脱出手段１０２は、スキャンタイムがウォッチドッグタイマのタイマ時間をオーバーしたら無限ループと判定し、プログラムカウンタのサンプリングを開始する。無限ループ脱出手段１０２は、各アドレスのサンプリング回数を記録し、各アドレスが含まれるラダーのネット番号とそのサンプリング回数の分布から、無限ループが生じている箇所を特定する。無限ループに陥っている場合、Ｓ３０６に遷移する。陥っていない場合、Ｓ３０５に遷移する。
【００５８】
Ｓ３０５：ループ処理が正常に継続している場合の処理である。無限ループ脱出手段１０２は、現在（Ｓ３０４で無限ループに陥っていないと判定されたとき）の起動条件信号の状態を無限ループ発生条件情報テーブル３０１に記録する。
図１０に、起動条件信号の状態を記録した無限ループ発生条件情報テーブル３０１の例を示す。「ループ中の信号状態」として起動条件信号の状態が記録される。
【００５９】
Ｓ３０６：無限ループに陥った場合の処理である。無限ループ脱出手段１０２は、制御装置１の操作盤６０のディスプレイ上に以下の情報を表示し、無限ループが発生したことをオペレータに通知する。
・Ｓ３０４で検出した無限ループの発生箇所。
・無限ループ発生条件情報テーブル３０１の内容。例えば
−ジャンプ命令の起動条件信号の制御箇所
−起動条件信号の信号状態（正常終了時の信号状態、無限ループ時の信号状態）
【００６０】
Ｓ３０７：無限ループ脱出手段１０２は、脱出処理（後述）を実行して無限ループ状態を強制的に終了させる。
【００６１】
Ｓ３０８：無限ループ脱出手段１０２は、好ましくは機械を非常停止状態とする。これにより安全を確保することができる。
【００６２】
＜無限ループの脱出＞
Ｓ３０７の脱出処理について具体的に説明する。
図１１を用いて、第１の脱出処理について説明する。
無限ループ脱出手段１０２は、無限ループ発生条件情報テーブル３０１を参照し、正常終了時の信号状態と、無限ループ時の信号状態と、を比較する。これによりどの信号が原因で無限ループに陥っているかが判明する（破線囲み部）。
【００６３】
無限ループ脱出手段１０２は、起動条件信号の信号状態を、無限ループの停止条件すなわち正常終了時の信号状態に強制的に書き換える。これによりジャンプ命令の起動条件が不成立となり、無限ループから脱出することが可能となる。
【００６４】
例えば図１０に示すように、無限ループ時の信号状態がＲ０００１．０＝ＯＦＦ，Ｆ００００．５＝ＯＮ，Ｘ００００．０＝ＯＦＦであり、正常終了時の信号状態がＲ０００１．０＝ＯＮ，Ｆ００００．５＝ＯＮ，Ｘ００００．０＝ＯＦＦであるとする。このとき無限ループ脱出手段１０２は、起動条件信号の信号状態を、Ｒ０００１．０＝ＯＮ，Ｆ００００．５＝ＯＮ，Ｘ００００．０＝ＯＦＦに強制的に書き換える。
【００６５】
論理式で表現すれば、無限ループの成立条件は数１である。第１の脱出処理における無限ループ脱出手段１０２は、無限ループの停止条件
【００６６】
【数２】
2019185361.tif 000004
を満たすよう起動条件信号の信号状態を書き換える。
【００６７】
図１２を用いて、第２の脱出処理について説明する。
本例では、ジャンプ命令の内部に閉接点が予め組み込まれているものとする（破線囲み部）。無限ループ脱出手段１０２は、このジャンプ命令内部の閉接点を強制的にＯＮに書き換える。これによりジャンプ命令の起動条件が不成立となり、無限ループから脱出することが可能となる。
【００６８】
論理式で表現すれば、通常の無限ループの成立条件は数１である。第２の脱出処理における無限ループ脱出手段１０２は、無限ループの成立条件を以下のように書き換える。
【００６９】
【数３】
2019185361.tif 000005
【００７０】
以上、本発明の実施の形態について説明したが、本発明は上述した実施の形態の例のみに限定されることなく、適宜の変更を加えることにより様々な態様で実施することができる。
【００７１】
例えば、上述の実施の形態では、無限ループ発生条件情報テーブル３０１は、ジャンプ命令の起動条件信号の制御箇所等を記録し、これらの情報が無限ループ発生時にオペレータに提示される例を示した。しかしながら、本発明はこれに限定されるものでなく、問題解決に必要な他の任意の情報を無限ループ発生条件情報テーブル３０１に記録し、これらの情報を無限ループ発生時にオペレータに提示することとしても良い。又は、ジャンプ命令の起動条件信号の制御箇所や他の情報を無限ループ発生条件情報テーブル３０１に記録せず、これらの情報は無限ループ発生時にオペレータに提示しないこととしても良い。すなわち、図１０に示した要素を除く情報は、無限ループ発生条件情報テーブル３０１に記録するか否かは任意である。
【００７２】
また、本実施の形態におけるジャンプ命令には、ラダープログラムでループ処理を記述する際に用いることができる様々な命令や構文が含まれるものとし、本発明は特定の命令や構文に限定されるものではない。
【００７３】
また、上述の実施の形態では制御装置１、編集装置２をそれぞれ異なる装置として示したが、本発明はこれに限定されるものでなく、両者の機能は１つの装置に実装されても差し支えない。
【符号の説明】
【００７４】
１  制御装置
１１  ＣＰＵ
１２  ＲＯＭ
１３  ＲＡＭ
１４  不揮発性メモリ
１８，１９  インタフェース
１０  バス
１６  軸制御回路
１７  サーボアンプ
５０  サーボモータ
６０  操作盤
２  編集装置
２１  ＣＰＵ
２２  ＲＯＭ
２３  ＲＡＭ
２４  不揮発性メモリ
２８，２９  インタフェース
２０  バス
７０  入出力装置
１０１  ラダープログラム実行部
１０２  無限ループ脱出手段
２０１  無限ループ検出手段
３０１  無限ループ発生条件情報テーブル
３０２  記録テーブル
【図１】
2019185361.tif 000006
【図２】
2019185361.tif 000007
【図３】
2019185361.tif 000008
【図４】
2019185361.tif 000009
【図５】
2019185361.tif 000010
【図６】
2019185361.tif 000011
【図７】
2019185361.tif 000012
【図８】
2019185361.tif 000013
【図９】
2019185361.tif 000014
【図１０】
2019185361.tif 000015
【図１１】
2019185361.tif 000016
【図１２】
2019185361.tif 000017