(57)【特許請求の範囲】
【請求項１】
ラダー言語で記述された第１のプログラムを中間言語で記述された第２のプログラムに変換する第１の変換ステップと、
前記第２のプログラムを手続型言語で記述された第３のプログラムに変換する第２の変換ステップと、
前記第２のプログラムの１ブロックごとの解析結果が定められた条件を満たすと、前記条件を満たすブロックに対応する、前記第１のプログラムの１ブロック、を前記第３のプログラムを表示する際に前記第３のプログラムとともに表示する回路表示部品として生成する回路表示部品生成ステップと、
前記第３のプログラムおよび前記回路表示部品を、前記回路表示部品が前記第３のプログラムのどのブロックに対応するか認識可能な形式で表示する表示ステップと、
をコンピュータに実行させることを特徴とするプログラミング支援プログラム。
【請求項２】
前記回路表示部品生成ステップでは、前記解析結果を確認したユーザから指示を受けると前記回路表示部品を生成する、
ことを特徴とする請求項１に記載のプログラミング支援プログラム。
【請求項３】
前記回路表示部品生成ステップでは、
前記解析結果と、前記解析結果を確認したユーザによる、前記回路表示部品の生成が必要か否かの判断結果と、を含む学習用データに基づき機械学習装置が前記回路表示部品の生成条件を学習した結果を使用して、前記回路表示部品を生成するか否かを決定する、
ことを特徴とする請求項１に記載のプログラミング支援プログラム。
【請求項４】
前記解析結果と、前記解析結果を確認したユーザによる、前記回路表示部品の生成が必要か否かの判断結果と、を含む学習用データに基づいて前記回路表示部品の生成条件を学習する機械学習ステップ、
を含み、
前記回路表示部品生成ステップでは、前記機械学習ステップによる学習結果を使用して、前記回路表示部品を生成するか否かを決定する、
ことを特徴とする請求項１に記載のプログラミング支援プログラム。
【請求項５】
前記機械学習ステップは、
前記第２のプログラムを１ブロックごとに解析して得られる情報のうち、１命令を実行するための条件数、１条件を共有する命令数および回路構成の複雑度を状態変数として観測する状態観測ステップと、
回路表示部品を生成する必要があるか否かをユーザが判定した結果を教師データとして取得するデータ取得ステップと、
前記状態変数および前記教師データの組合せに基づいて作成されるデータセットに従って、前記生成条件を学習する学習ステップと、
を含むことを特徴とする請求項４に記載のプログラミング支援プログラム。
【請求項６】
前記機械学習ステップによる前記生成条件の学習が済んでいない状態の場合、
前記回路表示部品生成ステップでは、前記第３のプログラムの可読性を判定するための条件を使用して、前記回路表示部品を生成するか否かを決定する、
ことを特徴とする請求項４または５に記載のプログラミング支援プログラム。
【請求項７】
前記回路表示部品は、前記条件を満たすブロックの内容をラダー言語で表現する、
ことを特徴とする請求項１から５のいずれか一つに記載のプログラミング支援プログラム。
【請求項８】
前記回路表示部品生成ステップで生成した回路表示部品の内容を変更するための操作を受け付けるデータ操作ステップと、
前記データ操作ステップで受け付けた操作の内容に従い、ユーザに指定された回路表示部品を変更する第１の変更ステップと、
前記第１の変更ステップで前記回路表示部品を変更した内容に合わせて、前記第３のプログラムの対応する箇所を変更する第２の変更ステップと、
を含むことを特徴とする請求項１から７のいずれか一つに記載のプログラミング支援プログラム。
【請求項９】
前記表示ステップで前記回路表示部品を表示する際の表示属性をユーザが設定可能とする、
ことを特徴とする請求項１から８のいずれか一つに記載のプログラミング支援プログラム。
【請求項１０】
前記表示属性は、前記回路表示部品生成ステップで作成済みの回路表示部品を表示する条件と、前記回路表示部品を表示する際の塗りつぶし色、透過率および拡縮率と、を含む、
ことを特徴とする請求項９に記載のプログラミング支援プログラム。
【請求項１１】
前記回路表示部品生成ステップで作成済みの回路表示部品を表示する条件を、前記第１のプログラムまたは前記第３のプログラムに基づく実行ファイルが書き込まれる装置の内部メモリに格納されたデータの値を利用してユーザが指定可能とする、
ことを特徴とする請求項１０に記載のプログラミング支援プログラム。
【請求項１２】
ラダー言語で記述された第１のプログラムを中間言語で記述された第２のプログラムに変換する第１の変換部と、
前記第２のプログラムを手続型言語で記述された第３のプログラムに変換する第２の変換部と、
前記第２のプログラムの１ブロックごとの解析結果が定められた条件を満たすと、前記条件を満たすブロックに対応する、前記第１のプログラムの１ブロック、を前記第３のプログラムを表示する際に前記第３のプログラムとともに表示する回路表示部品として生成する回路表示部品生成部と、
前記回路表示部品を保持する回路表示部品格納部と、
前記第３のプログラムおよび前記回路表示部品格納部が保持している前記回路表示部品を、前記回路表示部品が前記第３のプログラムのどのブロックに対応するか認識可能な形式で表示する表示部と、
を備えることを特徴とするプログラミング支援装置。
【請求項１３】
プログラムの開発に用いられるプログラミング支援装置が実行するプログラミング支援方法であって、
ラダー言語で記述された第１のプログラムを中間言語で記述された第２のプログラムに変換する第１の変換ステップと、
前記第２のプログラムを手続型言語で記述された第３のプログラムに変換する第２の変換ステップと、
前記第２のプログラムの１ブロックごとの解析結果が定められた条件を満たすと、前記条件を満たすブロックに対応する、前記第１のプログラムの１ブロック、を前記第３のプログラムを表示する際に前記第３のプログラムとともに表示する回路表示部品として生成する回路表示部品生成ステップと、
前記第３のプログラムおよび前記回路表示部品を、前記回路表示部品が前記第３のプログラムのどのブロックに対応するか認識可能な形式で表示する表示ステップと、
を含むことを特徴とするプログラミング支援方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、プログラマブルロジックコントローラが実行するプログラムの作成支援に用いられるプログラミング支援プログラム、プログラミング支援装置およびプログラミング支援方法に関する。
【背景技術】
【０００２】
従来、プログラマブルロジックコントローラが実行するプログラムは、ラダー言語およびＦＢＤ（Function  Block  Diagram）言語といった、可読性が高いプログラムで記述することが一般的であった。これに対し、近年は、ラダー言語などの代わりにＳＴ（Structured  Text）言語のような手続型言語を使用してプログラムを記述する要望も高まってきている。【０００３】
プログラムの開発では、過去に開発したプログラムを流用して新たなプログラムの作成作業を効率的に行うことが広く行われている。ここで、新たなプログラムを作成する場合、例え同じハードウェアで使用するプログラムであっても、作成しようとしているプログラムとは異なるプログラム言語で記述されたプログラムを直接流用することはできない。そのため、あるプログラム言語で記述されたプログラムを他のプログラム言語で記述されたプログラムに変換する技術が提案されている（例えば、特許文献１）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００１−２２４１２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ラダー言語で記述されたプログラムを手続型言語で記述されたプログラムに変換した場合、プログラムの可読性が低下するという問題がある。可読性は、変換する前のプログラムのブロックが複雑な構成になればなるほど低下する。可読性が低下すると、プログラムの開発および編集といった作業の効率も低下する。【０００６】
本開示は、上記に鑑みてなされたものであって、手続型言語以外のプログラム言語で記述したプログラムを手続型言語で記述したプログラムに変換した場合に、プログラムの可読性の低下に伴い作業効率が低下するのを防止することが可能なプログラミング支援プログラムを得ることを目的とする。
【課題を解決するための手段】
【０００７】
上述した課題を解決し、目的を達成するために、本開示にかかるプログラミング支援プログラムは、ラダー言語で記述された第１のプログラムを中間言語で記述された第２のプログラムに変換する第１の変換ステップと、第２のプログラムを手続型言語で記述された第３のプログラムに変換する第２の変換ステップとを含む。また、プログラミング支援プログラムは、第２のプログラムの１ブロックごとの解析結果が定められた条件を満たすと、条件を満たすブロックに対応する、第１のプログラムの１ブロック、を第３のプログラムを表示する際に第３のプログラムとともに表示する回路表示部品として生成する回路表示部品生成ステップと、第３のプログラムおよび回路表示部品を、回路表示部品が第３のプログラムのどのブロックに対応するか認識可能な形式で表示する表示ステップと、をコンピュータに実行させる。
【発明の効果】
【０００８】
本開示にかかるプログラミング支援プログラムは、手続型言語以外のプログラム言語で記述したプログラムを手続型言語で記述したプログラムに変換した場合に、プログラムの可読性の低下に伴い作業効率が低下するのを防止することができる、という効果を奏する。
【図面の簡単な説明】
【０００９】
【図１】実施の形態にかかるプログラミング支援装置の機能ブロック構成の一例を示す図
【図２】プログラミング支援装置による第１のＳＴプログラム生成動作を示すフローチャート
【図３】変換対象プログラム指定画面の一例を示す図
【図４】プログラミング支援装置がラダープログラムをＳＴプログラムに変換する動作の概要を示す図
【図５】プログラミング支援装置が備える機械学習装置の機能ブロック構成を示す図
【図６】機械学習装置が機械学習に用いる学習用データの構成例を示す図
【図７】ニューラルネットワークの構成例を示す図
【図８】機械学習装置での学習に使用する学習用データの第１の例を示す図
【図９】機械学習装置での学習に使用する学習用データの第２の例を示す図
【図１０】プログラミング支援装置による第２のＳＴプログラム生成動作を示すフローチャート
【図１１】変換コード対応テーブルの一例を示す図
【図１２】プログラミング支援装置によるプログラム表示動作を示すフローチャート
【図１３】プログラミング支援装置による回路表示部品編集動作を示すフローチャート
【図１４】プログラミング支援装置による回路表示部品の表示方法を説明するための図
【図１５】プログラミング支援装置による回路表示部品の表示方法の第２の例を示す図
【図１６】プログラミング支援装置による回路表示部品の表示方法の第３の例を示す図
【図１７】回路表示部品の表示属性設定画面の一例を示す図
【図１８】回路表示部品を表示するトリガ条件の一例を示す図
【発明を実施するための形態】
【００１０】
以下に、本開示の実施の形態にかかるプログラミング支援プログラム、プログラミング支援装置およびプログラミング支援方法を図面に基づいて詳細に説明する。
【００１１】
実施の形態．
本実施の形態では、プログラマブルロジックコントローラが実行するプログラムの開発に用いられるプログラミング支援装置について説明する。このプログラミング支援装置は、ラダー言語で記述されたプログラムであるラダープログラムをＳＴ言語で記述されたプログラムであるＳＴプログラムに変換する機能を有する。図１は、実施の形態にかかるプログラミング支援装置の機能ブロック構成の一例を示す図である。図１に示すプログラミング支援装置１は、プログラマブルロジックコントローラが実行するプログラムの開発に用いられる。
【００１２】
プログラミング支援装置１は、ラダープログラムデータ格納部２、Ｐコード生成部３、データ操作部４、表示部５、回路表示部品格納部６、ＳＴプログラムデータ格納部７およびＳＴプログラム生成部８を備える。
【００１３】
ラダープログラムデータ格納部２は、ラダープログラムのデータであるラダープログラムデータ２１を格納する。Ｐコード生成部３は、ラダープログラムを中間言語であるＰコードで記述されたプログラムに変換する。Ｐコード生成部３は、ラダー言語で記述された第１のプログラムを中間言語で記述された第２のプログラムに変換する変換する第１の変換部である。ここで、コンピュータはプログラミング言語で記述されたプログラムの内容を理解することができない。そのため、プログラミング言語で記述されたプログラムをコンピュータが解読可能なマシン語に変換する必要がある。このとき、プログラミング言語で記述されたプログラムをマシン語のプログラムに直接変換することはせずに、中間表現のプログラムに一度変換した後、さらにマシン語のプログラムに再変換することが一般的である。中間言語は、プログラミング言語で記述されたプログラムを中間表現とする場合に用いられる。中間言語には様々な種類が存在し、中間言語は中間コードと称される場合もある。Ｐコードは、中間表現のプログラムを作成する場合に用いられる様々な種類の中間言語の中の１種である。データ操作部４は、プログラミング支援装置１が取り扱うデータに対する編集操作などの操作をユーザから受け付ける。表示部５は、ユーザに対してプログラムの確認画面、編集画面などの各種画面を表示する。回路表示部品格納部６は、後述する回路表示部品を格納する。ＳＴプログラムデータ格納部７は、ＳＴプログラムのデータであるＳＴプログラムデータ７１を格納する。ＳＴプログラム生成部８は、Ｐコードで記述されたプログラムをＳＴプログラムに変換する。
【００１４】
ＳＴプログラム生成部８は、Ｐコード解析部８１、機械学習装置８２、ＳＴテンプレート格納部８３およびプログラム変換部８４を備える。Ｐコード解析部８１および機械学習装置８２は回路表示部品生成部８０を構成する。
【００１５】
Ｐコード解析部８１は、Ｐコードで記述されたプログラムであるＰコードプログラムを解析してプログラムの構造に関するデータを生成するとともに、生成したデータが定められた条件を満たす場合に回路表示部品を生成する。機械学習装置８２は、Ｐコード解析部８１が生成したデータおよびデータ操作部４から入力されるデータに基づき、Ｐコード解析部８１が回路表示部品を生成する条件を学習する。ＳＴテンプレート格納部８３は、ＰコードプログラムをＳＴプログラムに変換するためのテンプレートを格納する。プログラム変換部８４は、ＰコードプログラムをＳＴプログラムに変換する。プログラム変換部８４は、第２のプログラムを手続型言語で記述された第３のプログラムに変換する第２の変換部である。
【００１６】
ここで、プログラミング支援装置１は、図１に示すように電子計算機１００で実現される。電子計算機１００は例えばパーソナルコンピュータであり、ＣＰＵ（Central  Processing  Unit）、記憶装置、表示装置、入力装置、通信装置などで構成される。記憶装置は、ＲＡＭ（Random  Access  Memory）、ＲＯＭ（Read  Only  Memory）、フラッシュメモリー、等の、不揮発性または揮発性の半導体メモリ、磁気ディスク等である。表示装置は液晶ディスプレイ等であり、表示部５を実現する。入力装置はマウス、キーボードなどである。通信装置はネットワークインタフェースカードなどである。なお、図１では、電子計算機１００が表示装置を備える構成例について示したが、表示装置は電子計算機１００から独立した別の装置であってもよい。
【００１７】
プログラミング支援装置１が有する各機能は、電子計算機１００のＣＰＵおよび記憶装置で実現される。すなわち、プログラミング支援装置１が有する各機能を実現するためのプログラムであるプログラミング支援プログラムを記憶装置に格納しておき、ＣＰＵが記憶装置に格納されたプログラムを読み出して実行することにより、プログラミング支援装置１が有する各機能が実現される。また、プログラミング支援装置１のラダープログラムデータ格納部２、回路表示部品格納部６およびＳＴプログラムデータ格納部７は電子計算機１００の記憶装置で実現される。なお、電子計算機１００の入力装置はユーザがプログラミング支援装置１を操作する場合に利用される。電子計算機１００の通信装置は、プログラミング支援装置１が電子計算機１００の外部の装置と通信する場合に利用される。上記のプログラミング支援プログラムは、例えば、ＣＤ（Compact  Disc）−ＲＯＭ、ＤＶＤ（Digital  Versatile  Disc）−ＲＯＭなどの記憶媒体に書き込まれた状態でユーザに供給される。上記のプログラミング支援プログラムは、インターネットなどを介してユーザに供給される形態であってもよい。
【００１８】
つづいて、プログラミング支援装置１の動作の詳細について説明する。具体的には、機械学習装置８２による学習が済んでいない状態でラダープログラムを変換してＳＴプログラムを生成する動作（第１のＳＴプログラム生成動作とする）と、機械学習装置８２による学習が済んでいる状態でラダープログラムを変換してＳＴプログラムを生成する動作（第２のＳＴプログラム生成動作とする）と、変換後のＳＴプログラムとともに回路表示部品を表示する動作（プログラム表示動作とする）と、生成済みの回路表示部品を編集する動作（回路表示部品編集動作とする）とについて、それぞれ説明する。
【００１９】
［第１のＳＴプログラム生成動作］
機械学習装置８２による学習が済んでいない状態のときにプログラミング支援装置１がラダープログラムを変換してＳＴプログラムを生成する第１のＳＴプログラム生成動作について説明する。この第１のＳＴプログラム生成動作において、プログラミング支援装置１は、ラダープログラムをＳＴプログラムに変換するとともに、回路表示部品を生成する条件の学習を行う。
【００２０】
図２は、プログラミング支援装置１による第１のＳＴプログラム生成動作を示すフローチャートである。プログラミング支援装置１は、ＳＴプログラムの生成開始を指示する操作を受け付けた時点で機械学習装置８２による学習すなわち回路表示部品を生成する条件の学習が完了していない場合、第１のＳＴプログラム生成動作を開始する。
【００２１】
第１のＳＴプログラム生成動作では、まず、データ操作部４が、変換するプログラムの指定を受け付ける（ステップＳ１０１）。このステップＳ１０１において、データ操作部４は表示部５と連携し、例えば、図３に示す変換対象プログラム指定画面３０１を表示部５に表示させて、ユーザからの操作を受け付ける。図３は、変換対象プログラム指定画面３０１の一例を示す図である。データ操作部４は、ラダープログラムデータ２１に含まれるラダープログラムのうち、どのラダープログラムをＳＴプログラムへの変換対象とするかの指定をユーザより受け付ける。また、データ操作部４は、変換対象としたラダープログラムそれぞれについて、実際に変換する範囲の選択（変換範囲選択）を受け付ける。なお、変換範囲選択の受け付けは必須ではなく、ユーザは変換範囲選択の入力を省略してもよい。変換範囲選択の入力が省略された場合、プログラミング支援装置１は、変換対象とされたプログラムの全体が変換範囲であるものとして取り扱う。なお、ユーザは、「全体」と記載された欄の中のプログラムを選択して左矢印ボタン３０２をクリックすることで、選択したプログラムを変換対象のプログラムに追加することができる。また、ユーザは、「変換対象」と記載された欄の中のプログラム（変換対象のプログラム）を選択して右矢印ボタン３０３をクリックすることで、選択したプログラムを変換対象のプログラムから除外することができる。また、変換対象プログラム指定画面３０１は、回路表示部品を強制的に作成する指定を受け付けるためのチェックボックス３０４を含む。チェックボックス３０４にチェックが入っている場合、プログラミング支援装置１は、変換対象のプログラムを構成する全てのブロックについて、回路表示部品を作成する条件を満たしているか否かに関係なく回路表示部品を作成する。なお、これ以降では、チェックボックス３０４にチェックが入っていないものとして説明を行う。
【００２２】
変換ボタンがクリックされるとステップＳ１０１が終了となりステップＳ１０２に遷移する。
【００２３】
ステップＳ１０１が終了すると、次に、Ｐコード生成部３が、ラダープログラムデータ２１からステップＳ１０１で指定されたラダープログラムを取得し（ステップＳ１０２）、取得したラダープログラムを構成する各ブロックをＰコードに変換してＰコードプログラムを生成する（ステップＳ１０３）。
【００２４】
次に、Ｐコード解析部８１が、Ｐコードプログラムの１ブロックごとに条件部と実行部を判定する（ステップＳ１０４）。ここで、一般的にラダープログラムは、接点命令および比較演算命令といった命令からなる条件部と、文字列処理、実数処理、出力命令などからなる実行部とに分ける事ができる。これはＳＴプログラムに変換する場合、ＩＦ文における条件式と実行文とに置き換える事ができる。そのため、ステップＳ１０４において、Ｐコード解析部８１は、図４の手順２に示すように、Ｐコードで記述されたプログラム（Ｐコードプログラム）を解析し、ＩＦ文の条件文に相当するコードと実行文に相当するコードとを判別し、それぞれを条件部および実行部とする。図４は、プログラミング支援装置１がラダープログラムをＳＴプログラムに変換する動作の概要を示す図である。図４では、ラダープログラムの１つのブロックをＳＴプログラムに変換する動作の概要を示している。図４に示す手順１は、上記のステップＳ１０３に相当する。
【００２５】
ステップＳ１０４の処理が終了した後は、ステップＳ１０４で判定処理を行った１ブロックを対象として、ステップＳ１０５〜Ｓ１０７に示すＳＴプログラム生成処理とステップＳ４０１〜Ｓ４０３に示す学習処理とが並列に実行される。以下では、ステップＳ１０５〜Ｓ１０７のＳＴプログラム生成処理と、ステップＳ４０１〜Ｓ４０３の学習処理とに分けて説明する。
【００２６】
（ＳＴプログラム生成処理）
ＳＴプログラム生成処理では、上記のステップＳ１０４に続いて、プログラム変換部８４が、ＳＴテンプレート格納部８３から変換処理用のテンプレートを取得し（ステップＳ１０５）、テンプレートを使用してＳＴプログラムを作成する（ステップＳ１０６）。すなわち、図４の手順３に示すように、プログラム変換部８４は、Ｐコード解析部８１がＰコードプログラムを解析した結果をテンプレートに当てはめ、ＳＴプログラムを作成する。プログラム変換部８４は、作成したＳＴプログラムをＳＴプログラムデータ格納部７に格納する（ステップＳ１０７）。
【００２７】
（学習処理）
ステップＳ４０１〜Ｓ４０３の学習処理は、機械学習装置８２が行う。機械学習装置８２の機能ブロック構成は図５に示したものとなる。図５は、プログラミング支援装置１が備える機械学習装置８２の機能ブロック構成を示す図である。すなわち、機械学習装置８２は、機械学習に用いる教師データを取得するデータ取得部８２１と、Ｐコード解析部８１から入力される状態変数を観測する状態観測部８２２と、データ取得部８２１が取得した教師データおよび状態観測部８２２による状態変数の観測結果に基づいて回路表示部品の生成条件を学習する学習部８２３とを備える。
【００２８】
図６は、機械学習装置８２が機械学習に用いる学習用データの構成例を示す図である。学習用データは、データ取得部８２１が取得する教師データと、状態観測部８２２が観測する状態変数とで構成される。図６に示す入力１〜入力３は、Ｐコード解析部８１から機械学習装置８２に入力されるデータであり、状態観測部８２２が観測する状態変数に相当する。入力１〜入力３のデータは、変換する対象のラダープログラムの構成に関する情報を含む。入力１の「１命令を実行するための条件数」は、１命令を実行するために影響を与える条件の数を示す。これは単純に回路を構成する条件の数が増えると、ＩＦ文の条件文の項数が増え、条件式が複雑になるためである。入力２の「１条件を共有する命令数」は、１条件を共有する命令の数を条件ごとに示す。この条件のうち、ＡＮＤやＯＲでまとめられる箇所はまとめて設定する。入力２の「１条件を共有する命令数」はＩＦ文の分岐数に影響する。入力３の「回路を構成するＡＮＢ、ＯＲＢ、ＭＰＳ、ＭＲＤ、ＭＰＰの数」は、回路ブロック直列接続命令であるＡＮＢの数と、回路ブロック並列接続命令であるＯＲＢの数と、演算結果プッシュ命令であるＭＰＳの数と、演算結果読み出し命令であるＭＲＤの数と、演算結果ポップ命令であるＭＰＰの数と、を示す。入力３のデータは回路構成の複雑度を示す。本実施の形態では、教師データは、ラダープログラムを変換して得られたＳＴプログラムを確認したユーザが、確認したＳＴプログラムに対応する回路表示部品の生成が必要か否かを判断した結果のデータとする。
【００２９】
機械学習装置８２による学習処理では、上記のステップＳ１０４に続いて、状態観測部８２２が、Ｐコード解析部８１からプログラムの解析結果を取得する（ステップＳ４０１）。すなわち、ステップＳ４０１において、状態観測部８２２は、Ｐコード解析部８１から入力される、図６に示す入力１〜入力３のデータを状態変数として観測する。
【００３０】
次に、上記のステップＳ１０６で作成されたＳＴプログラムを元にユーザが回路表示部品の生成有無を判定し、判定結果を教師データとする（ステップＳ４０２）。このステップＳ４０２では、表示部５が、ステップＳ１０６でプログラム変換部８４が生成したＳＴプログラムをＳＴプログラムデータ格納部７から読み出して表示する。また、データ操作部４が、表示部５が表示しているＳＴプログラムに対応する回路表示部品を生成する必要があるか否かの判定結果の入力をユーザから受け付け、図６に示す教師データとして機械学習装置８２に出力する。機械学習装置８２では、データ取得部８２１が、データ操作部４から教師データを取得する。ステップＳ４０１およびＳ４０２が終了すると、図６に示す構成の学習用データが得られる。
【００３１】
次に、学習部８２３が、学習用データに基づいて、回路表示部品を生成する条件を学習する（ステップＳ４０３）。
【００３２】
ステップＳ４０３について詳しく説明する。ステップＳ４０３において、学習部８２３は、状態観測部８２２が観測した状態変数およびデータ取得部８２１が取得した教師データの組合せに基づいて作成されるデータセットに基づいて、回路表示部品の生成条件を学習する。ここで、データセットは状態変数および教師データを互いに関連付けたデータである。
【００３３】
なお、機械学習装置８２は、プログラミング支援装置１において、回路表示部品の生成条件を学習するために使用されるが、例えば、ネットワークを介してプログラミング支援装置１に接続され、このプログラミング支援装置１とは別個の装置であってもよい。この場合、機械学習装置８２は、クラウドサーバ上に存在していてもよい。
【００３４】
学習部８２３は、例えば、ニューラルネットワークモデルに従って、いわゆる教師あり学習により回路表示部品の生成条件を学習する。ここで、教師あり学習とは、ある入力と結果（ラベル）のデータの組であるデータセットを大量に学習部８２３に与えることで、それらのデータセットにある特徴を学習し、入力から結果を推定するモデルをいう。
【００３５】
ニューラルネットワークは、複数のニューロンからなる入力層と、複数のニューロンからなる中間層（隠れ層）と、複数のニューロンからなる出力層とで構成される。中間層は、１層、又は２層以上でもよい。
【００３６】
図７は、ニューラルネットワークの構成例を示す図である。例えば、図７に示すような３層のニューラルネットワークであれば、複数の入力が入力層に入力層（Ｘ１−Ｘ３）に入力されると、その値に重みＷ１（ｗ１１−ｗ１６）を掛けて中間層（Ｙ１−Ｙ２）に入力され、その結果にさらに重みＷ２（ｗ２１−ｗ２６）を掛けて出力層（Ｚ１−Ｚ３）から出力される。この出力結果は、重みＷ１およびＷ２の値によって変わる。
【００３７】
本実施の形態において、ニューラルネットワークは、上記のデータセットに従って、いわゆる教師あり学習により、ラダープログラムをＳＴプログラムに変換した際にユーザが見やすくなる回路表示部品の生成条件を学習する。すなわち、ニューラルネットワークは、入力層に状態変数を入力して出力層から出力された結果が、教師データの値に近づくように重みＷ１およびＷ２を調整することで、回路表示部品の生成条件を学習する。
【００３８】
また、ニューラルネットワークは、いわゆる教師なし学習によって、回路表示部品の生成条件を学習することもできる。教師なし学習とは、入力データのみを大量に機械学習装置に与えることで、入力データがどのような分布をしているか学習し、対応する教師出力データを与えなくても、入力データに対して圧縮、分類、整形等を行う装置を学習する手法である。ニューラルネットワークは、入力データにある特徴を似た者どうしにクラスタリングすること等ができる。この結果を使って、何らかの基準を設けてそれを最適にするような出力の割り当てを行うことで、出力の予測を実現することができる。また、教師なし学習と教師あり学習の中間的な問題設定として、半教師あり学習と呼ばれるものもある。半教師あり学習では、一部のみ入力データと教師データのデータセットが存在し、それ以外は入力データのみの学習用データを使用する。
【００３９】
学習部８２３は、複数のプログラミング支援装置１に対して作成されるデータセットに従って回路表示部品の生成条件を学習するようにしてもよい。なお、学習部８２３は、同一の現場で使用される複数のプログラミング支援装置１からデータセットを取得してもよいし、異なる現場で独立して使用されるプログラミング支援装置１からデータセットを取得してもよい。さらに、データセットを収集するプログラミング支援装置１を学習の途中で対象に追加し、或いは、逆に対象から除去することも可能である。また、あるプログラミング支援装置１に関して回路表示部品の生成条件を学習した機械学習装置８２を、これとは別のプログラミング支援装置１に取り付け、当該別のプログラミング支援装置１に関して回路表示部品の生成条件を再学習して更新するようにしてもよい。
【００４０】
また、学習部８２３に用いられる学習アルゴリズムとしては、特徴量そのものの抽出を学習する深層学習（Deep  Learning）を用いることもできる。また、学習部８２３は、他の公知の方法、例えば遺伝的プログラミング、機能論理プログラミング、サポートベクターマシンなどに従って学習を実行してもよい。
【００４１】
本実施の形態で使用する学習用データの具体例を説明する。図８は、機械学習装置８２での学習に使用する学習用データの第１の例を示す図である。図８では、学習用データの根拠となるラダープログラムと、変換後のＳＴプログラムを併せて記載している。図８に示す第１の例の学習用データは、教師データが「回路表示部品生成なし」の場合、すなわち、回路表示部品を生成しないことをユーザが選択した場合の例である。
【００４２】
入力１のデータは、「Ｙ０，８」および「Ｙ１，８」を含む。「Ｙ０，８」は、出力Ｙ０の値に影響する条件部がＸ０〜Ｘ７の８条件である事を表す。「Ｙ１，８」も同様である。
【００４３】
入力２のデータは、「Ｘ０  ＡＮＤ  Ｘ１，２」、「Ｘ２  ＡＮＤ  Ｘ３，２」、「Ｘ４  ＡＮＤ  Ｘ５，２」および「Ｘ６  ＡＮＤ  Ｘ７，２」を含む。「Ｘ０  ＡＮＤ  Ｘ１，２」は、Ｘ０とＸ１をＡＮＤ演算でまとめ１条件として扱い、この条件をＹ０およびＹ１の２命令が使用することを表す。「Ｘ２  ＡＮＤ  Ｘ３，２」、「Ｘ４  ＡＮＤ  Ｘ５，２」および「Ｘ６  ＡＮＤ  Ｘ７，２」も同様である。
【００４４】
入力３のデータは、「ＡＮＢ，１」、「ＯＲＢ，２」、「ＭＰＳ，０」、「ＭＲＤ，０」および「ＭＰＰ，０」を含む。「ＡＮＢ，１」は、回路ブロック直列接続命令であるＡＮＢが１箇所であることを表す。「ＯＲＢ，２」は、回路ブロック並列接続命令であるＯＲＢが２箇所であることを表す。「ＭＰＳ，０」は、演算結果プッシュ命令であるＭＰＳが存在しないことを表す。「ＭＲＤ，０」は、演算結果読み出し命令であるＭＲＤが存在しないことを表す。「ＭＰＰ，０」は、演算結果ポップ命令であるＭＰＰが存在しないことを表す。
【００４５】
第１の例では、ＩＦ文の深さが２段、ＩＦ文の条件式の論理演算項数は２項が最大となり、変換後のＳＴプログラムから容易に元のラダープログラムを推測できるため、ユーザは回路表示部品の生成が必要ないと判断している。
【００４６】
図９は、機械学習装置８２での学習に使用する学習用データの第２の例を示す図である。図８と同様に、図９では、学習用データの根拠となるラダープログラムと、変換後のＳＴプログラムを併せて記載している。図９に示す第２の例の学習用データは、教師データが「回路表示部品生成」の場合、すなわち、回路表示部品を生成することをユーザが選択した場合の例である。
【００４７】
入力１のデータは、「Ｙ０，９」、「Ｙ１，９」、「Ｙ２，１０」、「Ｙ３，１」を含む。入力２のデータは、「Ｘ０，４」、「Ｘ１  ＯＲ  Ｘ４  ＯＲ  Ｘ５，３」、「Ｘ２，３」、「Ｘ３，１」、「Ｘ６，３」、「Ｘ７  ＯＲ  Ｘ８，３」、「Ｘ９，２」および「Ｘ１０，１」を含む。入力３のデータは、「ＡＮＢ，３」、「ＯＲＢ，１」、「ＭＰＳ，２」、「ＭＲＤ，０」および「ＭＰＰ，２」を含む。
【００４８】
第２の例では、入力１のデータが、１命令を実行するための条件数が多い事を表し、入力２のデータが、Ｘ１〜Ｘ１０の条件がＹ０〜Ｙ２の出力値に関係することを表し、入力３のデータが、直列回路ブロックおよび並列回路ブロックがあること、スタックを使用した計算を行う必要がある回路であること、を表している。変換後のＳＴプログラムから元のラダープログラムの構成を推測できることが難しいため、ユーザは回路表示部品の生成が必要と判断している。
【００４９】
図２の説明に戻り、ステップＳ１０５〜Ｓ１０７のＳＴプログラム生成処理およびステップＳ４０１〜Ｓ４０３の学習処理が終了すると、ＳＴプログラム生成部８は、変換対象のプログラムの全ブロックの解析、すなわち、全ブロックについて、ＳＴプログラムへの変換処理および回路表示部品の生成条件の学習処理が終了したかを確認する（ステップＳ１０８）。全ブロックの解析が終了した場合（ステップＳ１０８：Ｙｅｓ）、図２に示す動作は終了となる。一方、全ブロックの解析が終了していない場合（ステップＳ１０８：Ｎｏ）、ステップＳ１０４に戻る。
【００５０】
以上の第１のＳＴプログラム生成動作は、上記のステップＳ４０１〜Ｓ４０３に示す学習動作が繰り返され、回路表示部品の生成条件の学習が十分に進むまで行う。回路表示部品の生成条件の学習が十分に進んだかどうかは、例えば、ステップＳ４０１〜Ｓ４０３を繰り返した回数が定められた値に達したかどうかで判断する。
【００５１】
［第２のＳＴプログラム生成動作］
つづいて、機械学習装置８２による学習が済んでいる状態のときにプログラミング支援装置１がラダープログラムを変換してＳＴプログラムを生成する第２のＳＴプログラム生成動作について説明する。この第２のＳＴプログラム生成動作において、プログラミング支援装置１は、ラダープログラムをＳＴプログラムに変換するとともに、機械学習装置８２による学習結果を使用して、回路表示部品の生成が必要か否か判断する。すなわち、機械学習装置８２による学習結果は、回路表示部品の生成条件が成立しているか否かの判定処理に用いられる。プログラミング支援装置１は、回路表示部品の生成が必要と判断すると、回路表示部品を生成する。
【００５２】
図１０は、プログラミング支援装置１による第２のＳＴプログラム生成動作を示すフローチャートである。プログラミング支援装置１は、ＳＴプログラムの生成開始を指示する操作を受け付けた時点で機械学習装置８２による学習すなわち回路表示部品を生成する条件の学習が完了している場合、第２のＳＴプログラム生成動作を開始する。
【００５３】
図１０に示すフローチャートは、図２に示すフローチャートからステップＳ４０１〜Ｓ４０３を削除し、ステップＳ１０９〜Ｓ１１１を追加した構成である。図１０に示すフローチャートのステップＳ１０１〜Ｓ１０８は、図２に示すフローチャートのステップＳ１０１〜Ｓ１０８と同一であるため、説明を省略する。
【００５４】
第２のＳＴプログラム生成動作では、ステップＳ１０４の次に、上述したステップＳ１０５〜Ｓ１０７のＳＴプログラム生成処理と並列に、ステップＳ１０９〜Ｓ１１１を実行する。具体的には、Ｐコード解析部８１が、回路表示部品を生成するか否かを判定する（ステップＳ１０９）。ステップＳ１０９において、Ｐコード解析部８１は、機械学習装置８２による学習結果と、変換対象のラダープログラムの解析結果とに基づいて、回路表示部品を生成するか否かを判定する。ここでの変換対象のラダープログラムの解析結果とは、機械学習装置８２が回路表示部品の生成条件を学習する際に使用するものと同様の解析結果であり、具体的には、図６などに示す学習用データの入力１〜入力３と同様のデータである。
【００５５】
回路表示部品を生成すると判断した場合（ステップＳ１０９：Ｙｅｓ）、Ｐコード解析部８１は、回路表示部品を生成して回路表示部品格納部６に格納し（ステップＳ１１０）、変換コード対応テーブルに情報を格納する（ステップＳ１１１）。ステップＳ１１０において、Ｐコード解析部８１は、ラダープログラムから１つのブロックを抽出し、これを回路表示部品として回路表示部品格納部６に格納する。ラダープログラムから抽出する対象のブロックは、ステップＳ１０４で判定対象としたＰコードプログラム内のブロックに対応するブロックであり、例えば、図４に示す手順１でＰコードへ変換される、ラダープログラム内の１ブロックが該当する。ステップＳ１１１で情報を格納する変換コード対応テーブルとは、変換前のラダープログラムと変換後のＳＴプログラムの対応関係を示す各種情報が登録されるテーブルである。より詳細には、変換コード対応テーブルは、変換前のラダープログラムのどの部分（ブロック）と変換後のＳＴプログラムのどの部分（ブロック）が対応しているかを示す情報、ＳＴプログラムを構成するブロックのそれぞれについて、対応する回路表示部品が存在するか否かを示す情報、生成された回路表示部品のそれぞれがＳＴプログラムのどのブロックに対応しているかを示す情報、などが登録されるテーブルである。変換コード対応テーブルは例えば回路表示部品格納部６が保持する。なお、回路表示部品生成部８０または表示部５が変換コード対応テーブルを保持するようにしてもよい。
【００５６】
図１１は、変換コード対応テーブルの一例を示す図である。変換コード対応テーブルを構成する各レコードには、変換対象のラダープログラムを構成する各ブロックの中のいずれか一つについての情報が格納される。つまり、変換コード対応テーブルには、変換対象のラダープログラムを構成するブロックのそれぞれに対応するレコードが含まれる。変換コード対応テーブルの１つのレコードには、ラダープログラム名、ＳＴプログラム名、ＬＤ位置情報、部品有無、部品番号およびＳＴ位置情報が登録される。「ラダープログラム名」は、変換前のラダープログラムの名称であり、「ＳＴプログラム名」は、変換後のＳＴプログラムの名称である。「ＬＤ位置情報」は、変換前のダラープログラム内の位置を示す情報であり、ラダープログラムを構成する各ブロックの中の１つを示す。すなわち、「ＬＤ位置情報」は、ラダープログラム内のどの位置のブロックであるかを示す。「部品有無」は、ＬＤ位置情報が示すブロックに対応する回路表示部品の有無を示す情報である。「部品有無＝ＴＲＵＥ」は回路表示部品が存在することを示し、「部品有無＝ＦＡＬＳＥ」は回路表示部品が存在しないことを示す。「部品番号」は回路表示部品に付与された管理番号であり、「部品有無＝ＴＲＵＥ」の場合は数値が入り、「部品有無＝ＦＡＬＳＥ」の場合は「−」となる。「ＳＴ位置情報」は、同一レコードのＬＤ位置情報が示すラダープログラム内の位置（ブロック）に対応する、ＳＴプログラム内の位置（ブロック）を示す情報である。
【００５７】
回路表示部品を生成しないと判断した場合（ステップＳ１０９：Ｎｏ）、Ｐコード解析部８１は、ステップＳ１１０を実行せずにステップＳ１１１を実行する。なお、変換コード対応テーブルは、ラダープログラムを変換して生成したＳＴプログラムを表示部５が表示する際に利用される。
【００５８】
ステップＳ１１１を実行した後、ＳＴプログラム生成部８は、変換対象のプログラムの全ブロックの解析が終了したかを確認する（ステップＳ１０８）。
【００５９】
なお、本実施の形態では、機械学習が済んでいる場合にプログラミング支援装置１が回路表示部品を生成する必要があるか否かを判断し、必要と判断した場合に回路表示部品を生成することとした。すなわち、第１のＳＴプログラム生成動作では、回路表示部品を生成する必要があるか否かをユーザが判断するが、回路表示部品を実際に生成することは行わないこととした。しかし、第１のＳＴプログラム生成動作においても回路表示部品を生成するようにしてもよい。第１のＳＴプログラム生成動作においても回路表示部品を生成する場合は、例えば、第１のＳＴプログラム生成動作を示す図２のフローチャートのステップＳ４０２でユーザが回路表示部品の生成が必要と判断したときに、上述したステップＳ１１０およびＳ１１１と同様の処理を実行するようにすればよい。または、機械学習が済んでいない状態のときは予め定められた条件を用いて回路表示部品を生成する必要があるか否かを判断し、必要と判断した場合には回路表示部品を生成するようにすればよい。この場合、例えば、図２に示すフローチャートのステップＳ１０５〜Ｓ１０７の処理およびステップＳ４０１〜Ｓ４０３の処理と並列に、図１０に示すステップＳ１０９〜Ｓ１１１と同様の処理を行うようにする。このときの回路表示部品を生成するか否かの判断に用いる条件は、例えば、「ＩＦの入れ子が３つ以上かつ条件文の項数が５以上のＩＦ文がＳＴプログラムに含まれる場合」とする。ＩＦの入れ子の数および条件文の項数は一例であり、これらの数に限定するものではない。
【００６０】
［プログラム表示動作］
つづいて、ＳＴプログラムデータ格納部７に格納されているＳＴプログラムデータ７１を表示部５が表示するプログラム表示動作について説明する。
【００６１】
図１２は、プログラミング支援装置１によるプログラム表示動作を示すフローチャートである。プログラミング支援装置１は、ＳＴプログラムデータ格納部７に格納されているＳＴプログラムデータ７１の表示部５への表示開始を指示する操作をユーザから受け付けると、プログラム表示動作を開始する。
【００６２】
プログラム表示動作では、まず、表示部５が、変換コード対応テーブル（図１１参照）の１レコードを取得し（ステップＳ２０１）、回路表示部品が存在するかを確認する（ステップＳ２０２）。すなわち、表示部５は、ステップＳ２０１では、ステップＳ２０１で取得したレコード内の「部品有無」が、回路表示部品が存在する旨を示しているか（ＴＲＵＥであるか）を確認する。
【００６３】
回路表示部品が存在する場合（ステップＳ２０２：Ｙｅｓ）、表示部５は、該当の回路表示部品、すなわち、ステップＳ２０１で取得したレコード内の「部品番号」に対応する回路表示部品を回路表示部品格納部６から取得する（ステップＳ２０３）。次に、表示部５は、ステップＳ２０３で取得した回路表示部品を表示するとともに（ステップＳ２０４）、ＳＴプログラムを表示する（ステップＳ２０５）。ステップＳ２０５において、表示部５は、ステップＳ２０１で取得したレコード内の「ＳＴ位置情報」が示す、ＳＴプログラム内のブロックを表示する。表示部５は、回路表示部品およびＳＴプログラムを表示する際、回路表示部品がＳＴプログラムのどの部分（ブロック）を表しているのかをユーザが認識可能な形式で表示する。表示部５が、回路表示部品およびＳＴプログラムをどのような形式で表示するかの詳細については別途説明する。
【００６４】
回路表示部品が存在しない場合（ステップＳ２０２：Ｎｏ）、表示部５は、ステップＳ２０３およびＳ２０４は実行せずに、ＳＴプログラムを表示する（ステップＳ２０５）。
【００６５】
表示部５は、ステップＳ２０５を実行した後、変換コード対応テーブルの全レコードの処理が終了したか、すなわち、全レコードについて、ステップＳ２０１〜Ｓ２０５を実行したか、を確認する（ステップＳ２０６）。全レコードの処理が終了した場合（ステップＳ２０６：Ｙｅｓ）、図１２に示す動作は終了となる。一方、全レコードの処理が終了していない場合（ステップＳ２０６：Ｎｏ）、ステップＳ２０１に戻る。
【００６６】
［回路表示部品編集動作］
つづいて、生成済みの回路表示部品を編集する動作について説明する。
【００６７】
図１３は、プログラミング支援装置１による回路表示部品編集動作を示すフローチャートである。プログラミング支援装置１は、回路表示部品格納部６に格納されている回路表示部品の編集開始を指示する操作をユーザから受け付けると、回路表示部品編集動作を開始する。
【００６８】
回路表示部品編集動作では、まず、データ操作部４が、回路表示部品の内容変更操作を受け付ける（ステップＳ３０１）。回路表示部品の内容変更操作は、生成済みの回路表示部品の編集が可能であればどのようなものであってもよい。回路表示部品の内容変更操作受け付ける動作の一例を簡単に説明する。例えば、プログラミング支援装置１は、回路表示部品格納部６に格納されている回路表示部品の編集開始を指示する操作をデータ操作部４で受け付けると、回路表示部品格納部６に格納済みの回路表示部品のリストを表示部５に表示し、編集対象の回路表示部品の指定をデータ操作部４で受け付ける。次に、プログラミング支援装置１は、指定された回路表示部品の編集作業画面を表示部５に表示し、回路表示部品を変更する操作をデータ操作部４が受け付ける。本実施の形態では、回路表示部品はラダープログラムを構成する１つのブロックであるため、回路表示部品を変更する操作は、ラダープログラムを変更する一般的な操作と同様の操作となる。
【００６９】
ユーザによる回路表示部品の内容変更操作が終了すると、変更後の回路表示部品を回路表示部品格納部６に格納する（ステップＳ３０２）。ステップＳ３０２が終了すると、プログラミング支援装置１はステップＳ１０３〜Ｓ１１１を実行するが、これらのステップは、図１０に示すフローチャートのステップＳ１０３〜Ｓ１１１と同様の処理であるため説明は省略する。
【００７０】
つづいて、プログラミング支援装置１が回路表示部品を表示する方法の具体例について説明する。図１４は、プログラミング支援装置１による回路表示部品の表示方法を説明するための図である。上述したように、プログラミング支援装置１は、ラダープログラムをＳＴプログラムに変換する際、回路表示部品の生成条件が成立すると、すなわち、ラダープログラムを構成するあるブロックをＳＴプログラム（ＳＴ言語での記述）に変換すると可読性が落ちると判断すると、回路表示部品を生成する。また、プログラミング支援装置１は、ＳＴプログラムを表示する際、ＳＴプログラム内のブロックに対応する回路表示部品が存在していれば、回路表示部品がＳＴプログラム内のどのブロックに対応するかをユーザが認識可能な形式で表示する。ＳＴプログラムとともに回路表示部品を表示することにより、ＳＴプログラムを確認する際の可読性が落ちるのを防止することができ、ＳＴプログラムのコーディングおよびデバッグといった作業の効率が低下するのを防止できる。図１４に示す例の場合、プログラミング支援装置１の表示部５は、ＳＴプログラムと回路表示部品５０１とを別ウインドウで表示し、また、表示中の回路表示部品５０１がＳＴプログラムのどの部分（ブロック）に対応しているかを、該当部分を破線で囲んでユーザに通知する。
【００７１】
図１４に示す表示方法では、ＳＴプログラムと回路表示部品５０１とを別ウインドウで表示しているが、その他の表示方法として図１５および図１６に示す表示方法としてもよい。図１５は、プログラミング支援装置１による回路表示部品の表示方法の第２の例を示す図、図１６は、プログラミング支援装置１による回路表示部品の表示方法の第３の例を示す図である。
【００７２】
図１５に示す第２の例では、プログラミング支援装置１の表示部５は、回路表示部品５０２を、ＳＴプログラムの対応する箇所に一緒に表示する。図１６に示す第３の例では、プログラミング支援装置１の表示部５は、回路表示部品５０３を、吹き出し表示によりＳＴプログラムの対応する箇所に重ねて表示する。図１６に示す例の場合、表示部５は、例えば、マウスのカーソルがＳＴプログラムの上に置かれた状態のとき、カーソル位置のＳＴプログラムのブロックに対応する回路表示部品が存在していれば、回路表示部品５０３を表示する。表示部５は、ＳＴプログラムのブロックの１つがマウスで選択され、右クリックが行われた場合に、対応する回路表示部品が存在していれば回路表示部品５０３を表示するようにする、などとしてもよい。
【００７３】
また、プログラミング支援装置１は、回路表示部品の表示属性の設定をユーザから受け付ける機能を有する。表示属性の設定は回路表示部品ごとに個別に行うことを可能とする。図１７は、回路表示部品の表示属性設定画面の一例を示す図である。プログラミング支援装置１は、回路表示部品の表示属性の設定をユーザから受け付ける場合、図１７に示すような表示属性設定画面４０１を表示部５で表示し、表示属性の設定を受け付ける。
【００７４】
表示属性設定画面４０１の場合、ユーザは、回路表示部品を表示するか否か（回路表示部品を表示しない）、回路表示部品の表示を塗りつぶす場合に用いる色（塗りつぶし色）、回路表示部品の表示の透過率、回路表示部品の表示の拡縮率、回路表示部品を表示する条件（表示条件）、回路表示部品の編集を禁止するか否か（回路表示部品の編集禁止）、を設定することが可能である。
【００７５】
表示属性設定画面４０１の「回路表示部品を表示しない」のチェックボックスにチェックが入っている場合、プログラミング支援装置１は、ＳＴプログラムを表示する際に該当の回路表示部品を一緒に表示することはしない。
【００７６】
表示条件の「常に表示」のチェックボックスおよび「デバイス指定」のチェックボックスについては、いずれか一方のチェックを可能とする。表示条件の「常に表示」のチェックボックスにチェックが入っている場合、プログラミング支援装置１は、ＳＴプログラムを表示する際に該当の回路表示部品を常に一緒に表示する。表示条件の「デバイス指定」のチェックボックスにチェックが入っている場合、プログラミング支援装置１は、デバイスの指定およびトリガ条件の指定を受け付け、ＳＴプログラムを表示する際には、指定されたデバイスが指定されたトリガ条件を満たす場合に、該当の回路表示部品を常に一緒に表示する。なお、デバイスはプログラマブルロジックコントローラが有する内部メモリの特定の領域を示す。「デバイスが指定されたトリガ条件を満たす場合」とは、「デバイスが示すメモリ領域に格納されたデータがトリガ条件を満たす場合」を意味する。プログラミング支援装置１は、トリガ条件として、図１８に示す８種類の条件式のうちの１つをユーザに指定させる。図１８は、回路表示部品を表示するトリガ条件の一例を示す図である。プログラミング支援装置１は、図１８に示すものとは異なるトリガ条件の指定をユーザから受け付けるようにしても構わない。
【００７７】
以上のように、本実施の形態にかかるプログラミング支援プログラムが実現するプログラミング支援装置１は、ラダープログラムを１ブロックごとにＳＴプログラムに変換する機能を有する。また、プログラミング支援装置１はラダープログラムの１ブロックをＳＴプログラムに変換する際、定められた条件を満たしていれば、回路表示部品を生成する。すなわち、プログラミング支援装置１は、定められた条件（生成条件）を満たす場合は変換後のＳＴプログラムの可読性が低下すると判断し、変換するラダープログラムの１ブロックを回路表示部品として保持する。また、プログラミング支援装置１は、変換後のＳＴプログラムを表示する際、可読性が低下すると判断した箇所と対応付けて、回路表示部品を表示する。また、プログラミング支援装置１は、回路表示部品の生成条件を学習する機械学習装置８２を備え、学習結果に基づいて、回路表示部品を生成するか否かを判断する。プログラミング支援装置１は、ＳＴプログラムの可読性が低い箇所については可読性が高いラダー言語で記述された回路表示部品を生成しておき、ＳＴプログラムを表示する際には生成しておいた回路表示部品を一緒に表示するため、ＳＴプログラムに変換したことに伴い可読性が低下し、変換後のＳＴプログラムに対して行う作業の効率が低下するのを防止できる。
【００７８】
以上の実施の形態に示した構成は、内容の一例を示すものであり、別の公知の技術と組み合わせることも可能であるし、要旨を逸脱しない範囲で、構成の一部を省略、変更することも可能である。
【符号の説明】
【００７９】
１  プログラミング支援装置、２  ラダープログラムデータ格納部、３  Ｐコード生成部、４  データ操作部、５  表示部、６  回路表示部品格納部、７  ＳＴプログラムデータ格納部、８  ＳＴプログラム生成部、２１  ラダープログラムデータ、７１  ＳＴプログラムデータ、８０  回路表示部品生成部、８１  Ｐコード解析部、８２  機械学習装置、８３  ＳＴテンプレート格納部、８４  プログラム変換部、１００  電子計算機、８２１  データ取得部、８２２  状態観測部、８２３  学習部、３０１  変換対象プログラム指定画面、３０２  左矢印ボタン、３０３  右矢印ボタン、３０４  チェックボックス、４０１  表示属性設定画面、５０１〜５０３  回路表示部品。
【要約】
プログラミング支援プログラムは、ラダー言語で記述された第１のプログラムを中間言語で記述された第２のプログラムに変換する第１の変換ステップと、第２のプログラムを手続型言語で記述された第３のプログラムに変換する第２の変換ステップと、第２のプログラムの１ブロックごとの解析結果が定められた条件を満たすと、条件を満たすブロックの内容を表す回路表示部品を生成する回路表示部品生成ステップと、第３のプログラムおよび回路表示部品を、回路表示部品が第３のプログラムのどのブロックに対応するか認識可能な形式で表示する表示ステップと、を電子計算機（１００）に実行させる。【図１】
0006854982.tif 000002
【図２】
0006854982.tif 000003
【図３】
0006854982.tif 000004
【図４】
0006854982.tif 000005
【図５】
0006854982.tif 000006
【図６】
0006854982.tif 000007
【図７】
0006854982.tif 000008
【図８】
0006854982.tif 000009
【図９】
0006854982.tif 000010
【図１０】
0006854982.tif 000011
【図１１】
0006854982.tif 000012
【図１２】
0006854982.tif 000013
【図１３】
0006854982.tif 000014
【図１４】
0006854982.tif 000015
【図１５】
0006854982.tif 000016
【図１６】
0006854982.tif 000017
【図１７】
0006854982.tif 000018
【図１８】
0006854982.tif 000019