(57)【要約】【課題】シーケンスプログラム開発を効果的に支援することが可能な環境を提供する。【解決手段】シーケンスプログラムの開発を支援するサポート装置は、シーケンスプログラムの表示時に、シーケンスプログラムを構成する単位プログラムの呼出し命令を、当該単位プログラムが定義するシーケンスロジックが示す回路に展開して表示し、当該回路を変更する操作に従い、当該回路のシーケンスロジックを変更し、シーケンスプログラムを実行可能コードに変換する場合に、切替えオプションに従い、シーケンスプログラム中の呼出し命令に、変更後のシーケンスロジックのコードおよび呼出し命令コードの一方を割当てる。【選択図】図１
2020201636.tif 000002
【特許請求の範囲】
【請求項１】
制御対象を制御する制御装置で実行されるシーケンスプログラムの開発を支援するサポート装置であって、
前記シーケンスプログラムは、当該シーケンスプログラムを構成する単位プログラムの呼出し命令を含み、
前記サポート装置は、
前記サポート装置に対する操作を受付ける操作受付部と、
前記シーケンスプログラムの表示時に、前記単位プログラムの呼出し命令を、当該単位プログラムが定義するシーケンスロジックが示す回路に展開して表示するモニタ部と、
表示される前記回路を変更する操作に従い、前記シーケンスロジックを変更後の回路を表すシーケンスロジックに変更するエディタ部と、
前記シーケンスプログラムを実行可能コードに変換するコード変換部と、を備え、
前記コード変換部は、
切替えオプションに従い、前記シーケンスプログラム中の呼出し命令に、前記変更後のシーケンスロジックのコードおよび呼出し命令コードの一方を割当てて前記変換を実施する、サポート装置。
【請求項２】
設定操作に従い、前記シーケンスプログラムの呼出し命令に前記切替えオプションを設定する設定部と、を備え、
前記モニタ部は、
前記シーケンスプログラムを表示する場合に、前記呼出し命令に前記切替えオプションが設定されているとき、当該呼出し命令を前記回路に展開して表示する、請求項１に記載のサポート装置。
【請求項３】
前記制御装置は、前記単位プログラムのシーケンスロジックのコードを呼出し可能に格納するライブラリを備え、
前記ライブラリに格納される前記シーケンスロジックのコードを、前記変更後のシーケンスロジックのコードを用いて変更する、請求項１または２に記載のサポート装置。
【請求項４】
前記制御装置は、前記単位プログラムのシーケンスロジックのコードを呼出し可能に格納するライブラリを備え、
前記シーケンスプログラムは、１つ以上の前記呼出し命令を含み、
選択操作に従い、前記１つ以上の呼出し命令のうち、前記ライブラリのシーケンスロジックのコードの変更に用いる前記変更後のシーケンスロジックを有する呼出し命令を選択する、請求項１から３のいずれか１項に記載のサポート装置。
【請求項５】
前記１つ以上の呼出し命令のうち前記エディタによりシーケンスロジックの変更がなされた呼出し命令の一覧を表示する、請求項４に記載のサポート装置。
【請求項６】
前記モニタ部は、
前記制御装置から前記単位プログラムが定義するシーケンスロジックの実行状態を示す回路出力状態を取得するとともに、前記単位プログラムが定義するシーケンスロジックが示す回路および取得した前記回路出力状態に基づいて、前記制御装置における当該シーケンスロジックの実行状態を、前記展開された回路において視覚化する、請求項１から５のいずれか１項に記載のサポート装置。
【請求項７】
制御対象を制御する制御装置で実行されるシーケンスプログラムの開発の支援に向けられたサポートプログラムであって、
前記シーケンスプログラムは、当該シーケンスプログラムを構成する単位プログラムの呼出し命令を含み、
前記サポートプログラムはコンピュータに、
前記コンピュータに対する操作を受付けるステップと、
前記シーケンスプログラムの表示時に、前記単位プログラムの呼出し命令を、当該単位プログラムが定義するシーケンスロジックが示す回路に展開して表示するステップと、
表示される前記回路を変更する操作に従い、前記シーケンスロジックを変更後の回路を表すシーケンスロジックに変更するステップと、
前記シーケンスプログラムを実行可能コードに変換するステップと、を備え、
前記実行可能コードに変換するステップは、
切替えオプションに従い、前記シーケンスプログラム中の呼出し命令に、前記変更後のシーケンスロジックのコードおよび呼出し命令コードの一方を割当てて前記変換を実施するステップを含む、サポートプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、制御対象を制御する制御装置で実行される制御プログラムの開発を支援するサポート装置およびそれを実現するためのサポートプログラムに関する。
【背景技術】
【０００２】
様々な製造現場において、ＰＬＣ（Programmable  Logic  Controller）などの制御装置が導入されている。このような制御装置は、一種のコンピュータであり、製造装置や製造設備などに応じて設計されたユーザープログラムに含まれる制御プログラムが実行される。このような制御プログラムは、制御装置とは別に用意された開発環境にて作成される。開発環境を提供するとともに、制御装置に対して制御プログラムをアップロードし、あるいは、制御装置に対して制御プログラムをダウンロードする機能を提供する装置は、サポート装置とも称される。制御プログラムは、制御シーケンスを表すシーケンスプログラムを含む。
【０００３】
シーケンスプログラムにおいては、共通したシーケンスロジックを、当該ロジックを記述するファンクションブロックとして準備し、シーケンスプログラム中でファンクションブロックの呼出し命令を記述することで、ファンクションブロックの部品化および再利用が可能となり、プログラムの開発効率を高めることができる。
【０００４】
例えば、特開２００１−５５１７号公報（特許文献１）では、コントローラで実行中のプログラムのもととなった、ファンクションブロックを用いて記述した制御ロジック図と、コントローラにおけるプログラムの実行状況を関連付けて表示する装置を開示する。
【０００５】
また、特開２００４−２９５８７２号公報（特許文献２）は、ユーザープログラムの編集対象がどこであっても、また編集箇所が多くなっても（ファンクションブロック編集を含む）、オンラインエディットによる編集処理が行えるユーザープログラムの編集方法を開示する。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００１−５５１７号公報
【特許文献２】特開２００４−２９５８７２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
上記のようにファンクションブロックを部品化されることで、シーケンスプログラムでは部品を呼出す命令コードを記載することでよくなり、シーケンスプログラムの構造が把握しやすくなるとの利点がある。その一方で、プログラムの開発シーンでは、ファンクションブロック内で実際に記述されるロジックコードを開発する環境の充実化が望まれていた。
【０００８】
本開示の一つの目的は、シーケンスプログラム開発を効果的に支援することが可能な環境を提供することである。
【課題を解決するための手段】
【０００９】
本開示の一例は、制御対象を制御する制御装置で実行されるシーケンスプログラムの開発を支援するサポート装置であって、シーケンスプログラムは、当該シーケンスプログラムを構成する単位プログラムの呼出し命令を含み、サポート装置は、サポート装置に対する操作を受付ける操作受付部と、シーケンスプログラムの表示時に、単位プログラムの呼出し命令を、当該単位プログラムが定義するシーケンスロジックが示す回路に展開して表示するモニタ部と、表示される前記回路を変更する操作に従い、シーケンスロジックを変更後の回路を表すシーケンスロジックに変更するエディタ部と、シーケンスプログラムを実行可能コードに変換するコード変換部と、を備え、コード変換部は、切替えオプションに従い、シーケンスプログラム中の呼出し命令に、変更後のシーケンスロジックのコードおよび呼出し命令コードの一方を割当てて変換を実施する。
【００１０】
この開示によれば、シーケンスプログラム中で同じ単位プログラムを呼出す呼出し命令が複数箇所に記述される場合に、ある１つ箇所の呼出し命令はエディタ部による変更後のシーケンスロジックを割当てて、他の箇所の呼出し命令は元の呼出し命令コードのままとして、実行可能なコードに変換することができる。
【００１１】
上述の開示において、サポート装置は、設定操作に従い、シーケンスプログラムの呼出し命令に切替えオプションを設定する設定部と、を備え、モニタ部は、シーケンスプログラムを表示する場合に、呼出し命令に切替えオプションが設定されているとき、当該呼出し命令を回路に展開して表示する。
【００１２】
この開示によれば、シーケンスプログラムの表示時には、シーケンスプログラム中の切替えオプションを設定された呼出し命令において、当該呼出し命令に代えて、呼出されるべき単位プログラムが定義するシーケンスロジックによる回路が表示される。
【００１３】
上述の開示において、制御装置は、単位プログラムのシーケンスロジックのコードを呼出し可能に格納するライブラリを備え、ライブラリに格納されるシーケンスロジックのコードを、変更後のシーケンスロジックのコードを用いて変更する。
【００１４】
この開示によれば、エディタ部による、シーケンスプログラム中の変更後のシーケンスロジックのコードを、制御装置のライブラリ中の対応の単位プログラムのシーケンスロジックのコードの編集に用いることができる。
【００１５】
上述の開示において、上述の開示において、制御装置は、単位プログラムのシーケンスロジックのコードを呼出し可能に格納するライブラリを備え、シーケンスプログラムは、１つ以上の前記呼出し命令を含み、選択操作に従い、１つ以上の呼出し命令のうち、ライブラリのシーケンスロジックのコードの変更に用いる変更後のシーケンスロジックを有する呼出し命令を選択する。
【００１６】
この開示によれば、シーケンスプログラム中の変更後の各呼出し命令に対応のシーケンスロジックのコードのうちから、上記のライブラリ中の対応の単位プログラムのシーケンスロジックのコードの編集に用いるコードを選択することができる。
【００１７】
上述の開示において、１つ以上の呼出し命令のうちエディタ部によりシーケンスロジックの変更がなされた呼出し命令の一覧を表示する。
【００１８】
この開示によれば、ユーザーは、表示される呼出し命令の一覧のうちから、上記のライブラリ中の対応の単位プログラムのシーケンスロジックのコードの編集に用いる呼出し命令（すなわち、エディタ部によりシーケンスロジックの変更がなされた呼出し命令）を選択することができる。
【００１９】
上述の開示において、モニタ部は、制御装置から単位プログラムが定義するシーケンスロジックの実行状態を示す回路出力状態を取得するとともに、単位プログラムが定義するシーケンスロジックが示す回路および取得した回路出力状態に基づいて、制御装置における当該シーケンスロジックの実行状態を、展開された回路において視覚化する。
【００２０】
この開示によれば、制御装置で実行中のシーケンスプログラムの実行状態を、サポート装置で表示される呼出し命令の部分で展開される回路において視覚化して提示することができる。
【００２１】
本開示の一例は、制御対象を制御する制御装置で実行されるシーケンスプログラムの開発の支援に向けられたサポートプログラムであって、シーケンスプログラムは、当該シーケンスプログラムを構成する単位プログラムの呼出し命令を含み、サポートプログラムはコンピュータに、コンピュータに対する操作を受付けるステップと、シーケンスプログラムの表示時に、単位プログラムの呼出し命令を、当該単位プログラムが定義するシーケンスロジックが示す回路に展開して表示するステップと、表示される回路を変更する操作に従い、シーケンスロジックを変更後の回路を表すシーケンスロジックに変更するステップと、シーケンスプログラムを実行可能コードに変換するステップと、を備え、実行可能コードに変換するステップは、切替えオプションに従い、シーケンスプログラム中の呼出し命令に、変更後のシーケンスロジックのコードおよび呼出し命令コードの一方を割当てて変換を実施するステップを含む。
【００２２】
この開示によれば、サポートプログラムが実行されることにより、シーケンスプログラム中で同じ単位プログラムを呼出す呼出し命令が複数箇所に記述される場合に、ある１つ箇所の呼出し命令はエディタ部による変更後のシーケンスロジックを割当てて、他の箇所の呼出し命令は元の呼出し命令コードのままとして、実行可能なコードに変換することができる。
【発明の効果】
【００２３】
本開示の一例によれば、シーケンスプログラム開発を効果的に支援することが可能な環境が提供される。
【図面の簡単な説明】
【００２４】
【図１】本発明の実施の形態に係るサポート装置２００を適用可能なＰＬＣシステム１の構成例を示す模式図である。
【図２】図１に示すＰＬＣシステムを構成するＰＬＣ１００のハードウェア構成例を示す模式図である。
【図３】本発明の実施の形態に係るサポート装置２００のハードウェア構成例を示す模式図である。
【図４】本発明の実施の形態に係るＰＬＣ１００のソフトウェア構成の一例を示す模式図である。
【図５】本発明の実施の形態に係るＰＬＣ１００におけるユーザープログラム１１２と変数テーブル間のデータの参照例を説明する図である。
【図６】本発明の実施の形態に係るサポート装置２００のソフトウェア構成の一例を示す模式図である。
【図７】本発明の実施の形態に係る局所フラグテーブル２７３の一例を模式的に示す図である。
【図８】本発明の実施の形態に係る定義フラグテーブル２７４の一例を模式的に示す図である。
【図９】本発明の実施の形態に係るシーケンスロジックの編集の一例を模式的に示す図である。
【図１０】本発明の実施の形態に係るＦＵＮ/ＦＢ定義２７６の一部を模式的に示す図である。
【図１１】本発明の実施の形態に係るシーケンスプログラム２７１の一部を模式的に示す図である。
【図１２】本発明の実施の形態に係るＦＵＮ/ＦＢ定義２７６の呼出し命令を用いたシーケンスプログラム２７１の一例を模式的に示す図である。
【図１３】本発明の実施の形態に係る処理の概要を示すフローチャートである。
【図１４】本発明の実施の形態に係るオンラインエディット処理を説明するフローチャートである。
【図１５】本発明の実施の形態に係るビルド処理を説明するフローチャートである。
【図１６】本発明の実施の形態に従うオンラインエディット機能によって転送された制御プログラムの実行開始タイミングを説明するための図である。
【図１７】本発明の実施の形態に係る開発支援環境により奏される利点を説明する図である。
【図１８】本発明の実施の形態に係る開発支援環境により奏される利点を説明する図である。
【図１９】本発明の実施の形態に係る開発支援環境により奏される利点を説明する図である。
【図２０】本実施の形態に係るシーケンス回路情報の一例を模式的に示す図である。
【図２１】本開示の適用例を模式的に説明するための図である。
【発明を実施するための形態】
【００２５】
本発明の実施の形態について、図面を参照しながら詳細に説明する。なお、図中の同一または相当部分については、同一符号を付してその説明は繰返さない。
【００２６】
［§．適用例]
まず、本発明が適用される場面の一例について説明する。図２１は、本開示の適用例を模式的に説明するための図である。図２１を参照して、本開示に係るサポート装置２００は、製造現場の製造設備等の対象を制御する制御装置と接続され得る。両者は、例えばＵＳＢ（Universal  Serial  Bus）により通信する。サポート装置２００は、制御装置で実行される制御プログラムの開発を支援する環境を提供する。以下の説明においては、制御装置の典型例としてＰＬＣ１００を示すが、ＰＬＣに限定されない。
【００２７】
サポート装置２００は、制御プログラムを含む各種ユーザープログラムを開発する環境を提供する。開発対象のプログラムは、例えば国際規格ＩＥＣ６１１３１−３に従うプログラムを含み得る。国際規格ＩＥＣ６１１３１−３おいては、制御プログラムを含むＰＬＣアプリケーションのプログラミング言語として、ラダーダイアグラム（ＬＤ：Ladder  Diagram）、ファンクションブロックダイアグラム（ＦＢＤ：Function  Block  Diagram）、シーケンシャルファンクションチャート（ＳＦＣ：Sequential  Function  Chart）、インストラクションリスト（ＩＬ：Instruction  List）、ストラクチャードテキスト（ＳＴ：Structured Text）の５種類を規定する。本実施の形態に係る制御プログラムは、シーケンスプログラム２７１であって、いずれのプログラミング言語で記述されたシーケンスプログラム２７１であってもよい。以下では、典型例として、ラダーダイアグラムで記述されたシーケンスプログラム２７１について説明する。
【００２８】
ＰＬＣ１００は、関数およびファンクションブロックを含む複数の単位プログラムの実行可能コードを格納するライブラリ２７５を備える。シーケンスプログラム２７１は、当該シーケンスプログラム２７１を構成する１または複数の単位プログラムを呼出す呼出し命令を含む。したがって、ＰＬＣ１００で、シーケンスプログラム２７１が実行中に、呼出し命令が実行されることにより、ライブラリ２７５から対応の単位プログラムが呼出されて実行される。
【００２９】
サポート装置２００は、ＰＬＣ１００で実行されるシーケンスプログラム２７１を開発する環境を提供する。開発環境は、モニタ２２４、エディタ２２２、ビルダ２２３などを備える。モニタ２２４は、シーケンスプログラム２７１をディスプレイ２１４に表示する時に、単位プログラムの呼出し命令を、当該単位プログラムが定義するシーケンスロジックが示す回路に展開して表示する。エディタ２２２は、ディスプレイ２１４に表示される回路を変更する操作に従い、回路のシーケンスロジックを変更する。ビルダ２２３は、シーケンスプログラム２７１をＰＬＣ１００で実行可能なコードに変換する場合に、切替えオプションに従い、シーケンスプログラム２７１中の呼出し命令に、変更後のシーケンスロジックのコードおよび呼出し命令コードの一方を割当てながら当該変換を実施する。
【００３０】
これにより、例えばシーケンスプログラム２７１の編集時には、呼出される単位プログラムを、当該単位プログラムが定義するシーケンスロジックが表す回路に展開して表示することができる。このことは、シーケンスプログラム２７１の編集時など開発現場において、呼出し命令で呼出される単位プログラム内で実際に記述されるシーケンスロジックコードをシーケンス回路で把握することを可能にする。
【００３１】
また、表示されたシーケンス回路を変更する操作をすることにより、ユーザーは、当該回路の元のシーケンスロジックを、変更後の回路が示すシーケンスロジックに変更することができる。
【００３２】
シーケンスプログラム２７１を実行可能なコードを変換する場合は、切替えオプションにより、各呼出し命令に、変更後のシーケンスロジックのコードおよび呼出し命令コードの一方を割当てながら実行可能なコードに変換することができる。このことは、切替えオプションの設定により、所望する呼出し命令についてのみ、変更後のシーケンスロジックのコードが割当てられた実行可能コードの取得を可能にする。したがって、ＰＬＣ１００において、当該実行可能コードに変換後のシーケンスプログラム２７１が実行される場合は、元は同じ単位プログラムを呼出す命令コードが複数記述されていた場合でも、ある１の呼出し命令コードではユーザーによる変更後のシーケンスロジックコードが実行させながら、他の１の命令コードでは、ライブラリ２７５から読出されたシーケンスロジックコードが実行させることができる。これにより、共通化した部品である単位プログラムを、シーケンスプログラム２７１の使用箇所毎に変更することができる。
【００３３】
また、サポート装置２００は、ＰＬＣ１００のライブラリ２７５に格納される単位プログラムのシーケンスロジックのコードを、変更後のシーケンスロジックのコードを用いて変更する。これにより、上記のある１の呼出し命令コードとして実行された変更後のシーケンスロジックコードの実行結果が適切であると確認できたときは、ユーザーは、ライブラリ２７５に格納される対応の単位プログラムのシーケンスロジックのコードを、適切と確認できた変更後のシーケンスロジックコードに変更（更新）することができる。これにより、シーケンスプログラム２７１において共通化した部品である単位プログラムが複数箇所で呼出される場合であっても、１箇所だけを、実行されるシーケンスロジックコードを他の箇所を異ならせて、シーケンスプログラム２７１を実行させて、その結果を得た上で、ライブラリ２７５の単位プログラムのシーケンスロジックのコードを変更することが可能となる。
【００３４】
以下、本発明のより具体的な応用例として、本実施の形態に係るサポート装置２００のより詳細な構成および処理について説明する。
【００３５】
＜Ａ．ソフトウェア構成＞
上記に述べた適用例を実現するためのソフトウェア構成を説明する。図６は、本発明の実施の形態に係るサポート装置２００のソフトウェア構成の一例を示す模式図である。
【００３６】
このソフトウェア構成においては、制御対象に応じて任意に作成されるユーザープログラム（シーケンスプログラム２７１）の制御装置における実行状態を確認する機能である「オンラインモニタ」が提供される。オンラインモニタは、上記に述べたパワーフロー表示を含む概念である。
【００３７】
また、ユーザープログラム（シーケンスプログラム２７１）の制御装置で実行されるシーケンスプログラム２７１を編集して更新する機能である「オンラインエディタ」も提供される。
【００３８】
本実施の形態では、サポート装置２００は、「オンライエディタ」と、パワーフロー表示を含む「オンラインモニタ」の両方の環境を提供するように構成されるが、いずれか１方の環境を提供するとしてもよい。例えば、サポート装置２００は、「オンラインモニタ」は備えずに「オンライエディタ」のみを提供するよう構成されてもよい。
【００３９】
図６では、ＰＬＣ１００とのデータの遣り取りと関連づけて、サポート装置２００のソフトウェア構成が示される。図６を参照して、サポート装置２００は、シーケンスプログラム２７１から中間コード２７２を生成し、ＰＬＣ１００に転送する。ＰＬＣ１００は、サポート装置２００から受信した中間コード２７２をネイティブコードに変換する。ＰＬＣ１００の演算処理部は、ネイティブコードを実行する。ネイティブコードの実行により、制御対象に対する制御が実現される。シーケンスプログラム２７１は、当該シーケンスプログラム２７１を構成する単位プログラムを呼出す呼出し命令部を含む。本実施の形態では、単位プログラムとして、ファンクション（ＦＵＮ：function）またはファンクションブロック（ＦＢ：Function  Block）の定義であるＦＵＮ／ＦＢ定義を例示する。ＦＵＮ／ＦＢ定義は、シーケンスプログラム２７１の記述を効率化するための共通部品として、ＰＬＣ１００のライブラリ等に登録されて、シーケンスプログラム２７１の実行時には適宜、ライブラリから呼出されて定義されたシーケンスロジックが実行される。なお、単位プログラムの定義内容は、当該単位ブロックを記述するプログラム言語の仕様に依存するが、本実施の形態では、上記のラダーダイアグラムに従うシーケンスロジックによる回路構成を規定する。この回路構成は、主に、論理的な回路構成を含む。
【００４０】
また、サポート装置２００は、サポート装置２００においてモニタ２２４による画面表示を実現するためのオブジェクトコード２７８８を記憶部２０１に格納する。サポート装置２００の記憶部２０１には、さらに、ＰＬＣ１００用のユーザープログラムから生成され、シーケンスプログラムの回路構成を規定するシーケンス回路情報２７９および定義回路情報２８０が格納される。定義回路情報２８０は、上記のＦＵＮ／ＦＢ定義により規定される回路構成を示す。
【００４１】
サポート装置２００は、シーケンスプログラム２７１を作成するためのエディタ２２２を備える。エディット時には、エディタ２２２が有するオプション設定モジュール２３１１は、操作部２０３から操作受付部２２１が受付けたユーザー操作に従い、シーケンスプログラム２７１における単位プログラムの呼出し命令のうちから１つ以上を選択し、選択された呼出し命令に、表示態様の切替えオプションを設定する。
【００４２】
したがって、エディット時は、モニタ２２４によりシーケンスプログラム２７１が表示されながら命令コードの追加、削除、変更等がなされるが、その場合に、１つ以上の呼出し命令は、設定された上記のオプションに基づき対応の単位プログラムが定義するシーケンスロジックが示す回路構成の画像に切替えられる。これにより、単位プログラムの呼出し命令として、当該単位プログラムが規定する回路構成がインライン展開されて表示される。このように、ユーザー操作により、１つ以上の呼出し命令部に選択的にオプションが設定されることにより、１つ以上の呼出し命令部において対応の単位プログラムが規定する回路構成が視覚化される。
【００４３】
このような視覚化は、オンラインエディット時にも実施される。オンラインエディタ２３２の局所エディタ２３３は、シーケンスプログラム２７１のインライン展開された回路構成の画像に対する変更の操作に従い、シーケンスプログラム２７１を編集（変更）する。また、定義エディタ２３４は、インライン展開された回路構成の画像を変更操作に従い、ＰＬＣ１００のライブラリに登録されたＦＵＮ／ＦＢ定義の定義内容（シーケンスロジック）を編集（変更）する。
【００４４】
また、サポート装置２００は、オンラインモニタを提供するためのオンラインモニタモジュール２３８を有している。オンラインモニタモジュール２３８は、ＰＬＣ１００からネイティブコードの実行状態を示す回路出力状態１５６（後述する）を取得する。すなわち、サポート装置２００（オンラインモニタモジュール２３８）は、ＰＬＣ１００との間で、回路出力状態１５６を遣り取りする。そして、サポート装置２００のオンラインモニタモジュール２３８は、シーケンス回路情報２７９、定義回路情報２８０および取得した回路出力状態１５６に基づいて、ＰＬＣ１００におけるシーケンスプログラムの実行状態を視覚化する（すなわち、オンラインモニタを提供する）。この実行状態の視覚化によって、ユーザーが、シーケンスロジックを編集（変更）するための判断を支援する情報が提供される。
【００４５】
このような、インライン展開のオプションを備えるエディタおよびＰＬＣ１００で実行状態を視覚化するオンラインモニタにより、単位プログラムおよびシーケンスプログラム等の効率的な開発を支援する環境が提供される。
【００４６】
以下、本発明のより具体的な応用例として、本実施の形態に係るサポート装置２００のより詳細な構成および処理について説明する。
【００４７】
＜Ｂ．システム構成＞
図１は、本実施の形態に従うサポート装置２００を適用可能なＰＬＣシステム１の構成例を示す模式図である。
【００４８】
図１を参照して、ＰＬＣシステム１は、複数のＰＬＣ１００−１，１００−２，１００−３，１００−４，…（以下、「ＰＬＣ１００」とも総称する。）を含んでいる。ＰＬＣ１００の各々は、リレー，センサー等のフィールド機器である制御対象を制御する制御装置の一例である。サポート装置２００は、ＰＬＣ１００に接続可能であり、ＰＬＣ１００の制御プログラムの開発を支援する環境を提供する。ＰＬＣシステム１は、１台のＰＬＣ１００を含む構成であってもよい。以下では、説明を簡単にするために、１台のＰＬＣ１００を対象にした開発環境を説明する。
【００４９】
ＰＬＣ１００は、典型的には、制御プログラムを含む各種プログラムを実行する主体であるＣＰＵユニット１０と、ＣＰＵユニット１０などへ電力を供給する電源ユニット１２と、フィールドからの信号を遣り取りするＩ／Ｏ（Input/Output）ユニット１４とを含む。Ｉ／Ｏユニット１４は、ＣＰＵユニット１０とシステムバス１１を介して接続されている。
【００５０】
サポート装置２００が提供する開発支援環境は、制御プログラムのエディタ（編集）、デバッカ、シミュレータおよびこれらの出力情報をディスプレイ等のモニタに出力するためのモニタ機能等を有し得る。サポート装置２００は、さらに、運転中のＰＬＣ１００の状態値を取得し、ディスプレイ等のモニタに出力する機能なども備える。
【００５１】
記録媒体２５０に格納されたアプリケーションプログラムであるサポートプログラムがサポート装置２００にインストールされることで、上述したような開発支援環境のための各種機能が実現される。記録媒体２５０に代えて、外部のサーバ装置などからネットワークを介して、サポートプログラムをダウンロードするようにしてもよい。サポート装置２００は、一例として、接続ケーブルを介してＰＬＣ１００のＣＰＵユニット１０と接続される。サポート装置２００は、典型的には、パーソナルコンピュータで実現される。
【００５２】
＜Ｃ．ＰＬＣ１００のハードウェア構成例＞
次に、ＰＬＣ１００のハードウェア構成例について説明する。図２は、図１に示すＰＬＣシステムを構成するＰＬＣ１００のハードウェア構成例を示す模式図である。
【００５３】
図２を参照して、ＰＬＣ１００は、予めインストールされたプログラムをプロセッサが実行することで、制御対象に対する制御を実現する。より具体的には、ＰＬＣ１００は、ＣＰＵ（Central Processing Unit）やＭＰＵ（Micro-Processing Unit）などのプロセッサ１０２と、チップセット１０４と、メインメモリ１０６と、フラッシュメモリ１０８と、ＵＳＢインターフェイス１１６と、メモリカードインターフェイス１１８と、内部バスコントローラ１２２と、フィールドバスコントローラ１２４とを含む。フラッシュメモリ１０８は、システムプログラム１１０およびユーザープログラム１１２を格納する。
【００５４】
プロセッサ１０２は、フラッシュメモリ１０８に格納されたシステムプログラム１１０およびユーザープログラム１１２を読み出して、メインメモリ１０６に展開して実行することで、制御対象に対する制御を実現する。本明細書において、「制御プログラム」は、御対象に応じて任意に設計されるプログラムの一種であり、システムプログラム１１０およびユーザープログラム１１２を包含する概念である。但し、実装方式においては、制御プログラムは、ユーザープログラム１１２のみを含む場合もある。
【００５５】
システムプログラム１１０は、データの入出力処理や実行タイミング制御などの、ＰＬＣ１００の基本的な機能を提供するための命令コードを含む。ユーザープログラム１１２は、シーケンス制御を実行するためのシーケンスプログラム１１２Ａ（シーケンスプログラム２７１に対応）およびライブラリ２７５を含む。ライブラリ２７５は、シーケンスプログラム１１２Ａの実行時にシーケンスプログラム１１２Ａから呼出し可能な各種関数および１または複数のＦＵＮ/ＦＢ定義２７６を含む。
【００５６】
なお、ユーザープログラム１１２は、モーションプログラム等の他のプログラムを含み得るが、本実施の形態では、説明のためにシーケンスプログラム１１２Ａを主体に説明する。また、本実施の形態では、シーケンスプログラム１１２Ａとして、例えばＩＥＣ６１１３１−３等で規定されるラダー言語により、ラダーロジック回路（論理回路）またはラダーロジック回路の組合せにより表される演算の命令コードを記述する「ラダープログラム」を含む。
【００５７】
ライブラリ２７５のＦＵＮ/ＦＢ定義２７６は、ＦＵＮまたはＦＢの定義内容を表す。ＦＵＮ／ＦＢ定義２７６が定義するＦＵＮまたはＦＢは、シーケンスプログラムを構成する単位プログラム（以下、ＰＯＵ（Program  Organization  Unit）とも称する）に相当する。ＦＵＮまたはＦＢにより定義されるシーケンスロジックのコードは、論理回路または論理回路の組合せからなるシーケンスロジック回路（例えば、ラダーロジック回路）を表す。
【００５８】
チップセット１０４は、各コンポーネントを制御することで、ＰＬＣ１００全体としての処理を実現する。
【００５９】
内部バスコントローラ１２２は、ＰＬＣ１００と内部バスを通じて連結されるＩ／Ｏユニット１４との間でデータを遣り取りするインターフェイスである。フィールドバスコントローラ１２４は、ＰＬＣ１００と図示しないフィールドバスを通じて連結されるＩ／Ｏユニット１６との間でデータを遣り取りするインターフェイスである。内部バスコントローラ１２２およびフィールドバスコントローラ１２４は、対応のＩ／Ｏユニット１４および１６にそれぞれ入力される状態値を取得するとともに、プロセッサ１０２での演算結果を対応のＩ／Ｏユニット１４および１６から指令値としてそれぞれ出力する。
【００６０】
ＵＳＢ（Universal Serial Bus）インターフェイス１１６は、ＵＳＢによりデータの遣り取りを制御する。サポート装置２００は、ＵＳＢインターフェイス１１６を介してＰＬＣ１００と通信する。メモリカードインターフェイス１１８は、メモリカード１２０を着脱可能に構成されており、メモリカード１２０に対してデータを書込み、メモリカード１２０からデータを読出すことが可能になっている。
【００６１】
図２には、プロセッサ１０２がプログラムを実行することで必要な機能が提供される構成例を示したが、これらの提供される機能の一部または全部を、専用のハードウェア回路（例えば、ＡＳＩＣ（Application Specific Integrated Circuit）またはＦＰＧＡ（Fie ld-Programmable Gate Array）など）を用いて実装してもよい。あるいは、ＰＬＣ１００の主要部を、汎用的なアーキテクチャに従うハードウェア（例えば、汎用パソコンをベースとした産業用パソコン）を用いて実現してもよい。この場合には、仮想化技術を用いて、用途の異なる複数のＯＳ（Operating System）を並列的に実行させるとともに、各ＯＳ上で必要なアプリケーションを実行させるようにしてもよい。
【００６２】
＜Ｄ．サポート装置２００のハードウェア構成例＞
図３は、本発明の実施の形態に係るサポート装置２００のハードウェア構成例を示す模式図である。図３を参照して、サポート装置２００は、典型的には、汎用のコンピュータで構成される。なお、ＰＬＣ１００が配置される製造現場における保守性の観点からは、可搬性に優れたノート型のパーソナルコンピュータが好ましい。
【００６３】
サポート装置２００は、記憶部２０１と、オペレーティングシステム（ＯＳ）を含む各種プログラムを実行するＣＰＵ２０２とを備える。記憶部２０１は、ＢＩＯＳや各種データを格納するＲＯＭ（Read  Only  Memory）１０４と、ＣＰＵ２０２でのプログラムの実行に必要なデータを格納するための作業領域を提供するメモリＲＡＭ（Random  Access  Memory）２０６と、ＣＰＵ２０２で実行されるプログラムなどを不揮発的に格納するハードディスク（ＨＤＤ）２０８とを含む。
【００６４】
サポート装置２００は、さらに、サポート装置２００に指示を入力するためにユーザーが操作するキーボード２１０およびマウス２１２を含む操作部２０３、および情報をユーザーに提示するためのディスプレイ２１４を含む。サポート装置２００は、ＰＬＣ１００（ＣＰＵユニット１０）などと通信するための通信インターフェイス２１８を含む。通信インターフェイス２１８は、ＵＳＢインターフェイス１１６と通信するためにＵＳＢ通信モジュールを含み得る。
【００６５】
サポート装置２００は、記録媒体２５０からそれに格納されている開発支援環境を提供するためのサポートプログラムを読み取るための光学記録媒体読取装置２１６を含む。
【００６６】
図３には、ＣＰＵ２０２等のプロセッサがプログラムを実行することで必要な機能が提供される構成例を示したが、これらの提供される機能の一部または全部を、専用のハードウェア回路（例えば、ＡＳＩＣまたはＦＰＧＡなど）を用いて実装してもよい。この場合には、仮想化技術を用いて、用途の異なる複数のＯＳを並列的に実行させるとともに、各ＯＳ上で必要なアプリケーションを実行させるようにしてもよい。
【００６７】
＜Ｅ．ＰＬＣのソフトウェア構成例＞
図４は、本発明の実施の形態に係るＰＬＣ１００のソフトウェア構成の一例を示す模式図である。
【００６８】
図４を参照して、ＰＬＣ１００においては、ハイパーバイザ１１１がＰＬＣ１００のハードウェアリソースを管理するとともに、リアルタイムＯＳ１１４および汎用ＯＳ１１６１に対して、これらのハードウェアリソースを調停しながら割当てることで、共通のハードウェアリソース上で、互いに独立したリアルタイムＯＳ１１４および汎用ＯＳ１１６１を実行させる。すなわち、ハイパーバイザ１１１を用いて、複数の異なるＯＳを実行する仮想化環境を実現する。リアルタイムＯＳ１１４と汎用ＯＳ１１６１との間は、ハイパーバイザ１１１を介して、論理的なネットワークが構成されている。
【００６９】
リアルタイムＯＳ１１４では、シーケンスプログラムを含むユーザープログラム１１２が実行される。ユーザープログラム１１２の実行にあたって、タスクスケジューラ１１４２と、プログラムマネージャ１１４４と、Ｉ／Ｏ（Input/Output）制御プロセス１１４６とが連係する。ユーザープログラム１１２は、予め実行形式に変換されており、この実行形式のコードが、タスクスケジューラ１１４２、プログラムマネージャ１１４４、Ｉ／Ｏ制御プロセス１１４６と連係しつつ、制御対象からの信号の取得、制御ロジックの実行、実行結果の反映（アクチュエータの制御）を繰返す。
【００７０】
Ｉ／Ｏ制御プロセス１１４６は、制御対象との間で各種信号を遣り取りする処理を司る。タスクスケジューラ１１４２は、ユーザープログラム１１２に含まれるタスク毎に、実行周期または実行タイミングを制御する。本実施の形態では、タスクスケジューラ１１４２は、タスクの実行周期に従う開始タイミングが到来した場合に、プログラムマネージャ１１４４からタイミング信号を受付けたとき、当該タスクを実行する。プログラムマネージャ１１４４のタイミング信号を用いた実行制御の詳細は後述する。
【００７１】
汎用ＯＳ１１６１では、任意のユーザーアプリケーション１１６４および汎用アプリケーション１１６２が実行される。
【００７２】
ユーザーアプリケーション１１６４は、典型的には、リアルタイムＯＳ１１４で実行されるユーザープログラム１１２の開発ベンダなどによって作成されるアプリケーションであり、ユーザープログラム１１２の処理結果に係るデータおよび／または処理に必要なデータを取得および／または提供するような処理を実行する。
【００７３】
汎用アプリケーション１１６２は、汎用ＯＳ１１６１で実行可能な標準的なアプリケーションであり、ユーザーアプリケーション１１６４と連係することで、汎用的な処理や機能を用いて、より少ない工数でシステムを構築することができる。
【００７４】
＜Ｆ．ＰＬＣ１００のソフトウェア間の参照例＞
図５は、本発明の実施の形態に係るＰＬＣ１００におけるユーザープログラム１１２と変数テーブル間のデータの参照例を説明する図である。
【００７５】
図５を参照して、ＰＬＣ１００では、制御プログラムを実行する場合に、システムプログラム１１０およびユーザープログラム１１２が実行される。システムプログラム１１０は、その機能の一部として、Ｉ／Ｏモジュール１６０を有する。Ｉ／Ｏモジュール１６０は、Ｉ／Ｏユニットが制御対象の装置が設けられたフィールド側と遣り取りするデータをグローバル変数テーブル１５０と関連付ける。
【００７６】
ＰＬＣ１００では、変数プログラミングが可能になっており、ユーザープログラム１１２は、グローバル変数テーブル１５０において定義されたフィールドデータに関連付けられた変数値を用いて、各種処理が実行可能になっている。
【００７７】
ユーザープログラム１１２のシーケンスプログラム１１２Ａは、主として、ラダーセクション１３０と、ライブラリ２７５とから構成される。ユーザープログラム１１２は、プロセッサ１０２により実行可能な形式のネイティブコード１５４を表す。
【００７８】
ラダーセクション１３０は、ラダー言語で記述されたラダープログラムを含む。ラダープログラムに含まれた呼出し命令が実行されると、ライブラリ２７５に含まれるＦＵＮ/ＦＢ定義２７６が呼び出されて実行され、その実行結果は呼び出し元のラダープログラムに戻される。
【００７９】
＜Ｇ．サポート装置２００のソフトウェア構成例＞
図６は、本発明の実施の形態に係るサポート装置２００のソフトウェア構成の一例を示す模式図である。図６では、サポート装置２００のソフトウェア構成に関連付けて、記憶部２０１に格納される情報の一例が示される。図７は、本発明の実施の形態に係る局所フラグテーブル２７３の一例を模式的に示す図である。図８は、本発明の実施の形態に係る定義フラグテーブル２７４の一例を模式的に示す図である。図９は、本発明の実施の形態に係るシーケンスロジックの編集の一例を模式的に示す図である。
【００８０】
（ｇ１．サポート装置２００に格納される情報）
記憶部２０１に格納される情報は、プログラムソースコードであるシーケンスプログラム２７１、シーケンスプログラム２７１から生成される中間コード２７２、局所フラグテーブル２７３、定義フラグテーブル２７４、オブジェクトコード２７８８、シーケンス回路情報２７９および定義回路情報２８０を含む。
【００８１】
図７を参照して、局所フラグテーブル２７３では、シーケンスプログラム２７１中の呼出し命令により呼出されるＦＵＮ/ＦＢ定義２７６であって、シーケンスプログラム２７１の中で、そのシーケンスロジック（シーケンス回路）が展開（以下、インライン展開ともいう）されるＦＵＮ/ＦＢ定義２７６のそれぞれについて、情報が登録される。このＦＵＮ/ＦＢ定義２７６のそれぞれに対応する情報は、当該ＦＵＮ/ＦＢ定義２７６を識別する名称（ＰＯＵ名等）である呼出名前２７３１、シーケンスプログラム２７１において当該ＦＵＮ/ＦＢ定義２７６の呼出し命令が出現する行（ライン）の位置２７３２、および非同期フラグ２７３３を関連付けて含む。
【００８２】
図８を参照して、定義フラグテーブル２７４は、ライブラリ２７５のＦＵＮ/ＦＢ定義２７６毎に、当該ＦＵＮ/ＦＢ定義２７６の識別子（ＰＯＵ名等）である定義名２７４１、および定義非同期フラグ２７４２を関連付けて登録する。
【００８３】
ここで、非同期フラグ２７３３および定義非同期フラグ２７４２について説明する。サポート装置２００は、ユーザー操作に従い、シーケンスプログラム２７１においてインライン展開されたシーケンスロジックを変更する（以下、局所エディットという）。また、サポート装置２００は、ライブラリ２７５の対応のＦＵＮ/ＦＢ定義２７６の定義内容を変更する（以下、定義エディットという）。このような局所エディットまたは定義エディットがなされることにより、シーケンスプログラム２７１でインライン展開されるＦＵＮ/ＦＢ定義２７６のシーケンスロジックと、ライブラリ２７５の対応のＦＵＮ/ＦＢ定義２７６のシーケンスロジックとが一致しない状態（以下、非同期ともいう）が生じ得て、非同期が解消されることで両者のシーケンスロジックが一致する状態（以下、同期ともいう）となる。本来は、両者のシーケンスロジックは同期している。したがって、非同期フラグ２７３３は、シーケンスプログラム２７１でインライン展開されたシーケンスロジックが非同期であるとき「１」がセットされて、同期しているとき「０」がセットされる。同様に、定義非同期フラグ２７４２は、対応のＦＵＮ/ＦＢ定義２７６が定義するシーケンスロジックが非同期であるとき「１」がセットされて、同期しているとき「０」がセットされる。
【００８４】
また、図８を参照して、定義フラグテーブル２７４のＦＵＮ/ＦＢ定義２７６の定義名２７４１は、シーケンスプログラム２７１中の呼出し命令に設定された後述するオプション２７７と紐付けされている。
【００８５】
オブジェクトコード２７８８、シーケンス回路情報２７９および定義回路情報２８０は、制御プログラムであるシーケンスプログラム２７１が表すシーケンスロジック回路をディスプレイ２１４に表示するために用いられる。具体的には、オブジェクトコード２７８８は、シーケンスロジック回路の画面表示を実現するためのオブジェクトコードを示す。シーケンス回路情報２７９は、シーケンスプログラム２７１のシーケンスロジック回路構成を規定する。定義回路情報２８０は、ライブラリ２７５のＦＵＮ/ＦＢ定義２７６の定義内容であるシーケンスロジック２７６１（後述する）から生成されて、シーケンスロジック２７６１が表す回路構成を規定する。
【００８６】
（ｇ２．開発支援環境を提供するためのモジュール）
図６を参照して、開発支援環境を提供するためのサポートプログラムは、実行されることによりインライン展開を含むオンラインモニタを実現するサポートプログラム７００と、実行されることによりオンラインエディットを実現するサポートプログラム７１０を含む。サポートプログラム７００は、操作部２０３を介したユーザー操作を受付けるための操作受付部２２１およびモニタ２２４などを実現するプログラムを含む。サポートプログラム７１０は、操作受付部２２１およびモニタ２２４などを実現するプログラムを含む。これらモジュールは、プログラムまたは回路、またはプログラムと回路の組合せからなる。
【００８７】
エディタ２２２は、ユーザー操作に従いシーケンスプログラム２７１を含むユーザープログラムの編集（作成）を実施する。エディタ２２２は、オンラインエディタ２３２を含む。オンラインエディタ２３２は、ＰＬＣ１００の制御プログラム等をＰＬＣ１００の制御対象を停止させることなくエディットする環境を提供する。つまり、ＰＬＣ１００が運用される製造現場等では、制御対象を停止させることが容易ではない場合も多い。このような背景のもと、ＰＬＣ１００で実行される制御プログラムを一部変更したいような場合であっても、ＰＬＣ１００を一旦停止させなければ、制御プログラムを変更できないということであれば、使い勝手が悪い。そのため、オンラインエディタ２３２は、ＰＬＣ１００と連携しながら、ＰＬＣ１００の運転中に実行される制御プログラムの一部を書き換える（編集する）ことを可能にする。
【００８８】
エディタ２２２は、オンラインエディタ２３２とは異なり、ＰＬＣ１００（またはＰＬＣ１００の運転状態）に依存せずに、制御プログラムを編集することもできる（オフラインエディットともいう）。オフラインエディット時は、エディタ２２２は、操作受付部２２１が受付けた操作内容に従い、シーケンスプログラム２７１を含むユーザープログラムを作成する。作成されたプログラムは、ソースプログラムであるシーケンスプログラム２７１として記憶部２０１に格納される。また、オフラインエディット時は、オプション設定モジュール２３１１は、ユーザー操作内容に従い、シーケンスプログラム２７１における呼出し命令のうちから選択される１つ以上に、表示態様の切替えを指示するオプション２７７を設定する。
【００８９】
オンラインエディタ２３２は、局所エディットを実施する局所エディタ２３３および定義エディットを実施する定義エディタ２３４を含む。
【００９０】
図９は、本発明の実施の形態に係るエディットの一例を模式的に示す図である。図９を参照して、シーケンスプログラム２７１のシーケンスロジックまたはＦＵＮ/ＦＢ定義２７６のシーケンスロジック２７６１（後述する）が、例えば図９（Ａ）のような回路構成を規定するケースを説明する。このケースでは、シーケンスロジックの回路構成を示す画像がディスプレイ２１４に表示される。ユーザーは、エディタ２２２を用いて、画像を操作することで、図９（Ａ）の回路のシーケンスロジック２７６１を、例えば図９（Ｂ）または図９（Ｃ）のように、新たな回路が追加されたロジックに変更することができる。
【００９１】
適用例として、例えば、オンラインモニタにより表示される回路出力状態１５６をモニタした結果、ユーザーは制御対象の故障で回路の一部にエラーが生じたと判断した場合は、図９（Ｃ）に示すように、故障に関係する回路部品をバイパスする回路を追加するように表示画像を変更する。なお、オンラインエディタ２３２による編集の適用例は、故障等のエラー対応に限定されない。
【００９２】
ビルダ２２３は、「コード変換部」の一実施例である。ビルダ２２３は、シーケンスプログラム２７１をビルド処理（パース、最適化、コンパイルなどを含む）して中間コード２７２を生成する。サポート装置２００は、中間コード２７２を、ＰＬＣ１００にロードする。ＰＬＣ１００のプロセッサ１０２は、中間コードから、ライブラリ２７５のＦＵＮ/ＦＢ定義２７６の定義内容を参照しながら、ネイティブコード１５４を生成する。ネイティブコード１５４は、ＰＬＣ１００が直接解釈して実行することができる実行可能コードである。また、中間コード２７２も、ＰＬＣ１００が実行可能な形式のコードである。ＰＬＣ１００は、中間コード２７２を実行する場合は、例えばインタプリタ方式に従い１行毎に解釈しながら実行する。本実施の形態では、ＰＬＣ１００は、ネイティブコード１５４を実行する場合を説明する。
【００９３】
モニタ２２４は、開発支援環境における各モジュールの実行結果の情報およびシーケンスプログラム２７１をディスプレイ２１４に表示する。シーケンスプログラム２７１がディスプレイ２１４に表示される場合、モニタ２２４は、オプション２７７が設定された呼出し命令の部分ではインライン展開されたシーケンス回路の画像を表示し、オプション２７７が設定されていない呼出し命令の部分においては、従来の呼出し命令のみが表示される。このように、ユーザーは、シーケンスプログラム２７１の１つ以上の呼出し命令を選択し、選択した呼出し命令にオプション２７７を設定することにより、シーケンスプログラム２７１の表示時には、当該呼出し命令により呼出されるＦＵＮ/ＦＢ定義２７６をインライン展開して表示させることができる。したがって、シーケンスプログラム２７１のロジックの表示画面において、当該シーケンスプログラム２７１の呼出し命令のうちユーザーが所望する１つ以上の呼出し命令の部分では、当該呼出し命令で呼出されるＦＵＮ/ＦＢ定義２７６のシーケンスロジック（例えば図９のような回路構成）を視覚化することができる。
【００９４】
また、モニタ２２４は、ＰＬＣ１００の実行状態をシーケンスプログラム２７１のシーケンスロジック（シーケンス回路）でモニタするためのオンラインモニタモジュール２３８を含む。
【００９５】
具体的には、オンラインモニタモジュール２３８は、ＰＬＣ１００からネイティブコード１５４の実行状態を示す回路出力状態１５６を取得する。すなわち、オンラインモニタモジュール２３８は、ＰＬＣ１００との間で、回路出力状態１５６を遣り取りする。そして、オンラインモニタモジュール２３８は、シーケンス回路情報２７９、定義回路情報２８０および取得した回路出力状態１５６に基づいて、ＰＬＣ１００におけるシーケンスプログラム２７１の実行状態を、ディスプレイ２１４を介し視覚化する（すなわち、オンラインモニタを提供する）。オンラインモニタにおいては、シーケンスプログラム２７１がインライン展開された回路構成を有する場合は、インライン展開されたシーケンス回路においても、シーケンスロジックの実行状態が視覚化して示される。
【００９６】
このような構成を採用することで、ユーザーは、ＰＬＣ１００で実行されるシーケンスプログラム２７１を含むユーザープログラムの実行状態を、サポート装置２００においてリアルタイムにモニタすることできる。
【００９７】
＜Ｈ．ＦＵＮ/ＦＢ定義と呼出し命令＞
図１０は、本発明の実施の形態に係るＦＵＮ/ＦＢ定義２７６の一部を模式的に示す図である。図１０を参照して、ＦＵＮ/ＦＢ定義２７６は、ＦＵＮまたはＦＢの演算に用いる引数等の変数名、入出力の別およびデータ型の定義と、シーケンスロジック２７６１とを含む。ＦＵＮ/ＦＢ定義２７６（単位プログラム）が呼出されて実行される場合、シーケンスロジック２７６１に従う演算が、定義された変数に割当てられた値を用いて実行される。実行結果は、単位プログラムからの戻り値として出力される。
【００９８】
図１１は、本発明の実施の形態に係るシーケンスプログラム２７１の一部を模式的に示す図である。図１２は、本発明の実施の形態に係るＦＵＮ/ＦＢ定義２７６の呼出し命令を用いたシーケンスプログラム２７１の一例を模式的に示す図である。図１１を参照して、シーケンスプログラム２７１は、例えば命令０、１および２を含む。命令０と命令１は、同じシーケンスロジックを記載するので、命令０，１は、当該シーケンスロジックを定義する共通部品である図１０のＦＵＮ/ＦＢ定義２７６の呼出し命令２７８で置き換えることができる（図１２参照）。
【００９９】
また、図１２のシーケンスプログラム２７１には、オプション設定モジュール２３１１により、命令０と命令１にオプション２７７が設定されているが、命令２には、オプション２７７は未設定である。この場合、モニタ２２４は、オプション２７７が設定された命令０と命令１の呼出し命令２７８についてインライン展開を実施する。これにより、命令０と命令１の呼出し命令２７８の部分において、対応のＦＵＮ/ＦＢ定義２７６のシーケンスロジック２７６１に従う回路構成の画像が表示される。
【０１００】
＜Ｉ．全体処理＞
図１３は、本発明の実施の形態に係る処理の概要を示すフローチャートである。図１３のフローチャートでは、サポート装置２００とＰＬＣ１００との処理が関連付けて示されている。
【０１０１】
図１３を参照して、ユーザーは、サポート装置２００を操作して、制御対象に応じたＰＬＣ用のシーケンスプログラム２７１を含むユーザープログラムを作成する（ステップＳ１）。具体的には、エディタ２２２は、オフラインエディットにより、ユーザー操作に従いシーケンスプログラム２７１を編集し、編集されたシーケンスプログラム２７１を記憶部２０１に格納する。オフライン編集において、オプション設定モジュール２３１１は、ユーザー操作に従い、シーケンスプログラム２７１の選択された１つ以上の呼出し命令に、オプション２７７を設定する。
【０１０２】
エディット時には、モニタ２２４は、シーケンスプログラム２７１をディスプレイ２１４に表示する（ステップＳ３）。モニタ２２４は、オプション２７７が設定された呼出し命令に対しては、インライン展開を実施する。したがって、オフラインエディット時に、オプション２７７を設定した呼出し命令の部分においては、対応のシーケンスロジック２７６１（シーケンス回路構成）が画像で視覚化される。ここでは、インライン展開されたＦＵＮ／ＦＢ定義２７６で宣言された入力および出力の変数名は、呼出し命令部分で指定されたパラメータ名を用いて表示される。
【０１０３】
なお、シーケンスプログラム２７１が表示される場合、オプション２７７が設定された呼出し命令はインライン展開がなされるが、本実施の形態では、オプション設定モジュール２３１１は、さらに、ユーザー操作に従い、呼出し命令に既に設定されたオプション２７７を有効化または無効化する。これにより、ユーザーの選択操作に従い、オプション２７７が既に設定された呼出し命令の部分において、インライン展開してシーケンスロジック２７６１（シーケンス回路構成）を表示する（オプション２７７を有効化）、または呼出し命令のまま表示する（オプション２７７を無効化）かの切替えが可能である。
【０１０４】
また、インライン展開されるＦＵＮに対しては、ユーザーはモニタ用に、インスタンス名の指定操作（指定操作しなくてもよい）をすることができる。なお、ＦＢは、インスタンス名を有するので、指定は不要である。ユーザーがインライン展開されたＦＵＮに対してインスタンス名の指定操作をすると、シーケンスプログラム２７１にインスタンス名が保持される。なお、インスタンス名が指定されていない場合、任意のユニークなインスタンス名がビルド時に割り当てられる。
【０１０５】
シーケンスプログラム２７１の作成が完了すると、ユーザー操作に従い、ビルダ２２３が起動されて、ビルド処理（ステップＴ１）が実施される。ビルダ２２３は、ビルド処理において、シーケンスプログラム２７１に対応の中間コード２７２およびオブジェクトコード２７８８を生成する。このとき、サポート装置２００は、シーケンスプログラム２７１からシーケンス回路情報２７９を併せて生成する。シーケンス回路情報２７９は、オンラインモニタを提供するために用いられる表示用の情報である。シーケンス回路情報２７９の詳細については、後述する。
【０１０６】
サポート装置２００は、シーケンスプログラム２７１に対応する中間コード２７２をＰＬＣ１００へ転送する（ステップＴ２）。
【０１０７】
ＰＬＣ１００は、サポート装置２００から中間コード２７２を受信し格納する（ステップＵ１）。ＰＬＣ１００は、受信した中間コード２７２を用いて起動処理を実施する（ステップＵ２）。このとき、ＰＬＣ１００は、中間コード２７２から、オプションが設定された各呼出し命令の行と、定義名の組を格納したオプションテーブル１１６５を生成する。
【０１０８】
ＰＬＣ１００は、ネイティブコード１５４（シーケンスプログラム２７１）を実行する（ステップＵ３）。ＰＬＣ１００においてシーケンスプログラム２７１が実行されることにより、制御対象の制御処理が実現されると、以下に示すようなオンラインモニタに係る処理が実行される。
【０１０９】
すなわち、ユーザーがサポート装置２００に対してオンラインモニタの実行を指示する。操作受付部２２１を介して受付けた実行指示により、オンラインモニタモジュール２３８が起動される。オンラインモニタモジュール２３８は、オンラインモニタ処理を実施する（ステップＰ１）。
【０１１０】
オンラインモニタモジュール２３８は、ＰＬＣ１００に対して、回路出力状態１５６を要求する（ステップＰ１１）。この要求に応答して、ＰＬＣ１００のユーザーアプリケーション１１６４は、シーケンスプログラム２７１に規定されているシーケンス回路の入出力変数に基づき、グローバル変数テーブル１５０を検索する。この検索により、実行中のシーケンスプログラム２７１（ネイティブコード１５４）の実行状態を示す回路出力状態１５６は、グローバル変数テーブル１５０から取得される。ユーザーアプリケーション１１６４は、取得された回路出力状態１５６をサポート装置２００へ送信する（ステップＵ３１）。
【０１１１】
回路出力状態１５６の値はインライン回路状態１１６６の値を含む。インライン回路状態１１６６は、実行中のシーケンスプログラム２７１においてオプション２７７が設定された各ＦＵＮ／ＦＢ定義２７６のシーケンスロジック２７６１が規定するシーケンス回路（すなわちインライン展開されたシーケンス回路）の状態の値を示す。インライン回路状態１１６６は、オプションテーブル１１６５が示す当該ＦＵＮ／ＦＢ定義２７６が呼出された各行（ライン）について、行番号と、当該行で呼出されるＦＵＮ／ＦＢ定義２７６が規定するシーケンス回路の回路出力状態の値とを含む。
【０１１２】
オンラインモニタモジュール２３８は、ＰＬＣ１００からのシーケンス回路情報、回路出力状態１５６およびインライン回路状態１１６６に基づいて、インライン展開されたシーケンス回路を含むシーケンスプログラム２７１のシーケンスをディスプレイ２１４において視覚化する（ステップＰ１２）。これにより、インライン展開されたシーケンス回路を含むシーケンスプログラム２７１全体のシーケンス回路に、回路出力状態の値を反映するパワーフロー表示を実現することができる。
【０１１３】
ユーザーは、オンラインモニタモジュール２３８が提供するディスプレイ２１４の画面から、ＰＬＣ１００でのシーケンスプログラム２７１の実行中の状態を確認することができる。
【０１１４】
本実施の形態では、シーケンスプログラム２７１においてインライン展開された呼出し命令は、（インスタンス名．ＦＵＮ／ＦＢ定義内のローカル変数名）としてではなく、（ＦＵＮ／ＦＢ定義内のローカル変数名）としてシーケンスロジックが表示される。したがって、オンラインモニタモジュール２３８は、（ＦＵＮ／ＦＢ定義内のローカル変数名）とインスタンス名の組合せに基づき、ＰＬＣ１００から（インスタンス名．ＦＵＮ／ＦＢ定義内のローカル変数名）に対応するインライン回路状態１１６６による現在値の取得を行い、インライン展開されたシーケンス回路画像においてパワーフロー表示を行う。
【０１１５】
また、オンラインモニタモジュール２３８は、シーケンスプログラム２７１においてパワーフロー表示を実施する場合、ディスプレイ２１４にウォッチウィンドウを表示して、ウォッチウィンドウにおいて（インスタンス名．ＦＵＮ／ＦＢ定義内のローカル変数名）とその現在値を出力してもよい。
【０１１６】
また、サポート装置２００は、インライン展開されたシーケンス回路画像においてのみパワーフロー表示をするように、ＰＬＣ１００に対して、インライン回路状態１１６６のみを要求してもよい。
【０１１７】
また、オンラインモニタモジュール２３８は、シーケンスプログラム２７１の全体について、パワーフロー表示するモードと、インライン展開されたシーケンス回路画像においてのみパワーフロー表示をするモードとの切替えを実施してもよい。この切替えは、たとえばユーザー操作に従い実施され得る。
【０１１８】
ＰＬＣ１００においてシーケンスプログラム２７１が実行されることにより、制御対象の制御処理が実現されると、以下に示すようなオンラインエディットに係る処理を実施することができる。
【０１１９】
すなわち、ＰＬＣ１００においてシーケンスプログラム２７１を実行中において、操作受付部２２１はユーザーから受付ける実行指示により、オンラインエディタ２３２を起動する（ステップＱ１）。オンラインエディタ２３２は、操作受付部２２１を介して受付けるユーザー操作に従い、シーケンスプログラム２７１を編集する。このとき、オンラインモニタが提供するシーケンス回路の回路出力状態値は、ユーザーが、シーケンスロジックを変更すべき箇所を判断するための視覚化された支援情報となり得る。視覚化された回路出力状態値から、例えば、ユーザーは、図９（Ａ）のシーケンス回路の故障を判断し、判断した故障箇所を、図９（Ｂ）または（Ｃ）のように変更することができる。オンラインエディタ２３２は、操作受付部２２１から受付けたユーザー操作に従い、シーケンスプログラム２７１を変更（編集）する。変更後のシーケンスプログラム２７１は、記憶部２０１に格納される。
【０１２０】
ユーザー操作に従い、ビルダ２２３が起動される。ビルダ２２３は、オンラインエディット処理がなされたシーケンスプログラム２７１のビルド処理を実行する（ステップＲ１）。ビルダ２２３は、ビルド処理により得られた中間コード２７２を記憶部２０１に格納するとともに、ＰＬＣ１００に転送する（ステップＲ２）。
【０１２１】
転送後は、サポート装置２００は、例えばユーザー操作に従い処理を終了するか否かを判断し（ステップＲ３）、終了すると判断した場合は（ステップＲ３でＹＥＳ）、処理を終了する。終了しないと判断した場合は（ステップＲ３でＮＯ）、ステップＰ１等の次の処理に移行する。
【０１２２】
ＰＬＣ１００は、サポート装置２００からオンラインエディット後の中間コード２７２を受信するかを判断する（ステップＵ４）。ＰＬＣ１００は、サポート装置２００から中間コード２７２を受信した場合（ステップＵ４でＹＥＳ）、受信した中間コード２７２を格納し（ステップＵ５）、その後、ステップＵ２に移行する。これにより、オンラインエディット後のシーケンスプログラム２７１に従う制御対象の制御、およびオンラインモニタ処理を実施することができる。
【０１２３】
なお、中間コード２７２を受信しなかった場合（ステップＵ４でＮＯ）、処理を終了する。
【０１２４】
（ｉ１．オンラインエディット処理）
図１４は、本発明の実施の形態に係るオンラインエディット処理を説明するフローチャートである。図１４を参照して、図１３のオンラインエディット処理（ステップＱ１）を詳細に説明する。なお、オンラインエディットの対象は、呼出し命令部分においてインライン展開されたシーケンスロジックまたはライブラリ２７５のＦＵＮ／ＦＢ定義２７６であるとする。インライン展開されたシーケンスロジックまたはＦＵＮ／ＦＢ定義２７６のオンラインエディットは、ロジック回路構成または入出力変数の作成または編集（追加、変更、削除など）を含む。
【０１２５】
まず、オンラインエディタ２３２は、起動されると、操作受付部２２１が受付けたユーザー操作に基づき、エディット対象はインライン展開されたシーケンスロジックの局所（部分）であるか、ＦＵＮ／ＦＢ定義２７６の定義内容であるかを判断する（ステップＱ１１）。
【０１２６】
局所であると判断すると（ステップＱ１１で（局所））、オンラインエディタ２３２は、ユーザー操作に従い、１つ以上の呼出し命令部分においてインライン展開されたシーケンスロジックを編集し（ステップＱ１３）、局所フラグテーブル２７３の非同期フラグ２７３３に「１」を設定する（ステップＱ１７）。具体的には、オンラインエディタ２３２は、ステップＱ１３で編集がなされた各呼出し命令の部分について、当該呼出し命令の部分で、呼出されていたＦＵＮ／ＦＢ定義２７６の名称である呼出名前２７３１、当該呼出し命令が記述されていた行（ライン）の位置２７３２および非同期フラグ２７３３を関連付けて、局所フラグテーブル２７３に登録する。この登録時に、オンラインエディタ２３２は、非同期フラグ２７３３に「１」を設定する。
【０１２７】
エディタ２２２は、ユーザー操作に従い、シーケンスプログラム２７１における非同期である呼出し命令の部分を一覧表示するようモニタ２２４に指示する（ステップＱ１９）。具体的には、エディタ２２２は、シーケンスプログラム２７１を走査することにより、局所フラグテーブル２７３の位置２７３２で示す呼出し命令のうち、対応の非同期フラグが「１」である呼出し命令の位置２７３２を示す位置情報をモニタ２２４に出力する。モニタ２２４は、ディスプレイ２１４に表示中のシーケンスプログラム２７１において、エディタ２２２からの位置情報が示す各行の呼出し命令部を予め定められた表示態様（例えば、反転表示等）に変更する。
【０１２８】
上記の一覧表示は、シーケンスプログラム２７１においてインライン展開されシーケンスロジックのうち、当該シーケンスロジックを対応のＦＵＮ／ＦＢ定義２７６の内容に反映するものをユーザーが判断するための支援情報を提供する。
【０１２９】
オンラインエディタ２３２は、操作受付部２２１が受付けるユーザー操作に従い、ＦＵＮ／ＦＢ定義２７６の内容を変更するか否かを判断する（ステップＱ２１）。オンラインエディタ２３２は、ＦＵＮ／ＦＢ定義２７６の定義内容を変更しないと判断すると（ステップＱ２１でＮＯ）、処理を終了する。
【０１３０】
一方、オンラインエディタ２３２は、ＦＵＮ／ＦＢ定義２７６の定義内容を変更すると判断すると（ステップＱ２１でＹＥＳ）、ＰＬＣ１００のライブラリ２７５のＦＵＮ／ＦＢ定義２７６を変更する（ステップＱ２３）。具体的には、オンラインエディタ２３２は、局所フラグテーブル２７３から、非同期フラグ２７３３が「１」である呼出名前２７３１を抽出する。オンラインエディタ２３２は、抽出した呼出名前２７３１に基づき、ライブラリ２７５を検索する。検索により、呼出名前２７３１に対応するＦＵＮ／ＦＢ定義２７６を特定し、特定したＦＵＮ／ＦＢ定義２７６の定義内容を、ステップＱ１３で受付けた編集内容を用いて変更する。この変更は、ＦＵＮ／ＦＢ定義２７６の定義内容を、インライン展開されたシーケンスロジックの編集（変更）後の内容に一致させる（コピーする）ことも含み得る。オンラインエディタ２３２は、変更がなされた呼出し命令の部分に対応した非同期フラグ２７３３を「１」から「０」に変更する。
【０１３１】
ステップＱ１１に戻る。一方、オンラインエディタ２３２は、ＦＵＮ／ＦＢ定義２７６の編集であると判断すると（ステップＱ１１で（定義））、オンラインエディタ２３２は、ユーザー操作に従い、ライブラリ２７５の１つ以上のＦＵＮ／ＦＢ定義２７６の定義内容を編集することにより変更し（ステップＱ２５）、定義フラグテーブル２７４の定義非同期フラグ２７４２に「１」を設定する（ステップＱ２７）。具体的には、オンラインエディタ２３２は、ステップＱ２５で編集がなされたＦＵＮ／ＦＢ定義２７６の名称である定義名２７４１および定義非同期フラグ２７４２を関連付けて、定義フラグテーブル２７４に登録する。この登録時に、オンラインエディタ２３２は、定義非同期フラグ２７４２を「１」に設定する。
【０１３２】
オンラインエディタ２３２は、ユーザー操作に従い、シーケンスプログラム２７１の対応するインライン展開部のシーケンスロジックを、ＦＵＮ／ＦＢ定義２７６の変更後の定義内容を用いて変更するか否かを判断する（ステップＱ２９）。オンラインエディタ２３２は、変更しないと判断した場合（ステップＱ２９でＮＯ）、処理は終了する。
【０１３３】
一方、オンラインエディタ２３２は、インライン展開部のシーケンスロジックを変更すると判断すると（ステップＳＱ２９でＹＥＳ）、オンラインエディタ２３２は、シーケンスプログラム２７１のインライン展開されたシーケンスロジックの回路を、対応のＦＵＮ／ＦＢ定義２７６の変更後の定義内容に一致するように更新する（ステップＱ３１）。具体的には、オンラインエディタ２３２は、定義回路情報２８０を、ＦＵＮ／ＦＢ定義２７６の変更後の定義内容を用いて変更する。これにより、定義回路情報２８０は、ＦＵＮ／ＦＢ定義２７６の変更後の定義内容を示すシーケンス回路構成を表す情報に更新される。また、オンラインエディタ２３２は、モニタ２２４に、インライン展開部の表示更新を指示する。モニタ２２４は、指示に応じて、シーケンスプログラム２７１のインライン展開部のシーケンス回路構成の画像を、更新後の定義回路情報２８０を用いて更新する。ステップＱ３１では、オンラインエディタ２３２は、局所フラグテーブル２７３に登録されている全ての非同期フラグ２７３３を「０」にセットする。
【０１３４】
このように、オンラインエディタ２３２およびモニタ２２４は、ディスプレイ２１４に表示中のシーケンスプログラム２７１のインライン展開部のシーケンス回路構成の画像を、変更後のＦＵＮ／ＦＢ定義２７６のシーケンスロジックが規定する回路構成の画像に、一括して更新する。これにより、インライン展開部のシーケンスロジックの回路構成の画像が、ＦＵＮ／ＦＢ定義２７６の変更（編集）後の定義内容を示すように更新される。この更新がなされる場合に、シーケンスプログラム２７１の周辺回路と当該シーケンスロジックの回路との関連性の確認も可能とするような視覚化情報の提供も可能となる。
【０１３５】
（ｉ１−１．局所エディットの具体例）
図１４のステップＱ２３では、ＦＵＮ／ＦＢ定義２７６の定義内容の変更について、２つのケースのいずれかを実施することができる。１つ目のケースでは、シーケンスプログラム２７１に非同期である呼出し命令の部分が複数個あった場合に、複数個の呼出し命令の部分の全てを対象に、対応のＦＵＮ／ＦＢ定義２７６の定義内容の変更を実施する。２つ目のケースでは、複数個の呼出し命令の部分の全てを対象に定義内容の変更を実施するのではなく、複数個の呼出し命令の部分のうちユーザー操作により選択され１つ以上の呼出し命令の部分を対象に、対応のＦＵＮ／ＦＢ定義２７６の定義内容の変更を実施する。
【０１３６】
２つ目のケースにおいて、選択された１以上の呼出し命令の部分を対象に、対応のＦＵＮ／ＦＢ定義２７６の定義内容の変更を実施する場合を説明する。このケースでは、ユーザー操作により選択されなかった呼出し命令部分に対応のＦＵＮ／ＦＢ定義２７６は更新されず、シーケンスプログラム２７１の呼出し命令部分でインライン展開されたシーケンスロジックのみが変更される。この際、オンラインエディタ２３２はユーザー変更後のシーケンスロジックを、シーケンスプログラム２７１に新しく保存（上書き等）する。また、局所フラグテーブル２７３の対応の非同期フラグ２７３３を、非同期状態を示す「１」のままとする。
【０１３７】
ビルダ２２３は、変更後のシーケンスロジックを有するシーケンスプログラム２７１をビルド処理する。ビルド処理では、ビルダ２２３は、対応のＦＵＮ／ＦＢ定義２７６は更新されなかったインライン展開部のシーケンスロジックのローカル変数名は（インスタンス名．ＦＵＮ／ＦＢ定義内のローカル変数名）としてビルドする。ビルドして得られた中間コード２７２はＰＬＣ１００に転送される。ＰＬＣ１００では、サポート装置２００から受信する中間コード２７２に基づくネイティブコード１５４を生成し、ＰＬＣ１００はシーケンスプログラム２７１（ネイティブコード１５４）を実行する。サポート装置２００のオンラインモニタモジュール２３８は、ＰＬＣ１００から、回路出力状態１５６を受信し、受信した回路出力状態１５６を用いて、上記の非同期状態のインライン展開部のシーケンスロジックにおいてパワーライン表示を実施する。ユーザーは、このように視覚化された回路出力状態１５６から、非同期状態のインライン展開部のシーケンスロジックを用いて、対応のＦＵＮ／ＦＢ定義２７６を更新するか否かを判断するための支援情報を得ることができる。
【０１３８】
なお、局所エディットのメインユースケースとして、本実施の形態では、オンラインエディット時に適用するケースを記載するが、ユースケースはオンラインエディットに限定されない。具体的には、インライン展開された内容と対応のＦＵＮ／ＦＢ定義２７６の定義内容とが一致している場合において、ユーザーは、オンラインエディット時にＦＵＮ／ＦＢ定義２７６の変更を反映させたくない場合は、予め定められた操作をすることにより、非同期状態とすることができる。
【０１３９】
（ｉ２．ビルド処理）
図１５は、本発明の実施の形態に係るビルド処理を説明するフローチャートである。図１５を参照して、図１３のオンラインエディット後のビルド処理（ステップＲ１）を詳細に説明する。図１５のビルド処理は、主に、呼出し命令部の処理を主体に説明する。
【０１４０】
ビルダ２２３は、シーケンスプログラム２７１を先頭から１行ごとに走査する（ステップＲ１１）。走査により呼出し命令部を検出すると（ステップＲ１３でＹＥＳ）、ステップＲ１５に移行するが、呼出し命令部を検出しない場合は（ステップＲ１３でＮＯ）、ステップＲ２３に移行する。
【０１４１】
ステップＲ１５では、ビルダ２２３は、呼出し命令部のオプション２７７の設定の有無を判断する（ステップＲ１５）。呼出し命令部にオプション２７７が設定されていないと判断されると（ステップＲ１５で無）、ステップＲ２１に移行する。オプション２７７が設定されていると判断されると（ステップＲ１５で有）、ビルダ２２３は、当該呼出し命令部で呼出されるＦＵＮ／ＦＢ定義２７６がオンラインエディット中であるかを、定義フラグテーブル２７４の対応の定義非同期フラグ２７４２が「１」であるか否かに基づき判断する（ステップＲ１７）。
【０１４２】
定義非同期フラグ２７４２が「１」であり、オンラインエディット中であると判断すると（ステップＲ１７でＹＥＳ）、ステップＲ２１に移行する。ステップＲ２１では、ビルダ２２３は、当該呼出し命令部に、予め定められた（通常の）呼出し命令のコードを割当てる。定義非同期フラグ２７４２が「０」である、すなわちオンラインエディット中ではないと判断すると（ステップＲ１７でＮＯ）、ビルダ２２３は、この呼出し命令部に、対応のＦＵＮ／ＦＢ定義２７６のシーケンスロジック２７６１に従うコードを割当てる（ステップＲ１９）。この割当られたコードでは、ＦＵＮ／ＦＢ定義２７６により定義されるローカル変数名は、（インスタンス名．ＦＵＮ／ＦＢ定義内のローカル変数名）が割当られる。
【０１４３】
ビルダ２２３は、シーケンスプログラム２７１の全ての行の走査が終了したか否かを判断し、走査終了していないと判断すると（ステップＲ２３でＮＯ）、ステップＲ１１に戻る。一方、ビルダ２２３は、走査終了と判断すると（ステップＲ２３でＹＥＳ）、ビルダ２２３は、シーケンスプログラム２７１から中間コード２７２を生成する（ステップＲ２５）。
【０１４４】
上記のビルド処理におけるステップＲ１７，Ｒ２１についてさらに説明する。ステップＲ１７で、ビルダ２２３は、呼出し命令部で呼出されるＦＵＮ／ＦＢ定義２７６の対応の定義非同期フラグ２７４２が「１」であると判断すると（ステップＲ１７でＹＥＳ）、当該呼出し命令部に通常の呼出し命令のコードを割当て（ステップＲ２１）、ビルド処理を実施する。これにより、通常の呼出し命令により、ＦＵＮ／ＦＢ定義２７６のオンラインエディットがされたシーケンスロジックを実行することができる。また、インライン展開される（オプション２７７が設定された呼出し命令部の）シーケンスロジックにもオンラインエディットによる変更を加えることができる。
【０１４５】
（ｉ３．シーケンス回路情報）
図２０は、本実施の形態に係るシーケンス回路情報の一例を模式的に示す図である。図２０を参照して、例えば、ＰＬＣ用のユーザープログラムで規定される回路毎に含まれる回路部品の情報が記述される。
【０１４６】
図２０には、１つの接点２７８１と１つのコイル２７９１とからなる回路の例を示す。この例において、シーケンス回路情報２７９の回路定義２８１１は、「回路」などの種別を示す種別情報２８２１と、各回路に含まれる回路部品の情報を示す回路部品情報２８３１，２８４１とを含む。図２０に示される回路定義２８１１が、シーケンスプログラム２７１に規定される回路の数だけ繰返されることになる。
【０１４７】
同様に、定義回路情報２８０も、ＦＵＮ／ＦＢ定義２７６のシーケンスロジック２７６１で規定される回路構成の数だけ回路定義が繰返されている。なお、図２０に示す回路定義２８１１の記載例は一例であり、どのようなフォーマットに従ってもよい。
【０１４８】
＜Ｊ．ＰＬＣでのプログラム実行開始タイミング＞
本実施の形態では、オンラインエディットによる変更後のシーケンスプログラム２７１（中間コード２７２）をＰＬＣ１００へ転送し、ＰＬＣ１００が変更後のシーケンスプログラム２７１の実行をする場合、実行開始のタイミングを適宜設定することができる。
【０１４９】
図１６は、本発明の実施の形態に従うオンラインエディット機能によって転送された制御プログラムの実行開始タイミングを説明するための図である。この制御プログラムは、シーケンスプログラム２７１を含む概念である。図１６には、Ｓ−Ａ，Ｓ−Ｂ，Ｓ−Ｃで示す３つのシーケンスプログラム２７１を転送する場合の処理例を示す。
【０１５０】
図１６には、それぞれのシーケンスプログラム２７１の転送が完了されると、当該転送が完了したシーケンスプログラム２７１の実行が開始される例を示す。図１６において、矢印（→）の１個分が、タスクスケジューラ１１４２によるタスクの実行周期の１回分を示す。また、図１６の「チェック」のステップは、プログラムマネージャ１１４４により実行される。
【０１５１】
プログラムマネージャ１１４４は、「チェック」のステップにおいて、図１３のステップＴ２，Ｒ２において、サポート装置２００から転送されたシーケンスプログラム２７１の受信が完了するか否かを判断する。すなわち、エディットされたシーケンスプログラム２７１のサイズは可変である等様々な要因により、当該転送に係る時間はばらつく。このような時間のばらつきがあるとしても、ＰＬＣ１００においてシーケンスプログラム２７１に従うタスクの実行サイクルが維持されるように、プログラムマネージャ１１４４は、転送によるシーケンスプログラム２７１の受信を完了したときに受信完了のタイミング信号を、タスクスケジューラ１１４２に出力する。タスクスケジューラ１１４２は、プログラムマネージャ１１４４からタイミング信号を受信し、且つ実行周期が到来したとき、転送されたシーケンスプログラム２７１を実行可能な状態に移行させる。
【０１５２】
図１６では、シーケンスプログラム２７１を転送するケースを説明したが、ライブラリ２７５のＦＵＮ／ＦＢ定義２７６をサポート装置２００においてオンラインエディットし、その後、ＰＬＣ１００に転送する場合も、図１６と同様に、プログラムマネージャ１１４４は受信が完了したことを検知し、タイミング信号を出力する。タスクスケジューラ１１４２は、プログラムマネージャ１１４４からタイミング信号を受信し、且つ実行周期が到来したとき、転送されたＦＵＮ／ＦＢ定義２７６を呼出し可能な状態に移行させる。
【０１５３】
＜Ｋ．プログラム＞
本実施の形態に示した各フローチャートの処理を実行するための開発支援環境を提供するサポートプログラムは、サポート装置２００の記憶部２０１に格納されている。ＣＰＵ２０２は、記憶部２０１からサポートプログラム７００，７１０を読出し、実行することにより、本実施の形態で説明した各部を実現することが可能となる。
【０１５４】
サポートプログラム７００，７１０は、サポート装置２００に付属するフレキシブルディスク、ＣＤ−ＲＯＭ（Compact  Disk-Read  Only  Memory）、ＲＯＭ、ＲＡＭおよび記録媒体２５０などのコンピュータ読取り可能な記録媒体にて記録させて、プログラム製品として提供することもできる。記録媒体２５０は、コンピュータその他装置、機械等が記録されたプログラム等の情報を読み取り可能なように、当該プログラム等の情報を、電気的、磁気的、光学的、機械的または化学的作用によって蓄積する媒体である。
【０１５５】
また、サポートプログラム７００，７１０は、サポート装置２００に内蔵するＨＤＤ２０８などの記録媒体にて記録させて、プログラムを提供することもできる。また、図示しないネットワークから通信インターフェイスを介したダウンロードによって、プログラムを提供することもできる。
【０１５６】
＜Ｌ．利点＞
図１７、図１８および図１９は、本発明の実施の形態に係る開発支援環境により奏される利点を説明する図である。図１７〜図１９は、実行された場合に、いずれも同じ実行結果を出力するシーケンスプログラム２７１の一例である、図１７〜図１９では、実行結果の出力であるパワーフロー表示が太いラインで示されている。
【０１５７】
具体的には、図１７では命令０と命令１において、シーケンスロジックが記述されているので、パワーフローが把握し易いが、プログラムの開発効率の点では、このような同じシーケンスロジックは部品化したいとの要望がある。図１８は、この要望に応えたケースであり、命令０と命令１では、当該シーケンスロジックを定義したＦＵＮ／ＦＢ定義２７６（部品）はライブラリ２７５から呼出し実行する呼出し命令に置換されている。図１８では、ライブラリ２７５のＦＵＮ／ＦＢ定義２７６（部品）を編集することで、シーケンスプログラム２７１の命令０と命令１で呼出されるＦＵＮ／ＦＢ定義２７６（部品）に当該編集内容を同時に反映することができる。
【０１５８】
しかしながら、図１８の命令０と命令１は、共通の呼出し命令が、内部のシーケンスロジックを記載しない部品画像で表示されるが、部品中のシーケンスロジックの実行結果を示すパワーラインを確認したいとの要望がある。また、命令０のシーケンスロジックを変更しても、命令１のシーケンスロジックは変更したくないとの要望もある。図１９はこの両方の要望に応えた本実施の形態に係る開発支援環境により作成可能なシーケンスプログラム２７１である。
【０１５９】
図１９では、命令０と命令１は、同じＦＵＮ／ＦＢ定義２７６を呼出す呼出し命令を示すが、呼出し命令部ではＦＵＮ／ＦＢ定義２７６のシーケンスロジック２７６１がインライン展開されている。オンラインモニタモジュール２３８は、インライン展開されたシーケンスロジックにおいて、その実行結果を示すパワーライン表示を実施する。また、（ｉ１−１．局所エディットの具体例）で説明したように、オンラインエディタ２３２により、命令０のインライン展開されたシーケンスロジックを編集したとしても、命令１のシーケンスロジックには当該編集後の内容で変更しないことも可能となる。
【０１６０】
＜Ｍ．変形例＞
本発明の実施の形態に係る変形例を説明する。
【０１６１】
本実施の形態では、サポート装置２００は、シーケンスプログラム２７１にインライン展開された非同期のシーケンスロジックを、ライブラリ２７５の対応のＦＵＮ／ＦＢ定義２７６の定義内容（シーケンスロジック２７６１等）と、ソースプログラムとして比較し、その差異を示す情報を出力する。
【０１６２】
また、本実施の形態では、インライン展開されたシーケンスロジックを、エディットにより変更した場合、変更後のシーケンスロジックを、ライブラリ２７５の対応のＦＵＮ／ＦＢ定義２７６からは独立した完全なローカルロジックとして、シーケンスプログラム２７１に追加する。この際、サポート装置２００は、対応のＦＵＮ／ＦＢ定義２７６のローカル変数を、当該ＦＵＮ／ＦＢ定義２７６の呼出し命令コード部の変数テーブルにマージする。
【０１６３】
また、本実施の形態に係る開発支援環境では、モニタ２２４を備える、モニタ２２４は必須の構成要件としない開発支援環境であってもよい。すなわち、少なくともエディタ２２２（より特定的には、局所エディタ２３３）を備える開発支援環境として提供されてもよい。
【０１６４】
局所エディタ２３３では、シーケンスプログラム２７１にインライン展開された部品（ＦＵＮ／ＦＢ定義２７６）を対象に処理を実施する。その一方で、インライン展開される部品が増加すると、当該シーケンスプログラム２７１に記述される変数が増加し、このような変数増加に伴い、メモリの使用量が増加する。このようなメモリ使用量の増加に対処するために、当該変数名は、（インスタンス名．ＦＵＮ／ＦＢ定義内のローカル変数名）として記述するのではなく、（ＦＵＮ／ＦＢ定義内のローカル変数名）として短縮化することで、変数増加に伴うメモリの使用量を減らすことが可能になる。また、ビルダ２２３は、同期中はインライン展開を利用せずに、局所エディタ２３３で局所変更する場合のみにインライン展開化してビルド処理を実施することで、ビルド処理対象のシーケンスプログラム２７１のステップ数を減らすことが可能となる。
【０１６５】
＜Ｎ．付記＞
上述したような本実施の形態は、以下のような技術思想を含む。
［構成１］
制御対象を制御する制御装置（１００）で実行されるシーケンスプログラム（２７１）の開発を支援するサポート装置（２００）であって、
前記シーケンスプログラムは、当該シーケンスプログラムを構成する単位プログラム（２７６）の呼出し命令を含み、
前記サポート装置は、
前記サポート装置に対する操作を受付ける操作受付部（２２１）と、
前記シーケンスプログラムの表示時に、前記単位プログラムの呼出し命令を、当該単位プログラムが定義するシーケンスロジックが示す回路に展開して表示するモニタ部（２２４）と、
表示される前記回路を変更する操作に従い、前記シーケンスロジックを変更後の回路を表すシーケンスロジックに変更するエディタ部（２２２）と、
前記シーケンスプログラムを実行可能コードに変換するコード変換部（２２３）と、を備え、
前記コード変換部は、
切替えオプションに従い、前記シーケンスプログラム中の呼出し命令に、前記変更後のシーケンスロジックのコードおよび呼出し命令コードの一方を割当てて前記変換を実施する、サポート装置。
［構成２］
設定操作に従い、前記シーケンスプログラムの呼出し命令に前記切替えオプションを設定する設定部（２３１１）をさらに備え、
前記モニタ部は、
前記シーケンスプログラムを表示する場合に、前記呼出し命令に前記切替えオプションが設定されているとき、当該呼出し命令を前記回路に展開して表示する、構成１に記載のサポート装置。
［構成３］
前記制御装置は、前記単位プログラムのシーケンスロジックのコードを呼出し可能に格納するライブラリ（２７５）を備え、
前記ライブラリに格納される前記シーケンスロジックのコードを、前記変更後のシーケンスロジックのコードを用いて変更する、構成１または２に記載のサポート装置。
［構成４]
前記制御装置は、前記単位プログラムのシーケンスロジックのコードを呼出し可能に格納するライブラリ（２７５）を備え、
前記シーケンスプログラムは、１つ以上の前記呼出し命令を含み、
選択操作に従い、前記１つ以上の呼出し命令のうち、前記ライブラリのシーケンスロジックのコードの変更に用いる前記変更後のシーケンスロジックを有する呼出し命令を選択する、構成１から３のいずれか１に記載のサポート装置。
［構成５］
前記１つ以上の呼出し命令のうち前記エディタ部によりシーケンスロジックの変更がなされた呼出し命令の一覧を表示する、構成４に記載のサポート装置。
［構成６］
前記モニタ部は、
前記制御装置から前記単位プログラムが定義するシーケンスロジックの実行状態を示す回路出力状態（１５６；１１６６）を取得するとともに、前記単位プログラムが定義するシーケンスロジックが示す回路および取得した前記回路出力状態に基づいて、前記制御装置における当該シーケンスロジックの実行状態を、前記展開された回路において視覚化する、構成１から５のいずれか１に記載のサポート装置。
［構成７］
制御対象を制御する制御装置（１００）で実行されるシーケンスプログラム（２７１）の開発の支援に向けられたサポートプログラム（７１０）であって、
前記シーケンスプログラムは、当該シーケンスプログラムを構成する単位プログラム（２７６）の呼出し命令を含み、
前記サポートプログラムはコンピュータ（２００）に、
前記コンピュータに対する操作を受付けるステップと、
前記シーケンスプログラムの表示時に、前記単位プログラムの呼出し命令を、当該単位プログラムが定義するシーケンスロジックが示す回路に展開して表示するステップと、
表示される前記回路を変更する操作に従い、前記シーケンスロジックを変更後の回路を表すシーケンスロジックに変更するステップと、
前記シーケンスプログラムを実行可能コードに変換するステップと、を備え、
前記実行可能コードに変換するステップは、
切替えオプションに従い、前記シーケンスプログラム中の呼出し命令に、前記変更後のシーケンスロジックのコードおよび呼出し命令コードの一方を割当てて前記変換を実施するステップを含む、サポートプログラム。
【０１６６】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は、上記した説明ではなく、特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【符号の説明】
【０１６７】
１００  ＰＬＣ、１１２Ａ，２７１  シーケンスプログラム、１３０  ラダーセクション、１５０  グローバル変数テーブル、１５４  ネイティブコード、１５６  回路出力状態、２７９  シーケンス回路情報、２００  サポート装置、２２１  操作受付部、２２２  エディタ、２２３  ビルダ、２２４  モニタ、２７７  オプション、２３２  オンラインエディタ、２３３  局所エディタ、２３４  定義エディタ、２３８  オンラインモニタモジュール、２７２  中間コード、２７３  局所フラグテーブル、２７４  定義フラグテーブル、２７５  ライブラリ、２７６  ＦＵＮ／ＦＢ定義、２７８  呼出し命令、２８０  定義回路情報、１１４２  タスクスケジューラ、１１４４  プログラムマネージャ、１１６５  オプションテーブル、２７６１  シーケンスロジック。
【図１】
2020201636.tif 000003
【図２】
2020201636.tif 000004
【図３】
2020201636.tif 000005
【図４】
2020201636.tif 000006
【図５】
2020201636.tif 000007
【図６】
2020201636.tif 000008
【図７】
2020201636.tif 000009
【図８】
2020201636.tif 000010
【図９】
2020201636.tif 000011
【図１０】
2020201636.tif 000012
【図１１】
2020201636.tif 000013
【図１２】
2020201636.tif 000014
【図１３】
2020201636.tif 000015
【図１４】
2020201636.tif 000016
【図１５】
2020201636.tif 000017
【図１６】
2020201636.tif 000018
【図１７】
2020201636.tif 000019
【図１８】
2020201636.tif 000020
【図１９】
2020201636.tif 000021
【図２０】
2020201636.tif 000022
【図２１】
2020201636.tif 000023