(57)【要約】【課題】ラダープログラムの可読性を向上させる。【解決手段】ＰＣ（１）の制御部（１０）は、ラダープログラム（５１）のプログラム要素とその導通状態とを表示部（３０）に表示させ、第１のプログラム要素を指定する指示を検出し、第１のプログラム要素が導通状態か非導通状態かを判定し、第１のプログラム要素が導通状態か非導通状態かに応じて原因要素を１つ以上特定し他のプログラム要素と識別可能な状態で表示部（３０）に表示させる。【選択図】図１
2017188115.tif 000002
【特許請求の範囲】
【請求項１】
ラダープログラムの作成を支援するプログラム作成支援装置であって、
複数のプログラム要素を含むラダープログラムを記憶する記憶部と、
前記記憶部から前記ラダープログラムを読み出して実行する処理部と、を備え、
前記処理部は、
前記ラダープログラムに対応するラダー図と、前記ラダープログラムを実行している際の各プログラム要素が導通状態か非導通状態かを前記ラダー図に対応付けて表示部に表示させ、
前記表示部に表示された前記各プログラム要素から第１のプログラム要素を選択するユーザの指示を検出し、
前記第１のプログラム要素が導通状態か非導通状態かを判定し、
前記第１のプログラム要素が導通状態か非導通状態かに応じて、前記第１のプログラム要素の導通状態または非導通状態の原因となる原因要素を１つ以上特定し、
前記ラダー図において、特定した前記原因要素を他のプログラム要素と識別可能な状態で前記表示部に表示させることを特徴とする、プログラム作成支援装置。
【請求項２】
前記処理部は、
前記第１のプログラム要素が非導通状態である場合に、導通状態とすることで前記第１のプログラム要素を導通状態にすることが可能なプログラム要素を次の探索対象のプログラム要素として特定し、当該探索対象のプログラム要素から更に次の探索対象のプログラム要素を特定することを繰り返し、
次の探索対象のプログラム要素が特定できない場合に、直前に特定したプログラム要素を前記第１のプログラム要素が非導通状態である原因となる前記原因要素として特定し、
前記ラダー図において前記原因要素を他のプログラム要素と識別可能な状態で前記表示部に表示させることを特徴とする、請求項１に記載のプログラム作成支援装置。
【請求項３】
前記処理部は、前記原因要素を複数特定した場合、特定した複数の前記原因要素を識別可能な状態で前記表示部に表示させることを特徴とする、請求項２に記載のプログラム作成支援装置。
【請求項４】
前記処理部は、前記第１のプログラム要素が導通状態である場合に、前記第１のプログラム要素を探索対象のプログラム要素として、
前記探索対象のプログラム要素と同一回路内において、非導通状態とすることで前記探索対象のプログラム要素を非導通状態にすることが可能な第２のプログラム要素を特定する第１処理を行い、
前記第１処理により前記第２のプログラム要素が特定できない場合、前記探索対象のプログラム要素に割り付けられた変数と同一の変数が割り付けられている第３のプログラム要素が前記探索対象のプログラム要素の上位に存在するか否かを判定し、
前記第１処理により前記第２のプログラム要素を１つ特定した場合、該第２のプログラム要素に割り付けられた変数と同一の変数が割り付けられている第４のプログラム要素が、前記第２のプログラム要素の上位に存在するか否かを判定し、
前記第３のプログラム要素が存在しない場合、前記探索対象のプログラム要素を、他のプログラム要素と識別可能な状態で表示させ、前記第４のプログラム要素が存在しない場合、前記第２のプログラム要素を、他のプログラム要素と識別可能な状態で表示させ、
前記第３のプログラム要素または前記第４のプログラム要素が１つ存在する場合、前記第３のプログラム要素または前記第４のプログラム要素を次の探索対象のプログラム要素として前記第１処理を再び行い、
前記第２のプログラム要素、前記第３のプログラム要素、または前記第４のプログラム要素のいずれかが複数特定された場合、前記複数のプログラム要素を、前記原因要素として他のプログラム要素と識別可能な状態で表示させることを特徴とする、請求項１〜３のいずれか１項に記載のプログラム作成支援装置。
【請求項５】
前記処理部は、
前記表示部に識別可能に表示させた前記原因要素のうち、１つのプログラム要素を選択するユーザの指示を検出した場合、選択された前記原因要素を次の探索対象として、前記第１処理を再び行うことを特徴とする、請求項４に記載のプログラム作成支援装置。
【請求項６】
プログラマブルロジックコントローラに接続する接続部をさらに備え、
前記処理部は、前記処理部に代えて前記接続部を介して前記プログラマブルロジックコントローラに前記ラダープログラムを実行可能なように設定し、前記プログラマブルロジックコントローラが実行中のラダープログラムにおける前記各プログラム要素の導通状態を取得することを特徴とする、請求項１〜５のいずれか１項に記載のプログラム作成支援装置。
【請求項７】
前記処理部は、
前記各プログラム要素の導通状態を所定の時間間隔で取得し、
取得した前記各プログラム要素の導通状態を前記表示部に表示させることを特徴とする、請求項６に記載のプログラム作成支援装置。
【請求項８】
ラダープログラムの作成を支援するプログラム作成支援装置の制御方法であって、
複数のプログラム要素を含むラダープログラムを記憶する記憶部から前記ラダープログラムを読み出して実行する処理ステップを含み、
前記処理ステップにおいて、
前記ラダープログラムに対応するラダー図と、前記ラダープログラムを実行している際の各プログラム要素が導通状態か非導通状態かを前記ラダー図に対応付けて表示部に表示させるラダー図表示ステップと、
前記表示部に表示された前記各プログラム要素から第１のプログラム要素を選択するユーザの指示を検出する検出ステップと、
前記第１のプログラム要素が導通状態か非導通状態かを判定する判定ステップと、
前記第１のプログラム要素が導通状態か非導通状態かに応じて、前記第１のプログラム要素の導通状態または非導通状態の原因となる原因要素を１つ以上特定するプログラム要素特定ステップと、
前記ラダー図において、前記プログラム要素特定ステップにて特定した前記原因要素を他のプログラム要素と識別可能な状態で前記表示部に表示させるプログラム要素表示ステップと、を実行することを特徴とする、プログラム作成支援装置の制御方法。
【請求項９】
ラダープログラムの作成を支援するプログラム作成支援装置の制御プログラムであって、
複数のプログラム要素を含むラダープログラムを記憶する記憶部から前記ラダープログラムを読み出して実行する処理ステップを含み、
前記処理ステップにおいて、
前記ラダープログラムに対応するラダー図と、前記ラダープログラムを実行している際の各プログラム要素が導通状態か非導通状態かを前記ラダー図に対応付けて表示部に表示させるラダー図表示ステップと、
前記表示部に表示された前記各プログラム要素から第１のプログラム要素を選択するユーザの指示を検出する検出ステップと、
前記第１のプログラム要素が導通状態か非導通状態かを判定する判定ステップと、
前記第１のプログラム要素が導通状態か非導通状態かに応じて、前記第１のプログラム要素の導通状態または非導通状態の原因となる原因要素を１つ以上特定するプログラム要素特定ステップと、
前記ラダー図において、前記プログラム要素特定ステップにて特定した前記原因要素を他のプログラム要素と識別可能な状態で前記表示部に表示させるプログラム要素表示ステップと、を実行することを特徴とする、プログラム作成支援装置の制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ラダープログラムの作成を支援するプログラム作成支援装置等に関する。
【背景技術】
【０００２】
プログラマブルロジックコントローラ（ＰＬＣ）による入力または出力デバイスのシーケンス制御の方法は、一例として、ラダー言語で記述されるラダー図で規定されることがある。ラダー図は、間隔を空けて描かれた、動力を表現する２つの母線（左母線と右母線）を結ぶようにして、接点およびコイル等で表現される論理回路が梯子状に描かれた構成を有している。
【０００３】
従来、上記ラダー図は物理的なリレー回路を論理回路として示すために用いられてきた。一方、近年このラダー図にて規定するシーケンス制御をプログラムデータ（以下、ラダープログラムと称する）として保存および編集するプログラム作成支援装置が開発されている。プログラム作成支援装置は、ラダープログラムに対応するラダー図を表示装置等に表示させる。例えば、下記特許文献１には、ラダー図から、ユーザが指定した検索対象ブロック（接点やコイルを有する回路上のブロック）に含まれる「接点」を開閉するコイルを有する回路ブロックを検索する技術が開示されている。特許文献１に開示された技術では、該検索を繰り返すことで各ブロックの階層関係を特定および表示することで、ラダー図の可視性を向上させる。
使用される。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１６−００４４１４号公報（２０１６年１月１２日公開）
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ところが、特許文献１に記載の技術では、あるプログラム要素の導通状態または非導通状態の大元の原因を知るためには、ユーザはラダー図上のプログラム要素を、上記あるプログラム要素から上位に１つずつ、目視で辿って行く必要があった。例えば、ラダープログラムのデバッグまたは不具合原因の追究等を行う場合、ユーザがラダー図を遡って読んでいく時間と手間がかかり、非効率的であった。
【０００６】
本発明は、前記の問題点に鑑みてなされたものであり、その目的は、ユーザにラダープログラムのデバッグや不具合原因の追究を効率的に行わせることが可能なプログラム作成支援装置等を実現することにある。
【課題を解決するための手段】
【０００７】
前記の課題を解決するために、本発明に係るプログラム作成支援装置は、ラダープログラムの作成を支援するプログラム作成支援装置であって、複数のプログラム要素を含むラダープログラムを記憶する記憶部と、前記記憶部から前記ラダープログラムを読み出して実行する処理部と、を備え、前記処理部は、前記ラダープログラムに対応するラダー図と、前記ラダープログラムを実行している際の各プログラム要素が導通状態か非導通状態かを前記ラダー図に対応付けて表示部に表示させ、前記表示部に表示された前記各プログラム要素から第１のプログラム要素を選択するユーザの指示を検出し、前記第１のプログラム要素が導通状態か非導通状態かを判定し、前記第１のプログラム要素が導通状態か非導通状態かに応じて、前記第１のプログラム要素の導通状態または非導通状態の原因となる原因要素を１つ以上特定し、前記ラダー図において、特定した前記原因要素を他のプログラム要素と識別可能な状態で前記表示部に表示させる構成である。
【０００８】
前記の課題を解決するために、本発明に係るプログラム作成支援装置の制御方法は、ラダープログラムの作成を支援するプログラム作成支援装置の制御方法であって、複数のプログラム要素を含むラダープログラムを記憶する記憶部から前記ラダープログラムを読み出して実行する処理ステップを含み、前記処理ステップにおいて、前記ラダープログラムに対応するラダー図と、前記ラダープログラムを実行している際の各プログラム要素が導通状態か非導通状態かを前記ラダー図に対応付けて表示部に表示させるラダー図表示ステップと、前記表示部に表示された前記各プログラム要素から第１のプログラム要素を選択するユーザの指示を検出する検出ステップと、前記第１のプログラム要素が導通状態か非導通状態かを判定する判定ステップと、前記第１のプログラム要素が導通状態か非導通状態かに応じて、前記第１のプログラム要素の導通状態または非導通状態の原因となる原因要素を１つ以上特定するプログラム要素特定ステップと、前記ラダー図において、前記プログラム要素特定ステップにて特定した前記原因要素を他のプログラム要素と識別可能な状態で前記表示部に表示させるプログラム要素表示ステップと、を実行する方法である。
【０００９】
前記の課題を解決するために、本発明に係る、プログラム作成支援装置の制御プログラムは、ラダープログラムの作成を支援するプログラム作成支援装置の制御プログラムであって、複数のプログラム要素を含むラダープログラムを記憶する記憶部から前記ラダープログラムを読み出して実行する処理ステップを含み、前記処理ステップにおいて、前記ラダープログラムに対応するラダー図と、前記ラダープログラムを実行している際の各プログラム要素が導通状態か非導通状態かを前記ラダー図に対応付けて表示部に表示させるラダー図表示ステップと、前記表示部に表示された前記各プログラム要素から第１のプログラム要素を選択するユーザの指示を検出する検出ステップと、前記第１のプログラム要素が導通状態か非導通状態かを判定する判定ステップと、前記第１のプログラム要素が導通状態か非導通状態かに応じて、前記第１のプログラム要素の導通状態または非導通状態の原因となる原因要素を１つ以上特定するプログラム要素特定ステップと、前記ラダー図において、前記プログラム要素特定ステップにて特定した前記原因要素を他のプログラム要素と識別可能な状態で前記表示部に表示させるプログラム要素表示ステップと、を実行するプログラムである。
【００１０】
前記の構成によると、プログラム作成支援装置は、ユーザが選択した第１のプログラム要素が導通状態である場合、該プログラム要素が導通状態である原因となる原因要素を１つ以上特定する。また、プログラム作成支援装置は、第１のプログラム要素が非導通状態である場合、該プログラム要素が非導通状態である原因となる原因要素を特定する。そして、プログラム作成支援装置は、特定した原因要素をユーザに提示する。
【００１１】
これにより、ユーザは、プログラム作成支援装置を介しあるプログラム要素を選択することで、該プログラム要素が導通状態である、また非導通状態である原因になっているプログラム要素を容易に特定することができる。したがって、ラダープログラムのデバッグや不具合原因の追究を効率的に行うことができる。
【００１２】
前記プログラム作成支援装置において、前記処理部は、前記第１のプログラム要素が非導通状態である場合に、導通状態とすることで前記第１のプログラム要素を導通状態にすることが可能なプログラム要素を次の探索対象のプログラム要素として特定し、当該探索対象のプログラム要素から更に次の探索対象のプログラム要素を特定することを繰り返し、次の探索対象のプログラム要素が特定できない場合に、直前に特定したプログラム要素を前記第１のプログラム要素が非導通状態である原因となる前記原因要素として特定し、前記ラダー図において前記原因要素を他のプログラム要素と識別可能な状態で前記表示部に表示させてもよい。
【００１３】
前記の構成によると、プログラム作成支援装置は、ユーザが選択した第１のプログラム要素から上位の非導通状態のプログラム要素を順に自動的に遡って探索していくことにより、第１のプログラム要素の非導通状態の大元の原因である原因要素を特定し、当該原因要素をユーザに示すことができる。したがって、プログラム作成装置はラダープログラムの特定のプログラム要素が非導通状態である原因を、自動的に特定してユーザに示すことができる。
【００１４】
前記プログラム作成支援装置において、前記処理部は、前記原因要素を複数特定した場合、特定した複数の前記原因要素を識別可能な状態で前記表示部に表示させてもよい。
【００１５】
前記の構成によると、プログラム作成支援装置は、複数の原因要素をユーザに示すことができる。これにより、例えばラダープログラムに対応するラダー図に分岐が存在する場合等に、第１のプログラム要素の非導通状態の原因と考えられる原因要素（原因要素の候補）を複数ユーザに示すことができ、ユーザの原因要素検索の利便性が向上する。
【００１６】
前記プログラム作成支援装置において、前記処理部は、前記第１のプログラム要素が導通状態である場合に、前記第１のプログラム要素を探索対象のプログラム要素として、前記探索対象のプログラム要素と同一回路内において、非導通状態とすることで前記探索対象のプログラム要素を非導通状態にすることが可能な第２のプログラム要素を特定する第１処理を行い、前記第１処理により前記第２のプログラム要素が特定できない場合、前記探索対象のプログラム要素に割り付けられた変数と同一の変数が割り付けられている第３のプログラム要素が前記探索対象のプログラム要素の上位に存在するか否かを判定し、前記第１処理により前記第２のプログラム要素を１つ特定した場合、該第２のプログラム要素に割り付けられた変数と同一の変数が割り付けられている第４のプログラム要素が、前記第２のプログラム要素の上位に存在するか否かを判定し、前記第３のプログラム要素が存在しない場合、前記探索対象のプログラム要素を、他のプログラム要素と識別可能な状態で表示させ、前記第４のプログラム要素が存在しない場合、前記第２のプログラム要素を、他のプログラム要素と識別可能な状態で表示させ、前記第３のプログラム要素または前記第４のプログラム要素が１つ存在する場合、前記第３のプログラム要素または前記第４のプログラム要素を次の探索対象のプログラム要素として前記第１処理を再び行い、前記第２のプログラム要素、前記第３のプログラム要素、または前記第４のプログラム要素のいずれかが複数特定された場合、前記複数のプログラム要素を、前記原因要素として他のプログラム要素と識別可能な状態で表示させてもよい。
【００１７】
前記の構成によると、プログラム作成支援装置は、導通状態のプログラム要素を遡って探索する。そして、プログラム作成支援装置は、１つ以上の原因要素が特定できた場合、該原因要素を他のプログラム要素と識別可能な状態で表示させる。ここで、「１つ以上の原因要素が特定できた場合」とは、例えば、ラダー図が並列または直列構造になっている箇所で原因要素の候補を複数特定した場合、または、遡り検索の結果第１のプログラム要素の最上位のプログラム要素を特定した場合（すなわち、該プログラム要素を導通状態とするためのプログラム要素が上位に無い場合）等がある。
【００１８】
これにより、ユーザはプログラム作成支援装置を介しプログラム要素を選択することで、選択したプログラム要素が導通状態である原因になっている原因要素を容易に特定することができる。したがって、ラダープログラムのデバッグや不具合原因の追究を効率的に行うことができる。
【００１９】
前記プログラム作成支援装置において、前記処理部は、前記表示部に識別可能に表示させた前記原因要素のうち、１つのプログラム要素を選択するユーザの指示を検出した場合、選択された前記原因要素を次の探索対象として、前記第１処理を再び行ってもよい。
【００２０】
前記の構成によると、プログラム作成支援装置は選択された原因要素について、さらに第１処理を試みる。これにより、ユーザは表示された原因要素を順に選択していくことで、当該原因要素の上流の原因要素を遡って知ることができる。
【００２１】
前記プログラム作成支援装置はプログラマブルロジックコントローラに接続する接続部をさらに備え、前記処理部は、前記処理部に代えて前記接続部を介して前記プログラマブルロジックコントローラに前記ラダープログラムを実行可能なように設定し、前記プログラマブルロジックコントローラが実行中のラダープログラムにおける前記各プログラム要素の導通状態を取得してもよい。
【００２２】
前記の構成によると、プログラム作成支援装置はプログラマブルロジックコントローラで実行中のラダープログラムにおける各プログラム要素が導通状態であるか非導通状態であるかを確認することができる。したがってユーザは、プログラマブルロジックコントローラでラダープログラムを実際に実行した場合の分岐箇所や不具合箇所（非導通状態になっているプログラム要素）をリアルタイムで発見し、当該箇所の原因を検索および特定することができる。
【００２３】
前記プログラム作成支援装置において、前記処理部は、前記各プログラム要素の導通状態を所定の時間間隔で取得し、取得した前記各プログラム要素の導通状態を前記表示部に表示させてもよい。
【００２４】
前記の構成によると、プログラム作成支援装置はプログラマブルロジックコントローラで実行中のラダープログラムをリアルタイムでモニタするとともに、該ラダープログラムの各プログラム要素が導通状態であるか非導通状態であるかを、所定の時間間隔で更新することができる。したがってユーザは、プログラマブルロジックコントローラで実行中のラダープログラムの問題箇所（非導通状態になっているプログラム要素）をリアルタイムで発見し、当該問題箇所の原因をリアルタイムで検索および特定することができる。
【発明の効果】
【００２５】
本発明によれば、ユーザにラダープログラムのデバッグや不具合原因の追究を効率的に行わせることが可能になる。
【図面の簡単な説明】
【００２６】
【図１】本発明の実施形態１に係るＰＣおよびＰＬＣの要部構成を示すブロック図である。
【図２】図２の（ａ）は上記ＰＣの表示部に表示される、上記ラダープログラムに対応するラダー図の具体例を示す図である。図２の（ｂ）は、上記ラダー図における、原因接点検索の入力操作および結果に係る表示の具体例を示す図である。
【図３】上記ラダープログラムに含まれるプログラム要素のデータ構成を示す表である。
【図４】上記ＰＣの全体の処理の流れの一例を示すフローチャートである。
【図５】上記ＰＣにて行われる、原因接点検索処理の流れの一例を示すフローチャートである。
【図６】上記ラダープログラムの他の一例に対応する、ラダー図を示す図である。
【図７】本発明の実施形態２に係るＰＣおよびＰＬＣの要部構成を示すブロック図である。
【図８】本発明の実施形態４に係るＰＣの全体の処理の流れの一例を示すフローチャートである。
【図９】図９の（ａ）は実施形態４に係るラダープログラムに対応するラダー図の具体例を示す図である。図９の（ｂ）は、ラダープログラムの他の一例に対応するラダー図を示す。
【発明を実施するための形態】
【００２７】
本発明は、例えば工場等に設置される生産設備を集中管理するＦＡ（factory automation）システムに関する。本発明は、各種生産設備に含まれる入力デバイスまたは出力デバイス（以降、両者を単に「デバイス」と称する）の接続関係と、ＦＡシステムを稼働させた場合の各デバイスおよびデバイスに含まれる構成要素の導通状態と、をユーザに図示する管理システムに係るものである。入力デバイスとは、例えばセンサおよびリミットスイッチ等である。出力デバイスとは、例えばランプやアクチュエータ等である。
【００２８】
〔実施形態１〕
以下、本発明の第１実施形態について、図１〜５を用いて説明する。従来、プログラム作成支援装置において、例えばあるプログラム要素（コイル等）が非導通状態である原因となる接点を検索する場合、ユーザはラダー図上でそのプログラム要素の上位にあるプログラム要素を目視で辿っていく必要があり、原因の特定に手間がかかっていた。そして、ユーザはあるプログラム要素の非導通状態の原因を探るには、ブロックを順に目視で辿っていく必要があった。
【００２９】
以下で説明する本実施形態に係るＰＣ１は、前記の問題点を解決するものであり、ラダープログラムの特定のプログラム要素が非導通状態である原因を、自動的に特定することが可能なものである。
【００３０】
≪要部構成≫
図１は、本実施形態に係る管理システム１００に含まれる装置の要部構成を示すブロック図である。管理システム１００は、デバイス３と、デバイス３を集中管理するプログラマブルロジックコントローラ（ＰＬＣ）２と、デバイス３の接続関係と稼働状態をモニタするＰＣ（プログラム作成支援装置）１とを含む。ＰＬＣ２に接続されるデバイス３の台数は特に限定されない。ＰＬＣ２とデバイス３とは、通信カプラやスレーブ装置を介して間接的に接続されてもよい。
【００３１】
（ＰＬＣ２の要部構成）
ＰＬＣ２はデバイス３のシーケンス制御を行う装置である。ＰＬＣ２はプログラムモードと運転モードとのいずれかのモードで稼働する。プログラムモードは、ＰＬＣ２がデバイス３を制御しないモードである。ＰＬＣ２は、例えばＰＣ１とデータを送受信する場合にプログラムモードで稼働する。一方、運転モードは、デバイス３を制御するモードである。ＰＬＣ２は運転モードにおいて、デバイス３を制御するためのラダープログラムを実行する。ラダープログラムとはラダー言語で記述されたプログラムである。ラダープログラムはＰＣ１で作成され、ＰＬＣ２にダウンロードされる。
【００３２】
ＰＬＣ２は、より詳しくは、通信ユニット７０と、ＣＰＵユニット８０と、記憶ユニット９０とを含む。通信ユニット７０は、ＰＣ１と通信するためのユニットである。記憶ユニット９０は、ＰＬＣ２の各種データを格納するものである。記憶ユニット９０は例えばラダープログラム５１を格納する。
【００３３】
ＣＰＵユニット８０は、ＰＬＣ２を統括的に制御する。ＣＰＵユニット８０はＰＬＣ２のモードの切替えを行う。また、ＣＰＵユニット８０はプログラムモードと運転モードとで異なる処理を行う。
【００３４】
例えば、プログラムモードでは、ＣＰＵユニット８０はＰＣ１からラダープログラム５１をダウンロードする。ＣＰＵユニット８０はダウンロードしたラダープログラム５１を記憶ユニット９０に格納する。
【００３５】
一方、運転モードでは、ＣＰＵユニット８０は記憶ユニット９０からラダープログラム５１を読み出して実行することにより、デバイス３のシーケンス制御を行う。
【００３６】
（ＰＣ１の要部構成）
ＰＣ１は、デバイス３の制御方法を記述したラダープログラム５１を、ユーザの入力操作に応じて作成するプログラム作成装置である。ＰＣ１は、ラダープログラム５１の作成を支援するプログラム作成支援装置でもある。ＰＣ１は、作成した（または作成中の）ラダープログラム５１をＰＣ１内で仮想的に実行することで、ラダープログラム５１を実行したときのプログラム要素が導通状態か非導通状態かを特定する。ここで、プログラム要素とは、接点、コイル等、ラダープログラムをラダー図で表した場合の各種部品に対応する。なお、所定の処理を一まとめとしたファンクションブロックのインスタンスも、ラダープログラム上の一プログラム要素としてもよい。
【００３７】
ＰＣ１はラダープログラム５１に対応するラダー図を表示部（後述）に表示するとともに、該ラダー図に示される各プログラム要素の導通状態を表示部（後述）に表示する。これにより、ＰＣ１はラダープログラム５１およびプログラム要素の導通状態を視認性良くユーザに提示することができる。したがって、ＰＣ１はユーザによるラダープログラム５１の作成を支援することができる。
【００３８】
ＰＣ１は、制御部（処理部）１０、入力部２０、表示部３０、通信部４０、および記憶部５０を備える。入力部２０はユーザの入力操作を受付ける。例えば、入力部２０はＰＣ１に内蔵または接続されたマウスやキーボード等の入力デバイスである。入力部２０は受け付けた入力操作を示す入力信号を、制御部１０の入力制御部１１（後述）に送信する。
【００３９】
表示部３０は、ＰＣ１に内蔵または接続された表示装置である。表示部３０は、制御部１０の表示制御部１５（後述）の制御に従って、ラダープログラム５１に対応するラダー図を表示する。通信部４０は、ＰＣ１がＰＬＣ２と通信するための通信デバイスである。
【００４０】
記憶部５０は、ＰＣ１が動作するための各種データ（ＰＣ１自体の制御プログラム等）と、ＰＣ１において作成された（または作成中の）ラダープログラム５１とを格納する。ラダープログラム５１は、ユーザの所定の指示に応じて制御部１０により読み出され、通信部４０を介してＰＬＣ２に送信される。
【００４１】
制御部１０は、ＰＣ１を統括的に制御するＣＰＵ（Central Processing Unit）である。制御部１０は、記憶部５０に格納されているＰＣ１の制御プログラムをＲＡＭ（random access memory、図示せず）等に読み出して実行することにより、以下で説明する入力制御部１１、プログラム作成部１２、探索部１４、および表示制御部１５の機能ブロックを実現する。
【００４２】
入力制御部１１は、入力部２０から入力信号を受信し、当該信号からユーザがＰＣ１に対し行った指示を検出する。入力制御部１１は、ラダープログラム５１の作成に係る指示を検出した場合は、当該指示内容を示す情報をプログラム作成部１２に送信する。また、入力制御部１１は、ラダープログラム５１の表示（ラダー図の表示）に係る指示を検出した場合は、当該指示内容を示す情報を表示制御部１５に送信する。また入力制御部１１は、ラダー図に含まれるプログラム要素を選択する指示を検出した場合は、当該指示内容を示す情報を探索部１４に送信する。
【００４３】
プログラム作成部１２は、入力制御部１１から受信した指示内容に従ってラダープログラム５１を作成する。プログラム作成部１２は作成したラダープログラム５１を記憶部５０に格納する。
【００４４】
探索部１４は、入力制御部１１からプログラム要素を選択する指示を受信すると、ユーザにより選択されたプログラム要素（以下、第１のプログラム要素と称する）が導通状態か非導通状態かを判定する。プログラム要素には、０と１、trueとfalse、またはＯＮとＯＦＦの２値いずれか示す変数が割り付けられている。「導通状態」とは、プログラム要素に割り付けられた変数の値が１、true、またはＯＮの状態を意味する。一方、「非導通状態」とは、上記変数の値が０、false、またはＯＦＦの状態を意味する。探索部１４は、ラダープログラム５１から各プログラム要素の変数の値を読み込んで確認することで、各プログラム要素が導通状態か非導通状態かを特定する。第１のプログラム要素が非導通状態であった場合、探索部１４は、ラダープログラム５１において第１のプログラム要素の上位に配置された非導通状態の接点を遡って探索する。該探索を繰り返すことで、探索部１４は第１のプログラム要素が非導通状態となっている原因の接点（原因接点、原因要素の一種）を特定することができる。探索部１４は原因接点を特定すると、当該原因接点を示す情報を表示制御部１５に送信する。探索部１４は、より詳しくは、接点特定部１４１と要素特定部１４２とを含む。
【００４５】
なお、本実施形態および以降の実施形態において「上位」とは、ラダープログラム５１を実行した際に、先に処理が実行されることを示す。
【００４６】
接点特定部１４１は、第１のプログラム要素が非導通状態である場合に、第１のプログラム要素の上位の接点であって、その接点を導通状態とすることで、第１のプログラム要素が導通状態になるような接点を特定する。また、接点特定部１４１は、後述する要素特定部１４２が次の探索の開始点（探索対象）として特定したプログラム要素の上位の接点であって、その接点を導通状態とすることで、第１のプログラム要素が導通状態になるような接点を特定する。接点特定部１４１は特定した接点を要素特定部１４２に伝える。
【００４７】
接点特定部１４１の接点の特定方法は特に限定しない。例えば、接点特定部１４１はあるプログラム要素の上流で当該プログラム要素と接続線が繋がっている接点であって、かつ非導通状態である接点を特定する。また、接点特定部１４１はラダープログラム５１を手続き型言語のプログラムデータとして見たときの各プログラム要素の従属関係から、上記あるプログラム要素の上位（接続線の上流）にある接点（に対応する変数）を特定し、それら特定した接点の中でさらに非導通状態の接点を特定してもよい。
【００４８】
要素特定部１４２は、接点特定部１４１が特定した接点の上流にある、当該接点を動作させる（導通状態にする）プログラム要素を次の探索対象のプログラム要素として特定する。換言すると、要素特定部１４２は、導通状態とすることで、接点特定部１４１が特定した接点を導通状態にすることが可能なプログラム要素（コイルなど）を次の探索対象のプログラム要素として特定する。要素特定部１４２は例えば、接点特定部１４１が特定した接点がリレー接点であれば、当該リレー接点に対応する（すなわち、当該リレー接点と同じ変数が割振られている）コイルを次の探索対象のプログラム要素として特定する。要素特定部１４２は特定したプログラム要素を接点特定部１４１に伝える。
【００４９】
探索部１４はこのように、接点特定部１４１における接点の特定と、要素特定部１４２におけるプログラム要素の特定とを繰り返すことにより、ラダー図において第１のプログラム要素から上位の非導通状態の接点とプログラム要素とを辿っていく。そして、探索部１４は接点特定部１４１または要素特定部１４２が非導通状態の接点またはプログラム要素を特定できなくなった場合に、直前に特定した接点を原因接点として特定する。換言すると、探索部１４は、接点特定部１４１が最後に特定できた非導通状態の接点を、原因接点として特定する。
【００５０】
表示制御部１５は、ラダープログラム５１に対応するラダー図と、各プログラム要素の導通状態とを表示部３０に表示させるものである。表示制御部１５は入力制御部１１からの指示内容に応じて、記憶部５０からラダープログラム５１を読み出し、当該ラダープログラム５１に対応するラダー図を表示部３０に表示させる。表示制御部１５はこのとき、ラダープログラム５１の論理形式を確認し、当該ラダープログラム５１を実行した際の各プログラム要素が導通状態であるか非導通状態であるかを表示部３０に識別可能に表示させる。導通状態の表示方法は特に限定しないが、例えば表示制御部１５は、導通状態のプログラム要素、および導通状態のプログラム要素を結ぶ接続線に対し太線やマーキングなどの強調表示を行うことで、各プログラム要素および接続線が導通状態か非導通状態かをユーザに示す。
【００５１】
表示制御部１５はさらに、探索部１４において原因接点を特定した場合、当該原因接点をラダー図上の他の接点と識別可能な状態で表示部３０に表示させる。原因接点の表示方法も特に限定しないが、例えば原因接点を枠囲みや網掛けで強調表示させたり、原因接点のみ他の接点と異なる色で表示させたりすればよい。以下、図２〜３を用いて表示制御部１５の行う表示制御について具体的に説明する。
【００５２】
（表示部３０の画面例）
図２の（ａ）は、ラダープログラム５１に対応するラダー図の具体例を示す図である。表示部３０には、ＰＬＣ２にて実行中のラダープログラム５１の一部または全部のラダー図が表示される。図２の（ａ）の例では、ラダープログラム５１のうち１行目〜５行目の接続線までが表示されており、各行にはａ接点（常開接点、以下、単に接点と称する）５００、５０２、５０４、５０６、および５０８、ならびにコイル５０１、５０３、５０５、５０７、および５０９がプログラム要素として配置（記述）されている。なお、各接点およびコイルに付したアルファベットは、そのプログラム要素に割り付けられた変数の変数名を示す。変数の割り付けについては、後で詳述する。
【００５３】
また、表示部３０には各プログラム要素の導通および非導通が識別可能に表示される。図２の（ａ）の例ではプログラム要素は全て非導通状態である。また、接続線については、左母線から、左母線の直近のプログラム要素までは常に導通状態となる。そして、該直近のプログラム要素が導通状態の場合は、該プログラム要素から次のプログラム要素までの接続線は導通状態となる。一方、直近のプログラム要素が非導通状態の場合は、該プログラム要素から次のプログラム要素までの接続線は非導通状態となる。図２の（ａ）の例では、導通状態のプログラム要素を塗りつぶして表示している。また図２の（ａ）の例では、導通状態のプログラム要素を結ぶ接続線を太線で表示している。以降のラダー図を示した図面についても同様に導通状態および非導通状態を示すこととする。
【００５４】
図３は、図２の（ａ）および（ｂ）に示されたラダー図のラダープログラム５１における、各プログラム要素のデータ構成を示す表である。なお、プログラム要素のデータ構成は図３に示す表に限定されない。図３に示すようなプログラム要素を特定する情報が、ラダープログラム５１内に記述される。
【００５５】
図３に示す通り、プログラム要素は、プログラム要素の種類（接点、コイル等）と、配置位置と、変数等の属性を備えている。ここで、「変数」とは、所定の型(接点やコイルであればBoolean型など)を持つ変数名であって、該変数は予め所定のアドレスに割り付けられている。図３によると、例えば、ラダー図１行目２個目のプログラム要素であるコイル５０１と、ラダー図２行目１個目のプログラム要素である接点５０２とは、異なる要素の種類（コイルと接点）であって同じ変数名（Ａ）が割り当てられている。これにより、コイル５０１がＯＮすると接点５０２が導通状態になる（接点５０２の変数Ａの値が１、true、またはＯＮになる）。コイル５０１が動作した場合、接点５０２は導通状態となる。
【００５６】
図２の（ｂ）は、図２の（ａ）に示したラダー図において、原因接点検索の入力操作を行った場合の、当該入力操作および結果に係る表示の具体例を示す図である。ユーザが図２の（ｂ）に示すように、コイル５０９を選択する入力操作を行うと、入力部２０は当該入力操作を受付け、入力制御部１１に信号を送る。入力制御部１１は当該信号から、選択されたプログラム要素（コイル５０９）を特定し探索部１４に伝える。探索部１４は接点特定部１４１および要素特定部１４２の処理を繰り返すことにより、選択されたプログラム要素から非導通状態のプログラム要素を辿っていく。図２の（ｂ）の場合、探索部１４はコイル５０９から順に、接点５０８、コイル５０７、接点５０６、コイル５０５、接点５０４、コイル５０３、接点５０２、コイル５０１、接点５００の順でプログラム要素を辿る。そして、探索部１４は要素特定部１４２が接点５００から次の非導通状態のプログラム要素を特定できないため、接点特定部１４１が直前に特定した接点５００を原因接点として特定し、表示制御部１５に伝える。表示制御部１５は原因接点である接点５００を、図２の（ｂ）に示すように、他の接点およびコイル等のプログラム要素と識別可能に表示する。なお、図２の（ｂ）に示すように、表示制御部１５はユーザが検索対象として指定したプログラム要素（コイル５０９）も、他のプログラム要素と識別可能に表示部３０に表示させてもよい。
【００５７】
（処理の流れ）
最後に、ＰＣ１が行う処理の流れについて、図４〜５を用いて説明する。図４は、
ＰＣ１全体の処理の流れの一例を示すフローチャートである。
【００５８】
図４に示すように、ＰＣ１の制御部１０の入力制御部１１においてラダープログラム５１を表示する旨の指示を検出すると（Ｓ１）、制御部１０は記憶部５０からラダープログラム５１を読み出し（Ｓ２）、以下に続く処理を実行する（処理ステップ）。
【００５９】
表示制御部１５は当該プログラムに対応するラダー図と、ラダープログラム５１に含まれるプログラム要素の導通状態とを表示部３０に表示させる（Ｓ３、ラダー図表示ステップ）。ここで、ユーザがラダー図上でプログラム要素を選択すると、入力制御部１１は、ユーザのプログラム要素を選択する指示を検出し（Ｓ４、検出ステップ）、探索部１４に該指示を伝える。なお、入力制御部１１は、上記選択する指示を検出した後に、ユーザが選択したプログラム要素を探索対象として検索する旨の指示（検索指示）を検出した場合に（Ｓ５）、探索部１４に該指示を伝えてもよい。探索部１４は入力制御部１１から該指示を受信すると、上記選択されたプログラム要素、すなわち第１のプログラム要素が導通状態か非導通状態かを判定する（Ｓ６、判定ステップ）。第１のプログラム要素が非導通状態のプログラム要素である場合（Ｓ６でＮＯ）、接点特定部１４１および要素特定部１４２の処理を繰り返すことにより、原因接点検索処理を行う（Ｓ７、探索ステップ）。原因接点が特定されると、探索部１４は原因接点を示す情報を表示制御部１５に送信する。表示制御部１５は原因接点を、他の接点（およびプログラム要素）と識別可能な状態で、表示部３０に表示させる（Ｓ８、プログラム要素表示ステップ）。なお、ユーザが選択した第１のプログラム要素が導通状態のプログラム要素であった場合（Ｓ６でＹＥＳ）、探索部１４はＳ７〜Ｓ８に示す処理を行わなくてもよい。もしくは、探索部１４は、第１のプログラム要素のみを他の接点と識別可能な状態で表示部３０に表示させてもよい。
【００６０】
次に、図４のＳ７における原因接点検索処理の詳細について、図５を用いて説明する。図５は、原因接点検索処理の流れを示すフローチャートである。探索部１４は入力制御部１１からユーザが指定したプログラム要素（第１のプログラム要素）を示す情報を受信すると、まず第１のプログラム要素について、要素の種類が接点であるか、接点以外のプログラム要素であるかを特定する（Ｓ５０）。
【００６１】
プログラム要素が接点である場合（Ｓ５０でＹＥＳ）、探索部１４は接点特定部１４１において、第１のプログラム要素の上位の接点であって、その接点を導通状態とすることで、第１のプログラム要素が導通状態になるような接点を、次の探索の開始点として特定する（Ｓ５２）。一方、第１のプログラム要素が接点以外である場合（Ｓ５０でＮＯ）、探索部１４は要素特定部１４２において、接点の上位にある、当該接点を動作させる（導通状態にする）プログラム要素を次の探索の開始点として特定する（Ｓ５４）。探索部１４は、接点特定部１４１が接点を特定できなくなる、または要素特定部１４２が接点からプログラム要素を特定できなくなくなるまで（Ｓ５２またはＳ５４の特定処理が失敗するまで）、Ｓ５０〜Ｓ５４の処理を繰り返す（Ｓ５６でＮＯ）。接点特定部１４１または要素特定部１４２が特定に失敗すると（Ｓ５６でＹＥＳ）、探索部１４は接点特定部１４１が直前に特定した接点を原因接点として特定する（Ｓ５８、プログラム要素特定ステップ）。
【００６２】
このように、図４〜５に示す処理によると、ＰＣ１は、ユーザが選択した第１のプログラム要素から非導通状態の接点を自動的に遡って探索し、第１のプログラム要素の非導通状態の大元の原因である原因接点まで特定し、当該原因接点をユーザに示すことができる。したがって、ラダープログラム５１の特定のプログラム要素が非導通状態である原因を、自動的に特定してユーザに示すことができるという効果を奏する。
【００６３】
なお、表示制御部１５は、ユーザが指定したプログラム要素と原因接点とが表示部３０の１画面上に収まるように、上記指定したプログラム要素と原因接点との間に存在するプログラムのラダー図を省略または圧縮（縮小）して表示してもよい。
【００６４】
例えば、表示制御部１５はユーザが指定したプログラム要素が配置されている接続線およびその前後１行の接続線を表示するとともに、原因接点についても原因接点が配置されている接続線およびその前後１行の接続線を表示し、その間の接続線を、ユーザが指定したプログラム要素と原因接点とが１画面に収まるように省略してもよい。また例えば、表示制御部１５は間の接続線とそこに配置されるプログラム要素を、ユーザが指定したプログラム要素と原因接点とが１画面に収まるように縮小表示してもよい。
【００６５】
これにより、ユーザは非導通の原因を知りたいプログラム要素と、非導通の原因である原因接点とを、表示部３０の画面をスクロールまたは切替えること無しに確認することができるため、原因接点の検索における利便性が向上する。
【００６６】
本実施形態では、探索部１４が原因接点を特定することとした。しかしながら、本発明に係るＰＣ１の探索部１４は、接点特定部１４１または要素特定部１４２が次の探索対象のプログラム要素を特定できなくなった場合に、直前に特定したプログラム要素を、接点に限らず、第１のプログラム要素の非導通状態の原因となる原因要素として特定してもよい。そして、表示制御部１５は、当該原因要素を他のプログラム要素と識別可能な状態で表示部３０に表示させてもよい。
【００６７】
もしくは、探索部１４は、接点特定部１４１または要素特定部１４２が次の探索対象のプログラム要素を特定できなくなった場合に、予め規定しておいた所定の形式のプログラム要素（例えばコイル）のうち、接点特定部１４１または要素特定部１４２が直前に（最後に）特定したプログラム要素を、原因要素として特定してもよい。なお、接点はプログラム要素の一種であるため、原因要素の特定および表示に係る処理は、原因接点の特定および表示に係る処理と同様である。
【００６８】
〔実施形態２〕
本発明に係るＰＣ１は、探索部１４において原因接点を複数特定した場合、特定した複数の接点をそれぞれ識別可能な状態で、表示部３０に表示させてもよい。以下、本発明の第２の実施形態について説明する。
【００６９】
図６は、実施形態１に示したラダープログラム５１の他の一例に対応する、ラダー図を示している。なお、図６に示すラダー図の読み方は、図２に示すラダー図と同様である。図６に示すラダー図では、接点６０２ａと６０２ｂとが並列構造になっている。また、図示の通り、接点６０２ａには変数Ｂ１が、６０２ｂには変数Ｂ２が割り付けられている。したがって、コイル６０１ａが非導通状態から導通状態になった場合、接点６０２ａが導通状態となる。また、コイル６０１ｂが非導通状態から導通状態になった場合、接点６０２ｂが導通状態となる。
【００７０】
そして、コイル６０３は接点６０２ａおよび６０２ｂの少なくとも一方が導通状態となった場合に導通状態となる。このように、ラダープログラム５１が、対応するラダー図において分岐点が存在するようなプログラムである場合、探索部１４は、原因接点検索処理の過程で、複数の原因接点（図６の場合は接点６０２ａおよび６０２ｂ）を特定することとなる。この場合、探索部１４は、特定した複数の接点をそれぞれ識別可能な状態で、表示部３０に表示させる。例えば、図６に示すように、それぞれの接点（接点６０２ａおよび６０２ｂ）を枠囲みで表示すればよい。
【００７１】
これにより、ＰＣ１はラダープログラム５１に対応するラダー図に分岐が存在する場合等に、第１のプログラム要素の非導通状態の原因と考えられる原因接点（原因接点の候補）を複数ユーザに示すことができ、ユーザにとっての原因接点検索の利便性が向上する。
【００７２】
なお、探索部１４は原因接点検索処理の途中で、接点特定部１４１が複数の接点を特定した場合（すなわち、原因接点検索処理の途中で検索パターンの分岐が生じた場合）、当該複数の接点を原因接点の代わりに表示制御部１５に伝え、表示制御部１５はこの複数の接点を表示部３０に表示させてもよい。そして、入力部２０を介し上記複数の接点いずれかをユーザに選択させることで、当該選択接点を第１のプログラム要素（原因接点検索処理の開始のプログラム要素）として、再び原因接点検索処理を開始してもよい。
【００７３】
なお、表示制御部１５は、上述のように探索部１４が原因接点を複数特定した場合、それぞれを図６のようにラダー図上で識別可能に表示するのではなく、原因接点を別途リスト等の形式で表示させてもよい。
【００７４】
〔実施形態３〕
本発明に係るＰＣ１は、ＰＬＣ２にラダープログラム５１を実行可能なように設定し、ＰＬＣ２が実行中のラダープログラム５１におけるプログラム要素の導通状態を、通信部（接続部）４０を介し取得してもよい。以下、本発明の第３の実施形態について説明する。
【００７５】
図７は、本実施形態に係るＰＣ１およびＰＬＣ２の要部構成を示している。本実施形態に係るＰＣ１は、制御部１０においてモニタ値取得部１３の機能ブロックを実現する点で、上記各実施形態に係るＰＣ１と異なる。
【００７６】
モニタ値取得部１３は、入力制御部１１から受信した指示内容に従って、ＰＬＣ２からモニタ値を取得する。モニタ値は、ラダープログラム５１に含まれる各プログラム要素に割り付けられた変数の変数値を少なくとも含む。モニタ値取得部１３は取得したモニタ値に含まれる上記変数値から、ラダープログラム５１に含まれる各プログラム要素の導通状態を特定し、各プログラム要素の導通状態を示す情報を表示制御部１５に送信する。なお、モニタ値取得部１３はモニタ値とともに、ＰＬＣ２において実行中のラダープログラム５１を指定する情報を受信し、モニタ値と当該情報とを表示制御部１５に送信してもよい。例えばＰＬＣ２にラダープログラム５１を複数ダウンロードさせていた場合（すなわち、ＰＬＣ２によるデバイス３の制御が複数パターン存在する場合）は、ラダープログラム５１を指定する情報を受信することで、いずれのラダープログラム５１をＰＣ１にて表示すべきか特定することができる。
【００７７】
また、本実施形態に係るＰＬＣ２のＣＰＵユニット８０は運転モードにおいて、制御対象のデバイス３の各種部品の導通状態を示す情報をモニタ値として取得し、通信ユニット７０を介しＰＣ１に送信する。
【００７８】
そして、表示制御部１５は入力制御部１１の指示内容に従って、ＰＬＣ２にて実行されているラダープログラム５１と同じラダープログラム５１を記憶部５０から読み出し、当該プログラムに対応するラダー図と、モニタ値取得部１３から取得した各物理部品の導通状態をプログラム要素の導通状態に反映させたうえで、各プログラム要素（実行中のプログラム要素）の導通状態を表示部３０に表示させる。
【００７９】
当該構成によると、ＰＣ１はラダープログラム５１をＰＬＣ２で実際に実行した場合のラダープログラム５１の問題箇所（非導通状態になっているプログラム要素）を発見し、当該問題箇所の原因を検索および特定することができる。
【００８０】
なお、モニタ値取得部１３は、ＰＬＣ２にて実行中のラダープログラム５１の各プログラム要素の導通状態を所定の時間間隔で取得し、表示制御部１５はモニタ値取得部１３から受信する情報に基づいて、実行中のラダープログラム５１のプログラム要素の導通状態を、随時反映させてもよい。
【００８１】
これにより、ＰＣ１はＰＬＣ２で実行中のラダープログラム５１の各物理部品の導通状態をプログラム要素の導通状態にリアルタイムで反映させることができる。したがってユーザは、ＰＬＣ２で実行中のラダープログラム５１の問題箇所（非導通状態になっているプログラム要素）をリアルタイムで発見し、当該問題箇所の原因接点をリアルタイムで検索および特定することができる。
【００８２】
〔実施形態４〕
本発明に係るＰＣ１は、第１のプログラム要素の導通状態の原因となる原因要素を特定してもよい。より詳しくは、本発明に係るＰＣ１は、第１のプログラム要素を探索対象のプログラム要素とし、探索対象のプログラム要素と同一回路内において、非導通状態とすることで前記探索対象のプログラム要素を非導通状態にすることが可能な第２のプログラム要素を特定する第１処理を行ってもよい。
【００８３】
そして、ＰＣ１は、第１処理により第２のプログラム要素が特定できない場合、探索対象のプログラム要素に割り付けられた変数と同一の変数が割り付けられている第３のプログラム要素が前記探索対象のプログラム要素の上位に存在するか否かを判定してもよい。
【００８４】
そして、第３のプログラム要素が存在しないと判定した場合は探索対象のプログラム要素を原因要素として他のプログラム要素と識別可能な状態で表示させ、第３のプログラム要素が１つ存在すると判定した場合は第３のプログラム要素を次の探索対象のプログラム要素として第１処理を再び行ってもよい。
【００８５】
また、ＰＣ１は、第１処理により第２のプログラム要素を１つ特定した場合、さらに、第２のプログラム要素に割り付けられた変数と同一の変数が割り付けられている第４のプログラム要素が第２のプログラム要素の上位に存在するか否かを判定してもよい。そして、第４のプログラム要素が存在しないと判定した場合は第２のプログラム要素を原因要素として他のプログラム要素と識別可能な状態で表示させ、第４のプログラム要素が１つ存在すると判定した場合は第４のプログラム要素を次の探索対象のプログラム要素として第１処理を再び行ってもよい。
【００８６】
また、ＰＣ１は、前記第２のプログラム要素、前記第３のプログラム要素、または前記第４のプログラム要素のいずれかが複数ある場合、前記複数のプログラム要素を原因要素として、他のプログラム要素と識別可能な状態で表示させてもよい。以下、図８〜９を用いて、本実施形態について説明する。
【００８７】
図８は、本実施形態に係るＰＣ１の全体の処理の流れの一例を示すフローチャートである。なお、図８の各処理のうち、Ｓ１００〜Ｓ１１２の処理以外の処理は、図４に記載の処理と同じ処理である。本実施形態に係る探索部１４は、入力制御部１１でＳ４またはＳ５において検出された指示を受信すると、ユーザにより選択されたプログラム要素、すなわち第１のプログラム要素が導通状態か非導通状態かを判定する（Ｓ６）。第１のプログラム要素が導通状態である場合（Ｓ６でＹＥＳ）、探索部１４はまず、第１のプログラム要素を探索対象のプログラム要素として、該プログラム要素と同一回路内において、非導通状態とすることで前記第１のプログラム要素を非導通状態にすることが可能な第２のプログラム要素を特定する（Ｓ１００、第１処理）。ここで、回路とは、ラダー図上において右母線に接続されたあるコイルを出発して左母線までたどることができるパスの集合を示す。
【００８８】
Ｓ１００において第２のプログラム要素を特定できなかった場合、（Ｓ１００で「特定できない」）探索部１４は、探索対象のプログラム要素に割り付けられた変数と同一の変数が割り付けられているプログラム要素（第３のプログラム要素）が探索対象のプログラム要素の上位に存在するか否か判定する（Ｓ１０２）。
【００８９】
第３のプログラム要素が１つ存在する場合（Ｓ１０２で「１つ存在」）、探索部１４は、第３のプログラム要素を次の探索対象のプログラム要素として第１処理を再び行う（Ｓ１００）。一方、第３のプログラム要素が複数存在する場合（Ｓ１０２で「複数存在」）、探索部１４は、該複数の第３のプログラム要素を表示対象として（Ｓ１０４）、表示制御部１５に伝える。表示制御部１５は該複数のプログラム要素を、ラダー図上の他のプログラム要素と識別可能な状態で表示部３０に表示させる（Ｓ１０６）。また、第３のプログラム要素が存在しない場合（Ｓ１０２で「存在しない」）、探索部１４は、Ｓ１００における探索対象のプログラム要素を表示対象とする（Ｓ１０８）。そして、表示制御部１５はＳ１０６の処理を行う。
【００９０】
Ｓ１００において第２のプログラム要素を１つ特定した場合（Ｓ１００で「１つ特定」）、探索部１４は、第２のプログラム要素に割り付けられた変数と同一の変数が割り付けられているプログラム要素（第４のプログラム要素）が第２のプログラム要素の上位に存在するか否かを判定する（Ｓ１１０）。
【００９１】
第４のプログラム要素が１つ存在する場合（Ｓ１１０で「１つ存在」）、探索部１４は、第４のプログラム要素を次の探索対象のプログラム要素として第１処理を再び行う（Ｓ１００）。一方、第４のプログラム要素が複数存在する場合（Ｓ１１０で「複数存在」）、探索部１４は、該複数の第４のプログラム要素を表示対象の原因要素として（Ｓ１０４）、表示制御部１５に伝える。表示制御部１５は該複数のプログラム要素を、ラダー図上の他のプログラム要素と識別可能な状態で表示部３０に表示させる（Ｓ１０６）。また、第４のプログラム要素が存在しない場合（Ｓ１１０で「存在しない」）、探索部１４は、Ｓ１００において特定した第２のプログラム要素を表示対象の原因要素とする（Ｓ１１２）。そして、表示制御部１５はＳ１０６の処理を行う。
【００９２】
Ｓ１００において第２のプログラム要素を複数特定した場合（Ｓ１００で「複数特定」）、探索部１４は、探索部１４は、該複数の第２のプログラム要素を表示対象の原因要素として（Ｓ１０４）、表示制御部１５に伝える。表示制御部１５は該複数のプログラム要素を、ラダー図上の他のプログラム要素と識別可能な状態で表示部３０に表示させる（Ｓ１０６）。
【００９３】
なお、各プログラム要素の表示方法は特に限定しないが、例えば表示対象のプログラム要素を枠囲みや網掛けで強調表示させたり、表示対象のプログラム要素のみ他のプログラム要素と異なる色で表示させたりすればよい。
【００９４】
上記の処理によれば、ＰＣ１は、導通状態のプログラム要素を遡って探索し、１つ以上の原因要素が特定できた場合、該原因要素を他のプログラム要素と識別可能な状態で表示させる。ここで、「１つ以上の原因要素が特定できた場合」とは、例えば、ラダー図が並列または直列構造になっている箇所で原因要素の候補を複数特定した場合、または、遡り検索の結果第１のプログラム要素の最上位のプログラム要素を特定した場合（すなわち、該プログラム要素を導通状態とするためのプログラム要素が上位に無い場合）等がある。
【００９５】
これにより、ユーザはＰＣ１を介しプログラム要素を選択することで、選択したプログラム要素が導通状態である原因になっている原因要素を容易に特定することができる。したがって、ラダープログラム５１のデバッグや不具合原因の追究を効率的に行うことができる。
【００９６】
また、表示制御部１５は、複数のプログラム要素を上述のように他のプログラム要素と識別可能に表示させた場合、該複数のプログラム要素をユーザが入力部２０を介して選択可能な状態で表示部３０に表示させることが望ましい。そして上記複数のプログラム要素からいずれか１つのプログラム要素を選択するユーザの指示を検出した場合、選択されたプログラム要素を次の探索対象としてＳ１００〜Ｓ１１２の処理を再度行ってもよい。これにより、ユーザはプログラム要素を順に選択していくことで、ラダー図のプログラム要素を上流に遡って知ることができる。例えば、ラダー図に分岐化箇所がある場合、ユーザは該分岐箇所で分岐先を選択してプログラム要素を遡って検索することができる。
【００９７】
なお、第１のプログラム要素が非導通状態である場合（Ｓ６でＮＯ）、探索部１４は実施形態１〜３にて説明したように原因接点の検索および表示を行ってもよい（Ｓ７〜Ｓ８）。
【００９８】
図９の（ａ）は、本実施形態に係るラダープログラム５１に対応するラダー図の具体例を示す図である。図９の（ａ）および（ｂ）では、全てのプログラム要素が導通状態である。この状態で、図９の（ａ）に示すように、ユーザによってコイル７０７を選択する入力操作が行われると、入力部２０は当該入力操作を受付け、入力制御部１１に信号を送る。入力制御部１１は当該信号から、選択されたプログラム要素（コイル７０７）を特定し探索部１４に伝える。
【００９９】
探索部１４はコイル７０７が導通状態であるか、非導通状態であるか判定する。図９の（ａ）の場合は、コイル７０７は導通状態であるため、探索部１４はコイル７０７と同一回路内において、第２のプログラム要素を特定する。図９の（ａ）の例では第２のプログラム要素として、接点７０６が１つ特定される。探索部１４は次に、接点７０６に割り付けられた変数と同一の変数が割り付けられているプログラム要素（第４のプログラム要素）が接点７０６の上流に存在するか否かを判定する。図９の（ａ）の例では、接点７０６と同じ変数Ｄが割り当てられているコイル７０５が１つ特定される。探索部１４は、コイル７０５について、接点７０６と同様の処理を繰り返す。
【０１００】
このように、導通状態のプログラム要素を遡っていくと、図９の（ａ）の例では、コイル７０３を探索対象のプログラム要素として処理を行った場合に、接点７０２ａと接点７０２ｂの２つの第２のプログラム要素が特定される。このように複数のプログラム要素が特定されると、表示制御部１５は該プログラム要素（接点７０２ａと接点７０２ｂ）を、図９の（ａ）に示すように、他のプログラム要素と識別可能に表示する。なお、図示の通り、表示制御部１５は、第１のプログラム要素であるコイル７０７も他のプログラム要素と識別可能に表示部３０に表示させてもよい。そして、識別可能に表示させたプログラム要素がユーザによって選択された場合、当該選択されたプログラム要素を次の探索対象として、遡り検索を再度行ってもよい。
【０１０１】
図９の（ｂ）は、本実施形態に係るラダープログラム５１の他の一例に対応するラダー図を示している。図９の（ｂ）の例においても、図９の（ａ）の例で説明したように、探索部１４は第１のプログラム要素から、導通状態のプログラム要素を遡って検索する処理を行う。図９の（ｂ）の例では、遡り検索の過程でコイル８０３を探索対象のプログラム要素として処理を行った場合に、接点８０２ａと接点８０２ｂとが特定される。そして、表示制御部１５は接点８０２ａと接点８０２ｂとを、他のプログラム要素と識別可能に表示する。そして、識別可能に表示させたプログラム要素がユーザによって選択された場合、当該選択されたプログラム要素を次の探索対象として、遡り検索を再度行ってもよい。
【０１０２】
なお、上述のように探索部１４が表示対象のプログラム要素を特定した場合、表示制御部１５はそれぞれのプログラム要素をラダー図上で識別可能に表示するのではなく、該プログラム要素を別途リスト等の形式で表示させてもよい。
【０１０３】
〔変形例〕
上記各実施形態では、ＰＣ１はラダープログラム５１の作成機能を備えたプログラム作成支援装置であるとして説明を行った。しかしながら、ＰＣ１は、ラダープログラム５１の作成機能は備えず、予め記憶部５０に格納しておいたラダープログラム５１を読み出し、当該ラダープログラム５１に対応するラダー図と、各プログラム要素の導通状態とを表示してもよい。そして、当該ラダー図においてプログラム要素から原因要素を特定し表示してもよい。
【０１０４】
この場合、ＰＣ１においてプログラム作成部１２は必須ではなく、ＰＣ１の制御部１０は、通信部４０を介し他のＰＣ１等のプログラム作成装置またはＰＬＣ２からラダープログラム５１を受信し、記憶部５０に格納しておけばよい。そして、入力部２０に対するユーザの入力操作に応じて、格納したラダープログラム５１の読出しおよび表示を行えばよい。
【０１０５】
〔ソフトウェアによる実現例〕
ＰＣ１の制御ブロック（制御部１０）は、集積回路（ＩＣチップ）等に形成された論理回路（ハードウェア）によって実現してもよいし、ＣＰＵ（Central Processing Unit）を用いてソフトウェアによって実現してもよい。
【０１０６】
後者の場合、ＰＣ１は、各機能を実現するソフトウェアであるプログラムの命令を実行するＣＰＵ、上記プログラムおよび各種データがコンピュータ（またはＣＰＵ）で読み取り可能に記録されたＲＯＭ（Read Only Memory）または記憶装置（これらを「記録媒体」と称する）、上記プログラムを展開するＲＡＭ（Random Access Memory）などを備えている。そして、コンピュータ（またはＣＰＵ）が上記プログラムを上記記録媒体から読み取って実行することにより、本発明の目的が達成される。上記記録媒体としては、「一時的でない有形の媒体」、例えば、テープ、ディスク、カード、半導体メモリ、プログラマブルな論理回路などを用いることができる。また、上記プログラムは、該プログラムを伝送可能な任意の伝送媒体（通信ネットワークや放送波等）を介して上記コンピュータに供給されてもよい。なお、本発明は、上記プログラムが電子的な伝送によって具現化された、搬送波に埋め込まれたデータ信号の形態でも実現され得る。
【０１０７】
本発明は上述した各実施形態に限定されるものではなく、請求項に示した範囲で種々の変更が可能であり、異なる実施形態にそれぞれ開示された技術的手段を適宜組み合わせて得られる実施形態についても本発明の技術的範囲に含まれる。
【符号の説明】
【０１０８】
１  ＰＣ（プログラム作成支援装置）
１０  制御部（処理部）
１１  入力制御部
１２  プログラム作成部
１３  モニタ値取得部
１４  探索部
１４１  接点特定部
１４２  要素特定部
１５  表示制御部
２０  入力部
３０  表示部
４０  通信部（接続部）
５０  記憶部
５１  ラダープログラム
２  ＰＬＣ（プログラマブルロジックコントローラ）
７０  通信ユニット
８０  ＣＰＵユニット
９０  記憶ユニット
３  デバイス
【図１】
2017188115.tif 000003
【図２】
2017188115.tif 000004
【図３】
2017188115.tif 000005
【図４】
2017188115.tif 000006
【図５】
2017188115.tif 000007
【図６】
2017188115.tif 000008
【図７】
2017188115.tif 000009
【図８】
2017188115.tif 000010
【図９】
2017188115.tif 000011